import {scrollProgress,letterReveal} from './reveal-progress.mjs?v=8'; const copy=document.querySelector('.scroll-copy'); if(copy){ const letters=[]; copy.querySelectorAll('.scroll-word').forEach(word=>{ const text=word.dataset.word||word.textContent; word.textContent=''; for(const char of text){const span=document.createElement('span');span.className='scroll-letter';span.textContent=char;word.append(span);letters.push(span);} }); copy.classList.add('scroll-native'); let scheduled=false; function paint(){scheduled=false;const rect=copy.getBoundingClientRect();const progress=scrollProgress(rect.top,rect.height,window.innerHeight);letters.forEach((letter,index)=>letter.style.setProperty('--ink-hidden',((1-letterReveal(progress,index,letters.length))*100).toFixed(3)+'%'));} function queue(){if(!scheduled){scheduled=true;requestAnimationFrame(paint);}} paint(); window.addEventListener('scroll',queue,{passive:true}); window.addEventListener('resize',queue,{passive:true}); window.addEventListener('load',queue,{once:true}); document.addEventListener('visibilitychange',queue); if(window.ResizeObserver)new ResizeObserver(queue).observe(copy); if(document.fonts?.ready)document.fonts.ready.then(queue); // Accordion changes can reposition the phrase without a scroll event. document.addEventListener('toggle',queue,true); }