// InkIntro — Boot sequence 2500ms const { useState, useEffect, useRef, useMemo, useCallback, Suspense, lazy } = React; function InkIntro({ onDone }) { const [phase, setPhase] = useState(0); // 0 drops, 1 splash, 2 reveal, 3 fadeout useEffect(() => { const t1 = setTimeout(() => setPhase(1), 700); const t2 = setTimeout(() => setPhase(2), 1200); const t3 = setTimeout(() => setPhase(3), 2200); const t4 = setTimeout(() => onDone && onDone(), 2500); return () => { [t1,t2,t3,t4].forEach(clearTimeout); }; }, [onDone]); return ( {/* 3 falling ink drops */} {phase < 1 && [0,1,2].map(i => ( ))} {/* Splash expanding circles */} {phase >= 1 && [0,1,2].map(i => ( = 2 ? 40 : 8, opacity: phase >= 2 ? 0 : 0.9 }} transition={{ duration: 1, delay: i*0.08, ease: [0.22, 1, 0.36, 1] }} style={{ position: 'absolute', top: '50%', left: '50%', width: 40, height: 40, marginLeft: -20, marginTop: -20, borderRadius: '50%', background: i === 1 ? '#8B0000' : '#000', }} /> ))} {/* ISFER reveal */} {phase >= 2 && ( ISFER 502 TATTOOS )} ); } window.InkIntro = InkIntro;