Brand Foundations
The Aesthetic Is the Structure
Bauhaus made industrial structure visible. Nodus makes algorithmic structure visible. Every token, every color rule, every type decision exists to serve that single goal.
The Bauhaus Principle
Bauhaus (1919–1933) performed one decisive inversion: make the industrial structure visible. Before Gropius, steel buildings hid their frames in stone. Bauhaus showed the beam, revealed the weld, exposed the glass. The aesthetic was truth-telling about materials.
The 21st-century machine is invisible by design. Algorithms rank your feed, score your loan, route your payment — all behind smooth surfaces that conceal the logic entirely. Nodus inverts this. The design system is built on one commitment: every visual choice reveals structure, never conceals it.
In practice this means: borders and grids ARE the decoration. Color carries semantic meaning, not brand preference. Typography hierarchy encodes data density, not aesthetic whim. No element appears without a reason traceable to the underlying information architecture.
Structure IS the decoration. No gratuitous ornament.
Color is semantic
Three signals, three meanings. Never decorative.
Never skip a token layer
Primitives → Semantic → Component. Hierarchy enforced.
Legibility over beauty
Every pixel earns its place or is removed.
The Semantic Color System
Three colors. Three meanings. No exceptions. You can read a screen without reading a word — the color layer encodes behavioral structure that text only confirms.
Agency Red
Committed AI action, authority, consequence
Use for
- ▸AI-initiated actions
- ▸Active execution states
- ▸Destructive / irreversible operations
- ▸Agent-owned decisions
Never use for
- ✕Brand accent
- ✕Decorative emphasis
- ✕Error states (use --ds-color-error)
- ✕Non-committed or speculative actions
Temporal Blue
In-flight, processing, uncertainty, time
Use for
- ▸Loading and processing states
- ▸In-flight requests
- ▸Informational content
- ▸Links and navigation
- ▸Timestamps, staleness indicators
Never use for
- ✕Settled / completed states
- ✕Brand color
- ✕Error or warning states
Validation Gold
Enrichment, trust, thresholds, confirmation
Use for
- ▸Human-verified data
- ▸Confidence threshold passed
- ▸Caution / near-limit states
- ▸Quality enrichment badges
Never use for
- ✕Celebration / success (use --ds-color-outcome-positive)
- ✕Decoration
- ✕Errors
Agency Red ≠ Error Red
--ds-color-agency marks committed AI action. --ds-color-error marks system failure. Using agency red for errors corrupts the semantic channel — users lose the ability to read screens at a glance.
Typography as Signal
Every type decision in the system answers a functional question. Monospace for data: because financial numbers must align vertically across rows — tabular figures prevent the eye from losing position. The 10px floor: because dense financial interfaces routinely pack dozens of data points into one viewport, and going below 10px fails WCAG at normal viewing distances.
Contrast floors are not aesthetic minimums — they are accessibility requirements enforced at the token layer. Body text at 7:1 contrast. Secondary at 4.83:1. Muted at 4.83:1. You cannot use a lower-contrast token for readable text — the naming convention tells you this.
Aa
Primary
14:1
--ds-text-primary
Aa
Secondary
7:1
--ds-text-secondary
Aa
Muted
4.83:1
--ds-text-muted
Aa
Inverse
on dark bg
--ds-text-inverse
Dark Mode First
Service interfaces are dark-mode primary. The treasury dashboard, agent monitor, and real-time data surfaces are all designed dark-first because dense financial data reduces eye strain on dark backgrounds during sustained use — the same reason Bloomberg Terminal has run dark for 40 years.
Documentation (this site) is light-mode primary. Reading prose at length is faster on light backgrounds; accessibility standards are easier to validate against light defaults. The token system handles both surfaces transparently — components that use onlyvar(--ds-*)tokens invert correctly without any conditional logic.
Surface Hierarchy — Ground → Raised → Inverse
The Rule
Any component built exclusively on var(--ds-*) tokens inherits light/dark inversion automatically — no media queries, no className conditionals. This is why the three-layer token architecture exists: primitives carry values, semantic tokens carry meaning, and the mode switch is a single CSS variable reassignment at the root.
✕ Wrong — breaks dark mode
background: '#E4E4E7'
color: '#18181B'
border: '1px solid #D4D4D8'✓ Correct — adapts to both modes
background: 'var(--ds-surface-ground)'
color: 'var(--ds-text-primary)'
border: '1px solid var(--ds-border-structure)'