--sf-animation-blink |
PUBLIC |
consumption |
animation |
sf-blink calc(1s * var(--sf-motion-scale)) steps(1, end) infinite |
Blinking visibility loop. Use for cursor indicators or critical attention cues. Respect prefers-reduced-motion. |
--sf-animation-color-pulse |
PUBLIC |
consumption |
animation |
sf-color-pulse var(--sf-duration-slow) var(--sf-ease-in-out) infinite |
Pulsing color loop. Use for live-status badges (recording, live). Respect prefers-reduced-motion. |
--sf-animation-fade-in |
PUBLIC |
consumption |
animation |
sf-fade-in var(--sf-duration-normal) var(--sf-ease-out) both |
Fade-in entrance animation shorthand. Use directly as animation property value. |
--sf-animation-fade-out |
PUBLIC |
consumption |
animation |
sf-fade-out var(--sf-duration-normal) var(--sf-ease-in) both |
Fade-out exit animation shorthand. |
--sf-animation-float |
PUBLIC |
consumption |
animation |
sf-float calc(3s * var(--sf-motion-scale)) var(--sf-ease-in-out) infinite |
Gentle floating / levitating loop. Use for hero illustrations or floating UI elements. Decorative — disable for prefers-reduced-motion. |
--sf-animation-ping |
PUBLIC |
consumption |
animation |
sf-ping var(--sf-duration-slow) var(--sf-ease-out) infinite |
Expanding ping / ripple loop. Use for notification badges and live-indicator dots. |
--sf-animation-scale-down |
PUBLIC |
consumption |
animation |
sf-scale-down var(--sf-duration-normal) var(--sf-ease-in) both |
Scale-down exit animation. Pairs with –sf-animation-scale-up for enter/leave transitions. |
--sf-animation-scale-up |
PUBLIC |
consumption |
animation |
sf-scale-up var(--sf-duration-normal) var(--sf-ease-overshoot) both |
Scale-up entrance animation. Use for modals, popovers, and tooltips appearing. |
--sf-animation-shimmer |
PUBLIC |
consumption |
animation |
sf-shimmer calc(1.5s * var(--sf-motion-scale)) var(--sf-ease-in-out) infinite |
Shimmer / skeleton-loading sweep. Apply on placeholder elements while content loads. |
--sf-animation-slide-in-down |
PUBLIC |
consumption |
animation |
sf-slide-in-down var(--sf-duration-normal) var(--sf-ease-out) both |
Slide-in from above. Use for dropdown menus and top-attached sheets. |
--sf-animation-slide-in-left |
PUBLIC |
consumption |
animation |
sf-slide-in-left var(--sf-duration-normal) var(--sf-ease-out) both |
Slide-in from the left. Use for left-side drawers and navigation panels. |
--sf-animation-slide-in-right |
PUBLIC |
consumption |
animation |
sf-slide-in-right var(--sf-duration-normal) var(--sf-ease-out) both |
Slide-in from the right. Use for right-side drawers and detail panels. |
--sf-animation-slide-in-up |
PUBLIC |
consumption |
animation |
sf-slide-in-up var(--sf-duration-normal) var(--sf-ease-out) both |
Slide-in from below. Use for bottom sheets, toasts, and floating action buttons. |
--sf-animation-slide-out-down |
PUBLIC |
consumption |
animation |
sf-slide-out-down var(--sf-duration-normal) var(--sf-ease-in) both |
Ready-made animation shorthand: slides the element out downward (sf-slide-out-down) at the normal duration with ease-in. |
--sf-animation-slide-out-left |
PUBLIC |
consumption |
animation |
sf-slide-out-left var(--sf-duration-normal) var(--sf-ease-in) both |
Ready-made animation shorthand: slides the element out to the left (sf-slide-out-left) at the normal duration with ease-in. |
--sf-animation-slide-out-right |
PUBLIC |
consumption |
animation |
sf-slide-out-right var(--sf-duration-normal) var(--sf-ease-in) both |
Ready-made animation shorthand: slides the element out to the right (sf-slide-out-right) at the normal duration with ease-in. |
--sf-animation-slide-out-up |
PUBLIC |
consumption |
animation |
sf-slide-out-up var(--sf-duration-normal) var(--sf-ease-in) both |
Ready-made animation shorthand: slides the element out upward (sf-slide-out-up) at the normal duration with ease-in. |
--sf-animation-spin |
PUBLIC |
consumption |
animation |
sf-spin var(--sf-duration-slower) linear infinite |
Continuous rotation loop. Use for loading spinners and progress indicators. |
--sf-blur |
PUBLIC |
knob |
blur |
12px |
Backdrop-filter blur amount for frosted-glass surfaces (navbars, overlays, dialogs). Default 12px. Pair with a semi-transparent background. |
--sf-body-color |
PUBLIC |
consumption |
body |
var(--sf-color-text) |
Text color for body copy. Alias of –sf-color-text. Override here to deviate body text from the global text color. |
--sf-body-em-style |
PUBLIC |
knob |
body |
italic |
font-style for inside body text (italic by default). Override to suppress italics if your typeface has no italic variant. |
--sf-body-font-family |
PUBLIC |
consumption |
body |
var(--sf-font-body) |
Font family for body text. Alias of –sf-font-body. |
--sf-body-font-size |
PUBLIC |
consumption |
body |
var(--sf-text-m) |
Base font size for body paragraphs. Alias of –sf-text-m. |
--sf-body-font-weight |
PUBLIC |
consumption |
body |
var(--sf-font-weight-body) |
Font weight for body text. Alias of –sf-font-weight-body. |
--sf-body-line-height |
PUBLIC |
consumption |
body |
var(--sf-leading-normal) |
Line height for body paragraphs. Alias of –sf-leading-normal. |
--sf-body-strong-weight |
PUBLIC |
consumption |
body |
var(--sf-font-weight-strong) |
Font weight for inside body text. Override to choose a specific weight instead of inheriting bold. |
--sf-body-text-wrap |
PUBLIC |
knob |
body |
pretty |
text-wrap mode for body paragraphs. ‘pretty’ prevents orphaned last words; ‘balance’ equalises line lengths. |
--sf-border |
PUBLIC |
consumption |
border |
var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border) |
Default border shorthand (width + solid + color). Apply directly to border property. |
--sf-border-scale |
PUBLIC |
knob |
border |
1 |
Global border-width multiplier. Set to 0 for borderless UI; 0.5 for hairline-only; 2 to double all border widths across the system. |
--sf-border-strong |
PUBLIC |
consumption |
border |
var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border--strong) |
Strong-emphasis border shorthand. |
--sf-border-style |
PUBLIC |
knob |
border |
solid |
Global border-style default applied across all border tokens. |
--sf-border-subtle |
PUBLIC |
consumption |
border |
var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border--subtle) |
Low-contrast subtle border shorthand. |
--sf-border-width-1 |
PUBLIC |
consumption |
border |
calc(1px * var(--sf-border-scale, 1)) |
Standard 1px border width. |
--sf-border-width-2 |
PUBLIC |
consumption |
border |
calc(2px * var(--sf-border-scale, 1)) |
Medium 2px border width. Common for focus outlines. |
--sf-border-width-3 |
PUBLIC |
consumption |
border |
calc(3px * var(--sf-border-scale, 1)) |
Thick 3px border width. |
--sf-border-width-4 |
PUBLIC |
consumption |
border |
calc(4px * var(--sf-border-scale, 1)) |
Extra-thick 4px border width for decorative borders. |
--sf-border-width-hairline |
PUBLIC |
knob |
border |
0.5px |
1px border width (hairline). |
--sf-caret-color |
PUBLIC |
consumption |
caret |
var(--sf-color-action) |
Cursor caret color inside text inputs and contenteditable elements. |
--sf-code-font-size |
PUBLIC |
knob |
code |
0.875em |
Font size for inline and <pre>. Usually slightly smaller than body text so monospace doesn't feel oversized. |
--sf-color-action |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-action-source-light), var(--sf-color-action-source-dark, oklch(from var(--sf-color-action-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Primary interactive color. Applied to filled buttons, active indicators, and brand accent surfaces. |
--sf-color-action--active |
PUBLIC |
consumption |
color |
var(--sf-color-action-xdark) |
Action color at pressed/active brightness. |
--sf-color-action--hover |
PUBLIC |
consumption |
color |
var(--sf-color-action-darker) |
Action color at hover brightness. |
--sf-color-action-100 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.88)) calc(c * 0.3) h) |
Very light action shade. Hover fills on white surfaces, badge backgrounds. |
--sf-color-action-200 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.72)) calc(c * 0.5) h) |
Light action shade. Subtle fills and outlined badge backgrounds. |
--sf-color-action-300 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.52)) calc(c * 0.72) h) |
Light-mid action shade. Borders on light backgrounds, low-emphasis fills. |
--sf-color-action-400 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.3)) calc(c * 0.88) h) |
Mid-light action shade. Disabled state fills, decorative accents. |
--sf-color-action-50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.95)) calc(c * 0.2) h) |
Lightest action tint. Background fill for subtle action-tinted surfaces. |
--sf-color-action-500 |
PUBLIC |
consumption |
color |
var(--sf-color-action) |
Mid action shade — the ‘pure’ hue. Accessible on both light and dark backgrounds. |
--sf-color-action-600 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.16)) calc(c * 0.96) h) |
Mid-dark action shade. Text on light surfaces, icon fills. |
--sf-color-action-700 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.36)) calc(c * 0.88) h) |
Dark action shade. Strong text and icon fills on light backgrounds. |
--sf-color-action-800 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.58)) calc(c * 0.72) h) |
Very dark action shade. High-contrast text on white. |
--sf-color-action-900 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.78)) calc(c * 0.52) h) |
Near-black action shade. Extreme contrast on white surfaces. |
--sf-color-action-950 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.9)) calc(c * 0.38) h) |
Darkest action tint. Near-black for dark-theme surface accents. |
--sf-color-action-a10 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.10) |
10% opacity action tint. Subtle hover or selected-row background. |
--sf-color-action-a30 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.30) |
30% opacity action tint. |
--sf-color-action-a5 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.05) |
5% opacity action tint. Barely-there hover highlight. |
--sf-color-action-a50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.50) |
50% opacity action tint. Mid-transparency badge or overlay. |
--sf-color-action-a80 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.80) |
80% opacity action tint. |
--sf-color-action-darker |
PUBLIC |
consumption |
color |
var(--sf-color-action-600) |
Deep action shade for high-contrast contexts. |
--sf-color-action-lighter |
PUBLIC |
consumption |
color |
var(--sf-color-action-400) |
Light action shade for soft accents. |
--sf-color-action-muted |
PUBLIC |
consumption |
color |
var(--sf-color-action-a30) |
Medium action fill — outlined button hover backgrounds. |
--sf-color-action-source-dark |
PUBLIC |
knob |
color |
oklch(0.70 0.198 235) |
Registered dark counterpart of --sf-color-action. Enables smooth CSS transitions when toggling between light and dark mode; without registration the browser cannot interpolate and transitions snap at 50%. |
--sf-color-action-source-light |
PUBLIC |
knob |
color |
oklch(0.50 0.22 235) |
OKLCH lightness source for the action color. Animate this to smoothly transition between light and dark brand themes. |
--sf-color-action-subtle |
PUBLIC |
consumption |
color |
var(--sf-color-action-a10) |
Lightest action tint — selected rows, active nav, chips. |
--sf-color-action-superdark |
PUBLIC |
consumption |
color |
var(--sf-color-action-950) |
Near-black action shade for maximum contrast on light surfaces. |
--sf-color-action-superlight |
PUBLIC |
consumption |
color |
var(--sf-color-action-50) |
Near-white action shade for maximum contrast on dark surfaces. |
--sf-color-action-tint |
PUBLIC |
consumption |
color |
var(--sf-color-action-a5) |
Near-transparent action tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-action-xdark |
PUBLIC |
consumption |
color |
var(--sf-color-action-800) |
Extra-dark action shade. |
--sf-color-action-xlight |
PUBLIC |
consumption |
color |
var(--sf-color-action-200) |
Extra-light action shade. |
--sf-color-base |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-base-source-light), var(--sf-color-base-source-dark, oklch(from var(--sf-color-base-source-light) clamp(0.16, calc(1.18 - l), 0.24) calc(c * 0.5) h))) |
Mode-adaptive base surface color. Drives the page canvas and the surface elevation family; not an interactive/brand role. |
--sf-color-base--active |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.08 + var(--sf-is-dark) * 0.16), 0.99) c h) |
Pressed/active surface derived from –sf-color-base for subtle background interactions. |
--sf-color-base--hover |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.04 + var(--sf-is-dark) * 0.08), 0.99) c h) |
Hover-state surface derived from –sf-color-base for subtle background interactions. |
--sf-color-base-100 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.94 c h) |
Very light base-surface level. |
--sf-color-base-200 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.88 c h) |
Light base-surface level. |
--sf-color-base-300 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.78 c h) |
Light-mid base-surface level. |
--sf-color-base-400 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.65 c h) |
Mid-light base-surface level. |
--sf-color-base-50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.97 c h) |
Lightest base-surface level. |
--sf-color-base-500 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.50 c h) |
Mid base-surface level. |
--sf-color-base-600 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.37 c h) |
Mid-dark base-surface level. |
--sf-color-base-700 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.27 c h) |
Dark base-surface level. |
--sf-color-base-800 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.17 c h) |
Very dark base-surface level. |
--sf-color-base-900 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.11 c h) |
Near-black base-surface level. |
--sf-color-base-950 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) 0.06 c h) |
Darkest base-surface level. |
--sf-color-base-a10 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) l c h / 0.10) |
10% opacity base-surface tint. |
--sf-color-base-a30 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) l c h / 0.30) |
30% opacity base-surface tint. |
--sf-color-base-a5 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) l c h / 0.05) |
5% opacity base-surface tint. |
--sf-color-base-a50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) l c h / 0.50) |
50% opacity base-surface tint. |
--sf-color-base-a80 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) l c h / 0.80) |
80% opacity base-surface tint. |
--sf-color-base-muted |
PUBLIC |
consumption |
color |
var(--sf-color-base-a30) |
Medium base-surface fill for muted containers or overlays. |
--sf-color-base-source-dark |
PUBLIC |
knob |
color |
oklch(0.22 0.003 250) |
Registered dark counterpart of --sf-color-base. Keep near-black for dark-mode surfaces and elevation offsets. |
--sf-color-base-source-light |
PUBLIC |
knob |
color |
oklch(0.96 0.006 250) |
OKLCH source color for the light-mode base surface. Keep near-white so –sf-color-bg, –sf-color-surface, and raised/inset levels have room to separate. |
--sf-color-base-subtle |
PUBLIC |
consumption |
color |
var(--sf-color-base-a10) |
Subtle base-surface tint for low-emphasis backgrounds. |
--sf-color-base-tint |
PUBLIC |
consumption |
color |
var(--sf-color-base-a5) |
Near-transparent base-surface tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-bg |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) calc(l + 0.02) c h) |
Base page / component background. The canvas all other surfaces layer on top of. |
--sf-color-bg--active |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.12) |
Background tint for pressed/active interactive elements. |
--sf-color-bg--disabled |
PUBLIC |
consumption |
color |
var(--sf-color-inset) |
Background for disabled interactive elements. |
--sf-color-bg--focus |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.06) |
Background tint for focused interactive elements. |
--sf-color-bg--hover |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.08) |
Background tint for hovered interactive elements (rows, list items, etc.). |
--sf-color-bg--selected |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.1) |
Background for selected items (checked rows, active nav links). |
--sf-color-black |
PUBLIC |
knob |
color |
oklch(0% 0 0) |
Absolute black reference value. |
--sf-color-border |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.70, calc(l + 0.35), 0.95) 0.005 h), oklch(from var(--sf-color-neutral) clamp(0.25, calc(l - 0.3), 0.55) 0.005 h) ) |
Default border for dividers and component edges. |
--sf-color-border--disabled |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-border--subtle) l 0 h / 0.5) |
Semi-transparent border for disabled element edges. |
--sf-color-border--focus |
PUBLIC |
consumption |
color |
var(--sf-color-action) |
Focus indicator border, used alongside –sf-focus-ring-color. |
--sf-color-border--strong |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.55, calc(l + 0.1), 0.85) 0.02 h), oklch(from var(--sf-color-neutral) clamp(0.38, calc(l - 0.1), 0.65) 0.02 h) ) |
Stronger border for visually prominent edges and active outlines. |
--sf-color-border--subtle |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.75, calc(l + 0.4), 0.97) 0.005 h), oklch(from var(--sf-color-neutral) clamp(0.20, calc(l - 0.38), 0.45) 0.005 h) ) |
Low-contrast border for subtle separation without strong visual weight. |
--sf-color-border--translucent |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.15) |
Translucent border for glass-morphism and frosted surfaces. |
--sf-color-code-bg |
PUBLIC |
consumption |
color |
var(--sf-color-inset) |
Background for inline elements. Usually a subtle tint of the inset surface. |
--sf-color-code-text |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-code-bg) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Text color for inline code and monospace preformatted text. |
--sf-color-danger |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-danger-source-light), var(--sf-color-danger-source-dark, oklch(from var(--sf-color-danger-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Destructive / danger state color. Used for delete actions, error alerts, and critical warnings. |
--sf-color-danger-muted |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-danger) l c h / 0.3) |
Medium danger fill for icon backgrounds and badge fills. |
--sf-color-danger-source-dark |
PUBLIC |
knob |
color |
oklch(0.71 0.198 12) |
Registered dark counterpart of --sf-color-danger. |
--sf-color-danger-source-light |
PUBLIC |
knob |
color |
oklch(0.48 0.22 12) |
OKLCH lightness source for the danger status color (covers destructive actions and form validation errors). |
--sf-color-danger-strong |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-danger-source-light) calc(l - 0.1) c h), oklch(from var(--sf-color-danger) clamp(0.70, calc(l + 0.15), 1) c h) ) |
High-contrast danger color for alert body text and icons. |
--sf-color-danger-subtle |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-danger) l c h / 0.12) |
Light danger tint for error row backgrounds and alert container fills. |
--sf-color-danger-tint |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-danger) l c h / 0.05) |
Near-transparent danger tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-dim |
PUBLIC |
knob |
color |
oklch(0 0 0 / 0.5) |
Backdrop overlay color for modals, drawers, and lightboxes. |
--sf-color-heading |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.05, calc(l - 0.4 - var(--sf-contrast-bias)), 0.35) c h), oklch(from var(--sf-color-neutral) clamp(0.70, calc(l + 0.25 + var(--sf-contrast-bias)), 1) c h) ) |
Heading text color. Slightly stronger contrast than body text for visual hierarchy. |
--sf-color-info |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-info-source-light), var(--sf-color-info-source-dark, oklch(from var(--sf-color-info-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Informational color for neutral tips, hints, and non-urgent notices. |
--sf-color-info-muted |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-info) l c h / 0.3) |
Medium info fill for info icons and hint chips. |
--sf-color-info-source-dark |
PUBLIC |
knob |
color |
oklch(0.71 0.162 235) |
Registered dark counterpart of --sf-color-info. |
--sf-color-info-source-light |
PUBLIC |
knob |
color |
oklch(0.48 0.18 235) |
OKLCH lightness source for the info status color. |
--sf-color-info-strong |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-info-source-light) calc(l - 0.1) c h), oklch(from var(--sf-color-info) clamp(0.70, calc(l + 0.15), 1) c h) ) |
High-contrast info color for hint body text. |
--sf-color-info-subtle |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-info) l c h / 0.12) |
Light info tint for informational note backgrounds. |
--sf-color-info-tint |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-info) l c h / 0.05) |
Near-transparent info tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-inset |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) calc(l - 0.02) c h) |
Slightly inset surface for nested areas — inputs, code blocks, sidebar panels. |
--sf-color-inverse |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) calc(1 - l) c h) |
Inverted (dark-on-light / light-on-dark) surface for high-contrast banners or tooltips. |
--sf-color-link |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.07, 0.48), 1) c h), oklch(from var(--sf-color-action) clamp(0.68, l, 1) c h) ) |
Default hyperlink color. |
--sf-color-link--active |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.21, 0.34), 1) c h), oklch(from var(--sf-color-action) clamp(0, max(l + 0.15, 0.74), 1) c h) ) |
Link color when actively pressed. |
--sf-color-link--disabled |
PUBLIC |
consumption |
color |
var(--sf-color-text--disabled) |
Disabled link color (low contrast, no interaction). |
--sf-color-link--hover |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.15, 0.40), 1) c h), oklch(from var(--sf-color-action) clamp(0, max(l + 0.10, 0.68), 1) c h) ) |
Link color on hover. |
--sf-color-link--underline |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) l c h / 0.3) |
Color of the link underline decoration. Defaults to a semi-transparent variant of the link color. |
--sf-color-link--visited |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.07, 0.48), 1) c calc(h + 60)), oklch(from var(--sf-color-action) clamp(0.68, l, 1) c calc(h + 60)) ) |
Visited link color. |
--sf-color-mark-bg |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-warning) l c h / 0.25) |
Background color for highlighted elements. |
--sf-color-mark-text |
PUBLIC |
knob |
color |
inherit |
Text color inside highlighted elements. |
--sf-color-neutral |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-neutral-source-light), var(--sf-color-neutral-source-dark, oklch(from var(--sf-color-neutral-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Neutral interactive color for low-emphasis actions and tertiary buttons. |
--sf-color-neutral--active |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-xdark) |
Neutral color at pressed/active brightness. |
--sf-color-neutral--hover |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-darker) |
Neutral color at hover brightness. |
--sf-color-neutral-100 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.88)) calc(c * 0.3) h) |
Very light neutral shade. |
--sf-color-neutral-200 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.72)) calc(c * 0.5) h) |
Light neutral shade at step 200 on the numeric scale. Subtle fills and outlined badge backgrounds. |
--sf-color-neutral-300 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.52)) calc(c * 0.72) h) |
Light-mid neutral shade. |
--sf-color-neutral-400 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.3)) calc(c * 0.88) h) |
Mid-light neutral shade. |
--sf-color-neutral-50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.95)) calc(c * 0.2) h) |
Lightest neutral tint. |
--sf-color-neutral-500 |
PUBLIC |
consumption |
color |
var(--sf-color-neutral) |
Mid neutral shade — the ‘pure’ hue. |
--sf-color-neutral-600 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.16)) calc(c * 0.96) h) |
Mid-dark neutral shade. |
--sf-color-neutral-700 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.36)) calc(c * 0.88) h) |
Dark neutral shade. |
--sf-color-neutral-800 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.58)) calc(c * 0.72) h) |
Very dark neutral shade. |
--sf-color-neutral-900 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.78)) calc(c * 0.52) h) |
Near-black neutral shade at step 900 on the numeric scale. Extreme contrast on light surfaces. |
--sf-color-neutral-950 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.9)) calc(c * 0.38) h) |
Darkest neutral tint. |
--sf-color-neutral-a10 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.10) |
10% opacity neutral tint. |
--sf-color-neutral-a30 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.30) |
30% opacity neutral tint. |
--sf-color-neutral-a5 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.05) |
5% opacity neutral tint. |
--sf-color-neutral-a50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.50) |
50% opacity neutral tint. |
--sf-color-neutral-a80 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) l c h / 0.80) |
80% opacity neutral tint. |
--sf-color-neutral-darker |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-600) |
Deep neutral shade for high-contrast contexts. |
--sf-color-neutral-lighter |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-400) |
Light neutral shade for soft accents — alias of –sf-color-neutral-400. |
--sf-color-neutral-muted |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-a30) |
Muted neutral fill for low-emphasis contexts. |
--sf-color-neutral-source-dark |
PUBLIC |
knob |
color |
oklch(0.69 0.0225 260) |
Registered dark counterpart of --sf-color-neutral. |
--sf-color-neutral-source-light |
PUBLIC |
knob |
color |
oklch(0.52 0.025 260) |
OKLCH lightness source for the neutral color. |
--sf-color-neutral-subtle |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-a10) |
Lightest neutral semantic tint. |
--sf-color-neutral-superdark |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-950) |
Near-black neutral shade for maximum contrast on light surfaces — alias of –sf-color-neutral-950. |
--sf-color-neutral-superlight |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-50) |
Near-white neutral shade. |
--sf-color-neutral-tint |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-a5) |
Near-transparent neutral tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-neutral-xdark |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-800) |
Extra-dark neutral shade. |
--sf-color-neutral-xlight |
PUBLIC |
consumption |
color |
var(--sf-color-neutral-200) |
Extra-light neutral shade. |
--sf-color-overlay |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) l c h / 0.9) |
Overlay surface for floating panels, sheets, and modals. |
--sf-color-primary |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-primary-source-light), var(--sf-color-primary-source-dark, oklch(from var(--sf-color-primary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Primary brand palette color. Independent from –sf-color-action by default; override either source token to couple or separate brand and action roles. |
--sf-color-primary--active |
PUBLIC |
consumption |
color |
var(--sf-color-primary-xdark) |
Primary color at pressed/active brightness. |
--sf-color-primary--hover |
PUBLIC |
consumption |
color |
var(--sf-color-primary-darker) |
Primary color at hover brightness. |
--sf-color-primary-100 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.88)) calc(c * 0.3) h) |
Very light primary shade. |
--sf-color-primary-200 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.72)) calc(c * 0.5) h) |
Light primary shade at step 200 on the numeric scale. Subtle fills and outlined badge backgrounds. |
--sf-color-primary-300 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.52)) calc(c * 0.72) h) |
Light-mid primary shade. |
--sf-color-primary-400 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.3)) calc(c * 0.88) h) |
Mid-light primary shade. |
--sf-color-primary-50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.95)) calc(c * 0.2) h) |
Lightest primary tint. |
--sf-color-primary-500 |
PUBLIC |
consumption |
color |
var(--sf-color-primary) |
Mid primary shade — the ‘pure’ hue. |
--sf-color-primary-600 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.16)) calc(c * 0.96) h) |
Mid-dark primary shade. |
--sf-color-primary-700 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.36)) calc(c * 0.88) h) |
Dark primary shade. |
--sf-color-primary-800 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.58)) calc(c * 0.72) h) |
Very dark primary shade. |
--sf-color-primary-900 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.78)) calc(c * 0.52) h) |
Near-black primary shade at step 900 on the numeric scale. Extreme contrast on light surfaces. |
--sf-color-primary-950 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.9)) calc(c * 0.38) h) |
Darkest primary tint. |
--sf-color-primary-a10 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) l c h / 0.10) |
10% opacity primary tint. |
--sf-color-primary-a30 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) l c h / 0.30) |
30% opacity primary tint. |
--sf-color-primary-a5 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) l c h / 0.05) |
5% opacity primary tint. |
--sf-color-primary-a50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) l c h / 0.50) |
50% opacity primary tint. |
--sf-color-primary-a80 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) l c h / 0.80) |
80% opacity primary tint. |
--sf-color-primary-darker |
PUBLIC |
consumption |
color |
var(--sf-color-primary-600) |
Deep primary shade. |
--sf-color-primary-lighter |
PUBLIC |
consumption |
color |
var(--sf-color-primary-400) |
Light primary shade for soft accents — alias of –sf-color-primary-400. |
--sf-color-primary-muted |
PUBLIC |
consumption |
color |
var(--sf-color-primary-a30) |
Muted primary fill. |
--sf-color-primary-source-dark |
PUBLIC |
knob |
color |
oklch(0.715 0.243 264) |
Registered dark counterpart of --sf-color-primary. |
--sf-color-primary-source-light |
PUBLIC |
knob |
color |
oklch(0.47 0.27 264) |
OKLCH lightness source for the primary color. |
--sf-color-primary-subtle |
PUBLIC |
consumption |
color |
var(--sf-color-primary-a10) |
Lightest primary semantic tint. |
--sf-color-primary-superdark |
PUBLIC |
consumption |
color |
var(--sf-color-primary-950) |
Near-black primary shade for maximum contrast on light surfaces — alias of –sf-color-primary-950. |
--sf-color-primary-superlight |
PUBLIC |
consumption |
color |
var(--sf-color-primary-50) |
Near-white primary shade. |
--sf-color-primary-tint |
PUBLIC |
consumption |
color |
var(--sf-color-primary-a5) |
Near-transparent primary tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-primary-xdark |
PUBLIC |
consumption |
color |
var(--sf-color-primary-800) |
Extra-dark primary shade. |
--sf-color-primary-xlight |
PUBLIC |
consumption |
color |
var(--sf-color-primary-200) |
Extra-light primary shade. |
--sf-color-raised |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-base) calc(l + 0.04) c h) |
Elevated card surface that floats above the page background. |
--sf-color-scheme |
PUBLIC |
knob |
color |
light dark |
Preferred color scheme hint (light / dark / normal). Sent to the browser to influence UA chrome styling. |
--sf-color-secondary |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-secondary-source-light), var(--sf-color-secondary-source-dark, oklch(from var(--sf-color-secondary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Raw secondary palette token for the secondary brand color. |
--sf-color-secondary--active |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-xdark) |
Secondary color at pressed/active brightness. |
--sf-color-secondary--hover |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-darker) |
Secondary color at hover brightness. |
--sf-color-secondary-100 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.88)) calc(c * 0.3) h) |
Very light secondary shade. |
--sf-color-secondary-200 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.72)) calc(c * 0.5) h) |
Light secondary shade at step 200 on the numeric scale. Subtle fills and outlined badge backgrounds. |
--sf-color-secondary-300 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.52)) calc(c * 0.72) h) |
Light-mid secondary shade. |
--sf-color-secondary-400 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.3)) calc(c * 0.88) h) |
Mid-light secondary shade. |
--sf-color-secondary-50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.95)) calc(c * 0.2) h) |
Lightest secondary tint. |
--sf-color-secondary-500 |
PUBLIC |
consumption |
color |
var(--sf-color-secondary) |
Mid secondary shade — the ‘pure’ hue. |
--sf-color-secondary-600 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.16)) calc(c * 0.96) h) |
Mid-dark secondary shade. |
--sf-color-secondary-700 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.36)) calc(c * 0.88) h) |
Dark secondary shade. |
--sf-color-secondary-800 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.58)) calc(c * 0.72) h) |
Very dark secondary shade. |
--sf-color-secondary-900 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.78)) calc(c * 0.52) h) |
Near-black secondary shade at step 900 on the numeric scale. Extreme contrast on light surfaces. |
--sf-color-secondary-950 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.9)) calc(c * 0.38) h) |
Darkest secondary tint. |
--sf-color-secondary-a10 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) l c h / 0.10) |
10% opacity secondary tint. |
--sf-color-secondary-a30 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) l c h / 0.30) |
30% opacity secondary tint. |
--sf-color-secondary-a5 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) l c h / 0.05) |
5% opacity secondary tint. |
--sf-color-secondary-a50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) l c h / 0.50) |
50% opacity secondary tint. |
--sf-color-secondary-a80 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) l c h / 0.80) |
80% opacity secondary tint. |
--sf-color-secondary-darker |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-600) |
Deep secondary shade. |
--sf-color-secondary-lighter |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-400) |
Light secondary shade for soft accents — alias of –sf-color-secondary-400. |
--sf-color-secondary-muted |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-a30) |
Muted secondary fill. |
--sf-color-secondary-source-dark |
PUBLIC |
knob |
color |
oklch(0.84 0.036 264) |
Registered dark counterpart of --sf-color-secondary. |
--sf-color-secondary-source-light |
PUBLIC |
knob |
color |
oklch(0.22 0.04 264) |
OKLCH lightness source for the secondary color. |
--sf-color-secondary-subtle |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-a10) |
Lightest secondary semantic tint. |
--sf-color-secondary-superdark |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-950) |
Near-black secondary shade for maximum contrast on light surfaces — alias of –sf-color-secondary-950. |
--sf-color-secondary-superlight |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-50) |
Near-white secondary shade. |
--sf-color-secondary-tint |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-a5) |
Near-transparent secondary tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-secondary-xdark |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-800) |
Extra-dark secondary shade. |
--sf-color-secondary-xlight |
PUBLIC |
consumption |
color |
var(--sf-color-secondary-200) |
Extra-light secondary shade. |
--sf-color-selection-bg |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-action-source-light) l c h / 0.28), oklch(from var(--sf-color-action-source-dark) clamp(0.62, calc(0.93 - l * 0.4), 0.78) c h / 0.55) ) |
Background color applied to browser text selections. |
--sf-color-selection-bg--alt |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-action-source-dark) clamp(0.62, calc(0.93 - l * 0.4), 0.78) c h / 0.55), oklch(from var(--sf-color-action-source-light) l c h / 0.28) ) |
Alt selection background — the inverse-scheme highlight fill for surfaces that deliberately flip colour scheme (e.g. a dark hero in light mode). |
--sf-color-selection-text |
PUBLIC |
knob |
color |
inherit |
Text color inside browser text selections. |
--sf-color-selection-text--alt |
PUBLIC |
knob |
color |
inherit |
Alt selection text colour paired with –sf-color-selection-bg–alt; inherits by default so the underlying text colour shows through. |
--sf-color-success |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-success-source-light), var(--sf-color-success-source-dark, oklch(from var(--sf-color-success-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Positive / success color for confirmation messages and completed-state indicators. |
--sf-color-success-muted |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-success) l c h / 0.3) |
Medium success fill for success icons and status chips. |
--sf-color-success-source-dark |
PUBLIC |
knob |
color |
oklch(0.70 0.144 145) |
Registered dark counterpart of --sf-color-success. |
--sf-color-success-source-light |
PUBLIC |
knob |
color |
oklch(0.50 0.16 145) |
OKLCH lightness source for the success status color. |
--sf-color-success-strong |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-success-source-light) calc(l - 0.15) c h), oklch(from var(--sf-color-success) clamp(0.70, calc(l + 0.15), 1) c h) ) |
High-contrast success color for confirmation message text. |
--sf-color-success-subtle |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-success) l c h / 0.12) |
Light success tint for confirmation backgrounds. |
--sf-color-success-tint |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-success) l c h / 0.05) |
Near-transparent success tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-surface |
PUBLIC |
consumption |
color |
var(--sf-color-base) |
Default component surface color. Alias of –sf-color-base; use –sf-color-raised for an elevated card/background level. |
--sf-color-tertiary |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-tertiary-source-light), var(--sf-color-tertiary-source-dark, oklch(from var(--sf-color-tertiary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Raw tertiary palette token for the third brand color. |
--sf-color-tertiary--active |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-xdark) |
Tertiary color at pressed/active brightness. |
--sf-color-tertiary--hover |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-darker) |
Tertiary color at hover brightness. |
--sf-color-tertiary-100 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.88)) calc(c * 0.3) h) |
Very light tertiary shade. |
--sf-color-tertiary-200 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.72)) calc(c * 0.5) h) |
Light tertiary shade at step 200 on the numeric scale. Subtle fills and outlined badge backgrounds. |
--sf-color-tertiary-300 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.52)) calc(c * 0.72) h) |
Light-mid tertiary shade. |
--sf-color-tertiary-400 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.3)) calc(c * 0.88) h) |
Mid-light tertiary shade. |
--sf-color-tertiary-50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) max(l, calc(l + (var(--sf-palette-tint-l) - l) * 0.95)) calc(c * 0.2) h) |
Lightest tertiary tint. |
--sf-color-tertiary-500 |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary) |
Mid tertiary shade — the ‘pure’ hue. |
--sf-color-tertiary-600 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.16)) calc(c * 0.96) h) |
Mid-dark tertiary shade. |
--sf-color-tertiary-700 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.36)) calc(c * 0.88) h) |
Dark tertiary shade. |
--sf-color-tertiary-800 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.58)) calc(c * 0.72) h) |
Very dark tertiary shade. |
--sf-color-tertiary-900 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.78)) calc(c * 0.52) h) |
Near-black tertiary shade at step 900 on the numeric scale. Extreme contrast on light surfaces. |
--sf-color-tertiary-950 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) min(l, calc(l + (var(--sf-palette-shade-l) - l) * 0.9)) calc(c * 0.38) h) |
Darkest tertiary tint. |
--sf-color-tertiary-a10 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) l c h / 0.10) |
10% opacity tertiary tint. |
--sf-color-tertiary-a30 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) l c h / 0.30) |
30% opacity tertiary tint. |
--sf-color-tertiary-a5 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) l c h / 0.05) |
5% opacity tertiary tint. |
--sf-color-tertiary-a50 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) l c h / 0.50) |
50% opacity tertiary tint. |
--sf-color-tertiary-a80 |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) l c h / 0.80) |
80% opacity tertiary tint. |
--sf-color-tertiary-darker |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-600) |
Deep tertiary shade. |
--sf-color-tertiary-lighter |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-400) |
Light tertiary shade for soft accents — alias of –sf-color-tertiary-400. |
--sf-color-tertiary-muted |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-a30) |
Muted tertiary fill. |
--sf-color-tertiary-source-dark |
PUBLIC |
knob |
color |
oklch(0.74 0.198 295) |
Registered dark counterpart of --sf-color-tertiary. |
--sf-color-tertiary-source-light |
PUBLIC |
knob |
color |
oklch(0.42 0.22 295) |
OKLCH lightness source for the tertiary color. |
--sf-color-tertiary-subtle |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-a10) |
Lightest tertiary semantic tint. |
--sf-color-tertiary-superdark |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-950) |
Near-black tertiary shade for maximum contrast on light surfaces — alias of –sf-color-tertiary-950. |
--sf-color-tertiary-superlight |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-50) |
Near-white tertiary shade. |
--sf-color-tertiary-tint |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-a5) |
Near-transparent tertiary tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-tertiary-xdark |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-800) |
Extra-dark tertiary shade. |
--sf-color-tertiary-xlight |
PUBLIC |
consumption |
color |
var(--sf-color-tertiary-200) |
Extra-light tertiary shade. |
--sf-color-text |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.05, calc(l - 0.4 - var(--sf-contrast-bias)), 0.35) c h), oklch(from var(--sf-color-neutral) clamp(0.70, calc(l + 0.25 + var(--sf-contrast-bias)), 1) c h) ) |
Primary text color. Contrasts against –sf-color-bg for body copy. |
--sf-color-text--disabled |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.55, calc(l + 0.25), 0.82) c h), oklch(from var(--sf-color-neutral) clamp(0.25, calc(l - 0.2), 0.55) c h) ) |
Text color for disabled UI elements. Intentionally low contrast. |
--sf-color-text--inverse |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.85, calc(l + 0.4), 0.98) c h), oklch(from var(--sf-color-neutral) clamp(0.05, calc(l - 0.4), 0.35) c h) ) |
Text color for use on dark/inverted backgrounds. |
--sf-color-text--muted |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.35, calc(l - var(--sf-contrast-bias)), 0.62) c h), oklch(from var(--sf-color-neutral) clamp(0.48, calc(l + var(--sf-contrast-bias)), 0.74) c h) ) |
Muted text for metadata, timestamps, and low-priority annotations. |
--sf-color-text--on-action |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-action) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground color for text on action-colored backgrounds. |
--sf-color-text--on-base |
PUBLIC |
consumption |
color |
var(--sf-color-text) |
Accessible foreground for text on base-colored backgrounds. |
--sf-color-text--on-danger |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-danger) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text on danger-colored backgrounds. |
--sf-color-text--on-info |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-info) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text on info-colored backgrounds. |
--sf-color-text--on-inverse |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-inverse) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text on inverted (dark-on-light / light-on-dark) backgrounds. |
--sf-color-text--on-neutral |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-neutral) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text placed on neutral-colored backgrounds. |
--sf-color-text--on-primary |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-primary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text placed on primary-colored backgrounds. |
--sf-color-text--on-secondary |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-secondary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text placed on secondary-colored backgrounds. |
--sf-color-text--on-success |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-success) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text on success-colored backgrounds. |
--sf-color-text--on-tertiary |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-tertiary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text placed on tertiary-colored backgrounds. |
--sf-color-text--on-warning |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-warning) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0) |
Accessible foreground for text on warning-colored backgrounds. |
--sf-color-text--placeholder |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.45, calc(l + 0.15), 0.75) c h), oklch(from var(--sf-color-neutral) clamp(0.35, calc(l - 0.1), 0.65) c h) ) |
Placeholder text color for inputs and textareas. |
--sf-color-text--subtle |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.15, calc(l - 0.25 - var(--sf-contrast-bias)), 0.45) c h), oklch(from var(--sf-color-neutral) clamp(0.55, calc(l + 0.1 + var(--sf-contrast-bias)), 0.90) c h) ) |
De-emphasised, lower-emphasis text (captions, labels, supporting copy). Second tier below –sf-color-text; sits between it and –sf-color-text–muted. |
--sf-color-warning |
PUBLIC |
consumption |
color |
light-dark(var(--sf-color-warning-source-light), var(--sf-color-warning-source-dark, oklch(from var(--sf-color-warning-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h))) |
Warning / caution color for non-critical alerts and degraded-state indicators. |
--sf-color-warning-muted |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-warning) l c h / 0.3) |
Medium warning fill for icons and caution chips. |
--sf-color-warning-source-dark |
PUBLIC |
knob |
color |
oklch(0.65 0.153 80) |
Registered dark counterpart of --sf-color-warning. |
--sf-color-warning-source-light |
PUBLIC |
knob |
color |
oklch(0.75 0.17 80) |
OKLCH lightness source for the warning status color. |
--sf-color-warning-strong |
PUBLIC |
consumption |
color |
light-dark( oklch(from var(--sf-color-warning-source-light) calc(l - 0.25) c h), oklch(from var(--sf-color-warning) clamp(0.70, calc(l + 0.05), 1) c h) ) |
High-contrast warning color for caution text. |
--sf-color-warning-subtle |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-warning) l c h / 0.12) |
Light warning tint for warning notification backgrounds. |
--sf-color-warning-tint |
PUBLIC |
consumption |
color |
oklch(from var(--sf-color-warning) l c h / 0.05) |
Near-transparent warning tint (5% alpha) for hover-state washes and the most subtle backgrounds. |
--sf-color-white |
PUBLIC |
knob |
color |
oklch(100% 0 0) |
Absolute white reference value. |
--sf-component-pad |
PUBLIC |
consumption |
component |
var(--sf-space-m) |
Standard inner padding for interactive components (buttons, form inputs, chips). |
--sf-container-default |
PUBLIC |
knob |
container |
75rem |
Default content container max-width (~1200px). |
--sf-container-full |
PUBLIC |
knob |
container |
100% |
Full-width container — removes the max-width constraint. |
--sf-container-narrow |
PUBLIC |
knob |
container |
38rem |
Narrow content max-width — ideal for article body and blog posts (~65ch). |
--sf-container-prose |
PUBLIC |
knob |
container |
65ch |
Prose max-width — optimised for readability (~75ch). |
--sf-container-wide |
PUBLIC |
knob |
container |
90rem |
Wide container for marketing / dashboard layouts (~1440px). |
--sf-content-gap |
PUBLIC |
consumption |
content |
var(--sf-space-s) |
Tight gap within related content (stack, flow, prose). Override globally to retune all tight primitives at once. |
--sf-contrast-bias |
PUBLIC-ADVANCED |
knob |
contrast |
0 |
Global text-contrast nudge. Positive values push derived reading-text colors toward the extremes (darker in light mode, lighter in dark). Default 0 (neutral). |
--sf-contrast-threshold |
PUBLIC-ADVANCED |
knob |
contrast |
0.6 |
OKLCH lightness crossover for auto-contrast on colored surfaces. Colors with L above this get dark text; below get light text. Default 0.6. |
--sf-density |
PUBLIC-ADVANCED |
knob |
density |
1 |
Compact ↔ comfortable dial for interactive control geometry (the –sf-size-* rung ladder). Default 1; below 1 packs controls tighter (dashboards, data tables), above 1 loosens them. A deliberate design/user choice, not a viewport response — orthogonal to –sf-space-scale (whitespace) and –sf-section-scale (section rhythm). The –sf-touch-target accessibility floor is independent, so a small value can’t shrink native controls below the WCAG target. Like the other global multipliers it is a :root dial (the size ladder is computed at :root and inherits, so nested overrides don’t retroactively rescale it). |
--sf-display-l-line-height |
PUBLIC |
knob |
display |
1 |
Line height for large display text (–sf-text-display-l). Very tight to avoid excessive gaps at oversized sizes. |
--sf-display-m-line-height |
PUBLIC |
knob |
display |
1.05 |
Line height for medium display text (–sf-text-display-m). |
--sf-display-s-line-height |
PUBLIC |
consumption |
display |
var(--sf-leading-tight) |
Line height for small display text (–sf-text-display-s). |
--sf-divider-color |
PUBLIC |
consumption |
divider |
var(--sf-color-border) |
Color of horizontal/vertical divider rules. |
--sf-divider-gap |
PUBLIC |
consumption |
divider |
var(--sf-space-m) |
Spacing (margin) around divider elements. |
--sf-divider-style |
PUBLIC |
knob |
divider |
solid |
Border style of dividers. |
--sf-divider-width |
PUBLIC |
consumption |
divider |
var(--sf-border-width-1) |
Stroke width of horizontal and vertical divider rules. |
--sf-drop-shadow-l |
PUBLIC |
consumption |
drop |
drop-shadow(0 8px 16px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7))) |
Large CSS filter: drop-shadow for prominent illustrated or cut-out elements. |
--sf-drop-shadow-m |
PUBLIC |
consumption |
drop |
drop-shadow(0 4px 6px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))) |
Medium CSS filter: drop-shadow for elevated icons and card thumbnails. |
--sf-drop-shadow-s |
PUBLIC |
consumption |
drop |
drop-shadow(0 1px 2px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1.5), 0.7))) |
Small CSS filter: drop-shadow. Use filter (not box-shadow) for elements with transparent areas — SVGs, PNGs, cutout images. |
--sf-drop-shadow-xl |
PUBLIC |
consumption |
drop |
drop-shadow(0 16px 32px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3), 0.7))) |
Extra-large CSS filter: drop-shadow for hero-scale illustrated or cut-out elements. |
--sf-drop-shadow-xs |
PUBLIC |
consumption |
drop |
drop-shadow(0 0.5px 1px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1), 0.7))) |
Extra-small CSS filter: drop-shadow, for the subtlest depth on small icons and cutout images. |
--sf-duration-fast |
PUBLIC |
consumption |
duration |
calc(150ms * var(--sf-motion-scale)) |
Fast duration (~150ms). Hover transitions, tooltip appear. |
--sf-duration-instant |
PUBLIC |
consumption |
duration |
calc(100ms * var(--sf-motion-scale)) |
Near-instant duration (~100ms). Micro-interactions and cursor-follow effects. |
--sf-duration-none |
PUBLIC |
knob |
duration |
0ms |
0ms duration. Disables transitions (respects prefers-reduced-motion). |
--sf-duration-normal |
PUBLIC |
consumption |
duration |
calc(250ms * var(--sf-motion-scale)) |
Normal duration (~250ms). Default for most transitions. |
--sf-duration-slow |
PUBLIC |
consumption |
duration |
calc(400ms * var(--sf-motion-scale)) |
Slow duration (~400ms). Emphasis transitions, drawers. |
--sf-duration-slower |
PUBLIC |
consumption |
duration |
calc(600ms * var(--sf-motion-scale)) |
Extra-slow duration (~600ms). Page-level enter/exit transitions. |
--sf-ease-bounce |
PUBLIC |
knob |
ease |
linear(0, 0.35 18%, 1 32%, 0.86 42%, 1.02 56%, 0.98 72%, 1) |
Bounce easing. Playful overshooting effect. |
--sf-ease-elastic |
PUBLIC |
knob |
ease |
linear(0, 0.3, 1.2, 0.9, 1.05, 1) |
Elastic easing. Spring-like overshooting effect. |
--sf-ease-in |
PUBLIC |
knob |
ease |
cubic-bezier(0.5, 0, 0.75, 0.25) |
Accelerating easing. Use for elements leaving the viewport. |
--sf-ease-in-out |
PUBLIC |
knob |
ease |
cubic-bezier(0.4, 0, 0.2, 1) |
Symmetric easing. Use for elements that move within the viewport. |
--sf-ease-linear |
PUBLIC |
knob |
ease |
linear |
Linear easing. Use for progress indicators and spinner rotations. |
--sf-ease-out |
PUBLIC |
knob |
ease |
cubic-bezier(0.25, 0, 0.15, 1) |
Decelerating easing. Use for elements entering the viewport. |
--sf-ease-overshoot |
PUBLIC |
knob |
ease |
linear(0, 0.6 30%, 1.08 55%, 0.98 75%, 1) |
Subtle overshoot easing. Softer spring effect. |
--sf-ease-spring |
PUBLIC |
knob |
ease |
linear(0, 0.5, 1.1, 0.95, 1.02, 1) |
Spring easing. Natural physics-based motion. |
--sf-field-block |
PUBLIC |
consumption |
field |
var(--sf-space-xs) |
Vertical (block) padding inside form fields. |
--sf-field-required-marker |
PUBLIC |
knob |
field |
" *" |
CSS content value for required-field markers (e.g. “ *”). Used by pseudo-elements in the .required utility pattern. |
--sf-fluid-max-vw |
PUBLIC-ADVANCED |
knob |
fluid |
90 |
Maximum viewport width (in rem) at which the fluid scale clamps to its largest values. Default 90rem (~1440px). Part of the fluid scale engine. |
--sf-fluid-min-vw |
PUBLIC-ADVANCED |
knob |
fluid |
22.5 |
Minimum viewport width (in rem) at which the fluid scale clamps to its smallest values. Default 22.5rem (~360px). Part of the fluid scale engine. |
--sf-fluid-width |
PUBLIC |
knob |
fluid |
100vw |
Fluid interpolation driver — the length term every fluid clamp() below measures against. Universal syntax (“*”) not “": a registered requires a computationally-independent initial-value, and 100vw (viewport-dependent) is not one. The real default lives on… |
--sf-focus-ring-color |
PUBLIC |
consumption |
focus |
var(--sf-color-action) |
Color of the keyboard focus ring. Ensure sufficient contrast against all background surfaces. |
--sf-focus-ring-offset |
PUBLIC |
knob |
focus |
2px |
Gap between the element edge and the focus ring. |
--sf-focus-ring-shadow |
PUBLIC-ADVANCED |
consumption |
focus |
0 0 0 var(--sf-focus-ring-offset) var(--sf-color-bg, var(--sf-color-base-source-light, #fff)), 0 0 0 calc(var(--sf-focus-ring-offset) + var(--sf-focus-ring-width)) var(--sf-focus-ring-color) |
Computed box-shadow value for the focus ring — two-layer technique: offset shadow in bg color, then ring shadow in focus-ring color. Tune via –sf-focus-ring-width and –sf-focus-ring-color instead of overriding this directly. |
--sf-focus-ring-style |
PUBLIC |
knob |
focus |
solid |
Border style of the focus ring (solid, dashed, dotted). |
--sf-focus-ring-width |
PUBLIC |
knob |
focus |
2px |
Stroke width of the focus ring outline. |
--sf-font-body |
PUBLIC |
knob |
font |
system-ui, -apple-system, sans-serif |
Font family stack for body text. Override to set your primary typeface. |
--sf-font-display |
PUBLIC |
consumption |
font |
var(--sf-font-heading) |
Font family for display/marketing text. Override for large headline typefaces. |
--sf-font-features |
PUBLIC-ADVANCED |
knob |
font |
normal |
OpenType feature-settings string for body text (e.g. ‘ss01’, ‘cv11’). Default ‘normal’. Override on :root or a subtree to enable ligatures, alternate glyphs, etc. |
--sf-font-geometric |
PUBLIC |
knob |
font |
"Avenir", "Montserrat", "Corbel", "URW Gothic", source-sans-pro, sans-serif |
Geometric sans-serif slot — circular letterforms for brand alternates. |
--sf-font-heading |
PUBLIC |
consumption |
font |
var(--sf-font-body) |
Font family for headings. Defaults to display if not overridden separately. |
--sf-font-humanist |
PUBLIC |
knob |
font |
"Seravek", "Gill Sans Nova", "Ubuntu", "Calibri", "DejaVu Sans", source-sans-pro, sans-serif |
Humanist sans-serif slot — warm, readable alternate typeface. |
--sf-font-mono |
PUBLIC |
knob |
font |
ui-monospace, monospace |
Monospace font family for code, pre, and kbd elements. |
--sf-font-numeric |
PUBLIC |
knob |
font |
tabular-nums |
font-variant-numeric shorthand (e.g. tabular-nums) for aligned numeric data. |
--sf-font-slab |
PUBLIC |
knob |
font |
"Rockwell", "Rockwell Nova", "Roboto Slab", "DejaVu Serif", "Sitka Small", serif |
Slab-serif slot for editorial or display headings. |
--sf-font-variation |
PUBLIC-ADVANCED |
knob |
font |
normal |
Variable-font axis settings for body text (e.g. “wght” 450). Default ‘normal’. Override on :root or a subtree to activate variable-font axes. |
--sf-font-weight-body |
PUBLIC |
consumption |
font |
var(--sf-font-weight-normal) |
Font weight for body text (typically 400 / normal). |
--sf-font-weight-bold |
PUBLIC |
knob |
font |
700 |
Strong emphasis weight (700). |
--sf-font-weight-display |
PUBLIC |
consumption |
font |
var(--sf-font-weight-bold) |
Font weight for display-size text. |
--sf-font-weight-heading |
PUBLIC |
consumption |
font |
var(--sf-font-weight-semibold) |
Font weight for headings (typically 600–700). |
--sf-font-weight-interactive |
PUBLIC |
consumption |
font |
var(--sf-font-weight-semibold) |
Font weight for interactive role text — buttons, badges, and navigation labels. Defaults to semibold. |
--sf-font-weight-light |
PUBLIC |
knob |
font |
300 |
Light weight (300). Use sparingly — check contrast at small sizes. |
--sf-font-weight-medium |
PUBLIC |
knob |
font |
500 |
Medium weight (500). Subtle emphasis without full bold. |
--sf-font-weight-normal |
PUBLIC |
knob |
font |
400 |
Normal / regular weight (400). |
--sf-font-weight-semibold |
PUBLIC |
knob |
font |
600 |
Semibold weight (600). Common for labels and subheadings. |
--sf-font-weight-strong |
PUBLIC |
consumption |
font |
var(--sf-font-weight-bold) |
Font weight for strong/emphasis inline role. Defaults to bold. |
--sf-gap |
PUBLIC |
consumption |
gap |
var(--sf-space-m) |
Default gap between components (the loose rhythm). Layout primitives like cluster/grid/sidebar default to it. Override globally to retune them all at once, or set a primitive token (e.g. –sf-cluster-gap) for one element. |
--sf-gradient-action |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch 135deg, var(--sf-color-action), oklch(from var(--sf-color-action) calc(l - 0.08) c h)) |
Gradient using action palette colors (light to saturated). Core-4 parity with the primary/secondary/tertiary gradients; drives the default .sf-btn–gradient fill. |
--sf-gradient-brand |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) l c calc(h + 30))) |
Multi-stop brand gradient spanning primary and secondary palette colors. Use for hero backgrounds and brand accents. |
--sf-gradient-fade--b |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch to bottom, transparent, var(--sf-color-bg)) |
Fade-to-bottom gradient (transparent → surface). Use to fade content into a background below (infinite scroll fade, content cutoff). |
--sf-gradient-fade--l |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch to left, transparent, var(--sf-color-bg)) |
Fade-to-left gradient. Use to indicate left-side scrollable overflow. |
--sf-gradient-fade--r |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch to right, transparent, var(--sf-color-bg)) |
Fade-to-right gradient. Use to indicate right-side scrollable overflow. |
--sf-gradient-fade--t |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch to top, transparent, var(--sf-color-bg)) |
Fade-to-top gradient (transparent → surface). Use to fade content into a background above. |
--sf-gradient-primary |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) calc(l - 0.08) c h)) |
Gradient using primary palette colors (light to saturated). |
--sf-gradient-secondary |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch 135deg, var(--sf-color-secondary), oklch(from var(--sf-color-secondary) calc(l - 0.08) c h)) |
Gradient using secondary palette colors. |
--sf-gradient-surface |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklab 180deg, var(--sf-color-surface), var(--sf-color-bg)) |
Subtle surface-color gradient for depth layering and glass effects. |
--sf-gradient-tertiary |
PUBLIC |
consumption |
gradient |
linear-gradient(in oklch 135deg, var(--sf-color-tertiary), oklch(from var(--sf-color-tertiary) calc(l - 0.08) c h)) |
Gradient using tertiary palette colors. |
--sf-gutter |
PUBLIC |
consumption |
gutter |
var(--sf-space-l) |
Wide page/section-edge gutter (used by center/container). Override to set the page-edge breathing room across breakpoints. |
--sf-h1-font-weight |
PUBLIC |
consumption |
h1 |
var(--sf-font-weight-heading) |
Font weight for <h1>. |
--sf-h1-letter-spacing |
PUBLIC |
consumption |
h1 |
var(--sf-tracking-tight) |
Letter-spacing for <h1>. Typically slightly negative at large sizes. |
--sf-h1-line-height |
PUBLIC |
consumption |
h1 |
var(--sf-leading-tight) |
Line height for <h1>. Tighter than body to avoid excessive whitespace at large sizes. |
--sf-h1-max-width |
PUBLIC |
knob |
h1 |
none |
Max-inline-size cap for <h1>. Default none (unconstrained). Set to a ch value (e.g. 20ch) to prevent wide headings from spanning the full column on large screens. |
--sf-h1-size |
PUBLIC |
consumption |
h1 |
var(--sf-text-4xl) |
Font size for <h1>. |
--sf-h2-font-weight |
PUBLIC |
consumption |
h2 |
var(--sf-font-weight-heading) |
Font weight for <h2>. |
--sf-h2-letter-spacing |
PUBLIC |
consumption |
h2 |
var(--sf-tracking-tight) |
Letter-spacing for <h2>. |
--sf-h2-line-height |
PUBLIC |
consumption |
h2 |
var(--sf-leading-tight) |
Line height for <h2>. |
--sf-h2-max-width |
PUBLIC |
knob |
h2 |
none |
Max-inline-size cap for <h2>. Default none. |
--sf-h2-size |
PUBLIC |
consumption |
h2 |
var(--sf-text-3xl) |
Font size for <h2>. |
--sf-h3-font-weight |
PUBLIC |
consumption |
h3 |
var(--sf-font-weight-heading) |
Font weight for <h3>. |
--sf-h3-letter-spacing |
PUBLIC |
consumption |
h3 |
var(--sf-tracking-normal) |
Letter-spacing for <h3>. |
--sf-h3-line-height |
PUBLIC |
consumption |
h3 |
var(--sf-leading-snug) |
Line height for <h3>. |
--sf-h3-max-width |
PUBLIC |
knob |
h3 |
none |
Max-inline-size cap for <h3>. Default none. |
--sf-h3-size |
PUBLIC |
consumption |
h3 |
var(--sf-text-2xl) |
Font size for <h3>. |
--sf-h4-font-weight |
PUBLIC |
consumption |
h4 |
var(--sf-font-weight-heading) |
Font weight for <h4>. |
--sf-h4-letter-spacing |
PUBLIC |
consumption |
h4 |
var(--sf-tracking-normal) |
Letter-spacing for <h4>. |
--sf-h4-line-height |
PUBLIC |
consumption |
h4 |
var(--sf-leading-snug) |
Line height for <h4>. |
--sf-h4-max-width |
PUBLIC |
knob |
h4 |
none |
Max-inline-size cap for <h4>. Default none. |
--sf-h4-size |
PUBLIC |
consumption |
h4 |
var(--sf-text-xl) |
Font size for <h4>. |
--sf-h5-font-weight |
PUBLIC |
consumption |
h5 |
var(--sf-font-weight-heading) |
Font weight for <h5>. |
--sf-h5-letter-spacing |
PUBLIC |
consumption |
h5 |
var(--sf-tracking-normal) |
Letter-spacing for <h5>. |
--sf-h5-line-height |
PUBLIC |
consumption |
h5 |
var(--sf-leading-normal) |
Line height for <h5>. |
--sf-h5-max-width |
PUBLIC |
knob |
h5 |
none |
Max-inline-size cap for <h5>. Default none. |
--sf-h5-size |
PUBLIC |
consumption |
h5 |
var(--sf-text-l) |
Font size for <h5>. |
--sf-h6-font-weight |
PUBLIC |
consumption |
h6 |
var(--sf-font-weight-heading) |
Font weight for <h6>. |
--sf-h6-letter-spacing |
PUBLIC |
consumption |
h6 |
var(--sf-tracking-wide) |
Letter-spacing for <h6>. |
--sf-h6-line-height |
PUBLIC |
consumption |
h6 |
var(--sf-leading-normal) |
Line height for <h6>. |
--sf-h6-max-width |
PUBLIC |
knob |
h6 |
none |
Max-inline-size cap for <h6>. Default none. |
--sf-h6-size |
PUBLIC |
consumption |
h6 |
var(--sf-text-m) |
Font size for <h6>. |
--sf-header-height |
PUBLIC |
consumption |
header |
clamp( var(--sf-header-height-mobile), calc((var(--sf-header-height-desktop) - var(--sf-header-height-mobile)) / ((var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * 1rem) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-header-height-mobile)), var(--sf-header-height-desktop)) |
Total height of the sticky page header. Used by –sf-sticky-offset to prevent content from hiding under it. |
--sf-header-height-desktop |
PUBLIC |
knob |
header |
5rem |
Header height at desktop breakpoints. |
--sf-header-height-mobile |
PUBLIC |
knob |
header |
3.5rem |
Header height at mobile breakpoints. |
--sf-heading-color |
PUBLIC |
consumption |
heading |
var(--sf-color-heading) |
Text color for all headings (h1–h6). Alias of –sf-color-heading. |
--sf-heading-font-family |
PUBLIC |
consumption |
heading |
var(--sf-font-heading) |
Font family for all headings. Alias of –sf-font-heading. |
--sf-heading-text-wrap |
PUBLIC |
knob |
heading |
balance |
text-wrap for headings. ‘balance’ prevents orphaned short last lines in multi-line headings. |
--sf-hover-grow-scale |
PUBLIC |
knob |
hover |
1.05 |
Scale factor applied by .sf-hover-grow on hover (>1 grows). |
--sf-hover-lift |
PUBLIC |
knob |
hover |
0.25em |
Translate distance for .sf-hover-float (up) and .sf-hover-sink (down) on hover. |
--sf-hover-shrink-scale |
PUBLIC |
knob |
hover |
0.95 |
Scale factor applied by .sf-hover-shrink on hover (<1 shrinks). |
--sf-hover-slide |
PUBLIC |
knob |
hover |
0.5em |
Translate distance for .sf-hover-slide-start / .sf-hover-slide-end on hover. |
--sf-icon-2xl |
PUBLIC |
knob |
icon |
4em |
2× large icon size (~40px+). Hero or onboarding icons. |
--sf-icon-l |
PUBLIC |
knob |
icon |
2em |
Large icon size (~24px). Standalone icon buttons. |
--sf-icon-m |
PUBLIC |
knob |
icon |
1.5em |
Medium icon size (~20px). Default for inline and button icons. |
--sf-icon-s |
PUBLIC |
knob |
icon |
1em |
Small icon size (~16px). Dense UI chrome. |
--sf-icon-xl |
PUBLIC |
knob |
icon |
3em |
Extra-large icon size (~32px). Feature icons. |
--sf-icon-xs |
PUBLIC |
knob |
icon |
0.875em |
Extra-small icon size (~12px). Inline indicators. |
--sf-is-dark |
INTERNAL |
knob |
is |
0 |
Mode flag — 0 in light mode, 1 in dark mode. Set automatically by [data-theme=’dark’] and prefers-color-scheme. Drives dark-mode formula branches in calc(). |
--sf-leading-normal |
PUBLIC |
knob |
leading |
1.5 |
Normal line height (~1.5). Default for body text. |
--sf-leading-relaxed |
PUBLIC |
knob |
leading |
1.625 |
Relaxed line height (~1.65). Long-form reading text. |
--sf-leading-snug |
PUBLIC |
knob |
leading |
1.3 |
Snug line height (~1.35). Use for sub-headings. |
--sf-leading-taper |
PUBLIC-ADVANCED |
knob |
leading |
0 |
Progressive leading tightener: each step up the type scale subtracts step-index × taper from its per-size line-height token. Default 0 keeps the curated defaults. |
--sf-leading-tight |
PUBLIC |
knob |
leading |
1.1 |
Tight line height (~1.2). Use for large display headings. |
--sf-link-external-label |
PUBLIC |
knob |
link |
"opens in a new window or external site" |
Accessible name for the .sf-link-external marker glyph, read by screen readers via the CSS content alt-text syntax. Localise or clear alongside –sf-link-external-marker. |
--sf-link-external-marker |
PUBLIC |
knob |
link |
" \\2197" |
CSS content value appended to external links (e.g. “ ↗”). Used by the .external-link pseudo-element pattern. |
--sf-link-underline-offset |
PUBLIC |
knob |
link |
0.15em |
Vertical offset of the link underline from the text baseline. |
--sf-link-underline-thickness |
PUBLIC |
knob |
link |
auto |
Stroke width of the link underline. |
--sf-lumlocker |
PUBLIC-ADVANCED |
knob |
lumlocker |
0.65 |
OKLCH lightness lock value for light mode. When :root has [data-lumlocker], the 4 brand colors (primary, secondary, tertiary, action) are remapped to this L so their contrast remains constant as hues shift. Dark mode uses –sf-lumlocker-dark. |
--sf-lumlocker-dark |
PUBLIC-ADVANCED |
knob |
lumlocker |
clamp(0.5, calc(1.18 - var(--sf-lumlocker)), 0.92) |
OKLCH lightness lock value for dark mode under [data-lumlocker]. Defaults to clamp(0.5, calc(1.18 - var(–sf-lumlocker)), 0.92) — the mirror of the light L around the light/dark background midpoint — so the lock keeps equivalent contrast against the surface in both themes. Set explicitly to break the mirror. |
--sf-mask-scrim-end |
PUBLIC-ADVANCED |
consumption |
mask |
var(--sf-space-l) |
End stop for edge-fade mask gradients. Mirrors –sf-mask-scrim-start for the trailing edge of a scroll container. |
--sf-mask-scrim-start |
PUBLIC-ADVANCED |
consumption |
mask |
var(--sf-space-l) |
Start stop for edge-fade mask gradients on scroll reels / overflow containers. Use in mask-image: linear-gradient(…, transparent var(–sf-mask-scrim-start)) to fade content near the leading edge. |
--sf-media-radius |
PUBLIC |
knob |
media |
0 |
Radius + space: syntax enables CSS transitions on layout values — border-radius/padding/gap etc. now interpolate instead of snapping. Shadow: syntax:"*" (no type in spec); inherits:true so :root values cascade normally; registers the properties formally for… |
--sf-motion-scale |
PUBLIC-ADVANCED |
knob |
motion |
1 |
Global motion multiplier. All transition and animation durations multiply by this factor. Set to 0 to disable all motion; reduce below 1 for snappier feel. |
--sf-object-fit |
PUBLIC |
knob |
object |
cover |
Default object-fit value for replaced elements (img, video). |
--sf-object-position |
PUBLIC |
knob |
object |
50% 50% |
Default object-position for replaced elements. |
--sf-opacity-disabled |
PUBLIC |
knob |
opacity |
0.45 |
Opacity for disabled UI elements (typically 0.4–0.5). |
--sf-opacity-muted |
PUBLIC |
knob |
opacity |
0.5 |
General de-emphasis opacity for secondary content, ghost elements, or non-primary layers. Default 0.5. |
--sf-optical-sizing |
PUBLIC-ADVANCED |
knob |
optical |
auto |
CSS font-optical-sizing value. ‘auto’ lets the browser optimize letterforms for the rendered size. Set ‘none’ to disable optical sizing. |
--sf-palette-shade-l |
PUBLIC-ADVANCED |
knob |
palette |
0.1 |
Absolute OKLCH lightness the shade steps (600-950) pull toward; sets how dark the darkest palette step can reach. Default 0.1. |
--sf-palette-tint-l |
PUBLIC-ADVANCED |
knob |
palette |
0.97 |
Absolute OKLCH lightness the tint steps (50-400) pull toward; sets how light the lightest palette step can reach. Default 0.97. |
--sf-print-base-size |
PUBLIC-ADVANCED |
knob |
print |
11pt |
Base font size for @media print stylesheets. Default 11pt. Override on :root to adjust printed body text size. |
--sf-print-page-margin |
PUBLIC-ADVANCED |
knob |
print |
2cm |
Page margin for printed output. Default 2cm. Maps to @page margin. |
--sf-print-page-size |
PUBLIC-ADVANCED |
knob |
print |
a4 |
Target paper size for printing. Default ‘a4’. Maps to @page size. Common values: a4, letter, legal. |
--sf-radius-2xl |
PUBLIC |
consumption |
radius |
calc(24px * var(--sf-radius-scale)) |
2× large radius (~20px). Rounded card variants. |
--sf-radius-2xs |
PUBLIC |
consumption |
radius |
calc(1px * var(--sf-radius-scale)) |
Extra-extra-small radius (~1px). Minimal rounding for very tight UI elements. |
--sf-radius-3xl |
PUBLIC |
consumption |
radius |
calc(32px * var(--sf-radius-scale)) |
3× large radius (~24px). Large rounded surfaces. |
--sf-radius-4xl |
PUBLIC |
consumption |
radius |
calc(48px * var(--sf-radius-scale)) |
4× large radius (~32px). Near-pill rounding. |
--sf-radius-full |
PUBLIC |
knob |
radius |
9999px |
Full rounding (50%). For circular elements like avatars. |
--sf-radius-l |
PUBLIC |
consumption |
radius |
calc(12px * var(--sf-radius-scale)) |
Large radius (~12px). Modals, popovers, panels. |
--sf-radius-m |
PUBLIC |
consumption |
radius |
calc(8px * var(--sf-radius-scale)) |
Medium radius (~6–8px). Default — inputs, standard buttons, cards. |
--sf-radius-none |
PUBLIC |
knob |
radius |
0 |
Zero border radius — square corners. |
--sf-radius-outer |
PUBLIC-ADVANCED |
consumption |
radius |
calc(var(--sf-radius-m) + var(--sf-component-pad)) |
Concentric corner helper: outer radius for a container that wraps content with inner radius of –sf-radius-m. Computed as –sf-radius-m + –sf-component-pad so corners align visually. |
--sf-radius-pill |
PUBLIC |
consumption |
radius |
var(--sf-radius-full) |
Pill rounding (9999px). Tags, toggle pills, status badges. |
--sf-radius-s |
PUBLIC |
consumption |
radius |
calc(4px * var(--sf-radius-scale)) |
Small radius (~4px). Badges, chips, small buttons. |
--sf-radius-scale |
PUBLIC-ADVANCED |
knob |
radius |
1 |
Global border-radius multiplier. Scales the entire radius ramp up (>1) or down (<1) from one knob. Set to 0 for sharp corners everywhere. |
--sf-radius-xl |
PUBLIC |
consumption |
radius |
calc(16px * var(--sf-radius-scale)) |
Extra-large radius (~16px). Prominent cards and feature blocks. |
--sf-radius-xs |
PUBLIC |
consumption |
radius |
calc(2px * var(--sf-radius-scale)) |
Hairline radius (~2px). Subtle rounding for tight components. |
--sf-ratio-3-2 |
PUBLIC |
knob |
ratio |
3 / 2 |
3:2 aspect ratio. Common for landscape photography. |
--sf-ratio-4-3 |
PUBLIC |
knob |
ratio |
4 / 3 |
4:3 aspect ratio. Classic screen ratio. |
--sf-ratio-cinema |
PUBLIC |
knob |
ratio |
21 / 9 |
2.39:1 cinematic widescreen aspect ratio. |
--sf-ratio-golden |
PUBLIC |
knob |
ratio |
1.618 / 1 |
1.618:1 golden ratio. Harmonious proportions. |
--sf-ratio-portrait |
PUBLIC |
knob |
ratio |
3 / 4 |
2:3 portrait aspect ratio. |
--sf-ratio-square |
PUBLIC |
knob |
ratio |
1 |
1:1 square aspect ratio. Use for avatars, icon containers, and square thumbnails. |
--sf-ratio-video |
PUBLIC |
knob |
ratio |
16 / 9 |
16:9 widescreen video aspect ratio. Use for video embeds and video-thumbnail containers. |
--sf-safe-bottom |
PUBLIC-ADVANCED |
knob |
safe |
env(safe-area-inset-bottom, 0px) |
Device safe-area inset at the bottom edge (home indicator, gesture bar). Resolves to env(safe-area-inset-bottom, 0px). Use for fixed footers. |
--sf-safe-left |
PUBLIC-ADVANCED |
knob |
safe |
env(safe-area-inset-left, 0px) |
Device safe-area inset at the left edge. Resolves to env(safe-area-inset-left, 0px). |
--sf-safe-right |
PUBLIC-ADVANCED |
knob |
safe |
env(safe-area-inset-right, 0px) |
Device safe-area inset at the right edge (rounded corners, home indicator). Resolves to env(safe-area-inset-right, 0px). |
--sf-safe-top |
PUBLIC-ADVANCED |
knob |
safe |
env(safe-area-inset-top, 0px) |
Device safe-area inset at the top edge (notch, Dynamic Island). Resolves to env(safe-area-inset-top, 0px). Use for fixed headers on notched devices. |
--sf-scroll-timeline-range-end |
PUBLIC-ADVANCED |
knob |
scroll |
cover 30% |
animation-range end value for scroll-driven entrance effects. Default ‘cover 30%’. Override on an element to control when its entrance animation finishes. |
--sf-scroll-timeline-range-exit-end |
PUBLIC |
knob |
scroll |
exit 100% |
Scroll-timeline range at which a scroll-out exit animation finishes. Default: exit 100%. |
--sf-scroll-timeline-range-exit-start |
PUBLIC |
knob |
scroll |
cover 70% |
Scroll-timeline range at which a scroll-out exit animation begins. Default: cover 70%. |
--sf-scroll-timeline-range-start |
PUBLIC-ADVANCED |
knob |
scroll |
entry 0% |
animation-range start value for scroll-driven entrance effects. Default ‘entry 0%’. Override on an element to control when its entrance animation begins. |
--sf-scrollbar-thumb |
PUBLIC |
consumption |
scrollbar |
var(--sf-color-neutral) |
Color of the custom scrollbar thumb. |
--sf-scrollbar-track |
PUBLIC |
knob |
scrollbar |
transparent |
Color of the custom scrollbar track. |
--sf-section-pad |
PUBLIC |
consumption |
section |
var(--sf-section-pad--m) |
Default vertical padding for full-width page sections. |
--sf-section-pad--2xl |
PUBLIC |
consumption |
section |
calc(var(--sf-space-4xl) * 2 * var(--sf-section-scale)) |
2× large section vertical padding for hero areas. |
--sf-section-pad--l |
PUBLIC |
consumption |
section |
calc(var(--sf-space-4xl) * var(--sf-section-scale)) |
Large section vertical padding. |
--sf-section-pad--m |
PUBLIC |
consumption |
section |
calc(var(--sf-space-3xl) * var(--sf-section-scale)) |
Medium section vertical padding. |
--sf-section-pad--s |
PUBLIC |
consumption |
section |
calc(var(--sf-space-2xl) * var(--sf-section-scale)) |
Small section vertical padding. |
--sf-section-pad--xl |
PUBLIC |
consumption |
section |
calc(var(--sf-space-4xl) * 1.5 * var(--sf-section-scale)) |
Extra-large vertical section padding for hero and feature sections. |
--sf-section-pad--xs |
PUBLIC |
consumption |
section |
calc(var(--sf-space-xl) * var(--sf-section-scale)) |
Extra-small vertical section padding for compact in-page modules. |
--sf-section-scale |
PUBLIC-ADVANCED |
knob |
section |
1 |
Global multiplier applied to every –sf-section-pad–* size — one dial re-rhythms all section padding (default 1). |
--sf-shadow-2xl |
PUBLIC |
consumption |
shadow |
0 4px 12px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.6), 0.7)), 0 20px 60px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 4), 0.7)), 0 40px 100px -8px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 5), 0.7)) |
Largest shadow for hero cards, feature highlights, and marketing surfaces. |
--sf-shadow-color |
PUBLIC-ADVANCED |
consumption |
shadow |
oklch(from var(--sf-color-neutral) var(--sf-shadow-lightness) c h) |
Near-black shadow tint derived from the neutral palette. Inherits the neutral’s chroma and hue so colorless neutrals produce colorless shadows. |
--sf-shadow-glow |
PUBLIC |
consumption |
shadow |
0 0 15px 2px oklch(from var(--sf-shadow-glow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7)) |
Glow box-shadow shorthand for decorative glow effects. |
--sf-shadow-glow-color |
PUBLIC-ADVANCED |
consumption |
shadow |
var(--sf-color-primary) |
Ambient glow tint used by –sf-shadow-glow. Override to retint all glow shadows; opacity and dark-mode boost are controlled by –sf-shadow-strength. |
--sf-shadow-inner |
PUBLIC |
consumption |
shadow |
inset 0 2px 4px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7)) |
Inset shadow for pressed states, inset inputs, and recessed surfaces. |
--sf-shadow-l |
PUBLIC |
consumption |
shadow |
0 2px 4px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 8px 24px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3), 0.7)), 0 16px 48px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7)) |
Large shadow for drawers, sidebars, and prominent elevated surfaces. |
--sf-shadow-lightness |
PUBLIC |
knob |
shadow |
0.15 |
OKLCH lightness component of the shadow color. Lower = denser-looking shadows. Tune this independently of –sf-shadow-strength to control tonal weight without affecting opacity. |
--sf-shadow-m |
PUBLIC |
consumption |
shadow |
0 1px 3px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 4px 12px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7)) |
Medium shadow for cards and content panels. |
--sf-shadow-none |
PUBLIC |
knob |
shadow |
none |
No box-shadow (resets inherited shadows). Use to explicitly remove elevation. |
--sf-shadow-s |
PUBLIC |
consumption |
shadow |
0 1px 2px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 2px 6px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, var(--sf-shadow-strength), 0.7)) |
Small shadow for chips, tags, and inline elevated surfaces. |
--sf-shadow-strength |
PUBLIC-ADVANCED |
knob |
shadow |
calc(0.08 + var(--sf-is-dark) * 0.17) |
Base opacity for the entire shadow ramp. Auto-boosted in dark mode via –sf-is-dark. Override with calc() to preserve the adaptation: e.g. calc(0.12 + var(–sf-is-dark) * 0.17). |
--sf-shadow-xl |
PUBLIC |
consumption |
shadow |
0 2px 8px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 12px 36px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3.5), 0.7)), 0 24px 72px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7)) |
Extra-large shadow for modals, dialogs, and high-elevation sheets. |
--sf-shadow-xs |
PUBLIC |
consumption |
shadow |
0 1px 2px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)) |
Extra-small shadow for barely-elevated elements (focused inputs, small chips). |
--sf-size-l |
PUBLIC |
consumption |
size |
calc(3rem * var(--sf-density)) |
Large UI component height (~48px). Touch-friendly interactive elements. |
--sf-size-m |
PUBLIC |
consumption |
size |
calc(2.5rem * var(--sf-density)) |
~40px UI component height (scale rung m). The default .sf-btn min-height. |
--sf-size-s |
PUBLIC |
consumption |
size |
calc(2rem * var(--sf-density)) |
Small UI component height (~32px). Compact buttons and input variants. |
--sf-size-xl |
PUBLIC |
consumption |
size |
calc(3.5rem * var(--sf-density)) |
Extra-large interactive component height (~56px). For oversized or prominently touch-friendly controls. |
--sf-size-xs |
PUBLIC |
consumption |
size |
calc(1.5rem * var(--sf-density)) |
Extra-small interactive component height (~24px). For very compact inline elements and micro-controls. |
--sf-space-2xl |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 3) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 3) * 1rem)) * var(--sf-space-scale)) |
48px-equivalent spacing. Large section spacing. |
--sf-space-2xs |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -3) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -3) * 1rem)) * var(--sf-space-scale)) |
4px-equivalent spacing. Tight inline gaps, icon-to-text padding. |
--sf-space-3xl |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 4) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 4) * 1rem)) * var(--sf-space-scale)) |
64px-equivalent spacing. Extra-large layout gaps. |
--sf-space-4xl |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 5) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 5) * 1rem)) * var(--sf-space-scale)) |
96px-equivalent spacing. Hero / page-level section padding. |
--sf-space-base-max |
PUBLIC-ADVANCED |
knob |
space |
2 |
Maximum base spacing unit (rem) at the widest viewport. Drives the top of the fluid spacing ramp. Part of the fluid scale engine. |
--sf-space-base-min |
PUBLIC-ADVANCED |
knob |
space |
1 |
Minimum base spacing unit (rem) at the narrowest viewport. Drives the bottom of the fluid spacing ramp. Part of the fluid scale engine. |
--sf-space-l |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 1) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 1) * 1rem)) * var(--sf-space-scale)) |
24px-equivalent spacing. Card padding, section dividers. |
--sf-space-m |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * 1rem), calc((var(--sf-space-base-max) - var(--sf-space-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * 1rem), calc(var(--sf-space-base-max) * 1rem)) * var(--sf-space-scale)) |
16px-equivalent spacing. Default unit, widely applicable. |
--sf-space-none |
PUBLIC |
knob |
space |
0 |
Zero spacing. Explicit alias for clarity in utility classes. |
--sf-space-px |
PUBLIC |
knob |
space |
1px |
1px spacing. Hairline offset for fine adjustments. |
--sf-space-ratio-max |
PUBLIC-ADVANCED |
knob |
space |
1.333 |
Modular spacing ratio at the widest viewport. Controls step-to-step growth in the spacing ramp. Default 1.333 (perfect fourth). Part of the fluid scale engine. |
--sf-space-ratio-min |
PUBLIC-ADVANCED |
knob |
space |
1.25 |
Modular spacing ratio at the narrowest viewport. Controls step-to-step growth in the spacing ramp. Default 1.25 (major third). Part of the fluid scale engine. |
--sf-space-s |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -1) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -1) * 1rem)) * var(--sf-space-scale)) |
12px-equivalent spacing. Form field inner padding, narrow gaps. |
--sf-space-scale |
PUBLIC-ADVANCED |
knob |
space |
1 |
Global spacing multiplier. Scales the fluid spacing ramp. Increase above 1 for airier layouts; reduce below 1 for compact UIs. |
--sf-space-xl |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 2) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 2) * 1rem)) * var(--sf-space-scale)) |
32px-equivalent spacing. Feature row gaps, generous section padding. |
--sf-space-xs |
PUBLIC |
consumption |
space |
calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -2) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -2) * 1rem)) * var(--sf-space-scale)) |
8px-equivalent spacing. Compact list rows, tab padding. |
--sf-stagger-step |
PUBLIC |
knob |
stagger |
75ms |
Per-item delay increment for the .sf-stagger utility. One knob retunes the whole staggered sequence; the class multiplies it by each child’s index and by –sf-motion-scale. |
--sf-sticky-offset |
PUBLIC |
consumption |
sticky |
clamp( var(--sf-sticky-offset-mobile), calc((var(--sf-sticky-offset-desktop) - var(--sf-sticky-offset-mobile)) / ((var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * 1rem) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-sticky-offset-mobile)), var(--sf-sticky-offset-desktop)) |
top offset for position: sticky elements, accounting for the header height. |
--sf-sticky-offset-desktop |
PUBLIC |
consumption |
sticky |
var(--sf-header-height-desktop) |
Sticky offset at desktop breakpoints. |
--sf-sticky-offset-mobile |
PUBLIC |
consumption |
sticky |
var(--sf-header-height-mobile) |
Sticky offset at mobile breakpoints. |
--sf-text-2xl |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 3) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 3) * 1rem)) * var(--sf-text-scale)) |
2× large font size (~24px). Section headings. |
--sf-text-2xl-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-heading) |
Font weight for 2×-large text. |
--sf-text-2xl-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-normal) |
Letter-spacing for 2×-large text. |
--sf-text-2xl-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-snug) - 6 * var(--sf-leading-taper)) |
Line height for 2×-large text. |
--sf-text-2xl-max-width |
PUBLIC |
knob |
text |
none |
Optimal line length for 2×-large text. |
--sf-text-2xs |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -3) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -3) * 1rem)) * var(--sf-text-scale)) |
Extra-extra-small font size (~11px). Fine print, badges. |
--sf-text-2xs-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-body) |
Font weight for 2×-extra-small text. Override to deviate from the global weight at this size. |
--sf-text-2xs-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-normal) |
Letter-spacing for 2×-extra-small text. |
--sf-text-2xs-line-height |
PUBLIC |
consumption |
text |
var(--sf-leading-relaxed) |
Line height for 2×-extra-small text. |
--sf-text-2xs-max-width |
PUBLIC |
knob |
text |
55ch |
Optimal line length (max-width in ch) for 2×-extra-small text. |
--sf-text-3xl |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 4) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 4) * 1rem)) * var(--sf-text-scale)) |
3× large font size (~30px). Major headings. |
--sf-text-3xl-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-heading) |
Font weight for 3×-large text. |
--sf-text-3xl-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-tight) |
Letter-spacing for 3×-large text. Typically negative to tighten large headings. |
--sf-text-3xl-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-tight) - 7 * var(--sf-leading-taper)) |
Line height for 3×-large text. |
--sf-text-3xl-max-width |
PUBLIC |
knob |
text |
none |
Optimal line length for 3×-large text. |
--sf-text-4xl |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 5) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 5) * 1rem)) * var(--sf-text-scale)) |
4× large font size (~36px). Display-level headings. |
--sf-text-4xl-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-heading) |
Font weight for 4×-large text. |
--sf-text-4xl-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-tight) |
Letter-spacing for 4×-large text. |
--sf-text-4xl-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-tight) - 8 * var(--sf-leading-taper)) |
Line height for 4×-large text. |
--sf-text-4xl-max-width |
PUBLIC |
knob |
text |
none |
Optimal line length for 4×-large text. |
--sf-text-base-max |
PUBLIC-ADVANCED |
knob |
text |
1.25 |
Maximum base font size (rem) at the widest viewport. End point for the fluid type scale at wide screens. Part of the fluid scale engine. |
--sf-text-base-min |
PUBLIC-ADVANCED |
knob |
text |
1 |
Minimum base font size (rem) at the narrowest viewport. Starting point for the fluid type scale at narrow screens. Part of the fluid scale engine. |
--sf-text-display-base-max |
PUBLIC-ADVANCED |
knob |
text |
3 |
Maximum display/hero font size (rem) at the widest viewport. Drives the ceiling of the fluid display type scale. Part of the fluid scale engine. |
--sf-text-display-base-min |
PUBLIC-ADVANCED |
knob |
text |
2.4 |
Minimum display/hero font size (rem) at the narrowest viewport. Drives the floor of the fluid display type scale. Part of the fluid scale engine. |
--sf-text-display-l |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc((var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 2) - var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc(var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 2) * 1rem)) * var(--sf-text-display-scale)) |
Large display font size (~68px+). Oversized hero text. |
--sf-text-display-m |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc((var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 1) - var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc(var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 1) * 1rem)) * var(--sf-text-display-scale)) |
Medium display font size (~54px). Hero headings. |
--sf-text-display-s |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-display-base-min) * 1rem), calc((var(--sf-text-display-base-max) - var(--sf-text-display-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * 1rem), calc(var(--sf-text-display-base-max) * 1rem)) * var(--sf-text-display-scale)) |
Small display font size (~42px). Hero sub-headings. |
--sf-text-display-scale |
PUBLIC-ADVANCED |
knob |
text |
1 |
Multiplier applied only to the display/hero type scale (–sf-text-display-*). Tune headline impact independently of body text. |
--sf-text-l |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 1) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 1) * 1rem)) * var(--sf-text-scale)) |
Large font size (~18px). Lead paragraphs, prominent labels. |
--sf-text-l-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-body) |
Font weight for large text. |
--sf-text-l-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-normal) |
Letter-spacing for large text. |
--sf-text-l-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-normal) - 4 * var(--sf-leading-taper)) |
Line height for large text. |
--sf-text-l-max-width |
PUBLIC |
knob |
text |
none |
Optimal line length for large text. |
--sf-text-m |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * 1rem), calc((var(--sf-text-base-max) - var(--sf-text-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * 1rem), calc(var(--sf-text-base-max) * 1rem)) * var(--sf-text-scale)) |
Medium / base font size (~16px). Typical body text. |
--sf-text-m-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-body) |
Font weight for medium (body) text. |
--sf-text-m-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-normal) |
Letter-spacing for medium text. |
--sf-text-m-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-normal) - 3 * var(--sf-leading-taper)) |
Line height for medium text. |
--sf-text-m-max-width |
PUBLIC |
knob |
text |
65ch |
Optimal reading line length for medium text (~65–75ch). |
--sf-text-ratio-max |
PUBLIC-ADVANCED |
knob |
text |
1.333 |
Modular type scale ratio at the widest viewport. Controls step-to-step size growth. Default 1.333. Part of the fluid scale engine. |
--sf-text-ratio-min |
PUBLIC-ADVANCED |
knob |
text |
1.25 |
Modular type scale ratio at the narrowest viewport. Controls step-to-step size growth in the fluid type ramp. Default 1.25. Part of the fluid scale engine. |
--sf-text-s |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -1) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -1) * 1rem)) * var(--sf-text-scale)) |
Small font size (~14px). Secondary content, UI annotations. |
--sf-text-s-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-body) |
Font weight for small text. |
--sf-text-s-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-normal) |
Letter-spacing for small text. |
--sf-text-s-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-relaxed) - 2 * var(--sf-leading-taper)) |
Line height for small text. |
--sf-text-s-max-width |
PUBLIC |
knob |
text |
65ch |
Optimal line length for small text. |
--sf-text-scale |
PUBLIC-ADVANCED |
knob |
text |
1 |
Global type-size multiplier. Scales the entire fluid type scale. 1.08 gives noticeably larger body text without breaking layout. |
--sf-text-shadow-l |
PUBLIC |
consumption |
text |
0 4px 8px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7)) |
Large text-shadow for high-contrast text over busy or dark image backgrounds. |
--sf-text-shadow-m |
PUBLIC |
consumption |
text |
0 2px 4px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7)) |
Medium text-shadow. Use for text overlaid on images to improve legibility. |
--sf-text-shadow-none |
PUBLIC |
knob |
text |
none |
Removes text-shadow (use to explicitly reset inherited shadows). |
--sf-text-shadow-s |
PUBLIC |
consumption |
text |
0 1px 2px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1.5), 0.7)) |
Small text-shadow for subtle depth on display headings. |
--sf-text-shadow-xl |
PUBLIC |
consumption |
text |
0 8px 16px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3), 0.7)) |
Extra-large text-shadow for maximum legibility over busy or high-contrast image backgrounds. |
--sf-text-shadow-xs |
PUBLIC |
consumption |
text |
0 0.5px 1px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1), 0.7)) |
Extra-small text-shadow for the subtlest depth on body text. |
--sf-text-xl |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 2) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 2) * 1rem)) * var(--sf-text-scale)) |
Extra-large font size (~20px). Sub-headings, callout text. |
--sf-text-xl-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-body) |
Font weight for extra-large text. |
--sf-text-xl-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-normal) |
Letter-spacing for extra-large text. |
--sf-text-xl-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-snug) - 5 * var(--sf-leading-taper)) |
Line height for extra-large text. |
--sf-text-xl-max-width |
PUBLIC |
knob |
text |
none |
Optimal line length for extra-large text. |
--sf-text-xs |
PUBLIC |
consumption |
text |
calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -2) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (var(--sf-fluid-width) - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -2) * 1rem)) * var(--sf-text-scale)) |
Extra-small font size (~12px). Labels, captions, metadata. |
--sf-text-xs-font-weight |
PUBLIC |
consumption |
text |
var(--sf-font-weight-body) |
Font weight for extra-small text. |
--sf-text-xs-letter-spacing |
PUBLIC |
consumption |
text |
var(--sf-tracking-normal) |
Letter-spacing for extra-small text. |
--sf-text-xs-line-height |
PUBLIC |
consumption |
text |
calc(var(--sf-leading-relaxed) - 1 * var(--sf-leading-taper)) |
Line height for extra-small text. |
--sf-text-xs-max-width |
PUBLIC |
knob |
text |
60ch |
Optimal line length for extra-small text. |
--sf-theme-transition-duration |
PUBLIC |
consumption |
theme |
calc(300ms * var(--sf-motion-scale)) |
Duration of the .sf-theme-transition animated color-scheme crossfade. Scales with –sf-motion-scale so reduced-motion preferences are respected. Default 300ms. |
--sf-touch-target |
PUBLIC |
knob |
touch |
2.75rem |
Minimum touch-target size for interactive elements per WCAG 2.5.5. Fixed 44px anchor, independent of the –sf-size-* scale. |
--sf-tracking-normal |
PUBLIC |
knob |
tracking |
0 |
Normal letter-spacing (0). Default for body text. |
--sf-tracking-tight |
PUBLIC |
knob |
tracking |
-0.025em |
Tight letter-spacing (slightly negative). Suitable for large headings. |
--sf-tracking-wide |
PUBLIC |
knob |
tracking |
0.025em |
Wide letter-spacing. Use for small-caps labels. |
--sf-tracking-wider |
PUBLIC |
knob |
tracking |
0.05em |
Wider letter-spacing for strongly spaced labels. |
--sf-tracking-widest |
PUBLIC |
knob |
tracking |
0.1em |
Widest letter-spacing for all-caps microcopy. |
--sf-transition-colors |
PUBLIC |
consumption |
transition |
color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-normal) var(--sf-ease-out), text-decoration-color var(--sf-duration-normal) var(--sf-ease-out), fill var(--sf-duration-normal) var(--sf-ease-out), stroke var(--sf-duration-normal) var(--sf-ease-out) |
Transition shorthand for color-related properties (color, background, border-color). |
--sf-transition-enter |
PUBLIC |
consumption |
transition |
color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-normal) var(--sf-ease-out), box-shadow var(--sf-duration-normal) var(--sf-ease-out), opacity var(--sf-duration-normal) var(--sf-ease-out), transform var(--sf-duration-normal) var(--sf-ease-out), filter var(--sf-duration-normal) var(--sf-ease-out) |
Enter-phase transition (ease-out). Use on elements appearing in the viewport. |
--sf-transition-exit |
PUBLIC |
consumption |
transition |
color var(--sf-duration-fast) var(--sf-ease-in), background-color var(--sf-duration-fast) var(--sf-ease-in), border-color var(--sf-duration-fast) var(--sf-ease-in), box-shadow var(--sf-duration-fast) var(--sf-ease-in), opacity var(--sf-duration-fast) var(--sf-ease-in), transform var(--sf-duration-fast) var(--sf-ease-in), filter var(--sf-duration-fast) var(--sf-ease-in) |
Exit-phase transition (ease-in). Use on elements leaving the viewport. |
--sf-transition-fast |
PUBLIC |
consumption |
transition |
color var(--sf-duration-fast) var(--sf-ease-out), background-color var(--sf-duration-fast) var(--sf-ease-out), border-color var(--sf-duration-fast) var(--sf-ease-out), box-shadow var(--sf-duration-fast) var(--sf-ease-out), opacity var(--sf-duration-fast) var(--sf-ease-out), transform var(--sf-duration-fast) var(--sf-ease-out), filter var(--sf-duration-fast) var(--sf-ease-out) |
Fast-duration transition shorthand. |
--sf-transition-form-field |
PUBLIC |
consumption |
transition |
color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), text-decoration-color var(--sf-duration-normal) var(--sf-ease-out), fill var(--sf-duration-normal) var(--sf-ease-out), stroke var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-fast) var(--sf-ease-out), box-shadow var(--sf-duration-fast) var(--sf-ease-out), opacity var(--sf-duration-fast) var(--sf-ease-out) |
Transition shorthand optimised for form fields: color and background at normal pace so label color shifts feel natural; border, shadow, and opacity at fast pace so focus rings appear crisply. |
--sf-transition-opacity |
PUBLIC |
consumption |
transition |
opacity var(--sf-duration-normal) var(--sf-ease-out) |
Transition shorthand for opacity. |
--sf-transition-overlay |
PUBLIC |
consumption |
transition |
overlay var(--sf-duration-normal) allow-discrete, display var(--sf-duration-normal) allow-discrete |
Transition shorthand for overlay fades (opacity + visibility). |
--sf-transition-shadow |
PUBLIC |
consumption |
transition |
box-shadow var(--sf-duration-normal) var(--sf-ease-out) |
Transition shorthand for box-shadow. |
--sf-transition-slow |
PUBLIC |
consumption |
transition |
color var(--sf-duration-slow) var(--sf-ease-in-out), background-color var(--sf-duration-slow) var(--sf-ease-in-out), border-color var(--sf-duration-slow) var(--sf-ease-in-out), box-shadow var(--sf-duration-slow) var(--sf-ease-in-out), opacity var(--sf-duration-slow) var(--sf-ease-in-out), transform var(--sf-duration-slow) var(--sf-ease-in-out), filter var(--sf-duration-slow) var(--sf-ease-in-out) |
Slow-duration transition shorthand. |
--sf-transition-transform |
PUBLIC |
consumption |
transition |
transform var(--sf-duration-normal) var(--sf-ease-out) |
Transition shorthand for transform. |
--sf-z-base |
PUBLIC |
knob |
z |
0 |
Base stacking level (1). Establishes a stacking context without elevation. |
--sf-z-below |
PUBLIC |
knob |
z |
-1 |
Z-index below stacking context base. For decorative pseudo-elements. |
--sf-z-dropdown |
PUBLIC |
knob |
z |
1020 |
Z-index for dropdown menus and select popups. |
--sf-z-fixed |
PUBLIC |
knob |
z |
1010 |
Z-index for position: fixed elements. |
--sf-z-modal |
PUBLIC |
knob |
z |
1040 |
Z-index for modal dialogs and their non-top-layer backdrop scrims. Sits above overlays and dropdowns. Default 1040. |
--sf-z-overlay |
PUBLIC |
knob |
z |
1030 |
Z-index for modal / dialog backdrops. |
--sf-z-raised |
PUBLIC |
knob |
z |
1 |
Raised elevation (50). Cards, sticky headers. |
--sf-z-sticky |
PUBLIC |
knob |
z |
1000 |
Z-index for position: sticky elements (navbars, table headers). |
--sf-z-toast |
PUBLIC |
knob |
z |
1050 |
Z-index for toast / snackbar notifications. |
--sf-z-tooltip |
PUBLIC |
knob |
z |
1060 |
Z-index for tooltips and transient floating notifications. Highest named layer in the z-index stack. Default 1060. |