/* global React */ const { useState, useEffect, useRef, useMemo } = React; // ─── Marquee ─────────────────────────────────────────────── function Marquee({ items, speed=28 }){ return (
{[0,1].map(i => ( {items.map((it, n) => ( {it.text}{' ◇ '} ))} ))}
); } // ─── ASCII Logo ──────────────────────────────────────────── const LOGO_LINES = [ " _ ______ __ __ __ _______________", " / | / / __ \\/ //_// //_/__ < /__ /", " / |/ / / / / ,< / ,< / // / / / ", " / /| / /_/ / /| |/ /| |_ / // / / / ", "/_/ |_/\\____/_/ |_/_/ |_(_)_//_/ /_/ ", ]; function AsciiLogo({ glitch=true }){ const text = LOGO_LINES.join("\n"); return (
{text}
); } // ─── Alias / nickname ────────────────────────────────────── function Alias(){ return (
alias :: @nokk.717 // angel.engine / R.A.D.I.D.
); } // ─── Status row ──────────────────────────────────────────── function StatusRow({ status="ONLINE" }){ return (
Object: //////////// tattoo / digital artist
Location: ////// Astana, KZ
Status: ///////// {status}
); } // ─── Section header ──────────────────────────────────────── function SectionHead({ num, title, sub }){ return (

[{num}] {title} {sub && {sub}}

); } // ─── Topbar (back button) ───────────────────────────────── function Topbar({ left, title, onBack }){ return (
{title} {left}
); } // ─── Footer marks ────────────────────────────────────────── function FooterMarks(){ const I = window.Icons; return (
N717tattoo
©'25nokk
◀◀back
BLK
WORK
▶▶next
); } // ─── Terminal foot ───────────────────────────────────────── function TermFoot(){ const [t, setT] = useState(() => new Date()); useEffect(()=>{ const id = setInterval(()=>setT(new Date()), 1000); return ()=>clearInterval(id); }, []); const pad = (n) => String(n).padStart(2,'0'); const ts = `${pad(t.getHours())}:${pad(t.getMinutes())}:${pad(t.getSeconds())}`; return (
nokk@dystopia ~ % {ts} ASTN
); } window.Components = { Marquee, AsciiLogo, StatusRow, SectionHead, Topbar, FooterMarks, TermFoot };