--- interface Props { animation?: 'fade-up' | 'fade-down' | 'fade-left' | 'fade-right' | 'zoom-in' | 'zoom-out'; duration?: number; // in milliseconds delay?: number; // in milliseconds threshold?: number; // 0-1, percentage of element visible to trigger rootMargin?: string; // CSS margin value once?: boolean; // animate only once or every time element enters viewport class?: string; } const { animation = 'fade-up', duration = 600, delay = 0, threshold = 0.1, rootMargin = '0px', once = true, class: className = '', } = Astro.props; // Generate a unique ID with better entropy const id = `scroll-reveal-${crypto.randomUUID().slice(0, 8)}`; ---