Clean layout
Two-column composition with sticky behavior.
Sticky step-by-step section, vanilla JS magnetic interaction, scroll-driven marquee and adaptive layered composition.
The right side moves vertically according to scroll progress. The active heading is calculated from the section progress, not from arbitrary timeouts.
On mobile, sticky pin-scroll is replaced with horizontal scrolling for better browser stability and touch interaction.
Stable layout for small screens.
Native horizontal scroll instead of heavy pinning.
Readable cards without broken viewport behavior.
The button reacts to cursor proximity. The marquee changes direction depending on scroll direction and accelerates according to scroll velocity.
The magnetic effect uses distance from cursor to button center. Movement is applied only via transform, so it does not trigger layout recalculation.
The second block is implemented with isolated vanilla JavaScript: the magnetic button calculates cursor distance from the element center and moves only with transform. The marquee reads scroll direction and velocity from scrollY changes, then updates movement inside requestAnimationFrame.