/* ===================== AmanowSFX  Apple-style dark UI ===================== */
:root{
  --bg:#1c1d20;
  --bg-2:#222327;
  --panel:#26282d;
  --panel-2:#2c2e34;
  --line:rgba(255,255,255,.07);
  --line-2:rgba(255,255,255,.12);
  --txt:#eceef2;
  --txt-dim:#9aa0aa;
  --txt-faint:#6b7079;
  --accent:#3b82f6;
  --accent-2:#60a5fa;
  --accent-glow:rgba(59,130,246,.45);
  --wave:#dfe3ea;
  --wave-sel:#bcd3ff;
  --radius:12px;
  --radius-sm:9px;
  --ease-pop:cubic-bezier(.34,1.4,.5,1);
  --ease:cubic-bezier(.4,0,.2,1);
  --card-min:172px;
  --wave-h:54px;
  --scale:1;
  --ui-zoom:1;
  --ui-zoom-w:1;
  --fx-zoom:1;
}

*{box-sizing:border-box;-webkit-user-select:none;user-select:none;}
html,body{margin:0;height:100%;}
body{
  background:var(--bg);
  color:var(--txt);
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  font-size:12.5px;
  -webkit-font-smoothing:antialiased;
  overflow:hidden;
}
.app{display:flex;flex-direction:column;height:100vh;}

/* scrollbars */
::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-thumb{background:rgba(255,255,255,.13);border-radius:8px;border:2px solid transparent;background-clip:padding-box;}
::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.22);background-clip:padding-box;}
::-webkit-scrollbar-track{background:transparent;}

/* ===================== header ===================== */
.hdr{
  flex:0 0 auto;padding:10px 12px 8px;
  background:linear-gradient(180deg,#282a30,#1c1d20);
  border-bottom:1px solid var(--line);
  position:relative;z-index:5;
}
.hdr-row{display:flex;align-items:center;gap:10px;}
.hdr-row + .hdr-row{margin-top:8px;}
.lib-controls{display:flex;align-items:center;gap:7px;flex:0 0 auto;min-width:0;}
.pack-tabs{flex:1;min-width:0;display:flex;align-items:center;gap:5px;overflow-x:auto;overflow-y:hidden;padding:1px 0;}
.pack-tabs::-webkit-scrollbar{height:0;}
.pack-tab{flex:0 0 auto;font-size:11.5px;font-weight:700;color:var(--txt-dim);background:var(--panel-2);
  border:1px solid var(--line-2);border-radius:7px;padding:4px 10px;cursor:pointer;
  transition:background .12s var(--ease),color .12s var(--ease),border-color .12s var(--ease);}
.pack-tab:hover{color:var(--txt);border-color:var(--txt-faint);}
.pack-tab.on{background:var(--accent);border-color:var(--accent);color:#fff;}

.btn{
  display:inline-flex;align-items:center;gap:7px;
  height:30px;padding:0 13px;border-radius:var(--radius-sm);
  background:var(--panel);border:1px solid var(--line-2);
  color:var(--txt);font-size:12px;font-weight:600;cursor:pointer;
  transition:background .16s var(--ease),border-color .16s var(--ease),transform .12s var(--ease-pop);
  white-space:nowrap;
}
.btn:hover{background:var(--panel-2);border-color:rgba(255,255,255,.2);}
.btn:active{transform:scale(.96);}
.btn .ic{width:15px;height:15px;fill:none;stroke:var(--txt-dim);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
.lib-btn{min-width:0;}
.lib-name{overflow:hidden;text-overflow:ellipsis;max-width:160px;}

.btn.primary{
  background:linear-gradient(180deg,var(--accent-2),var(--accent));
  border-color:var(--accent);color:#fff;
  box-shadow:0 5px 16px -6px var(--accent-glow);
}
.btn.primary:hover{filter:brightness(1.08);}
.btn.ghost{background:transparent;border-color:var(--line-2);color:var(--txt-dim);}
.btn.ghost:hover{color:var(--txt);background:rgba(255,255,255,.05);}

.btn-add{
  flex:0 0 auto;width:30px;height:30px;border-radius:var(--radius-sm);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  background:linear-gradient(180deg,var(--accent-2),var(--accent));
  border:1px solid var(--accent);box-shadow:0 5px 16px -6px var(--accent-glow);
  transition:transform .12s var(--ease-pop),filter .15s var(--ease);
}
.btn-add:hover{filter:brightness(1.1);}
.btn-add:active{transform:scale(.9);}
.btn-add svg{width:16px;height:16px;fill:none;stroke:#fff;stroke-width:2.2;stroke-linecap:round;}

/* size + zoom sliders */
.size-wrap{display:flex;align-items:center;gap:6px;flex:0 0 auto;}
.size-ic{color:var(--txt-faint);line-height:1;}
.size-ic.s{font-size:9px;}
.size-ic.l{font-size:15px;}
.zoom-wrap{display:flex;align-items:center;gap:6px;flex:0 0 auto;}
.zoom-ic{color:var(--txt-faint);line-height:1;font-weight:700;}
.zoom-ic.s{font-size:10px;}
.zoom-ic.l{font-size:15px;}
input[type=range]{
  -webkit-appearance:none;appearance:none;width:92px;max-width:24vw;min-width:60px;
  height:4px;border-radius:4px;
  background:rgba(255,255,255,.16);outline:none;cursor:pointer;
}
input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;
  background:#fff;border:1px solid rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.4);
  transition:transform .12s var(--ease-pop);
}
input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.15);}

/* search */
.search{
  position:relative;display:flex;align-items:center;width:100%;
  height:30px;border-radius:var(--radius-sm);
  background:var(--bg-2);border:1px solid var(--line);
  transition:border-color .16s var(--ease),background .16s var(--ease);
}
.search:focus-within{border-color:var(--accent);background:#1f2024;}
.search-ic{width:14px;height:14px;margin:0 7px 0 10px;flex:0 0 auto;fill:none;stroke:var(--txt-faint);stroke-width:1.8;stroke-linecap:round;}
.search input{
  flex:1;min-width:0;background:none;border:none;outline:none;color:var(--txt);
  font-size:12px;padding:0;-webkit-user-select:text;user-select:text;
}
.search input::placeholder{color:var(--txt-faint);}
.search-x{
  display:none;flex:0 0 auto;width:22px;height:22px;margin-right:5px;border-radius:6px;
  background:none;border:none;color:var(--txt-faint);cursor:pointer;font-size:12px;
}
.search-x:hover{color:var(--txt);background:rgba(255,255,255,.08);}
.search.has-text .search-x{display:flex;align-items:center;justify-content:center;}

/* ===================== body ===================== */
.body{flex:1 1 auto;overflow:hidden;padding:0;position:relative;}

/* ===================== two-pane split (folders | sounds) ===================== */
.split{display:flex;height:100%;min-height:0;}
.pane-left{
  flex:0 0 auto;width:var(--split-left,180px);min-width:118px;max-width:72%;
  overflow-y:auto;overflow-x:hidden;padding:8px 4px 12px 8px;
}
.divider{
  flex:0 0 auto;width:9px;cursor:ew-resize;position:relative;
  display:flex;align-items:center;justify-content:center;touch-action:none;
}
.divider::before{content:"";position:absolute;top:0;bottom:0;left:50%;width:1px;background:var(--line);transform:translateX(-50%);}
.divider:hover::before,.divider.drag::before{background:var(--accent);width:2px;}
.divider-grip{width:3px;height:36px;border-radius:2px;background:var(--line-2);z-index:1;transition:background .12s var(--ease);}
.divider:hover .divider-grip,.divider.drag .divider-grip{background:var(--accent);}
.pane-right{flex:1 1 auto;min-width:0;overflow-y:auto;overflow-x:hidden;overflow-anchor:none;padding:8px 8px 12px 6px;}
.right-head{padding:2px 4px 8px;color:var(--txt-dim);font-size:12px;font-weight:600;}
.right-empty{padding:26px 10px;color:var(--txt-faint);font-size:12px;line-height:1.6;text-align:center;}
/* Panel-zoom: GPU transform (no relayout while dragging). The transform is
   applied ONLY when actually zoomed - at 1x the list is a plain layer so the
   browser can skip off-screen cards (content-visibility) and scroll stays smooth. */
.zoomed .tree,.zoomed .folder-view,.zoomed .results{
  transform:scale(var(--ui-zoom,1));
  transform-origin:top left;
  width:calc(100% / var(--ui-zoom-w,1));
}
.zooming .tree,.zooming .folder-view,.zooming .results{will-change:transform;}

/* empty state */
.empty{display:none;flex:1 1 auto;width:100%;flex-direction:column;align-items:center;justify-content:center;text-align:center;
  gap:10px;padding:48px 24px;color:var(--txt-dim);height:100%;}
.empty.show{display:flex;}
.empty-ic{width:58px;height:58px;border-radius:16px;display:flex;align-items:center;justify-content:center;
  background:var(--panel);border:1px solid var(--line-2);}
.empty-ic svg{width:28px;height:28px;fill:none;stroke:var(--txt-faint);stroke-width:1.5;stroke-linejoin:round;}
.empty-title{font-size:14px;font-weight:600;color:var(--txt);}
.empty-sub{font-size:12px;line-height:1.6;color:var(--txt-dim);}
.empty .btn{margin-top:6px;}

/* ===================== tree ===================== */
.tree{display:block;}
.node{}
.node-row{
  display:flex;align-items:center;gap:6px;height:30px;padding:0 6px;border-radius:8px;
  cursor:pointer;position:relative;
  transition:background .13s var(--ease);
}
.node-row:hover{background:rgba(255,255,255,.05);}
.node-row.sel{background:rgba(59,130,246,.16);}
.node-row.sel:hover{background:rgba(59,130,246,.22);}
.chev{
  flex:0 0 auto;width:16px;height:16px;display:flex;align-items:center;justify-content:center;
  color:var(--txt-faint);transition:transform .18s var(--ease);
}
.chev svg{width:9px;height:9px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;}
.node.open > .node-row > .chev{transform:rotate(90deg);}
.chev.empty{visibility:hidden;}
.folder-ic{flex:0 0 auto;width:16px;height:16px;fill:none;stroke:var(--txt-dim);stroke-width:1.6;stroke-linejoin:round;}
.node.open > .node-row > .folder-ic{stroke:var(--accent-2);}
.node-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;color:var(--txt);}
.node-count{flex:0 0 auto;font-size:10.5px;color:var(--txt-faint);background:rgba(255,255,255,.06);
  border-radius:20px;padding:1px 7px;font-variant-numeric:tabular-nums;}
.node-children{overflow:hidden;display:none;padding-left:14px;margin-left:7px;
  border-left:1px solid var(--line);}
.node.open > .node-children{display:block;}
/* while searching, the pack tree shows ONLY the folders on the path to a match
   (+ the matched folder itself); every non-matching sibling is hidden */
.node.searching .node-children .node{display:none;}
.node.searching .node-children .node.match-path{display:block;}

/* star on a folder row -> favorite the whole folder */
.folder-star{flex:0 0 auto;width:20px;height:20px;display:flex;align-items:center;justify-content:center;
  cursor:pointer;opacity:0;transition:opacity .12s var(--ease),color .12s var(--ease);color:var(--txt-faint);}
.folder-star svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round;}
.node-row:hover .folder-star{opacity:.85;}
.folder-star:hover{color:var(--txt);}
.folder-star.on{opacity:1;color:#f5c451;}
.folder-star.on svg{fill:#f5c451;stroke:#f5c451;}
/* highlight a Favorites row while a sound is dragged over it */
.node-row.drop-hot{background:rgba(59,130,246,.28);box-shadow:0 0 0 1px var(--accent) inset;}

/* right-pane header bar: folder name + Favorites actions */
.right-head-bar{display:flex;align-items:center;gap:8px;}
.right-head-bar .right-head{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* In order / Favorites first toggle */
.sort-toggle{flex:0 0 auto;display:flex;gap:0;padding-bottom:6px;}
.sort-btn{font-size:10.5px;font-weight:600;color:var(--txt-dim);background:var(--panel-2);
  border:1px solid var(--line-2);padding:4px 8px;cursor:pointer;white-space:nowrap;
  transition:background .12s var(--ease),color .12s var(--ease);}
.sort-btn:first-child{border-radius:7px 0 0 7px;}
.sort-btn:last-child{border-radius:0 7px 7px 0;border-left:none;}
.sort-btn:hover{color:var(--txt);}
.sort-btn.on{background:var(--accent);border-color:var(--accent);color:#fff;}
/* folder whose name matched the search */
.node-row.search-hit{background:rgba(245,196,81,.16);box-shadow:inset 2px 0 0 #f5c451;}
.node-row.search-hit .node-name{color:#f5d98a;}
.right-actions{flex:0 0 auto;display:flex;align-items:center;gap:6px;padding-bottom:6px;}
.mini-btn{font-size:11px;font-weight:600;color:var(--txt-dim);background:var(--panel-2);
  border:1px solid var(--line-2);border-radius:7px;padding:4px 9px;cursor:pointer;white-space:nowrap;
  transition:background .12s var(--ease),color .12s var(--ease),border-color .12s var(--ease);}
.mini-btn:hover{background:var(--accent);border-color:var(--accent);color:#fff;}
.fav-cat-input{font-size:11.5px;color:var(--txt);background:var(--bg);border:1px solid var(--accent);
  border-radius:7px;padding:4px 8px;width:130px;outline:none;}

/* ===================== sound cards ===================== */
/* .sounds is now just a spacer whose HEIGHT reserves room for every sound;
   the actual cards live in .vwin, which holds ONLY the visible window and is
   moved with a transform as you scroll (virtualized list = smooth at any size) */
.sounds{ position:relative; display:block; }
.vwin{
  position:absolute; top:0; left:0; right:0; will-change:transform;
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(var(--card-min),1fr));
  gap:9px;padding:6px 2px 10px;
}
.card{
  position:relative;border-radius:var(--radius);overflow:hidden;
  background:var(--panel);border:1px solid var(--line);cursor:pointer;
  contain:layout paint;
  transition:border-color .15s var(--ease),background .15s var(--ease),transform .12s var(--ease-pop),box-shadow .15s var(--ease);
}
.card:hover{background:var(--panel-2);border-color:var(--line-2);}
.card:active{transform:scale(.985);}
.card.sel{border-color:var(--accent);background:rgba(59,130,246,.10);box-shadow:0 0 0 1px var(--accent) inset,0 8px 22px -12px var(--accent-glow);}
.card.dragging{opacity:.55;border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset;}
.card.playing{border-color:var(--accent-2);}

/* the wave area becomes a scrubber on the sound you're previewing */
.wave-wrap{position:relative;width:100%;height:var(--wave-h);padding:7px 9px 4px;touch-action:none;}
.card.cued .wave-wrap{cursor:ew-resize;}
.wave{display:block;width:100%;height:100%;color:var(--wave);}
.card.sel .wave{color:var(--wave-sel);}
.wave-skel{position:absolute;inset:7px 9px 4px;border-radius:6px;
  background:linear-gradient(90deg,rgba(255,255,255,.04),rgba(255,255,255,.09),rgba(255,255,255,.04));
  background-size:200% 100%;animation:shimmer 1.3s linear infinite;}
.card.ready .wave-skel{display:none;}
@keyframes shimmer{0%{background-position:200% 0;}100%{background-position:-200% 0;}}

/* playhead / progress line (Premiere-style, draggable) */
.wave-prog{position:absolute;top:3px;bottom:4px;width:2px;background:var(--accent-2);
  left:9px;display:none;box-shadow:0 0 6px var(--accent-glow);pointer-events:none;border-radius:1px;}
.wave-prog::before{content:"";position:absolute;top:-1px;left:50%;transform:translateX(-50%);
  width:9px;height:7px;background:var(--accent-2);border-radius:2px 2px 0 0;
  clip-path:polygon(0 0,100% 0,100% 55%,50% 100%,0 55%);box-shadow:0 0 6px var(--accent-glow);}
.card.playing .wave-prog,.card.cued .wave-prog{display:block;}

.card-foot{display:flex;align-items:center;gap:6px;padding:5px 9px 8px;}
.play-ic{flex:0 0 auto;width:18px;height:18px;display:flex;align-items:center;justify-content:center;
  color:var(--txt-dim);}
.play-ic svg{width:13px;height:13px;fill:currentColor;}
.card:hover .play-ic{color:var(--txt);}
.card.playing .play-ic{color:var(--accent-2);}
.card-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:11.5px;color:var(--txt);font-weight:500;}
.card-dur{flex:0 0 auto;font-size:10px;color:var(--txt-faint);font-variant-numeric:tabular-nums;}
.star{flex:0 0 auto;width:20px;height:20px;display:flex;align-items:center;justify-content:center;
  cursor:pointer;color:var(--txt-faint);transition:color .14s var(--ease),transform .12s var(--ease-pop);}
.star svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linejoin:round;}
.star:hover{color:var(--accent-2);transform:scale(1.12);}
.star.on{color:#f5b942;}
.star.on svg{fill:#f5b942;stroke:#f5b942;}

.sounds-empty{padding:14px 4px;color:var(--txt-faint);font-size:11.5px;text-align:center;}

/* search results */
.results{display:block;}
.results-head{padding:4px 4px 8px;color:var(--txt-dim);font-size:12px;font-weight:600;}

/* loading */
.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;
  padding:60px 0;color:var(--txt-dim);}
.spinner{width:30px;height:30px;border-radius:50%;border:3px solid rgba(255,255,255,.12);
  border-top-color:var(--accent);animation:spin .8s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}
.loading-txt{font-size:12px;}

/* ===================== footer (always visible bottom bar) ===================== */
.footer{
  flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:10px;
  flex-wrap:wrap;row-gap:8px;
  padding:8px 12px;border-top:1px solid var(--line);
  background:linear-gradient(0deg,#282a30,#1e1f23);
  position:relative;
}
.foot-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end;margin-left:auto;}
.sel-info{font-size:12px;color:var(--txt-dim);}
.sel-info span{color:var(--txt);font-weight:700;}
.footer-btns{display:flex;gap:8px;}

/* media player controls */
.media-ctrls{display:flex;align-items:center;gap:6px;}
.mbtn{
  width:32px;height:30px;border-radius:var(--radius-sm);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  background:var(--panel);border:1px solid var(--line-2);color:var(--txt-dim);
  transition:background .16s var(--ease),border-color .16s var(--ease),transform .12s var(--ease-pop),color .16s var(--ease);
}
.mbtn:hover{background:var(--panel-2);border-color:rgba(255,255,255,.2);color:var(--txt);}
.mbtn:active{transform:scale(.92);}
.mbtn.live{color:var(--accent-2);border-color:rgba(96,165,250,.4);}
.mbtn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.mbtn.play-state svg{fill:currentColor;stroke:none;}
.mbtn.on{color:var(--accent-2);border-color:rgba(96,165,250,.45);background:rgba(59,130,246,.12);}

/* fade in / fade out popover */
.fade-pop{
  position:absolute;right:12px;bottom:calc(100% + 8px);width:230px;z-index:40;
  background:#23252b;border:1px solid var(--line-2);border-radius:var(--radius);
  box-shadow:0 16px 40px -12px rgba(0,0,0,.7);padding:12px 13px;
  display:none;
}
.fade-pop.show{display:block;}
.fade-pop h4{margin:0 0 9px;font-size:12px;font-weight:700;color:var(--txt);letter-spacing:.02em;}
.fade-row{display:flex;align-items:center;gap:9px;margin:9px 0;}
.fade-row label{flex:0 0 58px;font-size:11.5px;color:var(--txt-dim);}
.fade-row input[type=range]{flex:1;min-width:0;max-width:none;}
.fade-row .val{flex:0 0 40px;text-align:right;font-size:11px;color:var(--txt);
  font-variant-numeric:tabular-nums;}
.fade-hint{margin-top:10px;font-size:10.5px;line-height:1.5;color:var(--txt-faint);}

/* "All sounds" label inside an opened folder */
.grid-label{padding:8px 6px 2px;color:var(--txt-dim);font-size:11px;font-weight:600;letter-spacing:.02em;}

/* ===================== toast ===================== */
.toast{
  position:fixed;left:50%;bottom:64px;transform:translateX(-50%) translateY(16px);
  background:rgba(20,21,24,.96);color:#fff;border:1px solid var(--line-2);
  padding:9px 16px;border-radius:22px;font-size:12px;font-weight:500;
  box-shadow:0 10px 30px -8px rgba(0,0,0,.6);
  opacity:0;pointer-events:none;transition:opacity .22s var(--ease),transform .26s var(--ease-pop);
  z-index:50;white-space:nowrap;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
.toast.err{border-color:rgba(239,68,68,.5);}

/* ===================== tabs + views ===================== */
.tabbar{
  flex:0 0 auto;display:flex;gap:4px;padding:7px 8px 0;
  background:var(--bg);border-bottom:1px solid var(--line);
}
.tab{
  flex:1;padding:8px 10px;border:none;background:transparent;color:var(--txt-dim);
  font-size:12.5px;font-weight:600;cursor:pointer;border-radius:8px 8px 0 0;
  border-bottom:2px solid transparent;margin-bottom:-1px;
  transition:color .15s var(--ease),background .15s var(--ease),border-color .15s var(--ease);
}
.tab:hover{color:var(--txt);background:rgba(255,255,255,.04);}
.tab.active{color:var(--txt);border-bottom-color:var(--accent);}

.view{flex:1 1 auto;min-height:0;display:none;flex-direction:column;}
.view.active{display:flex;}

/* ===================== effect view ===================== */
.fx-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:10px 12px 12px;}

.fx-clip{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:10px;margin-bottom:11px;
}
.fx-cliphead{display:flex;align-items:center;gap:8px;margin-bottom:9px;}
.fx-clipname{
  flex:1;min-width:0;font-size:12.5px;font-weight:600;color:var(--txt);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.btn.small{
  display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 10px;
  font-size:11.5px;flex:0 0 auto;
}
.btn.small svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}

.fx-wave{
  position:relative;height:66px;background:var(--panel-2);
  border-radius:9px;overflow:hidden;padding:7px 9px;
}
.fx-wave .wave{display:block;width:100%;height:100%;color:var(--wave);}
.fx-wave .wave-prog{display:block;top:7px;bottom:7px;}

.fx-clipfoot{display:flex;align-items:center;gap:8px;margin-top:9px;}
.fx-dur{margin-left:auto;font-size:11px;color:var(--txt-dim);font-variant-numeric:tabular-nums;}

.fx-empty{color:var(--txt-faint);font-size:12px;line-height:1.55;text-align:center;padding:22px 14px;}
.fx-empty b{color:var(--txt-dim);}

.fx-effects{display:flex;flex-direction:column;gap:8px;zoom:var(--fx-zoom,1);}
.fx-card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:9px 11px 11px;transition:opacity .15s var(--ease);
}
.fx-card.off{opacity:.5;}
.fx-card-head{display:flex;align-items:center;gap:9px;margin-bottom:8px;}
.fx-title{font-size:12.5px;font-weight:700;color:var(--txt);}
.fx-val{
  margin-left:auto;font-size:11.5px;color:var(--accent-2);font-weight:600;
  font-variant-numeric:tabular-nums;
}
.fx-slider{width:100%;max-width:none;min-width:0;}
.fx-ends{display:flex;justify-content:space-between;margin-top:5px;font-size:10px;color:var(--txt-faint);}
.fx-hint2{margin-top:7px;font-size:10.5px;color:var(--txt-faint);}
.fx-check{
  display:flex;align-items:center;gap:7px;margin-top:11px;
  font-size:11.5px;color:var(--txt-dim);cursor:pointer;
}
.fx-check input{width:auto;min-width:0;height:auto;accent-color:var(--accent);cursor:pointer;}
.fx-check input:disabled{cursor:default;}

/* toggle switch */
.fx-switch{position:relative;display:inline-block;width:34px;height:18px;flex:0 0 auto;cursor:pointer;}
.fx-switch input{position:absolute;opacity:0;width:0;height:0;}
.fx-knob{position:absolute;inset:0;background:rgba(255,255,255,.16);border-radius:20px;transition:background .15s var(--ease);}
.fx-knob::before{
  content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;
  background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);transition:transform .18s var(--ease-pop);
}
.fx-switch input:checked + .fx-knob{background:var(--accent);}
.fx-switch input:checked + .fx-knob::before{transform:translateX(16px);}

/* apply bar */
.fx-apply{
  flex:0 0 auto;display:flex;align-items:center;gap:10px;padding:9px 12px;
  border-top:1px solid var(--line);background:var(--bg-2);
}
.fx-status{
  flex:1;min-width:0;font-size:11px;color:var(--txt-dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.fx-apply .btn.primary{flex:0 0 auto;}
.fx-apply .btn.primary:disabled{opacity:.55;cursor:default;filter:none;}

/* ---- effect-card scale toolbar ---- */
.fx-toolbar{display:flex;align-items:center;gap:10px;padding:2px 1px 8px;}
.fx-tool-title{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--txt-dim);}
.fx-scale-wrap{margin-left:auto;display:flex;align-items:center;gap:7px;}
.fx-scale-ic{width:15px;height:15px;color:var(--txt-faint);stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;}
.fx-scale{width:96px;max-width:40vw;}

/* ---- "Add effect" dropdown ---- */
.fx-addwrap{position:relative;}
.fx-add{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:9px 12px;border-radius:var(--radius);cursor:pointer;
  background:var(--panel);border:1px dashed var(--line-2);color:var(--txt-dim);
  font-size:12.5px;font-weight:700;
  transition:background .15s var(--ease),border-color .15s var(--ease),color .15s var(--ease);
}
.fx-add:hover{background:var(--panel-2);border-color:var(--accent);color:var(--txt);}
.fx-add.open{border-style:solid;border-color:var(--accent);color:var(--txt);}
.fx-add svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s var(--ease);}
.fx-add.open svg{transform:rotate(180deg);}

.fx-add-menu{
  display:none;position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:40;
  background:var(--panel-2);border:1px solid var(--line-2);border-radius:10px;
  box-shadow:0 18px 40px -16px rgba(0,0,0,.7);overflow:hidden;padding:4px;
}
.fx-add-menu.open{display:block;}
.fx-add-item{
  padding:9px 11px;border-radius:7px;font-size:12.5px;color:var(--txt);cursor:pointer;
  transition:background .12s var(--ease),color .12s var(--ease);
}
.fx-add-item:hover{background:var(--accent);color:#fff;}

/* ---- dynamic effect cards ---- */
.fx-chain{display:flex;flex-direction:column;gap:8px;margin-top:8px;}
.fx-chain:empty{margin-top:0;}
.fx-dyn .fx-card-head{margin-bottom:0;cursor:pointer;}
.fx-spacer{flex:1 1 auto;}
.fx-iconbtn{
  flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:24px;height:24px;
  background:none;border:none;border-radius:6px;color:var(--txt-faint);cursor:pointer;
  transition:background .12s var(--ease),color .12s var(--ease);
}
.fx-iconbtn:hover{background:rgba(255,255,255,.07);color:var(--txt);}
.fx-iconbtn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
.fx-remove:hover{color:#f87171;}
.fx-collapse svg{transition:transform .18s var(--ease);}
.fx-dyn.collapsed .fx-collapse svg{transform:rotate(-90deg);}

.fx-body{display:block;margin-top:11px;}
.fx-dyn.collapsed .fx-body{display:none;}
.fx-param{margin-top:12px;}
.fx-param:first-child{margin-top:0;}
.fx-param-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:5px;}
.fx-param-label{font-size:11.5px;color:var(--txt-dim);font-weight:600;}
.fx-param-val{font-size:11px;color:var(--accent-2);font-weight:600;font-variant-numeric:tabular-nums;}

.fx-select{
  width:100%;padding:6px 8px;border-radius:7px;cursor:pointer;
  background:var(--panel-2);border:1px solid var(--line-2);color:var(--txt);font-size:12px;
}
.fx-select:focus{outline:none;border-color:var(--accent);}

/* ---- waveform is click/drag seekable ---- */
.fx-wave{cursor:pointer;}
.fx-wave .wave-prog{pointer-events:none;}

/* ---- Instruction button + help overlay ---- */
#fxView{position:relative;}
.fx-help-btn{
  flex:0 0 auto;display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;
  background:none;border:1px solid var(--line-2);color:var(--txt-dim);font-size:11.5px;font-weight:600;cursor:pointer;
  transition:background .15s var(--ease),color .15s var(--ease),border-color .15s var(--ease);
}
.fx-help-btn:hover{background:var(--panel-2);color:var(--txt);border-color:var(--accent);}
.fx-help-btn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}

.fx-help{
  display:none;position:absolute;left:0;right:0;top:0;bottom:0;z-index:60;background:var(--bg);flex-direction:column;
}
.fx-help.open{display:flex;}
.fx-help-bar{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line);}
.fx-help-title{font-size:13px;font-weight:700;color:var(--txt);}
.fx-help-bar .fx-iconbtn{margin-left:auto;}
.fx-help-list{flex:1 1 auto;min-height:0;overflow-y:auto;padding:8px 10px 14px;}
.fx-help-item{border:1px solid var(--line);border-radius:10px;margin-bottom:8px;overflow:hidden;background:var(--panel);}
.fx-help-head{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:11px 13px;background:none;border:none;cursor:pointer;color:var(--txt);text-align:left;
}
.fx-help-head:hover{background:var(--panel-2);}
.fx-help-name{font-size:12.5px;font-weight:700;}
.fx-help-arrow{display:flex;color:var(--txt-faint);}
.fx-help-arrow svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .18s var(--ease);}
.fx-help-item.open .fx-help-arrow svg{transform:rotate(180deg);}
.fx-help-text{display:none;padding:0 13px 13px;font-size:12px;line-height:1.55;color:var(--txt-dim);}
.fx-help-item.open .fx-help-text{display:block;}

/* ===================== License gate + trial pill ===================== */
.lic-gate{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;
  background:rgba(10,11,14,.97);backdrop-filter:blur(3px);padding:22px;}
.lic-gate.show{display:flex;}
.lic-card{width:100%;max-width:360px;background:var(--panel,#21262f);border:1px solid var(--line-2,#333a47);
  border-radius:14px;padding:22px 20px;box-shadow:0 20px 60px -20px rgba(0,0,0,.7);}
.lic-card h2{margin:0 0 3px;font-size:16px;color:var(--txt,#e7ebf2);letter-spacing:.3px;}
.lic-card h2 b{color:var(--accent,#3b82f6);}
.lic-sub{margin:0 0 16px;font-size:11.5px;color:var(--txt-dim,#8b94a3);line-height:1.5;}
.lic-lbl{display:block;font-size:9.5px;letter-spacing:.7px;text-transform:uppercase;color:var(--txt-dim,#8b94a3);margin:12px 0 5px;}
.lic-dev{display:flex;gap:6px;align-items:center;}
.lic-dev code{flex:1;background:var(--panel-2,#262c37);border:1px solid var(--line-2,#333a47);border-radius:9px;
  padding:9px 11px;font-family:ui-monospace,Consolas,monospace;font-size:13px;color:var(--accent-2,#60a5fa);
  letter-spacing:1px;word-break:break-all;user-select:all;}
.lic-mini{padding:8px 10px;border-radius:8px;font-size:11px;font-weight:600;cursor:pointer;color:#fff;
  border:1px solid var(--line-2,#333a47);background:var(--panel-2,#262c37);white-space:nowrap;}
.lic-mini:hover{filter:brightness(1.15);}
.lic-input{width:100%;background:var(--panel-2,#262c37);border:1px solid var(--line-2,#333a47);color:var(--txt,#e7ebf2);
  border-radius:9px;padding:11px 12px;font-family:ui-monospace,Consolas,monospace;font-size:14px;letter-spacing:1px;box-sizing:border-box;}
.lic-input:focus{outline:none;border-color:var(--accent,#3b82f6);}
.lic-btn{margin-top:14px;width:100%;background:linear-gradient(180deg,#4c8dfb,#2f6fe0);color:#fff;border:0;
  border-radius:10px;padding:12px;font-size:14px;font-weight:700;cursor:pointer;}
.lic-btn:hover{filter:brightness(1.08);}
.lic-msg{margin-top:10px;font-size:11.5px;min-height:16px;}
.lic-msg.err{color:#f0736b;}
.lic-msg.ok{color:#5fcf8a;}
.lic-later{display:block;width:100%;margin-top:10px;background:transparent;border:0;color:var(--txt-dim,#8b93a7);
  font-size:12px;cursor:pointer;padding:6px;letter-spacing:.3px;}
.lic-later:hover{color:var(--txt,#e7ebf2);text-decoration:underline;}
#amTrialPill{position:fixed;top:7px;left:50%;transform:translateX(-50%);z-index:60;display:none;
  padding:3px 11px;border-radius:999px;font-size:10.5px;font-weight:700;letter-spacing:.3px;
  color:#fde68a;background:rgba(245,158,11,.14);border:1px solid rgba(245,158,11,.5);
  cursor:pointer;user-select:none;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.35);}
#amTrialPill.show{display:block;}
#amTrialPill:hover{filter:brightness(1.12);}
