cc341cc944
Replaced IntersectionObserver (discrete threshold) with a scroll RAF loop using getBoundingClientRect. Opacity is computed from the fraction of .story-hero__content still visible above the viewport top — so the nav title fades in gradually as the hero title slides off the top edge, reaching full opacity only when the element is completely gone. Removed CSS transition (no longer needed; per-frame JS update is smooth). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vgmzx8VTTTmCskSpQtsLTr