Structure
Page Structure
Defined and flexible core structure we can use on all or most pages.
Wrappers
Wrap the page
max-width: 100%
Use to wrap the page with side-bar navigation.
display: flex;
width: 100%;
flex-direction: row;
Used for main sections.
Containers
Sections usually need a container to keep layouts from becoming too wide. Containers also control the horizontal padding in order to maintain the same spacing throughout your project.
A default container acts as "12 columns", as it takes up the full design width (usually 1440px). That's why combo class names mention columns.
max-width: 88rem (1408px);
padding-right: 2rem (32px);
padding-left: 2rem;
Heading
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.
max-width: 72rem (1,152px);
Heading
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.
max-width: 56rem (896px);
Heading
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.
Margin
Margin is useful when you need some extra space in a layout but you don't want to create a new wrapper or class for it.
Padding
Margin is useful when you need some extra space in a layout but you don't want to create a new wrapper or class for it.
Spacer
Spacers are useful when you need some extra space in a layout but you don't want to create a new wrapper or class for it.
Max Width
Control max width and other things
Sections
Use the section class with its combo classes for all your sections to maintain consistency and avoid creating a new class for every new section. There are of course exceptions, but whenever possible, think of reusable ways to create elements.
These combo classes can be stacked.
If you find yourself stacking more than 3 classes, you should create a new combo class for that case.
You could also add more variations (i.e. cc-top-xl, cc-cta, ...)
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.
padding-top: 5rem (80px);
padding-bottom: 5rem;
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.
padding-top: 0rem (0px);
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.
padding-bottom: 0rem (0px);
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.
padding-top: 2.5rem (40px);
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.
padding-bottom: 2.5rem (40px);
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.
padding-top: 6rem (96px)
Heading
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.
padding-bottom: 6rem (96px)
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.
Hero sections are often unique compared to other sections, whether because of a fixed nav or just being 100vh.
Use this class for your hero sections if needed, or remove it and make your own.
Layout
Layouts will usually have more unique names depending on the design. In a lot of cases, there are some basic layout options that can act as building blocks.
We understand that grid isn't always perfect, unless you love grid, then it is. But with the power of flexbox and grid you can create some amazing layouts across all devices. So we went the extra mile and included tons of module stacks.
Create the stack you need, and if you're pushing the limit on combo classes, try using the "Merge Combo Classes" tool from {Finsweet.
Flex Stack
Grid Stack
Examples
Heading
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.
grid-cols defaults to 2 even columns. You can then add modifiers for different sizes or more columns.
column is just a div that is used inside a grid column. the reason it exists is to have some reusable combo classes for alignment, padding, etc
Lorem ipsum
Lorem ipsum dolor
Lorem ipsum
Lorem ipsum dolor
Lorem ipsum
Lorem ipsum dolor
Adds another column to the grid. Might be useful for a blog grid.
This modifier is useful for button groups, logos, or any time you want extra items to stack in one line. Columns are automatically generated
Images
image-wrapper is a generic base class that has overflow hidden, position relative, and width 100%. This is useful to avoid creating a new class for standard-sized images in columns. It is also aligned top to avoid stretching for the whole column (you can change that by placing it in a flex parent). Use a combo class to give it full height.
If you have images with unique sizes and positioning, create a new class for it.
image is set to cover by default and has combo classes to control its aspect ratio or set it to contain. You can add more or modify them. Default:
cc-1x1 cc-4x3 cc-16x9
Custom Layout
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.
What's going on here?
This is what you would mostly use. This name can either be page-specifc or of a reusable component. Try to find opportunities to make things reusable, but don't overthink it. Just try not to have page-specific names for components you are using in multiple pages.
Plan well.
Text
Heading inside a title-wrapper
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.
Put titles inside a div with this class to give them bottom margin. Comes with combo classes for reducing or increasing the margin, but you can also add your own.
Some heading
All this text is in a text-wrapper which constrains width. Even this paragraph got its own text-wrapper.
General purpose class to control text max-width and alignment.
Actions
Some heading
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.
Similar to title and text wrappers, this class controls spacing, this time from the top. Use combo classes for different sizes and alignment.
Shape
Utilities
Other useful utilities.
Custom element allows you to do soooo much more
Use the class or attribute to hide elements
First elements are hidden on all breakpoints
Second elements are hidden on tablet
Last elements are hidden on mobile
Use the class or attribute to hide elements
First elements are visible on all breakpoints
Second elements are visible on tablet - mobile
Last elements are visible on mobile only
Use the class or attribute to hide elements
Use the class or attribute to hide elements
Use the class or attribute to hide elements
margin: 0;
padding: 0;
opacity: 50%;
Typography
Text elements and classes are used strictly for sizing, not styling.
Usually these elements are wrapped with a title-wrapper or a text-wrapper to have access to frequently used modifiers as combo classes.
Font
Font utilities change the font of an element.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Headings
HTML tags have matching classes for their styles. Heading levels should follow the correct hierarchy in the HTML, but styles can be overriden with classes. We recommend always using the class to make separating the tag from the style a habit. Avoid combo classes when possible.
HTML H1
Heading 1
Heading 1
font-family: var(--font--display);
font-size: var(--font-size--80);
line-height: var(--line-height--small);
letter-spacing: var(--letter-space--condensed);
HTML H2
Heading 2
Heading 2
font-family: var(--font--display);
font-size: var(--font-size--56);
line-height: var(--line-height--small);
letter-spacing: var(--letter-space--condensed);
HTML Heading 3
Heading 3
Heading 3
font-family: var(--font--display);
font-size: var(--font-size--40);
line-height: var(--line-height--small);
letter-spacing: var(--letter-space--condensed);
HTML Heading 4
Heading 4
Heading 4
font-family: var(--font--display);
font-size: var(--font-size--28);
line-height: var(--line-height--small);
letter-spacing: var(--letter-space--narrow);
HTML Heading 5
Heading 5
Heading 5
font-family: var(--font--display);
font-size: var(--font-size--22);
line-height: var(--line-height--small);
letter-spacing: var(--letter-space--narrow);
HTML Heading 6
Heading 6
Heading 6
font-family: var(--font--display);
font-size: var(--font-size--17);
line-height: var(--line-height--small);
letter-spacing: var(--letter-space--narrow);
Body
Text classes are strictly used for font-size and line-height. If you need bigger sizes, you should use heading classes. Any other styling usually comes from a parent element. Sometimes you need to override the parent element's color or font-weight, in which case you can use combo classes or spans.
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.
font-family: var(--font--body);
font-size: var(--font-size--28);
line-height: var(--line-height--medium);
letter-spacing: var(--letter-space--narrow);
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.
font-family: var(--font--body);
font-size: var(--font-size--22);
line-height: var(--line-height--medium);
letter-spacing: var(--letter-space--narrow);
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.
font-family: var(--font--body);
font-size: var(--font-size--17);
line-height: var(--line-height--medium);
letter-spacing: var(--letter-space--regular);
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.
font-family: var(--font--body);
font-size: var(--font-size--14);
line-height: var(--line-height--medium);
letter-spacing: var(--letter-space--wide);
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.
font-family: var(--font--body);
font-size: var(--font-size--12);
line-height: var(--line-height--large);
letter-spacing: var(--letter-space--extra-wide);
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.
font-size: not set (resets to base)
line-height: not set
font-family: var(--font--display);
font-size: var(--font-size--80);
line-height: var(--line-height--small);
letter-spacing: var(--letter-space--condensed);
Text Weight
Weight classes when typography weight doesn't match the default HTML tag.
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Text Styles
Other decorations and styles.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Lorem ipsum dolor sit amet
Other
Other HTML tag defaults
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
font-size: 1.2rem;
line-height: 1.5;
padding-top: 0.75rem;
padding-right: 0.75rem;
padding-bottom: 0.75rem;
padding-left: 1.25rem;
color: inherit;
(from CSS embed)
Note: Avoid setting a font-size to links. Instead, add a link block and then add a text block to it.
- Lorem ipsum dolor sit amet
- Lorem ipsum dolor sit amet
- Lorem ipsum dolor sit amet
display: flex;
flex-direction: column;
row-gap: 0.5rem;
- Lorem ipsum dolor sit amet
- Lorem ipsum dolor sit amet
- Lorem ipsum dolor sit amet
display: flex;
flex-direction: column;
row-gap: 0.5rem;
Alignment
Use to align text in layouts, or individual text elements.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet.
Rich text
Rich text and stuff
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Paragraph: 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
Lists:
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Blockquote: 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
Link inside the rich text element
In the global CSS we are removing the top margin from the first element and the bottom margin from the last element
Color
This area is not to set specific classes, but rather a checkpoint to add your project's colors to the global swatches and describe how they're used.
Pallete
Although not all colors may be used, most are here just in case. If you need more colors, you can find the full spectrum in the Figma files.
Neutral
Highlight use case
Used as the main background color.
Used as the secondary background color, like the sidenav on this page.
Base text color of the project.
Slightly softer text color.
Base border color of UI elements of the project.
Border color of cards, if needed.
Red
Used for highlighting, CTAs, details.
Orange
Used for highlighting, CTAs, details.
Yellow
Used for highlighting, CTAs, details.
Green
Used for highlighting, CTAs, details.
Mint
Used for highlighting, CTAs, details.
Teal
Used for highlighting, CTAs, details.
Cyan
Used for highlighting, CTAs, details.
Blue
Used for highlighting, CTAs, details.
Indigo
Used for highlighting, CTAs, details.
Purple
Used for highlighting, CTAs, details.
Pink
Used for highlighting, CTAs, details.
Brown
Used for highlighting, CTAs, details.
Backgrounds
These can be added to any element, although it's recommended to place it as high as possible according to your needs. For example, if you want a two text blocks to have this color and they are sibling elements, you could apply it to their parent element.
If you have a lot of colored headings, it is a good idea to apply it on the element instead of the parent or in a span, to make it easier to access next time.
Text Color
These can be added to any element, although it's recommended to place it as high as possible according to your needs. For example, if you want a two text blocks to have this color and they are sibling elements, you could apply it to their parent element.
If you have a lot of colored headings, it is a good idea to apply it on the element instead of the parent or in a span, to make it easier to access next time.
Gradients
For clipping text, make sure the property is background-image, not background
Shadows
Shadows are set in the global CSS embed block to make it easier to copy layered shadows from Figma and avoid adding an extra combo-class to your elements by assigning them to attributes.
Some elements have these shadows added, and don't need to utilize the attribute.
/* Light Mode */
box-shadow: 0px 1px 1px rgba(184, 179, 173, 0.1), 0px 1.5px 2.5px rgba(184, 179, 173, 0.11), 0px 5px 11px rgba(184, 179, 173, 0.13);
/* Dark Mode */
box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.1), 0px 1.5px 2.5px rgba(0, 0, 0, 0.11), 0px 5px 11px rgba(0, 0, 0, 0.13);
/* Light Mode */
box-shadow: 0px 2px 6px rgba(184, 179, 173, 0.06), 0px 4px 12px rgba(184, 179, 173, 0.07), 0px 7px 18px rgba(184, 179, 173, 0.08), 0px 11.5px 25px rgba(184, 179, 173, 0.08), 0px 23px 36px rgba(184, 179, 173, 0.1);
/* Dark Mode */
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.06), 0px 4px 12px rgba(0, 0, 0, 0.07), 0px 7px 18px rgba(0, 0, 0, 0.08), 0px 12px 25px rgba(0, 0, 0, 0.08), 0px 23px 36px rgba(0, 0, 0, 0.1);
/* Light Mode */
box-shadow: 0 2px 3px 0 rgba(184, 179, 173, 0.05), 0 5px 6px 0 rgba(184, 179, 173, 0.06), 0 7px 9px 0 rgba(184, 179, 173, 0.08), 0 10px 12px 0 rgba(184, 179, 173, 0.09), 0 13px 15px 0 rgba(184, 179, 173, 0.09), 0 17px 19px 0 rgba(184, 179, 173, 0.10), 0 22px 22px 0 rgba(184, 179, 173, 0.11), 0 29px 26px 0 rgba(184, 179, 173, 0.11), 0 39px 31px 0 rgba(184, 179, 173, 0.12), 0 56px 37px 0 rgba(184, 179, 173, 0.12), 0 91px 47px 0 rgba(184, 179, 173, 0.13);
/* Dark Mode */
box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.05), 0 5px 6px 0 rgba(0, 0, 0, 0.06), 0 7px 9px 0 rgba(0, 0, 0, 0.08), 0 10px 12px 0 rgba(0, 0, 0, 0.09), 0 13px 15px 0 rgba(0, 0, 0, 0.09), 0 17px 19px 0 rgba(0, 0, 0, 0.10), 0 22px 22px 0 rgba(0, 0, 0, 0.11), 0 29px 26px 0 rgba(0, 0, 0, 0.11), 0 39px 31px 0 rgba(0, 0, 0, 0.12), 0 56px 37px 0 rgba(0, 0, 0, 0.12), 0 91px 47px 0 rgba(0, 0, 0, 0.13);