/* ============================================================
   dtx2indies — UI 樣式（自單檔 HTML <style> 抽出）
   ============================================================ */
:root{
  --bg:transparent;--surface:var(--color-background-secondary,#17171a);--surface2:var(--color-background-tertiary,#222226);--border:var(--color-border-tertiary,#2e2e34);
  --text:var(--color-text-primary,#ececef);--text2:var(--color-text-secondary,#9a9aa3);--accent:#c084fc;--accent2:#a855f7;
  --green:#4ade80;--amber:#fbbf24;--red:#f87171;--blue:#60a5fa;
  --mono:var(--font-mono,ui-monospace,"SF Mono",Menlo,monospace);--sans:var(--font-sans,system-ui,-apple-system,sans-serif);
}
*{margin:0;padding:0;box-sizing:border-box}
#dtx-app{color:var(--text);font-family:var(--sans);width:100%;min-height:100%;font-size:16px}
.container{width:100%;max-width:820px;margin:0 auto;padding:clamp(20px,4vw,48px) clamp(12px,3vw,24px)}
h1{font-family:var(--mono);font-size:clamp(22px,5vw,28px);font-weight:700;letter-spacing:-.5px;margin-bottom:4px}
h1 span{color:var(--accent)}
.subtitle{color:var(--text2);font-size:14px;margin-bottom:20px;line-height:1.5}
/* tabs */
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--border);margin-bottom:24px;flex-wrap:wrap}
.tab{padding:9px 16px;font-size:13px;font-family:var(--mono);color:var(--text2);background:transparent;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:all .15s;margin-bottom:-1px}
.tab:hover{color:var(--text)}
.tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.tab-panel{display:none;animation:fade .2s ease}
.tab-panel.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
/* dropzone */
.dropzone{border:2px dashed var(--border);border-radius:16px;padding:clamp(28px,5vw,40px) 24px;text-align:center;cursor:pointer;transition:all .2s;background:var(--surface);position:relative}
.dropzone:hover,.dropzone.dragover{border-color:var(--accent);background:var(--surface2)}
.dropzone-icon{font-size:36px;margin-bottom:8px;opacity:.6}
.dropzone-text{font-size:14px;color:var(--text2);line-height:1.6}
.dropzone-text strong{color:var(--text)}
.dropzone input[type="file"]{position:absolute;inset:0;opacity:0;cursor:pointer}
.queue{margin-top:24px;display:grid;gap:12px}
.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 18px;transition:border-color .2s;content-visibility:auto;contain-intrinsic-size:auto 160px}
.card.processing{border-color:var(--accent)}
.card.done{border-color:#1a3a1a}
.card.error{border-color:#3a1a1a}
.card-header{display:flex;gap:14px;align-items:flex-start}
.card-cover{width:64px;height:64px;border-radius:8px;object-fit:cover;background:var(--surface2);flex-shrink:0}
.card-cover-placeholder{width:64px;height:64px;border-radius:8px;background:var(--surface2);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:24px;opacity:.3}
.card-cover-wrap{position:relative;width:64px;height:64px;flex-shrink:0}
.card-cover-wrap img,.card-cover-wrap .card-cover-placeholder{width:64px;height:64px;border-radius:8px}
.play-btn{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.45);border-radius:8px;cursor:pointer;opacity:0;transition:opacity .2s}
.card-cover-wrap:hover .play-btn{opacity:1}
.play-btn svg{width:28px;height:28px;fill:white;filter:drop-shadow(0 1px 2px rgba(0,0,0,0.5))}
.play-btn.playing{opacity:1;background:rgba(0,0,0,0.55)}
.card-info{flex:1;min-width:0}
.card-filename{font-family:var(--mono);font-size:12px;color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card-title{font-size:16px;font-weight:600;margin-top:3px;word-break:break-word}
.card-artist{font-size:13px;color:var(--text2);margin-top:1px;word-break:break-word}
.card-bpm{font-size:12px;color:var(--text2);margin-top:2px;font-family:var(--mono)}
.card-badge{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.badge{display:inline-block;font-size:11px;font-family:var(--mono);padding:2px 8px;border-radius:6px;font-weight:600;white-space:nowrap}
.badge-pending{background:var(--surface2);color:var(--text2)}
.badge-processing{background:#2d1f4e;color:var(--accent)}
.badge-done{background:#1a3a1a;color:var(--green)}
.badge-downloaded{background:#1a2a3a;color:var(--blue)}
.badge-error{background:#3a1a1a;color:var(--red)}
.badge-skipped{background:#2a2a30;color:#8b8b94}
.btn-x{width:22px;height:22px;padding:0;background:transparent;border:1px solid var(--border);border-radius:4px;color:var(--text2);cursor:pointer;font-size:14px;line-height:1;display:inline-flex;align-items:center;justify-content:center}
.btn-x:hover:not(:disabled){background:var(--surface2);color:var(--text);border-color:var(--text2)}
.btn-x:disabled{opacity:.3;cursor:not-allowed}
.card-details{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.diff-table{width:100%;font-size:13px;border-collapse:collapse}
.diff-table td{padding:3px 0;vertical-align:middle}
.diff-table td.diff-timeline{padding:3px 8px}
.diff-table td.diff-notes{width:78px;text-align:right;color:var(--text2);font-family:var(--mono)}
.timeline-legend{font-size:10px;color:var(--text2);margin-top:8px;font-family:var(--mono);display:flex;flex-wrap:wrap;gap:10px}
.timeline-legend .sw{display:inline-block;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-right:3px}
.diff-label{font-family:var(--mono);font-weight:600;color:var(--accent);width:80px}
.card-status{margin-top:8px;font-size:12px;color:var(--text2);line-height:1.8;word-break:break-word}
.card-status .ok{color:var(--green)}
.card-status .warn{color:var(--amber)}
.card-status .err{color:var(--red)}
.toolbar{margin-top:16px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.toolbar-info{font-size:12px;color:var(--text2);margin-left:auto}
.btn{padding:8px 18px;border:none;border-radius:8px;font-family:var(--sans);font-size:13px;font-weight:600;cursor:pointer;transition:all .15s}
.btn:disabled{opacity:.3;cursor:not-allowed}
.btn-primary{background:var(--accent2);color:#fff}
.btn-primary:hover:not(:disabled){background:var(--accent);transform:translateY(-1px)}
.btn-sm{padding:6px 14px;font-size:12px;background:var(--surface2);color:var(--text);border:1px solid var(--border);border-radius:8px}
.btn-sm:hover:not(:disabled){background:var(--border)}
.btn-dl{background:#1a3a1a;color:var(--green);border:1px solid #2a4a2a;padding:6px 14px;font-size:12px;border-radius:8px}
.btn-dl:hover:not(:disabled){background:#2a4a2a}
.btn-dl-done{background:var(--surface2);color:var(--text2);border:1px solid var(--border);padding:6px 14px;font-size:12px;border-radius:8px;cursor:default}
.tb-field{display:inline-flex;flex-direction:column;gap:3px;cursor:pointer}
.tb-field-label{font-family:var(--mono);font-size:10px;letter-spacing:.3px;text-transform:uppercase;color:var(--text2)}
.tb-select{font-family:var(--sans);font-size:12px;font-weight:500;color:var(--text);background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:6px 28px 6px 10px;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%239a9aa3' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center;transition:border-color .15s}
.tb-select:hover:not(:disabled){border-color:var(--text2)}
.tb-select:focus{outline:none;border-color:var(--accent)}
.tb-select:disabled{opacity:.4;cursor:not-allowed}
.slot-generated{color:var(--text2);font-style:italic}
.log-toggle{margin-top:16px;font-size:12px;color:var(--text2);cursor:pointer;user-select:none}
.log-toggle:hover{color:var(--text)}
.log{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px;font-family:var(--mono);font-size:11px;line-height:1.7;max-height:300px;overflow-y:auto;margin-top:8px;display:none}
.log.open{display:block}
.log-line{white-space:pre-wrap;word-break:break-all}
.log-line.info{color:var(--text2)}
.log-line.ok{color:var(--green)}
.log-line.warn{color:var(--amber)}
.log-line.error{color:var(--red)}
.log-line.head{color:var(--accent);font-weight:700}
.dl-notice{margin-top:12px;padding:10px 14px;background:var(--surface2);border:1px solid var(--border);border-radius:8px;font-size:12px;color:var(--text2);line-height:1.6;display:none}
.dl-notice a{color:var(--accent)}
.footer{margin-top:40px;padding-top:24px;border-top:1px solid var(--border);font-size:12px;color:var(--text2);text-align:center;line-height:1.8}
.footer a{color:var(--accent);text-decoration:none}
.footer a:hover{text-decoration:underline}
/* format guide */
.doc h2{font-size:18px;margin:24px 0 10px;color:var(--text);font-weight:650}
.doc h2:first-child{margin-top:0}
.doc h3{font-size:14px;margin:18px 0 6px;color:var(--accent);font-family:var(--mono)}
.doc p{font-size:14px;color:var(--text2);line-height:1.7;margin-bottom:10px}
.doc ul{margin:0 0 12px 20px}
.doc li{font-size:14px;color:var(--text2);line-height:1.7;margin-bottom:3px}
.doc code{font-family:var(--mono);font-size:12px;background:var(--surface2);padding:1px 5px;border-radius:4px;color:var(--accent)}
.doc strong{color:var(--text)}
.tbl{width:100%;border-collapse:collapse;font-size:12px;margin:8px 0 16px;font-family:var(--mono)}
.tbl th,.tbl td{text-align:left;padding:6px 10px;border-bottom:1px solid var(--border)}
.tbl th{color:var(--text);font-weight:600;background:var(--surface)}
.tbl td{color:var(--text2)}
.tbl .dot{display:inline-block;width:9px;height:9px;border-radius:50%;vertical-align:middle;margin-right:6px}
.callout{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:8px;padding:12px 14px;margin:12px 0;font-size:13px;color:var(--text2);line-height:1.6}
.callout.warn{border-left-color:var(--amber)}
.chip{display:inline-block;font-family:var(--mono);font-size:11px;background:var(--surface2);border:1px solid var(--border);border-radius:5px;padding:2px 7px;margin:2px 3px 2px 0;color:var(--text2)}
.ver{font-family:var(--mono);font-size:13px;color:var(--accent);font-weight:700;margin-top:18px}
.ver:first-child{margin-top:0}
.ver-date{color:var(--text2);font-weight:400;font-size:11px;margin-left:8px}
