Skip to content

Configuration

Projects edit one file — config/_config.scss. Everything else is generated.

The config folder has four files:

FilePurpose
_defaults.scssSystem defaults — never edited
_config.scssProject overrides — the only file you touch
_resolved.scssMerges defaults and overrides into final values
_functions.scssHelper functions used by config (px-to-em etc)
index.scssForwards resolved values — what the rest of the system imports

When a token file needs a value it imports config and gets the resolved result — it never touches defaults or config directly.

Set a primary color — the minimum required configuration:

$color-overrides: (
"primary": #1A73FF,
) !default;

The system derives accent, neutral scale, and feedback colors automatically from the primary using oklch color space.

Override the generated accent or add extra colors — each gets a full 50–950 scale:

$color-overrides: (
"primary": #1A73FF,
"accent": #FF4B8B, // override generated accent
"tertiary": #FF6B1A, // extra — gets full scale
) !default;

Controls how the accent is derived from primary. Ignored if "accent" is set:

$color-scheme-override: "complementary" !default;
ValueDescription
"complementary"180° opposite — high contrast
"analogous"30° adjacent — harmonious
"split-complementary"150° from primary
"monochromatic"Same hue, lower chroma and higher lightness

Override any font role. Unset roles fall back to defaults. Adding a new key generates a new --font-* token automatically:

$font-overrides: (
"body": (Inter, system-ui, sans-serif),
"heading": (Georgia, "Times New Roman", serif),
"mono": ("Fira Code", "Courier New", monospace),
) !default;
RoleUsage
"body"Long-form reading, paragraphs
"heading"h1–h6
"display"Decorative, hero text
"ui"Buttons, labels, form elements
"mono"Code, pre, kbd, samp

Replaces defaults entirely — list every weight your font actually loads. The browser fakes unlisted weights silently:

$font-weight-overrides: (
"regular": 400,
"medium": 500,
"bold": 700,
) !default;

Leaving this empty uses the defaults — regular: 400 and bold: 700.

null uses the system default:

$type-base-override: null !default; // default 1rem
$type-ratio-override: null !default; // default 1.25 Major Third
RatioNameCharacter
1.125Major SecondSubtle
1.2Minor ThirdBalanced
1.25Major ThirdDefault
1.333Perfect FourthExpressive
1.618Golden RatioDramatic

Base unit for the spacing scale. All tokens are multiples of this value:

$space-unit-override: null !default; // default 0.25rem (4px)

Base radius value. All radius tokens derive from this:

$radius-base-override: null !default; // default 6px

Controls the block/inline padding ratio for padding-box mixins:

$box-ratio-override: null !default; // default 2 — inline = block × 2
$shadow-hardness-override: null !default; // 1–10, default 5
$shadow-direction-override: null !default; // "none" | "left" | "right"
$shadow-offset-base-override: null !default; // default 2px

Direction describes where the light source is — not where the shadow falls:

ValueLight sourceShadow falls
"none"OverheadStraight down
"left"From leftTo the right
"right"From rightTo the left

Merges with defaults — only set what you want to change or add. Use px-to-em() to convert from px:

$breakpoint-overrides: (
"lg": 62em,
"menu": px-to-em(860px),
) !default;

Default breakpoints: xs 360px / sm 576px / md 768px / lg 992px / xl 1200px / 2xl 1400px

$color-overrides: (
"primary": #9333EA,
) !default;
$color-scheme-override: "analogous" !default;
$font-overrides: (
"body": (Inter, system-ui, sans-serif),
"heading": (Georgia, "Times New Roman", serif),
"ui": (Inter, system-ui, sans-serif),
"mono": ("Fira Code", "Courier New", monospace),
) !default;
$type-ratio-override: 1.333 !default;
$shadow-hardness-override: 6 !default;
$shadow-direction-override: "left" !default;