:root {
  --bg-dark: #09060e;
  --bg-card: rgba(16, 11, 25, 0.85);
  --bg-card-hover: rgba(25, 17, 39, 0.95);
  --border-color: rgba(255, 51, 133, 0.25);
  --border-bright: #ff3385;
  --pink-primary: #ff3385;
  --pink-glow: rgba(255, 51, 133, 0.45);
  --purple-accent: #b84dff;
  --purple-glow: rgba(184, 77, 255, 0.4);
  --cyan-subtle: #00f0ff;
  --text-main: #f5f0f8;
  --text-muted: #a69bb3;
  --danger: #ff4757;
  --success: #2ed573;
}

* { box-sizing: border-box; margin: 0; padding: 0; }

body {
  background-color: var(--bg-dark);
  background-image:
    radial-gradient(circle at 10% 15%, rgba(255, 51, 133, 0.08) 0%, transparent 40%),
    radial-gradient(circle at 90% 80%, rgba(184, 77, 255, 0.08) 0%, transparent 40%),
    linear-gradient(180deg, #060409 0%, #0d0914 100%);
  color: var(--text-main);
  font-family: 'Zen Maru Gothic', 'JetBrains Mono', sans-serif;
  min-height: 100vh;
  overflow-x: hidden;
  line-height: 1.5;
}

.top-glow-bar {
  height: 3px;
  width: 100%;
  background: linear-gradient(90deg, #ff3385, #b84dff, #00f0ff, #ff3385);
  background-size: 300% 100%;
  animation: rainbowGlow 8s ease infinite;
  box-shadow: 0 0 15px var(--pink-glow);
}

@keyframes rainbowGlow {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

.app-container {
  max-width: 1520px;
  margin: 0 auto;
  padding: 20px 20px 60px;
}

header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 20px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--border-color);
  flex-wrap: wrap;
  gap: 16px;
}

.brand-title {
  display: flex;
  align-items: center;
  gap: 12px;
}

.brand-icon {
  font-size: 2.2rem;
  text-shadow: 0 0 15px var(--pink-glow);
  animation: pulseBow 2s infinite alternate;
}

@keyframes pulseBow {
  from { transform: scale(1); filter: drop-shadow(0 0 5px var(--pink-primary)); }
  to { transform: scale(1.08); filter: drop-shadow(0 0 16px var(--purple-accent)); }
}

.brand-title h1 {
  font-size: 1.7rem;
  font-weight: 900;
  letter-spacing: 0.5px;
  background: linear-gradient(45deg, #ff4d94, #ff80bf, #d98cb3, #c266ff);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

.brand-title .badge {
  font-size: 0.72rem;
  padding: 3px 8px;
  border-radius: 12px;
  background: rgba(255, 51, 133, 0.15);
  border: 1px solid var(--border-bright);
  color: var(--pink-primary);
}

.header-links { display: flex; gap: 10px; align-items: center; }

.btn-link {
  padding: 6px 12px;
  font-size: 0.82rem;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.1);
  color: var(--text-main);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: all 0.2s ease;
}

.btn-link:hover {
  background: rgba(255, 51, 133, 0.15);
  border-color: var(--pink-primary);
  box-shadow: 0 0 10px var(--pink-glow);
}

.studio-grid {
  display: grid;
  grid-template-columns: 1.18fr 0.82fr;
  gap: 22px;
}

@media (max-width: 1100px) {
  .studio-grid { grid-template-columns: 1fr; }
}

.card {
  background: var(--bg-card);
  border: 1px solid var(--border-color);
  border-radius: 14px;
  padding: 18px;
  backdrop-filter: blur(12px);
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
  margin-bottom: 20px;
  position: relative;
}

.card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 14px;
  padding-bottom: 8px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}

.card-header h2 {
  font-size: 1.1rem;
  font-weight: 700;
  display: flex;
  align-items: center;
  gap: 8px;
  color: #ff99cc;
}

.stage-wrapper {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #000;
  border-radius: 10px;
  overflow: hidden;
  border: 1px solid rgba(255, 51, 133, 0.35);
  box-shadow: 0 0 25px rgba(0, 0, 0, 0.8);
}

#visualizerCanvas { width: 100%; height: 100%; display: block; object-fit: cover; }

.crt-overlay {
  position: absolute; top: 0; left: 0; width: 100%; height: 100%;
  pointer-events: none;
  background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.25) 50%);
  background-size: 100% 4px;
  mix-blend-mode: overlay;
  opacity: 0.6;
}

.stage-hud {
  position: absolute; top: 12px; left: 14px; right: 14px;
  display: flex; justify-content: space-between; pointer-events: none; z-index: 5;
}

.hud-track {
  background: rgba(10, 6, 15, 0.8);
  border: 1px solid var(--border-color);
  padding: 5px 12px;
  border-radius: 20px;
  font-size: 0.82rem;
  color: #fff;
  display: flex;
  align-items: center;
  gap: 8px;
  backdrop-filter: blur(8px);
}

.hud-timer {
  background: rgba(10, 6, 15, 0.8);
  border: 1px solid var(--border-color);
  padding: 5px 12px;
  border-radius: 20px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.9rem;
  color: var(--pink-primary);
  text-shadow: 0 0 8px var(--pink-glow);
  backdrop-filter: blur(8px);
}

.controls-bar {
  margin-top: 14px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
  background: rgba(13, 9, 20, 0.6);
  padding: 12px 16px;
  border-radius: 10px;
  border: 1px solid rgba(255, 255, 255, 0.05);
}

.playback-btns { display: flex; align-items: center; gap: 8px; }

.btn-main {
  background: linear-gradient(135deg, #ff3385 0%, #b84dff 100%);
  color: #fff;
  border: none;
  padding: 8px 16px;
  border-radius: 8px;
  font-size: 0.9rem;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: all 0.2s ease;
  box-shadow: 0 4px 12px var(--pink-glow);
}

.btn-main:hover { transform: translateY(-1px); filter: brightness(1.1); }

.btn-secondary {
  background: rgba(255, 255, 255, 0.08);
  color: var(--text-main);
  border: 1px solid rgba(255, 255, 255, 0.15);
  padding: 7px 12px;
  border-radius: 8px;
  font-size: 0.84rem;
  cursor: pointer;
  transition: all 0.2s ease;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}

.btn-secondary:hover { background: rgba(255, 51, 133, 0.15); border-color: var(--pink-primary); }

.btn-danger {
  background: rgba(255, 71, 87, 0.15);
  border: 1px solid rgba(255, 71, 87, 0.3);
  color: #ff6b81;
}
.btn-danger:hover { background: rgba(255, 71, 87, 0.3); border-color: #ff4757; }

.duration-selector { display: flex; align-items: center; gap: 6px; font-size: 0.82rem; }

.duration-tag {
  padding: 4px 8px;
  border-radius: 6px;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.1);
  cursor: pointer;
  color: var(--text-muted);
  transition: all 0.2s;
}

.duration-tag.active {
  background: rgba(255, 51, 133, 0.25);
  border-color: var(--pink-primary);
  color: #fff;
  box-shadow: 0 0 8px var(--pink-glow);
}

/* 🎚️ 交叉淡入淡出 (Crossfade) 與重疊控制面板 */
.crossfade-panel {
  background: rgba(184, 77, 255, 0.06);
  border: 1px solid rgba(184, 77, 255, 0.25);
  border-radius: 10px;
  padding: 12px 14px;
  margin-top: 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
}

.crossfade-info { display: flex; align-items: center; gap: 10px; }

.deck-indicator {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.78rem;
  padding: 3px 8px;
  border-radius: 12px;
  background: rgba(0, 0, 0, 0.4);
  border: 1px solid rgba(255, 255, 255, 0.1);
}

.deck-dot { width: 7px; height: 7px; border-radius: 50%; background: #555; }
.deck-dot.active { background: #00f0ff; box-shadow: 0 0 8px #00f0ff; }

.crossfade-slider-wrap { display: flex; align-items: center; gap: 10px; font-size: 0.8rem; }
.crossfade-slider-wrap input[type="range"] {
  accent-color: var(--pink-primary);
  width: 110px;
  cursor: pointer;
}

.source-panel {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-top: 14px;
}

@media (max-width: 768px) {
  .source-panel { grid-template-columns: 1fr; }
}

.source-box {
  background: rgba(255, 255, 255, 0.02);
  border: 1px dashed rgba(255, 77, 148, 0.3);
  border-radius: 10px;
  padding: 12px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.source-box h3 {
  font-size: 0.88rem;
  color: #ffb3d9;
  display: flex;
  align-items: center;
  gap: 6px;
}

.file-input-wrapper { position: relative; overflow: hidden; display: inline-block; }
.file-input-wrapper input[type="file"] {
  position: absolute; left: 0; top: 0; opacity: 0; width: 100%; height: 100%; cursor: pointer;
}

.input-row { display: flex; gap: 6px; }

input[type="text"], input[type="url"], textarea, select {
  width: 100%;
  background: rgba(13, 9, 20, 0.8);
  border: 1px solid rgba(255, 51, 133, 0.25);
  border-radius: 6px;
  padding: 7px 10px;
  color: #fff;
  font-family: inherit;
  font-size: 0.85rem;
  outline: none;
}

input[type="text"]:focus, input[type="url"]:focus, textarea:focus, select:focus {
  border-color: var(--pink-primary);
  box-shadow: 0 0 10px var(--pink-glow);
}

/* 播放清單與排序表格 */
.playlist-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.82rem;
  margin-top: 10px;
}

.playlist-table th {
  text-align: left;
  padding: 8px;
  color: var(--text-muted);
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.playlist-table td {
  padding: 7px 8px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.04);
  vertical-align: middle;
}

.playlist-row { transition: background 0.15s; }
.playlist-row:hover { background: rgba(255, 51, 133, 0.08); }
.playlist-row.now-playing {
  background: rgba(255, 51, 133, 0.16);
  border-left: 3px solid var(--pink-primary);
  font-weight: 700;
}

.order-btns { display: inline-flex; gap: 3px; }
.btn-sm-icon {
  padding: 2px 6px;
  font-size: 0.72rem;
  border-radius: 4px;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #fff;
  cursor: pointer;
}
.btn-sm-icon:hover { background: var(--pink-primary); border-color: var(--pink-primary); }

/* 100 詞庫區域 */
.keywords-filter {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  padding-bottom: 6px;
  margin-bottom: 10px;
}

.filter-btn {
  padding: 4px 10px;
  font-size: 0.75rem;
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.1);
  color: var(--text-muted);
  cursor: pointer;
  white-space: nowrap;
}

.filter-btn.active {
  background: rgba(184, 77, 255, 0.25);
  border-color: var(--purple-accent);
  color: #fff;
}

.tags-container {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  max-height: 180px;
  overflow-y: auto;
  padding: 8px;
  background: rgba(10, 6, 16, 0.6);
  border-radius: 8px;
  border: 1px solid rgba(255, 255, 255, 0.06);
}

.tag-item {
  padding: 3px 8px;
  border-radius: 5px;
  font-size: 0.74rem;
  background: rgba(255, 51, 133, 0.08);
  border: 1px solid rgba(255, 51, 133, 0.2);
  color: #ffd1e6;
  cursor: pointer;
  user-select: none;
}

.tag-item:hover { background: rgba(255, 51, 133, 0.25); }
.tag-item.selected {
  background: var(--pink-primary);
  color: #fff;
  border-color: #ff66a3;
  box-shadow: 0 0 6px var(--pink-glow);
}

.prompt-box { margin-top: 12px; }
.prompt-box textarea { height: 75px; resize: vertical; font-family: 'JetBrains Mono', monospace; font-size: 0.8rem; }
.prompt-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 6px; }

/* 📦 20 首生成暫存庫 */
.pool-card {
  border: 1px solid rgba(0, 240, 255, 0.3);
  box-shadow: 0 0 15px rgba(0, 240, 255, 0.08);
}

.pool-header-actions { display: flex; gap: 6px; align-items: center; }

.pool-list {
  max-height: 240px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 10px;
}

.pool-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: rgba(255, 255, 255, 0.03);
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 8px;
  padding: 8px 10px;
  font-size: 0.8rem;
  gap: 10px;
}

.pool-item:hover {
  background: rgba(0, 240, 255, 0.05);
  border-color: rgba(0, 240, 255, 0.25);
}

.pool-info {
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  overflow: hidden;
}

.pool-title {
  font-weight: 700;
  color: #fff;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.pool-meta {
  font-size: 0.7rem;
  color: var(--text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.pool-ops { display: flex; gap: 4px; flex-shrink: 0; }
.status-dot { width: 8px; height: 8px; border-radius: 50%; background: #555; }
.status-dot.online { background: var(--success); box-shadow: 0 0 8px var(--success); }
.status-dot.busy { background: var(--danger); box-shadow: 0 0 8px var(--danger); animation: blink 1s infinite; }
@keyframes blink { 50% { opacity: 0.3; } }

.code-snippet {
  background: #050308;
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 6px;
  padding: 8px 12px;
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.75rem;
  color: #99ffcc;
  overflow-x: auto;
  white-space: pre-wrap;
  word-break: break-all;
  margin-top: 6px;
}

.toast {
  position: fixed;
  bottom: 24px;
  right: 24px;
  padding: 10px 18px;
  border-radius: 8px;
  background: rgba(20, 12, 32, 0.96);
  border: 1px solid var(--border-bright);
  color: #fff;
  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.6);
  transform: translateY(100px);
  opacity: 0;
  transition: all 0.25s ease;
  z-index: 1000;
  font-size: 0.88rem;
}

.toast.show { transform: translateY(0); opacity: 1; }

/* ══════════════════════════════════════════════════════
   📻 電台展示模式 (Radio Broadcast Showcase Mode)
══════════════════════════════════════════════════════ */
#radioModeOverlay {
  position: fixed;
  top: 0; left: 0; width: 100vw; height: 100vh;
  background: #07040a;
  z-index: 9999;
  display: none;
  flex-direction: column;
  justify-content: space-between;
  overflow: hidden;
  user-select: none;
}

#radioModeOverlay.active {
  display: flex;
}

/* 電台背景畫布投影 */
.radio-stage-bg {
  position: absolute;
  top: 0; left: 0; width: 100%; height: 100%;
  z-index: 1;
  pointer-events: none;
}

.radio-stage-bg canvas, .radio-stage-bg video {
  width: 100%; height: 100%; object-fit: cover;
  filter: brightness(0.65) saturate(1.2) contrast(1.1);
}

.radio-crt {
  position: absolute;
  top: 0; left: 0; width: 100%; height: 100%;
  pointer-events: none;
  background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.3) 50%);
  background-size: 100% 4px;
  mix-blend-mode: overlay;
  z-index: 2;
  opacity: 0.7;
}

/* 頂部浮動列：左上角電子時鐘 + 右上角控制鈕 */
.radio-top-bar {
  position: relative;
  z-index: 10;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  padding: 24px 30px;
}

/* 🕒 最左上角電子時鐘 (支援時間 / 倒計時切換) */
.digital-clock-widget {
  background: rgba(13, 8, 22, 0.85);
  border: 2px solid var(--border-bright);
  border-radius: 12px;
  padding: 10px 18px;
  box-shadow: 0 0 25px var(--pink-glow), inset 0 0 15px rgba(255, 51, 133, 0.2);
  backdrop-filter: blur(10px);
  cursor: pointer;
  transition: all 0.25s ease;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.digital-clock-widget:hover {
  transform: scale(1.02);
  border-color: #00f0ff;
  box-shadow: 0 0 30px rgba(0, 240, 255, 0.4);
}

.clock-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 0.7rem;
  color: #ff99cc;
  letter-spacing: 1px;
  font-family: 'JetBrains Mono', monospace;
}

.clock-digits {
  font-family: 'JetBrains Mono', monospace;
  font-size: 2.2rem;
  font-weight: 700;
  color: #ff3385;
  text-shadow: 0 0 15px var(--pink-glow), 0 0 30px #ff3385;
  line-height: 1;
}

.clock-digits.countdown-mode {
  color: #00f0ff;
  text-shadow: 0 0 15px rgba(0, 240, 255, 0.6), 0 0 30px #00f0ff;
}

.clock-mode-tabs {
  display: flex;
  gap: 6px;
  margin-top: 4px;
}

.clock-tab {
  font-size: 0.68rem;
  padding: 2px 6px;
  border-radius: 4px;
  background: rgba(255, 255, 255, 0.08);
  color: var(--text-muted);
}

.clock-tab.active {
  background: var(--pink-primary);
  color: #fff;
  font-weight: 700;
}

/* 🍅 番茄鐘互動控制面板 (Jirai-kei Cyberpunk 風格) */
.pomodoro-panel {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px dashed rgba(255, 51, 133, 0.4);
  display: flex;
  flex-direction: column;
  gap: 6px;
  cursor: default;
  animation: fadeIn 0.2s ease-in-out;
}

.pomo-preset-row {
  display: flex;
  gap: 5px;
  justify-content: space-between;
}

.pomo-preset-btn {
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #eee;
  font-size: 0.68rem;
  padding: 3px 6px;
  border-radius: 6px;
  cursor: pointer;
  transition: all 0.2s ease;
  font-family: 'JetBrains Mono', monospace;
}

.pomo-preset-btn:hover {
  background: rgba(0, 240, 255, 0.25);
  border-color: #00f0ff;
  color: #00f0ff;
}

.pomo-preset-btn.active {
  background: #00f0ff;
  border-color: #00f0ff;
  color: #0d0816;
  font-weight: 700;
  box-shadow: 0 0 10px rgba(0, 240, 255, 0.5);
}

.pomo-action-row {
  display: flex;
  gap: 5px;
  align-items: center;
  justify-content: space-between;
}

.pomo-btn-sub {
  background: rgba(255, 51, 133, 0.15);
  border: 1px solid var(--border-bright);
  color: #ff99cc;
  font-size: 0.7rem;
  padding: 4px 6px;
  border-radius: 6px;
  cursor: pointer;
  transition: all 0.2s ease;
  font-family: 'JetBrains Mono', monospace;
}

.pomo-btn-sub:hover {
  background: var(--pink-primary);
  color: #fff;
  box-shadow: 0 0 8px var(--pink-glow);
}

.pomo-btn-main {
  flex-grow: 1;
  background: linear-gradient(135deg, #ff3385 0%, #b84dff 100%);
  border: none;
  color: #fff;
  font-size: 0.72rem;
  font-weight: 700;
  padding: 4px 8px;
  border-radius: 6px;
  cursor: pointer;
  transition: all 0.2s ease;
  box-shadow: 0 0 10px rgba(255, 51, 133, 0.3);
  text-align: center;
}

.pomo-btn-main:hover {
  box-shadow: 0 0 14px var(--pink-glow);
  transform: translateY(-1px);
}

/* 右上角控制區 */
.radio-top-actions {
  display: flex;
  gap: 12px;
  align-items: center;
}

.radio-btn {
  background: rgba(18, 12, 30, 0.85);
  border: 1px solid var(--border-color);
  color: #fff;
  padding: 8px 16px;
  border-radius: 20px;
  font-size: 0.85rem;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  backdrop-filter: blur(8px);
  transition: all 0.2s ease;
}

.radio-btn:hover {
  background: rgba(255, 51, 133, 0.2);
  border-color: var(--pink-primary);
  box-shadow: 0 0 12px var(--pink-glow);
}

/* 中央區域：虛擬角色展示區 */
.radio-center-area {
  position: relative;
  z-index: 10;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  flex-grow: 1;
  pointer-events: none;
}

/* 地雷系角色透明互動舞台 (完全露出背景影片人像) */
.character-stage {
  pointer-events: auto;
  position: relative;
  width: 100%;
  max-width: 580px;
  height: 280px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  cursor: pointer;
  background: transparent;
  transition: all 0.3s ease;
}

.character-stage:hover {
  filter: drop-shadow(0 0 15px rgba(255, 51, 133, 0.4));
}

/* 慌張與害怕動效 (透過環境光與心情標籤震顫表現) */
.character-stage.panic {
  animation: stagePanic 0.15s ease-in-out infinite alternate !important;
}

@keyframes stagePanic {
  0% { transform: translate(-2px, 1px); filter: drop-shadow(0 0 25px rgba(255, 51, 133, 0.8)); }
  100% { transform: translate(2px, -1px); filter: drop-shadow(0 0 35px rgba(0, 240, 255, 0.8)); }
}

.character-stage.fear {
  animation: stageFear 0.6s ease-in-out infinite alternate !important;
}

@keyframes stageFear {
  0% { transform: translateY(0px); filter: drop-shadow(0 0 20px #b84dff); }
  100% { transform: translateY(6px); filter: drop-shadow(0 0 30px #ff3385); }
}

/* 角色互動反應漂浮標籤 (播完即自動消失，不擋住背景影片人像) */
.character-mood-badge {
  position: absolute;
  top: 30px;
  background: rgba(14, 9, 24, 0.88);
  border: 1.5px solid var(--border-bright);
  color: #fff;
  font-size: 0.84rem;
  padding: 6px 16px;
  border-radius: 20px;
  box-shadow: 0 0 20px var(--pink-glow);
  font-weight: 700;
  display: flex;
  align-items: center;
  gap: 6px;
  pointer-events: none;
  opacity: 0;
  transform: translateY(12px) scale(0.9);
  transition: all 0.35s cubic-bezier(0.18, 0.89, 0.32, 1.28);
  z-index: 20;
  backdrop-filter: blur(8px);
}

.character-mood-badge.visible {
  opacity: 1;
  transform: translateY(0px) scale(1);
  box-shadow: 0 0 25px var(--pink-glow), 0 0 35px rgba(0, 240, 255, 0.35);
}

/* 底部視覺小說動態對話框 */
.radio-bottom-dock {
  position: relative;
  z-index: 10;
  padding: 0 30px 24px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  max-width: 1080px;
  width: 100%;
  margin: 0 auto;
}

.dialogue-box {
  background: rgba(14, 9, 24, 0.88);
  border: 2px solid var(--border-bright);
  border-radius: 16px;
  padding: 16px 22px;
  box-shadow: 0 10px 35px rgba(0, 0, 0, 0.7), 0 0 20px var(--pink-glow);
  backdrop-filter: blur(14px);
  position: relative;
}

.dialogue-box::before {
  content: '🎀';
  position: absolute;
  top: -14px;
  left: 20px;
  font-size: 1.2rem;
  background: #09060e;
  padding: 0 6px;
}

.dialogue-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 8px;
}

.speaker-name {
  font-size: 0.95rem;
  font-weight: 900;
  color: #ff99cc;
  display: flex;
  align-items: center;
  gap: 8px;
}

.speaker-status {
  font-size: 0.75rem;
  color: var(--cyan-subtle);
  font-family: 'JetBrains Mono', monospace;
}

#radioCurrentEmotionText {
  display: inline-block;
  transition: all 0.3s ease;
}

#radioCurrentEmotionText.flash {
  color: #ff3385 !important;
  text-shadow: 0 0 10px #ff3385, 0 0 20px rgba(255, 51, 133, 0.6);
  transform: scale(1.05);
}

.dialogue-text {
  font-size: 1.05rem;
  line-height: 1.6;
  color: #fbf7ff;
  min-height: 52px;
  text-shadow: 0 0 8px rgba(255, 255, 255, 0.3);
}

.dialogue-cursor {
  display: inline-block;
  width: 8px;
  height: 16px;
  background: var(--pink-primary);
  margin-left: 4px;
  animation: cursorBlink 0.8s infinite;
  vertical-align: middle;
}

@keyframes cursorBlink {
  50% { opacity: 0; }
}

/* 角色互動操作按鈕列 (換性別、換人格、安慰、切歌、倒數) */
.character-action-bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}

.action-group-left, .action-group-right {
  display: flex;
  gap: 8px;
  align-items: center;
}

.action-pill-btn {
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: #fff;
  padding: 6px 14px;
  border-radius: 20px;
  font-size: 0.8rem;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  transition: all 0.2s ease;
}

.action-pill-btn:hover {
  background: rgba(255, 51, 133, 0.25);
  border-color: var(--pink-primary);
  box-shadow: 0 0 10px var(--pink-glow);
  transform: translateY(-1px);
}

.action-pill-btn.comfort-btn {
  background: linear-gradient(135deg, rgba(255, 51, 133, 0.3) 0%, rgba(184, 77, 255, 0.3) 100%);
  border-color: #ff3385;
  color: #ffb3d9;
}

.action-pill-btn.comfort-btn:hover {
  background: linear-gradient(135deg, #ff3385 0%, #b84dff 100%);
  color: #fff;
}

/* 🔌 Suno API 串接模態框 (Cyberpunk / Glassmorphism) */
.modal-backdrop {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background: rgba(7, 4, 10, 0.78);
  backdrop-filter: blur(8px);
  z-index: 99999;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  animation: fadeIn 0.2s ease-in-out;
}

.modal-card {
  background: rgba(18, 12, 28, 0.95);
  border: 2px solid var(--border-bright);
  border-radius: 16px;
  width: 100%;
  max-width: 560px;
  box-shadow: 0 15px 40px rgba(0, 0, 0, 0.8), 0 0 30px rgba(0, 240, 255, 0.25);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px 22px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  background: rgba(255, 255, 255, 0.03);
}

.modal-title {
  font-size: 1.05rem;
  font-weight: 700;
  color: #fff;
  display: flex;
  align-items: center;
  gap: 8px;
}

.modal-close-btn {
  background: transparent;
  border: none;
  color: var(--text-muted);
  font-size: 1.2rem;
  cursor: pointer;
  transition: all 0.2s;
  padding: 4px;
}

.modal-close-btn:hover {
  color: #ff4757;
  transform: scale(1.1);
}

.modal-body {
  padding: 20px 22px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  max-height: 75vh;
  overflow-y: auto;
}

.modal-desc {
  font-size: 0.85rem;
  line-height: 1.5;
  color: var(--text-secondary);
}

.modal-desc code {
  color: #00f0ff;
  background: rgba(0, 240, 255, 0.1);
  padding: 2px 5px;
  border-radius: 4px;
  font-family: 'JetBrains Mono', monospace;
}

.form-group {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.form-group label {
  font-size: 0.82rem;
  font-weight: 600;
  color: #ff99cc;
}

.form-hint {
  font-size: 0.72rem;
  color: var(--text-muted);
  line-height: 1.3;
}

.form-hint code {
  color: #00f0ff;
}

.form-group-toggle {
  display: flex;
  align-items: center;
  gap: 12px;
  background: rgba(255, 255, 255, 0.04);
  padding: 12px 14px;
  border-radius: 10px;
  border: 1px solid rgba(255, 255, 255, 0.08);
}

.toggle-container {
  position: relative;
  display: inline-block;
  width: 44px;
  height: 24px;
  flex-shrink: 0;
}

.toggle-container input {
  opacity: 0;
  width: 0;
  height: 0;
}

.toggle-slider {
  position: absolute;
  cursor: pointer;
  top: 0; left: 0; right: 0; bottom: 0;
  background-color: rgba(255, 255, 255, 0.15);
  transition: 0.3s;
  border-radius: 24px;
  border: 1px solid rgba(255, 255, 255, 0.2);
}

.toggle-slider:before {
  position: absolute;
  content: "";
  height: 16px;
  width: 16px;
  left: 3px;
  bottom: 3px;
  background-color: white;
  transition: 0.3s;
  border-radius: 50%;
}

.toggle-container input:checked + .toggle-slider {
  background-color: #00f0ff;
  border-color: #00f0ff;
  box-shadow: 0 0 10px rgba(0, 240, 255, 0.5);
}

.toggle-container input:checked + .toggle-slider:before {
  transform: translateX(20px);
  background-color: #0b0714;
}

.modal-actions-row {
  display: flex;
  gap: 10px;
  align-items: center;
  flex-wrap: wrap;
}

.api-test-result {
  background: rgba(0, 0, 0, 0.4);
  border-radius: 8px;
  padding: 12px 16px;
  border-left: 4px solid #00f0ff;
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 0.82rem;
  font-family: 'JetBrains Mono', monospace;
  animation: fadeIn 0.2s ease-in-out;
}

.api-test-result.success {
  border-left-color: #00f0ff;
  background: rgba(0, 240, 255, 0.08);
}

.api-test-result.error {
  border-left-color: #ff4757;
  background: rgba(255, 71, 87, 0.08);
}

.result-header {
  font-weight: 700;
  color: #fff;
}

.result-content {
  line-height: 1.4;
  color: var(--text-secondary);
}

.modal-footer {
  padding: 14px 22px;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  background: rgba(255, 255, 255, 0.02);
}

.btn-sub {
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: var(--text-secondary);
  padding: 8px 16px;
  border-radius: 8px;
  cursor: pointer;
  transition: all 0.2s;
  font-size: 0.85rem;
}

.btn-sub:hover {
  background: rgba(255, 255, 255, 0.15);
  color: #fff;
}

