# DESIGN_SYSTEM.md
Design direction: **"Kontrollrom"** (control room) — a quiet, Nordic-restrained engineering aesthetic.

---

## 1. Concept

The site should feel like **well-run production infrastructure given a public face**: calm surfaces, precise alignment, information-dense but never busy, one living accent colour that behaves like a status light. Not a marketing site pretending to be technical; a technical artefact polished until it feels premium.

Three ideas fused, none copied:
1. **Nordic restraint** — generous whitespace, muted surfaces, understatement (matches the Norwegian market and the candidate's voice).
2. **Console/ops vernacular as *seasoning*** — monospace metadata labels, status chips, subtle grid/blueprint texture. Used at ~10% intensity: labels, captions, chips — never full terminal cosplay, no fake CLIs, no green-on-black.
3. **SaaS product craft** — case studies presented like product launch pages (framed screenshots, TL;DR boxes, proof strips).

**Litmus test for every design decision:** *"Would this look at home in the admin console of a product you trust?"* If it's decorative noise — cut it.

## 2. Identity elements

- **Monogram:** `CB` set in the mono face inside a rounded square, with a 2px accent tick in the corner — reads as both initials and a status LED. Used as favicon, header mark, OG-image anchor.
- **Signature motif — "the trace":** a thin (1.5px) accent line that draws horizontally then steps (like an oscilloscope/PCB trace). Appears once in the hero (animated draw on load), as section-divider punctuation, and in the 404. This is the site's single ownable visual move.
- **Status chips:** rounded-full, mono, 12px, used for facts (location, permit, availability) and project status (`ACTIVE`, `IN DEVELOPMENT`). The chip *is* the brand's information atom.
- **Photography:** the outdoor headshot, duotone-treated in dark mode (slight cool grade) and natural in light mode; always in a hairline-bordered rounded frame with a mono caption (`tønsberg, norway · 2025`).

## 3. Surfaces & elevation

Flat-first. Depth via **hairline borders (1px, low-alpha)** and background steps, not drop shadows.

| Token | Dark | Light | Use |
|---|---|---|---|
| `surface-0` | #0B0E14 | #FAFAF8 | Page background |
| `surface-1` | #11151D | #FFFFFF | Cards, panels |
| `surface-2` | #171C26 | #F1F2EF | Nested/hover panels, code-ish blocks |
| `border` | #FFFFFF @ 8% | #16181D @ 10% | All hairlines |
| `border-strong` | #FFFFFF @ 16% | #16181D @ 20% | Focused/hover cards |

Shadows: only two, both subtle, only in light mode + overlays (`shadow-card`, `shadow-overlay`). Dark mode uses border-strong + surface step instead.
Radius scale: `4px` (chips inner) · `8px` (buttons, inputs) · `12px` (cards) · `16px` (screenshot frames) · `full` (chips).

## 4. Grid & layout

- Max content width **1200px**; case-study prose measure capped at **72ch**.
- 12-column grid, 24px gutters desktop; 4-column, 16px gutters mobile.
- Left-rail section labels on desktop (mono, vertical rhythm anchor): `01 — ABOUT`, `02 — SKILLS`… echoing the current site's numbering, done properly.
- Breakpoints: 480 / 768 / 1024 / 1280 / 1536.
- Background texture: an extremely faint dot-grid (border-colour dots, 24px pitch) on `surface-0` hero + section headers only — the "blueprint" whisper. Disabled in forced-colors/high-contrast.

## 5. Core components (design-level inventory)

| Component | States to design | Notes |
|---|---|---|
| Header / nav | default, scrolled (compressed + blur), mobile overlay | see mockups M7 |
| Split CV button | default, hover, open (menu shows both languages + file size) | locale-aware default |
| Language switch | EN active, NO active, hover, focus, keyboard | segmented control, see M11 |
| Theme toggle | dark, light, hover (icon morph sun⇄moon) | respects system on first load |
| Status chip | fact, status-active (accent dot pulse ≤ 2 loops), status-dev (amber dot) | |
| Skill group card | default, hover (border-strong) | chips inside |
| Project card | default, hover (screenshot parallax-shift 4px + border glow), focus | whole card clickable, single tab stop |
| Timeline item | featured (expanded), compact (one-liner), hover | |
| TL;DR box | — | surface-2, accent left edge (3px) |
| Architecture diagram frame | static SVG, nodes highlight on hover (desktop only) | must read perfectly with zero interaction |
| Screenshot frame | loading (skeleton), loaded, lightbox open | browser-chrome mock, aspect-locked |
| Form field | default, focus, filled, error, success | error text + icon, never colour-only |
| Buttons | primary (accent), secondary (outline), ghost | see MICRO_INTERACTIONS |
| Footer | — | dense, mono-flavoured, sitemap + channels |
| 404 | — | trace motif breaks/frays; bilingual links home |

## 6. Iconography & illustration

- Icons: single stroke-icon set, 1.5px stroke, 20px grid (Lucide-class aesthetic — final set is a Phase 2 choice). Never filled+outlined mixed.
- No stock illustration, no 3D blobs, no particles. The only "illustrations" are: the trace motif, architecture diagrams (drawn in-system: surface-2 nodes, border hairlines, accent flow arrows, mono labels), and framed product screenshots.

## 7. Theming rules

- Dark is the **design-lead theme** (P2 audience default; screenshots of both apps present well on dark), light must be equally finished — P1/P3 recruiters often browse light.
- Every token has a pair; no theme-conditional layouts. Accent identical in both (passes contrast both ways — see COLOUR_SYSTEM).
- First paint must match user preference without flash (implementation constraint flagged for Phase 2).

## 8. What this system deliberately avoids

Percentage skill bars · testimonial carousels · particle heroes · scroll-hijacking · fake terminals · gradient-everything · cookie-consent theatre (no tracking → no banner; a privacy footnote instead — itself a trust signal).
