// CLUB — live set countdown + upcoming sets const { useState: useStateCl, useEffect: useEffectCl } = React; const SETS = [ { dc: "AETHER", venue: "WOAH! CLUB · GILGAMESH", date: "APR 26 · 22:00 ET", theme: "TECHNO NIGHT", tag: "headline", t: 2*3600 + 14*60 }, { dc: "PRIMAL", venue: "THE CRYSTAL STAGE · BEHEMOTH", date: "APR 29 · 21:00 CT", theme: "EDM FEST", tag: "festival", t: 5*24*3600 }, { dc: "DYNAMIS", venue: "NEON TEMPLE · MARILITH", date: "MAY 02 · 20:00 PT", theme: "METAL DROP", tag: "late", t: 8*24*3600 }, { dc: "CHAOS", venue: "SAKURA ROOM · OMEGA", date: "MAY 05 · 22:00 GMT", theme: "J-POP SYNTH", tag: "cozy", t: 11*24*3600 }, ]; function useCountdown(secondsStart) { const [s, setS] = useStateCl(secondsStart); useEffectCl(() => { const i = setInterval(() => setS(v => (v > 0 ? v - 1 : 0)), 1000); return () => clearInterval(i); }, []); return s; } function fmt(s) { const d = Math.floor(s / 86400); const h = Math.floor((s % 86400) / 3600); const m = Math.floor((s % 3600) / 60); const sec = s % 60; return [d, h, m, sec]; } function Club() { const t = useCountdown(SETS[0].t); const [D, H, M, S] = fmt(t); return (
// 03 · LIVE OPS · NEXT UP

WOAH! CLUB

NEXT GIG LOADING · ALL DATA CENTERS
{/* Feature gig */}
HEADLINE SET · LIVE SOON
MISSION ID · GAIA-2026-074
{SETS[0].dc} · DATA CENTER
TECHNO NIGHT
テクノ・ナイト — 真夜中のクラブ
{SETS[0].venue} · {SETS[0].date}
{[ {k: "DAYS", v: D}, {k: "HOURS", v: H}, {k: "MINUTES", v: M}, {k: "SECONDS", v: S}, ].map(({k, v}) => (
{String(v).padStart(2,"0")}
{k}
))}
JOIN ON TWITCH RSVP · DISCORD
{/* Upcoming */}
// UPCOMING · QUEUE
{SETS.slice(1).map((g, i) => (
{g.date.split(" ")[1]}
{g.date.split(" ")[0]}
{g.dc}
{g.theme}
{g.venue}
{g.date.split(" ")[3] || ""}
))}
BOOKINGS OPEN · DM ON DISCORD FOR CUSTOM SETS
); } const styles_cl = { grid: { display: "grid", gridTemplateColumns: "1.3fr 1fr", gap: 28 }, feat: { padding: 32, display: "flex", flexDirection: "column", gap: 20 }, featTop: { display: "flex", justifyContent: "space-between", alignItems: "center" }, featMid: { paddingTop: 4 }, timerRow: { display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: 10, marginTop: 4 }, timeCell: { padding: "16px 10px", textAlign: "center", background: "oklch(0.1 0.04 300 / 0.6)", border: "1px solid var(--panel-stroke)", position: "relative", }, timeNum: { fontSize: "clamp(32px, 3.5vw, 52px)", color: "var(--magenta)", textShadow: "0 0 12px var(--magenta)", lineHeight: 1 }, timeLab: { fontSize: 10, color: "var(--ink-faint)", letterSpacing: "0.3em", marginTop: 6 }, upcoming: { display: "flex", flexDirection: "column", gap: 10 }, gigRow: { display: "flex", alignItems: "center", gap: 16, padding: "14px 16px", }, }; Object.assign(window, { Club });