// MUSIC — albums library const { useState: useStateMu } = React; const ALBUMS = [ { n: "01", title: "Duality", kana: "デュアリティ", year: 2025, release: "FEB 13, 2025", tracks: 8, vibe: "TECHNO · EDM · ROCK/METAL", accent: "var(--magenta)", cover: "assets/albums/01-duality.png" }, { n: "02", title: "Fire Heart", kana: "ファイア・ハート", year: 2025, release: "MAR 23, 2025", tracks: 9, vibe: "TECHNO · EDM · ROCK/METAL", accent: "var(--danger)", cover: "assets/albums/02-fireheart.png" }, { n: "03", title: "Digital Blade", kana: "デジタル・ブレード", year: 2025, release: "MAY 02, 2025", tracks: 10, vibe: "TECHNO · EDM · ROCK/METAL", accent: "var(--cyan)", cover: "assets/albums/03-digital-blade.png" }, { n: "04", title: "Paradise", kana: "パラダイス", year: 2025, release: "JUN 24, 2025", tracks: 8, vibe: "TECHNO · EDM · ROCK/METAL", accent: "var(--rose)", cover: "assets/albums/04-paradise.png" }, { n: "05", title: "Heavy Mental", kana: "ヘヴィ・メンタル", year: 2025, release: "SEP 01, 2025", tracks: 11, vibe: "ROCK/METAL", accent: "var(--danger)", cover: "assets/albums/05-heavy-mental.png" }, { n: "06", title: "Future Vision", kana: "フューチャー・ヴィジョン", year: 2025, release: "OCT 06, 2025", tracks: 9, vibe: "FUTURE J-K POP · CYBER EDM", accent: "var(--violet)", cover: "assets/albums/06-future-vision.png" }, { n: "07", title: "Scream", kana: "スクリーム", year: 2025, release: "NOV 10, 2025", tracks: 8, vibe: "ROCK/METAL", accent: "var(--danger)", cover: "assets/albums/07-scream.png" }, { n: "08", title: "Anime Covers Vol.01", kana: "アニメカバー Vol.01", year: 2025, release: "DEC 01, 2025", tracks: 12, vibe: "ANIME COVERS", accent: "var(--rose)", cover: "assets/albums/08-anime-covers-01.png" }, { n: "09", title: "Dare me", kana: "デア・ミー", year: 2025, release: "OCT 06, 2025", tracks: 7, vibe: "FUTURE J-K POP · CYBER EDM", accent: "var(--magenta)", cover: "assets/albums/09-dare-me.png" }, { n: "10", title: "Feelings", kana: "フィーリングス", year: 2026, release: "FEB 02, 2026", tracks: 9, vibe: "ROCK/METAL", accent: "var(--rose)", cover: "assets/albums/10-feelings.png" }, { n: "11", title: "Venom Hearts", kana: "ヴェノム・ハーツ", year: 2026, release: "MAR 20, 2026", tracks: 10, vibe: "FUTURE J-K POP · CYBER EDM", accent: "var(--violet)", cover: "assets/albums/11-venom-hearts.png" }, { n: "12", title: "Anime Covers Vol.02", kana: "アニメカバー Vol.02", year: 2026, release: "APR 25, 2026", tracks: 12, vibe: "ANIME COVERS", accent: "var(--gold)", cover: "assets/albums/12-anime-covers-02.png" }, ]; function Music() { const [sel, setSel] = useStateMu(0); const a = ALBUMS[sel]; return (
// 02 · DISCOGRAPHY

MUSIC

{ALBUMS.length} ALBUMS // ARTWORK & TRACKS UPLOADING SOON
{/* Featured album player */}
{a.cover ? (
) : ( <>
)} {/* Spinning disc behind */}
{a.cover && (
)}
ALBUM · {a.n}{a.release ? ` · ${a.release}` : ""}
{!a.cover && (
ALBUM · {a.n}
{a.title}
{a.kana}
)}
PREVIEW · LOADING DJ GAIA · {a.year}
{a.vibe}
{a.title}
{/* Waveform placeholder */}
{Array.from({length: 64}).map((_, i) => { const h = 20 + Math.abs(Math.sin(i * 0.5 + sel) * Math.cos(i * 0.3) * 80); return ; })}
00:00 --:--
TRACKS
{String(a.tracks).padStart(2, "0")}
◇ PLAYER UNLOCKS WHEN COVERS & TRACKS ARE UPLOADED
{/* Album grid */}
{ALBUMS.map((al, i) => ( ))}
); } const styles_mu = { feat: { marginBottom: 28 }, featCard: { display: "grid", gridTemplateColumns: "1fr 1fr", minHeight: 360, }, cover: { position: "relative", borderRight: "1px solid var(--panel-stroke)", overflow: "hidden", minHeight: 360, }, featPanel: { padding: 28, display: "flex", flexDirection: "column", gap: 4, }, wave: { marginTop: 20, display: "flex", alignItems: "flex-end", gap: 2, height: 56, padding: "0 2px", borderBottom: "1px solid var(--panel-stroke)", }, ctrlRow: { display: "flex", alignItems: "center", gap: 10, marginTop: 14, }, ctrlBtn: { width: 34, height: 34, border: "1px solid var(--panel-stroke)", background: "oklch(0.12 0.04 300 / 0.5)", color: "var(--ink-dim)", cursor: "not-allowed", fontFamily: "Orbitron, sans-serif", fontSize: 11, opacity: 0.5, }, play: { width: 48, color: "var(--bg-0)", border: "none", fontSize: 14, opacity: 0.9, cursor: "not-allowed" }, unlockNote: { marginTop: 18, padding: "10px 12px", border: "1px dashed var(--panel-stroke)", textAlign: "center", }, grid: { display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(180px, 1fr))", gap: 14, }, tile: { padding: 0, border: "1px solid var(--panel-stroke)", background: "oklch(0.1 0.04 300 / 0.5)", color: "var(--ink)", cursor: "pointer", fontFamily: "inherit", textAlign: "left", transition: "all .2s ease", display: "flex", flexDirection: "column", }, tileCover: { position: "relative", aspectRatio: "1/1", overflow: "hidden", }, tileBody: { padding: 12, flex: 1, }, }; Object.assign(window, { Music });