Typography
VitNode's type system - the native system font, a type scale with built-in letter spacing, hierarchy, balanced headings and tabular numbers, shown live.
VitNode uses each device's own system font and a type scale that already knows its letter spacing. Zero font downloads, zero layout shift.
Font
system-ui: San Francisco · Segoe UI · Roboto
- CommunityRegular · 400
- CommunityMedium · 500
- CommunitySemibold · 600
font-sans is the system UI stack: San Francisco on Apple devices, Segoe UI on
Windows, Roboto on Android. Swap --font-sans in src/styles.css for a brand
font. Stick to three weights: font-normal, font-medium, font-semibold.
Type scale
- text-6xlHi there
- text-5xlWelcome
- text-4xlDashboard
- text-3xlCommunity
- text-2xlSettings
- text-xlTeam members
- text-lgNotifications
- text-baseYour changes were saved.
- text-smShow archived posts
- text-xsUpdated 2 hours ago
Every text-* size carries its own tracking: tighter as it grows, a little air
at text-xs. Pick the size and you're done. Don't add tracking-tight on top.
Sizes are rem, so the UI scales with the reader's browser font size.
Hierarchy
Notifications
Choose what lands in your inbox and what waits for you here.
Replies
Get an email when someone replies to a topic you started or follow. Replies to your own replies are bundled into one daily summary.
A few clear steps beat many similar ones. Weight and color do as much work as size.
<h2 className="text-2xl font-semibold text-balance">Notifications</h2>
<p className="text-muted-foreground text-sm leading-relaxed">
Choose what lands in your inbox.
</p>Balanced headings
Build a community your members actually enjoy visiting
Build a community your members actually enjoy visiting
text-balance evens out heading lines, so no word is left alone. Use
text-pretty on paragraphs.
Numbers that change
tabular-nums gives every digit the same width, so counters, prices and table
columns stop jiggling.
<span className="tabular-nums">{onlineCount} online</span>Body text rules
leading-relaxedon paragraphs, never belowtext-sm(14px) for reading.max-w-prosefor long text.text-xsonly for labels, badges and timestamps.