/* Visual primitives — themes, hero artwork, icons, copy-block */ /* ---------- THEMES ---------- Three discrete visual directions, switched via Tweaks. Every theme exposes the same set of CSS vars so components stay clean. */ const FEAR_THEMES = { ritual: { name: "Ritual", blurb: "Cormorant serif, blood drips on the wordmark, soft vignette and grain.", vars: { "--bg": "#0a0a0b", "--bg-elev": "#14141a", "--bg-mid": "#1c1c24", "--panel": "#14141a", "--panel-2": "#1f2937", "--border": "#2d2d35", "--border-strong": "#3a3a44", "--blood": "#8b0000", "--blood-bright": "#b91c1c", "--blood-deep": "#4a0404", "--text": "#e5e5e5", "--text-2": "#9ca3af", "--text-3": "#6b7280", "--ok": "#22c55e", "--warn": "#f59e0b", "--font-display": "'Cormorant Garamond', 'EB Garamond', Georgia, serif", "--font-mark": "'Cinzel', 'Cormorant Garamond', Georgia, serif", "--font-body": "'Inter', system-ui, sans-serif", "--font-mono": "'JetBrains Mono', 'IBM Plex Mono', ui-monospace, monospace", "--mark-tracking": "0.18em", "--mark-weight": "600", "--vignette": "radial-gradient(ellipse at center, #1c1c24 0%, #14141a 45%, #0a0a0b 100%)", "--grain-opacity": "0.045", "--drip": "1", }, }, brutalist: { name: "Brutalist", blurb: "Monospace everything, hard rules, terminal-cold. Minimum effects.", vars: { "--bg": "#0b0b0c", "--bg-elev": "#101013", "--bg-mid": "#101013", "--panel": "#0e0e11", "--panel-2": "#15151a", "--border": "#26262d", "--border-strong": "#3a3a44", "--blood": "#a30000", "--blood-bright": "#cc1f1f", "--blood-deep": "#380303", "--text": "#ededed", "--text-2": "#9aa0a6", "--text-3": "#6b7280", "--ok": "#22c55e", "--warn": "#f59e0b", "--font-display": "'JetBrains Mono', ui-monospace, monospace", "--font-mark": "'JetBrains Mono', ui-monospace, monospace", "--font-body": "'JetBrains Mono', ui-monospace, monospace", "--font-mono": "'JetBrains Mono', ui-monospace, monospace", "--mark-tracking": "0.22em", "--mark-weight": "700", "--vignette": "linear-gradient(180deg, #0b0b0c 0%, #0b0b0c 100%)", "--grain-opacity": "0.02", "--drip": "0", }, }, steel: { name: "Steel", blurb: "Deep navy + steel-grey panels, white typography, top-menu product feel.", vars: { "--bg": "#1a2733", "--bg-elev": "#22303d", "--bg-mid": "#26323f", "--panel": "#2a3744", "--panel-2": "#37475a", "--border": "#3d4d5e", "--border-strong": "#506377", "--blood": "#5b8db8", "--blood-bright": "#7aa9d0", "--blood-deep": "#1e3a52", "--text": "#ffffff", "--text-2": "#cbd5e0", "--text-3": "#94a3b8", "--ok": "#86efac", "--warn": "#fbbf24", "--font-display": "'Inter', system-ui, sans-serif", "--font-mark": "'Inter', system-ui, sans-serif", "--font-body": "'Inter', system-ui, sans-serif", "--font-mono": "'JetBrains Mono', ui-monospace, monospace", "--mark-tracking": "0.18em", "--mark-weight": "600", "--vignette": "linear-gradient(180deg, #1a2733 0%, #22303d 60%, #1a2733 100%)", "--grain-opacity": "0", "--drip": "0", }, }, cathedral: { name: "Cathedral", blurb: "Cinzel mark, deep burgundy panels, thin gold-bone hairlines.", vars: { "--bg": "#0c0709", "--bg-elev": "#15090d", "--bg-mid": "#1d0a10", "--panel": "#150a0e", "--panel-2": "#1c0e13", "--border": "#3a1820", "--border-strong": "#5a2028", "--blood": "#9b1c1c", "--blood-bright": "#c52828", "--blood-deep": "#4a0404", "--text": "#e8e0d6", "--text-2": "#a89a8c", "--text-3": "#7a6e62", "--ok": "#86c08a", "--warn": "#d4a155", "--font-display": "'EB Garamond', 'Cormorant Garamond', Georgia, serif", "--font-mark": "'Cinzel', 'EB Garamond', Georgia, serif", "--font-body": "'EB Garamond', Georgia, serif", "--font-mono": "'JetBrains Mono', ui-monospace, monospace", "--mark-tracking": "0.42em", "--mark-weight": "500", "--vignette": "radial-gradient(ellipse at 50% 35%, #1d0a10 0%, #15090d 40%, #0c0709 100%)", "--grain-opacity": "0.05", "--drip": "0.6", }, }, }; /* ---------- ICONS (lucide-style monochrome) ---------- */ const Ic = { Lock: (p) => ( ), Network: (p) => ( ), Brace: (p) => ( ), Shield: (p) => ( ), Server: (p) => ( ), Github: (p) => ( ), Download: (p) => ( ), Copy: (p) => ( ), Chevron: (p) => ( ), Ext: (p) => ( ), Alert: (p) => ( ), Check: (p) => ( ), Eye: (p) => ( ), EyeOff: (p) => ( ), }; /* ---------- GRAIN OVERLAY ---------- */ const GrainOverlay = () => (