// Reusable primitives + sensual glyphs (no nooses, no knives) const { useEffect, useRef, useState } = React; function Reveal({ children, delay = 0, as = 'div', className = '', ...rest }) { // Simple passthrough — animations on every scroll were causing intermittent // invisibility bugs and adding visual noise. Content is always shown. const Tag = as; return ( {children} ); } // — Sensual glyphs — // Dagger through a rose function DaggerRose({ size = 24, color = 'currentColor' }) { return ( ); } // Ribbon-bow function RibbonBow({ size = 24, color = 'currentColor' }) { return ( ); } // Lipstick kiss (a simple stylized mouth) function KissMark({ size = 24, color = 'currentColor' }) { return ( ); } // Heart with a serpent function SerpentHeart({ size = 24, color = 'currentColor' }) { return ( ); } // Apple with bite function AppleBite({ size = 24, color = 'currentColor' }) { return ( ); } // Calligraphic ornament (florish/swash) function Florish({ width = 200, color = 'currentColor' }) { return ( ); } // Snake (sensual, for series ornament) function SnakeRose({ size = 24, color = 'currentColor' }) { return ( ); } function scrollToId(id) { const el = document.getElementById(id); if (!el) return; const top = el.getBoundingClientRect().top + window.scrollY - 70; window.scrollTo({ top, behavior: 'smooth' }); } Object.assign(window, { Reveal, scrollToId, DaggerRose, RibbonBow, KissMark, SerpentHeart, AppleBite, Florish, SnakeRose });