Customization

Override settings at import time to tailor the library to your project. Use the Sass source directly via @use with a configuration map.

Using Sass source

Instead of importing the compiled CSS, import the Sass entry point. Pass any settings you want to override with the with keyword.

styles.scssscss
@use 'ln/scss' with (
  $prefix: 'my-',
  $font-ui: 'Geist', system-ui, sans-serif,
  $breakpoints: (
    sm: 30rem,
    md: 48rem,
    lg: 64rem,
    xl: 80rem,
    '2xl': 100rem,
  )
);

Class prefix

The $prefix variable controls the namespace for BEM block classes. The default is ln-. Changing it renames every block class — for example, .ln-button becomes .my-button.

styles.scssscss
@use 'ln/scss' with (
  $prefix: 'my-'
);

// .my-button, .my-card, .my-grid, etc.

Font stacks

Three font-role variables control the entire type system. Override one or all to use your own typefaces.

styles.scssscss
@use 'ln/scss' with (
  $font-prose: 'Lora', Georgia, serif,
  $font-ui: 'Inter', system-ui, sans-serif,
  $font-mono: 'JetBrains Mono', monospace
);
VariableDefaultRole
$font-proseCharter, Bitstream Charter, Sitka Text, Cambria, serifHeadings, editorial text
$font-uiInter, Roboto, Helvetica Neue, Arial Nova, Nimbus Sans, Arial, sans-serifBody copy, interface text
$font-monoui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospaceCode, tabular data
$heading-font$font-proseHeading elements (h1–h6)

Vertical rhythm

Two variables define the spatial grid. All spacing tokens and components derive from these values.

styles.scssscss
@use 'ln/scss' with (
  $g: 4px,   // base grid step (default 8px)
  $r: 16px   // line grid step (default 24px)
);
VariableDefaultPurpose
$g8pxBase grid step — the smallest spatial unit
$r24pxLine grid step — baseline for line-height and vertical spacing

Breakpoints

Override the breakpoint map to change where responsive modifiers activate. Custom breakpoint names become available as @{bp} suffixes throughout the system.

styles.scssscss
@use 'ln/scss' with (
  $breakpoints: (
    sm:  30rem,
    md:  48rem,
    lg:  62rem,
    xl:  80rem,
    '2xl': 100rem,
  )
);
NameDefaultPixels
sm36rem576px
md48rem768px
lg64rem1024px
xl80rem1280px
2xl96rem1536px

Layout

Adjust container widths, the prose measure, and the page gutter.

styles.scssscss
@use 'ln/scss' with (
  $container: 60rem,       // default 56.25rem (900px)
  $container-wide: 80rem,  // default 75rem (1200px)
  $measure: 40rem,         // default 37.5rem (~70ch)
  $gutter: 1.5rem,         // default 1rem (mobile)
  $gutter-lg: 3rem         // default 2rem (md+)
);
VariableDefaultPurpose
$container56.25rem (900px)Default container max-width
$container-wide75rem (1200px)Wide container max-width
$measure37.5rem (~70ch)Max-width for prose content
$gutter1remPage side gutter on mobile
$gutter-lg2remPage side gutter on md and above

Selecting blocks

By default every block is included in the output. To reduce file size, pass a list of only the blocks you need.

styles.scssscss
@use 'ln/scss' with (
  $blocks: (button, card, table, alert)
);

An empty list (the default) emits all blocks. Any block not in the list is excluded from the compiled CSS.

Reference

VariableDefaultDescription
$prefixln-BEM block class namespace
$font-proseCharter, Bitstream Charter, Sitka Text, Cambria, serifSerif font stack for headings and editorial text
$font-uiInter, Roboto, Helvetica Neue, Arial Nova, Nimbus Sans, Arial, sans-serifSans-serif font stack for body and interface text
$font-monoui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospaceMonospace font stack for code
$heading-font$font-proseFont stack for heading elements
$g8pxBase grid step
$r24pxLine grid step
$breakpointssm–2xlResponsive breakpoint map
$container56.25rem (900px)Default container max-width
$container-wide75rem (1200px)Wide container max-width
$measure37.5rem (~70ch)Max-width for prose content
$gutter1remPage side gutter on mobile
$gutter-lg2remPage side gutter on md and above
$blocks()List of blocks to include (empty = all)