@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,255 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Supabase
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Supabase — an operator reading of the white-canvas, emerald-green system
9
+
10
+ Supabase's web system is the quietly-technical brand in the database category: a committed white
11
+ canvas, near-black ink that is never pure black, one emerald-green voltage held for the CTA, and real
12
+ product UI (dashboard tables, SQL editors, log streams) doing the decorative work. This entry is the
13
+ *operator* reading — an internal tool (query console, project dashboard, job queue, log stream) in
14
+ Supabase's language. What carries: the white canvas, the single emerald accent held scarce, the
15
+ near-black ink, the idiosyncratic near-black-on-green button, flat hairline-first depth, the 6px
16
+ not-pill radius, the near-black `#1c1c1c` inlay for code and logs (the developer DNA), and Circular's
17
+ mid-weight-500 humanist voice with tight negative tracking. What stays behind: the 64/48px hero
18
+ display, the composited product-mockup float shadows, the dark inverted featured pricing tier, and the
19
+ 64–96px marketing section rhythm.
20
+
21
+ ## 1 Visual Theme
22
+
23
+ Light by default; dark is opt-in — the white `background` (`#ffffff`) is the committed floor, and the
24
+ white-canvas commitment is the brand (no atmospheric gradient, no dark marketing track). Flat:
25
+ hierarchy comes from a fine greyscale hairline ladder, type weight, and near-black-on-white contrast —
26
+ never heavy shadow. A single accent, emerald `primary` (`#3ecf8e`), is the only chromatic event on a
27
+ surface: it wears the one primary action, the focus `ring`, and the active-nav indicator, nothing else.
28
+ Ink is near-black `foreground` (`#171717`) — never pure `#000000`. The neutral ramp is a calibrated
29
+ achromatic grey (white through `#fafafa`, `#ededed`, `#dfdfdf` down to `#171717`). Density is
30
+ `standard` and steps denser per archetype — the product's tables and log streams read technical.
31
+
32
+ ## 2 Color Roles
33
+
34
+ Light values first (the manifest carries the exact hex — the corpus's native format). One accent —
35
+ emerald `primary` is the only chromatic hue that carries meaning; status hues speak only status.
36
+
37
+ | Role | Value | Allowed where |
38
+ | --- | --- | --- |
39
+ | `background` / `card` / `popover` | white `#ffffff` (canvas) | page, cards, and overlays — the dominant surface, differentiated by hairline not brightness |
40
+ | `foreground` | near-black `#171717` (ink) | all primary ink and headlines — never pure black |
41
+ | `muted` | barely-tinted `#fafafa` (canvas-soft) | hover rows, subtle fills, quiet band tints |
42
+ | `secondary` | light grey `#f2f2f2` | secondary-button and segmented fills, one step below canvas |
43
+ | `muted-foreground` | mid grey `#707070` (ink-mute) | labels, captions, secondary text |
44
+ | `border` / `input` | hairline `#dfdfdf` | every separator, grid line, and field edge |
45
+ | `primary` | emerald `#3ecf8e` | the one primary action; active-nav indicator; the signature CTA and dot |
46
+ | `primary-foreground` | near-black `#171717` (on-primary) | text on the green action — the button reads "lit" with dark type, not a colored chip |
47
+ | `accent` | grey lift `#ededed` (hairline-cool) | selected/hovered rows and nav — a neutral lift, never coloured green |
48
+ | `ring` | emerald `#3ecf8e` | the focus outline — unmistakable, because keyboard-first |
49
+ | `destructive` | clean red `#dc2626` | destructive actions and error state only |
50
+ | `success` / `warning` | deep-emerald `#24b47e` / status-yellow `#ffdb13` | status signalling only, never chrome |
51
+
52
+ The emerald's power is its scarcity at element level; the rich accent set (purple, violet, pink,
53
+ indigo, tomato, crimson) is chart-and-logo voltage and carries no operator role beyond charts (see §7).
54
+
55
+ ## 3 Typography
56
+
57
+ One sans, one mono. `font-sans` is Circular — the brand's proprietary geometric humanist sans; the
58
+ corpus's own shippable substitute is **Inter at weight 500** (Geist Sans an alternative), so the
59
+ manifest carries Inter as the single sans slot for body, UI, and headings. `font-mono` is the brand's
60
+ **system mono** stack (`ui-monospace`, Menlo / Monaco / Consolas — the corpus ships no proprietary mono
61
+ webfont) for IDs, codes, timestamps, log lines, and SQL; numeric columns render `tabular-nums`. The
62
+ marketing display scale (64/48px) stays behind — an operator surface tops out at a 28px page title.
63
+
64
+ | Step | Role | Size · line | Weight · tracking |
65
+ | --- | --- | --- | --- |
66
+ | h1 | page title | 28px / 1.2 | `font-weight-strong` · `heading-tracking` |
67
+ | h2 | section head | 22px / 1.2 | `font-weight-strong` · -0.01em |
68
+ | h3 | card / group head | 18px / 1.4 | `font-weight-strong` |
69
+ | body | UI + prose | 16px / 1.5 | `font-weight-normal` |
70
+ | small | labels, meta, dense table | 13px / 1.45 | `font-weight-normal` |
71
+ | caption | uppercase eyebrow | 12px / 1.45 | `font-weight-strong`, +0.02em, uppercase |
72
+ | code | IDs, logs, SQL | 14px / 1.5 | `font-weight-normal` |
73
+
74
+ Display weight caps at 500 — the brand's calibrated mid-weight reads engineered, and breaks at 600+.
75
+ Negative tracking on headings is the signature; build hierarchy on size and tight tracking, never a
76
+ second family or a heavier-than-500 weight.
77
+
78
+ ## 4 Component Stylings
79
+
80
+ Every recurring operator component composes from the primitives — no literal values.
81
+
82
+ - **Button** — primary: filled emerald `primary` with near-black `primary-foreground`, `radius` (6px),
83
+ never a pill; pressed lifts to deep-emerald. Secondary: `secondary` fill, 1px `border`, `foreground`.
84
+ Ghost: transparent, `accent` on hover.
85
+ - **Input** — `background` fill, 1px `border` (`border-weight`), `radius`; focus draws the emerald
86
+ `ring` at full 2px, no glow.
87
+ - **Card** — `card` surface on a 1px `border`, `radius`; depth is the hairline, not shadow — shadow
88
+ only when it must lift off the canvas; inset by `density-inset`.
89
+ - **Table row** — height `table-row-height`; `border` grid lines carry the grid; `muted` on hover;
90
+ `tabular-nums` on numeric columns; selection tints `accent` (neutral, never green).
91
+ - **Side panel** — detail and edit open in the panel (`side-panel-width`, `side-panel-width-rich` for
92
+ content-heavy), beside the work, not over it.
93
+ - **Badge** — pill radius, `muted`/status fill, uppercase caption; status badges take `success` /
94
+ `warning` / `destructive`, never `primary`. Pill radius is badges-only.
95
+
96
+ ## 5 Layout
97
+
98
+ Base spacing unit 4px; the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64` — the marketing
99
+ 64–96px section rhythm stays behind. Shell dimensions map one-to-one to the layout primitives: sidebar
100
+ `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`, side panel
101
+ `side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms `form-max-width`,
102
+ tables full-width. Density is governed globally by `density-tier` (standard, rewriting the spacing scale
103
+ through `density-gap`) and stepped per archetype by the surface catalog — the data-heavy console and
104
+ log stream step denser, never the whole app.
105
+
106
+ ## 6 Depth
107
+
108
+ Flat, hairline-first. Hierarchy comes from the greyscale ladder and 1px hairlines, not drop shadows:
109
+
110
+ - **0 — canvas** `background` (`#ffffff`), no border.
111
+ - **1 — panel / card** `card` on a 1px `border`; the hairline carries rank — shadow only when a card
112
+ must genuinely lift off the canvas (the faintest `sm`).
113
+ - **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
114
+ shadow, enough to separate an overlay from the canvas above a scrim. Rank is border and position,
115
+ never a heavier shadow.
116
+ - **inlay — code / log / SQL** near-black `#1c1c1c` (canvas-night, `#202020` for nested chrome) with
117
+ white text and `font-mono` — the developer DNA carried even in a light UI (the SQL editor and log
118
+ stream wear it).
119
+
120
+ Focus is a 2px emerald `ring` outline (never a glow), visible on every interactive element. Three
121
+ z-levels: content, sticky chrome, overlay.
122
+
123
+ ## 7 Do's & Don'ts
124
+
125
+ - **Do** anchor every surface on the white canvas; the white-canvas commitment is the brand — no
126
+ atmospheric gradient, no dark marketing track.
127
+ - **Do** reserve emerald `primary` for the primary action, the focus `ring`, and the active-nav
128
+ indicator — nothing else. Its scarcity is what reads as the one chromatic event.
129
+ - **Do** set near-black `primary-foreground` on the green button — the brand's idiosyncratic "lit"
130
+ read, dark type on green, never white.
131
+ - **Do** carry hierarchy with the greyscale ladder, hairlines, weight, and tight tracking — the brand
132
+ is flat.
133
+ - **Do** dress code, log, and SQL panels in the near-black inlay (`#1c1c1c`, `font-mono`) — show the
134
+ real query, not an illustration of one.
135
+ - **Do** apply `tabular-nums` to numeric columns and `font-mono` to IDs, codes, timestamps, and SQL.
136
+ - **Don't** promote a second chromatic accent — purple, yellow, pink, and indigo belong in charts and
137
+ logos only, never as system or UI colours.
138
+ - **Don't** bump display weight above 500, or set white text on the green button — both break the brand.
139
+ - **Don't** pill controls or reach for a radius outside `radius-scale` — the button/input radius is 6px.
140
+ - **Don't** signal elevation with heavy drop shadows, or open detail in a modal when the panel fits.
141
+
142
+ ## 8 Responsive
143
+
144
+ The operator sweep is 375 / 768 / 1024 / 1440.
145
+
146
+ | Breakpoint | What changes |
147
+ | --- | --- |
148
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
149
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
150
+ | 1024 | sidebar expands; two-pane queue+detail holds side by side |
151
+ | 1440 | content caps at `form-max-width` for forms; tables and dashboards use the full width |
152
+
153
+ Code, log, and SQL inlays keep mono legibility at every breakpoint by scrolling horizontally, not
154
+ wrapping.
155
+
156
+ ## 9 Agent Prompt Guide
157
+
158
+ Directives the emitting agent follows verbatim:
159
+
160
+ - Wear the white canvas by default; the white-canvas commitment is Supabase — no gradient, no dark
161
+ marketing band. Panels read by their hairline, not by brightness.
162
+ - Spend emerald once per surface: the primary action, the focus ring, the active-nav indicator. If two
163
+ things want the green, one is not primary. Colour otherwise belongs to charts and status.
164
+ - Set near-black type on the green button (`primary-foreground` `#171717`), never white — the "lit"
165
+ green with dark type is the brand's signature.
166
+ - Headings ride Inter at weight 500 with tight negative tracking; the display scale (64/48px) stays
167
+ behind — operator headings top out at 28px, hierarchy is size and tracking. Never exceed weight 500.
168
+ - Dress code, log, and SQL panels in the near-black `#1c1c1c` inlay with `font-mono`; show the real
169
+ query, not a mockup of one.
170
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp / log line and SQL block is
171
+ `font-mono` (system mono, no webfont).
172
+ - Detail and edit go in the side panel beside the work; a modal is a confirmation, not a workspace.
173
+ - Keyboard-first: the emerald `ring` focus outline is always visible.
174
+ - Leave behind: the 64/48px hero display, the composited product-mockup float shadows, the dark
175
+ featured pricing tier, and the 64–96px section rhythm — marketing chrome, not operator chrome.
176
+
177
+ ```yaml design-primitives
178
+ radius: 6px # corpus: signature button/input radius (rounded.sm 6px); scale offers 8/12/16 for cards and modals; pill is badges-only
179
+ shadow-intensity: 0.4 # derived: operator depth is hairline-first; the corpus's Level 2/3 float shadows are marketing-mockup only, so only true overlays lift
180
+ border-weight: 1px
181
+ density-gap: 1 # derived: standard tier — the clean/generous marketing read translated down to an honest operator density; data archetypes step denser
182
+ density-inset: 1 # derived: matches the standard density-gap for coherent component insets
183
+ font-sans: Inter, system-ui, sans-serif # corpus: brand face Circular is proprietary; Inter at weight 500 is the corpus's own shippable substitute
184
+ font-mono: ui-monospace, Menlo, Monaco, Consolas, monospace # corpus: brand ships no proprietary mono webfont — system mono for code, logs, SQL
185
+ font-weight-normal: 400 # corpus: body weight 400
186
+ font-weight-strong: 500 # corpus: display/emphasis weight 500, capped — the calibrated mid-weight breaks at 600+
187
+ heading-tracking: -0.02em # corpus: the signature negative display tracking (-1.92px at 64px scaling down to -0.42px at 28px) resolves to ~-0.02em at operator heading sizes
188
+ duration-unit: 50ms # derived: corpus documents no motion; functional operator base
189
+ duration-fast: 100ms # derived: corpus silent on motion; functional tempo
190
+ duration-normal: 150ms # derived: corpus silent on motion; standard functional tempo
191
+ duration-slow: 250ms # derived: corpus silent on motion; overlay/panel transition
192
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent on motion; standard functional ease
193
+ contrast-boost: 1 # derived: the brand's fine greyscale hairline ladder is deliberately calibrated; hairlines carry the grid, no boost
194
+ icon-stroke: 1.75 # derived: corpus silent on icon stroke; precise/technical operator stroke one step under lucide's 2, matching the dev-tool voice
195
+ icon-size-base: 16px # derived: corpus silent on icon size; operator default
196
+ sidebar-width-expanded: 248px # derived: brand has no app sidebar (marketing top nav); standard operator rail (~brand dashboard width)
197
+ sidebar-width-collapsed: 56px # derived: standard operator icon rail
198
+ topbar-height: 56px # derived: from the corpus nav padding (16px/24px) resolving to ~56px
199
+ side-panel-width: 420px # derived: brand has no app side panel; standard operator detail panel
200
+ side-panel-width-rich: 640px # derived: content-heavy detail panel
201
+ modal-width-max: 560px # derived: corpus modal chrome (xl 16px radius) gives no width; operator confirmation cap
202
+ form-max-width: 640px # derived: brand's ~1280px marketing container is marketing; operator form cap
203
+ table-row-height: 40px # derived: the brand's dense product tables and 8px/12px control padding read at a 40px operator row; dense archetypes step down via the surface catalog
204
+ verbosity: default
205
+ feedback: subtle # derived: the brand is quietly technical and calm — gentle present feedback, not austere silence
206
+ density-tier: standard # derived: the clean/generous marketing read down to an honest operator tier; data-heavy archetypes step denser, never the whole app
207
+ product-traits: [dev-tools, database, dashboard, admin]
208
+ ```
209
+
210
+ ```yaml lever-manifest
211
+ version: 1
212
+ fonts: { sans: "Inter, system-ui, sans-serif", mono: "ui-monospace, Menlo, Monaco, Consolas, monospace" }
213
+ color-tokens:
214
+ light:
215
+ background: "#ffffff"
216
+ foreground: "#171717"
217
+ card: "#ffffff"
218
+ card-foreground: "#171717"
219
+ muted: "#fafafa"
220
+ muted-foreground: "#707070"
221
+ border: "#dfdfdf"
222
+ input: "#dfdfdf"
223
+ ring: "#3ecf8e"
224
+ primary: "#3ecf8e"
225
+ primary-foreground: "#171717" # corpus: near-black on the green button, never white — the "lit" read is the brand's idiosyncratic choice
226
+ accent: "#ededed" # derived: hairline-cool grey lift for selection/hover; neutral, never green (green stays reserved for CTAs)
227
+ accent-foreground: "#171717"
228
+ destructive: "#dc2626" # derived: corpus's reds (tomato #ff2201, crimson #e2005a) are logo/chart-only and too loud for a destructive fill; clean operator red
229
+ destructive-foreground: "#ffffff"
230
+ success: "#24b47e" # derived: brand deep-emerald (the CTA pressed state) doubles as a status green distinct from the mint #3ecf8e CTA
231
+ warning: "#ffdb13" # corpus: the brand's documented status yellow (accent-yellow, "status indicator only")
232
+ popover: "#ffffff"
233
+ popover-foreground: "#171717"
234
+ secondary: "#f2f2f2" # derived: a clean step below canvas-soft for secondary-button/segmented fills
235
+ secondary-foreground: "#171717"
236
+ chart-1: "#3ecf8e" # corpus: emerald — primary data series
237
+ chart-2: "#644fc1" # corpus: accent-violet
238
+ chart-3: "#054cff" # corpus: accent-indigo
239
+ chart-4: "#c7007e" # corpus: accent-pink
240
+ chart-5: "#ffdb13" # corpus: accent-yellow
241
+ sidebar: "#fafafa" # derived: brand has no app sidebar; a faint canvas-soft tint separates the rail from the white content canvas
242
+ sidebar-foreground: "#171717"
243
+ sidebar-primary: "#3ecf8e" # derived: emerald active-nav indicator
244
+ sidebar-primary-foreground: "#171717" # derived: near-black on green, matching the button's on-primary read
245
+ sidebar-accent: "#ededed" # derived: neutral hover/selected nav lift, matching accent
246
+ sidebar-accent-foreground: "#171717"
247
+ sidebar-border: "#dfdfdf"
248
+ sidebar-ring: "#3ecf8e"
249
+ spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
250
+ radius-scale: [0, 4, 6, 8, 12, 16, 9999]
251
+ shadow-levels: [none, sm, md]
252
+ motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
253
+ icons: { family: lucide, stroke: 1.75 }
254
+ accent-count: 1
255
+ ```
@@ -0,0 +1,226 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Superhuman
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Superhuman — the warm-editorial operator reading
9
+
10
+ An operator translation of Superhuman's fast-productivity brand: a warm, quiet, editorial system
11
+ whose content body is white with off-black warm-grey ink, anchored by a single deep indigo-navy accent.
12
+ The marketing surfaces are theatrical — a violet-sky atmospheric hero, hero-scale display type, a
13
+ deep-teal closing band that resolves every page. None of that theatre belongs on a queue or a case
14
+ detail; what carries is the warmth (warm neutrals, sub-default type weights, off-black ink), the
15
+ 8px rounded-rectangle radius character, and the one-accent indigo discipline. Both machine blocks are
16
+ fully valued; every judgment away from the marketing brand is annotated `# derived:` where it lands.
17
+
18
+ ## 1 Visual Theme
19
+
20
+ Light by default — the brand's content body *is* white; dark is opt-in. Warm and quiet: the neutral
21
+ ramp leans warm-grey, ink is `foreground` warm off-black `#292827` (never pure black), the canvas is
22
+ white, and hairlines are a warm grey `#e8e4dd`. Flat — hierarchy comes from hairline, type weight, and
23
+ whitespace, not shadow. A single accent, `primary` deep indigo-navy `#1b1938` (near-black), is reserved
24
+ for the one action that matters and for active nav; it is the brand's own CTA color. The radius
25
+ character is the signature: 8px rounded rectangles, never a pill on a working surface. Density is
26
+ `standard` and editorial-roomy — it steps denser per archetype, never cramped. The violet-sky hero
27
+ gradient, hero-scale display type, and the teal closing band stay behind as marketing (see §7).
28
+
29
+ ## 2 Color Roles
30
+
31
+ Light values first. One accent — `primary` is the only chromatic hue that carries meaning; status hues
32
+ speak only status. Violet-soft and teal are marketing surfaces and carry no operator role.
33
+
34
+ | Role | Value | Allowed where |
35
+ | --- | --- | --- |
36
+ | `background` / `card` / `popover` | white `#ffffff` | page, cards, and overlays — the dominant surface |
37
+ | `foreground` | warm off-black `#292827` | all primary ink — never pure black |
38
+ | `muted` / `secondary` | warm off-white `#f4f2ed` | hover rows, subtle fills, secondary buttons |
39
+ | `muted-foreground` | warm grey `#73706d` | labels, captions, secondary text |
40
+ | `border` / `input` | warm hairline `#e8e4dd` | every separator, grid line, and field edge |
41
+ | `primary` | indigo-navy `#1b1938` | the one primary action; active nav; key interactive detail |
42
+ | `accent` | pale indigo tint `#edecf2` | selected / hovered rows and nav, on-accent surfaces only |
43
+ | `ring` | `primary` indigo | the focus outline — unmistakable, because keyboard-first |
44
+ | `destructive` | warm red `#c0362b` | destructive actions and error state only |
45
+ | `success` / `warning` | green `#157a52` / amber `#b5791f` | status signalling only, never chrome |
46
+
47
+ ## 3 Typography
48
+
49
+ One sans, one mono. `font-sans` is Super Sans VF — the proprietary variable display sans; Inter
50
+ Variable is the documented open substitute, run at the same sub-default weights. The brand's warmth
51
+ signature is the *in-between* weight: body sits at `font-weight-normal` 460 (not 400), headings at
52
+ `font-weight-strong` 600. Display tracking is negative and tight; operator headings inherit a
53
+ proportioned `heading-tracking` of `-0.02em`. `font-mono` is derived (the marketing brand ships none)
54
+ for IDs, codes, timestamps, and log lines. Numeric columns render `tabular-nums` so figures align.
55
+
56
+ | Step | Role | Size · line | Weight · tracking |
57
+ | --- | --- | --- | --- |
58
+ | h1 | page title | 24px / 1.2 | `font-weight-strong` · `heading-tracking` |
59
+ | h2 | section head | 19px / 1.25 | `font-weight-strong` · `heading-tracking` |
60
+ | h3 | card / group head | 15px / 1.35 | `font-weight-strong` · `heading-tracking` |
61
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` (460) |
62
+ | small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
63
+ | caption | uppercase eyebrow | 12px / 1.3 | `font-weight-strong`, `+0.02em`, uppercase |
64
+
65
+ Keep the sub-default weight — the quiet warmth is the type voice. Bump weight for emphasis, never size.
66
+
67
+ ## 4 Component Stylings
68
+
69
+ Every recurring operator component composes from the primitives — no literal values.
70
+
71
+ - **Button** — `primary`: filled `primary` indigo on `primary-foreground` white, `radius` 8px, never a
72
+ pill. Secondary: `secondary` fill, 1px `border`, `foreground`. Ghost: transparent, `accent` on hover.
73
+ - **Input** — `background` fill, 1px `border` (`border-weight`), `radius`; focus draws the `ring` at a
74
+ full 2px, no glow.
75
+ - **Card** — `card` surface, 1px `border`, `radius`; shadow only when it must lift (`shadow-intensity`);
76
+ inset by `density-inset`.
77
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
78
+ numeric columns; row selection tints `accent`.
79
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`
80
+ for content-heavy) beside the work, not over it.
81
+ - **Badge** — hairline `border`, `muted` / status fill, uppercase caption; status badges take
82
+ `success` / `warning` / `destructive`, never `primary`.
83
+
84
+ ## 5 Layout
85
+
86
+ Base spacing unit 8px (the brand's base, with 2 / 4 / 12 sub-tokens for fine work); the on-scale ramp
87
+ is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64`. Shell dimensions map one-to-one to the layout primitives:
88
+ sidebar `sidebar-width-expanded` 256 / `sidebar-width-collapsed` 56, topbar `topbar-height` 56, side
89
+ panel `side-panel-width` 440 / `side-panel-width-rich` 640, modal cap `modal-width-max` 560, forms
90
+ `form-max-width` 640, tables full-width. Density is governed globally by `density-tier` and stepped per
91
+ archetype by the surface catalog — never by absolute overrides. The editorial roominess is carried by
92
+ the 8px base, the taller `table-row-height`, and the larger radius, not by inflating the global tier.
93
+
94
+ ## 6 Depth
95
+
96
+ Flat. Hierarchy comes from the surface ladder and hairlines, not shadow:
97
+
98
+ - **0 — canvas** `background`, no border.
99
+ - **1 — panel / card** `card` on a 1px `border`; shadow only when it must lift off the canvas —
100
+ `0 1px 3px rgba(0,0,0,0.08)` (riding `shadow-intensity`).
101
+ - **2 — overlay** `popover` / side panel / modal — the one place shadow earns its keep,
102
+ `0 8px 24px rgba(0,0,0,0.12)`.
103
+
104
+ The hero's violet-sky atmospheric backdrop (the marketing depth medium) stays behind. Focus is a 2px
105
+ `ring` outline in indigo, never a glow, visible on every interactive element. Three z-levels: content,
106
+ sticky chrome, overlay.
107
+
108
+ ## 7 Do's & Don'ts
109
+
110
+ - **Do** reserve `primary` indigo for the single most important action on a surface; everything else is
111
+ neutral or status.
112
+ - **Do** carry hierarchy with warm hairlines, sub-default weight steps, and whitespace — the brand is flat.
113
+ - **Do** hold ink at warm off-black `foreground` `#292827`; pure black breaks the brand's quiet warmth.
114
+ - **Do** apply `tabular-nums` to every numeric column and `font-mono` to IDs, codes, and timestamps.
115
+ - **Don't** wear the marketing theatre: no violet-sky hero gradient, no deep-teal closing band, no
116
+ hero-scale display type on a working surface — those are brochure devices, not operator chrome.
117
+ - **Don't** promote a second chromatic accent. Teal and violet-soft stay marketing-decorative; status
118
+ uses `success` / `warning` / `destructive`.
119
+ - **Don't** pill the primary CTA — 8px rounded rectangle is the button shape; the pill is hero-only.
120
+ - **Don't** signal elevation with heavy drop shadows, or open detail in a modal when the side panel fits.
121
+
122
+ ## 8 Responsive
123
+
124
+ The operator sweep is 375 / 768 / 1024 / 1440.
125
+
126
+ | Breakpoint | What changes |
127
+ | --- | --- |
128
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
129
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
130
+ | 1024 | sidebar expands; two-pane queue+detail holds side by side |
131
+ | 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
132
+
133
+ ## 9 Agent Prompt Guide
134
+
135
+ Directives the emitting agent follows verbatim:
136
+
137
+ - What carries from Superhuman: the warm neutral palette and warm off-black ink, the single indigo
138
+ accent, the 8px rounded-rectangle radius, and the sub-default type weights (460 body / 600 strong).
139
+ - What stays behind: the violet-sky hero gradient, the deep-teal closing band, hero-scale display type,
140
+ and the pill CTA — every one is a marketing device with no operator role.
141
+ - Lead every list surface with its table; lead every entity with its primary read, not its chrome.
142
+ - Accent only the primary action with indigo. If two things want the accent, one is not primary.
143
+ - Detail and edit go in the side panel; a modal is a confirmation, not a workspace.
144
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`.
145
+ - Every workflow completes from the keyboard; the indigo `ring` focus outline is always visible.
146
+ - Stay flat and warm — hairline and weight before shadow; never pure black, never a pill on a CTA.
147
+
148
+ ```yaml design-primitives
149
+ radius: 8px # brand signature button radius (rounded rectangle, never pill)
150
+ shadow-intensity: 0.4 # derived: brand body is flat; shadow reserved for true overlays
151
+ border-weight: 1px
152
+ density-gap: 1
153
+ density-inset: 1
154
+ font-sans: Super Sans VF, Inter, system-ui, -apple-system, sans-serif # brand face; Inter Variable is the documented substitute at sub-default weights
155
+ font-mono: Geist Mono, ui-monospace, SFMono-Regular, monospace # derived: marketing brand ships no mono; operator IDs/codes/timestamps need one
156
+ font-weight-normal: 460 # brand's sub-default body weight — the warmth signature (not 400)
157
+ font-weight-strong: 600 # brand's label weight (button-cap); clearer operator heading than the softer display 540
158
+ heading-tracking: -0.02em # brand's negative display tracking, proportioned to operator heading sizes
159
+ duration-unit: 50ms # derived: corpus documents no motion
160
+ duration-fast: 100ms # derived: functional operator motion
161
+ duration-normal: 150ms # derived
162
+ duration-slow: 250ms # derived
163
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived
164
+ contrast-boost: 1
165
+ icon-stroke: 1.5 # derived: refined editorial character → one step under lucide's 2
166
+ icon-size-base: 16px # derived
167
+ sidebar-width-expanded: 256px # derived: editorial roominess
168
+ sidebar-width-collapsed: 56px # derived
169
+ topbar-height: 56px # derived: from the brand nav padding 16px x 24px
170
+ side-panel-width: 440px # derived: roomier editorial detail panel
171
+ side-panel-width-rich: 640px # derived
172
+ modal-width-max: 560px # derived
173
+ form-max-width: 640px # derived: narrower than the ~960px marketing column, capped for form legibility
174
+ table-row-height: 44px # derived: editorial roominess + the corpus's 44px touch-target floor
175
+ verbosity: default # derived
176
+ feedback: subtle # derived: editorial calm
177
+ density-tier: standard # derived: editorial-spacious brand read as a comfortable operator standard; roominess carried by radius/rows/spacing, archetypes step denser
178
+ product-traits: [productivity, inbox, crm, queue]
179
+ ```
180
+
181
+ ```yaml lever-manifest
182
+ version: 1
183
+ fonts: { sans: "Super Sans VF, Inter, system-ui, -apple-system, sans-serif", mono: "Geist Mono, ui-monospace, SFMono-Regular, monospace" }
184
+ color-tokens:
185
+ light:
186
+ background: "#ffffff"
187
+ foreground: "#292827"
188
+ card: "#ffffff"
189
+ card-foreground: "#292827"
190
+ muted: "#f4f2ed" # derived: warm off-white one step deeper than canvas-soft #fafaf8 for a perceptible hover/fill
191
+ muted-foreground: "#73706d"
192
+ border: "#e8e4dd"
193
+ input: "#e8e4dd"
194
+ ring: "#1b1938"
195
+ primary: "#1b1938"
196
+ primary-foreground: "#ffffff"
197
+ accent: "#edecf2" # derived: pale indigo tint of primary for selected/hover rows and nav
198
+ accent-foreground: "#1b1938"
199
+ destructive: "#c0362b" # derived: warm red; brand ships no error hue
200
+ destructive-foreground: "#ffffff"
201
+ success: "#157a52" # derived: status green tuned toward the brand's teal family
202
+ warning: "#b5791f" # derived: warm amber matching the warm-grey temperature
203
+ popover: "#ffffff"
204
+ popover-foreground: "#292827"
205
+ secondary: "#f4f2ed" # derived: aligned with muted warm off-white
206
+ secondary-foreground: "#292827"
207
+ chart-1: "#1b1938"
208
+ chart-2: "#155555" # derived: brand surface-teal-mid as a chart hue
209
+ chart-3: "#8b6fd6" # derived: saturated violet from the surface-violet-soft family
210
+ chart-4: "#b5791f" # derived: warm amber (warning family)
211
+ chart-5: "#157a52" # derived: green (success family)
212
+ sidebar: "#fafaf8" # derived: warm off-white (brand canvas-soft), one tint off the white canvas
213
+ sidebar-foreground: "#292827"
214
+ sidebar-primary: "#1b1938"
215
+ sidebar-primary-foreground: "#ffffff"
216
+ sidebar-accent: "#edecf2" # derived: matches the accent tint
217
+ sidebar-accent-foreground: "#1b1938"
218
+ sidebar-border: "#e8e4dd"
219
+ sidebar-ring: "#1b1938"
220
+ spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
221
+ radius-scale: [4, 6, 8, 12, 16, 9999]
222
+ shadow-levels: [none, sm, md]
223
+ motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
224
+ icons: { family: lucide, stroke: 1.5 }
225
+ accent-count: 1
226
+ ```