← Design system
Components

Every component, labeled

The complete BASIC CHAOS component set. Each entry names its CSS classes and source file. House shape: round controls, soft elements (6px), hard planes. Toggle night above — every component reads the mode from one body class.

Type scale

.bc-display-xl .bc-display .bc-head .bc-title .bc-label .bc-muted .bc-mono — tokens.css
Display
The working shout
Title

Body text. Plain, readable, no tricks.

Uppercase label
mono: t116880 emit=0.09 led=30

display-xl and display are loud-only. head is the working shout. One family; weight and case do the work.

Color tokens

--bc-sky --bc-sky-deep --bc-ink --bc-paper · --bc-chalk-* --bc-char-* --bc-slate* · --bc-data-* · --wash --plate --deep — tokens.css
sky#87CEFA
sky-deep#2F7FBE
ink#333333
chalk#ECEEED
char#26282B
paper#EFECE5
wash--wash
warm#F07D5D

Mode variables (--bg --surface --deep --text --muted --wash --plate --accent --danger) are set by bc-loud / bc-day / bc-night. Build from these, never from new hex values.

Surface ramps + accent alternates

.bc-soft · .bc-paper · .bc-bright · .bc-carbon · .bc-accent-moss --clay --slate --plum — tokens.css (combine with bc-day / bc-night on body)
soft daybc-day bc-soft
soft nightbc-night bc-soft
paper daybc-day bc-paper
paper nightbc-night bc-paper
brightbc-day bc-bright
carbonbc-night bc-carbon
mossbc-accent-moss
claybc-accent-clay
slatebc-accent-slate
plumbc-accent-plum

bc-soft is the quiet ramp (the nebenote temperature, official). bc-paper warms the room for reading-and-writing tools. Accent alternates swap sky for one muted voice — wash and press retint with it. One accent per tool; loud never swaps.

Planes

.bc-plane · .bc-plane--deep --wash --ink --sky · .bc-panel — tokens.css
.bc-plane — surface
.bc-plane--deep
.bc-plane--wash — focus/selection tint
.bc-plane--ink
.bc-plane--sky
.bc-panel — legacy alias, same idea

Structure comes from planes and space, not lines. Big fields of color are always welcome.

Bands

.bc-band · .bc-band--surface --deep --wash --ink --sky --accent --danger · .bc-band--tight --hero · .bc-band-inner · .bc-inset — tokens.css
.bc-band--deep — the field bleeds to the edges, the text holds the column
.bc-band--ink
.bc-band--sky
.bc-band--wash

The field is the unit. Color runs edge to edge; content aligns to the column inside (--bc-measure). Boxes floating in margins are over — .bc-inset is the documented exception when a bleed genuinely can't work. --tight and --hero set the vertical breath.

Section

.bc-section — tokens.css

Section head

A section is space plus a bold uppercase head. No border, no card.

Log — cards + index

.bc-section-head · .bc-entry-grid · .bc-entry-card · .bc-entry-meta · .bc-tag · .bc-index — ui.css

Signal Garden

A small interactive field made from motion, proximity, and color.

Entry cards: surface plane, 2px rule border, plane radius. Meta label on top, display-type title, muted summary, project tags pinned to the bottom. A featured card spans 8 of 12 columns; the rest span 4. Tags hover to sky in every mode.

The index: display-type rows for projects or chapters. Hairline rules, hover shifts the row inward and turns it accent. On loud ink bands the same rows read as the site's project list.

Buttons

.bc-btn · .bc-btn--ghost · .bc-btn--danger — tokens.css

Controls are pills (house shape). Primary is ink by day, sky by night. Quiet is a deeper field, never an outline. Danger is a full red field.

Pressed: the field drops one shade — primary to slate-deep by day and sky-deep by night, quiet to --press (the wash gone deep), danger darkens. Instant on press, eased release. Hold a button down to see it. No scale, no shadow.

Forms

.bc-field · .bc-input .bc-select .bc-textarea · .bc-error — tokens.css
.bc-error — form-level: something went wrong

Fields are deep planes, no borders. Focus changes the plane to the wash. In apps, app.css bumps them to 44px / 16px type.

Errors are a wash too: .bc-field--error washes the field danger, .bc-field-error is one small line under it. No borders, no icons, no native bubbles — put novalidate on the form, set the message from script, clear it on input. Field-level for validation, .bc-error for whole-form failures (server said no).

Drop zone

.bc-drop · state: .is-dragging — tokens.css
Drop files here or click to upload
.is-dragging — fully inverted

A borderless color field. Hover deepens, drag-over inverts completely. State changes are total.

Marks — color as a field

.bc-mark · roles: --sound --light --emitter --free --motion --weather --fatigue --loop --reservoir --warm --sky · states: --live --stale · --fill — tokens.css
LIVE · tick 116880 STALE C2 C8 C4 0.91 flagged

The value lives inside the color. No dots next to labels. --fill makes the mark own its container (see Table).

Table

.bc-table · td.bc-cell-mark + .bc-mark--fill — tokens.css
CellRoleActEnergyState
C2Sound0.410.92active
C8Light0.120.88resting
C6Emitter0.770.64active

Header is a deep plane, rows zebra, hover is the wash. No hairlines.

Bars

.bc-bar-track · .bc-bar-fill — tokens.css
activation 0.62
fatigue 0.18

Recolor the fill with a data token when the bar carries a role.

Mode toggle

.bc-mode-toggle — tokens.css

A word, never a sun icon. Says where you're going, not where you are. Swap the body class and store the choice in localStorage.

Images

.bc-figure · .bc-img · .bc-plate · .bc-duotone · .bc-night-img · .bc-img--cover — tokens.css
Creature build, plain
.bc-img — plain, the default
Process diagram on plate
.bc-plate — mounts what bleeds
Creature build, duotone
.bc-duotone — loud brand moments only

The plate is always darker than what it carries: slate by day, deep charcoal by night, ink when loud. If you can see the image's edge, skip the plate.

App · top bar

.bca-topbar · .bca-topbar-action · shell: .bca-app .bca-content — app.css
Nebenote

The loud moment, app edition. Safe-area aware (env(safe-area-inset-top)). .bca-app is the full-height flex shell; .bca-content scrolls between the bars.

App · tab bar

.bca-tabbar · .bca-tab · state: .is-active — app.css

Words, not icons. The active tab is a full inverted plane. Safe-area padding at the bottom.

App · list rows

.bca-list · .bca-row · .bca-row-title .bca-row-meta · state: .is-selected — app.css
  • Creature v07 hardwaretoday
  • Standup notestoday
  • Design system decisions2 jul

52px rows, no separators — zebra shades separate, selection is the wash.

App · segmented control

.bca-seg · .bca-seg-item · state: .is-active — app.css

Pill in the house shape. The active segment is a full inverted plane. Click to try.

App · word toggle

.bca-toggle · state: .is-on — app.css
Sync to vault Auto-lock

State is a word in a plane — ON is sky, OFF is deep. No sliding thumb. Click to try.

App · bar button

.bca-btn-bar · .bca-btn-bar--danger — app.css

Full-width action, 52px. Ink by day, sky by night; danger is the red field.

App · sheet

.bca-sheet · .bca-sheet-title — app.css

Note actions

Bottom sheet as a lifted plane. No handle nub — the title does the affordance work. Safe-area padding below.

App · editor

.bca-editor — app.css

16px type so iOS doesn't zoom. Focus keeps the plane calm — writing is already the focus.

Icons — the house glyphs

.bc-icon · .bc-icon--sm --lg · sprite ids #i-* — ui.css + icons.svg

Words first; a glyph only where a word doesn't fit. 30 glyphs, chunky and filled, currentColor. Full sheet with names: icons.html. Standalone icons always get an aria-label.

Icon button

.bc-icon-btn · .bc-icon-btn--solid — ui.css
Nebenote

44px hit area, wash on hover, pill. Inside a header band or top bar it picks up chalk-on-ink colors automatically — the gear in your nebenote header.

Actions — text as control

.bc-action · --primary --danger --muted · .bc-action-row — ui.css

The nebenote pattern: lowercase, underlined, quiet until hovered. For inline and secondary actions where a pill button would be too much. The action row right-aligns cancel/confirm pairs.

Avatar

.bc-avatar · --sm --lg — ui.css
JG MS AH

Round — it's a thing you tap. Deep plane with initials or a glyph; role colors allowed when they encode something. Takes an img for photos.

List head + count

.bc-list-head · .bc-count — ui.css
Favorites
  • Adrià Linares
  • Angelina Hennig
Groups
  • GK Designers8
  • Curiosity3

Section label left, action right — RECENT, FAVORITES, GROUPS. Counts are numbers in small deep fields, not bare digits floating at the edge.

Checkbox + radio

.bc-check · .bc-radio · .bc-choice — ui.css

Deep planes, no 1px boxes. Checked is a full sky field with an ink check. Real inputs underneath — keyboard and screen readers work.

Slider

.bc-range — ui.css
LED brightness

Deep plane track, round accent thumb. No tick marks, no value bubble — pair with a mark if the number matters.

Stepper

.bc-stepper · .bc-stepper-value — ui.css
12

Pill controls, the value is plain type between them. Click to try.

Disclosure

.bc-disclosure · .bc-disclosure-body — ui.css (native details/summary)
Advanced settings
Vault path, backup cadence, markdown flavor. Hidden until asked for.

Native details/summary — free keyboard support. The chevron rotates; nothing else moves.

Dialog

.bc-scrim · .bc-dialog — ui.css

Delete note?

"Creature v07 hardware" will be moved to trash. The markdown file stays recoverable for 30 days.

A bg-colored plane over the ink scrim (55%). One question, two text actions. Use .bc-scrim as a fixed overlay in real apps; shown inline here.

Toast

.bc-toast · .bc-toast-dock — ui.css
Note deleted

An ink plane, one line, one action, gone in a few seconds. Dock it bottom-center with .bc-toast-dock (safe-area aware). It appears — it does not slide, bounce, or fade.

Chip

.bc-chip · --sky — ui.css
design hardware selected

A removable mark — for tags, aliases, filters. Selected chips go sky. The remove target is a full 28px, not a 12px x.

Keycap

.bc-key — ui.css
Press esc to close · ⌘K to search · ⌘↩ to save

Shortcut hints as mono keycaps. A hint, not a button — if it's clickable, it's a .bc-action.

Loading

.bc-loading — ui.css

The one legal moving element: an indeterminate bar. No spinners, nothing circular, nothing pulsing. For known progress, use .bc-bar-track with a real width.

Empty state

.bc-empty — ui.css
No notes yet

Notes you write will show up here as plain markdown files.

A quiet plane, a glyph, one sentence, one next step. Never a sad illustration.