Style guide
[Overview]
Everything Lately is made of, on one page: the color variables behind the light and dark themes, the type scale, spacing, links, buttons, form fields and the small components every page is built from. Colors and the typeface are Webflow Variables, so a change in the Variables panel reaches every page at once. Sizes live in the classes, in em.
[Colors]
Every color is a variable in the Colors collection, and every class uses a variable, never a raw hex value. Switch the header to Dark: the semantic colors below change to their Dark mode values while the ramps stay the same.
Semantic — Light / Dark
Background/PrimaryLight: Neutral 50 · #f4f4f2
Dark: Neutral 900 · #000000
Background/SecondaryLight: Neutral 100 · #eaeae8
Dark: Neutral 800 · #111111
Background/CardLight: Neutral 0 · #ffffff
Dark: Neutral 700 · #1a1a18
Text/PrimaryLight: Neutral 700 · #1a1a18
Dark: Neutral 50 · #f4f4f2
Text/SecondaryLight: Neutral 500 · #70706e
Dark: Neutral 400 · #8a8a88
Text/TertiaryLight: Neutral 300 · #b3b3b1
Dark: Neutral 600 · #555555
Border/PrimaryLight: Neutral 200 · #dbdbd9
Dark: Neutral 700 · #1a1a18
Border/SecondaryLight: Neutral 300 · #b3b3b1
Dark: Neutral 600 · #555555
Accent/CodeLight: Green 600 · #16a60c
Dark: Green 300 · #39ff14
Status/AvailableBoth: Green 500 · #3fb950
Overlay/BackdropBoth: #1a1a18 at 45%
Neutral ramp
Neutral 0#ffffff
Neutral 50#f4f4f2
Neutral 100#eaeae8
Neutral 200#dbdbd9
Neutral 300#b3b3b1
Neutral 400#8a8a88
Neutral 500#70706e
Neutral 600#555555
Neutral 700#1a1a18
Neutral 800#111111
Neutral 900#000000
Green ramp
Green 300#39ff14
Green 500#3fb950
Green 600#16a60c
System — form states
System/Success BackgroundSystem/Success Text#cef5ca · #114e0b
System/Error BackgroundSystem/Error Text#f8e4e4 · #3b0b0b
System/Warning BackgroundSystem/Warning Text#fcf8d8 · #5e5515
[Typography]
Typeface
Overused Grotesk Light
Overused Grotesk Regular
Overused Grotesk Medium
One variable font file, weights 300 to 500, for every line of text, set in Variables → Typography → Body Font. By Bao Nguyen (RandomMaerks) under the SIL Open Font License 1.1, free to use in commercial projects. To use your own typeface, upload it in Site settings → Fonts and pick it in that variable.
Text styles
Sizes at 1440px. Nothing is set below 14px at any screen size: small labels and links use max(14px, …).
Works13
Page title (h1), one per page: 112, 80 and 64px on tablet, mobile landscape and mobile portrait. The raised number is the 14px sup.
Start a project
Display line inside a row, like the About call to action. 56, 48 and 36px on smaller screens.
I design websites and products, then build them myself.
Lead paragraph, the opening line of the About profile. 24 and 22px on smaller screens.
MT-1 cassette player
Project title in the Home modal and on the Work page.
Webflow development
Item title in list rows: services, experience, licenses, instructions.
A cassette player concept modelled in Blender and brought to life with GSAP, from the first sketch to the final render.
Project description in the Home modal and on the Work page.
For the first half of my career I was a visual designer, handing polished files to developers and hoping the details would survive. So I learned to code.
Body text, in Text/Primary. Pair it with max-width-medium for a comfortable line length.
Clean, documented Webflow builds with CMS and native interactions.
Secondary text: descriptions in list rows and notes like this one.
[What I do]
Row labels (h2), captions and the copyright. The brackets are part of the text.
Numbers, years and versions at the start of a list row. Figures keep the same width.
Inline code:
page-row_componentClass names and settings in running text, on this page and on Instructions.
[Tag styles]
The samples below have no class. Their look comes from the tag styles: select one, pick All H2 Headings, All Paragraphs and so on in the Style panel’s selector, and edit it there. Sizes, weights and line heights are linked to the Typography variables. The Rich Text and any heading or paragraph you add without a class start from these.
A page has one h1, so this style is edited on the page title at the top: select it and choose All H1 Headings in the selector. The title keeps its own class on top.
Selected work, 2019 to now
Brand sites that stay easy to edit
Case study: MT-1 cassette player
Design, build and launch
Webflow, GSAP and Figma
I design websites and products, then build them myself in Webflow. See the latest projects or write to me about a new one.
- Art direction and visual design
- Webflow development and CMS
- Motion with native interactions
- A call and a short written brief
- Design in Figma, approved section by section
- Build, review together and launch
The best handover is a site the client never has to call me about.

Journey, a Webflow template for creative studios, on the desk.
[Rich text]
Blog posts are written in a Rich Text element with the class text-rich-text. Inside it, each tag has its own style on top of the tag styles above: select a heading, a paragraph or a quote in this sample to edit the look of every post at once.
Start with who edits it next
Before I decide how a page should move, I ask who will change it after launch. A marketing team edits headlines every week, so anything they touch should live in the Designer, not in a script. More on that in the journal.
Keep the system small
One typeface, three weights and a handful of sizes cover a whole portfolio. Every extra style is one more thing a client has to keep consistent.
- One class per text style, reused everywhere
- Colors as variables, so dark mode is one switch
- Sizes in em, so the page scales as a whole
- Write the content first
- Set the type scale around it
- Add motion last, and only where it helps
If a client would ask me to change it, it belongs somewhere they can reach.

[Spacing & scale]
Scale system
Every size is in em, measured from
page-wrapper: 16px up to 1440px wide, then growing with the screen to 21.33px at 1920px. Tablet and mobile stay at 16px.Fixed 16px
The combo
is--no-scaleonpage-wrapperkeeps a page at 16px on every screen. Every Lately page uses it; remove it to let a page grow on wide screens.Gutters
padding-globalsets the left and right gutters: 40px on desktop, 24px on tablet and 20px on mobile. Pages are full width, with no container.Desktop first
Styles start on desktop and are adjusted on three smaller breakpoints.
- Desktop · 992px and up
- Tablet · 991px
- Mobile landscape · 767px
- Mobile portrait · 479px
Spacing scale
Gaps and paddings come from one scale, in the
Spacingcollection. Components space their children with gap.- Space 1 · 4px
- Space 1 Half · 6px
- Space 2 · 8px
- Space 2 Half · 10px
- Space 3 · 12px
- Space 4 · 16px
- Space 5 · 20px
- Space 6 · 24px
- Space 7 Half · 30px
- Space 8 · 32px
- Space 10 · 40px
- Space 12 · 48px
- Space 16 · 64px
Corners
Cards, images and form messages use 10px (0.625em). Buttons, chips, pills and dots are fully round (100em). Lines are 1px hairlines, dashed between rows.
[Links & buttons]
The main call to action. On hover the fill rises and the label rolls up (a native interaction on the button). The label is written twice, in
button_text_mainandbutton_text_hover. The form version isform_submit, shown under Forms.- hello@alexmarlow.com
Emails and key links. On hover the line slides out to the right and back in from the left (site script). It takes its parent’s font size, so a larger wrapper makes a larger link.
- View my works
Text links in rows and in the footer. They turn grey on hover.
- Visit live site
Project links in the Home modal and on the Work page.
- Alex Marlow
The name at the top left of every inner page, linking back to Home.
- Figma
- Webflow
- GSAP
- Blender
Tags: the tools on a Work page and the About toolkit.
- MT-1 cassette player
The name pill on media cards. It rests hidden and fades in when the card is hovered; the combo
is--pinnedshows it here only.
[Forms]
The Contact and Password pages use Webflow’s native Form Block with these classes. Fields are underlined, labels are uppercase and required fields get an asterisk.
Fields
form_component form_form form_grid form_field form_label form_input with is--select or is--textarea, form_radio form_radio-input form_radio-label form_actions form_submit form_note
States
form_success replaces the form after a send; form_error appears under it if the send fails. Both use form_message, form_message-title and form_message-text. Edit them in the Designer from the Form Block’s state menu.
[Components]
Booking new projects from November.
A green dot (Status/Available) and one line of text. Used on Home, About, Contact and Licenses.
A Works collection item: the media is the link, and its name pill fades in on hover.
is--gridon the image or video crops every card to 16:10.Websites & landing pages
Art direction, design and build for marketing sites that load fast and stay easy to edit.
Number, title and text in one row, used for services, experience, licenses and releases. Add
is--lastto the last row of a list to drop its hairline.The switch at the top of every page. It adds
theme-darkto the body, which turns on the Dark mode of the Colors collection, and remembers the choice on the visitor’s device. Try it in the header.The intro counter that plays once per visit (hidden in the Designer; add the combo
is--shownto edit it), and the clock in the header that cycles through cities. Both run from the site script; edit their text in the Designer.
[Utilities]
Text measure
max-width-mediumcaps a block of text at 36em (576px), the width of the Home bio.Containers
container-small,container-mediumandcontainer-largecenter content at 960, 1200 and 1360px. The pages are full width; use them in sections you add.Screen readers
sr-onlyhides text on screen but keeps it for screen readers, like the “opens in a new tab” note on outside links.Skip link
skip-linkis the first thing a keyboard reaches. It appears on focus and jumps to the main content.Label
text-style-labelis the small uppercase style for row labels, captions and the copyright line.Variants
is--lastremoves the hairline under the last list row.is--stretchlets a row’s content fill its column.is--no-scalefixes a page at 16px.is--gridcrops card media to 16:10.is--activemarks the current theme label.Client-First
Parts of a block use an underscore (
page-row_content), shared styles a hyphen (text-style-label), variants start withis--. Reuse a class before creating a new one.
[Interactions & code]
Scroll reveal
Each row below the first fades up as it scrolls into view. It is a native interaction: select the row and open the Interactions panel to change or remove it.
Hovers
The button fill and the work card pill are native hover interactions on
buttonandwork-card_link, editable in the same panel.Site script
Smooth scroll, the Welcome screen, the theme switch, the clock and the underline links run from one script in Site settings → Custom code → Footer.
Font smoothing
The only custom style in the site head is font smoothing on
page-wrapper. Everything else is a class you can edit in the Style panel.
[Script states]
These classes are added while the page runs, by the site script or by the blog pagination, so they are on no element in the Designer and Webflow’s Clean Up lists them as unused. Don’t delete them: a hidden block at the end of this page carries each one, which keeps them in use and editable.
Dark mode
theme-darkgoes on the body when a visitor picks Dark and turns on the Dark mode of the Colors collection.Welcome screen
welcome_componentwithis--shownshows the intro counter on the first visit.Custom cursor
cursor-bracketstyles the two brackets that follow the pointer on desktop.Avatar effect
home-panel_avatar-canvasis the canvas laid over the Home portrait for the pixel swap.Contents
blog-toc_linkwithis--currentmarks the contents link of the section on screen.Page count
blog-pagination_countis the “1 / 2” count, shown only when the blog has more than one page.
