Docs
Search

Typography Tokens

This page covers Lism’s typography design tokens: font-family, font-size, line-height, and more.

FF: font-family

Tokens for font-family.

TokenVariableClass
base--ff--base-ff:base
accent--ff--accent-ff:accent
mono--ff--mono-ff:mono
Preview

base: English text, 漢字ひらがな

accent: English text, 漢字ひらがな

mono: English text, 漢字ひらがな

<p class="-ff:base -fz:xl">Lorem ipsum ...</p>
<p class="-ff:accent -fz:xl">Lorem ipsum ...</p>
<p class="-ff:mono -fz:xl">Lorem ipsum ...</p>

This site changes --ff--base for its body text, so this preview does not show the exact default.

FW: font-weight

Tokens for font-weight.

TokenVariableClassDefault value
light--fw--light-fw:light300
normal--fw--normal-fw:normal400
bold--fw--bold-fw:bold600

Numeric classes -fw:100 through -fw:900 are also available for fine-grained weight control.

Preview

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

<p class="-fw:light">Lorem ipsum ...</p>
<p class="-fw:normal">Lorem ipsum ...</p>
<p class="-fw:bold">Lorem ipsum ...</p>

FZ: font-size

Tokens for font-size.

TokenVariableClassDefault value
base--fz--base-fz:base1rem
2xs--fz--2xs-fz:2xs1em * 8 / 11
xs--fz--xs-fz:xs1em * 8 / 10
s--fz--s-fz:s1em * 8 / 9
m--fz--m-fz:m1em
l--fz--l-fz:l1em * 8 / 7
xl--fz--xl-fz:xl1em * 8 / 6
2xl--fz--2xl-fz:2xl1em * 8 / 5
3xl--fz--3xl-fz:3xl1em * 8 / 4
4xl--fz--4xl-fz:4xl1em * 8 / 3
5xl--fz--5xl-fz:5xl1em * 8 / 2
Preview
2xs

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

xs

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

s

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

base

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

l

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

xl

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

2xl

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

3xl

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

4xl

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

5xl

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

<p class="-fz:2xs">Lorem ipsum ...</p>
<p class="-fz:xs">Lorem ipsum ...</p>
<p class="-fz:s">Lorem ipsum ...</p>
<p class="-fz:m">Lorem ipsum ...</p>
<p class="-fz:base">Lorem ipsum ...</p>
<p class="-fz:l">Lorem ipsum ...</p>
<p class="-fz:xl">Lorem ipsum ...</p>
<p class="-fz:2xl">Lorem ipsum ...</p>
<p class="-fz:3xl">Lorem ipsum ...</p>
<p class="-fz:4xl">Lorem ipsum ...</p>

Font Size Scaling Rules

Lism scales font sizes using a harmonic series — a progression valued for both its mathematical and musical elegance.

This approach — sometimes called harmonic modular scaling — is also covered in resources like Every Layout.

By default, Lism CSS uses the harmonic series with numerator 8 as its scale.

On this documentation site, --fz-mol is set to 7 for English pages.

:root {
--fz-mol: 8;
--fz--5xl: calc(1em * var(--fz-mol) / (var(--fz-mol) - 6));
--fz--4xl: calc(1em * var(--fz-mol) / (var(--fz-mol) - 5));
--fz--3xl: calc(1em * var(--fz-mol) / (var(--fz-mol) - 4));
--fz--2xl: calc(1em * var(--fz-mol) / (var(--fz-mol) - 3));
--fz--xl: calc(1em * var(--fz-mol) / (var(--fz-mol) - 2));
--fz--l: calc(1em * var(--fz-mol) / (var(--fz-mol) - 1));
--fz--m: 1em;
--fz--s: calc(1em * var(--fz-mol) / (var(--fz-mol) + 1));
--fz--xs: calc(1em * var(--fz-mol) / (var(--fz-mol) + 2));
--fz--2xs: calc(1em * var(--fz-mol) / (var(--fz-mol) + 3));
}

HL: half-leading

Lism CSS takes a distinctive approach to line-height, managing it on every element through half-leading values (the spacing on each side, above and below, of a line): line-height is computed from the --hl variable.

The following tokens are available for --hl.

TokenVariableClassDefault value
xs--hl--xs-hl:xsvar(--hl-unit)
s--hl--s-hl:scalc(var(--hl-unit) * 2)
base--hl--base-hl:basecalc(var(--hl-unit) * 3)
l--hl--l-hl:lcalc(var(--hl-unit) * 4)
xl--hl--xl-hl:xlcalc(var(--hl-unit) * 5)

--hl-unit defaults to 0.125rem (≈ 2px).

Preview

0: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

xs: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

s: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

base: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

l: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

xl: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

<p class="-hl:xs">Lorem ipsum ...</p>
<p class="-hl:s">Lorem ipsum ...</p>
<p class="-hl:base">Lorem ipsum ...</p>
<p class="-hl:l">Lorem ipsum ...</p>
<p class="-hl:xl">Lorem ipsum ...</p>

For the design rationale, see Half-Leading (line-height).

LH: line-height

Tokens for --lh, which sets line-height as a ratio of the font size. Use them when line spacing should scale with the font size.

TokenVariableClassDefault value
xs--lh--xs-lh:xs1.25
s--lh--s-lh:s1.5
m--lh--m-lh:m1.75
l--lh--l-lh:l2
xl--lh--xl-lh:xl2.25

Each value matches the default hl scale at the base font size (1rem).

Preview

1: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

xs: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

s: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

m: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

l: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

xl: Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut. Labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut.

<p class="-lh:xs">Lorem ipsum ...</p>
<p class="-lh:s">Lorem ipsum ...</p>
<p class="-lh:m">Lorem ipsum ...</p>
<p class="-lh:l">Lorem ipsum ...</p>
<p class="-lh:xl">Lorem ipsum ...</p>

For when to use hl vs lh, see Half-Leading (line-height).

LTS: letter-spacing

Tokens for letter-spacing.

TokenVariableClassDefault value
base--lts--base-lts:base0em
xs--lts--xs-lts:xscalc(var(--lts--base) - 0.05em)
s--lts--s-lts:scalc(var(--lts--base) - 0.025em)
l--lts--l-lts:lcalc(var(--lts--base) + 0.05em)
xl--lts--xl-lts:xlcalc(var(--lts--base) + 0.1em)

--lts--base must be a length (normal cannot be used because the value goes into calc()). xs to xl are offsets from --lts--base, so changing --lts--base on :root shifts all of them. Overriding --lts--base on a descendant element does not affect xs to xl.

Preview
xs

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

s

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

base

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

l

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

xl

Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor Incididunt ut.

<p class="-lts:s">Lorem ipsum ...</p>
<p class="-lts:base">Lorem ipsum ...</p>
<p class="-lts:l">Lorem ipsum ...</p>

This site slightly adjusts --ff--base and --lts--base for its body text, so this preview does not show the exact defaults.

© 2026 Lism CSS.