Template

Instructions. Edit Basalt with confidence.

Where everything lives in the Webflow Designer, how the motion is wired, and what to change when you make the template your own.

Pages
15 included
GSAP blocks
G1 to G24
CMS collections
3

Getting started

Basalt ships with 15 pages: Home, Product, Integrations, Pricing, About, Careers, Blog, Blog Post (CMS template), Contact, Style Guide, Instructions, Licenses, Changelog, 404 and Password.

Classes follow Client-First naming. Global classes such as button, card, tag, heading-style-h2 and padding-section-medium are styled once and reused on every page. Colors, fonts and layout sizes are Webflow Variables, so open the Variables panel first when you rebrand.

The Style Guide page shows every global class in one place. Edit a class there and the change carries across the site.

Fonts

Go to Site settings → Fonts → Google Fonts and add:

  • Fraunces, weights 300 to 500, for headings
  • Inter Tight, weights 400 to 700, for body copy
  • Martian Mono, for labels, buttons and tags

Fraunces needs its variable axes fixed so the headings stay crisp and upright. Select each heading class (heading-style-h1 to h3, text-statement) and add the custom property in the Style panel. Weight 360 and -0.02em tracking are already set on the classes.

font-variation-settings: "opsz" 72, "SOFT" 0, "WONK" 0;

Martian Mono is set slightly condensed. On text-style-mono, button, tag and form_label add:

font-stretch: 87.5%;

How to Edit GSAP Animations

Where the code lives

All motion runs from one script in Site settings → Custom code → Footer code. GSAP and its ScrollTrigger and SplitText plugins are loaded by Webflow's built-in GSAP integration (Site settings → GSAP: GSAP on, ScrollTrigger and SplitText ticked), so the template has no GSAP script tags of its own. Every block looks for its own data-animate elements, so one script serves every page and does nothing where its attribute is missing. If a plugin is switched off, the page stays static instead of breaking.

<!-- Site settings → GSAP: GSAP on, ScrollTrigger and SplitText ticked.
     Webflow adds them to every page; no GSAP script tags are needed. -->
<script>
  /* Basalt animations, blocks G1–G25 */
  function basaltInit(){ ... }
</script>

Webflow reserves data-ix for its own interactions, so Basalt uses data-animate. Add or edit it in the element's Settings panel under Custom attributes.

Animation blocks

BlockWhat it doesdata-animatePages
G1Intro timeline that G2 and G3 play on. No preloader.noneAll
G2Hero H1 lines rise from a mask, hero children fade up, navbar drops in.hero split-hero fadeAll
G3Basalt columns breathe and rise under the cursor. Wanders on its own on touch screens.hero + .hero_columns [data-hex]Home
G4Live latency and events/s numbers, scroll hint line.live-latency live-events scroll-hintHome
G5Logo strip scrolls in an endless loop.marqueeHome, any logo strip
G6Section headings reveal line by line from a mask.splitAll
G7Statement words brighten as you scroll through them.split-scrubHome, any statement
G8Children rise in sequence, single blocks rise into view.stagger reveal windowAll
G9Product window: event stream, latency chart and card micro-motion.stream chart-line cap-dot cap-hand cap-fill cap-pulse cap-rowsHome
G10Scroll position switches the product window panes. Panes cycle every 4 s on mobile.step window-pane window-tab windowHome
G11Numbers count up from 40% when they enter. data-decimals sets the decimals.countHome, any metric
G12Testimonial Tabs autoplay with a progress line under each tab.testimonials testimonial-progressHome
G13Footer wordmark rises into view.footer-logoAll
G14Capability cards scroll sideways on a sticky panel, with a progress bar. Desktop only.horizontal horizontal-track horizontal-clip horizontal-progressHome
G15Navbar hides on scroll down, returns on scroll up, darkens after 40px.navbarAll
G16Magnetic buttons and the logo line lift on hover. Mouse and trackpad only.magnetic logo logo-lineAll
G17CTA honeycomb: seams glow around the cursor, cells ignite and cool, a wave runs on entry and on submit.cta cta-clip cta-glow cta-cell formMarketing pages with the CTA
G18Inner pages: list rows rise in turn, card grids rise with a slight scale, media drifts against the scroll.rows cards parallaxInner pages
G19Endless horizontal drift for repeating art, such as the Home 2 rock-layer lines. data-speed sets seconds per loop (default 40); data-direction="right" reverses it.driftHome 2
G20Minimal loops inside illustrations. Add data-motion to an <svg> with any of: flow (dashed connectors stream), stack (log rows land), model (lines type in, a row scans the table), serve (hub breathes), dots (regions blink), schema (fields write in), bars (histogram breathes, flagged bar flashes), hexgrid (cells warm and cool), rings (orbits pulse), sensor (readings flicker). rail-spark sends a light along a line.data-motion rail-sparkHome 2
G21Terminal typing. Each direct child of the container is one line; command lines type character by character, lines with data-type="out" appear at once. Loops after data-hold seconds (default 3) and only plays while on screen.typeHome 3
G22Row hover. On a link row with data-hover="row", the child whose class contains "arrow" nudges up-right and turns white. The row's own hover state handles the background and left line. Fine pointers only.data-hover="row"Home 3, Home 4
G23Thumbnail scroll. On a card with data-hover="thumb", the tall screenshot marked data-thumb scrolls from top to bottom while hovered and eases back on leave. Fine pointers only.data-hover="thumb" data-thumbOverview
G24Signal terrain (Home 5 hero). Stacked ridge lines breathe, the cursor raises a bright peak and the probe tag names the live source under it. Without a pointer the peak wanders on its own; reduced motion shows one still frame.data-animate="terrain" data-row data-probe
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.

Settings

Timings sit in one SETTINGS object at the top of the script. Change a value and publish.

KeyDefaultWhat it changes
revealEase'expo.out'Easing for heading, section, row and card reveals
revealDuration1.1Seconds for section heading line reveals (G6)
staggerEach0.06Seconds between children in hero fades, stagger groups and card grids
columnLift90How high hero columns rise under the cursor, in px (G3)
columnRadius170Cursor influence radius on the hero columns, in px (G3)
marqueeSpeed32Seconds per logo marquee loop (G5). Higher is slower.
testimonialDelay7Seconds each testimonial shows before the next tab (G12)
navHideAfter400Pixels scrolled before the navbar hides on scroll down (G15)

Turning animations off

  • One element: select it, open Settings → Custom attributes and delete its data-animate attribute. The element stays visible and still.
  • One block site-wide: delete or comment out that block (for example everything under /* G5 LOGO MARQUEE */) in the footer script.
  • Everything: remove the Basalt script from the footer code. Remove the three GSAP scripts as well if nothing else uses them. The layout does not depend on JavaScript.

Reduced motion and scrolling

The script uses gsap.matchMedia(). When a visitor has prefers-reduced-motion turned on, reveals, splits, counters, the marquee, the product window loops, parallax, magnetic buttons and the CTA glow do not run, and content shows in its final state. The hero columns stand still without breathing or the intro rise, and testimonials stop autoplaying.

Basalt never pins sections or replaces the browser's scrolling. Native scrolling stays intact, and the sticky product window and capabilities panel use CSS position: sticky set in the Style panel.

Interactions (IX3)

  • Navbar menu: an IX3 click interaction on navbar_menu-button toggles is-open on navbar. CSS slides the menu down and turns the two lines into a cross below 991px.
  • This is some text inside of a div block.
  • FAQ accordion: an IX3 click interaction on faq_trigger toggles is-open on its parent faq_item. CSS animates the height and the plus icon.
  • Pricing toggle, code samples and testimonials use the native Webflow Tabs element. Edit tab content in the Navigator, and keep the testimonial tab links in the same order as their panes.

Line system

  • Rails: one page-rails div sits inside page-wrapper and draws the two vertical lines at the container edges.
  • Section lines: add the section-line combo class to a section for a top border with ┌ and ┐ marks where it meets the rails. The marks are the ::before and ::after pseudo-elements.
  • Corner frames: add corner-frame to a card or box for four bracket marks. Set the --c custom property on the element to change their color.
  • Contained backgrounds: put full-bleed art inside a rail-clip div so it stops at the rails.
/* Custom property on a card to recolor its corner marks */
--c: var(--status--live);

Hero columns & CTA honeycomb

The basalt columns on the home hero and the honeycomb behind the CTA are inline SVG in Embed elements, each under Webflow's 50,000 character limit. G3 animates the columns and G17 animates the honeycomb.

  • Make them lighter or darker: change opacity on hero_bg (default 0.75) or cta_clip-bg (default 0.7).
  • Remove them: delete the Embed inside hero_bg or cta_clip-bg. The script skips any block whose elements are missing.
  • Calm the motion: lower columnLift in SETTINGS for smaller columns, or delete the G17 block for a static honeycomb.

CMS

Three collections drive the dynamic pages. Every card on Blog, Careers and Integrations is a Collection List bound to them, so new items appear without design work.

  • Blog Posts: name, slug, category, excerpt, cover image, author, publish date, read time, featured switch and rich text body. The Blog Post page is the collection template.
  • Careers Roles: role name, slug, department (Engineering, Product & Design, Go-to-market), team, location, type, summary and description. Roles list on the Careers page in one Collection List per department, each filtered by that field.
  • Integrations: name, slug, category, short description, icon and status. Cards fill the Integrations grid and can be filtered by category.

To add an item, open the CMS panel, pick the collection and select New item.

Inline SVG

The logo mark, icons and illustrations are inline SVG inside Embed elements. They inherit color from the text color, so a change to the parent's color restyles them. To swap one, double-click the Embed and paste your own SVG code. Keep fill="currentColor" or stroke="currentColor" to keep the theme colors.

<svg class="logo_mark" viewBox="0 0 24 24" fill="none" aria-hidden="true">
  <path d="M1.75 12 6.6 3.5h10.8l4.85 8.5-4.85 8.5H6.6z" stroke="currentColor" stroke-width="1.5"/>
  <path data-animate="logo-line" d="M2.8 13.8H21.2" stroke="currentColor" stroke-width="1.5"/>
</svg>