@nurix/etna 0.18.18 → 0.18.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/harness-index.json +1 -1
- package/data/harnesses/code/harness.json +2 -2
- package/data/harnesses/code/rules/general.md +2 -1
- package/data/harnesses/code/skills/design/SKILL.md +65 -0
- package/data/harnesses/code/skills/design/data/catalog/rules.csv +132 -0
- package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +317 -0
- package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +235 -0
- package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +232 -0
- package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/apple.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/binance.md +223 -0
- package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +219 -0
- package/data/harnesses/code/skills/design/data/design-md/library/cal.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/clay.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +227 -0
- package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +237 -0
- package/data/harnesses/code/skills/design/data/design-md/library/composio.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/expo.md +228 -0
- package/data/harnesses/code/skills/design/data/design-md/library/figma.md +221 -0
- package/data/harnesses/code/skills/design/data/design-md/library/framer.md +236 -0
- package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +234 -0
- package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +240 -0
- package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +236 -0
- package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +237 -0
- package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/meta.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/miro.md +233 -0
- package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +236 -0
- package/data/harnesses/code/skills/design/data/design-md/library/notion.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +222 -0
- package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +226 -0
- package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +223 -0
- package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +234 -0
- package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/resend.md +285 -0
- package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +225 -0
- package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +219 -0
- package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +251 -0
- package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +244 -0
- package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +227 -0
- package/data/harnesses/code/skills/design/data/design-md/library/slack.md +240 -0
- package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +252 -0
- package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +248 -0
- package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +241 -0
- package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +255 -0
- package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +226 -0
- package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +233 -0
- package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +248 -0
- package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/uber.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +245 -0
- package/data/harnesses/code/skills/design/data/design-md/library/warp.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/wired.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/wise.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +220 -0
- package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +238 -0
- package/data/harnesses/code/skills/design/data/design-md/nurix.md +217 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/command-center.tsx +249 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/create-edit.tsx +249 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/dashboard.tsx +248 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/entity-detail.tsx +245 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/list-detail.tsx +223 -0
- package/data/harnesses/code/skills/design/data/operator-pack/exemplars/log-stream.tsx +249 -0
- package/data/harnesses/code/skills/design/data/operator-pack/fixtures.md +88 -0
- package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +132 -0
- package/data/harnesses/code/skills/design/data/operator-pack/trust-rubric.md +76 -0
- package/data/harnesses/code/skills/design/references/create.md +126 -0
- package/data/harnesses/code/skills/design/references/diagnosis.md +108 -0
- package/data/harnesses/code/skills/design/references/hard-rules.md +155 -0
- package/data/harnesses/code/skills/design/references/improve.md +85 -0
- package/data/harnesses/code/skills/design/references/interaction.md +77 -0
- package/data/harnesses/code/skills/design/references/introspect.md +100 -0
- package/data/harnesses/code/skills/design/references/lifecycle.md +73 -0
- package/data/harnesses/code/skills/design/references/personality.md +504 -0
- package/data/harnesses/code/skills/design/references/structure.md +138 -0
- package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +706 -0
- package/data/harnesses/code/skills/design/scripts/detector.mjs +898 -0
- package/data/harnesses/code/skills/design/scripts/generate-fixtures.mjs +551 -0
- package/data/harnesses/code/skills/design/scripts/hook-config.json +11 -0
- package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +386 -0
- package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +280 -0
- package/data/harnesses/code/skills/design/scripts/render-rung.mjs +690 -0
- package/data/harnesses/code/skills/design/scripts/scaffold.mjs +552 -0
- package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +432 -0
- package/data/harnesses/etna/CLAUDE.md +1 -1
- package/data/harnesses/etna/harness.json +2 -2
- package/data/harnesses/etna/rules/general.md +2 -1
- package/data/harnesses/mobile/harness.json +2 -2
- package/data/harnesses/mobile/rules/general.md +2 -1
- package/package.json +1 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: design-md/v1
|
|
3
|
+
product: Warp
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Warp — the warm-monochrome terminal operator design
|
|
9
|
+
|
|
10
|
+
Warp is an agentic development environment — a terminal wrapping an AI agent — and its marketing site
|
|
11
|
+
mirrors the product: a single warm near-charcoal band running the whole page (warmer than pure black),
|
|
12
|
+
copy almost entirely in Inter, DM Mono for the terminal mockups, no gradient, no chromatic accent
|
|
13
|
+
anywhere. This entry is the *operator* reading of that brand — an internal tool (agent-run console,
|
|
14
|
+
session queue, deploy stream) in Warp's language. What carries: the warm brown-beige temperature on
|
|
15
|
+
every neutral, the extremely tight near-rectangular radius, the Inter + DM Mono voice, the quiet display
|
|
16
|
+
(weight 400, negative tracking, never heavy), hairline-only flat depth, and — the defining trait — a
|
|
17
|
+
**monochrome** system with no chromatic accent. What stays behind: the 64px hero display, the 96px
|
|
18
|
+
section rhythm, the full-page terminal-mockup imagery, and the always-dark marketing band.
|
|
19
|
+
|
|
20
|
+
**Warm, light, and monochrome.** Warp's identity is the warmth, not the darkness — `oklch` hue 84.6, a
|
|
21
|
+
brown-beige tint on every neutral. This theme keeps that warmth on a **light** paper floor so the
|
|
22
|
+
light-default floor holds cleanly; the brand's own warm-charcoal `#2b2622` survives as the code / log /
|
|
23
|
+
terminal inlay (Warp is a terminal — that surface is real chrome, not a mockup). With no chromatic
|
|
24
|
+
accent, the one operator accent is **ink**: the primary action is a filled warm-charcoal button. Both
|
|
25
|
+
machine blocks are fully valued; judgments away from the brand are annotated `# derived:`.
|
|
26
|
+
|
|
27
|
+
## 1 Visual Theme
|
|
28
|
+
|
|
29
|
+
Light by default; dark is opt-in. The whole UI floats on a warm paper `background` (`#f2efe8`); cards
|
|
30
|
+
lift to Warp's own off-white `card` (`#f7f5f0`), so a panel reads by a hair of brightness plus its warm
|
|
31
|
+
hairline, never a shadow. Emphatically flat: hierarchy is carried by warm hairline `border`, type
|
|
32
|
+
weight, and the paper-to-off-white surface step. There is **no chromatic accent** — the single accent is
|
|
33
|
+
monochrome ink, warm near-charcoal `primary` (`#2b2622`, Warp's own canvas color), reserved for the one
|
|
34
|
+
primary action, the active-nav indicator, and the focus `ring`. Density is `standard`; the temperature
|
|
35
|
+
and near-rectangular radius keep the terminal-dialect tightness.
|
|
36
|
+
|
|
37
|
+
## 2 Color Roles
|
|
38
|
+
|
|
39
|
+
Light values (the manifest carries hex — the corpus's native format). No chromatic accent: `primary` is
|
|
40
|
+
monochrome ink; the chart series live only in charts (see §7); status hues speak only status.
|
|
41
|
+
|
|
42
|
+
| Role | Value | Allowed where |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| `background` | warm paper `#f2efe8` | the page floor and content canvas — the dominant surface |
|
|
45
|
+
| `card` / `popover` | Warp off-white `#f7f5f0` | cards and overlays — a bright warm lift off the paper, differentiated by hairline |
|
|
46
|
+
| `foreground` | warm charcoal `#2b2622` | display and all primary ink — Warp's own canvas color, inverted to ink |
|
|
47
|
+
| `muted` / `secondary` | soft warm fill `#eae6dd` | hover rows, quiet band tints, secondary-button fill |
|
|
48
|
+
| `muted-foreground` | warm gray `#6b655c` | labels, captions, secondary text |
|
|
49
|
+
| `border` / `input` | warm hairline `#e2ddd2` | every separator, grid line, and field edge — one warm step, not an ink line |
|
|
50
|
+
| `primary` | warm charcoal `#2b2622` | the one primary action; the focus `ring`; the active-nav indicator — ink, not a hue |
|
|
51
|
+
| `primary-foreground` | off-white `#f7f5f0` | text on the charcoal action — the brand's own light tone |
|
|
52
|
+
| `accent` | warm selection lift `#e4dfd4` | selected / hovered rows and nav — a neutral warm step, never ink-filled |
|
|
53
|
+
| `ring` | `primary` charcoal | the focus outline — unmistakable, because keyboard-first |
|
|
54
|
+
| `destructive` | warm brick-red `#c0392b` | destructive actions and error state only |
|
|
55
|
+
| `success` / `warning` | warm green `#5b8a45` / warm amber `#b8791f` | status signalling only, never chrome |
|
|
56
|
+
|
|
57
|
+
The warm-charcoal `#2b2622` is not only ink — it is also the code / log / terminal inlay surface (§6).
|
|
58
|
+
|
|
59
|
+
## 3 Typography
|
|
60
|
+
|
|
61
|
+
`font-sans` is Inter — one sans carries body, UI, labels, and headings, weights 400 / 500 the working
|
|
62
|
+
pair. `font-mono` is DM Mono for IDs, codes, timestamps, log lines, and every terminal surface; numeric
|
|
63
|
+
columns render `tabular-nums`. The defining typographic trait is the **quiet display**: page titles wear
|
|
64
|
+
weight 400 with negative tracking — never a billboard — while smaller component heads step up to the
|
|
65
|
+
strong 500. The 64px hero display and rare Instrument Serif italic stay behind; a surface tops out at a
|
|
66
|
+
24px page title.
|
|
67
|
+
|
|
68
|
+
| Step | Role | Size · line | Weight · tracking |
|
|
69
|
+
| --- | --- | --- | --- |
|
|
70
|
+
| h1 | page title | 24px / 1.25 | `font-weight-normal` (400) · `heading-tracking` |
|
|
71
|
+
| h2 | section head | 20px / 1.3 | `font-weight-normal` (400) · `heading-tracking` |
|
|
72
|
+
| h3 | card / group head | 15px / 1.4 | `font-weight-strong` (500) · 0 |
|
|
73
|
+
| body | UI + prose | 14px / 1.45 | `font-weight-normal` |
|
|
74
|
+
| small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
|
|
75
|
+
| caption | uppercase eyebrow | 12px / 1.4 | `font-weight-strong`, `+0.04em`, uppercase |
|
|
76
|
+
| code | IDs, logs, amounts | mono 13px / 1.4 | `font-weight-normal` |
|
|
77
|
+
|
|
78
|
+
Keep page titles at 400 with negative tracking — the quiet voice; never a heading at 700+, and emphasise by size, never heavy weight.
|
|
79
|
+
|
|
80
|
+
## 4 Component Stylings
|
|
81
|
+
|
|
82
|
+
Every recurring operator component composes from the primitives — no literal values.
|
|
83
|
+
- **Button** — primary: filled charcoal `primary` on off-white `primary-foreground`, `radius` (near-rectangular), never a pill. Secondary: off-white `card` fill, 1px `border`, `foreground`. Ghost: transparent, `accent` on hover.
|
|
84
|
+
- **Input** — `background` fill, 1px `border` (`border-weight`), `radius`; focus draws the charcoal `ring` at full 2px, no glow.
|
|
85
|
+
- **Card** — off-white `card` surface on a 1px `border` — the bright step off the paper carries the lift; shadow only when a true overlay must separate; inset by `density-inset`.
|
|
86
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on numeric columns; row selection warms to `accent`.
|
|
87
|
+
- **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich` for content-heavy), beside the work, not over it.
|
|
88
|
+
- **Badge** — pill radius (badges only), `muted`/status fill, uppercase caption; status badges take `success` / `warning` / `destructive`, never `primary`.
|
|
89
|
+
|
|
90
|
+
## 5 Layout
|
|
91
|
+
|
|
92
|
+
Base spacing unit 4px; the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64` — the marketing
|
|
93
|
+
96px section rhythm stays behind. Shell dimensions map one-to-one to the layout primitives: sidebar
|
|
94
|
+
`sidebar-width-expanded` (240px) / `sidebar-width-collapsed` (56px), topbar `topbar-height` (52px, the
|
|
95
|
+
brand's nav height), side panel `side-panel-width` (420px) / `side-panel-width-rich` (640px), modal cap
|
|
96
|
+
`modal-width-max`, forms `form-max-width`, tables full-width — a touch tight, the terminal dialect
|
|
97
|
+
through the shell. Density is governed globally by `density-tier` and stepped per archetype by the
|
|
98
|
+
surface catalog — never by absolute overrides.
|
|
99
|
+
|
|
100
|
+
## 6 Depth
|
|
101
|
+
|
|
102
|
+
Flat and hairline-only. Depth comes from the paper-to-off-white surface step and warm hairlines, not shadow:
|
|
103
|
+
- **0 — canvas** `background` (`#f2efe8`), no border.
|
|
104
|
+
- **1 — panel / card** off-white `card` (`#f7f5f0`) on a 1px `border`; the bright step off the paper plus the hairline carries the lift. Selected / hover rows warm to `accent` (`#e4dfd4`).
|
|
105
|
+
- **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns the faintest soft lift, enough to float an overlay above the paper. Rank is surface, border, and position — never a heavier shadow.
|
|
106
|
+
- **inlay — code / log / terminal** warm charcoal `#2b2622` with off-white text and `font-mono` — Warp's own terminal chrome carried into a light UI.
|
|
107
|
+
|
|
108
|
+
Focus is a 2px charcoal `ring` outline (never a glow), visible on every interactive element; three z-levels: content, sticky chrome, overlay.
|
|
109
|
+
|
|
110
|
+
## 7 Do's & Don'ts
|
|
111
|
+
|
|
112
|
+
- **Do** anchor every surface on the warm paper canvas — pure white as the page floor reads as any-other-tool; the brown-beige tint is Warp.
|
|
113
|
+
- **Do** keep the accent monochrome — the primary action, the focus `ring`, and the active-nav indicator are warm-charcoal ink. There is no chromatic accent, by design.
|
|
114
|
+
- **Do** keep page titles at weight 400 with negative tracking, and render every code, log, and terminal surface in `font-mono` (DM Mono) on the warm-charcoal inlay, with `tabular-nums` on numeric columns.
|
|
115
|
+
- **Don't** introduce a chromatic brand accent — the off-white-and-charcoal monochrome IS Warp's voice; a colored CTA breaks the brand.
|
|
116
|
+
- **Don't** render a heading at 700+ or reach for a generous pill radius — the display is quiet at 400 and the button radius is near-rectangular (3–4px); pill is badges only.
|
|
117
|
+
- **Don't** drop a soft drop-shadow on cards or replace the warm paper with a cool gray or pure white — hairlines and the surface step carry depth, and the warmth is the identity.
|
|
118
|
+
|
|
119
|
+
## 8 Responsive
|
|
120
|
+
|
|
121
|
+
The operator sweep is 375 / 768 / 1024 / 1440.
|
|
122
|
+
|
|
123
|
+
| Breakpoint | What changes |
|
|
124
|
+
| --- | --- |
|
|
125
|
+
| 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
|
|
126
|
+
| 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
|
|
127
|
+
| 1024 | sidebar expands; two-pane queue+detail holds side by side |
|
|
128
|
+
| 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
|
|
129
|
+
|
|
130
|
+
Code and log inlays keep mono legibility at every breakpoint by scrolling, not wrapping.
|
|
131
|
+
|
|
132
|
+
## 9 Agent Prompt Guide
|
|
133
|
+
|
|
134
|
+
Directives the emitting agent follows verbatim:
|
|
135
|
+
- Reach for the warm paper canvas first — never pure white or a cool gray for the page floor; the brown-beige tint is Warp. Cards are the off-white bright step above it.
|
|
136
|
+
- The accent is monochrome ink: spend warm-charcoal once per surface on the primary action, the focus `ring`, and the active-nav indicator. There is no chromatic accent — do not introduce one. Color otherwise belongs to data and status.
|
|
137
|
+
- Page titles wear weight 400 with negative tracking — the quiet voice; component heads and labels earn the strong 500. Never render a heading at 700+.
|
|
138
|
+
- Render code, log, and terminal panels in `font-mono` (DM Mono) on the warm-charcoal `#2b2622` inlay — show real terminal chrome, not a light mockup of it. Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`.
|
|
139
|
+
- Keep the geometry near-rectangular — the button/input radius is 3–4px; pill is badges only. Depth is the paper-to-off-white step and warm hairlines, never shadow; reach for the faint overlay lift only for a true modal or popover. Detail and edit go in the side panel beside the work, never a modal.
|
|
140
|
+
- Keyboard-first: the charcoal `ring` focus outline is always visible. Leave behind the 64px hero display, the 96px section rhythm, the full-page terminal-mockup imagery, and the always-dark marketing band.
|
|
141
|
+
|
|
142
|
+
```yaml design-primitives
|
|
143
|
+
radius: 4px # corpus: --radius base is rounded.md (4px); buttons run tighter at rounded.sm (3px); the brand is near-rectangular, never a generous pill
|
|
144
|
+
shadow-intensity: 0.15 # derived: brand is hairline-only ("no drop shadows on cards"); only true overlays earn the faintest lift
|
|
145
|
+
border-weight: 1px # corpus: 1px warm hairlines carry all depth
|
|
146
|
+
density-gap: 1 # derived: spacious marketing (96px sections) read to an honest standard operator tier; terminal tightness carried by radius/temperature, not the grid
|
|
147
|
+
density-inset: 1 # derived: matches density-gap for coherent component insets
|
|
148
|
+
font-sans: Inter, system-ui, -apple-system, sans-serif # corpus: Inter carries every display, body, button, and label role (weights 400/500)
|
|
149
|
+
font-mono: DM Mono, ui-monospace, SFMono-Regular, Menlo, monospace # corpus: DM Mono on every terminal mockup and code surface
|
|
150
|
+
font-weight-normal: 400 # corpus: body and — defining trait — the quiet display both sit at 400
|
|
151
|
+
font-weight-strong: 500 # corpus: nav links, buttons, body-strong at 500; the display stays 400 and the brand never goes heavy (700+ forbidden)
|
|
152
|
+
heading-tracking: -0.02em # corpus: negative tracking is part of the voice (-1.6px at 64px hero); ~-0.02em at operator heading scale
|
|
153
|
+
duration-unit: 50ms # derived: corpus declares no motion system on the marketing surface; operator-standard functional base
|
|
154
|
+
duration-fast: 100ms # derived: corpus silent on motion; functional tempo
|
|
155
|
+
duration-normal: 150ms # derived: corpus silent on motion; standard functional tempo
|
|
156
|
+
duration-slow: 250ms # derived: corpus silent on motion; overlay/panel transition
|
|
157
|
+
ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent on motion; standard functional ease
|
|
158
|
+
contrast-boost: 1 # derived: the soft warm hairlines are the intended restraint; no boost
|
|
159
|
+
icon-stroke: 1.5 # derived: corpus silent on icons; a light refined stroke suits the quiet, minimal feel
|
|
160
|
+
icon-size-base: 16px # derived: corpus silent on icon size; operator standard
|
|
161
|
+
sidebar-width-expanded: 240px # derived: corpus has no app shell (marketing nav only); terminal-dialect tightness → a dense rail
|
|
162
|
+
sidebar-width-collapsed: 56px # derived: standard operator icon rail
|
|
163
|
+
topbar-height: 52px # corpus: nav padding md/xl (10px/24px) resolves to a ~52px bar — the brand's nav height
|
|
164
|
+
side-panel-width: 420px # derived: corpus has no shell; dense terminal read holds a tight detail panel
|
|
165
|
+
side-panel-width-rich: 640px # derived: content-heavy detail panel
|
|
166
|
+
modal-width-max: 560px # derived: corpus's CTA bands are full-bleed marketing; operator confirmation cap
|
|
167
|
+
form-max-width: 640px # derived: corpus max content ~1200px is marketing; single-column reading caps forms at 640
|
|
168
|
+
table-row-height: 40px # derived: terminal-dialect density → the dense 40px default, not the roomier editorial 44
|
|
169
|
+
verbosity: default
|
|
170
|
+
feedback: subtle # derived: brand is quietly understated but keeps a visible keyboard focus ring; gentle present feedback, not austere silence
|
|
171
|
+
density-tier: standard # derived: spacious marketing read down to an honest operator tier; terminal tightness carried by radius/temperature, not whitespace
|
|
172
|
+
product-traits: [terminal, dev-tools, ai-console, agent-ops, dashboard]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```yaml lever-manifest
|
|
176
|
+
version: 1
|
|
177
|
+
fonts: { sans: "Inter, system-ui, -apple-system, sans-serif", mono: "DM Mono, ui-monospace, SFMono-Regular, Menlo, monospace" }
|
|
178
|
+
color-tokens:
|
|
179
|
+
light:
|
|
180
|
+
background: "#f2efe8" # derived: warm paper floor one step below Warp's off-white, holding the brown-beige temperature in a light theme
|
|
181
|
+
foreground: "#2b2622" # corpus: Warp's warm-charcoal canvas, inverted to ink for the light theme
|
|
182
|
+
card: "#f7f5f0" # corpus: Warp off-white — the brand's literal light tone, as the lifted card surface
|
|
183
|
+
card-foreground: "#2b2622"
|
|
184
|
+
muted: "#eae6dd" # derived: soft warm fill for hover rows and quiet bands, one step below the paper
|
|
185
|
+
muted-foreground: "#6b655c" # derived: Warp's light mute (#aea69c reads for dark bg); darkened to a warm gray for light-mode text contrast
|
|
186
|
+
border: "#e2ddd2" # derived: warm hairline inverted from Warp's dark hairline (#3f3a36) for a light surface
|
|
187
|
+
input: "#e2ddd2"
|
|
188
|
+
ring: "#2b2622"
|
|
189
|
+
primary: "#2b2622" # corpus: no chromatic accent — the monochrome ink action is Warp's own canvas color
|
|
190
|
+
primary-foreground: "#f7f5f0" # corpus: off-white text on the charcoal action (Warp's inverted button-primary)
|
|
191
|
+
accent: "#e4dfd4" # derived: warm selection lift one step past muted, so selection reads over hover; never ink-filled
|
|
192
|
+
accent-foreground: "#2b2622"
|
|
193
|
+
destructive: "#c0392b" # derived: corpus has no error hue; a warm brick-red matching the palette temperature
|
|
194
|
+
destructive-foreground: "#f7f5f0" # derived: off-white on the warm red, holding temperature
|
|
195
|
+
success: "#5b8a45" # derived: corpus has no success hue; a warm-leaning green
|
|
196
|
+
warning: "#b8791f" # derived: corpus has no warning hue; a warm amber matching the brown-beige temperature
|
|
197
|
+
popover: "#f7f5f0"
|
|
198
|
+
popover-foreground: "#2b2622"
|
|
199
|
+
secondary: "#eae6dd"
|
|
200
|
+
secondary-foreground: "#2b2622"
|
|
201
|
+
chart-1: "#b0724e" # derived: monochrome brand has no chart palette; a warm categorical set (terracotta) holds temperature
|
|
202
|
+
chart-2: "#8a8250" # derived: warm olive
|
|
203
|
+
chart-3: "#5f7d5a" # derived: muted warm sage green
|
|
204
|
+
chart-4: "#a98a3f" # derived: muted warm gold
|
|
205
|
+
chart-5: "#6b655c" # derived: warm taupe neutral, echoing the ink for spread
|
|
206
|
+
sidebar: "#efece5" # derived: a faint warm step below the paper so the nav rail reads as chrome
|
|
207
|
+
sidebar-foreground: "#2b2622"
|
|
208
|
+
sidebar-primary: "#2b2622"
|
|
209
|
+
sidebar-primary-foreground: "#f7f5f0"
|
|
210
|
+
sidebar-accent: "#e4dfd4" # derived: hover/selected nav lift, matches accent
|
|
211
|
+
sidebar-accent-foreground: "#2b2622"
|
|
212
|
+
sidebar-border: "#e2ddd2"
|
|
213
|
+
sidebar-ring: "#2b2622"
|
|
214
|
+
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
|
|
215
|
+
radius-scale: [0, 2, 3, 4, 6, 9999]
|
|
216
|
+
shadow-levels: [none, sm, md]
|
|
217
|
+
motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
|
|
218
|
+
icons: { family: lucide, stroke: 1.5 }
|
|
219
|
+
accent-count: 1
|
|
220
|
+
```
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: design-md/v1
|
|
3
|
+
product: Webflow
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Webflow — the visual-builder operator reading
|
|
9
|
+
|
|
10
|
+
A deliberate operator reading of the Webflow brand: engineered, near-monochrome, hairline-first. The
|
|
11
|
+
marketing site breathes 80px hero display type and full-saturation category cards; an operator surface
|
|
12
|
+
keeps the near-black primary, the pure-gray neutrals, and the single crisp blue, and leaves the
|
|
13
|
+
display type and chromatic fills behind. Judgments away from the brand are annotated `# derived:`.
|
|
14
|
+
|
|
15
|
+
## 1 Visual Theme
|
|
16
|
+
|
|
17
|
+
Light by default; dark is opt-in. Flat and engineered: a generous white canvas (`background`
|
|
18
|
+
`#ffffff`) carries near-black ink (`foreground` `#080808` — deeper than pure black, so it reads as
|
|
19
|
+
branded, not default). Hierarchy comes from hairline `border` (`#d8d8d8`), type weight, and contrast —
|
|
20
|
+
never heavy shadow; the brand's layered drop-shadow is a marketing flourish operator surfaces reserve
|
|
21
|
+
for true overlays. The primary action is a near-black fill, not a color; a single chromatic accent — a
|
|
22
|
+
crisp blue `#146ef5` — is reserved for interactive state (focus, selection, active nav). The neutral
|
|
23
|
+
ramp is pure achromatic gray, no temperature. Density is `standard`; the anchor surface is white
|
|
24
|
+
content beside a barely-tinted `sidebar`.
|
|
25
|
+
|
|
26
|
+
## 2 Color Roles
|
|
27
|
+
|
|
28
|
+
Light values first. One chromatic accent — the blue carries interactive meaning; near-black is the
|
|
29
|
+
action ink; status hues speak only status. The five brand hues live only in charts (§9).
|
|
30
|
+
|
|
31
|
+
| Role | Value | Allowed where |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| `background` / `card` / `popover` | white `#ffffff` | page, cards, and overlays — the dominant surface |
|
|
34
|
+
| `foreground` | near-black `#080808` | all primary ink, headings, wordmark |
|
|
35
|
+
| `muted` / `secondary` | light gray `#f4f4f4` | hover rows, subtle fills, secondary buttons |
|
|
36
|
+
| `muted-foreground` | mid gray `#5a5a5a` | labels, captions, secondary text |
|
|
37
|
+
| `border` / `input` | hairline `#d8d8d8` | every separator, grid line, and field edge |
|
|
38
|
+
| `primary` | near-black `#080808` | the one primary action; every primary CTA |
|
|
39
|
+
| `primary-foreground` | white `#ffffff` | ink on the near-black action |
|
|
40
|
+
| `accent` | faint blue tint `#eaf1fe` | selected/hovered rows and nav, on-accent surfaces only |
|
|
41
|
+
| `accent-foreground` / `ring` | blue `#146ef5` | active nav ink, link emphasis, and the focus outline |
|
|
42
|
+
| `destructive` | red `#ee1d36` | destructive actions and error state only |
|
|
43
|
+
| `success` / `warning` | green `#00d722` / amber `#ffae13` | status signalling only, never chrome |
|
|
44
|
+
|
|
45
|
+
The purple / pink / blue / orange / green category palette is marketing fill; it carries no operator role except as the chart series (§7).
|
|
46
|
+
|
|
47
|
+
## 3 Typography
|
|
48
|
+
|
|
49
|
+
One sans, one mono. `font-sans` is WF Visual Sans Variable (falling back to Inter) — a single family
|
|
50
|
+
carries UI, body, and headings; weight and tracking, not a second face, carry the display voice. The
|
|
51
|
+
brand's ceiling is `font-weight-strong` 600 — it never goes heavier. `font-mono` is WFVisualSans-Mono
|
|
52
|
+
(Inconsolata fallback) for IDs, codes, timestamps, and log lines. Display tracks negative
|
|
53
|
+
(`heading-tracking` `-0.01em`) — tight kerning is part of the voice. Numeric columns render
|
|
54
|
+
`tabular-nums` so figures align down a column (floor P4).
|
|
55
|
+
|
|
56
|
+
| Step | Role | Size · line | Weight · tracking |
|
|
57
|
+
| --- | --- | --- | --- |
|
|
58
|
+
| h1 | page title | 24px / 1.3 | `font-weight-strong` · `heading-tracking` |
|
|
59
|
+
| h2 | section head | 20px / 1.4 | `font-weight-strong` · `heading-tracking` |
|
|
60
|
+
| h3 | card / group head | 16px / 1.5 | `font-weight-strong` |
|
|
61
|
+
| body | UI + prose, dense table | 14px / 1.6 | `font-weight-normal` |
|
|
62
|
+
| caption | uppercase eyebrow | 12px / 1.2 | `font-weight-strong`, `+0.6px`, uppercase |
|
|
63
|
+
|
|
64
|
+
Bump weight one step for emphasis — never past 600, never by resizing. Badge labels take the brand's signature semibold caption; the marketing eyebrow (`+1.5px` uppercase) survives as the section label.
|
|
65
|
+
|
|
66
|
+
## 4 Component Stylings
|
|
67
|
+
|
|
68
|
+
Every recurring component composes from the primitives — no literal values.
|
|
69
|
+
|
|
70
|
+
- **Button** — `primary`: filled `primary` (near-black) on `primary-foreground`, `radius` 4px, no pill.
|
|
71
|
+
Secondary: `background` fill, 1px `border`, `foreground`. Ghost: transparent, `accent` on hover.
|
|
72
|
+
- **Input** — `background` fill, 1px `border` (`border-weight`), `radius`; focus draws the `ring`
|
|
73
|
+
(blue) at 2px, no glow.
|
|
74
|
+
- **Card** — `card` surface, 1px `border`, `radius` steps up to the 8px card radius; shadow only when
|
|
75
|
+
lifted (`shadow-intensity`); inset by `density-inset`.
|
|
76
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
|
|
77
|
+
numeric columns; row selection tints `accent`.
|
|
78
|
+
- **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`
|
|
79
|
+
for content-heavy), beside the work, not over it (floor P3).
|
|
80
|
+
- **Badge** — hairline `border`, `muted`/status fill, uppercase caption; status badges take
|
|
81
|
+
`success` / `warning` / `destructive`, never `primary`; the info badge fills `ring` blue.
|
|
82
|
+
|
|
83
|
+
## 5 Layout
|
|
84
|
+
|
|
85
|
+
Base spacing unit 4px (Tailwind `--spacing` 0.25rem); the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 20 ·
|
|
86
|
+
24 · 32 · 48 · 64`. Shell dimensions map one-to-one to the layout primitives: sidebar
|
|
87
|
+
`sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`, side panel
|
|
88
|
+
`side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms `form-max-width`,
|
|
89
|
+
tables full-width. Density is governed globally by `density-tier` (rewriting the scale through
|
|
90
|
+
`density-gap`) and stepped per archetype by the surface catalog — never by absolute overrides.
|
|
91
|
+
|
|
92
|
+
## 6 Depth
|
|
93
|
+
|
|
94
|
+
Flat. Hierarchy comes from the surface ladder and hairlines, not shadow:
|
|
95
|
+
|
|
96
|
+
- **0 — canvas** `background`, no border.
|
|
97
|
+
- **1 — panel / card** `card` on a 1px `border`; shadow only when it must lift off the canvas.
|
|
98
|
+
- **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
|
|
99
|
+
shadow. The brand's five-stop layered drop-shadow collapses to this single restrained lift; rank is
|
|
100
|
+
border and position, never a heavier stack.
|
|
101
|
+
|
|
102
|
+
Focus is a 2px `ring` (blue) outline, never a glow, on every interactive element (floor P6). Three
|
|
103
|
+
z-levels: content, sticky chrome, overlay.
|
|
104
|
+
|
|
105
|
+
## 7 Do's & Don'ts
|
|
106
|
+
|
|
107
|
+
- **Do** reserve `primary` (near-black) for the single most important action; everything else is
|
|
108
|
+
neutral or status, and hierarchy rides hairlines, weight, and whitespace — the brand is flat.
|
|
109
|
+
- **Do** keep one chromatic accent: blue `#146ef5` for interactive state; nothing else competes.
|
|
110
|
+
- **Do** apply `tabular-nums` to numeric columns, `font-mono` to IDs/codes/timestamps, and cap type
|
|
111
|
+
weight at 600 — emphasize by weight, never by resizing or a heavier face.
|
|
112
|
+
- **Don't** use the purple / pink / blue / orange / green category palette as button or chrome fills —
|
|
113
|
+
those stay in the chart series; a chromatic CTA is off-brand.
|
|
114
|
+
- **Don't** pill the primary CTA or reach for a radius outside `radius-scale` (buttons 4px, cards 8px).
|
|
115
|
+
- **Don't** open detail or edit in a modal when the side panel fits — modals are confirmations only.
|
|
116
|
+
- **Don't** import the 80px hero display type or marketing gutters into an operator surface.
|
|
117
|
+
|
|
118
|
+
## 8 Responsive
|
|
119
|
+
|
|
120
|
+
The operator sweep is 375 / 768 / 1024 / 1440.
|
|
121
|
+
|
|
122
|
+
| Breakpoint | What changes |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
|
|
125
|
+
| 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
|
|
126
|
+
| 1024 / 1440 | sidebar expands; two-pane queue+detail holds; forms cap at `form-max-width`, tables full-width |
|
|
127
|
+
|
|
128
|
+
## 9 Agent Prompt Guide
|
|
129
|
+
|
|
130
|
+
Directives the emitting agent follows verbatim:
|
|
131
|
+
|
|
132
|
+
- What carries: the near-black `primary` action, pure achromatic gray neutrals, the single blue
|
|
133
|
+
interactive accent, 4px button / 8px card radius, the WF Visual Sans → Inter voice at weights
|
|
134
|
+
400–600 with negative tracking, and the five brand hues as the chart series. What stays behind: the
|
|
135
|
+
80px hero display type, full-saturation category-card fills, and marketing gutters.
|
|
136
|
+
- Accent only the primary action with near-black; reserve blue for focus, selection, and active nav.
|
|
137
|
+
If two things want emphasis, one of them is not primary.
|
|
138
|
+
- Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono` (P4).
|
|
139
|
+
- Every workflow completes from the keyboard; the 2px blue `ring` is always visible (P6). Stay flat —
|
|
140
|
+
hairline and weight before shadow; reach past a hairline only for a real overlay.
|
|
141
|
+
|
|
142
|
+
```yaml design-primitives
|
|
143
|
+
radius: 4px # derived: brand's canonical button/badge radius; cards step to the 8px card radius via the scale
|
|
144
|
+
shadow-intensity: 0.5 # derived: brand's signature is layered drop-shadow on featured cards; operator stays hairline-first, mid intensity lifts true overlays only
|
|
145
|
+
border-weight: 1px
|
|
146
|
+
density-gap: 1
|
|
147
|
+
density-inset: 1
|
|
148
|
+
font-sans: WF Visual Sans Variable, Inter, system-ui, -apple-system, sans-serif
|
|
149
|
+
font-mono: WFVisualSans-Mono, Inconsolata, ui-monospace, SFMono-Regular, Menlo, monospace
|
|
150
|
+
font-weight-normal: 400
|
|
151
|
+
font-weight-strong: 600
|
|
152
|
+
heading-tracking: -0.01em # derived: brand display tracking is -0.16px/16px ≈ -0.01em; negative kerning is the voice
|
|
153
|
+
duration-unit: 50ms # derived: corpus has no motion spec; standard operator base
|
|
154
|
+
duration-fast: 100ms # derived: no corpus motion
|
|
155
|
+
duration-normal: 150ms # derived: no corpus motion
|
|
156
|
+
duration-slow: 250ms # derived: no corpus motion
|
|
157
|
+
ease-default: cubic-bezier(0.4,0,0.2,1) # derived: standard operator ease
|
|
158
|
+
contrast-boost: 1
|
|
159
|
+
icon-stroke: 1.75 # derived: one step under lucide's 2 for a refined, engineered operator stroke
|
|
160
|
+
icon-size-base: 16px
|
|
161
|
+
sidebar-width-expanded: 248px # derived: brand is a website with no app shell; standard operator rail
|
|
162
|
+
sidebar-width-collapsed: 56px # derived: no brand shell
|
|
163
|
+
topbar-height: 56px # derived: brand nav-bar 16px vertical padding + 22px line ≈ 54, rounded
|
|
164
|
+
side-panel-width: 420px # derived: no brand shell
|
|
165
|
+
side-panel-width-rich: 640px # derived: no brand shell
|
|
166
|
+
modal-width-max: 560px # derived: no brand shell
|
|
167
|
+
form-max-width: 640px # derived: no brand shell
|
|
168
|
+
table-row-height: 44px # derived: brand's ~44px touch-target rhythm; cell padding 12/16
|
|
169
|
+
verbosity: default
|
|
170
|
+
feedback: subtle
|
|
171
|
+
density-tier: standard # derived: marketing surface is spacious, but a general operator default balances legibility and density; archetypes step denser
|
|
172
|
+
product-traits: [cms, dashboard, builder, admin, content-ops]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```yaml lever-manifest
|
|
176
|
+
version: 1
|
|
177
|
+
fonts: { sans: "WF Visual Sans Variable, Inter, system-ui, -apple-system, sans-serif", mono: "WFVisualSans-Mono, Inconsolata, ui-monospace, SFMono-Regular, Menlo, monospace" }
|
|
178
|
+
color-tokens:
|
|
179
|
+
light:
|
|
180
|
+
background: "#ffffff"
|
|
181
|
+
foreground: "#080808"
|
|
182
|
+
card: "#ffffff"
|
|
183
|
+
card-foreground: "#080808"
|
|
184
|
+
muted: "#f4f4f4" # derived: light neutral fill; brand neutrals are pure achromatic
|
|
185
|
+
muted-foreground: "#5a5a5a"
|
|
186
|
+
border: "#d8d8d8"
|
|
187
|
+
input: "#d8d8d8"
|
|
188
|
+
ring: "#146ef5" # derived: brand info blue is the interactive/focus accent
|
|
189
|
+
primary: "#080808"
|
|
190
|
+
primary-foreground: "#ffffff"
|
|
191
|
+
accent: "#eaf1fe" # derived: faint tint of the info blue for selection/hover surfaces
|
|
192
|
+
accent-foreground: "#146ef5"
|
|
193
|
+
destructive: "#ee1d36"
|
|
194
|
+
destructive-foreground: "#ffffff"
|
|
195
|
+
success: "#00d722"
|
|
196
|
+
warning: "#ffae13"
|
|
197
|
+
popover: "#ffffff"
|
|
198
|
+
popover-foreground: "#080808"
|
|
199
|
+
secondary: "#f4f4f4" # derived: matches the secondary-button neutral fill
|
|
200
|
+
secondary-foreground: "#080808"
|
|
201
|
+
chart-1: "#7a3dff"
|
|
202
|
+
chart-2: "#3b89ff"
|
|
203
|
+
chart-3: "#00d722"
|
|
204
|
+
chart-4: "#ff6b00"
|
|
205
|
+
chart-5: "#ed52cb"
|
|
206
|
+
sidebar: "#fafafa" # derived: faint neutral to seat the rail against the white canvas
|
|
207
|
+
sidebar-foreground: "#080808"
|
|
208
|
+
sidebar-primary: "#080808" # derived: brand app-shell active indicator uses the near-black primary
|
|
209
|
+
sidebar-primary-foreground: "#ffffff"
|
|
210
|
+
sidebar-accent: "#eaf1fe" # derived: selected-nav tint matches the content accent
|
|
211
|
+
sidebar-accent-foreground: "#146ef5"
|
|
212
|
+
sidebar-border: "#d8d8d8"
|
|
213
|
+
sidebar-ring: "#146ef5"
|
|
214
|
+
spacing-scale: [2, 4, 8, 12, 16, 20, 24, 32, 48, 64]
|
|
215
|
+
radius-scale: [0, 2, 4, 8, 9999]
|
|
216
|
+
shadow-levels: [none, sm, md]
|
|
217
|
+
motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
|
|
218
|
+
icons: { family: lucide, stroke: 1.75 }
|
|
219
|
+
accent-count: 1
|
|
220
|
+
```
|