Use this simple guide to start editing your website smoothly.
gsap.to() and ScrollTrigger.create().<!-- LENIS SMOOTH SCROLL --> with lenis.min.js and lenis.css.<!-- LENIS SMOOTH SCROLL --> (starts Lenis) and <!-- HEADER STICKY --> (hides and shows the header).[text-animation] are custom attributes; find them in Element settings → Custom attributes. All interactions apply site-wide..header-section (Header Section component, site header on every page). Moves the header up 175px (y: -175, 0.3s) when you scroll down more than 100px, and back to y: 0 (0.15s) when you scroll up, with ease: 'power2.out'. It also removes the header border on load. Trigger: scroll direction, via ScrollTrigger.create() with start: 0, end: 'max'. Edit in Footer code → HEADER STICKY..header-over. Starts at opacity 0 and fades to 1 (0.3s) as soon as the page scrolls, then fades back out at the top of the page. Edit in Footer code → HEADER STICKY..header-gap. Spacer heights shrink to 0 (0.3s) once the page scrolls and return to their original height at the top of the page. Edit in Footer code → HEADER STICKY.duration: 1.2) and sends each scroll update to ScrollTrigger. Trigger: mouse wheel or trackpad scroll. Edit in Footer code → LENIS SMOOTH SCROLL (library in Head code).gsap.ticker and ScrollTrigger.update. The custom code uses no custom attributes; it only reads the .header-section, .header-over and .header-gap classes.[hero-animation] fades in and rises from 75px below. 0.6s, stagger 0.2s.top bottom) of [text-animation]. Fades in and rises from 75px below. 0.8s, starts at 0.2s, stagger 0.2s.top bottom) of [card-animation]. Fades in and scales up from 0.75. 0.8s, starts at 0.2s, stagger 0.2s.top bottom) of [grow-animation]. Fades in and scales from 0.75 to 1. 0.8s, starts at 0.2s, stagger 0.2s..header-humb (play / reverse). .top and .bottom lines move ±6px and rotate ±45° to form an X (0.4s); .middle line changes width (0.2s)..header-dropdown (reverses on mouse leave). .header-icon rotates 0° to 180° (0.5s); .header-wrapp opens from 0 to auto height (0.3s)..button (reverses on mouse leave). .button-bg shrinks to scale 0.9 × 0.8; .button-line scales to 1 and fades in. 0.3s..finvelle-card (reverses on mouse leave). .finvelle-ico switches background and icon color; .finvelle-gap collapses to 0 height; .finvelle-demo opens to auto height. 0.3s..cms-card (reverses on mouse leave). .cms-image zooms to 1.2. 0.5s..team-card (reverses on mouse leave). .team-overlay width shrinks to 0%. 0.5s..review-card. Removes the is-active combo class from every .review-card, .review-quote and .review-icon, then adds it to the hovered card, its quote and its icon. Instant class toggle.[faq] (on .faq-card). Adds the is-active combo class to the clicked card and its [faq-icon], and removes it from the other cards. Instant class toggle.[any-loop] scrolls left (x to -100%). 90s, repeats forever.[video-button] (reverses on mouse leave). [pause-icon] fades in and scales from 0.5 to 1. 0.3s, desktop only.[cursor-hover] (reverses on mouse leave). The hovered element's background, text and border colors switch to a color variable. Instant.duration: 0.5 seconds, delay: 0 and ease: "power1.out".if (currentScroll > lastScroll && currentScroll > 100) {
//scrolling down → hide header
gsap.to(header, {
y: -100,
});
} else {
//scrolling up → show header
gsap.to(header, {
y: 0,
});
}gsap.to(header, {
y: -100,
duration: 0.8, // seconds; default 0.5
delay: 0.1, // wait before moving; default 0
ease: "power2.out", // speed curve; default "power1.out"
});"power2.out" starts fast and settles gently; "none" moves at a constant speed. Preview options in the GSAP Ease Visualizer linked below.gsap.to(header, { y: 0 }) call so hiding and showing match.y: -100 moves the header up 100px. If your header is taller than 100px, increase it, for example y: -140, so it hides fully. Keep y: 0 for the show tween.currentScroll > 100 keeps the header visible for the first 100px of scrolling. Change 100 to 300 to keep it visible longer.start: 0 and end: 'max' make ScrollTrigger watch the whole page. Leave these unchanged.const lenis = new Lenis({
duration: 1.2,
easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
smooth: true,
});const lenis = new Lenis({
duration: 0.8,
easing: (t) => t,
smooth: true,
});lenis.on('scroll', ScrollTrigger.update), gsap.ticker.add(...) and gsap.ticker.lagSmoothing(0) keep ScrollTrigger in sync with smooth scrolling.top bottom) and Scrub.<!-- HEADER STICKY --> down to its closing </script> tag.<!-- LENIS SMOOTH SCROLL --> block above it..header-section class.<!-- LENIS SMOOTH SCROLL --> down to its closing </script> tag.<!-- LENIS SMOOTH SCROLL --> comment, the lenis.min.js script tag and the lenis.css link tag.text-animation) from elements in Element settings → Custom attributes. Leaving it in place is harmless.