Skip to content

Subscribe for 15% off | Free delivery and returns

Select currency

Your cart

Yout basket is empty

Start shopping

Design System Guide

This page showcases all typography styles, button variants, semantic colors, scale-based spacing, and components from the LSA design system. All styles use CSS variables from Figma tokens and follow the latest Tailwind configuration.

Container System

Container Classes for Sections: All sections should use one of the following container classes to control the width of the section container.

These container classes determine the maximum width and horizontal padding of the section, creating consistent layouts across different breakpoints.

Content Wrapping: Content inside these containers should use the wrap-content class to prevent content from exceeding the maximum content width (1538px).

Container Classes

.app-container | Standard container width with padding

Breakpoints: max-w-full (mobile) → smd:max-w-[95%] → md:max-w-[83%] → lg:max-w-[91%]

Padding: px-scale-400 (mobile) → smd:px-0 (tablet+)

Use for: Standard content sections, product grids, general page content

Example: .app-container

.banner-container | Banner/hero container width without padding

Breakpoints: max-w-full (mobile) → smd:max-w-[95%] → md:max-w-[83%] → lg:max-w-[91%]

Padding: No horizontal padding (full-width on mobile)

Use for: Hero banners, full-width sections, image carousels

.app-container-small | Narrower container for focused content

Breakpoints: max-w-full (mobile) → smd:max-w-[75%] → xl:max-w-[1280px]

Padding: No default padding

Use for: Forms, focused content sections, narrower layouts

Example: .app-container-small

Content Wrapping

.wrap-content | Prevents content from exceeding maximum width

Max Width: 1538px

Properties: max-w-[1538px] mx-auto overflow-hidden

Use inside container classes to ensure content doesn't exceed the maximum content width, even on very large screens.

<section class="app-container">
  <div class="wrap-content">
    <!-- Your content here -->
  </div>
</section>

Using the Container Class Snippet

Use the container-class.liquid snippet to dynamically select container classes based on section settings.




container_style Value Returns Usage
full_width w-full Full width container
banner-container banner-container Banner/hero container
container app-container Standard container
smaller app-container-small Narrower container

Best Practices

  • Always use a container class: Every section should have one of the container classes applied to its root element.
  • Wrap content inside: Use wrap-content for content that should not exceed 1538px width.
  • Choose the right container: Use app-container for standard content, banner-container for full-width sections, and app-container-small for focused/narrower layouts.
  • Reference: See src/styles/global/layout.scss (lines 24-39) for container class definitions and snippets/container-class.liquid for the helper snippet.

Typography

Font Families

Body Font

Neue Haas Unica

.font-neue-haas

var(--font-body)

Used for: body text, paragraphs, buttons

Heading Font

Neue Haas Unica

.font-heading

var(--font-heading)

Used for: headings (h1-h6)

Subheading Font

Lato

.font-lato

var(--font-subheading)

Used for: subtitles

Display Font

Trocchi

.font-trocchi

'Trocchi', serif

Used for: decorative text

Headings

.text-h1 | 56px desktop / 28px mobile | fw: 350 | ls: 1px | lh: 64px / 32px | font-body

Heading 1 - The quick brown fox

.text-h2 | 40px desktop / 32px mobile | fw: 300 | ls: 0.9px / 0.5px | lh: 1.125 / 1.266 | font-body

Heading 2 - The quick brown fox jumps

.text-h3 | 36px desktop / 20px mobile | fw: 350 | ls: 0.8px | lh: 40px / 24px | font-body

Heading 3 - The quick brown fox jumps over

.text-h4 | 28px desktop / 20px mobile | fw: 350 | ls: 0.8px | lh: 32px / 24px | font-heading

Heading 4 - The quick brown fox jumps over the lazy

.text-h5 | 20px | fw: 350 | ls: 0.4px | lh: 24px | font-heading

Heading 5 - The quick brown fox jumps over the lazy dog

.text-h6 | 1.27em (≈28px) | fw: 300 | ls: 0.5px | lh: 1.266 | font-heading

Heading 6 - The quick brown fox jumps over the lazy dog

Sub-headings

.text-s1 | 16px | fw: 400 | lh: 20px | ls: 0.2px | font-body

Sub-heading 1 - The quick brown fox jumps over the lazy dog

.text-s2 | 14px desktop / 13px mobile | fw: 400 | lh: 20px | ls: 0.2px | font-body

Sub-heading 2 - The quick brown fox jumps over the lazy dog

Paragraphs

.text-p1 | 16px desktop / 15px mobile | fw: 350 | lh: 24px | ls: 0.2px | font-body

Paragraph 1 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.

.text-p2 | 14px | fw: 350 | lh: 20px | ls: 0.2px | font-body

Paragraph 2 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.

.text-p3 | 18px desktop / 17px mobile | fw: 350 | lh: 28px | ls: 0.4px | font-body

Paragraph 3 - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt.

Captions

.text-c1 | 0.75rem (12px) | fw: 400 | lh: 1.685 | ls: 0.3px | color: primary-subdued | font-body

Caption 1 - Lorem ipsum dolor sit amet, consectetur adipiscing elit.

.text-c2 | 0.75rem (12px) | fw: 300 | lh: 1.685 | ls: 0.3px | color: primary-subdued | font-body

Caption 2 - Lorem ipsum dolor sit amet, consectetur adipiscing elit.

.text-c3 | 12px | fw: 400 | lh: 16px | ls: 0 | font-body

Caption 3 - Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Quote

.text-q1 | 20.25px desktop / 20px mobile | fw: 350 | lh: 1.422 / 1.4 | ls: 0.5px / 0.2px | font-body

"The quick brown fox jumps over the lazy dog. Lorem ipsum dolor sit amet, consectetur adipiscing elit."

Font Size Utilities (CSS Variables)

Font sizes use CSS variables from Figma tokens. Use these utilities for direct size control.

.text-12 | var(--text-size-12) = 12px | Usage: c3, small captions

Font Size 12 - The quick brown fox jumps over the lazy dog

.text-13 | var(--text-size-13) = 13px | Usage: inline buttons, s2 mobile

Font Size 13 - The quick brown fox jumps over the lazy dog

.text-14 | var(--text-size-14) = 14px | Usage: p2, s2, text buttons

Font Size 14 - The quick brown fox jumps over the lazy dog

.text-15 | var(--text-size-15) = 15px | Usage: buttons, p1 mobile

Font Size 15 - The quick brown fox jumps over the lazy dog

.text-16 | var(--text-size-16) = 16px | Usage: p1, s1, default

Font Size 16 - The quick brown fox jumps over the lazy dog

.text-17 | var(--text-size-17) = 17px | Usage: p3 mobile

Font Size 17 - The quick brown fox jumps over the lazy dog

.text-18 | var(--text-size-18) = 18px | Usage: p3, button extralarge

Font Size 18 - The quick brown fox jumps over the lazy dog

.text-20 | var(--text-size-20) = 20px | Usage: s1, q1, h5

Font Size 20 - The quick brown fox jumps over the lazy dog

.text-24 | var(--text-size-24) = 24px | Usage: p3 desktop

Font Size 24 - The quick brown fox jumps over

.text-28 | var(--text-size-28) = 28px | Usage: h4 mobile, h1 mobile

Font Size 28 - The quick brown fox jumps

.text-32 | var(--text-size-32) = 32px | Usage: h2 mobile

Font Size 32 - The quick brown fox

.text-36 | var(--text-size-36) = 36px | Usage: h3 desktop

Font Size 36 - The quick brown

.text-40 | var(--text-size-40) = 40px | Usage: h2 desktop, h4 desktop

Font Size 40 - The quick

.text-48 | var(--text-size-48) = 48px | Usage: h3 desktop

Font Size 48 - The quick

.text-56 | var(--text-size-56) = 56px | Usage: h1 desktop

Font Size 56 - The

Letter Spacing Utilities

.tracking-0 | var(--text-letter-spacing-0) = 0px

Letter Spacing 0 - The quick brown fox

.tracking-0-2 | var(--text-letter-spacing-0-2) = 0.2px

Letter Spacing 0.2 - The quick brown fox

.tracking-0-4 | var(--text-letter-spacing-0-4) = 0.4px

Letter Spacing 0.4 - The quick brown fox

.tracking-0-8 | var(--text-letter-spacing-0-8) = 0.8px

Letter Spacing 0.8 - The quick brown fox

.tracking-1 | var(--text-letter-spacing-1) = 1px

Letter Spacing 1 - The quick brown fox

Line Height Utilities

.leading-16 | var(--text-line-height-16) = 16px

Line Height 16 - The quick brown fox jumps over the lazy dog

.leading-20 | var(--text-line-height-20) = 20px

Line Height 20 - The quick brown fox jumps over the lazy dog

.leading-24 | var(--text-line-height-24) = 24px

Line Height 24 - The quick brown fox jumps over the lazy dog

.leading-28 | var(--text-line-height-28) = 28px

Line Height 28 - The quick brown fox jumps over the lazy dog

.leading-32 | var(--text-line-height-32) = 32px

Line Height 32 - The quick brown fox jumps over the lazy dog

.leading-40 | var(--text-line-height-40) = 40px

Line Height 40 - The quick brown fox jumps over

.leading-48 | var(--text-line-height-48) = 48px

Line Height 48 - The quick brown fox jumps

.leading-56 | var(--text-line-height-56) = 56px

Line Height 56 - The quick brown fox

.leading-64 | var(--text-line-height-64) = 64px

Line Height 64 - The quick brown

Buttons

Fill Buttons

.button, .button-fill | Black fill, white text | Hover: primary-subdued fill | Active: primary-subdued

.button-fill--white | White fill, black text | Hover: black fill, white text

Outline Buttons

.button-outline | Transparent, black border | Hover: black fill, white text

.button-outline--white | Transparent, white border | Hover: white fill, black text

.button-outline--subdued | Transparent, gray border | Hover: primary-subdued fill

Text Buttons

.button-text | primary-subdued text, 400 weight | Hover: primary text, 700 weight

.button-text--underline | Underline on hover | Active: primary text, 700 weight

.button-text--strong | primary text, 700 weight, always underlined

.button-text--white | White text (for dark backgrounds)

Icon Buttons

.button-icon | 52x52px circle, transparent, primary-inverse-subdued border | Hover: primary border

Inline Button Variants

.button-inline | primary-subdued text | Hover: underline

.button-inline-1 | primary-subdued text | Hover: primary text, underline

.button-inline-2 | primary-inverse text | Hover: underline

.button-inline-extra-small | offer text, smaller size

Button Size Modifiers

.button--small | 14px font, scale-150/400 padding

.button--large | 16px font, scale-300/600 padding

.button--extralarge | 18px font, scale-400/800 padding

Color System

Consolidated Color System:

Semantic colors have been consolidated to eliminate duplicates. Use the base color name (primary, primary-subdued, etc.) with standard Tailwind prefixes: text-, bg-, border-.

Removed duplicates: bg-fill-primarybg-primary, border-border-primaryborder-primary, text-icon-primarytext-primary, bg-primary-whitebg-surface-primary.

Colors

Use the base color name with standard Tailwind prefixes: text-, bg-, border-.

primary

text-primary, bg-primary, border-primary

var(--text-color-primary)

primary-subdued

text-primary-subdued, bg-primary-subdued, border-primary-subdued

var(--text-color-primary-subdued)

minor

text-minor, border-minor

var(--text-color-minor)

primary-inverse

text-primary-inverse, bg-primary-inverse, border-primary-inverse

var(--text-color-primary-inverse)

primary-inverse-subdued

text-primary-inverse-subdued

var(--text-color-primary-inverse-subdued)

error

text-error, border-error

var(--text-color-error)

success

text-success

var(--text-color-success)

offer

text-offer

var(--text-color-offer)

surface-primary

bg-surface-primary

var(--surface-primary)

surface-primary-subdued

bg-surface-primary-subdued

var(--surface-primary-subdued)

surface-primary-inverse

bg-surface-primary-inverse

var(--surface-primary-inverse)

surface-secondary

bg-surface-secondary

var(--surface-secondary)

fill-secondary

bg-fill-secondary

var(--fill-secondary)

fill-minor

bg-fill-minor

var(--fill-minor)

Spacing & Layout

Scale-based Spacing (Figma Tokens)

Use scale-based spacing utilities for padding, margin, and gap. These map directly to Figma design tokens.

Scale Token Value Tailwind Class Example
scale-100 4px p-scale-100, m-scale-100, gap-scale-100
Padding
scale-200 8px p-scale-200, m-scale-200, gap-scale-200
Padding
scale-300 12px p-scale-300, m-scale-300, gap-scale-300
Padding
scale-400 16px p-scale-400, m-scale-400, gap-scale-400
Padding
scale-500 20px p-scale-500, m-scale-500, gap-scale-500
Padding
scale-600 24px p-scale-600, m-scale-600, gap-scale-600
Padding
scale-800 32px p-scale-800, m-scale-800, gap-scale-800
Padding
scale-1200 48px p-scale-1200, m-scale-1200, gap-scale-1200
Padding

Usage Examples:

pt-scale-100 (padding-top: 4px)

p-scale-200 (padding: 8px)

gap-scale-500 (gap: 20px)

m-scale-600 (margin: 24px)

Full scale range: scale-0 (0px) through scale-2000 (160px). See tailwind.config.js for complete list.

Container Width

Max container width: 1720px

Class: max-w-container or style="max-width: 1720px"

Component Height

Default component height: 3.5em

Used for buttons, inputs, and other interactive elements

Class: h-component

Border Widths

.border-xs | var(--border-width-xs) = 1px

Border width xs (1px)

.border-s | var(--border-width-s) = 2px

Border width s (2px)

Border Radius

.rounded-none | var(--border-radius-none) = 0px

No border radius

.rounded-xs | var(--border-radius-xs) = 2px

Border radius xs (2px)

Responsive Breakpoints

Breakpoint Size Usage Example
xs: 320px Very small screens xs:text-14
sm: 375px Mobile sm:text-16
smd: 750px Small tablet smd:grid-cols-2
md: 768px Tablet md:text-18
nav: 1097px Nav visible (use nav: prefix per project rules) nav:flex
max-nav: max 1097px Mobile, nav hidden max-nav:hidden
lg: 1440px Desktop lg:text-20
xl: 1920px Extra large xl:text-24
2xl: 2560px Ultra wide 2xl:text-28

Icons & Animations

Loading Spinner

.icon-loading | 1.2s linear infinite rotation

Zippy Indicator (Accordion)

.zippy-indicator | 0.4s ease transition | rotates 180deg when .is-open

Closed:
Open:

Icon Hover Effect

.icon-hover | 0.3s ease transition | Hover color: primary

Transition Timings

  • Button transitions: 300ms (0.3s) ease-in-out (default)
  • Icon loading: 1.2s linear infinite
  • Zippy indicator: 0.4s ease
  • Icon hover: 0.3s ease
  • Inline button underline: 300ms (0.3s) ease-in-out

Usage Examples

Typography Classes

<h1 class="text-h1">Heading 1</h1>
<h2 class="text-h2">Heading 2</h2>
<p class="text-p2">Body text</p>
<span class="text-c1">Caption</span>
<blockquote class="text-q1">Quote text</blockquote>

<!-- Font Size Utilities (CSS Variables) -->
<p class="text-14">14px text</p>
<p class="text-16">16px text</p>
<p class="text-20">20px text</p>

<!-- Letter Spacing & Line Height -->
<p class="text-16 tracking-0-4 leading-24">Custom spacing</p>

Button Classes

<!-- Fill Buttons -->
<button class="button">Default Fill</button>
<button class="button-fill--white">White Fill</button>

<!-- Outline Buttons -->
<button class="button-outline">Outline</button>
<button class="button-outline--white">Outline White</button>
<button class="button-outline--subdued">Outline Subdued</button>

<!-- Text Buttons -->
<button class="button-text">Text Button</button>
<button class="button-text--underline">Text with Underline</button>
<button class="button-text--strong">Text Strong</button>
<button class="button-text--white">Text White</button>

<!-- Icon Button -->
<button class="button-icon">...</button>

<!-- Inline Buttons -->
<button class="button-inline">Inline Link</button>
<button class="button-inline-1">Inline 1</button>
<button class="button-inline-2">Inline 2</button>
<button class="button-inline-extra-small">Extra Small</button>

<!-- Size Modifiers -->
<button class="button button--small">Small</button>
<button class="button button--large">Large</button>
<button class="button button--extralarge">Extra Large</button>

Semantic Color Classes

Colors are consolidated - use the base color name with standard Tailwind prefixes. The same color works for text, background, and border.

<!-- Text colors -->
<span class="text-primary">Primary text</span>
<span class="text-primary-subdued">Secondary text</span>
<span class="text-minor">Tertiary text</span>
<span class="text-primary-inverse">White text on dark</span>
<span class="text-offer">Error/sale text</span>
<span class="text-error">Error state</span>
<span class="text-success">Success state</span>

<!-- Background/Fill colors (same color names) -->
<div class="bg-primary">Black fill</div>
<div class="bg-primary-subdued">Dark gray fill</div>
<div class="bg-primary-inverse">White fill</div>

<!-- Surface colors (unique, not consolidated) -->
<div class="bg-surface-primary">White surface</div>
<div class="bg-surface-secondary">Gray surface</div>
<div class="bg-surface-primary-subdued">Light gray surface</div>
<div class="bg-surface-primary-inverse">Dark surface</div>

<!-- Border colors (same color names) -->
<div class="border border-primary">Black border</div>
<div class="border border-primary-subdued">Gray border</div>
<div class="border border-minor">Light gray border</div>
<div class="border border-primary-inverse">White border</div>
<div class="border border-error">Error border</div>

<!-- Note: Old classes like bg-fill-primary, border-border-primary, 
     text-icon-primary have been removed. Use bg-primary, border-primary, 
     text-primary instead. -->

Scale-based Spacing

<!-- Padding -->
<div class="p-scale-200">Padding 8px</div>
<div class="pt-scale-100 px-scale-500">Custom padding</div>

<!-- Margin -->
<div class="m-scale-400">Margin 16px</div>
<div class="mb-scale-600">Bottom margin 24px</div>

<!-- Gap -->
<div class="flex gap-scale-500">Gap 20px</div>
<div class="grid gap-scale-300">Grid gap 12px</div>

Font Family Classes

<p class="font-neue-haas">Neue Haas Unica (body)</p>
<p class="font-heading">Neue Haas Unica (heading)</p>
<p class="font-lato">Lato (subheading)</p>
<p class="font-trocchi">Trocchi (display)</p>

Responsive Breakpoints

<!-- Mobile-first approach -->
<div class="text-14 nav:text-16 lg:text-20">Responsive text</div>

<!-- Hide/show based on breakpoint -->
<div class="hidden nav:block">Visible on nav+</div>
<div class="block max-nav:hidden">Hidden on mobile</div>

<!-- Grid responsive -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-scale-500">
  <div>Item</div>
</div>

Enter your email to receive a notification when this item comes back in stock