// Default hero art for gallery personas. Publishers will eventually attach real // imagery; until then (and whenever they don't) every persona gets a deterministic // abstract "agent" mark — hue derived from the slug, so a persona always looks the // same everywhere but no two look alike. Rendered as an image, so it deliberately // keeps its own colors in dark mode (like a photo would). function hueOf(slug: string): number { let h = 0; for (let i = 0; i < slug.length; i++) h = (h * 31 + slug.charCodeAt(i)) % 3600; return h % 360; } export function PersonaHero({ slug, height = 120, className = "", }: { slug: string; height?: number; className?: string; }) { const h = hueOf(slug); const bg = `hsl(${h} 42% 91%)`; const deep = `hsl(${h} 45% 42%)`; const mid = `hsl(${h} 45% 62%)`; const alt = `hsl(${(h + 45) % 360} 50% 60%)`; return ( {/* orbit rings around a central agent spark, with satellite nodes */} {/* ambient dots drifting out to the edges */} {/* the agent spark: a four-point star on a soft badge */} ); }