:root{
  --bg-0:#07070b;
  --bg-1:#0d0e14;
  --bg-2:#12131b;
  --bg-3:#191b25;
  --bg-4:#21243040;
  --line:#272a38;
  --line-soft:#1d2029;
  --ink:#e7e8ee;
  --ink-dim:#9ea1b2;
  --ink-mute:#61657a;
  --accent-a:#9b5cff;
  --accent-b:#22d3ee;
  --accent-warn:#ffb84c;
  --accent-danger:#ff5d6c;
  --grad: linear-gradient(90deg, var(--accent-a), var(--accent-b));
  --shadow-soft: 0 1px 0 rgba(255,255,255,0.04) inset, 0 10px 30px rgba(0,0,0,0.5);
}

*{box-sizing:border-box}
html,body{margin:0;padding:0;background:#000;color:var(--ink);font-family:'Manrope',system-ui,sans-serif;overflow:hidden;height:100%;width:100%;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
body{display:grid;place-items:center}

/* Fit 1024x600 to viewport */
#viewport-frame{
  width:1024px;height:600px;
  background:var(--bg-0);
  transform-origin:center center;
  box-shadow: 0 0 0 1px #1a1c26, 0 40px 120px rgba(0,0,0,0.8);
  border-radius: 10px;
  overflow:hidden;
}

#root{width:100%;height:100%;}

/* ---------- Utility ---------- */
.row{display:flex;align-items:center}
.col{display:flex;flex-direction:column}
.gap-2{gap:2px}.gap-4{gap:4px}.gap-6{gap:6px}.gap-8{gap:8px}.gap-10{gap:10px}.gap-12{gap:12px}.gap-16{gap:16px}
.flex1{flex:1}
.mono{font-family:'JetBrains Mono',monospace;letter-spacing:.02em}
.tech{font-family:'Rajdhani',sans-serif;letter-spacing:.08em;text-transform:uppercase;font-weight:600}

/* ---------- Header ---------- */
.app{display:flex;flex-direction:column;width:100%;height:100%;background:
  radial-gradient(1200px 400px at 20% -10%, #1a1430 0%, transparent 60%),
  radial-gradient(900px 400px at 100% 110%, #072a30 0%, transparent 60%),
  var(--bg-0);
}
.topbar{
  height:40px;min-height:40px;
  display:flex;align-items:center;gap:7px;
  padding:0 8px;
  background:linear-gradient(180deg,#0c0d15 0%, #090a11 100%);
  border-bottom:1px solid var(--line-soft);
  position:relative;z-index:2;
}
.logo-wrap{display:flex;align-items:center;gap:10px}
.logo-mark{
  width:26px;height:26px;border-radius:6px;
  background:linear-gradient(135deg,#1a0f33, #072a30);
  border:1px solid #2a2540;
  display:grid;place-items:center;
  position:relative;overflow:hidden;
}
.logo-mark::before{
  content:"";position:absolute;inset:-1px;
  background:conic-gradient(from 180deg, var(--accent-a), var(--accent-b), var(--accent-a));
  opacity:.3;filter:blur(6px);
}
.logo-mark svg{position:relative;z-index:1}
.logo-name{display:flex;flex-direction:column;line-height:1}
.logo-name .brand{font-family:'Rajdhani';font-weight:700;letter-spacing:.07em;font-size:12px;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.logo-name .tagline{font-family:'JetBrains Mono';font-size:7px;color:var(--ink-mute);margin-top:1px;letter-spacing:.10em;text-transform:uppercase}

.nav-title{
  font-family:'Rajdhani';font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink);font-size:11px;
}
.nav-sub{
  font-family:'JetBrains Mono';font-size:10px;color:var(--ink-mute);letter-spacing:.08em;
}

.tb-chip{
  display:inline-flex;align-items:center;gap:5px;
  height:24px;padding:0 7px;border-radius:5px;
  background:var(--bg-2);border:1px solid var(--line-soft);
  font-family:'JetBrains Mono';font-size:9px;color:var(--ink-dim);letter-spacing:.06em;
  white-space:nowrap;flex-shrink:0;
}
.tb-chip.midi-active .dot{background:var(--accent-b);box-shadow:0 0 8px var(--accent-b)}
.tb-chip .dot{width:5px;height:5px;border-radius:999px;background:#3a3d4c;transition:all .15s}
.tb-chip .dot.bass{background:#ff6acb;box-shadow:0 0 8px #ff6acb}

/* Per-core CPU chip — 4 vertical bars + percent labels.
 * Layout is fixed (no flex-grow on numbers, tabular-nums for digits) so a
 * jumping value can never reflow the topbar. */
.tb-chip.cpu-cores{
  gap:3px;padding:0 5px;
  font-variant-numeric:tabular-nums;
  contain:layout style;
}
.tb-chip.cpu-cores .cpu-label{
  color:var(--ink-mute);font-size:7px;letter-spacing:.10em;font-weight:700;
  margin-right:1px;
}
.tb-chip.cpu-cores .cpu-bar-wrap{
  display:inline-flex;flex-direction:column;align-items:center;gap:1px;
  width:13px;
}
.tb-chip.cpu-cores .cpu-bar{
  width:3px;height:11px;border-radius:1px;background:#0a0b11;
  border:1px solid var(--line-soft);position:relative;overflow:hidden;
}
.tb-chip.cpu-cores .cpu-fill{
  position:absolute;left:0;right:0;bottom:0;
  height:0%;
  background:linear-gradient(0deg,#22d3ee 0%,#9b5cff 70%,#ff5d6c 95%);
  will-change:height;
}
.tb-chip.cpu-cores .cpu-pct{
  /* Reserve room for "100" — three character widths in tabular-nums plus
   * a tiny gutter — so a value rolling 9 → 10 → 100 never shifts the
   * neighbours. inline-block + text-align:right keeps short numbers
   * right-aligned in their slot. */
  display:inline-block;width:2.4ch;text-align:right;
  font-size:6.5px;color:var(--ink-mute);letter-spacing:0;
  font-variant-numeric:tabular-nums;
}

.tb-btn{
  height:24px;padding:0 9px;border-radius:5px;
  background:var(--bg-2);border:1px solid var(--line-soft);color:var(--ink-dim);
  font-family:'Rajdhani';font-weight:600;font-size:9px;letter-spacing:.08em;text-transform:uppercase;
  display:inline-flex;align-items:center;gap:5px;cursor:pointer;
  transition:all .12s;
  white-space:nowrap;flex-shrink:0;
}
.tb-btn:hover{border-color:var(--accent-a);color:var(--ink)}
.tb-btn.is-active{
  color:var(--ink);border-color:transparent;
  background:linear-gradient(180deg,#1a1230,#0f0a1f);
  box-shadow:inset 0 0 0 1px var(--accent-a), 0 0 14px rgba(155,92,255,.25);
}
.tb-btn.ghost{background:transparent}
.tb-btn.icon-only{width:32px;padding:0;justify-content:center}

/* GTR Guitar Mode toggle chip on GUITAR-category soundmap rows */
.gtr-chip{
  height:20px;padding:0 6px;border-radius:5px;
  background:var(--bg-2);border:1px solid var(--line-soft);color:var(--ink-mute);
  font-family:'Rajdhani';font-weight:700;font-size:8px;letter-spacing:.1em;text-transform:uppercase;
  display:inline-flex;align-items:center;cursor:pointer;
  transition:all .12s;white-space:nowrap;flex-shrink:0;
}
.gtr-chip:hover{border-color:var(--accent-a);color:var(--ink)}
.gtr-chip.on{
  color:var(--ink);border-color:transparent;
  background:linear-gradient(180deg,#1a1230,#0f0a1f);
  box-shadow:inset 0 0 0 1px var(--accent-a), 0 0 10px rgba(155,92,255,.3);
}

/* Floating preset picker popover — opened by tapping the GTR chip. Absolutely
   positioned so it never widens/overflows the soundmap row. */
.gtr-menu{
  position:absolute; top:26px; right:0; z-index:50;
  width:110px; display:flex; flex-direction:column; gap:2px;
  background:var(--bg-0); border:1px solid var(--line-soft); border-radius:8px;
  padding:4px; box-shadow:0 10px 30px rgba(0,0,0,.6);
}
.gtr-menu-item{
  height:24px; padding:0 8px; border-radius:5px;
  background:var(--bg-2); border:1px solid transparent; color:var(--ink-mute);
  font-family:'Rajdhani'; font-weight:700; font-size:10px; letter-spacing:.08em; text-transform:uppercase;
  display:flex; align-items:center; cursor:pointer; transition:all .12s; white-space:nowrap;
}
.gtr-menu-item:hover{ border-color:var(--accent-a); color:var(--ink); }
.gtr-menu-item.on{ background:#9b5cff; color:#fff; border-color:#9b5cff; }
.gtr-menu-item.off{
  margin-top:2px; color:#ff7070; justify-content:center;
  border-top:1px solid var(--line-soft); border-radius:0 0 5px 5px;
}
.gtr-menu-item.off:hover{ background:rgba(255,80,80,.12); border-color:rgba(255,80,80,.4); color:#ff5050; }

.spacer{flex:1}

/* ---------- Screen container ---------- */
.screen{flex:1;min-height:0;display:flex;position:relative}

/* ---------- Mixer ---------- */
.mixer{display:grid;grid-template-columns:repeat(8,1fr) 1.1fr;gap:0;width:100%;height:100%}
.strip{
  display:flex;flex-direction:column;
  border-right:1px solid var(--line-soft);
  background:linear-gradient(180deg,#0d0e16 0%, #0a0b12 100%);
  position:relative;cursor:pointer;
  transition:background .15s;
  /* Lock the grid column so a long soundmap name can never push the
   * strip wider than its 1fr share. Without `min-width:0`, ellipsis
   * inside a flex/grid item is calculated against intrinsic content
   * width and can force the whole grid to re-flow when the dynamic
   * `cs.map` text changes. */
  min-width:0;
  /* Isolate layout, paint and style work to this strip. A meter clip-path
   * write or a state update inside one strip can't dirty its siblings. */
  contain:layout style paint;
}
.strip:hover{background:linear-gradient(180deg,#10111c 0%, #0c0d16 100%)}
.strip.is-selected{
  background:linear-gradient(180deg,#141028 0%, #0b0b18 100%);
  box-shadow:inset 0 2px 0 var(--accent-a), inset 0 0 40px rgba(155,92,255,0.12);
}
.strip.is-master{
  background:linear-gradient(180deg,#0a1820 0%, #07121a 100%);
  border-right:none;border-left:1px solid var(--line);
}

.strip-head{
  padding:8px 8px 6px;border-bottom:1px solid var(--line-soft);
  display:flex;flex-direction:column;gap:3px;
  min-height:48px;
}
.strip-num{
  font-family:'Rajdhani';font-weight:700;font-size:11px;letter-spacing:.1em;
  color:var(--ink-mute);
}
.strip-name{
  font-family:'Manrope';font-weight:700;font-size:12px;color:var(--ink);
  letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  /* `min-width:0` keeps ellipsis well-defined inside the flex column;
   * without it the element's intrinsic min-width is the unbroken text
   * width, which would let a long name expand the column. */
  min-width:0;max-width:100%;
}
.strip-kind{
  font-family:'JetBrains Mono';font-size:8.5px;letter-spacing:.12em;
  color:var(--ink-mute);text-transform:uppercase;
}
.strip-map{
  font-family:'JetBrains Mono';font-size:8.5px;letter-spacing:.05em;
  color:var(--ink-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.strip-map .strip-map-cat{color:var(--accent-a);text-transform:uppercase;letter-spacing:.1em;margin-right:4px;}
.strip .midi-led{
  position:absolute;top:8px;right:8px;
  width:6px;height:6px;border-radius:999px;background:#2a2d3a;
  transition:all .1s;
}
.strip .midi-led.lit{background:var(--accent-b);box-shadow:0 0 10px var(--accent-b)}

/* waveform mini preview */
.wave-mini{
  height:28px;padding:4px 8px;
  display:flex;align-items:center;gap:1px;
  border-bottom:1px solid var(--line-soft);
  position:relative;
}
.wave-mini .bar{width:2px;background:var(--ink-mute);border-radius:1px;opacity:.65}
.strip.is-selected .wave-mini .bar{background:var(--accent-a);opacity:.9}

/* EQ mini */
.eq-mini{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:4px;padding:6px 6px 4px;
  border-bottom:1px solid var(--line-soft);
}
.eq-cell{
  display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:3px 0;border-radius:4px;background:rgba(255,255,255,0.02);
}
.eq-cell .lbl{font-family:'JetBrains Mono';font-size:7.5px;color:var(--ink-mute);letter-spacing:.1em}
.eq-cell .val{font-family:'JetBrains Mono';font-size:9px;color:var(--ink);font-weight:500}

/* EQ draggable cell */
.eq-cell.eq-drag{cursor:ns-resize;touch-action:none;position:relative;padding:2px 0 3px;user-select:none}
.eq-cell.eq-drag:hover{background:rgba(155,92,255,0.06)}
.eq-bar{
  width:20px;height:22px;position:relative;border-radius:3px;
  background:rgba(0,0,0,0.35);overflow:hidden;
}
.eq-bar-center{position:absolute;left:0;right:0;top:50%;height:1px;background:rgba(255,255,255,0.15)}
.eq-bar-fill{position:absolute;left:2px;right:2px;border-radius:2px}
.eq-bar-fill.pos{background:linear-gradient(0deg,var(--accent-b),rgba(34,211,238,0.4))}
.eq-bar-fill.neg{background:linear-gradient(180deg,var(--accent-a),rgba(155,92,255,0.4))}

/* Pan */
.strip-pan{
  display:flex;align-items:center;gap:6px;padding:6px 8px;
  border-bottom:1px solid var(--line-soft);
}
.pan-track{
  flex:1;height:3px;border-radius:999px;background:#1a1c26;position:relative;
  cursor:ew-resize;touch-action:none;
}
.pan-track .pan-tick{
  position:absolute;left:50%;top:-2px;bottom:-2px;width:1px;
  background:rgba(155,92,255,0.5);transform:translateX(-50%);
}
.pan-track .pan-dot{
  position:absolute;top:50%;width:10px;height:10px;border-radius:999px;
  background:var(--accent-b);transform:translate(-50%,-50%);
  box-shadow:0 0 6px rgba(34,211,238,0.5);
  transition:background .15s;
  pointer-events:none;
}
.pan-val{font-family:'JetBrains Mono';font-size:9px;color:var(--ink-dim);width:26px;text-align:center}

/* Fader */
.fader-area{
  flex:1;display:flex;align-items:stretch;gap:8px;
  padding:8px 10px 8px;
  position:relative;min-height:0;
}
.meter{
  width:6px;border-radius:3px;background:#0a0b11;
  position:relative;overflow:hidden;
  border:1px solid var(--line-soft);
}
.meter .fill{
  position:absolute;left:0;right:0;top:0;bottom:0;
  background:linear-gradient(0deg, #22d3ee 0%, #9b5cff 70%, #ff5d6c 95%);
  border-radius:2px;
  /* Level is driven by `clip-path: inset(N% 0 0 0)` written from the
   * Mixer poll loop. clip-path is GPU-composited on WebKit — no layout,
   * no paint of unaffected siblings — so 16 channel meters + 2 master
   * meters updating at 10 Hz cost almost nothing on Pi 5. The gradient
   * stays anchored to the full meter height so the visible region
   * always shows the cyan→purple→red portion that corresponds to the
   * current dB level (i.e. low levels show only cyan, hot peaks show
   * the red shoulder). */
  clip-path: inset(100% 0 0 0);
  will-change: clip-path;
}
.fader{
  flex:1;position:relative;
  background:linear-gradient(180deg,#070810,#0b0d16);
  border-radius:4px;
  border:1px solid var(--line-soft);
}
.fader .scale{
  position:absolute;top:0;bottom:0;left:50%;width:1px;background:#1e2131;transform:translateX(-50%);
}
.fader .tick{
  position:absolute;left:0;right:0;height:1px;background:#1a1d28;
}
.fader .unity-tick{background:var(--accent-b);opacity:.4}
.fader .tick-lbl{
  position:absolute;right:calc(100% + 3px);font-family:'JetBrains Mono';font-size:7px;color:var(--ink-mute);
  transform:translateY(-50%);white-space:nowrap;
}
.fader .knob{
  position:absolute;left:50%;transform:translate(-50%,-50%);
  width:32px;height:16px;border-radius:3px;
  background:linear-gradient(180deg,#2a2d3c 0%, #1a1c26 50%, #0e1018 100%);
  border:1px solid #3a3d4e;
  box-shadow:0 2px 6px rgba(0,0,0,0.6), inset 0 1px 0 rgba(255,255,255,0.1);
  display:flex;align-items:center;justify-content:center;
  cursor:ns-resize;
}
.fader .knob::after{
  content:"";width:14px;height:1px;background:var(--accent-b);
}
.fader.is-selected .knob{border-color:var(--accent-a);box-shadow:0 0 10px rgba(155,92,255,0.4), 0 2px 6px rgba(0,0,0,0.6)}

.strip-volval{
  padding:4px 8px 6px;
  font-family:'JetBrains Mono';font-size:10px;color:var(--ink);
  text-align:center;border-top:1px solid var(--line-soft);
}

/* M/S row */
.ms-row{
  display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:6px 8px;
  border-top:1px solid var(--line-soft);
}
.ms-btn{
  height:24px;border-radius:4px;background:var(--bg-3);border:1px solid var(--line);
  color:var(--ink-mute);font-family:'Rajdhani';font-weight:700;font-size:10px;letter-spacing:.1em;
  cursor:pointer;transition:all .1s;
}
.ms-btn:hover{color:var(--ink)}
.ms-btn.mute-on{background:#3b1519;border-color:var(--accent-danger);color:#ffbec5}
.ms-btn.solo-on{background:#3b3515;border-color:var(--accent-warn);color:#ffe0a6}

/* Edit button bottom */
.strip-edit{
  height:32px;margin:0 8px 8px;border-radius:6px;
  background:linear-gradient(180deg, rgba(155,92,255,0.08), rgba(34,211,238,0.05));
  border:1px solid #2a2d40;
  color:var(--ink);font-family:'Rajdhani';font-weight:700;font-size:10px;letter-spacing:.15em;text-transform:uppercase;
  cursor:pointer;transition:all .12s;
}
.strip-edit:hover{border-color:var(--accent-a);color:var(--ink)}

/* ---------- Channel edit screen ---------- */
.edit-layout{display:grid;grid-template-columns:220px 1fr;width:100%;height:100%}
.edit-side{
  background:linear-gradient(180deg,#0a0b12,#08090f);
  border-right:1px solid var(--line-soft);
  display:flex;flex-direction:column;
  padding:14px;gap:12px;
  overflow:hidden;
}
.edit-main{display:flex;flex-direction:column;min-height:0;overflow:hidden}

.side-card{
  background:var(--bg-1);border:1px solid var(--line-soft);border-radius:10px;
  padding:10px;display:flex;flex-direction:column;gap:8px;
}
.side-card .title{font-family:'Rajdhani';font-weight:600;font-size:10px;letter-spacing:.15em;color:var(--ink-mute);text-transform:uppercase}
.big-name{
  font-family:'Manrope';font-weight:800;font-size:20px;letter-spacing:-.02em;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.channel-pill{
  display:inline-flex;align-items:center;gap:6px;
  height:22px;padding:0 8px;border-radius:6px;
  background:rgba(155,92,255,0.1);border:1px solid #2a2040;
  font-family:'JetBrains Mono';font-size:10px;color:var(--ink-dim);
}

.knob-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.knob-cell{
  display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:8px 4px;border-radius:8px;background:var(--bg-2);border:1px solid var(--line-soft);
  user-select:none;-webkit-user-select:none;
}
.knob-cell .lbl{font-family:'Rajdhani';font-weight:600;font-size:9px;letter-spacing:.15em;color:var(--ink-mute);user-select:none}
.knob-cell .val{font-family:'JetBrains Mono';font-size:10px;color:var(--ink);user-select:none}

.knob-ring{
  width:50px;height:50px;border-radius:999px;
  background:radial-gradient(circle at 30% 25%, #2a2d3d 0%, #0b0c14 70%);
  border:1px solid #2c2f40;
  position:relative;
  box-shadow:inset 0 2px 3px rgba(255,255,255,0.05), 0 2px 8px rgba(0,0,0,0.5);
  cursor:ns-resize;
  touch-action:none;
}
.knob-ring::before{
  content:"";position:absolute;inset:-5px;border-radius:999px;
  background: conic-gradient(from 225deg, var(--accent-a) var(--knob-deg,180deg), #1c1f2b 0);
  -webkit-mask: radial-gradient(circle, transparent 56%, black 57%);
          mask: radial-gradient(circle, transparent 56%, black 57%);
  opacity:.9;
}
.knob-ring .tick-line{
  position:absolute;left:50%;top:6px;width:2px;height:14px;
  background:var(--accent-b);border-radius:2px;
  transform-origin:50% 19px;
  transform: translateX(-50%) rotate(var(--knob-rot,0deg));
  box-shadow:0 0 6px var(--accent-b);
}
.knob-cell.small .knob-ring{width:40px;height:40px}
.knob-cell.small .knob-ring .tick-line{top:5px;height:11px;transform-origin:50% 15px}

.side-ms{display:grid;grid-template-columns:1fr 1fr;gap:6px}

/* Edit tabs */
.edit-tabs{
  display:flex;padding:0 14px;gap:4px;
  background:linear-gradient(180deg,#0a0b12,#090a10);
  border-bottom:1px solid var(--line-soft);
  min-height:40px;align-items:flex-end;
}
.etab{
  height:32px;padding:0 14px;border-radius:7px 7px 0 0;
  background:transparent;border:none;
  font-family:'Rajdhani';font-weight:700;font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink-mute);cursor:pointer;display:flex;align-items:center;gap:6px;
  border:1px solid transparent;border-bottom:none;
  margin-bottom:-1px;
}
.etab:hover{color:var(--ink)}
.etab.is-active{
  background:linear-gradient(180deg,#12131c,#0c0d15);
  color:var(--ink);border-color:var(--line-soft);
  position:relative;
}
.etab.is-active::after{
  content:"";position:absolute;inset:auto 0 -1px 0;height:2px;background:var(--grad);
}
.etab .badge-dot{width:5px;height:5px;border-radius:999px;background:var(--accent-a);box-shadow:0 0 5px var(--accent-a)}

.edit-content{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:linear-gradient(180deg,#0b0c13,#08090f)}

/* Sample keyboard section */
.sample-screen{display:flex;flex-direction:column;height:100%;padding:12px;gap:12px;overflow:hidden;min-height:0}
.sample-toolbar{
  display:flex;align-items:center;gap:10px;
  flex-wrap:wrap;row-gap:6px;overflow:visible;flex-shrink:0;
}
.sel-kbd{
  display:flex;align-items:center;gap:0;
  background:var(--bg-2);border:1px solid var(--line-soft);border-radius:8px;padding:3px;
}
.sel-kbd .seg{
  height:28px;padding:0 12px;background:transparent;border:none;
  font-family:'Rajdhani';font-weight:700;font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink-mute);cursor:pointer;border-radius:5px;
}
.sel-kbd .seg.is-active{background:var(--bg-3);color:var(--ink);box-shadow:inset 0 0 0 1px var(--accent-a)}

.kbd-scroll{
  flex:1;min-height:0;overflow-x:auto;overflow-y:hidden;
  background:var(--bg-1);border:1px solid var(--line-soft);border-radius:10px;
  padding:12px;
  scrollbar-width:thin;
}
.kbd-wrap{height:100%;display:flex;flex-direction:column;gap:10px}

/* Piano */
.piano{position:relative;height:100%;display:flex;min-width:max-content}
.piano .key{
  position:relative;flex:0 0 auto;
  display:flex;flex-direction:column;justify-content:flex-end;align-items:center;
  padding:6px 4px;
}
.piano .key.white{
  width:38px;background:linear-gradient(180deg,#f4f3ef 0%, #c8c5b6 100%);
  border:1px solid #6a6453;border-right:none;
  border-radius:0 0 4px 4px;
  color:#2a271c;
}
.piano .key.white:last-child{border-right:1px solid #6a6453}
.piano .key.white.has-sample{
  background:linear-gradient(180deg,#d8c9ff 0%, #a38cd9 100%);
  border-color:#6a4fa8;color:#1e0f3a;
}
.piano .key.white.has-sample.is-playing{
  background:linear-gradient(180deg,#b2a0ff 0%, #7c60c2 100%);
  box-shadow:inset 0 0 12px rgba(155,92,255,0.5);
}
.piano .key.black{
  position:absolute;top:0;width:24px;height:62%;
  background:linear-gradient(180deg,#20212a 0%, #0a0b12 100%);
  border:1px solid #050610;border-top:none;
  border-radius:0 0 3px 3px;
  z-index:2;color:#cfd1d9;
  box-shadow:inset 0 -4px 0 rgba(0,0,0,0.4);
}
.piano .key.black.has-sample{
  background:linear-gradient(180deg,#3a2a6b 0%, #140a2f 100%);
  border-color:#1a0f3a;
}
.piano .key.black.has-sample.is-playing{
  background:linear-gradient(180deg,#6d50c9 0%, #2a1566 100%);
  box-shadow:inset 0 -4px 0 rgba(0,0,0,0.4), 0 0 8px rgba(155,92,255,0.5);
}
.piano .key .kname{
  font-family:'JetBrains Mono';font-size:8px;letter-spacing:.04em;
  writing-mode:vertical-rl;transform:rotate(180deg);
  text-align:center;max-height:68%;overflow:hidden;white-space:nowrap;
  line-height:1.1;
}
.piano .key.white.is-selected{
  background:linear-gradient(180deg,#8a73d4 0%, #5a4299 100%) !important;
  border-color:#3d2a70 !important;
  color:#fff !important;
  box-shadow:
    inset 0 3px 6px rgba(0,0,0,0.5),
    inset 0 -2px 0 rgba(255,255,255,0.06),
    0 0 10px rgba(155,92,255,0.4);
  transform:translateY(1px);
  z-index:2;
}
.piano .key.white.is-selected .note{color:rgba(255,255,255,0.7)}
.piano .key.white.is-selected .kname{color:#fff !important}
.piano .key.black.is-selected{
  background:linear-gradient(180deg,#5a42a8 0%, #2a1566 100%) !important;
  border-color:var(--accent-a) !important;
  box-shadow:
    inset 0 3px 8px rgba(0,0,0,0.7),
    inset 0 -2px 0 rgba(0,0,0,0.4),
    0 0 10px rgba(155,92,255,0.6);
  transform:translateY(1px);
  z-index:3;
}
.piano .key.black.is-selected .note{color:#fff}
.key.is-dragover {
  outline: 2px solid var(--accent-a);
  outline-offset: -2px;
  box-shadow: 0 0 12px var(--accent-a);
}
/* empty-sample hint card */
.empty-sample-hint{
  display:flex;flex-direction:column;align-items:center;text-align:center;
  padding:14px 8px 10px;gap:8px;
  border:1px dashed #2a2c3a;border-radius:8px;
  background:rgba(155,92,255,0.03);
}
.esh-icon{color:var(--ink-mute);opacity:.7}
.esh-title{
  font-family:'Rajdhani';font-weight:600;font-size:12px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-dim);
}
.esh-body{
  font-family:'JetBrains Mono';font-size:9px;line-height:1.5;
  color:var(--ink-mute);max-width:180px;
}
.piano .key.white .note{font-family:'JetBrains Mono';font-size:8px;color:#766d56;margin-top:auto;padding-bottom:2px}

/* pad grid view */
.grid-view{flex:1;min-height:0;display:flex;align-items:stretch;justify-content:center;padding:4px 0}
.pad-grid{
  display:grid;grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(4,1fr);gap:8px;
  width:100%;height:100%;
}
.pad{
  position:relative;border-radius:8px;padding:8px 10px;
  display:flex;flex-direction:column;gap:2px;cursor:pointer;
  background:linear-gradient(180deg,#151724 0%, #0c0d16 100%);
  border:1px solid #24273a;
  transition:border-color .12s,transform .08s;
  overflow:hidden;min-height:0;
}
.pad:hover{border-color:#3a3d55}
.pad.is-empty{opacity:.55;border-style:dashed;border-color:#22242f;cursor:default;background:#0a0b12}
.pad.is-empty:hover{border-color:#22242f}
.pad.has-sample{
  background:linear-gradient(180deg,#241a4a 0%, #140b30 100%);
  border-color:#3a2a6b;
}
.pad.has-sample.is-playing{
  background:linear-gradient(180deg,#3a2a80 0%, #1e1048 100%);
  box-shadow:inset 0 0 18px rgba(155,92,255,0.35), 0 0 14px rgba(155,92,255,0.25);
  border-color:var(--accent-a);
}
.pad.has-sample.is-selected{
  border-color:var(--accent-a);
  box-shadow:inset 0 3px 8px rgba(0,0,0,0.6), inset 0 0 0 1px rgba(155,92,255,0.35), 0 0 12px rgba(155,92,255,0.4);
  transform:translateY(1px);
  background:linear-gradient(180deg,#2d1f5e 0%, #180d3a 100%);
}
.pad-idx{font-family:'JetBrains Mono';font-size:9px;letter-spacing:.14em;color:var(--ink-mute)}
.pad-name{
  font-family:'Manrope';font-weight:700;font-size:13px;color:#f0ecff;
  line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.pad-note{
  font-family:'JetBrains Mono';font-size:10px;color:var(--accent-a);
  letter-spacing:.1em;font-weight:700;
}
.pad-wave{
  position:absolute;bottom:6px;left:8px;right:8px;
  display:flex;align-items:flex-end;gap:2px;height:18px;opacity:.5;
}
.pad-wave .bar{flex:1;background:linear-gradient(180deg,var(--accent-a),rgba(155,92,255,0.3));border-radius:1px}
.pad-empty-msg{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  flex:1;gap:4px;color:var(--ink-mute);font-family:'JetBrains Mono';font-size:9px;
  letter-spacing:.14em;text-transform:uppercase;
}

/* import dialog */
.import-dialog{
  width:560px;max-height:500px;background:var(--bg-1);
  border:1px solid var(--line);border-radius:14px;padding:16px;
  display:flex;flex-direction:column;gap:10px;
  box-shadow:0 20px 60px rgba(0,0,0,0.7);
}
.import-tabs{display:flex;gap:4px;background:#0a0b12;padding:3px;border-radius:6px;width:fit-content}
.import-tabs .seg{padding:6px 12px;font-size:10px}
.drop-zone{
  border:1.5px dashed #2a2d40;border-radius:10px;padding:14px;
  display:flex;align-items:center;justify-content:center;gap:10px;
  color:var(--ink-mute);font-family:'JetBrains Mono';font-size:10px;letter-spacing:.08em;
  background:rgba(155,92,255,0.02);
}
.drop-zone.is-drag{border-color:var(--accent-a);color:var(--ink);background:rgba(155,92,255,0.08)}
.import-list{
  display:flex;flex-direction:column;gap:4px;max-height:180px;overflow:auto;
  padding-right:4px;
}
.imp-row{
  display:flex;align-items:center;gap:10px;padding:8px 10px;
  background:var(--bg-2);border:1px solid var(--line-soft);border-radius:8px;cursor:pointer;
  transition:border-color .1s;
}
.imp-row:hover{border-color:#3a3d55}
.imp-row.is-selected{border-color:var(--accent-a);background:linear-gradient(180deg,rgba(155,92,255,0.08),rgba(155,92,255,0.02))}
.imp-icon{
  width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;
  background:rgba(155,92,255,0.12);color:var(--accent-a);font-size:15px;flex-shrink:0;
}
.imp-name{font-family:'Manrope';font-weight:600;font-size:12px;color:var(--ink)}
.imp-meta{font-family:'JetBrains Mono';font-size:9px;color:var(--ink-mute);letter-spacing:.06em}
.imp-check{color:var(--accent-a);font-size:16px;font-weight:700}
.tb-btn[disabled]{opacity:.35;cursor:not-allowed}

/* save button states */
.save-btn{min-width:90px;justify-content:center;display:flex;align-items:center;gap:6px}
.save-btn.is-saved{
  background:linear-gradient(180deg,rgba(94,232,168,0.14),rgba(94,232,168,0.04));
  border-color:rgba(94,232,168,0.6);
  color:#a9f2c9;
}
.save-btn.is-saving{
  background:linear-gradient(180deg,rgba(155,92,255,0.14),rgba(155,92,255,0.04));
  border-color:var(--accent-a);color:#d5bfff;
}
.save-spin{
  display:inline-block;width:10px;height:10px;border-radius:50%;
  border:1.5px solid rgba(213,191,255,0.3);border-top-color:var(--accent-a);
  animation:spin .7s linear infinite;margin-right:6px;
}
@keyframes spin{to{transform:rotate(360deg)}}
.piano .key.black .note{font-family:'JetBrains Mono';font-size:7px;color:#6b6684;position:absolute;bottom:3px;left:50%;transform:translateX(-50%)}

/* Sample cards row (under keyboard) */
.sample-info-row{
  display:flex;gap:8px;align-items:stretch;height:64px;flex-shrink:0;
}
.sinfo-card{
  flex:1;display:flex;gap:10px;align-items:center;
  background:var(--bg-1);border:1px solid var(--line-soft);border-radius:8px;padding:8px 12px;
}
.sinfo-card .wave-thumb{
  width:100px;height:40px;display:flex;align-items:center;gap:1px;
}
.sinfo-card .wave-thumb .bar{width:2px;background:var(--accent-a);border-radius:1px;opacity:.8}

/* ---------- Effects screen ---------- */
.fx-screen{display:flex;flex-direction:column;height:100%;padding:12px;gap:10px;overflow:auto}
.fx-chain{
  display:grid;grid-template-columns:1fr auto 1fr auto 1fr;gap:8px;align-items:stretch;
}
.chain-block{
  background:var(--bg-1);border:1px solid var(--line-soft);border-radius:10px;
  padding:10px;display:flex;flex-direction:column;gap:8px;
}
.chain-label{
  font-family:'Rajdhani';font-weight:700;font-size:9px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-mute);
}
.chain-flow{
  display:flex;align-items:center;justify-content:center;
  color:var(--ink-mute);font-family:'JetBrains Mono';font-size:14px;
}
.fx-block{
  background:var(--bg-2);border:1px solid var(--line-soft);border-radius:8px;
  padding:8px 10px;display:flex;align-items:center;gap:10px;
  min-height:46px;
  cursor:pointer;transition:all .12s;
}
.fx-block:hover{border-color:#3a3d50}
.fx-block.is-enabled{border-color:#2a2040}
.fx-block.is-enabled.is-selected{border-color:var(--accent-a);background:linear-gradient(180deg,rgba(155,92,255,0.08),rgba(155,92,255,0.02))}
.fx-power{
  width:14px;height:14px;border-radius:999px;flex-shrink:0;
  background:#1e2130;border:1px solid #2c2f3e;
}
.fx-block.is-enabled .fx-power{background:var(--accent-b);border-color:var(--accent-b);box-shadow:0 0 8px var(--accent-b)}
.fx-block .fxname{
  font-family:'Rajdhani';font-weight:600;font-size:12px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink);flex:1;
}
.fx-block .fxpreset{
  font-family:'JetBrains Mono';font-size:9px;color:var(--ink-mute);
}

/* Selected FX editor panel */
.fx-detail{
  background:var(--bg-1);border:1px solid var(--line-soft);border-radius:10px;
  padding:12px;display:flex;flex-direction:column;gap:10px;
}
.fx-detail-head{display:flex;align-items:center;gap:10px;justify-content:space-between}
.fx-detail-head .title{font-family:'Manrope';font-weight:700;font-size:14px;letter-spacing:-.01em}
.fx-params{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}

/* EQ screen */
.eq-screen{display:flex;flex-direction:column;height:100%;padding:12px;gap:10px;overflow:hidden}
.eq-graph{
  flex:1;min-height:0;background:var(--bg-1);border:1px solid var(--line-soft);border-radius:10px;
  position:relative;overflow:hidden;padding:0;
}
.eq-knobs{
  display:grid;grid-template-columns:repeat(5,1fr);gap:8px;
}

/* Master */
.master-screen{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:12px;height:100%;overflow:hidden}
.master-col{display:flex;flex-direction:column;gap:10px;min-height:0;overflow:auto}
.panel{background:var(--bg-1);border:1px solid var(--line-soft);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:10px}
.panel-title{font-family:'Rajdhani';font-weight:600;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-mute)}

/* select */
.bselect{
  height:28px;padding:0 10px;background:var(--bg-2);border:1px solid var(--line-soft);border-radius:6px;
  color:var(--ink);font-family:'JetBrains Mono';font-size:10px;cursor:pointer;
  display:inline-flex;align-items:center;gap:8px;
}
.bselect:hover{border-color:var(--accent-a)}

/* MIDI popup */
.midi-popup-row{
  padding:8px 10px;border:1px solid var(--line-soft);border-radius:6px;cursor:pointer;
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--ink-dim);letter-spacing:.04em;
  transition:border-color .12s,background .12s;
}
.midi-popup-row:hover{border-color:var(--accent-b)}
.midi-popup-row.is-connected{background:rgba(34,211,238,0.08);border-color:var(--accent-b);color:var(--ink)}

/* Audio device popup */
.device-popup-row{
  padding:8px 10px;border:1px solid var(--line-soft);border-radius:6px;cursor:pointer;
  font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--ink-dim);letter-spacing:.04em;
  transition:border-color .12s,background .12s;
  display:flex;align-items:center;justify-content:space-between;gap:8px;
}
.device-popup-row:hover{border-color:var(--accent-a)}
.device-popup-row.is-active{background:rgba(155,92,255,0.08);border-color:var(--accent-a);color:var(--ink);cursor:default}
.device-popup-row .device-badge{font-size:8px;color:var(--ink-mute);letter-spacing:.1em;flex-shrink:0}
.device-name-link:hover{text-decoration:underline}

/* scrollbar */
::-webkit-scrollbar{height:8px;width:8px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#1e2130;border-radius:4px}
::-webkit-scrollbar-thumb:hover{background:#2c2f40}

/* LOOPS dropdown (tempo-locked loop bank picker, sits next to MAP in channel-edit) */
.bselect-loops .lbl{color:var(--ink-mute)}
.loop-browser{
  position:absolute;background:linear-gradient(180deg,#0e0f18,#0a0b12);
  border:1px solid var(--accent-b);border-radius:10px;padding:6px 0;
  width:280px;box-shadow:0 12px 40px rgba(0,0,0,0.7), 0 0 18px rgba(34,211,238,.18);
  z-index:30;
}
.loop-browser-head{
  padding:6px 12px;font-family:'Rajdhani';font-weight:700;font-size:9.5px;
  letter-spacing:.18em;color:var(--ink-mute);text-transform:uppercase;
  border-bottom:1px solid var(--line-soft);
}
.loop-browser-empty{padding:10px 12px;font-family:'JetBrains Mono';font-size:10px;color:var(--ink-mute)}
.loop-browser-row{
  padding:7px 12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;
  font-family:'JetBrains Mono';font-size:11px;color:var(--ink-dim);
}
.loop-browser-row:hover{background:#0d2a30;color:var(--ink)}
.lb-name{flex:1}
.lb-meta{color:var(--ink-mute);font-size:9.5px;letter-spacing:.04em}
.loop-browser-row.is-active{background:#0d2a30;color:var(--ink);border-left:2px solid var(--accent-b)}
.lb-del{
  width:22px;height:22px;border-radius:5px;
  background:transparent;border:1px solid var(--line-soft);
  color:var(--ink-mute);cursor:pointer;
  font-family:'JetBrains Mono';font-size:13px;line-height:18px;padding:0;
  margin-left:8px;
}
.lb-del:hover{border-color:var(--accent-danger);color:var(--accent-danger)}
.loop-row{
  display:flex;align-items:center;gap:8px;padding:5px 12px 5px 24px;cursor:pointer;
  font-family:'JetBrains Mono';font-size:10px;color:var(--ink-mute);
  border-top:1px solid #11141c;
}
.loop-row:hover{background:#101620;color:var(--ink-dim)}
.loop-row.is-active{color:var(--accent-b);background:#0a1820}
.loop-row.is-pending{color:var(--accent-warn)}
.loop-pc{width:48px;color:var(--accent-a);font-weight:700}
.loop-addr-wrap{
  display:inline-flex;align-items:center;gap:2px;
  width:96px;
}
.loop-addr-input{
  width:28px;height:18px;
  background:#070710;border:1px solid var(--line-soft);color:var(--accent-a);
  padding:0 2px;border-radius:3px;
  font-family:'JetBrains Mono';font-size:9.5px;font-weight:700;
  font-variant-numeric:tabular-nums;text-align:center;
  appearance:none;-moz-appearance:textfield;
}
.loop-addr-input::-webkit-inner-spin-button,
.loop-addr-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.loop-addr-input:focus{outline:1px solid var(--accent-a);border-color:var(--accent-a)}
.loop-addr-dot{color:var(--ink-mute);font-family:'JetBrains Mono';font-weight:700;font-size:11px}
.loop-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.loop-meta{color:var(--ink-mute);font-size:9px}

/* Unified import router + loop import dialog */
.import-router-overlay{
  position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;z-index:60;
}
.import-router, .loop-import{
  background:linear-gradient(180deg,#0e0f18,#0a0b12);border:1px solid var(--line);
  border-radius:12px;padding:14px;min-width:340px;max-width:520px;
  box-shadow:0 30px 80px rgba(0,0,0,.8);
}
.ir-title, .li-title{
  font-family:'Rajdhani';font-weight:700;letter-spacing:.18em;text-transform:uppercase;
  font-size:11px;color:var(--ink-mute);margin-bottom:10px;
}
.ir-choice{
  display:block;width:100%;text-align:left;padding:10px 12px;margin-bottom:8px;
  background:var(--bg-2);border:1px solid var(--line-soft);border-radius:8px;cursor:pointer;color:var(--ink);
}
.ir-choice:hover{border-color:var(--accent-a)}
.ir-name{font-family:'Manrope';font-weight:700;font-size:13px;color:var(--ink)}
.ir-sub{font-family:'JetBrains Mono';font-size:10px;color:var(--ink-mute);margin-top:3px}

.li-row{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-family:'JetBrains Mono';font-size:11px;color:var(--ink-dim)}
.li-input{background:var(--bg-2);border:1px solid var(--line-soft);color:var(--ink);
  padding:5px 8px;border-radius:5px;font-family:'JetBrains Mono';font-size:11px;flex:1}
.li-list{max-height:240px;overflow:auto;margin:8px 0;border:1px solid var(--line-soft);border-radius:6px;background:#0a0b12}
.li-item{display:flex;align-items:center;gap:6px;padding:6px 8px;border-bottom:1px solid var(--line-soft);
  font-family:'JetBrains Mono';font-size:10px;color:var(--ink-dim)}
.li-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.li-bpm, .li-bars{width:50px;background:#070710;border:1px solid var(--line-soft);color:var(--ink);
  padding:3px 5px;border-radius:4px;font-family:'JetBrains Mono';font-size:10px}
.li-unit{color:var(--ink-mute);font-size:9px}
.li-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}
.li-help{
  font-family:'JetBrains Mono';font-size:9.5px;color:var(--ink-mute);
  margin-bottom:8px;letter-spacing:.04em;
}

/* Top-bar transport widget — BPM source/state + manual tap/play/stop. */
.tb-transport{
  display:inline-flex;align-items:stretch;height:24px;border-radius:5px;
  background:linear-gradient(180deg,#0d0a1a,#0a0810);
  border:1px solid var(--line);
}
.tb-transport.is-midi{border-color:var(--accent-b);box-shadow:inset 0 0 0 1px rgba(34,211,238,.18), 0 0 12px rgba(34,211,238,.18)}
.tb-transport.is-manual{border-color:var(--accent-a);box-shadow:inset 0 0 0 1px rgba(155,92,255,.18), 0 0 12px rgba(155,92,255,.18)}
.ttx-col{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;padding:0 5px;border-right:1px solid #1a1530}
.ttx-col:last-child{border-right:none;padding:0 3px}
.ttx-label{font-family:'Rajdhani';font-weight:700;font-size:6px;letter-spacing:.13em;color:var(--ink-mute);text-transform:uppercase;line-height:1}
.ttx-bpm{font-family:'JetBrains Mono';font-weight:700;font-size:11.5px;color:#fff;line-height:1.05;font-variant-numeric:tabular-nums}
.ttx-src{font-family:'JetBrains Mono';font-size:7px;color:var(--ink-dim);letter-spacing:.04em;margin-top:0;display:flex;align-items:center;gap:3px}
.ttx-led{width:4px;height:4px;border-radius:50%;background:var(--ink-mute)}
.tb-transport.is-midi .ttx-led{background:var(--accent-b);box-shadow:0 0 6px var(--accent-b)}
.tb-transport.is-manual .ttx-led{background:var(--accent-a);box-shadow:0 0 6px var(--accent-a)}
.ttx-state{font-family:'Rajdhani';font-weight:700;font-size:8px;letter-spacing:.10em;color:var(--accent-warn);text-transform:uppercase;margin-top:0}
.ttx-tap{height:18px;padding:0 6px;border-radius:5px;background:var(--bg-3);border:1px solid var(--line-soft);
  color:var(--accent-a);font-family:'Rajdhani';font-weight:700;font-size:8px;letter-spacing:.07em;cursor:pointer}
.ttx-bpm-input{width:34px;height:18px;background:#070710;border:1px solid var(--line-soft);color:var(--ink);
  padding:0 3px;border-radius:5px;font-family:'JetBrains Mono';font-size:8.5px;margin-top:1px;font-variant-numeric:tabular-nums}
.ttx-ctrl{width:18px;height:18px;margin:3px 1px;border-radius:5px;background:var(--bg-3);border:1px solid var(--line-soft);
  color:var(--ink-dim);font-family:'JetBrains Mono';font-size:9px;cursor:pointer}
.ttx-play{color:var(--accent-b)}
.ttx-stop{color:var(--accent-danger)}

.tb-btn.loop-arm{
  font-family:'Rajdhani';font-weight:700;letter-spacing:.14em;
  border-color:var(--line-soft);color:var(--ink-mute);
  min-width:78px;justify-content:center;
}
.tb-btn.loop-arm:disabled{opacity:.4;cursor:not-allowed}
.tb-btn.loop-arm.is-armed{
  border-color:var(--accent-b);color:var(--accent-b);
  background:linear-gradient(180deg,#0a1820,#07121a);
  box-shadow:inset 0 0 0 1px rgba(34,211,238,.18), 0 0 10px rgba(34,211,238,.18);
}
.lpc-badge{
  display:inline-block;margin-left:6px;padding:1px 6px;border-radius:3px;
  background:#1c1408;border:1px solid #3a2810;
  font-family:'JetBrains Mono';font-size:9.5px;color:var(--accent-warn);
}
.lpc-pending{color:var(--accent-a);font-weight:700;margin-left:2px}

/* ---------- Stereo Tremolo detail panel ---------- */
.tremolo-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 12px 4px;
}

.waveform-pills {
  display: flex;
  gap: 6px;
  align-items: center;
  flex-wrap: wrap;
}
.waveform-pills .pill-label {
  font-family: Rajdhani;
  font-weight: 700;
  font-size: 11px;
  letter-spacing: .14em;
  color: var(--ink-mute);
  margin-right: 8px;
}
.waveform-pills .pill {
  font-family: Rajdhani;
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .08em;
  padding: 5px 12px;
  border-radius: 999px;
  border: 1px solid rgba(255,255,255,.12);
  background: rgba(255,255,255,.03);
  color: var(--ink-mute);
  cursor: pointer;
  transition: background .1s, color .1s, border-color .1s;
}
.waveform-pills .pill.is-on {
  background: var(--accent-b);
  color: #0b0d12;
  border-color: var(--accent-b);
}

.tremolo-knobs {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}

.tremolo-speed-row {
  display: flex;
  gap: 14px;
  align-items: center;
  padding-top: 6px;
  border-top: 1px solid rgba(255,255,255,.06);
}

.sync-toggle {
  font-family: Rajdhani;
  font-weight: 700;
  font-size: 12px;
  letter-spacing: .12em;
  padding: 6px 14px;
  border-radius: 6px;
  border: 1px solid rgba(255,255,255,.12);
  background: rgba(255,255,255,.03);
  color: var(--ink-mute);
  cursor: pointer;
}
.sync-toggle.is-on {
  background: var(--accent-b);
  color: #0b0d12;
  border-color: var(--accent-b);
}

.bpm-display {
  font-family: 'JetBrains Mono', monospace;
  font-size: 13px;
  color: var(--ink);
}

.base-note-select {
  font-family: 'JetBrains Mono', monospace;
  font-size: 12px;
  background: rgba(255,255,255,.05);
  color: var(--ink);
  border: 1px solid rgba(255,255,255,.12);
  border-radius: 4px;
  padding: 4px 6px;
  cursor: pointer;
}

/* ---------- Auto-Wah detail panel ---------- */
.autowah-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 12px 4px;
}

.autowah-knobs {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
/* .waveform-pills, .sync-toggle, .bpm-display, .base-note-select,
   .tremolo-speed-row already defined for the Tremolo panel — reused here. */

/* ---------- Phaser detail panel ---------- */
.phaser-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 12px 4px;
}

.phaser-knobs {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
/* .waveform-pills, .sync-toggle, .bpm-display, .base-note-select,
   .tremolo-speed-row already defined for the Tremolo/Wah panels — reused. */

/* ---------- Flanger detail panel ---------- */
.flanger-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 12px 4px;
}

.flanger-knobs {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
/* .waveform-pills, .sync-toggle, .bpm-display, .base-note-select,
   .tremolo-speed-row already defined for the Tremolo/Wah/Phaser panels — reused. */
