:root {
  --bg: #0f1115;
  --panel: #171a21;
  --panel-2: #1e2229;
  --border: #2a2f3a;
  --text: #e8eaed;
  --text-dim: #9aa1ac;
  --primary: #7c5cff;
  --primary-hover: #916dff;
  --danger: #ff5c5c;
  --success: #3ecf8e;
  --radius: 12px;
}

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  background: var(--bg);
  color: var(--text);
  font-family: "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, Helvetica, Arial, sans-serif;
  min-height: 100vh;
}

a { color: var(--primary); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ---------- Auth pages ---------- */
.auth-page { display: flex; align-items: center; justify-content: center; padding: 24px; }
.auth-wrap { width: 100%; max-width: 420px; }
.auth-card {
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 36px 32px;
}
.auth-brand { text-align: center; margin-bottom: 24px; }
.auth-logo { font-size: 42px; display: block; margin-bottom: 8px; }
.auth-brand h1 { margin: 0 0 6px; font-size: 24px; }
.auth-tagline { color: var(--text-dim); font-size: 14px; margin: 0; }
.auth-form { display: flex; flex-direction: column; gap: 16px; }
.auth-foot { text-align: center; margin-top: 20px; color: var(--text-dim); font-size: 14px; }

/* ---------- Form primitives ---------- */
.field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 14px; }
.field-label { font-size: 13px; color: var(--text-dim); font-weight: 600; }
/* Dùng 2 chỗ: như modifier trong .field-label, và như <p> chú thích dưới select. */
.field-hint { font-weight: 400; opacity: .8; }
p.field-hint { font-size: 12px; color: var(--text-dim); margin: 6px 0 0; line-height: 1.5; }

/* Preset là lối vào "chọn 1 lần xong" nên tách khỏi các ô chi tiết bằng vạch kẻ. */
.preset-field {
  padding-bottom: 14px;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--border);
}
input[type=text], input[type=password], .select, .text-input, .input-title {
  background: var(--panel-2);
  border: 1px solid var(--border);
  color: var(--text);
  border-radius: 8px;
  padding: 10px 12px;
  font-size: 15px;
  width: 100%;
  font-family: inherit;
}
input[type=text]:focus, input[type=password]:focus, .select:focus, .text-input:focus, .input-title:focus {
  outline: none; border-color: var(--primary);
}
.checkbox-field { display: flex; align-items: center; gap: 8px; margin: 12px 0; font-size: 14px; color: var(--text-dim); }
.checkbox-field input { width: 16px; height: 16px; }

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  border-radius: 8px; border: 1px solid transparent; cursor: pointer;
  font-size: 14px; font-weight: 600; padding: 10px 16px;
  transition: background .15s, border-color .15s, opacity .15s;
}
.btn:disabled { opacity: .5; cursor: not-allowed; }
.btn-primary { background: var(--primary); color: white; }
.btn-primary:hover:not(:disabled) { background: var(--primary-hover); }
.btn-outline { background: transparent; border-color: var(--border); color: var(--text); }
.btn-outline:hover:not(:disabled) { border-color: var(--primary); }
.btn-ghost { background: transparent; color: var(--text-dim); }
.btn-ghost:hover:not(:disabled) { color: var(--text); }
.btn-block { width: 100%; }
.btn-sm { padding: 6px 10px; font-size: 13px; }
.btn-lg { padding: 14px 18px; font-size: 16px; margin-top: 8px; }
.inline-form { display: inline; }

.alert { padding: 10px 14px; border-radius: 8px; font-size: 14px; margin-bottom: 4px; }
.alert-error { background: rgba(255,92,92,.12); color: #ff8a8a; border: 1px solid rgba(255,92,92,.35); }
.hidden { display: none !important; }

/* ---------- Studio layout ---------- */
.topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 24px; border-bottom: 1px solid var(--border); background: var(--panel);
}
.topbar-brand { font-size: 18px; }
.topbar-user { display: flex; align-items: center; gap: 12px; font-size: 14px; color: var(--text-dim); }

.studio-grid {
  display: grid;
  grid-template-columns: minmax(0,1.6fr) minmax(280px,1fr);
  grid-template-rows: auto auto;
  gap: 20px;
  padding: 24px;
  max-width: 1400px;
  margin: 0 auto;
}
.panel-editor { grid-column: 1; grid-row: 1; }
.panel-options { grid-column: 2; grid-row: 1 / span 2; }
.panel-history { grid-column: 1; grid-row: 2; }

@media (max-width: 900px) {
  .studio-grid { grid-template-columns: 1fr; }
  .panel-editor, .panel-options, .panel-history { grid-column: 1; grid-row: auto; }
}

.panel {
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  padding: 20px;
}
.panel h2 { margin: 0 0 14px; font-size: 17px; }
.panel-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.panel-head h2 { margin: 0; }

.char-counter { font-size: 13px; color: var(--text-dim); }
.input-title { margin-bottom: 10px; }
.text-input {
  min-height: 260px; resize: vertical; line-height: 1.6; font-size: 15px;
}
.editor-actions { display: flex; align-items: center; justify-content: space-between; margin-top: 12px; }
.quota-hint { font-size: 13px; color: var(--text-dim); }

.select { cursor: pointer; }
.voice-meta { font-size: 12px; color: var(--text-dim); margin-top: 6px; min-height: 16px; }

.slider-field { margin-bottom: 16px; }
.slider-field .field-label { display: flex; justify-content: space-between; margin-bottom: 6px; }
.slider-field output { color: var(--primary); font-weight: 700; }
input[type=range] { width: 100%; accent-color: var(--primary); }

.topbar-nav { display: flex; align-items: center; gap: 14px; margin-left: auto; margin-right: 20px; font-size: 14px; }
.topbar-nav a { color: var(--text-dim); padding: 6px 8px; border-radius: 6px; }
.topbar-nav a:hover, .topbar-nav a.active { color: var(--text); background: var(--panel-2); text-decoration: none; }

.translation-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(360px, 1fr); gap: 20px; padding: 24px; max-width: 1400px; margin: 0 auto; }
.translation-form-panel { min-height: 460px; }
.translation-history-panel { min-height: 460px; }
.translation-notice { line-height: 1.6; margin: -4px 0 18px; }
.upload-box { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 150px; padding: 20px; margin-bottom: 18px; border: 1px dashed var(--primary); border-radius: 10px; background: rgba(124,92,255,.07); color: var(--text); cursor: pointer; text-align: center; }
.upload-box:hover { background: rgba(124,92,255,.13); }
.upload-box input { position: absolute; width: 1px; height: 1px; opacity: 0; }
.upload-box span { color: var(--text-dim); font-size: 13px; }
.translation-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.translation-stage { color: var(--primary); font-size: 13px; margin-bottom: 8px; }
.translation-actions { margin-top: 8px; }

@media (max-width: 900px) {
  .topbar { flex-wrap: wrap; gap: 8px; }
  .topbar-nav { order: 3; width: 100%; margin: 0; }
  .translation-layout { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .translation-fields { grid-template-columns: 1fr; gap: 0; }
}
.job-list { display: flex; flex-direction: column; gap: 12px; max-height: 480px; overflow-y: auto; }
.empty-hint { color: var(--text-dim); font-size: 14px; text-align: center; padding: 24px 0; }

.job-item {
  background: var(--panel-2); border: 1px solid var(--border); border-radius: 10px; padding: 14px;
}
.job-item-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.job-title { font-weight: 600; font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.job-status { font-size: 12px; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
.job-status.st-queued { background: rgba(154,161,172,.15); color: var(--text-dim); }
.job-status.st-processing { background: rgba(124,92,255,.15); color: var(--primary); }
.job-status.st-done { background: rgba(62,207,142,.15); color: var(--success); }
.job-status.st-error { background: rgba(255,92,92,.15); color: var(--danger); }
.job-meta { font-size: 12px; color: var(--text-dim); margin-bottom: 8px; }
.job-progress { height: 6px; background: var(--border); border-radius: 999px; overflow: hidden; margin-bottom: 8px; }
.job-progress-bar { height: 100%; background: var(--primary); width: 0%; transition: width .3s; }
.job-error { font-size: 13px; color: var(--danger); margin-bottom: 8px; }
.job-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.job-audio { width: 100%; margin-bottom: 6px; }
