@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: xAI
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# xAI — the engineered-cosmic monochrome operator design
|
|
9
|
+
|
|
10
|
+
xAI's web surface is a near-black cosmic canvas broken only by white outline pills, a proprietary
|
|
11
|
+
geometric sans (Universal Sans) at weight 400 with extreme negative tracking, and uppercase tracked
|
|
12
|
+
GeistMono eyebrows that read like code comments — confidently sparse, unmarketed. This entry is the
|
|
13
|
+
*operator* reading of that brand: an internal tool (model-ops console, agent-run queue, inference
|
|
14
|
+
dashboard, log stream) in xAI's language. What carries: the stark near-monochrome discipline, the
|
|
15
|
+
near-black `#0a0a0a` ink, the single sunset-orange accent held scarce, the pill shape on interactive
|
|
16
|
+
controls, the geometric-sans display voice (weight 400, negative tracking, never bold), the mono-caps
|
|
17
|
+
eyebrow, and hairline-only flat depth. What stays behind: the 96px hero display, the edge-to-edge black
|
|
18
|
+
page, and the sunset/dusk gradient illustration accents.
|
|
19
|
+
|
|
20
|
+
**Light surface, cosmic inlay.** Inverting the whole page to near-black would be dark-mode-as-default,
|
|
21
|
+
which the light floor refuses; instead the operator surface is a cool near-white canvas, and xAI's
|
|
22
|
+
signature near-black is carried as the **cosmic inlay** — the sidebar rail and the terminal / log /
|
|
23
|
+
metric panels. Both machine blocks are fully valued; brand tokens that override a generic ban
|
|
24
|
+
(near-black `#0a0a0a` ink, pill buttons) are recorded plainly, and derivations where the corpus is
|
|
25
|
+
silent are annotated `# derived:`.
|
|
26
|
+
|
|
27
|
+
## 1 Visual Theme
|
|
28
|
+
|
|
29
|
+
Light by default; dark is opt-in. The content floats on a faint cool near-white `background`
|
|
30
|
+
(`#fbfbfc`); cards step up to pure white `card` (`#ffffff`), so a panel reads by a hair of brightness
|
|
31
|
+
plus its hairline, never by shadow. Emphatically flat — the brand uses no shadows; cool hairline
|
|
32
|
+
`border`, type weight, and the near-white-to-white step carry every elevation cue. A single accent,
|
|
33
|
+
sunset orange `primary` (`#ff7a17`) — xAI's one brand chroma — is held scarce: the primary action, the
|
|
34
|
+
focus `ring`, the active-nav indicator. Ink is xAI's stark near-black `foreground` (`#0a0a0a`), which
|
|
35
|
+
returns as the cosmic inlay — a near-black `sidebar` rail and dark terminal / metric panels. Density is
|
|
36
|
+
`standard`, engineered-tight, stepping denser per archetype.
|
|
37
|
+
|
|
38
|
+
## 2 Color Roles
|
|
39
|
+
|
|
40
|
+
Light values (the manifest carries hex — the corpus's native format). One accent — `primary` is the
|
|
41
|
+
only chromatic hue that carries UI meaning; the cosmic accent palette lives only in charts (§7), status hues speak only status.
|
|
42
|
+
|
|
43
|
+
| Role | Value | Allowed where |
|
|
44
|
+
| --- | --- | --- |
|
|
45
|
+
| `background` | cool near-white `#fbfbfc` | the page floor and content canvas — the dominant surface |
|
|
46
|
+
| `card` / `popover` | pure white `#ffffff` | cards and overlays — a slight bright lift off the near-white, read by hairline |
|
|
47
|
+
| `foreground` | stark near-black `#0a0a0a` | display and all primary ink — xAI's signature black |
|
|
48
|
+
| `muted` / `secondary` | cool light fill `#f2f3f5` | hover rows, quiet band tints, secondary-button fill |
|
|
49
|
+
| `muted-foreground` | cool gray `#7d8187` | labels, captions, secondary text — the brand's mute gray |
|
|
50
|
+
| `border` / `input` | cool hairline `#e6e7ea` | every separator, grid line, and field edge — one cool step, not an ink line |
|
|
51
|
+
| `primary` | sunset orange `#ff7a17` | the one primary action; the focus `ring`; the active-nav indicator |
|
|
52
|
+
| `primary-foreground` | near-black `#0a0a0a` | text on the sunset action — near-black reads on the bright orange (the brand's on-primary) |
|
|
53
|
+
| `accent` | cool selection lift `#eceef1` | selected / hovered rows and nav — a neutral cool step, never orange |
|
|
54
|
+
| `ring` | `primary` sunset | the focus outline — high-chroma, unmistakable even at 1px |
|
|
55
|
+
| `destructive` | clean red `#e5484d` | destructive actions and error state only |
|
|
56
|
+
| `success` / `warning` | green `#30a46c` / amber-gold `#d99126` | status signalling only, never chrome |
|
|
57
|
+
|
|
58
|
+
## 3 Typography
|
|
59
|
+
|
|
60
|
+
`font-sans` is Universal Sans (the proprietary geometric brand face), with Inter the corpus's documented
|
|
61
|
+
open substitute — one sans carries body, UI, labels, and headings. `font-mono` is Geist Mono for IDs,
|
|
62
|
+
codes, timestamps, log lines, metric counters, and — the signature move — the uppercase tracked
|
|
63
|
+
**eyebrow** above every section head; numeric columns render `tabular-nums`. The defining trait is xAI's
|
|
64
|
+
restraint: the display sits at weight 400 with aggressive negative tracking (never bold — size and
|
|
65
|
+
gathering do the emphasis). The 96px hero stays behind; an operator surface tops out at a 24px title.
|
|
66
|
+
|
|
67
|
+
| Step | Role | Family | Size · line | Weight · tracking |
|
|
68
|
+
| --- | --- | --- | --- | --- |
|
|
69
|
+
| h1 | page title | sans | 24px / 1.2 | `font-weight-normal` (400) · `heading-tracking` |
|
|
70
|
+
| h2 | section head | sans | 19px / 1.3 | `font-weight-normal` (400) · -0.02em |
|
|
71
|
+
| h3 | card / group head | sans | 15px / 1.4 | `font-weight-strong` (500) · 0 |
|
|
72
|
+
| body | UI + prose | sans | 14px / 1.5 | `font-weight-normal` |
|
|
73
|
+
| small | labels, meta, dense table | sans | 13px / 1.4 | `font-weight-normal` |
|
|
74
|
+
| eyebrow | uppercase mono label | mono | 12px / 1.4 | 400, `+0.12em`, uppercase (GeistMono) |
|
|
75
|
+
| code | IDs, logs, amounts | mono | 13px / 1.5 | `font-weight-normal` |
|
|
76
|
+
|
|
77
|
+
Keep the display at 400 with gathered negative tracking — it is the brand; never bold it, and keep the eyebrow mono, not sans.
|
|
78
|
+
|
|
79
|
+
## 4 Component Stylings
|
|
80
|
+
|
|
81
|
+
Every recurring operator component composes from the primitives — no literal values.
|
|
82
|
+
- **Button** — primary: filled sunset `primary` on near-black `primary-foreground`, **pill radius** (the pill is xAI). Secondary: white `card`, 1px `border`, `foreground`, pill. Ghost: transparent, `accent` on hover.
|
|
83
|
+
- **Input** — `background` fill, 1px `border` (`border-weight`), `radius` (8px, not pilled); focus draws the sunset `ring` at 1px, no glow.
|
|
84
|
+
- **Card** — white `card` surface on a 1px `border` — the bright step off the near-white carries the lift; `radius` 8px; shadow only when a true overlay must separate; inset by `density-inset`.
|
|
85
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on numeric columns; row selection lifts to `accent`; column headers wear the mono-caps eyebrow.
|
|
86
|
+
- **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.
|
|
87
|
+
- **Badge** — pill radius, `muted`/status fill, uppercase mono caption; status badges take `success` / `warning` / `destructive`, never `primary`.
|
|
88
|
+
|
|
89
|
+
## 5 Layout
|
|
90
|
+
|
|
91
|
+
Base spacing unit 4px; the on-scale ramp is xAI's exact set — `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64`.
|
|
92
|
+
Shell dimensions map one-to-one to the layout primitives: sidebar `sidebar-width-expanded` (240px) /
|
|
93
|
+
`sidebar-width-collapsed` (56px), topbar `topbar-height` (52px, the brand's lean nav), side panel
|
|
94
|
+
`side-panel-width` (420px) / `side-panel-width-rich` (640px), modal cap `modal-width-max`, forms
|
|
95
|
+
`form-max-width`, tables full-width — engineered-tight, not editorial-loose. Density is governed
|
|
96
|
+
globally by `density-tier` and stepped per archetype by the surface catalog, never by absolute overrides.
|
|
97
|
+
|
|
98
|
+
## 6 Depth
|
|
99
|
+
|
|
100
|
+
Flat and hairline-only — the brand uses no shadows. Depth comes from the surface step, cool hairlines, and the cosmic inlay:
|
|
101
|
+
|
|
102
|
+
- **0 — canvas** `background` (`#fbfbfc`), no border.
|
|
103
|
+
- **1 — panel / card** white `card` (`#ffffff`) on a 1px `border`; the bright step plus the hairline carries the lift. Selected / hover rows lift to `accent` (`#eceef1`).
|
|
104
|
+
- **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns the faintest lift, enough to float above the near-white. Rank is surface, border, and position.
|
|
105
|
+
- **inlay — cosmic near-black** `#0a0a0a` with `#dadbdf` text and `font-mono` — the sidebar rail and terminal / log / metric panels, xAI's white-on-near-black soul carried into a light UI.
|
|
106
|
+
|
|
107
|
+
Focus is a 1px sunset `ring` outline (never a glow), visible everywhere because the orange is high-chroma; three z-levels: content, sticky chrome, overlay.
|
|
108
|
+
|
|
109
|
+
## 7 Do's & Don'ts
|
|
110
|
+
|
|
111
|
+
- **Do** stay near-monochrome — near-black ink on cool near-white, hairlines and type weight before any color; the restraint is the brand.
|
|
112
|
+
- **Do** reserve sunset orange `primary` for the single primary action, the focus `ring`, and the active-nav indicator — its scarcity is what reads as voltage.
|
|
113
|
+
- **Do** pill the interactive controls (buttons, chips, badges) — the pill is xAI's shape system; keep cards, inputs, and panels at the 8px `radius`.
|
|
114
|
+
- **Do** keep the display at weight 400 with negative tracking, wear GeistMono uppercase for eyebrows and metric counters, and render every code / log / terminal surface in `font-mono` with `tabular-nums`.
|
|
115
|
+
- **Don't** bold the display — weight 400 is the whole scale; component heads and labels earn 500 at most.
|
|
116
|
+
- **Don't** promote a second chromatic accent — the dusk / twilight / breeze cosmic hues are chart series only, and status stays `success` / `warning` / `destructive`; keep the amber-gold warning distinct from the sunset primary.
|
|
117
|
+
- **Don't** signal elevation with drop shadows, or turn the whole page near-black — the near-black is the sidebar and terminal inlay, not the operator canvas.
|
|
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 (stays near-black); 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
|
+
## 9 Agent Prompt Guide
|
|
131
|
+
|
|
132
|
+
Directives the emitting agent follows verbatim:
|
|
133
|
+
|
|
134
|
+
- Reach for the cool near-white canvas first, near-black ink on top — the operator page is light; the near-black is the sidebar rail and terminal / metric inlays, never the whole page.
|
|
135
|
+
- Spend sunset orange once per surface: the primary action, the focus `ring`, the active-nav indicator. If two things want the orange, one of them is not primary. Color otherwise belongs to data and status.
|
|
136
|
+
- The display sits at weight 400 with negative tracking — the geometric-sans voice; never bold it. Component heads and labels earn the restrained 500. Emphasise by size and gathering, not weight.
|
|
137
|
+
- The eyebrow above every section head is GeistMono, uppercase, positively tracked — the code-comment label. Every numeric column is `tabular-nums`; every ID / code / timestamp / metric counter is `font-mono`.
|
|
138
|
+
- Pill the buttons, chips, and badges — the pill is xAI's shape system; keep cards, inputs, and panels at the 8px radius. Dress terminal, log, and metric panels in the near-black cosmic inlay (`#0a0a0a`, `font-mono`).
|
|
139
|
+
- Depth is the surface step and cool hairlines, never shadow; the brand uses none. Reach for the faint overlay lift only for a true modal or popover. Detail and edit go in the side panel beside the work.
|
|
140
|
+
- Keyboard-first: the sunset `ring` focus outline is always visible. Leave behind the 96px hero display, the edge-to-edge black page, and the sunset / dusk gradient accents.
|
|
141
|
+
|
|
142
|
+
```yaml design-primitives
|
|
143
|
+
radius: 8px # corpus: cards/inputs at rounded.sm (8px, the brand's --radius); buttons/chips/badges reach the pill
|
|
144
|
+
shadow-intensity: 0.1 # corpus: the brand uses NO shadows ("hairline borders carry all elevation"); only true overlays earn the faintest lift
|
|
145
|
+
border-weight: 1px # corpus: 1px hairlines carry all depth
|
|
146
|
+
density-gap: 1 # derived: marketing-spacious brand read to an honest, engineered-tight operator standard
|
|
147
|
+
density-inset: 1 # derived: matches density-gap for coherent component insets
|
|
148
|
+
font-sans: Universal Sans, Inter, system-ui, -apple-system, sans-serif # corpus: Universal Sans is the proprietary geometric face; Inter is the documented open substitute
|
|
149
|
+
font-mono: Geist Mono, ui-monospace, SFMono-Regular, Menlo, monospace # corpus: GeistMono for eyebrows, labels, metric counters, and code
|
|
150
|
+
font-weight-normal: 400 # corpus: weight 400 for everything — the brand never bolds; negative tracking + size do the emphasis
|
|
151
|
+
font-weight-strong: 500 # derived: the display holds 400 (never bold); operator legibility earns a restrained 500 for component heads and labels only
|
|
152
|
+
heading-tracking: -0.03em # corpus: the gathered negative tracking is the signature (-2.4px at hero 96px); -0.03em keeps the precise gathered look at operator heading scale
|
|
153
|
+
duration-unit: 50ms # derived: corpus silent on motion (marketing surface); engineered character favors a crisp functional base
|
|
154
|
+
duration-fast: 100ms # derived: corpus silent on motion; crisp 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; standard functional ease
|
|
158
|
+
contrast-boost: 1 # derived: the cool hairlines are intentional engineered calm; no boost
|
|
159
|
+
icon-stroke: 1.5 # derived: corpus silent on icons; a light refined stroke suits the precise engineered 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 top-nav only); engineered-tight rail
|
|
162
|
+
sidebar-width-collapsed: 56px # derived: standard operator icon rail
|
|
163
|
+
topbar-height: 52px # corpus: lean nav (md/xl padding, body-sm); operator lands at 52px
|
|
164
|
+
side-panel-width: 420px # derived: corpus has no shell; engineered-standard detail width
|
|
165
|
+
side-panel-width-rich: 640px # derived: content-heavy detail panel
|
|
166
|
+
modal-width-max: 560px # derived: corpus's bands are full-bleed marketing; operator confirmation cap
|
|
167
|
+
form-max-width: 640px # derived: corpus content centres ~1200px (marketing); operator single-column form cap
|
|
168
|
+
table-row-height: 40px # derived: engineered-dense standard; not editorial-loose
|
|
169
|
+
verbosity: default
|
|
170
|
+
feedback: minimal # derived: xAI's austere engineered restraint → crisp minimal feedback (no press-scale, 1px ring); the high-chroma sunset ring keeps focus visible
|
|
171
|
+
density-tier: standard # derived: a marketing-spacious brand read down to an honest engineered operator tier; archetypes step denser
|
|
172
|
+
product-traits: [ai-console, agent-ops, model-ops, dashboard, dev-tools]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```yaml lever-manifest
|
|
176
|
+
version: 1
|
|
177
|
+
fonts: { sans: "Universal Sans, Inter, system-ui, -apple-system, sans-serif", mono: "Geist Mono, ui-monospace, SFMono-Regular, Menlo, monospace" }
|
|
178
|
+
color-tokens:
|
|
179
|
+
light:
|
|
180
|
+
background: "#fbfbfc" # derived: cool near-white page floor (light inversion of the #0a0a0a canvas; engineered-cool temperature)
|
|
181
|
+
foreground: "#0a0a0a" # corpus: xAI's signature near-black, carried as operator ink (brand override of a near-pure-black ban)
|
|
182
|
+
card: "#ffffff" # derived: pure white bright step off the near-white, inverting the dark canvas→card ladder
|
|
183
|
+
card-foreground: "#0a0a0a"
|
|
184
|
+
muted: "#f2f3f5" # derived: cool light fill (the light-surface analog of canvas-soft's quiet-fill role)
|
|
185
|
+
muted-foreground: "#7d8187" # corpus: the brand's body-mid / mute cool gray
|
|
186
|
+
border: "#e6e7ea" # derived: cool hairline (light inversion of the #212327 dark hairline)
|
|
187
|
+
input: "#e6e7ea"
|
|
188
|
+
ring: "#ff7a17"
|
|
189
|
+
primary: "#ff7a17" # corpus: sunset orange — xAI's one brand chroma, promoted to the single operator accent
|
|
190
|
+
primary-foreground: "#0a0a0a" # corpus: near-black on the bright sunset (the brand's on-primary), legible where white would fail
|
|
191
|
+
accent: "#eceef1" # derived: cool selection lift one step past muted, so selection reads over hover; never orange
|
|
192
|
+
accent-foreground: "#0a0a0a"
|
|
193
|
+
destructive: "#e5484d" # derived: corpus surfaces no semantic palette; a clean red for destructive / error
|
|
194
|
+
destructive-foreground: "#ffffff"
|
|
195
|
+
success: "#30a46c" # derived: corpus has no success hue; a clean green for status
|
|
196
|
+
warning: "#d99126" # derived: corpus has no warning hue; an amber-gold held distinct from the sunset primary
|
|
197
|
+
popover: "#ffffff"
|
|
198
|
+
popover-foreground: "#0a0a0a"
|
|
199
|
+
secondary: "#f2f3f5"
|
|
200
|
+
secondary-foreground: "#0a0a0a"
|
|
201
|
+
chart-1: "#ff7a17" # corpus: sunset — the brand accent palette carries the chart series
|
|
202
|
+
chart-2: "#7c3aed" # corpus: dusk purple
|
|
203
|
+
chart-3: "#a0c3ec" # corpus: breeze blue
|
|
204
|
+
chart-4: "#c4b5fd" # corpus: twilight violet
|
|
205
|
+
chart-5: "#0d1726" # corpus: midnight — the deep cosmic anchor
|
|
206
|
+
sidebar: "#0a0a0a" # corpus: the cosmic near-black canvas, carried as the operator sidebar rail (the white-on-near-black soul as chrome)
|
|
207
|
+
sidebar-foreground: "#dadbdf" # corpus: xAI body text on dark
|
|
208
|
+
sidebar-primary: "#ff7a17" # corpus: sunset accent for the active-nav indicator on the dark rail
|
|
209
|
+
sidebar-primary-foreground: "#0a0a0a"
|
|
210
|
+
sidebar-accent: "#1a1c20" # corpus: canvas-soft — hovered / selected nav on the dark rail
|
|
211
|
+
sidebar-accent-foreground: "#ffffff"
|
|
212
|
+
sidebar-border: "#212327" # corpus: the brand's dark hairline
|
|
213
|
+
sidebar-ring: "#ff7a17"
|
|
214
|
+
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
|
|
215
|
+
radius-scale: [0, 4, 8, 12, 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,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: design-md/v1
|
|
3
|
+
product: Zapier
|
|
4
|
+
provenance: library
|
|
5
|
+
sourced: 2026-07-04
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Zapier — the operator reading
|
|
9
|
+
|
|
10
|
+
The operator translation of Zapier's workflow-automation brand. Zapier's public surface is confidently
|
|
11
|
+
warm — a cream canvas, deep coffee ink, one saturated orange CTA, and a two-face type system (Degular
|
|
12
|
+
Display for hero moments, Inter for the rest). This entry keeps what survives at operator scale: the
|
|
13
|
+
cream temperature, the single orange accent, the coffee ink, the recessed cream-card elevation, the
|
|
14
|
+
12px middle-radius signature, and Inter as the workhorse. The 56px Degular hero, the dark coffee-ink
|
|
15
|
+
polarity-flip bands, and the 64px rhythm stay behind — warm where the category runs cool, but earning
|
|
16
|
+
its density and reserving its one accent; judgments away from the brand are annotated `# derived:`.
|
|
17
|
+
|
|
18
|
+
## 1 Visual Theme
|
|
19
|
+
|
|
20
|
+
Warm by default; dark is opt-in. The canvas is Zapier's warm-cream `background` (`#fffefb`) — a
|
|
21
|
+
deliberate off-white, never the pure white the category defaults to (it reads light, so the
|
|
22
|
+
light-default floor holds — it is simply warm). Flat: hierarchy comes from warm hairline `border`, the
|
|
23
|
+
recessed cream-card surface ladder, and type weight, never heavy shadow. A single accent, Zapier orange
|
|
24
|
+
`primary` (`#ff4f00`), is reserved for the one action that matters; ink is deep coffee `foreground`
|
|
25
|
+
(`#201515`), never pure black. Corners hold the brand's signature 12px middle radius — neither
|
|
26
|
+
friendly-pill nor technical-square. Density is `standard`; the anchor is a bright cream canvas holding
|
|
27
|
+
faintly recessed cream cards.
|
|
28
|
+
|
|
29
|
+
## 2 Color Roles
|
|
30
|
+
|
|
31
|
+
Light values (the manifest carries the exact hex — the corpus's native format). One accent: `primary`
|
|
32
|
+
is the only chromatic hue that carries meaning; status hues speak only status.
|
|
33
|
+
|
|
34
|
+
| Role | Value | Allowed where |
|
|
35
|
+
| --- | --- | --- |
|
|
36
|
+
| `background` / `popover` | warm cream `#fffefb` (canvas) | page and overlays — the brightest surface |
|
|
37
|
+
| `card` | recessed cream `#f8f4f0` (canvas-soft) | content cards / inset panels — a step below canvas, elevation by surface contrast |
|
|
38
|
+
| `foreground` | deep coffee `#201515` (ink) | all primary ink and headings; never pure black |
|
|
39
|
+
| `muted` / `secondary` | soft cream `#f1ece4` | hover rows, subtle fills, secondary button fill |
|
|
40
|
+
| `muted-foreground` | warm gray `#605d52` (body) | labels, captions, secondary text |
|
|
41
|
+
| `border` | warm hairline `#e9e2d8` | separators, grid lines, card edges |
|
|
42
|
+
| `input` | coffee ink `#201515` | form-field edges — the brand's bold ink-bordered field |
|
|
43
|
+
| `primary` | Zapier orange `#ff4f00` | the one primary action; active nav; the single conversion voltage |
|
|
44
|
+
| `accent` | pale orange `#ffe9e0` | selected/hovered rows and nav — a whisper of brand warmth |
|
|
45
|
+
| `accent-foreground` | burnt orange `#b83900` | ink on the accent tint |
|
|
46
|
+
| `ring` | `primary` orange | the focus outline — unmistakable, because keyboard-first |
|
|
47
|
+
| `destructive` | brick red `#c0362c` | destructive actions and error state only — distinct from the orange |
|
|
48
|
+
| `success` / `warning` | green `#3f8f5a` / gold `#c88a1e` | status signalling only, never chrome |
|
|
49
|
+
|
|
50
|
+
The warm-neutral ladder runs coffee-ink → body `#605d52` → body-mid `#939084` → mute `#c5c0b1`: every
|
|
51
|
+
neutral carries warmth, none is cool gray. The dark coffee polarity-flip (dark hero/feature bands, dark
|
|
52
|
+
footer) is a marketing device and stays behind (see §7).
|
|
53
|
+
|
|
54
|
+
## 3 Typography
|
|
55
|
+
|
|
56
|
+
`font-sans` is **Inter** — the brand's actual workhorse (sub-display, body, button, label) and, at
|
|
57
|
+
operator scale, the whole ramp; its display steps track slightly negative, which is what carries. The
|
|
58
|
+
proprietary Degular Display carries only hero-scale loud moments (56px, weight 500) and stays behind.
|
|
59
|
+
`font-mono` is derived — the corpus ships none, but zap IDs, run IDs, webhook payloads, and log
|
|
60
|
+
timestamps need one. Numeric columns render `tabular-nums`; headlines stay sentence-case.
|
|
61
|
+
|
|
62
|
+
| Step | Role | Size · line | Weight · tracking |
|
|
63
|
+
| --- | --- | --- | --- |
|
|
64
|
+
| h1 | page title | 24px / 1.25 | `font-weight-strong` · `heading-tracking` |
|
|
65
|
+
| h2 | section head | 20px / 1.3 | `font-weight-strong` · `heading-tracking` |
|
|
66
|
+
| h3 | card / group head | 16px / 1.35 | `font-weight-strong` · -0.01em |
|
|
67
|
+
| body | UI + prose | 14px / 1.45 | `font-weight-normal` |
|
|
68
|
+
| small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
|
|
69
|
+
| caption | uppercase eyebrow | 13px / 1.3 | `font-weight-strong`, +0.06em, uppercase |
|
|
70
|
+
|
|
71
|
+
The eyebrow keeps **positive** tracking — the corpus's signature label style (Degular +1px at 14px),
|
|
72
|
+
carried on Inter uppercase. Emphasize by weight, never size, never past 600 (the corpus 700 is
|
|
73
|
+
display-micro and stays behind).
|
|
74
|
+
|
|
75
|
+
## 4 Component Stylings
|
|
76
|
+
|
|
77
|
+
Every recurring operator component composes from the primitives — no literal values.
|
|
78
|
+
|
|
79
|
+
- **Button** — filled orange on `primary-foreground` (warm white), `radius` (12px), no pill. Secondary:
|
|
80
|
+
`secondary` cream fill, 1px `border`. Tertiary/outline: transparent, bold ink border. Ghost: `accent`
|
|
81
|
+
on hover.
|
|
82
|
+
- **Input** — `background` fill, 1px `input` (coffee-ink) border (`border-weight`), `radius` at the 6px
|
|
83
|
+
scale step; focus draws the orange `ring` at 2px, no glow.
|
|
84
|
+
- **Card** — recessed `card` cream on the brighter canvas (surface-contrast elevation); 1px `border` for
|
|
85
|
+
a grid edge; shadow only when a card truly floats; inset by `density-inset`.
|
|
86
|
+
- **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
|
|
87
|
+
numeric columns; row selection tints `accent`.
|
|
88
|
+
- **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`
|
|
89
|
+
for content-heavy), beside the work, not over it.
|
|
90
|
+
- **Badge** — pill radius, `muted`/status fill, uppercase caption; status badges take `success` /
|
|
91
|
+
`warning` / `destructive`, never `primary`.
|
|
92
|
+
|
|
93
|
+
## 5 Layout
|
|
94
|
+
|
|
95
|
+
Base spacing unit 4px; the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64` (the corpus
|
|
96
|
+
tokens; the 64px marketing band padding stays behind). Shell dimensions map one-to-one to the layout
|
|
97
|
+
primitives: sidebar `sidebar-width-expanded` (256px) / `sidebar-width-collapsed` (56px), topbar
|
|
98
|
+
`topbar-height` (56px), side panel `side-panel-width` (440px) / `side-panel-width-rich` (640px), modal
|
|
99
|
+
`modal-width-max`, forms `form-max-width`, tables full-width. Density is governed globally by
|
|
100
|
+
`density-tier` and stepped per archetype by the surface catalog — never by absolute overrides.
|
|
101
|
+
|
|
102
|
+
## 6 Depth
|
|
103
|
+
|
|
104
|
+
Flat, surface-contrast-first. Hierarchy comes from the recessed cream ladder and warm hairlines:
|
|
105
|
+
|
|
106
|
+
- **0 — canvas** `background` (`#fffefb`), no border.
|
|
107
|
+
- **1 — panel / card** recessed `card` cream (`#f8f4f0`) — surface contrast carries the elevation; a 1px
|
|
108
|
+
`border` where a grid edge is wanted. Emphasized outlines take the bold ink border.
|
|
109
|
+
- **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
|
|
110
|
+
shadow, over a scrim for modals. Rank is surface, border, and position, never a heavier shadow.
|
|
111
|
+
|
|
112
|
+
Focus is a 2px orange `ring` outline (never a glow) on every interactive element. Three z-levels:
|
|
113
|
+
content, sticky chrome, overlay.
|
|
114
|
+
|
|
115
|
+
## 7 Do's & Don'ts
|
|
116
|
+
|
|
117
|
+
- **Do** anchor on the warm cream canvas (`#fffefb`) — pure white loses the brand; keep coffee ink
|
|
118
|
+
`#201515`, never pure black. The temperature is the voice.
|
|
119
|
+
- **Do** reserve orange `primary` for the single most important action — orange + cream + coffee is the
|
|
120
|
+
whole conversion story; everything else is neutral or status.
|
|
121
|
+
- **Do** keep corners at the 12px middle radius on buttons and cards; inputs step to 6px, badges pill.
|
|
122
|
+
- **Do** apply `tabular-nums` to numerics with `font-mono` for IDs, run codes, and timestamps.
|
|
123
|
+
- **Don't** render the CTA as a pill or a square — the 12px rounded rectangle is the signature.
|
|
124
|
+
- **Don't** promote a second chromatic accent, and don't let orange become `destructive` (use the brick
|
|
125
|
+
red); status uses `success` / `warning` / `destructive`.
|
|
126
|
+
- **Don't** pull the Degular hero, the dark coffee polarity-flip bands, or the 64px rhythm into an
|
|
127
|
+
operator surface.
|
|
128
|
+
|
|
129
|
+
## 8 Responsive
|
|
130
|
+
|
|
131
|
+
The operator sweep is 375 / 768 / 1024 / 1440.
|
|
132
|
+
|
|
133
|
+
| Breakpoint | What changes |
|
|
134
|
+
| --- | --- |
|
|
135
|
+
| 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
|
|
136
|
+
| 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
|
|
137
|
+
| 1024 | sidebar expands; two-pane queue+detail holds side by side |
|
|
138
|
+
| 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
|
|
139
|
+
|
|
140
|
+
## 9 Agent Prompt Guide
|
|
141
|
+
|
|
142
|
+
Directives the emitting agent follows verbatim. This brand is warm and confident; keep it restrained.
|
|
143
|
+
|
|
144
|
+
**Carries over:** the warm cream temperature (canvas `#fffefb`, never pure white) · deep coffee ink
|
|
145
|
+
`#201515` (never pure black) · orange `primary` (`#ff4f00`) as the single reserved accent · the 12px
|
|
146
|
+
middle-radius character (never pill, never square) · the recessed cream-card surface-contrast elevation
|
|
147
|
+
· the bold ink-bordered field · Inter with the positive-tracked uppercase eyebrow · `tabular-nums`.
|
|
148
|
+
|
|
149
|
+
**Stays behind:** the 56px Degular Display hero · the dark coffee-ink polarity-flip (dark hero/feature/
|
|
150
|
+
pricing bands, dark footer) · the illustrative zap/workflow SVGs · the 64px section-padding rhythm.
|
|
151
|
+
|
|
152
|
+
- Lead every list surface with its table; accent only the primary action in orange — if two things want
|
|
153
|
+
it, one is not primary.
|
|
154
|
+
- Reach for the warm cream canvas first; float recessed cream cards on it, separated by surface contrast
|
|
155
|
+
and warm hairlines before shadow. Detail and edit go in the side panel; a modal is a confirmation.
|
|
156
|
+
- Every numeric column is `tabular-nums`; every ID / run code / timestamp is `font-mono`; every workflow
|
|
157
|
+
completes from the keyboard with the orange `ring` outline always visible.
|
|
158
|
+
- One accent. Type stays on Inter — Degular Display and the marketing bands do not follow into a console.
|
|
159
|
+
|
|
160
|
+
```yaml design-primitives
|
|
161
|
+
radius: 12px # corpus: buttons and cards at rounded.md (12px) — the brand's explicit middle-radius signature; inputs step to 6px via the scale
|
|
162
|
+
shadow-intensity: 0.4 # derived: flat, surface-contrast-first; shadow only lifts true overlays (toasts/modals)
|
|
163
|
+
border-weight: 1px
|
|
164
|
+
density-gap: 1
|
|
165
|
+
density-inset: 1
|
|
166
|
+
font-sans: Inter, system-ui, -apple-system, sans-serif # derived: Inter is the brand's actual workhorse for everything but the hero; Degular Display (hero-only) stays behind
|
|
167
|
+
font-mono: JetBrains Mono, ui-monospace, SFMono-Regular, monospace # derived: corpus ships no mono; zap/run IDs, webhook payloads, and log timestamps need one — JetBrains Mono pairs with Inter
|
|
168
|
+
font-weight-normal: 400
|
|
169
|
+
font-weight-strong: 600 # corpus: card titles and primary buttons at 600; the 700 micro-label is display-only and stays behind
|
|
170
|
+
heading-tracking: -0.02em # derived: the brand's Inter display steps track ~-0.025em (display-sub-sm -0.6px/24px); softened to -0.02em at operator heading scale
|
|
171
|
+
duration-unit: 50ms
|
|
172
|
+
duration-fast: 150ms # derived: corpus silent on motion; a warm brand runs a touch softer than a dense console
|
|
173
|
+
duration-normal: 200ms # derived: corpus silent on motion
|
|
174
|
+
duration-slow: 300ms # derived: corpus silent on motion
|
|
175
|
+
ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent; standard operator ease
|
|
176
|
+
contrast-boost: 1 # derived: warm hairlines are intentional; no boost at default
|
|
177
|
+
icon-stroke: 1.75 # derived: corpus uses illustrative SVGs; a confident 1.75 stroke suits the bold-warm voice, one step under lucide's 2
|
|
178
|
+
icon-size-base: 16px # derived: corpus has no icon spec; operator standard
|
|
179
|
+
sidebar-width-expanded: 256px # derived: corpus is marketing-only; warm-generous operator nav, a step over the dense rail
|
|
180
|
+
sidebar-width-collapsed: 56px # derived: standard operator icon rail
|
|
181
|
+
topbar-height: 56px # derived: corpus marketing nav is generous; operator tightens to a working 56px
|
|
182
|
+
side-panel-width: 440px # derived: warm-generous detail panel; no corpus shell spec
|
|
183
|
+
side-panel-width-rich: 640px # derived: content-heavy detail width
|
|
184
|
+
modal-width-max: 560px # derived: corpus silent; confirmation dialog cap
|
|
185
|
+
form-max-width: 640px # derived: single-column form cap
|
|
186
|
+
table-row-height: 44px # derived: warm posture → rows breathe a touch over the dense 40px default
|
|
187
|
+
verbosity: default
|
|
188
|
+
feedback: subtle # derived: Zapier's warm-confident voice wants gentle present feedback, not austere silence
|
|
189
|
+
density-tier: standard # derived: a marketing-generous brand read down to an honest operator tier; warmth carried by palette and radius, not whitespace
|
|
190
|
+
product-traits: [workflow-automation, automation, dashboard, saas, b2b]
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```yaml lever-manifest
|
|
194
|
+
version: 1
|
|
195
|
+
fonts: { sans: "Inter, system-ui, -apple-system, sans-serif", mono: "JetBrains Mono, ui-monospace, SFMono-Regular, monospace" }
|
|
196
|
+
color-tokens:
|
|
197
|
+
light:
|
|
198
|
+
background: "#fffefb"
|
|
199
|
+
foreground: "#201515"
|
|
200
|
+
card: "#f8f4f0" # recessed cream card — surface-contrast elevation, a step below the canvas
|
|
201
|
+
card-foreground: "#201515"
|
|
202
|
+
muted: "#f1ece4" # derived: a step below the card cream for hover rows and subtle fills
|
|
203
|
+
muted-foreground: "#605d52"
|
|
204
|
+
border: "#e9e2d8" # derived: warm hairline for grid lines and separators; the corpus carries card separation by surface contrast, so a faint warm line is derived
|
|
205
|
+
input: "#201515" # brand's bold ink-bordered field (corpus text-input borderColor = ink)
|
|
206
|
+
ring: "#ff4f00" # derived: corpus silent on focus; orange is the interactive voltage, unmistakable for keyboard-first
|
|
207
|
+
primary: "#ff4f00"
|
|
208
|
+
primary-foreground: "#fffefb" # warm white (on-primary), never pure white
|
|
209
|
+
accent: "#ffe9e0" # derived: pale orange wash for row/nav selection — a whisper of the brand warmth
|
|
210
|
+
accent-foreground: "#b83900" # derived: burnt orange, readable ink on the pale tint
|
|
211
|
+
destructive: "#c0362c" # derived: brand ships no semantic red; a brick red distinct from the primary orange
|
|
212
|
+
destructive-foreground: "#fffefb"
|
|
213
|
+
success: "#3f8f5a" # derived: brand ships no green; a warm-compatible status green, status only
|
|
214
|
+
warning: "#c88a1e" # derived: brand ships no amber; a warm gold distinct from the primary orange, status only
|
|
215
|
+
popover: "#fffefb"
|
|
216
|
+
popover-foreground: "#201515"
|
|
217
|
+
secondary: "#f1ece4" # cream secondary-button fill (the dark-ink secondary is a marketing polarity-flip, stays behind)
|
|
218
|
+
secondary-foreground: "#201515"
|
|
219
|
+
chart-1: "#ff4f00" # orange primary
|
|
220
|
+
chart-2: "#3f8f5a" # derived: status green as second series
|
|
221
|
+
chart-3: "#c88a1e" # derived: warm gold as third series
|
|
222
|
+
chart-4: "#7a4a3a" # derived: warm coffee-brown mid — series warm to hold temperature
|
|
223
|
+
chart-5: "#b83900" # derived: deep burnt orange as fifth series
|
|
224
|
+
sidebar: "#f8f4f0" # derived: faint cream sidebar beside the brighter canvas
|
|
225
|
+
sidebar-foreground: "#201515"
|
|
226
|
+
sidebar-primary: "#ff4f00" # orange marks the active nav item (corpus app-shell activeIndicator = primary)
|
|
227
|
+
sidebar-primary-foreground: "#fffefb"
|
|
228
|
+
sidebar-accent: "#ffe9e0" # matches accent
|
|
229
|
+
sidebar-accent-foreground: "#b83900"
|
|
230
|
+
sidebar-border: "#e9e2d8"
|
|
231
|
+
sidebar-ring: "#ff4f00"
|
|
232
|
+
spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
|
|
233
|
+
radius-scale: [0, 6, 12, 9999]
|
|
234
|
+
shadow-levels: [none, sm, md]
|
|
235
|
+
motion: { durations: [150, 200, 300], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
|
|
236
|
+
icons: { family: lucide, stroke: 1.75 }
|
|
237
|
+
accent-count: 1
|
|
238
|
+
```
|