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() and ScrollTrigger.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

  1. Open the site dashboard and go to Site settings → Custom code.
  2. Head code holds the Lenis library: the block marked <!-- LENIS SMOOTH SCROLL --> with lenis.min.js and lenis.css.
  3. Footer code holds two scripts: <!-- LENIS SMOOTH SCROLL --> (starts Lenis) and <!-- HEADER STICKY --> (hides and shows the header).
  4. No page has its own animation code in Page settings, and no Embed element contains animation scripts.
  5. 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

SelectorElementWhat it doesTriggerEdit in
.header-sectionHeader 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 upScroll direction, via ScrollTrigger.create() with start: 0, end: 'max'Footer code → HEADER STICKY
None (whole page)Page scrollingReplaces native scrolling with smooth, eased scrolling and sends each scroll update to ScrollTriggerMouse wheel / trackpad scrollFooter 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.
InteractionTriggerAnimated selectorWhat it doesKey values
Hero AnimationPage load[hero-animation]Hero title, text and blocks fade in and rise from 75px below0.6s, stagger 0.2s
Text AnimationScroll into view (start top bottom)[text-animation]Fades in and rises from 75px below0.8s, starts at 0.2s, stagger 0.2s
Card AnimationScroll into view (start top bottom)[card-animation]Cards fade in and scale up from 0.750.8s, starts at 0.2s, stagger 0.2s
Title AnimationScroll into view (start top bottom)[title-animation]Splits the heading into words; words fade in and slide from 75px right0.8s, starts at 0.2s, stagger 0.05s
Stories TitleScroll into view of .stories-title.stories-infoFades in and slides from 100px right0.8s, stagger 0.2s
Stories AnimationScroll scrub on .stories-card (top 80% to bottom 80%, scrub 1).stories-imageImage scales up to 2.5 as you scrollDesktop only
Benefits AnimationScroll scrub on .benefits-block (top 25% to bottom 150%, scrub 1).benefits-video, .benefits-wrapp, .benefits-space, .benefits-gapVideo grows to 80vw × 80vh, text turns white, spacers shrink to 0Desktop only
Header NavigationClick .header-menu-button (play / reverse).top, .middle, .bottom, .header-navbar-blockMenu icon lines form an X; mobile menu opens to auto heightLines 0.4s (y ±8px, rotate ±45°), middle 0.2s, menu 0.3s
Button HoverHover .button.button-bg, .button-line, .cursor-click, .cursor-circle, .cursor-dotButton background shrinks (scale 0.9 × 0.8), line grows; cursor switches to the click label0.3s
Explore HoverHover .explore-wrap.explore-col, .explore-cardIcon rotates 0° to 90°; card fades in and slides from 50px right0.3s
Image AnimationHover [image-animation][animated-image] inside itImage zooms to 1.150.3s
Video HoverHover [video-button][pause-icon]Pause icon fades in and scales from 0.5 to 10.3s, desktop only
FAQ Open/CloseClick [faq] (on .faq-card).faq-card, [faq-icon]Adds the is-active combo class to the clicked card and icon, removes it from the othersInstant class toggle
Footer MarqueePage load.footer-marqueeFooter text scrolls left (x to -100%)45s, repeats forever
Star RotatePage load.footer-marquee-iconStar icon spins 360°5s, repeats forever
Cursor CircleMouse move (viewport).cursor-circleCircle follows the mouseSmoothing 900
Cursor DotMouse move (viewport).cursor-dot, .cursor-click, .cursor-viewDot and labels follow the mouseSmoothing 700
Cursor Show/HideHover .page-wrapper.cursor-circle, .cursor-dotCursor fades in over the page, out when the mouse leaves0.5s
Curson ColorHover [cursor-hover].cursor-dot, .cursor-click, .cursor-circleCursor colors switch to Color/White over videosInstant
View Show/HideHover [view-button].cursor-view, .cursor-dot, .cursor-circleShows the View label, hides the dot and circle0.5s
Click Show/HideHover [click-button].cursor-click, .cursor-dot, .cursor-circleShows the click label, hides the dot and circle0.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: -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.

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

  1. In the Designer, open the Interactions panel. Make sure the dropdown at the bottom of the panel is set to Interactions with GSAP.
  2. Select the interaction by its name from the element map, for example Text Animation.
  3. 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.
  4. For scroll interactions, select the trigger to edit Start and End (for example top bottom) and Scrub.
  5. 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

  1. Go to Site settings → Custom code → Footer code.
  2. Delete everything from <!-- HEADER STICKY --> down to its closing </script> tag.
  3. Keep the <!-- LENIS SMOOTH SCROLL --> block above it.
  4. Nothing else needs to change: the header uses no custom attributes or extra classes for this effect, and its layout comes from the .header-section class.
  5. Click Save changes and publish. The header now stays in place instead of hiding on scroll down.

B. Remove Lenis smooth scrolling

  1. In Footer code, delete everything from <!-- LENIS SMOOTH SCROLL --> down to its closing </script> tag.
  2. In Head code, delete the <!-- LENIS SMOOTH SCROLL --> comment, the lenis.min.js script tag and the lenis.css link tag.
  3. 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.
  4. 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

  1. Complete steps A and B.
  2. 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

  1. Open the Interactions panel (set to Interactions with GSAP) and select the interaction by name.
  2. To pause it without deleting, click the eye icon next to an action to hide it. To remove it, delete the interaction.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
Click
View