/* 声音 · 音色库（.vl-*） */
.vm-heygen { margin-top: 20px; }
.vm-heygen-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.vm-heygen-head h3 { margin: 0; }
.vm-heygen-head .hint { margin: 6px 0 12px; }
.vm-heygen > input { max-width: 440px; }
.vm-cloud-voice { cursor: default; min-width: 0; }
.vm-cloud-voice audio { width: 100%; height: 34px; margin-top: 12px; }
.vm-voice-id { overflow-wrap: anywhere; font-size: 12px; margin-top: 8px; }
.vl-defs { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr)); gap: 12px 16px; }
.vl-def { display: flex; flex-direction: column; gap: 6px; padding: 12px 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--bg-3); }
.vl-def-t { display: flex; flex-direction: column; gap: 2px; }
.vl-def-t small { color: var(--muted); font-size: 12px; line-height: 1.5; }
.vl-def select { width: 100%; }
.vl-warn { color: var(--warn); font-size: 12px; }
.vl-bar { display: flex; flex-wrap: wrap; gap: 10px 14px; align-items: center; margin-bottom: 12px; }
.vl-bar input[type=search] { flex: 1 1 240px; min-width: 200px; }
.vl-bar .chips { margin: 0; }
.vl-list { display: flex; flex-direction: column; gap: 10px; }
.vl-row { border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; background: var(--bg-2); }
.vl-row.open { border-color: var(--line-2); background: var(--bg-3); }
.vl-h { display: grid; grid-template-columns: minmax(180px, 1.1fr) minmax(0, 1.6fr) auto; gap: 16px; align-items: center; }
.vl-name { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.vl-name b { font-size: 14.5px; }
.vl-name .mono { font-size: 12px; }
.vl-tags { margin-top: 2px; }
.vl-desc { font-size: 12px; }
.vl-use { display: flex; flex-direction: column; gap: 4px; min-width: 0; align-items: flex-start; }
.vl-use .lb, .vl-ru .lb { font-size: 11.5px; color: var(--dim); }
.vl-cov { font-size: 12px; }
.vl-act { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.vl-roles { display: flex; flex-wrap: wrap; gap: 8px 20px; margin: 12px 0 0; }
.vl-ru { display: flex; flex-direction: column; gap: 3px; }
.vl-t { width: 100%; margin-top: 12px; font-size: 13px; border-collapse: collapse; }
.vl-t th { text-align: left; font-weight: 500; color: var(--dim); font-size: 12px; white-space: nowrap; padding: 6px 8px; border-bottom: 1px solid var(--line); }
.vl-t td { padding: 7px 8px; border-bottom: 1px solid var(--line); vertical-align: middle; word-break: break-all; }
.vl-t tr.miss td { background: var(--warn-soft); }
.vl-t .mono { font-size: 12px; }
.vl-tact { white-space: nowrap; text-align: right; }
.vl-row .nb { display: inline-grid; place-items: center; min-width: 26px; height: 26px; border: 0; background: none; color: var(--muted); border-radius: 6px; cursor: pointer; font: inherit; font-size: 15px; padding: 0 4px; vertical-align: middle; }
.vl-row .nb:hover { background: var(--bg-4); color: var(--ink); }
.vl-row .nb.rm:hover { color: var(--cut); }
.vl-row .nb:disabled { opacity: .35; cursor: not-allowed; }
.vl-row .nb .ic { width: 13px; height: 13px; }
.vl-foot { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 12px; }
.vl-foot .grow { flex: 1; }
.lnk.bad { color: var(--cut); }
.vl-clones { display: flex; align-items: center; gap: 12px; }
.vl-clones > svg { width: 18px; height: 18px; color: var(--accent); flex: none; }
.vl-clones > div { flex: 1; font-size: 13px; color: var(--muted); }
.vl-clones b { color: var(--ink); }
.vl-player { margin-top: 12px; }
.vl-player audio { width: 100%; margin-top: 8px; }
.vl-er { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) auto auto; gap: 8px; align-items: center; margin: 6px 0; }
.vl-er .nb { border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 16px; }
.vl-cat .vl-ci { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1.2fr) auto; gap: 10px; align-items: center; cursor: default; }
.vl-cat .vl-ci audio { grid-column: 1 / -1; width: 100%; height: 32px; }
.vl-cn { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.vl-cd { font-size: 12px; }
.vl-cb { display: flex; gap: 6px; align-items: center; }
.vl-cb .nb { border: 0; background: none; color: var(--muted); cursor: pointer; }
@media (max-width: 900px) {
  .vl-h { grid-template-columns: 1fr; }
  .vl-act { justify-content: flex-start; }
  .vl-er, .vl-cat .vl-ci { grid-template-columns: 1fr; }
  .vl-t { display: block; overflow-x: auto; }
}
