Rovyn uses a BEM-inspired naming system combined with Webflow modifier and utility classes. The goal is to keep classes predictable, easy to scan, and safe to reuse as the template grows.
The system is built around four class types: blocks, elements, modifiers, and utilities.
A block is a standalone section or component. Block names describe what the component is, not how it looks.
Elements belong to a block and use a double underscore: block__element.
Modifiers are Webflow combo classes that adjust the state, variation, or layout behavior of an existing class. They use the is- prefix and should be added after a base class rather than used on their own.
Utilities are global helper classes and use the u-- prefix. They control reusable system-level behavior such as container width, grid structure, spacing, surfaces, and typography.
The Home Hero starts with the block class home-hero. Inside that block, related elements use the same namespace, such as home-hero__container and home-hero__grid.
Global behavior is then added with utility classes. For example, the container can use u--container-xxl, while the grid can use u--grid-12 and u--text-inverse.
This keeps the semantic class responsible for the component and the utility classes responsible for reusable layout or visual behavior.
Following these conventions keeps the project easier to understand, extend, and maintain without creating unnecessary one-off classes.
Animations in Rovyn are built with Webflow’s native GSAP-powered interactions.
You can edit or remove these animations directly in the Interactions panel without changing the site’s custom code.
Smooth scrolling is powered by Lenis and is added globally in Site Settings → Custom Code → Head Code.
Keep the following code in place to preserve the template’s current scroll behavior. It also synchronizes Lenis with ScrollTrigger when GSAP is available and respects reduced-motion preferences.
<!-- Lenis CSS -->
<link
rel="stylesheet"
href="https://unpkg.com/lenis@1.3.26/dist/lenis.css"
/>
<!-- Lenis JS -->
<script src="https://unpkg.com/lenis@1.3.26/dist/lenis.min.js"></script>
<script>
window.Webflow = window.Webflow || [];
Webflow.push(() => {
const lenis = new Lenis({
duration: 1.2,
easing: (t) => 1 - Math.pow(1 - t, 4),
smoothWheel: true,
wheelMultiplier: 0.9,
// Keep touch scrolling largely native
syncTouch: false,
touchMultiplier: 1,
// Continue supporting anchor links
anchors: true,
// Stop scroll inertia during internal navigation
stopInertiaOnNavigate: true,
// Respect reduced-motion preferences
respectReducedMotion: true,
// Control requestAnimationFrame manually
autoRaf: false,
// Exclude elements with this attribute from smooth scrolling
prevent: (node) =>
node instanceof HTMLElement &&
node.hasAttribute("data-lenis-prevent")
});
// Make Lenis available to other interactions
window.lenis = lenis;
// Keep ScrollTrigger in sync when available
lenis.on("scroll", () => {
if (typeof ScrollTrigger !== "undefined") {
ScrollTrigger.update();
}
});
// Use the GSAP ticker when GSAP is available
if (typeof gsap !== "undefined") {
gsap.ticker.add((time) => {
lenis.raf(time * 1000);
});
} else {
const raf = (time) => {
lenis.raf(time);
requestAnimationFrame(raf);
};
requestAnimationFrame(raf);
}
});
</script>If you prefer native browser scrolling, Lenis can be removed without affecting the layout or the GSAP animations.
After removal, the site will use the browser’s native scrolling behavior. Existing Webflow and GSAP animations can remain in place.
Rovyn uses a responsive, token-based typography system. Font families, sizes, line heights, letter spacing, and weights are controlled through Webflow Variables so global adjustments stay consistent across the template.
Rovyn uses two variable font families with clearly separated roles.
Typography is applied through global text utility classes so semantic HTML and visual scale can be controlled independently.
Font sizes scale responsively with clamp(). Line height and letter spacing are tuned per style to preserve hierarchy and readability across breakpoints.
To make global typography changes, update the linked variables rather than styling individual elements.
The typography system separates content typography from interface typography while keeping both responsive and consistent.
Rovyn uses a variable-based color system built around three foundational Base Colors: Base Light, Base Dark, and Base Accent. Most semantic colors reference these values directly or through color-mix(), making global palette changes easier without editing individual elements.
The color system separates foundational brand values from semantic colors used throughout the interface.
For a brand-wide color change, start with the three Base Colors before adjusting individual semantic tokens.
Keep the system token-driven and make changes at the highest useful level instead of introducing one-off color values.
Rovyn uses inline SVG icons for interface elements that need to remain sharp, lightweight, and easy to style. The icon set is based primarily on Lucide icons and is inserted through Webflow Embed elements.
The SVG markup is kept intentionally simple so the surrounding Webflow class controls the icon’s size and color.
In most cases you should style the Webflow wrapper rather than changing presentation values inside the SVG itself.
To replace an existing inline icon, keep the surrounding Webflow element and replace only the SVG markup inside its Embed element.
Icon presentation is controlled primarily through the Webflow class applied to the icon or its wrapper.
Rovyn also contains a small number of non-SVG interface symbols built directly with Webflow elements, such as the plus icon. Those should be edited through their existing Webflow classes rather than replaced with SVG markup unless you intentionally want to change the component.