@nurix/etna 0.18.19 → 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.
Files changed (94) hide show
  1. package/data/harness-index.json +1 -1
  2. package/data/harnesses/code/harness.json +2 -2
  3. package/data/harnesses/code/skills/design/SKILL.md +65 -0
  4. package/data/harnesses/code/skills/design/data/catalog/rules.csv +132 -0
  5. package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +317 -0
  6. package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +235 -0
  7. package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +232 -0
  8. package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +220 -0
  9. package/data/harnesses/code/skills/design/data/design-md/library/apple.md +220 -0
  10. package/data/harnesses/code/skills/design/data/design-md/library/binance.md +223 -0
  11. package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +219 -0
  12. package/data/harnesses/code/skills/design/data/design-md/library/cal.md +220 -0
  13. package/data/harnesses/code/skills/design/data/design-md/library/clay.md +220 -0
  14. package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +220 -0
  15. package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +227 -0
  16. package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +237 -0
  17. package/data/harnesses/code/skills/design/data/design-md/library/composio.md +220 -0
  18. package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +220 -0
  19. package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +220 -0
  20. package/data/harnesses/code/skills/design/data/design-md/library/expo.md +228 -0
  21. package/data/harnesses/code/skills/design/data/design-md/library/figma.md +221 -0
  22. package/data/harnesses/code/skills/design/data/design-md/library/framer.md +236 -0
  23. package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +220 -0
  24. package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +234 -0
  25. package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +240 -0
  26. package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +236 -0
  27. package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +237 -0
  28. package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +220 -0
  29. package/data/harnesses/code/skills/design/data/design-md/library/meta.md +220 -0
  30. package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +220 -0
  31. package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +220 -0
  32. package/data/harnesses/code/skills/design/data/design-md/library/miro.md +233 -0
  33. package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +220 -0
  34. package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +236 -0
  35. package/data/harnesses/code/skills/design/data/design-md/library/notion.md +220 -0
  36. package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +222 -0
  37. package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +226 -0
  38. package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +223 -0
  39. package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +234 -0
  40. package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +220 -0
  41. package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +220 -0
  42. package/data/harnesses/code/skills/design/data/design-md/library/resend.md +285 -0
  43. package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +225 -0
  44. package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +219 -0
  45. package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +251 -0
  46. package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +244 -0
  47. package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +227 -0
  48. package/data/harnesses/code/skills/design/data/design-md/library/slack.md +240 -0
  49. package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +252 -0
  50. package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +248 -0
  51. package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +241 -0
  52. package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +255 -0
  53. package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +226 -0
  54. package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +233 -0
  55. package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +248 -0
  56. package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +220 -0
  57. package/data/harnesses/code/skills/design/data/design-md/library/uber.md +220 -0
  58. package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +220 -0
  59. package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +245 -0
  60. package/data/harnesses/code/skills/design/data/design-md/library/warp.md +220 -0
  61. package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +220 -0
  62. package/data/harnesses/code/skills/design/data/design-md/library/wired.md +220 -0
  63. package/data/harnesses/code/skills/design/data/design-md/library/wise.md +220 -0
  64. package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +220 -0
  65. package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +238 -0
  66. package/data/harnesses/code/skills/design/data/design-md/nurix.md +217 -0
  67. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/command-center.tsx +249 -0
  68. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/create-edit.tsx +249 -0
  69. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/dashboard.tsx +248 -0
  70. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/entity-detail.tsx +245 -0
  71. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/list-detail.tsx +223 -0
  72. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/log-stream.tsx +249 -0
  73. package/data/harnesses/code/skills/design/data/operator-pack/fixtures.md +88 -0
  74. package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +132 -0
  75. package/data/harnesses/code/skills/design/data/operator-pack/trust-rubric.md +76 -0
  76. package/data/harnesses/code/skills/design/references/create.md +126 -0
  77. package/data/harnesses/code/skills/design/references/diagnosis.md +108 -0
  78. package/data/harnesses/code/skills/design/references/hard-rules.md +155 -0
  79. package/data/harnesses/code/skills/design/references/improve.md +85 -0
  80. package/data/harnesses/code/skills/design/references/interaction.md +77 -0
  81. package/data/harnesses/code/skills/design/references/introspect.md +100 -0
  82. package/data/harnesses/code/skills/design/references/lifecycle.md +73 -0
  83. package/data/harnesses/code/skills/design/references/personality.md +504 -0
  84. package/data/harnesses/code/skills/design/references/structure.md +138 -0
  85. package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +706 -0
  86. package/data/harnesses/code/skills/design/scripts/detector.mjs +898 -0
  87. package/data/harnesses/code/skills/design/scripts/generate-fixtures.mjs +551 -0
  88. package/data/harnesses/code/skills/design/scripts/hook-config.json +11 -0
  89. package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +386 -0
  90. package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +280 -0
  91. package/data/harnesses/code/skills/design/scripts/render-rung.mjs +690 -0
  92. package/data/harnesses/code/skills/design/scripts/scaffold.mjs +552 -0
  93. package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +432 -0
  94. package/package.json +1 -1
@@ -0,0 +1,228 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Expo
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Expo — the operator reading
9
+
10
+ Expo's marketing surface is a quietly-confident developer platform: a pure-white editorial canvas
11
+ with a soft sky-blue gradient behind the hero and a centered MacBook + iPhone device composite as its
12
+ chrome. This entry keeps the parts an operator tool can wear — the near-black ink, the single **pure
13
+ black** brand voltage, the cool-neutral grays, the compact developer radii, and the Inter + JetBrains
14
+ Mono type voice — and leaves the marketing devices behind: the sky-gradient wash, the device-mockup
15
+ hero, the 64px display type, and the dark-inversion feature cards do not follow the brand onto a CRM,
16
+ a build queue, or a dashboard.
17
+
18
+ ## 1 Visual Theme
19
+
20
+ Light by default; dark is opt-in. Flat and editorial: hierarchy is carried by hairline `border`, type
21
+ weight, and near-black ink — never by heavy shadow (Expo ships a single very-soft drop). The one brand
22
+ voltage is `primary` = **pure black `#000000`**, reserved for the single most important action on a
23
+ surface; this is a deliberate brand override of the usual chromatic-accent floor (black is the only CTA
24
+ fill Expo permits). The neutral ramp is a cool editorial gray anchored on ink `#171717`, so the whole
25
+ UI reads engineered and restrained rather than warm. The anchor surface is a white content canvas
26
+ beside a faintly off-white `sidebar`. Density is `standard` and steps denser per surface archetype.
27
+
28
+ ## 2 Color Roles
29
+
30
+ Light values first (hex is the corpus's native format). One brand voltage — black `primary` — carries
31
+ the primary action; a scoped link-blue serves inline references only; status hues speak only status.
32
+
33
+ | Role | Value | Allowed where |
34
+ | --- | --- | --- |
35
+ | `background` / `card` / `popover` | pure white `#ffffff` | page, cards, and overlays — the dominant surface |
36
+ | `foreground` | near-black ink `#171717` | all primary ink, display and body alike |
37
+ | `muted` / `secondary` | soft neutral `#f0f0f3` | hover rows, subtle fills, secondary buttons, tiles |
38
+ | `muted-foreground` | cool gray `#60646c` | labels, captions, secondary running text |
39
+ | `border` / `input` | hairline-strong `#dcdee0` | card outlines, field edges, table grid lines |
40
+ | `primary` | pure black `#000000` | the one primary action; active nav; press state `#1a1a1a` |
41
+ | `accent` | neutral tint `#f0f0f3` | selected / hovered rows and nav (black has no light chroma tint) |
42
+ | `ring` | ink `#171717` | the 2px focus outline — Expo focuses to ink, never a glow |
43
+ | `destructive` | red `#dc2626` | destructive actions and error state only |
44
+ | `success` / `warning` | green `#16a34a` / amber `#ab6400` | status signalling only, never chrome |
45
+
46
+ The text-link blue `#0d74ce` is a scoped grace — inline body/reference links only, never a CTA or a
47
+ chart-of-record accent (see §7). The sky-blue gradient (`#cfe7ff → #a8c8e8`) and the dark-inversion
48
+ surfaces (`#171717` feature cards) are marketing devices; they carry no operator role.
49
+
50
+ ## 3 Typography
51
+
52
+ One sans, one mono. `font-sans` is Inter — UI, body, and headings all ride it; heading weight and
53
+ negative tracking, not a second family, carry the editorial voice (display weight holds at 600, never
54
+ 700). `font-mono` is JetBrains Mono for IDs, codes, timestamps, and log lines. Numeric columns render
55
+ `tabular-nums` so figures align down a column (floor P4).
56
+
57
+ | Step | Role | Size · line | Weight · tracking |
58
+ | --- | --- | --- | --- |
59
+ | h1 | page title | 24px / 1.25 | `font-weight-strong` · `heading-tracking` |
60
+ | h2 | section head | 18px / 1.4 | `font-weight-strong` · `heading-tracking` |
61
+ | h3 | card / group head | 16px / 1.4 | `font-weight-strong` · `heading-tracking` |
62
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` |
63
+ | small | labels, meta, dense tables | 13px / 1.4 | `font-weight-normal` |
64
+ | caption | uppercase eyebrow | 11px / 1.4 | `font-weight-strong`, `+0.88px`, uppercase |
65
+ | code | IDs, logs, snippets | 13px / 1.5 | JetBrains Mono, `font-weight-normal` |
66
+
67
+ Bump weight for emphasis; never change size to emphasize. The 64/48/36px hero display steps stay
68
+ behind — the operator ramp tops out at 24px.
69
+
70
+ ## 4 Component Stylings
71
+
72
+ Every recurring operator component composes from the primitives — no literal values.
73
+
74
+ - **Button** — `primary`: filled black `primary` on `primary-foreground`, `radius` (8px), no pill;
75
+ press darkens to `#1a1a1a`. Secondary: `secondary` fill, 1px `border`, `foreground`. Tertiary:
76
+ transparent, text-link blue label, inline only.
77
+ - **Input** — `background` fill, 1px `border` (`border-weight`), `radius`; focus thickens to a 2px
78
+ `ring` (ink) outline, no glow. Field height runs generous.
79
+ - **Card** — `card` surface, 1px `border`, `radius` (12px for cards); the single soft drop appears only
80
+ when a card must lift off the canvas (`shadow-intensity`); inset by `density-inset`.
81
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
82
+ numeric columns; row selection tints `accent`.
83
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`
84
+ for content-heavy), beside the work, not over it (floor P3).
85
+ - **Badge** — pill (9999) with uppercase caption on a `muted` fill; status badges take
86
+ `success` / `warning` / `destructive`, never `primary`.
87
+
88
+ ## 5 Layout
89
+
90
+ Base spacing unit 4px; the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 20 · 24 · 32 · 48 · 64` (Expo keeps
91
+ a 20px step for compact workflow rows). Shell dimensions map one-to-one to the layout primitives:
92
+ sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`, side panel
93
+ `side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms `form-max-width`,
94
+ tables full-width. Density is governed globally by `density-tier` and stepped per archetype by the
95
+ surface catalog — never by absolute overrides. Expo's 96px marketing section rhythm stays behind.
96
+
97
+ ## 6 Depth
98
+
99
+ Flat and editorial. Hierarchy comes from the surface ladder and hairlines, not shadow:
100
+
101
+ - **0 — canvas** `background`, no border.
102
+ - **1 — panel / card** `card` on a 1px `border`; the single soft drop `0 4px 12px rgba(0,0,0,0.04)`
103
+ only when a card must lift.
104
+ - **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
105
+ shadow. Rank is border and position, never a heavier stacked shadow.
106
+
107
+ Focus is a 2px `ring` outline in ink (never a glow), visible on every interactive element (floor P6).
108
+ Three z-levels: content, sticky chrome, overlay. The sky-gradient backdrop and dark-inversion surfaces
109
+ are marketing depth and do not appear in operator chrome.
110
+
111
+ ## 7 Do's & Don'ts
112
+
113
+ - **Do** reserve black `primary` for the single most important action on a surface; everything else is
114
+ neutral or status.
115
+ - **Do** carry hierarchy with hairlines, weight, and whitespace — the brand is predominantly flat.
116
+ - **Do** set CTAs and inputs at 8px `radius` and cards at 12px — the developer dialect.
117
+ - **Do** apply `tabular-nums` to every numeric column and `font-mono` to IDs, codes, and timestamps.
118
+ - **Don't** introduce a saturated brand action color — black is the only primary fill.
119
+ - **Don't** put the text-link blue on a CTA or button; it is for inline references only.
120
+ - **Don't** pill the primary CTA — pill geometry is reserved for badges.
121
+ - **Don't** bring the sky-blue gradient, the device-mockup hero, or the 64px display into operator chrome.
122
+ - **Don't** signal elevation with heavy drop shadows; one soft drop is the ceiling.
123
+
124
+ ## 8 Responsive
125
+
126
+ The operator sweep is 375 / 768 / 1024 / 1440.
127
+
128
+ | Breakpoint | What changes |
129
+ | --- | --- |
130
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
131
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
132
+ | 1024 | sidebar expands; two-pane list+detail holds side by side |
133
+ | 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
134
+
135
+ ## 9 Agent Prompt Guide
136
+
137
+ Directives the emitting agent follows verbatim for an operator surface wearing Expo:
138
+
139
+ - Reach first for the black `primary` as the single action fill; keep every other control neutral on a
140
+ hairline `border`. If two things want the accent, one of them is not primary.
141
+ - The text-link blue is a reference color only — inline links, breadcrumbs, entity cross-links. It
142
+ never fills a button and never leads a chart-of-record.
143
+ - Carry IDs, codes, timestamps, and log lines in JetBrains Mono; every numeric column is `tabular-nums`.
144
+ - Stay flat — hairline and weight before shadow. Reach past the single soft drop only for a real overlay.
145
+ - Leave the marketing devices behind: no sky-gradient wash, no device-mockup hero, no 64px display
146
+ type, no dark-inversion feature cards. What carries is the palette, the cool-neutral temperature, the
147
+ 8px/12px radius character, and the Inter + JetBrains Mono voice.
148
+ - Every workflow completes from the keyboard; the ink `ring` focus outline is always visible (P6).
149
+
150
+ ```yaml design-primitives
151
+ radius: 8px # derived: Expo's developer-dialect CTA/input radius (rounded.md); cards step to 12px in the scale
152
+ shadow-intensity: 0.3 # derived: Expo ships one very-soft drop (0.04 alpha) — flatter than the operator default
153
+ border-weight: 1px
154
+ density-gap: 1
155
+ density-inset: 1
156
+ font-sans: Inter, -apple-system, system-ui, sans-serif
157
+ font-mono: JetBrains Mono, Fira Code, ui-monospace, monospace
158
+ font-weight-normal: 400
159
+ font-weight-strong: 600 # rationale: Expo holds display weight at 600, never 700 — confident, not bombastic
160
+ heading-tracking: -0.02em # derived: Expo tracks display negative (-0.5 to -1.92px); at operator heading sizes that lands near -0.02em
161
+ duration-unit: 50ms # derived: corpus declares motion out of scope; functional operator timing
162
+ duration-fast: 100ms # derived: corpus silent on motion
163
+ duration-normal: 150ms # derived: corpus silent on motion
164
+ duration-slow: 250ms # derived: corpus silent on motion
165
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent on motion; standard operator ease
166
+ contrast-boost: 1 # derived: component borders use hairline-strong (#dcdee0), which reads as a grid at standard density
167
+ icon-stroke: 1.75 # derived: corpus silent on icons; refined operator lucide stroke
168
+ icon-size-base: 16px # derived: corpus silent on icons
169
+ sidebar-width-expanded: 248px # derived: no sidebar in the marketing corpus; operator shell default
170
+ sidebar-width-collapsed: 56px # derived: operator shell default
171
+ topbar-height: 56px # derived: Expo's marketing top-nav is 64px; operator chrome tightens to 56px
172
+ side-panel-width: 420px # derived: no side panel in the marketing corpus; operator shell default
173
+ side-panel-width-rich: 640px # derived: operator shell default
174
+ modal-width-max: 560px # derived: operator shell default
175
+ form-max-width: 640px # derived: operator shell default
176
+ table-row-height: 44px # derived: Expo runs generous component heights (44px inputs); tables echo that airier read
177
+ verbosity: default
178
+ feedback: subtle # rationale: Expo's quiet, editorial voice; feedback stays understated but legible
179
+ density-tier: standard # derived: developer platform between terminal-dense and consumer-spacious; standard, stepping denser per archetype
180
+ product-traits: [dev-tools, developer-platform, dashboard, ci-cd]
181
+ ```
182
+
183
+ ```yaml lever-manifest
184
+ version: 1
185
+ fonts: { sans: "Inter, -apple-system, system-ui, sans-serif", mono: "JetBrains Mono, Fira Code, ui-monospace, monospace" }
186
+ color-tokens:
187
+ light:
188
+ background: "#ffffff"
189
+ foreground: "#171717"
190
+ card: "#ffffff"
191
+ card-foreground: "#171717"
192
+ muted: "#f0f0f3"
193
+ muted-foreground: "#60646c"
194
+ border: "#dcdee0"
195
+ input: "#dcdee0"
196
+ ring: "#171717"
197
+ primary: "#000000"
198
+ primary-foreground: "#ffffff"
199
+ accent: "#f0f0f3" # derived: black primary has no light chroma tint; selected-row accent falls to the neutral surface-strong
200
+ accent-foreground: "#171717"
201
+ destructive: "#dc2626" # derived: Expo documents only a soft error-text rose (#eb8e90); a destructive action fill needs an accessible red
202
+ destructive-foreground: "#ffffff"
203
+ success: "#16a34a"
204
+ warning: "#ab6400"
205
+ popover: "#ffffff"
206
+ popover-foreground: "#171717"
207
+ secondary: "#f0f0f3"
208
+ secondary-foreground: "#171717"
209
+ chart-1: "#0d74ce" # derived: chart ramp drawn from Expo's scattered accent hues (link blue anchors — black does not chart)
210
+ chart-2: "#47c2ff" # derived: bright cyan from docs-widget accent
211
+ chart-3: "#16a34a" # derived: success green
212
+ chart-4: "#ab6400" # derived: warning amber
213
+ chart-5: "#8145b5" # derived: preview purple
214
+ sidebar: "#fafafa" # derived: no sidebar in corpus; faintly off-white canvas-soft beside the white content canvas
215
+ sidebar-foreground: "#171717"
216
+ sidebar-primary: "#000000"
217
+ sidebar-primary-foreground: "#ffffff"
218
+ sidebar-accent: "#f0f0f3" # derived: neutral hovered/selected nav tint
219
+ sidebar-accent-foreground: "#171717"
220
+ sidebar-border: "#f0f0f3" # derived: softer hairline for the sidebar's internal dividers
221
+ sidebar-ring: "#171717"
222
+ spacing-scale: [2, 4, 8, 12, 16, 20, 24, 32, 48, 64]
223
+ radius-scale: [0, 4, 8, 12, 16, 9999]
224
+ shadow-levels: [none, sm, md]
225
+ motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
226
+ icons: { family: lucide, stroke: 1.75 }
227
+ accent-count: 1
228
+ ```
@@ -0,0 +1,221 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Figma
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Figma — the operator reading
9
+
10
+ Figma's marketing canvas is an editorial black-and-white frame interrupted by oversized pastel
11
+ color-block sections and pill CTAs — storytelling devices that stay on the marketing site with the
12
+ poster-scale display type. An operator surface inherits the *spine*: pure black ink on pure white, a
13
+ warm off-white for panels, hairline depth over shadow, one saturated chromatic accent (Figma
14
+ magenta), and the figmaSans/figmaMono type voice. It reads as a serious tool made by people who like
15
+ color — monochrome, calm, dense-capable, the joyful pastels demoted to chart encodings.
16
+
17
+ ## 1 Visual Theme
18
+
19
+ Light by default; dark is not documented and stays opt-in. Flat: hierarchy is carried by hairline
20
+ `border`, type weight, and the black/white contrast itself — never by heavy shadow, which the brand
21
+ avoids by design. The spine is monochrome — pure black `foreground` on pure white `background`, with a
22
+ faintly warm off-white `muted`/`sidebar`. A single chromatic accent, Figma magenta, is reserved and
23
+ scarce: it carries the focus `ring` and active indicators, nothing decorative. The primary action
24
+ fills black — Figma's own primary is achromatic — so magenta stays a single-shot pop. Density is
25
+ `standard` and steps denser per archetype; the roomy 8px rhythm keeps it friendly, not cramped.
26
+
27
+ ## 2 Color Roles
28
+
29
+ Light values first. The neutral spine is genuinely monochrome; magenta is the one chromatic hue that
30
+ carries meaning, and the pastels appear only as chart series.
31
+
32
+ | Role | Value | Allowed where |
33
+ | --- | --- | --- |
34
+ | `background` / `card` / `popover` | white `#ffffff` | page, cards, and overlays — the dominant surface |
35
+ | `foreground` | pure black `#000000` | all primary ink — headlines, body, labels |
36
+ | `muted` / `secondary` | warm off-white `#f7f7f5` | hover rows, tile fills, secondary buttons, the sidebar ground |
37
+ | `muted-foreground` | neutral gray `#666666` | labels, captions, table meta — the secondary ink role |
38
+ | `border` / `input` | hairline `#e6e6e6` | every separator, grid line, and field edge |
39
+ | `primary` | black `#000000` | the one primary action; active-nav fill; selected tab |
40
+ | `accent` | pale magenta `#ffe4ef` | selected / hovered rows and nav — a tint, never a fill |
41
+ | `ring` | magenta `#ff3d8b` | the focus outline and active indicator — the single chromatic pop |
42
+ | `destructive` | red `#eb5757` | destructive actions and error state only |
43
+ | `success` / `warning` | green `#1ea64a` / amber `#f2994a` | status signalling only, never chrome |
44
+
45
+ The pastel color blocks (lime, lilac, cream, mint, pink, coral, navy) are marketing surfaces — no
46
+ operator role, reappearing only as `chart-*` encodings (§7). Figma's marketing refuses a mid-gray text
47
+ role; an operator surface needs one, so `muted-foreground` is a derived neutral gray, AA on white.
48
+
49
+ ## 3 Typography
50
+
51
+ One sans, one mono — a single voice that flexes by weight, not a multi-family stack. `font-sans`
52
+ substitutes for the proprietary figmaSans (Inter matches its fine variable-weight axis); the UI, body,
53
+ and headings all ride it, weight and negative tracking carrying the display voice. `font-mono`
54
+ substitutes for figmaMono — reserved for IDs, codes, timestamps, log lines, and uppercase
55
+ eyebrow/caption labels, never body. Numeric columns render `tabular-nums`.
56
+
57
+ | Step | Role | Size · line | Weight · tracking |
58
+ | --- | --- | --- | --- |
59
+ | h1 | page title | 24px / 1.3 | `font-weight-strong` · `heading-tracking` |
60
+ | h2 | section head | 18px / 1.35 | `font-weight-strong` · `heading-tracking` |
61
+ | h3 | card / group head | 15px / 1.4 | `font-weight-strong` · `heading-tracking` |
62
+ | body | UI + prose | 14px / 1.45 | `font-weight-normal` |
63
+ | small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
64
+ | eyebrow / caption | uppercase mono label | 12px / 1.3 | `font-mono`, `+0.05em`, uppercase |
65
+
66
+ Bump weight one step for emphasis; never change size — weight, not scale, carries hierarchy. The
67
+ poster-scale 86px/64px display steps and their aggressive negative tracking stay on the marketing site.
68
+
69
+ ## 4 Component Stylings
70
+
71
+ Every recurring operator component composes from the primitives — no literal values.
72
+
73
+ - **Button** — `primary`: filled black `primary` on white `primary-foreground`, `radius`, no pill.
74
+ Secondary: `secondary` fill, 1px `border`, `foreground`. Ghost: transparent, `accent` on hover.
75
+ Icon-only buttons stay circular (`radius-scale` full, 9999) — the one marketing shape that carries.
76
+ - **Input** — `background` fill, 1px `border` (`border-weight`), `radius`; focus draws the magenta `ring` at 2px, no fill change and no glow.
77
+ - **Card** — `card` surface, 1px `border`, `radius`, inset by `density-inset`; shadow only when it must lift (`shadow-intensity`); large feature cards may take the large radius step.
78
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on numeric columns; selection tints `accent` with a magenta `ring` indicator.
79
+ - **Side panel** — detail and edit open beside the work (`side-panel-width`, `side-panel-width-rich` for content-heavy), not over it.
80
+ - **Badge** — hairline `border`, `muted`/status fill, uppercase mono caption; status badges take `success` / `warning` / `destructive`, never `primary` or magenta.
81
+
82
+ ## 5 Layout
83
+
84
+ Base spacing unit 8px (Figma's grid); the on-scale ramp is `4 · 8 · 12 · 16 · 24 · 32 · 48 · 96`.
85
+ Shell dimensions map one-to-one to the layout primitives: sidebar `sidebar-width-expanded` /
86
+ `sidebar-width-collapsed`, topbar `topbar-height` (56px — Figma's own nav height), side panel
87
+ `side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms `form-max-width`,
88
+ tables full-width. Density is governed globally by `density-tier` (through `density-gap`) and stepped
89
+ per archetype by the surface catalog — never absolute overrides. The 96px section rhythm stays behind.
90
+
91
+ ## 6 Depth
92
+
93
+ Flat and shadow-light. Hierarchy comes from the surface ladder, hairlines, and the black/white
94
+ contrast — 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 (roughly `0 4px 16px rgba(0,0,0,0.06)`). Rank is border and position, never a heavier shadow.
100
+
101
+ Focus is a 2px magenta `ring` outline (never a glow), visible on every interactive element — the one
102
+ chromatic surface the keyboard-first operator sees constantly. Three z-levels: content, chrome, overlay.
103
+
104
+ ## 7 Do's & Don'ts
105
+
106
+ - **Do** reserve black `primary` for the single most important action on a surface; everything else is
107
+ neutral or status.
108
+ - **Do** keep magenta scarce — the focus `ring` and small active indicators only. It is a single-shot
109
+ accent, not a fill or a text color.
110
+ - **Do** carry hierarchy with hairlines, weight, and whitespace — the brand is emphatically flat, and
111
+ apply `tabular-nums` to numeric columns and `font-mono` to IDs, codes, and timestamps.
112
+ - **Don't** reach for the pastel color blocks as UI chrome; they are marketing surfaces and appear
113
+ operator-side only as `chart-*` series.
114
+ - **Don't** pill the primary CTA or reach for a radius outside `radius-scale` — pills stay on the
115
+ marketing site.
116
+ - **Don't** introduce a second chromatic accent, spend magenta on body text or a whole fill, or signal
117
+ elevation with heavy drop shadows.
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 list+detail holds side by side |
128
+ | 1440 | content caps at `form-max-width` for forms; tables and dashboards use the full width |
129
+
130
+ ## 9 Agent Prompt Guide
131
+
132
+ Directives the emitting agent follows verbatim:
133
+
134
+ - Wear the spine, not the marketing: pure black on white, warm off-white panels, hairline depth. The
135
+ color blocks, pill CTAs, and 86px display type stay behind.
136
+ - Primary action fills black. If two things want the black fill, one of them is not primary.
137
+ - Magenta is single-shot: the focus `ring` and active indicators only — never a fill, never body text.
138
+ - Icon-only buttons stay circular; every other control uses the base `radius`.
139
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`.
140
+ - The pastels live only in charts (`chart-1..5`); stay flat — hairline and weight before shadow, and
141
+ reach past a hairline only for a real overlay.
142
+
143
+ ```yaml design-primitives
144
+ radius: 8px # derived: Figma control radius (rounded.md, inputs/list items) carries the friendly rounding; the marketing pill (50px) stays behind
145
+ shadow-intensity: 0.35 # derived: brand is shadow-light by design (level-2 overlay is only 0.06 alpha); hairline and surface carry depth
146
+ border-weight: 1px
147
+ density-gap: 1
148
+ density-inset: 1
149
+ font-sans: Inter, system-ui, sans-serif # derived: figmaSans substitute (corpus names Inter for its fine variable-weight axis)
150
+ font-mono: JetBrains Mono, ui-monospace, monospace # derived: figmaMono substitute (corpus names JetBrains Mono) — IDs, codes, log lines, eyebrows
151
+ font-weight-normal: 400 # derived: brand body runs 320-340 (display-tuned); Inter has no 320 stop and 300 is too thin for 13px tables, so 400
152
+ font-weight-strong: 600 # derived: operator emphasis bracketed by brand headline 540 / card-title 700
153
+ heading-tracking: -0.01em # derived: matches Figma's headline-scale tracking (-0.26px at 26px); the -1.72px hero tracking is display-scale, stays behind
154
+ duration-unit: 50ms # derived: corpus documents no motion (no-interaction policy); operator functional-motion base
155
+ duration-fast: 100ms # derived: operator functional default
156
+ duration-normal: 150ms # derived: operator functional default
157
+ duration-slow: 250ms # derived: operator functional default
158
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: standard functional ease; corpus documents no motion
159
+ contrast-boost: 1 # derived: pure black ink on white is already maximal contrast; hairlines are visible; no boost needed
160
+ icon-stroke: 1.75 # derived: refined operator stroke, one step under lucide's 2
161
+ icon-size-base: 16px # derived: operator default; matches the corpus's 16px comparison-checkmark glyph
162
+ sidebar-width-expanded: 256px # derived: 8px-grid aligned (32 units), slightly roomier per the brand's generous rhythm
163
+ sidebar-width-collapsed: 56px # derived: mirrors Figma's 56px top-nav height (7 units)
164
+ topbar-height: 56px # brand: Figma's documented top-nav height
165
+ side-panel-width: 440px # derived: 8px-grid aligned (55 units), roomy per brand character
166
+ side-panel-width-rich: 640px # derived: 8px-grid aligned (80 units) for content-heavy detail
167
+ modal-width-max: 560px # derived: 8px-grid aligned (70 units); modals for confirmations only
168
+ form-max-width: 640px # derived: 8px-grid aligned (80 units)
169
+ table-row-height: 44px # derived: brand's generous rhythm + the 44px min touch target the corpus cites; dense archetypes step down via the surface catalog
170
+ verbosity: default
171
+ feedback: subtle # derived: brand is calm, editorial, shadow-light — quiet feedback fits
172
+ density-tier: standard # derived: brand rhythm is generous (8px base) but operator work needs function; standard, leaning roomy
173
+ product-traits: [design-tools, collaboration, dashboard, admin]
174
+ ```
175
+
176
+ ```yaml lever-manifest
177
+ version: 1
178
+ fonts: { sans: "Inter, system-ui, sans-serif", mono: "JetBrains Mono, ui-monospace, monospace" }
179
+ color-tokens:
180
+ light:
181
+ background: "#ffffff"
182
+ foreground: "#000000"
183
+ card: "#ffffff"
184
+ card-foreground: "#000000"
185
+ muted: "#f7f7f5"
186
+ muted-foreground: "#666666" # derived: brand refuses mid-gray text on marketing; operator secondary ink needs it — neutral gray, 5.7:1 AA on white
187
+ border: "#e6e6e6"
188
+ input: "#e6e6e6"
189
+ ring: "#ff3d8b" # brand: Figma magenta, the single chromatic accent, on the focus ring
190
+ primary: "#000000"
191
+ primary-foreground: "#ffffff"
192
+ accent: "#ffe4ef" # derived: pale magenta tint for selection/hover surfaces
193
+ accent-foreground: "#000000" # derived: ink-black for AA on the pale accent; magenta stays scarce on the ring/indicator
194
+ destructive: "#eb5757" # derived: Figma product red, matching the palette's bright-friendly saturation
195
+ destructive-foreground: "#ffffff"
196
+ success: "#1ea64a" # brand: documented semantic-success green
197
+ warning: "#f2994a" # derived: Figma product amber; matches the success green's friendly saturation
198
+ popover: "#ffffff"
199
+ popover-foreground: "#000000"
200
+ secondary: "#f7f7f5"
201
+ secondary-foreground: "#000000"
202
+ chart-1: "#ff3d8b" # brand: magenta anchors the ramp as the saturated primary series
203
+ chart-2: "#7c5cde" # derived: block-lilac (#c5b0f4) deepened for chart legibility
204
+ chart-3: "#1ea64a" # brand: success green
205
+ chart-4: "#f2994a" # derived: warning amber
206
+ chart-5: "#1f1d3d" # brand: block-navy deep indigo
207
+ sidebar: "#f7f7f5"
208
+ sidebar-foreground: "#000000"
209
+ sidebar-primary: "#000000"
210
+ sidebar-primary-foreground: "#ffffff"
211
+ sidebar-accent: "#ffe4ef" # derived: pale magenta hover/selection tint, matching accent
212
+ sidebar-accent-foreground: "#000000"
213
+ sidebar-border: "#e6e6e6"
214
+ sidebar-ring: "#ff3d8b" # brand: magenta focus ring in the nav
215
+ spacing-scale: [4, 8, 12, 16, 24, 32, 48, 96]
216
+ radius-scale: [0, 6, 8, 24, 9999]
217
+ shadow-levels: [none, sm, md]
218
+ motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
219
+ icons: { family: lucide, stroke: 1.75 }
220
+ accent-count: 1
221
+ ```