snaix \ design language v0.4 · 2026.04.20 living document

the rules
of the house.

every page under snaix.homes is built from the pieces on this page. colors, types, motion, components. reference it when you extend the system; when in doubt, reach for what is already here.

§ 01

colors

three primaries on a warm paper ground. primaries are used as state: red for critical, yellow for focus, blue for action. neutrals do the rest of the work.

surfaces

--bg page background
--bg-raised raised surface (cards, panels)
--bg-inverse inverse surface (dark blocks)

text

--fg primary text
--fg-muted secondary text
--fg-faint tertiary, captions
--fg-inverse text on inverse surface

primaries

red
--red
error · recording · critical
yellow
--yellow
warning · focus · running
blue
--blue
link · success · actionable

neutral scale

--steel-1
--steel-3
--steel-5
--steel-7
--steel-9
--ink
§ 02

typography

two families. archivo for ui & display — geometric, humanist, with ss01 enabled. jetbrains mono for code & chrome. lowercase is the default for headings; it signals informality and system-level thinking.

.t-display
four tools / one hand
.t-h1
shipping out loud
.t-h2
why blake3
.t-h3
chunked hashing
.t-body
bcmr splits every file into 1 mib chunks. each chunk produces a leaf hash; leaves combine into a tree; the root is the blob id.
.t-small
section label · 01
.t-mono
$ bcmr cp ./data host:/srv/
.t-mono-sm
rev a3f109c · built 2026.04.14 14:22 utc
§ 03

text motion

text is animated as a first-class subject. random is cheap. use motion to direct attention — only on headings, hero copy, and metric callouts. body text is always static.

<BlockReveal/>
blockreveal is for titles
block-wipe across text. sweeps in from left, out to right. use for titles.
<Typewriter/>
character-by-character. use for code + commands.
<Scramble/>
characters resolve to final via noise. use for hashes, ids.
<Tally/>
0
counts up to value. use for stats, metrics, counts.
<CommandStream/>
scripted terminal session. lines stream in with timed pauses.
§ 04

components

the working pieces. every one is small, composable, and uses tokens — never hard-coded colors or sizes.

chips

default recording running shipped

buttons

panels

eyebrow

default panel

a bordered paper-raised surface. use for content groups, docs callouts, summary cards.

inverse

dark panel

same shape, ink surface. use for emphasized statements, terminal-adjacent content.

callouts (docs)

info
side note, build-up knowledge. blue bar on the left.
watch out
ambient warning. yellow bar. read before proceeding.
never
irreversible. red bar. do not do this.

margin note

[1] footnote-style annotation. use at section boundaries to tag the reader's attention without stealing it from the main column.

bauhaus shape mark

decorative composition. red-square + blue-circle + yellow-triangle. scale via the wrapper element.
§ 05

shapes

three geometric primitives, three primary colors. almost every decorative element on the site is one of these, rotated and cropped.

square · red
stability · blocks of text · the ground plane
circle · blue
links · state dots · actionable
triangle · yellow
focus · warning · directionality
§ 06

files

the on-disk layout under packages/theme/src/styles/. keep new work aligned to this shape — don't start new css files for component-scoped rules unless the component is itself a new page.

tokens.css design tokens, reset, type scale, responsive breakpoints, dark theme
theme.css theme toggle, persistence, data-theme attribute
motion.{css,ts} text motion primitives: Typewriter · Scramble · Tally · BlockReveal · CommandStream · GridFlip · TickerRow
layout.css TopBar · Footer · Panel · MarginNote · BauhausMark
portal.css portal page (snaix.homes landing)
home.css bcmr landing
pikpak.css pikpaktui landing
iconchanger.css iconchanger landing
claudit.css claudit landing
pages.css docs · install · changelog · about · cli
design-system.css this page
§ 07

principles

01

text first

type does the heavy lifting. every page should read well with all images disabled.

02

state as color

red · yellow · blue only communicate state. decoration uses neutrals.

03

motion is meaning

animation directs attention. if it is not pointing at something, remove it.

04

lowercase default

titles are lowercase. capitalization is reserved for product proper nouns.

05

no emoji

shapes, not pictograms. the bauhaus mark carries what an emoji would.

06

tokens, never values

colors and sizes come from vars. new components must accept both themes.