import { motion } from 'framer-motion'; import { useEffect, useState } from 'react'; const ACCENT = '#c9b787'; const ACCENT_DIM = '#a89868'; const BORDER = 'rgba(255,255,255,0.10)'; const BORDER_SOFT = 'rgba(255,255,255,0.05)'; const TEXT_DIM = '#8a8a8a'; const MONO = "'JetBrains Mono', 'Fira Code', monospace"; const ease = [0.22, 1, 0.36, 1] as [number, number, number, number]; const ORBITS = [ { r: 70, dur: 38, dir: 1, count: 1 }, { r: 110, dur: 52, dir: -1, count: 2 }, { r: 158, dur: 78, dir: 1, count: 3 }, { r: 210, dur: 110, dir: -1, count: 2 }, ]; const STATIONS = [ { angle: 18, r: 158, label: 'SEXTANT' }, { angle: 102, r: 210, label: 'COUNSEL' }, { angle: 198, r: 110, label: 'DOMAINE' }, { angle: 286, r: 158, label: 'PARAGON' }, ]; const TICKS = Array.from({ length: 36 }, (_, i) => i * 10); function useTick(intervalMs: number) { const [tick, setTick] = useState(0); useEffect(() => { const id = setInterval(() => setTick((t) => (t + 1) % 1_000_000), intervalMs); return () => clearInterval(id); }, [intervalMs]); return tick; } function pad(n: number, w = 2) { return n.toString().padStart(w, '0'); } function formatStamp(now: Date) { return `${now.getUTCFullYear()}.${pad(now.getUTCMonth() + 1)}.${pad(now.getUTCDate())} ` + `${pad(now.getUTCHours())}:${pad(now.getUTCMinutes())}:${pad(now.getUTCSeconds())}Z`; } export function HeroCanvas() { const tick = useTick(1000); const now = new Date(Date.now()); void tick; const stamp = formatStamp(now); const epoch = (Date.now() / 1000) | 0; return ( {/* corner crosshairs */} {[ { top: 12, left: 12, rot: 0 }, { top: 12, right: 12, rot: 90 }, { bottom: 12, right: 12, rot: 180 }, { bottom: 12, left: 12, rot: 270 }, ].map((c, i) => (
))} {/* HUD top-left */}
NODE · A11OY-01
ORBIT · NOMINAL
● TRACK · LIVE
{/* HUD top-right */}
{stamp}
EPOCH {epoch}
Λ ≥ 0.90
{/* HUD bottom */}
SIG · 1024 · OK 9-AXIS ∧ · REPLAY 1ed4d253
{/* scan line */} {/* tick ring */} {TICKS.map((t) => { const a = (t * Math.PI) / 180; const long = t % 30 === 0; const r1 = long ? 232 : 236; const r2 = 240; return ( ); })} {[0, 90, 180, 270].map((t) => { const a = (t * Math.PI) / 180; return ( {pad(t, 3)} ); })} {/* orbit rings */} {ORBITS.map((o) => ( ))} {/* radial guides */} {[0, 45, 90, 135].map((deg) => { const a = (deg * Math.PI) / 180; return ( ); })} {/* stations */} {STATIONS.map((s) => { const a = (s.angle * Math.PI) / 180; const cx = 250 + s.r * Math.cos(a); const cy = 250 + s.r * Math.sin(a); return ( {s.label} ); })} {/* core */} a11oy {/* traveling pulses on each orbit */} {ORBITS.flatMap((o) => Array.from({ length: o.count }).map((_, i) => { const offset = (i / o.count) * o.dur; return ( 0 ? 360 : -360, }} transition={{ duration: o.dur, repeat: Infinity, ease: 'linear', delay: -offset, }} style={{ transformOrigin: '250px 250px', transformBox: 'fill-box', }} cx={250 + o.r} cy={250} /> ); }), )} {/* core pulse */} ); }