* { margin: 0; padding: 0; box-sizing: border-box; }
[hidden] { display: none !important; }
:root {
  --bg: #07080d;
  --bg2: #0d1020;
  --panel: #11131f;
  --panel2: #171a2a;
  --line: rgba(255,255,255,0.08);
  --txt: #e8ecf5;
  --muted: #8c93a6;
  --accent1: #6a8dff;
  --accent2: #b06cff;
}
html, body {
  height: 100%;
  background: var(--bg);
  color: var(--txt);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
  overflow: hidden;
}

/* ---------- screens ---------- */
.screen { position: fixed; inset: 0; display: none; overflow: auto; }
.screen.active { display: block; }
#screen-studio.active { display: flex; flex-direction: column; }

.grad {
  background: linear-gradient(120deg, var(--accent1), var(--accent2), #ff7ad1);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}

/* ---------- buttons ---------- */
.btn {
  appearance: none; border: 1px solid var(--line);
  background: rgba(255,255,255,0.06); color: var(--txt);
  font-size: 14px; padding: 9px 16px; border-radius: 10px; cursor: pointer;
  transition: transform .08s, background .15s, border-color .15s;
}
.btn:hover { background: rgba(255,255,255,0.12); }
.btn:active { transform: scale(0.97); }
.btn.primary { background: linear-gradient(135deg, var(--accent1), var(--accent2)); border-color: transparent; font-weight: 600; }
.btn.ghost { background: transparent; }
.btn.big { font-size: 16px; padding: 14px 26px; border-radius: 12px; }
.back { position: absolute; top: 22px; left: 22px; z-index: 3; background: rgba(255,255,255,0.06);
  border: 1px solid var(--line); color: var(--txt); padding: 8px 14px; border-radius: 10px; cursor: pointer; }
.back.small { position: static; padding: 6px 12px; }

/* ---------- landing ---------- */
#screen-landing { background:
  radial-gradient(1200px 600px at 70% -10%, rgba(122,139,255,0.18), transparent),
  radial-gradient(900px 500px at 10% 10%, rgba(176,108,255,0.14), transparent), var(--bg); }
.nav { display: flex; align-items: center; justify-content: space-between; padding: 20px 32px; }
.brand { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 20px; }
.brand .logo { font-size: 22px; }
.nav-links { display: flex; align-items: center; gap: 22px; color: var(--muted); font-size: 14px; }
.nav-links span { cursor: pointer; }
.nav-links span:hover { color: var(--txt); }

.hero { max-width: 920px; margin: 0 auto; padding: 40px 24px 80px; text-align: center; }
.badge-row { display: flex; gap: 8px; justify-content: center; margin-bottom: 22px; flex-wrap: wrap; }
.pill { font-size: 12px; color: #cfd5e6; background: rgba(255,255,255,0.07);
  border: 1px solid var(--line); padding: 5px 12px; border-radius: 999px; }
.hero h1 { font-size: 52px; line-height: 1.12; letter-spacing: -0.5px; margin-bottom: 18px; }
.hero .sub { color: var(--muted); font-size: 17px; line-height: 1.6; margin-bottom: 30px; }
.cta-row { display: flex; gap: 14px; justify-content: center; margin-bottom: 46px; flex-wrap: wrap; }

.effect-strip { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-bottom: 46px; }
.effect-strip .es {
  width: 120px; height: 76px; border-radius: 12px; border: 1px solid var(--line);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 4px; font-size: 12px; color: #d7dcec; overflow: hidden; position: relative;
}
.effect-strip .es .em { font-size: 22px; }

.features { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-top: 10px; }
.feat { background: rgba(255,255,255,0.04); border: 1px solid var(--line); border-radius: 14px; padding: 18px; text-align: left; }
.feat b { display: block; font-size: 15px; margin-bottom: 6px; }
.feat span { color: var(--muted); font-size: 13px; }
@media (max-width: 760px) { .features { grid-template-columns: repeat(2,1fr);} .hero h1{font-size:36px;} }

/* ---------- upload ---------- */
#screen-upload { background: var(--bg); }
.upload-wrap { max-width: 640px; margin: 0 auto; padding: 110px 24px 60px; text-align: center; }
.upload-wrap h2 { font-size: 30px; margin-bottom: 10px; }
.muted { color: var(--muted); } .tiny { font-size: 12px; } .small { font-size: 13px; }
.dropzone {
  display: block; margin: 30px 0 24px; border: 2px dashed rgba(255,255,255,0.18);
  border-radius: 18px; padding: 54px 20px; cursor: pointer; transition: border-color .15s, background .15s;
  background: rgba(255,255,255,0.02);
}
.dropzone:hover, .dropzone.drag { border-color: var(--accent1); background: rgba(106,141,255,0.08); }

/* ⭐ 上传页：三入口（YouTube 主推 + 音频/MIDI 卡片）*/
.entry-hero { margin: 22px 0 8px; padding: 20px 20px 18px; border-radius: 18px;
  border: 1.5px solid rgba(106,141,255,0.5);
  background: linear-gradient(135deg, rgba(106,141,255,0.14), rgba(176,108,255,0.12)); }
.entry-hero-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.entry-hero-badge { font-size: 12px; font-weight: 700; color: #fff; padding: 3px 10px; border-radius: 999px;
  background: linear-gradient(135deg, var(--accent1, #6a8dff), var(--accent2, #b06cff)); white-space: nowrap; }
.entry-hero-title { font-size: 18px; font-weight: 700; }
.entry-hero-sub { color: var(--muted); font-size: 13px; margin: 8px 0 14px; }
.entry-hero .yt-row { margin: 0; }

.entry-or { display: flex; align-items: center; gap: 12px; color: var(--muted); font-size: 13px; margin: 18px 0 14px; }
.entry-or::before, .entry-or::after { content: ''; flex: 1; height: 1px; background: var(--line); }

.entry-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.entry-card { display: flex; flex-direction: column; align-items: center; gap: 4px; text-align: center;
  padding: 22px 16px; border-radius: 16px; border: 2px dashed rgba(255,255,255,0.16);
  background: rgba(255,255,255,0.02); cursor: pointer; transition: border-color .15s, background .15s; }
.entry-card:hover, .entry-card.drag { border-color: var(--accent1, #6a8dff); background: rgba(106,141,255,0.08); }
.entry-ic { font-size: 28px; }
.entry-t { font-weight: 600; font-size: 15px; }
.entry-s { color: var(--muted); font-size: 12px; }
@media (max-width: 560px) { .entry-grid { grid-template-columns: 1fr; } }

/* YouTube 链接导入 */
.yt-or { display: flex; align-items: center; gap: 12px; color: var(--muted); font-size: 13px; margin: 4px 0 14px; }
.yt-or::before, .yt-or::after { content: ''; flex: 1; height: 1px; background: var(--line); }
.yt-row { display: flex; gap: 10px; margin-bottom: 18px; }
.yt-input { flex: 1; min-width: 0; padding: 12px 14px; border-radius: 12px; border: 1px solid var(--line);
  background: rgba(255,255,255,0.03); color: var(--text); font-size: 14px; }
.yt-input:focus { outline: none; border-color: var(--accent1); background: rgba(106,141,255,0.06); }
.yt-row .btn { white-space: nowrap; }
/* 工作室面板内的紧凑 URL 行（对比模式加载原视频） */
.yt-row.mini { gap: 6px; margin: 0; }
.yt-row.mini .yt-input { padding: 7px 10px; border-radius: 9px; font-size: 12px; }
.dz-icon { font-size: 40px; margin-bottom: 12px; }
.dz-title { font-size: 18px; font-weight: 600; margin-bottom: 6px; }
.dz-sub { color: var(--muted); font-size: 13px; }
.or { color: var(--muted); font-size: 13px; margin: 24px 0 16px; }
.sample-row { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-bottom: 24px; }
.sample { background: var(--panel2); border: 1px solid var(--line); color: var(--txt);
  padding: 12px 18px; border-radius: 12px; cursor: pointer; font-size: 14px; }
.sample:hover { background: #20243a; }

/* ---------- processing ---------- */
#screen-processing { background: var(--bg); display: none; }
#screen-processing.active { display: flex; align-items: center; justify-content: center; }
.proc-wrap { text-align: center; }
.proc-wrap h2 { font-size: 24px; margin: 22px 0 26px; }
.proc-spinner { width: 54px; height: 54px; margin: 0 auto; border-radius: 50%;
  border: 4px solid rgba(255,255,255,0.12); border-top-color: var(--accent1); animation: spin 0.9s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.proc-steps { list-style: none; text-align: left; display: inline-block; }
.proc-steps li { color: var(--muted); font-size: 15px; padding: 8px 0 8px 30px; position: relative; transition: color .3s; }
.proc-steps li::before { content: "○"; position: absolute; left: 0; }
.proc-steps li.active { color: var(--txt); }
.proc-steps li.done { color: #4ade80; }
.proc-steps li.done::before { content: "✓"; color: #4ade80; }
.proc-steps li.active::before { content: "◐"; color: var(--accent1); }

/* ---------- studio ---------- */
.studio-top { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--line); background: var(--panel); }
.studio-top .brand.small { font-size: 16px; }
.title-input { background: rgba(255,255,255,0.05); border: 1px solid var(--line); color: var(--txt);
  padding: 8px 12px; border-radius: 10px; font-size: 14px; width: 280px; max-width: 32vw; }
.spacer { flex: 1; }
.studio-body { flex: 1; display: flex; min-height: 0; }
.stage-area { flex: 1; display: flex; align-items: center; justify-content: center; padding: 20px; background:
  radial-gradient(800px 400px at 50% 0%, rgba(122,139,255,0.06), transparent), var(--bg); min-width: 0; }
.stage { position: relative; max-width: 100%; max-height: 100%; background: #000;
  border-radius: 12px; overflow: hidden; box-shadow: 0 20px 60px rgba(0,0,0,0.5); }
.stage.ar-16-9 { aspect-ratio: 16 / 9; width: 100%; }
.stage.ar-9-16 { aspect-ratio: 9 / 16; height: 100%; }
.stage.ar-1-1  { aspect-ratio: 1 / 1; height: 100%; }
.stage canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }

.panel { width: 312px; flex-shrink: 0; border-left: 1px solid var(--line); background: var(--panel);
  overflow-y: auto; padding: 8px 14px 24px; }
.panel-sec { padding: 14px 0; border-bottom: 1px solid var(--line); }
.panel-h { font-size: 12px; text-transform: uppercase; letter-spacing: 1px; color: var(--muted); margin-bottom: 12px; }
.collapsible > .panel-h { cursor: pointer; display: flex; align-items: center; justify-content: space-between; margin-bottom: 0; user-select: none; }
.collapsible .chev { transition: transform 0.18s; font-size: 11px; }
.collapsible:not(.collapsed) > .panel-h { margin-bottom: 12px; }
.collapsible.collapsed .chev { transform: rotate(-90deg); }
.collapsible.collapsed .collapse-body { display: none; }
.exp-block { margin-top: 22px; border: 1px dashed var(--line); border-radius: 12px; padding: 0 16px; text-align: left; }
.exp-block > summary { cursor: pointer; color: var(--muted); font-size: 13px; padding: 12px 0; list-style: none; user-select: none; }
.exp-block > summary::-webkit-details-marker { display: none; }
.exp-block[open] > summary { border-bottom: 1px solid var(--line); margin-bottom: 12px; }
.style-pick { margin: 0 0 18px; }
.style-pick .panel-h { margin-bottom: 8px; }
.style-pick .chips { justify-content: center; }
.cards { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.card { background: var(--panel2); border: 1px solid var(--line); border-radius: 10px; padding: 10px 8px;
  cursor: pointer; text-align: center; font-size: 12px; transition: border-color .15s, background .15s; }
.card:hover { background: #20243a; }
.card.active { border-color: var(--accent1); background: rgba(106,141,255,0.14); }
.card .em { font-size: 20px; display: block; margin-bottom: 4px; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip { background: var(--panel2); border: 1px solid var(--line); color: var(--txt); padding: 8px 12px;
  border-radius: 999px; cursor: pointer; font-size: 12.5px; }
.chip:hover { background: #20243a; }
.chip.active { border-color: var(--accent1); background: rgba(106,141,255,0.14); }
.chip.theme-chip { width: 30px; height: 30px; padding: 0; border-radius: 50%; }
.switch { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); cursor: pointer; }

.playbar { display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-top: 1px solid var(--line); background: var(--panel); }
.file-btn { background: rgba(255,255,255,0.06); border: 1px solid var(--line); padding: 9px 14px; border-radius: 10px; cursor: pointer; }
.time { font-variant-numeric: tabular-nums; color: var(--muted); font-size: 13px; }
/* 播放控制（右栏顶部） */
.play-row { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
.play-row .btn { padding: 9px 14px; }
.play-row .time { margin-left: auto; }
.seekbar { position: relative; height: 6px; background: rgba(255,255,255,0.1); border-radius: 4px; margin: 4px 0 10px; cursor: pointer; }
.seek-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 0; background: var(--accent, #7c5cff); border-radius: 4px; }
.seek-knob { position: absolute; top: 50%; left: 0; width: 13px; height: 13px; margin-left: -6px; transform: translateY(-50%); background: #fff; border-radius: 50%; box-shadow: 0 1px 4px rgba(0,0,0,0.4); pointer-events: none; }
.panel-sec .sound-switch { margin-bottom: 10px; }
.panel-sec .file-btn { font-size: 13px; display: inline-block; }
.sound-switch { display: inline-flex; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; }
.sound-switch .seg { background: transparent; border: 0; border-right: 1px solid var(--line); color: var(--muted); padding: 9px 12px; cursor: pointer; font-size: 13px; white-space: nowrap; }
.sound-switch .seg:last-child { border-right: 0; }
.sound-switch .seg:hover { background: rgba(255,255,255,0.06); color: var(--text); }
.sound-switch .seg.active { background: var(--accent, #7c5cff); color: #fff; }
.mx-presets { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.mx-rows { display: flex; flex-direction: column; gap: 6px; }
.mx-subhead { font-size: 11px; color: var(--muted); margin: 12px 0 2px; padding-top: 8px; border-top: 1px solid var(--line); }
.mx-row { display: flex; align-items: center; gap: 8px; }
.mx-dot { width: 10px; height: 10px; border-radius: 50%; flex: 0 0 auto; }
.mx-name { flex: 1; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mx-btn { background: rgba(255,255,255,0.05); border: 1px solid var(--line); color: var(--muted); padding: 5px 9px; border-radius: 8px; cursor: pointer; font-size: 12px; }
.mx-btn.on { background: var(--accent, #7c5cff); border-color: var(--accent, #7c5cff); color: #fff; }
.mx-volrow { display: flex; align-items: center; gap: 8px; margin: 2px 0 8px 18px; }
.mx-vlabel { font-size: 11px; color: var(--muted); flex: 0 0 auto; }
.mx-vol { flex: 1; height: 4px; accent-color: var(--accent, #7c5cff); cursor: pointer; }
.mx-vol-inline { flex: 1; max-width: 140px; }

.export-dur { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 10px; }
.export-dur .ed-label { font-size: 12px; color: var(--muted); margin-right: 2px; }
.export-dur .seg { background: rgba(255,255,255,0.05); border: 1px solid var(--line); color: var(--muted); padding: 5px 11px; border-radius: 8px; cursor: pointer; font-size: 12px; }
.export-dur .seg:hover { color: var(--text); background: rgba(255,255,255,0.08); }
.export-dur .seg.active { background: var(--accent, #7c5cff); border-color: var(--accent, #7c5cff); color: #fff; }

.tool-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.tool-row .btn.small { padding: 6px 12px; font-size: 13px; }
.seg-mini { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.seg-mini .seg { background: rgba(255,255,255,0.05); border: 1px solid var(--line); color: var(--muted); padding: 5px 10px; border-radius: 8px; cursor: pointer; font-size: 12px; }
.seg-mini .seg:hover { color: var(--text); background: rgba(255,255,255,0.08); }
.seg-mini .seg.active { background: var(--accent, #7c5cff); border-color: var(--accent, #7c5cff); color: #fff; }
.look-chip { font-size: 13px; }
.lang-sel { background: rgba(255,255,255,0.05); border: 1px solid var(--line); color: var(--text); padding: 5px 8px; border-radius: 8px; font-size: 12px; cursor: pointer; }
.lang-nav { background: rgba(255,255,255,0.06); border: 1px solid var(--line); color: var(--text); padding: 6px 10px; border-radius: 10px; font-size: 13px; cursor: pointer; }

/* 钢琴特效维度控件 */
.fx-group { margin-bottom: 12px; }
.fx-label { font-size: 11px; color: var(--muted); margin-bottom: 6px; }
.fx-color { width: 34px; height: 26px; padding: 0; border: 1px solid rgba(255,255,255,0.18); border-radius: 7px; background: transparent; cursor: pointer; flex: none; }
.fx-color::-webkit-color-swatch { border: none; border-radius: 5px; }
.fx-color::-webkit-color-swatch-wrapper { padding: 2px; }
.fx-chip { font-size: 12px; padding: 6px 11px; }
.lang-nav:hover { background: rgba(255,255,255,0.1); }

.export-overlay { position: fixed; inset: 0; z-index: 50; background: rgba(5,6,12,0.86);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 16px; }
.eo-title { font-size: 20px; font-weight: 600; }
.eo-sub { color: var(--muted); font-size: 14px; }
@media (max-width: 820px) { .panel { width: 240px; } }
