diff --git a/src/pages/music/MusicStudio.css b/src/pages/music/MusicStudio.css index 89df6ed..3c7adff 100644 --- a/src/pages/music/MusicStudio.css +++ b/src/pages/music/MusicStudio.css @@ -2426,3 +2426,26 @@ animation: none !important; } } + +/* ── Phase 1: Credits Badge ─────────────────────────────── */ +.ms-credits-badge { + display: inline-flex; align-items: center; gap: 6px; + padding: 6px 14px; border-radius: 20px; + background: rgba(245, 166, 35, 0.1); + border: 1px solid rgba(245, 166, 35, 0.25); + font-family: 'Courier Prime', monospace; + font-size: 0.85rem; color: var(--ms-accent); +} +.ms-credits-badge__icon { font-size: 1rem; } +.ms-credits-badge__value { font-weight: 700; font-size: 1.1rem; } +.ms-credits-badge__label { color: var(--ms-muted); font-size: 0.75rem; text-transform: uppercase; } +.ms-credits-badge.is-low { + background: rgba(231, 76, 60, 0.15); + border-color: rgba(231, 76, 60, 0.4); + color: #e74c3c; + animation: pulse-badge 1.5s ease-in-out infinite; +} +@keyframes pulse-badge { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.6; } +} diff --git a/src/pages/music/MusicStudio.jsx b/src/pages/music/MusicStudio.jsx index fb0d61d..57ef7eb 100644 --- a/src/pages/music/MusicStudio.jsx +++ b/src/pages/music/MusicStudio.jsx @@ -7,15 +7,14 @@ import { getMusicProviders, getMusicStatus, getMusicModels, - getMusicCredits, extendMusicTrack, removeVocals, - getSavedLyrics, - saveLyrics, - updateLyrics, - deleteLyrics, } from '../../api'; import './MusicStudio.css'; +import AudioPlayer from './components/AudioPlayer'; +import { fmtTime } from './components/AudioPlayer'; +import CreditsBadge from './components/CreditsBadge'; +import LyricsTab from './components/LyricsTab'; /* ───────────────────────────────────────────── 데이터 상수 @@ -83,12 +82,6 @@ const SIM_STEPS = [ { msg: 'Track ready!', pct: 100 }, ]; -/* ───────────────────────────────────────────── - 유틸 -───────────────────────────────────────────── */ -const pad = (n) => String(Math.floor(n)).padStart(2, '0'); -const fmtTime = (s) => `${pad(s / 60)}:${pad(s % 60)}`; - /* ───────────────────────────────────────────── Loading Skeleton ───────────────────────────────────────────── */ @@ -261,125 +254,6 @@ const GenerationProgress = ({ progress, stepMsg }) => ( ); -/* ───────────────────────────────────────────── - Audio Player (실제