Parent
Individual
Instructions
Use this simple guide to start editing your website smoothly.
Tag
Date
Read
How to edit gsa[p animations
Villora animates with three tools. This guide lists every animated element, the values you can change, and how to remove each animation safely.
- GSAP + ScrollTrigger – the animation engine. Webflow loads it for you through Settings panel → GSAP integration; there is no GSAP script tag in the custom code. The sticky header script uses
gsap.to()andScrollTrigger.create(). - Lenis 1.3.17 – smooth scrolling. The library and its CSS load from unpkg in Site settings Head code and start in Footer code.
- Interactions with GSAP – 21 visual interactions (hero reveal, scroll reveals, hovers, custom cursor, marquee, mobile menu, FAQ). These are built in the Interactions panel, not in code.
Where the code lives
- Open the site dashboard and go to Site settings → Custom code.
- Head code holds the Lenis library: the block marked
<!-- LENIS SMOOTH SCROLL -->withlenis.min.jsandlenis.css. - Footer code holds two scripts:
<!-- LENIS SMOOTH SCROLL -->(starts Lenis) and<!-- HEADER STICKY -->(hides and shows the header). - No page has its own animation code in Page settings, and no Embed element contains animation scripts.
- After editing, click Save changes, then publish. Custom code does not run on the Designer canvas, so test on the published site.
GSAP element map
Custom code animations
| Selector | Element | What it does | Trigger | Edit in |
|---|---|---|---|---|
.header-section | Header Section component (site header on every page) | Moves the header up 100px (y: -100) when you scroll down past 100px, and back (y: 0) when you scroll up | Scroll direction, via ScrollTrigger.create() with start: 0, end: 'max' | Footer code → HEADER STICKY |
| None (whole page) | Page scrolling | Replaces native scrolling with smooth, eased scrolling and sends each scroll update to ScrollTrigger | Mouse wheel / trackpad scroll | Footer code → LENIS SMOOTH SCROLL (library in Head code) |
Dependencies: both scripts need GSAP and ScrollTrigger from the GSAP integration. The Lenis script also uses
gsap.ticker and ScrollTrigger.update. No custom attributes or extra CSS classes are used by the custom code.Interactions with gsap (Interactions panel)
Attribute selectors such as
[text-animation] are custom attributes. Find them in Element settings → Custom attributes. All interactions apply site-wide.| Interaction | Trigger | Animated selector | What it does | Key values |
|---|---|---|---|---|
| Hero Animation | Page load | [hero-animation] | Hero title, text and blocks fade in and rise from 75px below | 0.6s, stagger 0.2s |
| Text Animation | Scroll into view (start top bottom) | [text-animation] | Fades in and rises from 75px below | 0.8s, starts at 0.2s, stagger 0.2s |
| Card Animation | Scroll into view (start top bottom) | [card-animation] | Cards fade in and scale up from 0.75 | 0.8s, starts at 0.2s, stagger 0.2s |
| Title Animation | Scroll into view (start top bottom) | [title-animation] | Splits the heading into words; words fade in and slide from 75px right | 0.8s, starts at 0.2s, stagger 0.05s |
| Stories Title | Scroll into view of .stories-title | .stories-info | Fades in and slides from 100px right | 0.8s, stagger 0.2s |
| Stories Animation | Scroll scrub on .stories-card (top 80% to bottom 80%, scrub 1) | .stories-image | Image scales up to 2.5 as you scroll | Desktop only |
| Benefits Animation | Scroll scrub on .benefits-block (top 25% to bottom 150%, scrub 1) | .benefits-video, .benefits-wrapp, .benefits-space, .benefits-gap | Video grows to 80vw × 80vh, text turns white, spacers shrink to 0 | Desktop only |
| Header Navigation | Click .header-menu-button (play / reverse) | .top, .middle, .bottom, .header-navbar-block | Menu icon lines form an X; mobile menu opens to auto height | Lines 0.4s (y ±8px, rotate ±45°), middle 0.2s, menu 0.3s |
| Button Hover | Hover .button | .button-bg, .button-line, .cursor-click, .cursor-circle, .cursor-dot | Button background shrinks (scale 0.9 × 0.8), line grows; cursor switches to the click label | 0.3s |
| Explore Hover | Hover .explore-wrap | .explore-col, .explore-card | Icon rotates 0° to 90°; card fades in and slides from 50px right | 0.3s |
| Image Animation | Hover [image-animation] | [animated-image] inside it | Image zooms to 1.15 | 0.3s |
| Video Hover | Hover [video-button] | [pause-icon] | Pause icon fades in and scales from 0.5 to 1 | 0.3s, desktop only |
| FAQ Open/Close | Click [faq] (on .faq-card) | .faq-card, [faq-icon] | Adds the is-active combo class to the clicked card and icon, removes it from the others | Instant class toggle |
| Footer Marquee | Page load | .footer-marquee | Footer text scrolls left (x to -100%) | 45s, repeats forever |
| Star Rotate | Page load | .footer-marquee-icon | Star icon spins 360° | 5s, repeats forever |
| Cursor Circle | Mouse move (viewport) | .cursor-circle | Circle follows the mouse | Smoothing 900 |
| Cursor Dot | Mouse move (viewport) | .cursor-dot, .cursor-click, .cursor-view | Dot and labels follow the mouse | Smoothing 700 |
| Cursor Show/Hide | Hover .page-wrapper | .cursor-circle, .cursor-dot | Cursor fades in over the page, out when the mouse leaves | 0.5s |
| Curson Color | Hover [cursor-hover] | .cursor-dot, .cursor-click, .cursor-circle | Cursor colors switch to Color/White over videos | Instant |
| View Show/Hide | Hover [view-button] | .cursor-view, .cursor-dot, .cursor-circle | Shows the View label, hides the dot and circle | 0.5s |
| Click Show/Hide | Hover [click-button] | .cursor-click, .cursor-dot, .cursor-circle | Shows the click label, hides the dot and circle | 0.5s |
Customize animation values
Edit custom code in Site settings → Custom code → Footer code. Snippets labeled Original are copied exactly from the template. Snippets labeled Example are optional changes that are not in the template until you add them.
1. Header Sticky: duration, delay and ease
The two header tweens do not set duration, delay or ease, so GSAP uses its defaults:
duration: 0.5 seconds, delay: 0 and ease: "power1.out".Original (HEADER STICKY, Footer code)
if (currentScroll > lastScroll && currentScroll > 100) {
//scrolling down → hide header
gsap.to(header, {
y: -100,
});
} else {
//scrolling up → show header
gsap.to(header, {
y: 0,
});
}Example: slower hide with a softer ease
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"
});- duration: higher is slower. To make the header hide more slowly, increase it from the default 0.5 to 0.8.
- delay: seconds to wait before the header moves. Keep it small (0 to 0.2) so the header still reacts to scrolling.
- ease: the speed curve.
"power2.out"starts fast and settles gently;"none"moves at a constant speed. Preview options in the GSAP Ease Visualizer linked below. - Add the same three lines to the second
gsap.to(header, { y: 0 })call so hiding and showing match.
2. Header Sticky: distance and scroll threshold
y: -100moves the header up 100px. If your header is taller than 100px, increase it, for exampley: -140, so it hides fully. Keepy: 0for the show tween.currentScroll > 100keeps the header visible for the first 100px of scrolling. Change 100 to 300 to keep it visible longer.start: 0andend: 'max'make ScrollTrigger watch the whole page. Leave these unchanged.
3. Lenis smooth scroll: duration and easing
Original (LENIS SMOOTH SCROLL, Footer code)
const lenis = new Lenis({
duration: 1.2,
easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
smooth: true,
});- duration: seconds each scroll takes to settle. Lower it to 0.8 for snappier scrolling, or raise it to 1.6 for a floatier feel.
- easing: the scroll speed curve. The original is an exponential ease-out (fast start, gentle stop).
Example: snappier scroll with a constant-speed curve
const lenis = new Lenis({
duration: 0.8,
easing: (t) => t,
smooth: true,
});Do not change the lines below the Lenis options.
lenis.on('scroll', ScrollTrigger.update), gsap.ticker.add(...) and gsap.ticker.lagSmoothing(0) keep ScrollTrigger in sync with smooth scrolling.4. Interactions with GSAP: duration, delay, ease, stagger and scroll start
- In the Designer, open the Interactions panel. Make sure the dropdown at the bottom of the panel is set to Interactions with GSAP.
- Select the interaction by its name from the element map, for example Text Animation.
- Click the action on the timeline to edit Duration, Delay (or drag the action along the timeline), Ease and Stagger, plus the animated values such as Move Y, Scale or Opacity.
- For scroll interactions, select the trigger to edit Start and End (for example
top bottom) and Scrub. - Use the preview button in the panel to check the result.
Examples: to slow the scroll reveal, open Text Animation and change Duration from 0.8s to 1.2s. To space the hero items further apart, open Hero Animation and change Stagger from 0.2s to 0.3s. To start the Stories image zoom later, change the Stories Animation Start from
top 80% to top 60%.Remove gsap animations
Each custom code animation is a separate script block, so you can remove one without breaking the other. Webflow saves backups automatically; you can restore one from Site settings → Backups if needed.
A. Remove the sticky header effect
- Go to Site settings → Custom code → Footer code.
- Delete everything from
<!-- HEADER STICKY -->down to its closing</script>tag. - Keep the
<!-- LENIS SMOOTH SCROLL -->block above it. - Nothing else needs to change: the header uses no custom attributes or extra classes for this effect, and its layout comes from the
.header-sectionclass. - Click Save changes and publish. The header now stays in place instead of hiding on scroll down.
B. Remove Lenis smooth scrolling
- In Footer code, delete everything from
<!-- LENIS SMOOTH SCROLL -->down to its closing</script>tag. - In Head code, delete the
<!-- LENIS SMOOTH SCROLL -->comment, thelenis.min.jsscript tag and thelenis.csslink tag. - Remove both parts together. If you delete only the Head code library, the Footer script throws a “Lenis is not defined” error in the browser console.
- Click Save changes and publish. The page returns to native browser scrolling, and the sticky header keeps working because it only needs GSAP and ScrollTrigger.
C. Remove all custom code animations
- Complete steps A and B.
- Leave Settings panel → GSAP integration unchanged unless you are sure no other custom code on your site uses GSAP. Interactions with GSAP are built separately in the Interactions panel and are covered in step D.
D. Remove an interaction with gsap
- Open the Interactions panel (set to Interactions with GSAP) and select the interaction by name.
- To pause it without deleting, click the eye icon next to an action to hide it. To remove it, delete the interaction.
- For attribute-based interactions, you can also remove the attribute (for example
text-animation) from elements in Element settings → Custom attributes. Leaving it in place is harmless. - The reveal interactions (Hero, Text, Card, Title, Stories Title) set their own start state, so after deleting them the elements simply appear in their final position.
- The custom cursor uses six interactions together: Cursor Circle, Cursor Dot, Cursor Show/Hide, Curson Color, View Show/Hide and Click Show/Hide. To remove the cursor, delete all six, delete the Click and Circle actions inside Button Hover, then remove the Cursor Section component from each page.
- Interactions apply site-wide, so a change affects every page that uses the same class or attribute.
After any removal, check
- Preview the Home, About and Contact pages and scroll from top to bottom.
- Open the mobile menu, hover buttons and cards, and open an FAQ item.
- Open the browser console on the published site and confirm there are no red errors.
- Publish the site once everything works.
GSAP & animation documentation
Official references for the tools used in this template.
Getting started with GSAP in Webflow : https://help.webflow.com/hc/en-us/articles/40538857574419-Getting-started-with-GSAP-in-Webflow
Custom code in head and body tags : https://help.webflow.com/hc/en-us/articles/33961357265299-Custom-code-in-head-and-body-tags
Intro to Interactions with GSAP : https://help.webflow.com/hc/en-us/articles/33961310025107
Create and manage Interactions with GSAP : https://help.webflow.com/hc/en-us/articles/53580099234579
GSAP gsap.to() (duration, delay, ease) : https://gsap.com/docs/v3/GSAP/gsap.to()
GSAP Eases and Ease Visualizer : https://gsap.com/docs/v3/Eases
GSAP ScrollTrigger : https://gsap.com/docs/v3/Plugins/ScrollTrigger
Lenis smooth scroll : https://github.com/darkroomengineering/lenis