This is the design system that powers every site built with this Webflow template. It's built on a 4-point spacing scale — so padding, gaps, grids, and sizing all use values like 4, 8, 16, 32px, and so on. The goal is to keep things simple, flexible, and easy to maintain.
Every utility class starts with u- and uses dashes. Custom classes use an underscore _ to separate the block from the element. For a full breakdown of naming rules, see the Class Naming section below.
Quick Start — the classes you'll use on 90% of pages:
u-section-80 — Standard section with 80px vertical padding.
u-content-constraint — Centers content at a max-width of 1400px or your prefered value.
u-grid-gap-24 — Vertical content stack with 24px spacing between elements.
u-heading-32 — Section heading at 32px.
u-copy-18 — Standard body text at 18px.
u-flex-gap-16 — Flex layout with 16px gap between items.
u-padding-top-0 / u-padding-bottom-0 — Remove top or bottom section padding.
u-text-center-tablet — Center text from tablet and below.
u-hide-mobile — Hide an element on mobile screens.
Start with these, then explore the full system below as needed.
Class naming
Utility classes Utility classes are classes always starts with a u and are written with just dashes, not underscore. u-content-constraint , u-heading-32 , u-section-64
Custom classes Custom classes can be whatever you like. I often use the name of the element, followed by an underscore. testimonial_wrappertestimonial_portrait-image
These are written with lower case, dashes and underscore. You can create a custom class and then add a utility class on top of that to bring in the styles from the utility class but still have the freedom to change the combination without affecting the utility class. testimonial_titleHeading 24 A class should include only the block and the immediate element. For example, if a block .photo contains a caption element which in turn contains a quote element, you should name them .photo_caption and .photo_quote – not .photo_caption_quote. All elements are still tied to the base block name (photo in this case), regardless of nesting level.
This keeps class names from becoming overly verbose and brittle. In short, use a single _ for the element portion and don’t extend it further; if an element itself has sub-parts, consider making that sub-part its own block or just use another element name on the base block. Example .table → .table_content → .table_header-row → .table_row → .table-cell → .table-text
Combo classes I try to follow the Lumos system where it makes sense. You write a custom class first and add a utility class after. The benefit of this is that you can just rename the utility class used as a combo class and all elements whith that combinationa will then change.
So lets say you have hero_titleu-heading-64 as a combination. If you later need to change all hero titles size you can just rename the u-heading-64 to for example u-heading-48 Same goes to sections. If you want your section_primaryu-section-80 to change to 64px instead, just rename it to u-section-64.
For custom classes I use cc-[custom-text] Example: I want a card_default to have 80px top padding: card_defaultcc-top-padding-80 Just like a custom class, you can put whatever makes sense to you after the cc-
Modifiers for Variants and States Define modifier classes (using the -- syntax) for any alternate styles or states that a component might have. For example, .cta--large for a bigger button, .card--highlighted for a highlighted version of a card, or state classes like .is-open, .is-active for interactive states. This helps with scalability because as your design grows, you can handle new variants without altering the base class names. It also plays well with JavaScript – e.g., your script can toggle an .is-active class on a modal to show/hide it.
_
block → Element
form_input
--
Modifier
form_input--invalid
-
Word separator
form_submit-button
is-
State
form_submit-buttonis-active
Variable naming
I use as clear naming as possible. For spacing I the actual px value as name. 24px is named 24. This makes it easy to understand what value to pick and also see in the side panel what value you have chosen. I also don't seperate margin and padding. But Gap is in its own group.
Display
Purpose
Display classes create large, impactful text for hero sections and major page headers. Use them when you need maximum visual presence.
How they work
Each class sets a font size and line height. Sizes 96px and 80px include -1px letter spacing for tighter large text. The number in the class name represents the font size in pixels.
Example Usage
Use u-display-96 for a large hero headline, u-display-64 for a prominent section statement, or u-display-56 for a sub-hero title.
96px
Display 96
At solmen va esser necessi
80px
Display 80
At solmen va esser necessi
72px
Display 72
At solmen va esser necessi
64px
Display 64
At solmen va esser necessi
56px
Display 56
At solmen va esser necessi
Heading
Purpose
Heading classes define structured text styles for sections and content hierarchy. Use them for titles, section headers, and any text that organizes content into clear levels.
How they work
Each heading class sets a specific font size, line height, and font weight (600). Sizes 64px and above include -0.5px letter spacing for tighter large text. The number in the class name represents the font size in pixels.
Example Usage
Use u-heading-42 for a section title, u-heading-28 for a card heading, or u-heading-18 for a small label-like heading. Combine with a custom class for targeted overrides: hero_title + u-heading-64.
64px
Heading 64
At solmen va esser necessi
48px
Heading 48
At solmen va esser necessi
40px
Heading 40
At solmen va esser necessi
32px
Heading 32
At solmen va esser necessi
28px
Heading 28
At solmen va esser necessi
24px
Heading 24
At solmen va esser necessi
20px
Heading 20
At solmen va esser necessi
18px
Heading 18
At solmen va esser necessi
Copy
Purpose
Copy classes control body text styling for paragraphs and general content. They ensure readable, consistent typography across all long-form and short-form text.
How they work
Each class applies a font size and an optimized line height for readability. Larger sizes (32–24px) use tighter line heights (1.2–1.25) suited for intro paragraphs, while smaller sizes (16–10px) use more generous line heights (1.55–1.6) for dense body text. The number represents the font size in pixels.
Example Usage
Use u-copy-18 for standard body paragraphs, u-copy-24 for featured intro text, or u-copy-14 for smaller supporting content like captions or disclaimers.
24px
Copy 24
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
20px
Copy 20
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
18px
Copy 18
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
16px
Copy 16
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
14px
Copy 14
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
12px
Copy 12
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
Label
Purpose
Label classes provide small, functional text styles for UI elements like form labels, captions, tags, and metadata. They are designed to be compact and legible at smaller sizes.
How they work
Each class sets a font size and a medium font weight (500) with tight line heights. Labels are not meant for long text — they work best for short, functional strings that describe or categorize other content.
Example Usage
Use u-label-16 for form field labels, u-label-14 for tag text, or u-label-12 for small metadata like dates or author names.
24px
Label 24
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
20px
Label 20
At solmen va esser necessi
18px
Label 18
At solmen va esser necessi
16px
Label 16
At solmen va esser necessi
14px
Label 14
At solmen va esser necessi
12px
Label 12
At solmen va esser necessi
Eyebrow
Purpose
Eyebrow classes create uppercase accent text that typically sits above headings to provide context, categorization, or a label for the section below.
How they work
Each class applies text-transform: uppercase, a letter-spacing of 1px (0.5px for 12px and 10px), and font-weight: 600. The uppercase styling and spacing create a distinct visual treatment that separates eyebrow text from headings and body copy.
Example Usage
Use u-eyebrow-16 above a section heading to label a content category like "CASE STUDY" or "FEATURES". Pair it with a heading class below for a clear content hierarchy.
28px
Eyebrow 28
At solmen va esser necessi
24px
Eyebrow 24
At solmen va esser necessi
21px
Eyebrow 21
At solmen va esser necessi
18px
Eyebrow 18
At solmen va esser necessi
16px
Eyebrow 16
At solmen va esser necessi
14px
Eyebrow 14
At solmen va esser necessi
12px
Eyebrow 12
At solmen va esser necessi
10px
Eyebrow 10
At solmen va esser necessi
Font Weight
Purpose
These utility classes control the font weight of text elements, allowing you to adjust visual emphasis and hierarchy without modifying the base typography classes.
How they work
Each class applies a specific font-weight value:
u-font-weight-light — 300
u-font-weight-normal — 400
u-font-weight-medium — 500
u-font-weight-semibold — 600
u-font-weight-bold — 700
u-font-weight-extrabold — 800
Example Usage
Use u-font-weight-bold on a copy class to add emphasis, or u-font-weight-light on a display class for a lighter aesthetic. These are great as combo classes on top of typography classes.
FW Light
FW Normal
FW Medium
FW Semibold
FW Bold
FW Extra Bold
Uppercase
Purpose
A utility class that transforms text to uppercase without the additional styling applied by eyebrow classes (no letter-spacing or font-weight changes).
How they work
The class applies text-transform: uppercase only. Unlike the eyebrow classes which include letter-spacing and font-weight, this is a pure text-transform utility that can be combined with any typography class.
Example Usage
Use u--uppercase on a label or heading when you want uppercase text but don't want the eyebrow styling. Combine with any typography class like u-copy-14 + u--uppercase for an uppercase caption.
Rich text block styling
Purpose
The u-rtb-primary class provides comprehensive styling for Webflow Rich Text elements. It ensures that CMS-driven content — including headings, paragraphs, lists, blockquotes, images, and figures — renders with consistent typography and spacing without manual styling.
How they work
Apply u-rtb-primary to a Rich Text element and all nested HTML elements are automatically styled. Headings (h1–h6) receive appropriate sizes and margins, paragraphs get comfortable line heights, lists are properly indented, blockquotes are styled center-aligned without the default left border, and images/figures receive consistent vertical spacing.
Example Usage
Use u-rtb-primary on any Rich Text element connected to a CMS collection. This is the primary style for blog posts, case studies, or any page driven by a rich text field.
What’s a Rich Text element?
The rich text element allows you to create and format headings, paragraphs, blockquotes, images, and video all in one place instead of having to add and format them individually. Just double-click and easily create content.
The rich text element allows you to create and format headings, paragraphs, blockquotes, images, and video all in one place instead of having to add and format them individually. Just double-click and easily create content.
Static and dynamic content editing
A rich text element can be used with static or dynamic content. For static content, just drop it into any page and begin editing. For dynamic content, add a rich text field to any collection and then connect a rich text element to that field in the settings panel. Voila!
Static and dynamic content editing Static and dynamic content editingStatic and dynamic content editing
just drop it into any page and begin editing.
just drop it into any page and begin editing.just drop it into any page and begin editing.
just drop it into any page and begin editing.
just drop it into any page and begin editing.
just drop it into any page and begin editing.just drop it into any page and begin editing.
just drop it into any page and begin editing.
How to customize formatting for each rich text
Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.
Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.
Static and dynamic content editing
Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.
Static and dynamic content editing
Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.
caption
Headings, paragraphs, blockquotes, figures, images, and figure captions can all be styled after a class is added to the rich text element using the "When inside of" nested selector system.
Alignments
Purpose
These classes control text alignment and flexbox alignment at different breakpoints, allowing you to adjust layout and content positioning responsively.
How they work
Each alignment class targets a specific breakpoint:
Desktop — Applies alignment on desktop only.
Tablet — Applies alignment from tablet and below.
Landscape — Applies alignment from landscape and below.
Mobile — Applies alignment on mobile portrait only.
Available alignment types:
Text center — Centers text horizontally within its container.
Flex vertical center — Centers content vertically using flexbox with flex-direction: column.
Align right — Aligns content to the right using text-align: right.
Class Reference
Text center: u-text-centeru-text-center-tabletu-text-center-landscapeu-text-center-mobile
Use u-text-center-tablet to center a heading on tablet and smaller screens while keeping it left-aligned on desktop. Use u-flex-vertical-center-desktop to vertically center content in a two-column layout on larger screens.
Text center
Text center Tablet
Text center landscape
Text center mobile
Align Center Vertical Desktop
Align Center Vertical Tablet
Align Center Vertical Landscape
Align Center Vertical Mobile
Align Right Desktop
Align Right Tablet
Align Right Landscape
Align Right Mobile
Themes
Purpose
Themes control the color palette of a section. Apply a theme class like u-theme-dark to a parent element, and all components inside automatically use the right colors.
How they work
Depending on the type of elements the project contains, the theme will change the colors of all of them. In the variable panel the different variables are connected to each element type being surface, text color, button color etc.
This is some text inside of a div block.
u-theme-dark
Background colors
Purpose
These utility classes apply background colors and matching text colors to elements. They provide a quick way to set the visual tone of a section or component.
How they work
Each class sets a background-color and adjusts the text color for proper contrast:
u-background-black — Black background with white text.
u-background-white — White background with black text.
Use u-icon-24 for standard inline icons, u-icon-16 for compact UI elements, or u-icon-48 for featured icons in cards or hero sections.
Buttons
Purpose
Button classes provide consistent, reusable button styles across the site. They ensure uniform sizing, spacing, and visual treatment for all interactive call-to-action elements.
How they work
The system includes multiple button patterns:
u-button — A link block-based button for flexible content inside.
u-cta — A standard CTA button with centered text, a minimum width of 180px, and a height of 50px.
button_wrapper / button_sizer / button_clicable — An accessible button component that supports variants through Webflow's component system. The button_clicable element is absolutely positioned over the visible button for click handling, and supports data-modal-target for triggering modals and aria-label for screen reader accessibility.
Example Usage
Use u-cta for simple text-based call-to-action buttons. Use the button_wrapper component when you need variant support (e.g. primary vs. outline styles) or accessible modal triggers.
u-button-gap-right — Buttons aligned to the right.
Example Usage
Wrap two buttons in u-button-gap-center to create a centered button group, or use u-button-gap-left for a left-aligned pair of primary and secondary CTAs.
Navbar
Purpose
The navbar component provides a responsive, sticky navigation bar with dropdown support. It serves as the primary site navigation used across all pages.
How they work
The navbar uses sticky positioning (position: sticky; top: 0) and is 80px tall on desktop, shrinking to 60px on tablet. Content is constrained to 1400px max-width and centered. The nav menu uses flex layout on desktop and collapses via Webflow's native interaction on tablet and below.
Key classes:
navbar — Main wrapper with sticky positioning and horizontal padding.
nav_dropdown / dropdown-toggle / dropdown-list — Dropdown menu structure.
nav_menu-button — Mobile menu hamburger button.
Sections
Purpose:
These classes are used to apply consistent padding to sections across the site. They help maintain a clear and predictable vertical rhythm between content blocks.
How they work:
The left and right padding stays the same across all section classes to keep content aligned horizontally. Using design token--_sections---padding-horizontal-global. this makes it easy to change the global padding of all pages. Default is 64px on desktop, 32px on tablet and 24px on phone. Padding top and bottom values are controlled by design tokens like --_sections---section-64--padding-vertical. and each section have an unique padding value. u-section-64 = 64px top and bottom padding.
To remove top or bottom padding individually, use u-padding-top-0 or u-padding-bottom-0 as a combo class. For other overrides, use a custom combo class like cc-[custom].
Content Constraint
Purpose:
These classes define maximum widths for content containers to maintain a consistent layout and readable line lengths across different screen sizes.
How they work:
Each class sets a max-width using a CSS variable (e.g. --_constraints---1600) and ensures the element takes up the full width of its container up to that maximum.
Example Usage:
Use u-constraint-1200 to restrict content width to 1200px (or equivalent rem), while still being fluid inside smaller viewports.
Use u-constraint-[value] to apply a specific max width. Use u-constraint-ce-[value] if you want to center it horizontally. Use u-content-constraint for the most common constraint value used across all elements like navigation and footer and page content.
Grid gap
Purpose:
These classes control the spacing (gaps) between elements in a vertical content stack. They're used to create consistent rhythm and whitespace across your design.ses define maximum widths for content containers to maintain a consistent layout and readable line lengths across different screen sizes.
How they work:
Each class uses a CSS variable (e.g. --_sizes---64) to apply grid-column-gap and grid-row-gap in a grid layout.They are set to display: grid with a single column, so spacing is handled automatically between items.This also gives you the ability to align and justify individual content without affecting other content with the same class name making it a very flexible system.
Example Usage:
Use u-grid-gap-64 to apply 64px (or rem equivalent) spacing between stacked elements. It keeps the vertical rhythm consistent without needing manual margins.
Flex gap
Purpose:
These utility classes provide consistent spacing between flex items using CSS gap property. They eliminate the need for margins on individual flex items and create uniform spacing automatically, making flex layouts cleaner and more predictable.
How they work:
Each class applies both column-gap and row-gap using predefined CSS variables (e.g. --_sizes---16 for 16px spacing) and sets display: flex. The gap property handles spacing between items regardless of flex direction, wrapping, or alignment.
The gap values correspond to your spacing scale: 8px, 12px, 16px, 24px, 32px, 48px, 64px, 80px, and 96px. Gap applies to both horizontal and vertical spacing, so it works whether your flex items wrap to new lines or stay in a single row/column.
Best Practices: Use flex gap instead of margins on flex items for consistent spacing. Particularly useful for button groups, navigation menus, card grids, and any flex layout where uniform spacing is needed between all items.
Class reference:
u-flex-gap-8u-flex-gap-12 ... u-flex-gap-128
Column grid
Purpose:
These classes create predefined column layouts with consistent spacing between items. They’re used to quickly structure content into 1, 2, 3, or more columns without writing custom grid styles each time.
How they work:
Each class sets up a CSS grid with a specific number of columns (e.g. 2 columns for ._2-column-grid---32) and a defined gap using a CSS variable (like --_sizes---32 for 32px spacing).
Example usage:
u-1-column-grid creates a single-column grid layout with no gap. u-2-column-grid-24 sets two equal-width columns with 24px spacing. u-3-column-grid-64 sets up three columns with wider spacing for more visual breathing room.
Display Contents
Purpose
The u-display-contents class removes an element from the visual layout while preserving its children, making them behave as if they were direct children of the grandparent element.
How they work
The class applies display: contents, which effectively makes the element "invisible" to the layout engine. The element itself generates no box, but its children still render and participate in the parent's layout context. It also inherits align-items, justify-content, and text-align from its parent.
Example Usage
Use u-display-contents on a wrapper element when you need the wrapper for structural or CMS reasons but don't want it to affect the layout. This is especially useful in Webflow components where a slot wrapper needs to be transparent to the parent's flex or grid layout — the children behave as direct children of the grandparent.
Image wrap
Purpose:
These classes are used to wrap images in a fixed aspect ratio container, helping you maintain consistent image proportions across different layouts and screen sizes.
How they work:
Each u-image-wrap-[ratio] class (like u-image-wrap-16:9 or u-image-wrap-4:5) creates a box that preserves a specific aspect ratio using padding-top and position: relative. The image inside is absolutely positioned to fill the container, using the class u-image-absolute. This ensures the image will always scale proportionally, which is especially useful for cards, galleries, or hero sections.
Aspect ratio
Purpose:
These utility classes apply fixed aspect ratios directly to images using the modern CSS aspect-ratio property. Unlike image wrap containers, these classes work directly on <img> elements to maintain consistent proportions while ensuring proper cropping and scaling.
How they work:
Each class sets a specific aspect-ratio value (e.g. aspect-ratio: 16 / 9) along with object-fit: cover and width: 100%. The image automatically scales to fill its container while maintaining the specified ratio, cropping excess content as needed to preserve proportions.
Class Reference:
u-aspect-ratio-1:1u-aspect-ratio-5:4
Best Practices:
Use these classes when you need images to conform to specific ratios without requiring wrapper containers. Ideal for galleries, card components, and content grids where consistent image proportions are essential. The object-fit: cover ensures images fill the entire space while maintaining their aspect ratio, though some cropping may occur.
Positioning
Purpose
Positioning classes control how elements are placed in the document flow and how they stack relative to each other. Use them for layering content, creating overlays, and managing z-index stacking without custom classes.
How they work
Relative positioning keeps the element in normal document flow while enabling z-index control:
u-relative — position: relative only.
u-relative-z2 — position: relative; z-index: 2.
u-relative-z4 — position: relative; z-index: 4.
u-relative-z8 — position: relative; z-index: 8.
Absolute positioning removes the element from document flow and stretches it to fill its positioned parent:
u-position-absolute — Sets position: absolute, inset: 0%, width: 100%, and height: 100%. Use for overlays, background layers, or any element that needs to fill its positioned parent completely.
Note:u-position-absolute is distinct from u-image-absolute. The image variant also applies object-fit: cover — use u-image-absolute specifically for images inside u-image-wrap-* containers, and u-position-absolute for general-purpose overlays and coverage.
Example Usage
Use u-relative on a card wrapper to establish a positioning context for an absolutely positioned overlay inside. Add u-relative-z2 to ensure a section sits above an adjacent section with overlapping negative margins. Use u-position-absolute on a color overlay div inside a hero section to create a tinted background layer.
Radius
Purpose:
These utility classes apply consistent border-radius values to elements, giving corners a softer or more defined look depending on the visual style you’re aiming for.
Class Reference:
u-radius-4u-radius-oh-16
How they work:
Each class uses a predefined CSS variable (e.g. --_sizes---8) to apply a specific border-radius. Classes ending in -oh also apply overflow: hidden and position: relative, which is useful when you need to clip internal content (like images) to the same radius.
Best Practices:
Use -oh variants when child elements (like images) need to be clipped to the corner radius.
Full width and height
Purpose
These utility classes make elements span the full width, full height, or both within their parent container. Useful for layout containers, images, overlays, and background sections.
How they work
Each class applies width and/or height at 100%. When combined with position: absolute or position: relative, they enable layering and coverage patterns often used in hero sections, modals, and image masks.
Class Reference
u-full-width — width: 100%
u-full-height — height: 100%
u-full-width-height — width: 100%; height: 100%
Example Usage
Apply u-full-width to an image or container to ensure it stretches edge to edge within its parent. Use u-full-width-height on an overlay element positioned absolutely to cover the entire parent.
Overflow clip
Purpose
These classes control how overflowing content is handled, using overflow: clip — a modern alternative to overflow: hidden. Useful for preventing scrollbars, hiding visual overflow, or managing animations and layout shifts.
How they work
Each class applies overflow: clip scoped to a specific breakpoint. Unlike overflow: hidden, clip does not create a scroll container, making it a cleaner solution for layout clipping.
Applies from breakpoint and down:
u-overflow-clip-desktop — Clips overflow on all screen sizes.
u-overflow-clip-tablet — Clips overflow from tablet and below.
u-overflow-clip-landscape — Clips overflow from landscape and below.
u-overflow-clip-mobile — Clips overflow on mobile portrait only.
Applies at breakpoint only:
u-overflow-clip-desktop-only — Clips overflow only on desktop (reverts on smaller screens).
u-overflow-clip-tablet-only — Clips overflow only on tablet (reverts on smaller and larger screens).
u-overflow-clip-landscape-only — Clips overflow only on landscape (reverts on other screens).
Example Usage
Use u-overflow-clip-desktop on a section with animated elements that might extend beyond the viewport. Use u-overflow-clip-tablet-only when clipping is only needed at the tablet breakpoint but content should overflow freely elsewhere.
Opacity
Purpose
These classes apply fixed opacity values to elements for controlling visibility, layering, and visual emphasis. Commonly used for backgrounds, text fades, hover states, or subtle visual hierarchy.
How they work
Each class sets a specific opacity value on the element. Lower values make the element more transparent, while higher values maintain visibility with soft blending effects.
Use u-opacity-50 on a background image overlay for a dimming effect, or u-opacity-20 on a line class like u-line-black-1 to create a subtle gray divider.
Hide content
Purpose
These utility classes control element visibility across different breakpoints, allowing you to show or hide content based on screen size. Essential for creating responsive designs where certain elements should only appear on specific devices.
How they work
Hide classes use display: none to make elements invisible from the specified breakpoint downward. Show classes use display: block to make elements visible only at their target breakpoint, hidden everywhere else.
Hide classes:
u-hide — Hidden at all screen sizes.
u-hide-desktop-only — Hidden on desktop, visible on tablet and below.
u-hide-tablet — Hidden on tablet and smaller.
u-hide-landscape — Hidden on landscape and smaller.
u-hide-mobile — Hidden on mobile portrait only.
Show classes:
u-show-desktop — Visible only on desktop.
u-show-tablet — Visible only on tablet.
u-show-landscape — Visible only on landscape.
u-show-mobile — Visible only on mobile portrait.
Example Usage
Use u-hide-mobile to hide a decorative element on small screens. Use u-show-tablet to display a mobile-specific navigation element only at the tablet breakpoint.
Lines
Purpose
These utility classes create horizontal divider lines for visual separation between content sections. They provide a simple, consistent way to add hierarchy and structure to layouts.
How they work
Each class creates a full-width horizontal line using height, background-color, and width: 100%. The line thickness is controlled by CSS variables, and color is set to either pure black or pure white.
Class Reference
u-line-black-1 — 1px black line.
u-line-black-1-5 — 1.5px black line.
u-line-white-1 — 1px white line.
u-line-white-1-5 — 1.5px white line.
Creating custom shades: Combine line classes with opacity utilities for different intensities. For example, u-line-black-1 + u-opacity-20 creates a light gray divider.
Example Usage
Use u-line-black-1 as a subtle content separator between sections. Use u-line-white-1-5 inside a dark-themed section for a visible divider. Pair with opacity classes for softer, more nuanced dividers.
Line breaks
Purpose
These utility classes control text wrapping at specific breakpoints, letting you force or prevent line breaks responsively. Essential for optimizing headline readability across different screen sizes.
How they work
Each class is applied to a <span> element wrapping the portion of text where you want the conditional break. The class uses display: block to force a new line at the target breakpoint, or display: inline to let the text flow naturally at other breakpoints.
Class Reference
u-linebreak-desktop — Forces line break on desktop and below.
u-linebreak-desktop-only — Forces line break only on desktop, inline on smaller screens.
u-linebreak-tablet — Forces line break on tablet and below.
u-linebreak-landscape — Forces line break on landscape and below.
u-linebreak-mobile — Forces line break on mobile portrait only.
Example Usage
Wrap a portion of a headline in a <span> with u-linebreak-desktop-only to control where the line breaks on desktop while letting the text reflow naturally on mobile. Use u-linebreak-tablet to introduce a break point that only takes effect on smaller screens.
consectetur adipiscing elit, sed do eiusmod tempor incididunt.
consectetur adipiscing elit, sed do eiusmod tempor incididunt.
consectetur adipiscing elit, sed do eiusmod tempor incididunt.
consectetur adipiscing elit, sed do eiusmod tempor incididunt.
consectetur adipiscing elit, sed do eiusmod tempor incididunt.
Margins
Purpose
These utility classes provide quick margin resets and auto-margin values for centering and layout pushing. They eliminate the need for custom classes when you just need to adjust or remove margins.
How they work
Auto margin classes set margin to auto on the specified side(s), commonly used for centering elements or pushing them to one edge of a flex/grid container.
Zero margin classes reset margins to 0, useful for overriding default browser or inherited margins.
These utility classes reset padding to zero on specific sides or all sides. They are used to override default or inherited padding without creating custom classes.
How they work
Each class sets padding to 0 on the specified side(s). Use them as combo classes on elements where you need to selectively remove padding.
Apply u-padding-bottom-0 to a section class like u-section-80 to remove only the bottom padding while keeping the top and sides intact.
Negative Section Margins
Purpose
These classes extend content beyond the section's horizontal padding, allowing elements like images or backgrounds to bleed to the edges of the viewport while the rest of the section content stays constrained.
How they work
Each class applies a negative margin equal to the section's horizontal padding variable (--_sections---negative-padding-horizontal), effectively canceling out the padding on that side:
u-negative-section-margin-left — Extends content to the left edge.
u-negative-section-margin-right — Extends content to the right edge.
The negative margin value automatically adjusts across breakpoints as the section padding changes (64px desktop → 32px tablet → 24px mobile).
Example Usage
Apply u-negative-section-margin-left to an image wrapper inside a section to make it flush with the left viewport edge while text content beside it remains padded.
Text Balance
Purpose
These classes control how text wraps within its container, improving typography and layout quality for headings and body copy.
How they work
u-text-wrap-balance — Wraps text so that each line has roughly the same number of characters, creating a more visually balanced block. Best for headings (limited to 6 lines in Chrome, 10 in Firefox).
u-text-wrap-pretty — Uses a slower algorithm that minimizes orphans and improves overall text layout. Best for body copy where good typography is more important than performance.
Example Usage
Apply u-text-wrap-balance to a section heading so the text distributes evenly across lines instead of leaving a short final line. Use u-text-wrap-pretty on a paragraph to reduce orphaned words at the end of lines.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.
Screen Readers Only
Purpose
The u-sr-only class visually hides an element while keeping it fully accessible to screen readers and assistive technology. Essential for adding descriptive text that sighted users don't need but screen reader users benefit from.
How they work
The class sets the element to 1×1px with clip: rect(0, 0, 0, 0) and position: absolute; overflow: hidden. This makes the element invisible and takes up no layout space, but screen readers can still read its content.
Example Usage
Use u-sr-only on heading elements for page structure (like a hidden <h1> for the page title), on descriptive text inside clickable card link blocks, or on labels for icon-only buttons.
Heading
Modal Component
Purpose
The modal system provides an accessible, animated overlay for displaying focused content like forms, media, or detailed information without navigating away from the current page.
How they work
Modals are triggered by any <button> with a data-modal-target attribute pointing to the modal's ID (e.g. data-modal-target="#modal-id"). The system includes:
Animated open/close transitions (fade-in wrapper, then content slides up).
Focus trapping — keyboard Tab navigation stays within the modal.
ESC key to close.
Click outside the content area to close.
Scroll locking on the body while open.
Focus returns to the trigger element on close.
Key classes:
modal-wrapper — Fixed overlay with backdrop blur and semi-transparent background.
modal-content-wrapper — Click boundary for outside-click dismissal.
modal-content-main — The visible modal panel with padding and border radius.
modal-close-btn — Close button with hover state.
Accordion
Purpose
The accordion component creates expandable/collapsible content sections — commonly used for FAQs and progressive disclosure. They allow users to reveal additional information on demand, keeping the page clean and scannable.
How they work
Each accordion item is wrapped in a clickable accordion_wrapper. The always-visible header area (accordion_top-content) contains a title and an animated plus/minus icon. The expandable body (accordion_expand-content) uses overflow: hidden and is toggled via Webflow interactions. The plus icon's vertical line rotates to form an "×" when expanded.
Key classes:
accordion_wrapper — Main wrapper, set to cursor: pointer.
accordion_top-content — Visible header area.
accordion_flex-title — Flex layout for title and icon.
accordion_title — The H3 heading element for the accordion item title.
accordion_plus-wrap / accordion_plus-icon — The animated plus/minus toggle.
accordion_plus-horizontal / accordion_plus-vertical — The two lines that form the plus/minus icon.
accordion_content — Inner content area with top padding.
Accordion Title
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.
Clicable Link
Purpose
This pattern makes entire cards or containers clickable while providing descriptive, accessible text for screen readers. It ensures interactive card layouts are both visually clean and fully accessible.
How they work
A link block is placed inside a parent element set to position: relative (using the u-relative class). The link block stretches to cover the entire card using absolute positioning. Descriptive text inside the link block is hidden using the u-sr-only class, so screen readers announce meaningful content instead of reading every piece of text and alt tag inside the card.
Example Usage
Wrap a card in a u-relative container and add a link block inside with a u-sr-only text element describing the destination (e.g. "Read case study: Project Name"). The link covers the full card, making it clickable without duplicating links on every element inside.
Copyright embed
Purpose
This embed automatically displays the current copyright year in the site footer, eliminating the need to manually update the year each January.
How they work
A small jQuery script targets the element with id="copyright-year" and replaces its text content with the current year using new Date().getFullYear(). The script runs on page load.
These CSS classes limit the visible text in an element to a set number of lines, with overflow hidden. Useful for card descriptions, previews, or any content that needs a consistent visual height.
How they work
Each class uses -webkit-line-clamp to restrict visible lines and overflow: hidden to clip the rest:
u-cliptext-3 — Shows the first 3 lines.
u-cliptext-4 — Shows the first 4 lines.
u-cliptext-5 — Shows the first 5 lines.
Example Usage
Apply u-cliptext-3 to a card description to ensure all cards in a grid have the same text height regardless of content length.