Typography
VARAHI uses two self-hosted type families and a single 8-step scale that every section reads from. You never pick a font size in a section — you pick a role.
Rendered type hierarchy
The two families
Why two families? Inter is a neutral, highly legible UI face that disappears
behind the product. JetBrains Mono is used only where a value is technical — a measured spec, a stock counter, a price — and mono makes those read as data rather
than as marketing copy. Using it for the eyebrow labels is what gives the theme its
“instrument panel” character.
The scale
Line height and tracking
How fonts are loaded
Self-hosted, no third-party request
Self-hosted, no third-party request
Every font file lives in
assets/ and is served from your own CDN. There is no
request to Google Fonts, which means no extra DNS lookup, no third-party
connection on your customer’s critical path, and no GDPR question.font-display: swap
font-display: swap
Text renders immediately in the fallback face and swaps to the real font when it
arrives. No invisible text, no layout shift.
Latin-only subsets
Latin-only subsets
Each face is subset to Latin + Latin Extended, cutting the payload by roughly
two thirds. Cyrillic, Greek and Vietnamese are excluded deliberately.
Mobile loads less
Mobile loads less
Below 768px, VARAHI loads only Inter 400 and the icon font. JetBrains Mono and
Inter 500 are declared inside a
min-width: 768px media query, so phones never
download them. This is why mobile pages stay light.Font files in the theme
Changing the fonts
VARAHI ships with Inter and JetBrains Mono hard-coded because the type system depends on their metrics. If you must change them:1
Add your font file
Upload it to
assets/. Use woff2 and subset to Latin.2
Declare the @font-face
Add it in the
<style> block in layout/theme.liquid, alongside the existing
declarations.3
Point the tokens at it
In
snippets/css-variables.liquid, change --font-display, --font-heading,
--font-body, --font-label and --font-mono.4
Re-check the type scale
A different family has different metrics. Re-check that
--text-display-lg at
--leading-display does not clip descenders, and that your longest uppercase
label still fits its container.Color system
The tokens that sit behind the type.
Header & navigation
Logo lockup, mega menu, localization.
