// Common helpers for WAVEPIX hero animation // Brand tokens, gradients, decorative wave SVGs, dot grids. const WP = { navy900: '#0B1B3F', navy800: '#102150', navy700: '#152B66', navy600: '#1A3780', blue700: '#0855A0', blue600: '#0A66B8', blue500: '#1E84D8', blue400: '#4CA4E6', blue300: '#8FC5F0', blue200: '#C5E0F5', blue100: '#E6F1FB', cyan500: '#00A8D9', cyan400: '#3BC1E4', orange500: '#FF7A29', orange400: '#FF9556', ink900: '#0E1525', ink700: '#2B3452', ink500: '#5F6B8A', ink400: '#8490AD', ink200: '#D3D9E3', ink100: '#E5EAF2', ink50: '#F5F7FB', white: '#FFFFFF', gradHero: 'linear-gradient(135deg, #0B1B3F 0%, #0A66B8 100%)', gradHeroDeep: 'radial-gradient(120% 140% at 10% 10%, #1A3780 0%, #0B1B3F 55%, #07122B 100%)', font: "'Pretendard Variable', 'Funnel Sans', -apple-system, BlinkMacSystemFont, system-ui, sans-serif", fontDisplay: "'Mona Sans', 'Pretendard Variable', system-ui, sans-serif", fontMono: "'JetBrains Mono', ui-monospace, monospace", }; // Soft animated wave background (SVG). `phase` 0..1 shifts horizontally. function WaveBackdrop({ phase = 0, opacity = 0.5, color = WP.blue400 }) { const dx = phase * 1920; return ( ); } // Subtle dot grid for hero backgrounds. function DotGrid({ opacity = 0.18, color = '#FFFFFF', spacing = 32 }) { return (
); } // Single signature wave line (used as transition motif, brand DNA). function SignatureWave({ x = 0, y = 0, width = 1920, height = 200, progress = 1, color = WP.cyan500, strokeWidth = 2 }) { // progress 0..1 — line draws on const pathLen = 4000; const dashOffset = pathLen * (1 - progress); return ( ); } // Vignette wash function Vignette({ opacity = 0.4 }) { return (
); } Object.assign(window, { WP, WaveBackdrop, DotGrid, SignatureWave, Vignette });