Documentation

Instructions

Everything is already wired up. This page shows how to tweak each animation directly from the Webflow Designer — no code changes required.

Read first

Every animation is controlled by an HTML attribute (or a specific class name, for hover effects). Add the attribute to enable, remove it to disable, change the value to tweak behavior. All defaults are sensible — you only need to touch the optional modifiers when you want a different feel.

01

How to Add or Remove an Attribute

All animations on this template are triggered by custom attributes placed on elements. You can add, edit, or remove them directly inside the Webflow Designer without touching any code.

Step 1

Select the element you want to animate in the Webflow Designer canvas.

Step 2

Open the Settings panel (gear icon in the top-right, or press D).

Step 3

Scroll down to Custom Attributes and click the + button.

Step 4

Type the attribute Name (for example, data-reveal) and, if needed, the Value. Some attributes are toggle-only and don't need a value.

Step 5

To remove an attribute, hover over the row and click the trash icon. Publish the site to see the change live.

02

Scroll Reveal

Fades an element up into view as it enters the viewport. Add this attribute to any element you want to animate in on scroll. Remove it to disable.

data-reveal
Enables the fade-up reveal. No value needed.
data-reveal-delay
Wait time before the animation starts, in seconds. Default: 0.
data-reveal-duration
Animation length, in seconds. Default: 0.8.
data-reveal-y
Vertical travel distance, in pixels. Default: 24. Use 0 for a pure fade with no movement.
data-reveal-stagger
Put this on a parent element to stagger its direct children. Value is the delay between each child, in seconds. Typical range: 0.08 to 0.15.
Example
1<h2 data-reveal data-reveal-delay="0.2">Heading fades up</h2>
2
3<div data-reveal-stagger="0.1">
4  <div>Child 1</div>
5  <div>Child 2</div>
6  <div>Child 3</div>
7</div>
03

Text Highlight

Reveals a heading line by line with a sweep effect when it enters the viewport. Used on display headings across the template — add it to any heading you want to get the same treatment.

data-text-highlight
Enables the line-by-line highlight reveal. No value needed.
data-text-highlight-stagger
Delay between each line, in seconds. Default: 0.35.
data-text-highlight-duration
Duration of the sweep per line, in seconds. Default: 0.7.
data-text-highlight-start
Scroll position that triggers the animation. Default: top bottom.
Example
1<h1 data-text-highlight>Your heading goes here</h1>
04

Text Fade

Word-by-word opacity reveal that follows the user's scroll position. Best for long statement paragraphs where you want the words to appear one after the other as the user scrolls through.

data-text-fade
Enables the word-by-word opacity reveal. No value needed.
data-text-fade-from
Starting opacity for each word. Default: 0.15. Lower values start darker.
data-text-fade-stagger
Per-word offset in timeline units. Default: 0.5.
data-text-fade-start
Scroll position where the animation begins. Default: top 80%.
data-text-fade-end
Scroll position where the animation ends. Default: bottom 60%.
data-text-fade-scrub
Scrub smoothing amount. Default: 1.5. Higher values feel smoother; lower feel snappier.
Example
1<p data-text-fade>
2  Long paragraph that reveals word by word as you scroll.
3</p>
05

Fade Stagger

Cascading fade for a group of child elements — each child animates in sequence when the parent scrolls into view. Works for grids, feature lists, image rows, and similar collections.

data-fade-stagger
Apply to the parent. Value is the per-child stagger time, in seconds. Default: 0.06.
data-fade-stagger-duration
Duration of each child's fade, in seconds. Default: 0.7.
data-fade-stagger-delay
Wait time before the cascade starts, in seconds. Default: 0.
data-fade-stagger-start
Scroll position that triggers the cascade. Default: top bottom.
Example
1<div data-fade-stagger="0.08">
2  <div>Item 1</div>
3  <div>Item 2</div>
4  <div>Item 3</div>
5</div>
06

Arc Marquee

Infinite-loop marquee used for image strips or logo rows. To change the items inside, just edit the children normally in the Designer — the loop keeps working.

data-arc-marquee
Marks the outer wrapper. Required on the element that contains the track.
data-arc-marquee-track
Marks the inner track that moves. All items live inside this element.
data-arc-marquee-item
Required on each item (image, logo, card) inside the track.
data-arc-marquee-speed
Seconds per full loop. Default: 60. Lower numbers are faster.
Structure
1<div data-arc-marquee data-arc-marquee-speed="40">
2  <div data-arc-marquee-track>
3    <div data-arc-marquee-item>Item A</div>
4    <div data-arc-marquee-item>Item B</div>
5    <div data-arc-marquee-item>Item C</div>
6  </div>
7</div>
07

Works Stack

Scroll-driven stack of project cards — each card peels back revealing the next. Use it to showcase a CMS collection. Two variants are available depending on whether you want the section to stay pinned during the sequence.

data-works-stack
Pinned variant. The section stays fixed while the cards cycle through.
data-works-scroll
Non-pinned variant. Cards stack naturally as you scroll through, no pinning. Use one or the other on the wrapper, not both.
data-works-card
Required on each card inside the stack. Typically bound to a CMS collection item.
data-works-name
Project name shown in the follow-cursor label on hover. Bind it to a CMS field to make it dynamic per card.
data-works-cursor
Custom cursor that follows the mouse across the stack.
data-works-cursor-label
Text inside the cursor — automatically receives the hovered card's name.
Structure
1<div data-works-stack>
2  <a data-works-card data-works-name="Project A">...</a>
3  <a data-works-card data-works-name="Project B">...</a>
4  <div data-works-cursor>
5    <div data-works-cursor-label></div>
6  </div>
7</div>
08

Class-Based Hovers

Hover effects that run automatically wherever the matching class appears. No attributes required — the class names are the trigger. To keep these animations working, don't rename the class or its inner structure.

.button
Primary button with character slide + background scale on hover. Requires children: .button_bg, .button_text, .button_text_main, and a duplicate .button_text_hover holding the same label.
.arrow-link
Text link with animated underline + arrow shift. Requires children: .arrow-link_text, .arrow-link_line, and optionally .arrow-link_icon.
.footer_link
Footer link with character slide on hover. Requires two inner text elements: .is--footer (default label) and .is--hover (duplicated label that slides in).
.team_card
Team member card with a character-by-character info reveal on hover. The hidden info panel uses the class .team_info inside the card.
Example — Button structure
1<a class="button">
2  <div class="button_bg"></div>
3  <div class="button_text">
4    <div class="button_text_main">Label</div>
5    <div class="button_text_hover">Label</div>
6  </div>
7</a>

Frequently asked questions about working with us.

What does a typical project look like?

We start with a discovery call to understand your goals, then move into strategy, design, and development. Most projects include brand direction, UI/UX design, motion, and production-ready code — delivered in focused sprints with regular check-ins.

How long does a project take?

Timelines depend on scope. A single-page site can ship in 2–3 weeks, while a full multi-page project typically takes 4–8 weeks. We set clear milestones upfront so you always know where things stand.

What's included in the subscription plan?

The subscription gives you unlimited design and development requests, handled one at a time in priority order. You get async updates, bi-weekly strategy syncs, and the flexibility to adjust priorities as your product evolves.

Can I pause or cancel anytime?

Yes. The subscription plan is fully flexible — pause when you don't have work queued up, and resume when you're ready. No long-term contracts, no cancellation fees. You're in control.