// --- Reusable primitives --- const { useState, useEffect, useRef, useMemo, useCallback } = React; function LivePill({ live }) { if (live) { return ( LIVE NOW ); } return OFFLINE — παίρνω καφέ; } function Stars({ n }) { return ( {'★'.repeat(n)}{'☆'.repeat(5 - n)} ); } function TopBar({ live, theme }) { const [now, setNow] = useState(() => new Date()); useEffect(() => { const id = setInterval(() => setNow(new Date()), 1000); return () => clearInterval(id); }, []); const pad = (n) => String(n).padStart(2, '0'); const time = `${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`; return (
GREEKGRANDPA.OS v3.8.{GRANDPA.realAge} — {live ? 'STREAMING' : 'STANDBY'}
[{theme.toUpperCase()}] · CRT {pad(now.getHours())}:{pad(now.getMinutes())}
); } function Ticker({ items }) { const str = items.join(' ● '); return (
{str} {str}
); } function SectionHeader({ id, title, kicker }) { return (
> {kicker}

{title}

──────────
); } Object.assign(window, { LivePill, Stars, TopBar, Ticker, SectionHeader });