instruction

instruction

Guide

Explore the complete set of design principles, brand elements, and visual standardsthat ensure consistency across all platforms and touchpoints.

1. Webflow

If you're new to Webflow, take a look at this Webflow 101 Crash Course to understand the basics and essentials.

2. Customization

To make color, fonts and style modifications easier and quicker, this Template utilizes Webflow variables feature.

3. Style Guide

This template utilizes components and variables feature in Webflow - this means the style and feel of this template can be changed easily, with just a few clicks.

4. SVG

Icons in this template are custom made, SVG code embedded elements. If you want to change their size, select one of them and simply change the Height Width Icons in this template are custom made, SVG code embedded elements.

5. SMOOTH SCROLL (LENIS)

This template uses Lenis smooth scrolling with GSAP ScrollTrigger for a smoother page scrolling experience. No setup is required — it works automatically after publishing.
  • This template uses Lenis smooth scrolling with GSAP ScrollTrigger.
  • It works automatically after publishing. No setup required.
  • To change scroll speed, go to Project Settings → Custom Code → Before </body>.
  • Find lerp: 0.08 and adjust the value (lower = smoother, higher = faster).
  • To disable smooth scroll, remove the Lenis script from the Before </body> custom code.
  • GSAP is only used for scrolling behavior. No GSAP knowledge is required to edit the template.
<script>
  window.addEventListener("load", function () {
    const counters = document.querySelectorAll("[data-count]");

    const observer = new IntersectionObserver((entries, observer) => {
      entries.forEach(entry => {
        if (!entry.isIntersecting) return;

        const el = entry.target;

        // Remove the thousand separator dots, then convert to a number.
        const target = parseInt(el.getAttribute("data-count").replace(/\./g, ""), 10);

        const duration = 3000; // in ms
        const frameRate = 60;
        const totalFrames = Math.round(duration / (1000 / frameRate));
        let frame = 0;

        const count = () => {
          frame++;
          const progress = frame / totalFrames;
          const current = Math.round(target * progress);

          // Format the number with thousand separators
          el.innerText = current.toLocaleString("id-ID");

          if (frame < totalFrames) {
            requestAnimationFrame(count);
          } else {
            el.innerText = target.toLocaleString("id-ID");
          }
        };

        requestAnimationFrame(count);
        observer.unobserve(el);
      });
    }, { threshold: 0.6 });

    counters.forEach(el => observer.observe(el));
  });
</script>

6. Still Confused?

If you still have any confusion or need clarification on anything, feel free to reach out to us directly. You can contact us via email at support@codexzel.com. We’re happy to help!
Get STARTED

Let’s protect your home

with expert roofing.

CTA Image