// Shared UI pieces: Placeholder, Marquee, MusicBars, LanguagePill, ThemePill
const { useEffect, useRef, useState } = React;
function Placeholder({ label, aspect = '4/5', className = '', theme }) {
const dark = theme.placeholderMode === 'stripes-dark';
const stripeA = dark ? 'rgba(255,255,255,0.04)' : 'rgba(0,0,0,0.04)';
const stripeB = dark ? 'rgba(255,255,255,0.08)' : 'rgba(0,0,0,0.08)';
const bg = dark ? '#1a1614' : theme.bg2;
return (
↳ {label}
);
}
function Marquee({ text, theme, reverse = false }) {
return (
{Array.from({ length: 8 }, (_, i) => (
{text}
))}
);
}
function MusicBars({ color, height = 16, count = 4 }) {
return (
{Array.from({ length: count }, (_, i) => (
))}
);
}
function Kicker({ children, theme, color }) {
return (
{children}
);
}
function DisplayText({ children, theme, size = 'clamp(44px, 7vw, 112px)', color, style = {} }) {
return (
{children}
);
}
Object.assign(window, { Placeholder, Marquee, MusicBars, Kicker, DisplayText });