Læs mere
ECORAY DESIGN SYSTEM

Styleguide

A living overview of the classes, utilities and visual rules we want to keep. Classes shown here are intentionally in use, so Webflow’s unused-class cleanup can safely remove the rest.

01 / FOUNDATION

Typography

Semantic heading level stays separate from the visual type class.

text-display
Energi, der giver mening.
text-display-sm

Energi, der giver mening.

text-heading-lg
Heading large
text-heading-md
Heading medium
text-body-lg
Large body copy for introductions and prominent supporting text.
text-body
Default body copy for most content.
text-body-sm
Small body copy and supporting details.
text-label
LABEL / EYEBROW
text-label-group
GROUPEDLABELS
02 / THEMES

Theme utilities

u-theme-dark
Dark
Default EcoRay environment.
u-theme-light
Light
Light theme mode.
03 / LAYOUT

Utilities

u-stack + u-gap-m
OneTwoThree
u-cluster + u-gap-s
OneTwoThree
u-grid + is-3
123
u-center / u-full / u-overflow-clip
Centered
Spacing
04 / CORNERS

Corner clips

One base utility, then choose the corners and cut size.

u-clip-tl
u-clip-tr
u-clip-br
u-clip-bl
TL + BR
TR + BL
u-clip-sm
u-clip-lg
05 / IMAGE LANGUAGE

Image shapes

Reusable shapes for cards and editorial media. Component-specific defaults can still use the same visual grammar without carrying every utility class.

is-notch-top
is-step-bottom
is-cut-dual
is-cut-dual-soft
is-offset-frame
is-step-top-left
is-step-bottom-right
is-double-step
is-angle-bottom
is-angle-top
is-mirrored
06 / DATA

Metric cards

BASE12.400 kr.
COMPACT8 år
VERTICAL4,2 t
INLINE25 år
metric-group is-flipped is-stacked
metric-group is-left
07 / STRUCTURE

Core class map

These are structural classes we are standardising around as the cleanup continues.

section-intromedia-sectionsmedia-sectionmedia-section__contentmedia-section__mediatext-stackbutton-grouphero-contenthero-content__headinghero-content__titlehero-content__descriptionhero-media-stagehero-media-stage__imageshero-stats-panelhero-stats-panel__innerhero-stats-panel__rowsstat-rowstat-cardstat-card__media
08 — Naming system

Classes that explain themselves

Component = structure. Utility = reusable behavior or layout. is-* = visual or component state. data-* = JavaScript behavior. New classes avoid underscores and double-dash modifiers.

Component example · hero-content__stack / hero-content__copy
Layout example · layout-column / layout-column is-wide
Section example · about-section__row / contact-section__row
State example · is-prev / is-next / is-current / is-team
Rule · class = design · data = behavior · is = state/modifier
CONTENT SYSTEM

Articles & blog cards

Content classes follow the same component hierarchy. Blog view behaviour is driven by data attributes, so presentation classes can evolve without breaking the grid/list system.

article__bodyarticle__mediatoc-layouttoc-sidebartoc-sidebar__contenttoc-articleblog-cardblog-card__linkblog-card__metablog-card__mediablog-card__contentblog-card__footerblog-card__filter-data
blog-card__sourceblog-card__source-markblog-card__source-labelsblog-card__read-moreblog-card__read-icon
blog-view-controls
article__rich-text
Current rich-text class · article__rich-text replaces the legacy toc-article label.
Systems

Navigation & forms

Clean structural class families. Dynamic behavior remains on data attributes and state modifiers.

underlay-nav__arrow-wrapunderlay-nav__arrownavigation__listform-field-rowform-notificationform-input is-textarearadial-gsap-slider__tagradial-gsap-slider__tag-inner
INTERACTION SYSTEM

Select menu

One branded dropdown language for FAQ categories, Viden filters and future compact selectors. Classes own appearance; native open state and data attributes own behavior.

select-menuselect-menu__triggerselect-menu__chevronselect-menu__listselect-menu__itemfilter-btn is-menu-item
Open state · Webflow .w--open
Filter API · data-filter-target / data-filter-status / aria-pressed
CONTENT PATTERNS

Process & product systems

Reusable structure for step-based storytelling and product families. Component classes describe layout; behavior hooks stay separate until their JS migration is intentional.

process-stepsprocess-steps is-padded-bottomprocess-steps__listprocess-stepprocess-step__headerheatpump-typesheatpump-types__gridheatpump-typeheatpump-type__cardheatpump-type__mediaheatpump-type__iconheatpump-type__contentheatpump-type__statusheatpump-features__visualheatpump-features__listheatpump-feature
Protected behavior hooks · .grid_section / .product_lottie — migrate only together with JS
DATA TABLE

Comparison table

Reusable three-plan comparison structure. Cell meaning is data-driven, so included, excluded and text-value states stay independent from presentation classes.

comparison-wrapcomparison-headercomparison-header__cornercomparison-header__innercomparison-header__listcomparison-header__colcomparison-bodycomparison-rowcomparison-row is-categorycomparison-row__namecomparison-row__hcomparison-row__cellscomparison-row__cellcomparison-row__iconcomparison-note
State API · data-comparison-state="included | excluded"
Value API · data-comparison-value="Op til 5 år"
Plan API · data-recommended="true" / data-price / data-price-note
Current scope · branded comparison polish lives in the Service page head; promote to Global CSS only if reused elsewhere.

Footer

Shared footer structure. Classes handle layout and appearance; data-footer-parallax* remains the behavioral API.

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.
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.
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.
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.