@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.
Files changed (100) hide show
  1. package/data/harness-index.json +1 -1
  2. package/data/harnesses/code/harness.json +2 -2
  3. package/data/harnesses/code/rules/general.md +2 -1
  4. package/data/harnesses/code/skills/design/SKILL.md +65 -0
  5. package/data/harnesses/code/skills/design/data/catalog/rules.csv +132 -0
  6. package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +317 -0
  7. package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +235 -0
  8. package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +232 -0
  9. package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +220 -0
  10. package/data/harnesses/code/skills/design/data/design-md/library/apple.md +220 -0
  11. package/data/harnesses/code/skills/design/data/design-md/library/binance.md +223 -0
  12. package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +219 -0
  13. package/data/harnesses/code/skills/design/data/design-md/library/cal.md +220 -0
  14. package/data/harnesses/code/skills/design/data/design-md/library/clay.md +220 -0
  15. package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +220 -0
  16. package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +227 -0
  17. package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +237 -0
  18. package/data/harnesses/code/skills/design/data/design-md/library/composio.md +220 -0
  19. package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +220 -0
  20. package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +220 -0
  21. package/data/harnesses/code/skills/design/data/design-md/library/expo.md +228 -0
  22. package/data/harnesses/code/skills/design/data/design-md/library/figma.md +221 -0
  23. package/data/harnesses/code/skills/design/data/design-md/library/framer.md +236 -0
  24. package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +220 -0
  25. package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +234 -0
  26. package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +240 -0
  27. package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +236 -0
  28. package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +237 -0
  29. package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +220 -0
  30. package/data/harnesses/code/skills/design/data/design-md/library/meta.md +220 -0
  31. package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +220 -0
  32. package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +220 -0
  33. package/data/harnesses/code/skills/design/data/design-md/library/miro.md +233 -0
  34. package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +220 -0
  35. package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +236 -0
  36. package/data/harnesses/code/skills/design/data/design-md/library/notion.md +220 -0
  37. package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +222 -0
  38. package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +226 -0
  39. package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +223 -0
  40. package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +234 -0
  41. package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +220 -0
  42. package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +220 -0
  43. package/data/harnesses/code/skills/design/data/design-md/library/resend.md +285 -0
  44. package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +225 -0
  45. package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +219 -0
  46. package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +251 -0
  47. package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +244 -0
  48. package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +227 -0
  49. package/data/harnesses/code/skills/design/data/design-md/library/slack.md +240 -0
  50. package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +252 -0
  51. package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +248 -0
  52. package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +241 -0
  53. package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +255 -0
  54. package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +226 -0
  55. package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +233 -0
  56. package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +248 -0
  57. package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +220 -0
  58. package/data/harnesses/code/skills/design/data/design-md/library/uber.md +220 -0
  59. package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +220 -0
  60. package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +245 -0
  61. package/data/harnesses/code/skills/design/data/design-md/library/warp.md +220 -0
  62. package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +220 -0
  63. package/data/harnesses/code/skills/design/data/design-md/library/wired.md +220 -0
  64. package/data/harnesses/code/skills/design/data/design-md/library/wise.md +220 -0
  65. package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +220 -0
  66. package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +238 -0
  67. package/data/harnesses/code/skills/design/data/design-md/nurix.md +217 -0
  68. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/command-center.tsx +249 -0
  69. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/create-edit.tsx +249 -0
  70. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/dashboard.tsx +248 -0
  71. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/entity-detail.tsx +245 -0
  72. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/list-detail.tsx +223 -0
  73. package/data/harnesses/code/skills/design/data/operator-pack/exemplars/log-stream.tsx +249 -0
  74. package/data/harnesses/code/skills/design/data/operator-pack/fixtures.md +88 -0
  75. package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +132 -0
  76. package/data/harnesses/code/skills/design/data/operator-pack/trust-rubric.md +76 -0
  77. package/data/harnesses/code/skills/design/references/create.md +126 -0
  78. package/data/harnesses/code/skills/design/references/diagnosis.md +108 -0
  79. package/data/harnesses/code/skills/design/references/hard-rules.md +155 -0
  80. package/data/harnesses/code/skills/design/references/improve.md +85 -0
  81. package/data/harnesses/code/skills/design/references/interaction.md +77 -0
  82. package/data/harnesses/code/skills/design/references/introspect.md +100 -0
  83. package/data/harnesses/code/skills/design/references/lifecycle.md +73 -0
  84. package/data/harnesses/code/skills/design/references/personality.md +504 -0
  85. package/data/harnesses/code/skills/design/references/structure.md +138 -0
  86. package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +706 -0
  87. package/data/harnesses/code/skills/design/scripts/detector.mjs +898 -0
  88. package/data/harnesses/code/skills/design/scripts/generate-fixtures.mjs +551 -0
  89. package/data/harnesses/code/skills/design/scripts/hook-config.json +11 -0
  90. package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +386 -0
  91. package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +280 -0
  92. package/data/harnesses/code/skills/design/scripts/render-rung.mjs +690 -0
  93. package/data/harnesses/code/skills/design/scripts/scaffold.mjs +552 -0
  94. package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +432 -0
  95. package/data/harnesses/etna/CLAUDE.md +1 -1
  96. package/data/harnesses/etna/harness.json +2 -2
  97. package/data/harnesses/etna/rules/general.md +2 -1
  98. package/data/harnesses/mobile/harness.json +2 -2
  99. package/data/harnesses/mobile/rules/general.md +2 -1
  100. package/package.json +1 -1
@@ -0,0 +1,244 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Sentry
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Sentry — the violet-and-lime developer-console operator design
9
+
10
+ Sentry's design language reads like a debugging console wearing a leather jacket: a deep purple-violet
11
+ midnight canvas, electric-lime keyword highlights, sticker mascots, a chunky display sans. But the
12
+ brand is explicitly *two-polarity* — dark violet owns marketing and feature pages, while **white owns
13
+ the dense, scannable, transactional surfaces** (pricing, contact, reference) where developers scan
14
+ tables. That white polarity is exactly operator territory, so this entry wears it. What carries: the
15
+ violet palette and its cool temperature, the authoritative near-black-violet primary button that reads
16
+ as the strongest affordance on either polarity, the Rubik UI voice with uppercase `+0.2px` caps, Monaco
17
+ on every code/log surface, the 8px developer-dialect radius, and lime held scarce as a signature
18
+ highlight. What stays behind: the 88px display hero, the starfield texture, the floating mascots, the
19
+ lime squiggle divider, and the dark-canvas marketing atmosphere. Judgments away from the corpus are
20
+ annotated `# derived:` where it is silent.
21
+
22
+ ## 1 Visual Theme
23
+
24
+ Light by default; dark is opt-in. The operator UI sits on Sentry's white transactional canvas
25
+ (`#ffffff`) — the polarity the brand reserves for dense reference content, not its atmospheric dark
26
+ marketing hero. Flat: hierarchy is carried by a cool `#e5e7eb` hairline grid, type weight, and violet
27
+ temperature — never heavy shadow. A single accent — the authoritative midnight-violet `primary`
28
+ (`#150f23`), a near-black button with a violet undertone — carries the one action that matters, and
29
+ reads as the most authoritative affordance on any canvas, so it is never softened to a bright
30
+ brand-violet. Ink is deep ink-violet `foreground` (`#1f1633`), one hair lifted from the button. Lime
31
+ stays scarce — a signature highlight glyph, never a fill (§7). The **dark violet console remains the
32
+ opt-in iconic read** for a monitoring surface that wants it, but light is the default. Density is
33
+ `standard`, dense-capable from the console heritage, stepping denser per archetype.
34
+
35
+ ## 2 Color Roles
36
+
37
+ Light values (the manifest carries hex — the corpus's native format). One accent — midnight-violet
38
+ `primary` is the only hue that carries the primary-action meaning; lime, pink, and the violet family
39
+ speak charts and the scarce highlight, status hues speak only status. The dark-console value is noted where it defines the identity.
40
+
41
+ | Role | Value | Allowed where |
42
+ | --- | --- | --- |
43
+ | `background` / `card` / `popover` | white `#ffffff` (dark console: `#1f1633`) | page, cards, and overlays — the dominant surface |
44
+ | `foreground` | deep ink-violet `#1f1633` (dark console: `#ffffff`) | all primary ink — the brand's single token doing double duty as dark canvas and light ink |
45
+ | `muted` / `secondary` | faint violet tint `#f3f1f8` | hover rows, subtle fills, secondary-button fill |
46
+ | `muted-foreground` | violet-gray `#6b6577` | labels, captions, secondary text |
47
+ | `border` | cool hairline `#e5e7eb` | every divider and grid line on the light canvas |
48
+ | `input` | field hairline `#cfcfdb` | text-field and form-control edges — one step firmer than the divider grid |
49
+ | `primary` | midnight violet `#150f23` | the one primary action; active nav; nowhere decorative |
50
+ | `primary-foreground` | white `#ffffff` | text on the near-black action |
51
+ | `accent` | faint violet wash `#e9e5f4` | selected / hovered rows and nav — a violet tint, never a lime or pink wash |
52
+ | `ring` | focus blue `#3b82f6` | the focus outline — the corpus's one documented blue, reserved for keyboard focus |
53
+ | `destructive` | cool crimson `#e11d48` | destructive actions and error state only |
54
+ | `success` / `warning` | green `#16a34a` / amber `#d97706` | status signalling only, never chrome |
55
+
56
+ Lime `#c2ef4e`, hot-pink `#fa7faa`, and the violet family live in charts and the one scarce highlight device (§7) — never a button, a fill, or body text.
57
+
58
+ ## 3 Typography
59
+
60
+ One UI sans, one mono. `font-sans` is **Rubik** (fallbacks `-apple-system, system-ui, Segoe UI,
61
+ Helvetica, Arial`) — it carries every body, caption, button, and eyebrow role. `font-mono` is **Monaco**
62
+ (Menlo, Ubuntu Mono fallbacks) for IDs, codes, timestamps, log lines, stack traces, and event payloads.
63
+ The proprietary chunky display sans and its 88px hero stay behind — an operator surface tops out at a
64
+ 24px page title in Rubik. The brand's signature is **uppercase caps with `+0.2px` tracking** on buttons
65
+ and eyebrows — a console-prompt cadence carried on the caption step by hand. Functional copy rides the
66
+ denser 1.5 leading ("reads like a log"); the airy 2.0 marketing leading stays behind. Numeric columns
67
+ render `tabular-nums` (floor P4).
68
+
69
+ | Step | Role | Size · line | Weight · tracking |
70
+ | --- | --- | --- | --- |
71
+ | h1 | page title | 24px / 1.25 | `font-weight-strong` · `heading-tracking` |
72
+ | h2 | section head | 20px / 1.25 | `font-weight-strong` · 0 |
73
+ | h3 | card / group head | 16px / 1.3 | `font-weight-strong` · 0 |
74
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` |
75
+ | small | labels, meta, dense table | 13px / 1.45 | `font-weight-normal` |
76
+ | caption | uppercase eyebrow / button cap | 12px / 1.3 | `font-weight-strong`, `+0.2px`, uppercase |
77
+ | code | IDs, logs, payloads | mono 13px / 1.5 | `font-weight-normal` |
78
+
79
+ ## 4 Component Stylings
80
+
81
+ Every recurring operator component composes from the primitives — no literal values.
82
+
83
+ - **Button** — primary: filled midnight-violet `primary` on white `primary-foreground`, `radius` (8px),
84
+ uppercase `+0.2px` caption label, no pill. Secondary: `secondary` fill, 1px `border`, `foreground`.
85
+ Ghost: transparent, `accent` on hover.
86
+ - **Input** — `background` fill, 1px `input` border (`border-weight`), `radius` (inputs step to 6px);
87
+ focus draws the blue `ring` at full 2px, no glow.
88
+ - **Card** — `card` surface on a 1px `border`, cards step to 12px radius; shadow only when a true overlay must lift off the canvas; inset by `density-inset`.
89
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on numeric columns; row selection tints `accent`.
90
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich` for content-heavy payloads), beside the work, not over it.
91
+ - **Badge** — hairline `border`, `muted`/status fill, uppercase caption, 4px pill-ish radius; status badges take `success` / `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's
96
+ `2 / 4 / 8 / 12 / 16 / 24 / 32` map direct and the 96px marketing section rhythm stays behind. Shell
97
+ dimensions map one-to-one to the layout primitives: sidebar `sidebar-width-expanded` (248px) /
98
+ `sidebar-width-collapsed` (56px), topbar `topbar-height` (56px), side panel `side-panel-width` (420px) /
99
+ `side-panel-width-rich` (640px), modal cap `modal-width-max`, forms `form-max-width` (the brand's
100
+ ~1152px container is marketing), tables full-width. Density is governed globally by `density-tier` and
101
+ stepped per archetype — never by absolute overrides.
102
+
103
+ ## 6 Depth
104
+
105
+ Flat. Hierarchy comes from the surface ladder and cool hairlines, not shadow:
106
+
107
+ - **0 — canvas** `background`, no border.
108
+ - **1 — panel / card** `card` on a 1px `border`; shadow only when it must lift off the canvas.
109
+ - **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
110
+ shadow (the corpus's level-2 light-canvas card shadow). Rank is border and position; the marketing
111
+ glow-halo CTA stays behind.
112
+ - **inlay — code / log / terminal** near-black `#150f23` with white text and `font-mono` — the corpus's
113
+ `code-block` carried as the surface for log streams, stack traces, and event payloads inside a light UI.
114
+
115
+ Focus is a 2px blue `ring` outline (never a glow), visible on every interactive element (floor P6).
116
+ Three z-levels: content, sticky chrome, overlay. The full **dark violet console** is the opt-in iconic
117
+ read for a monitoring surface that wants it — same tokens, inverted polarity.
118
+
119
+ ## 7 Do's & Don'ts
120
+
121
+ - **Do** reserve midnight-violet `primary` for the single most important action and active nav — never
122
+ soften it to a bright brand-violet; the near-black is the point, authoritative on any canvas.
123
+ - **Do** carry hierarchy with cool hairlines, weight, and whitespace, keep every button and eyebrow
124
+ uppercase with `+0.2px` tracking, and dress code/log/payload panels in the near-black inlay
125
+ (`#150f23`, Monaco) with `tabular-nums` on numeric columns.
126
+ - **Don't** make lime a fill. `#c2ef4e` is a scarce highlight glyph (a matched-keyword chip, a single
127
+ "live" marker — one per viewport) and a chart hue; a lime "success" reads yellow and fails contrast,
128
+ so status uses `success` / `warning` / `destructive`.
129
+ - **Don't** promote a second brand accent — pink and the violet family are chart/decorative graces, not
130
+ UI action colors; keep crimson `destructive` distinct from decorative pink.
131
+ - **Don't** pill the primary CTA or reach outside `radius-scale` (buttons 8px; pill is badges only),
132
+ blend the two canvas polarities on one content band, signal rank with heavy shadow, or open detail in
133
+ a modal when the side panel fits.
134
+
135
+ ## 8 Responsive
136
+
137
+ The operator sweep is 375 / 768 / 1024 / 1440.
138
+
139
+ | Breakpoint | What changes |
140
+ | --- | --- |
141
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
142
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
143
+ | 1024 | sidebar expands; two-pane queue+detail holds side by side |
144
+ | 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
145
+
146
+ Code, log, and payload inlays keep Monaco legibility at every breakpoint by scrolling horizontally, not wrapping.
147
+
148
+ ## 9 Agent Prompt Guide
149
+
150
+ Directives the emitting agent follows verbatim:
151
+
152
+ - Reach for the white transactional canvas first — Sentry's dense polarity, not the dark marketing
153
+ hero (which is the opt-in iconic read, not the default). Spend the accent once: midnight-violet
154
+ `primary` marks THE action and active nav, never softened to a bright violet.
155
+ - Keep every button and eyebrow uppercase with `+0.2px` tracking — the console cadence is the brand;
156
+ emphasise by weight, never size. Lime is scarce: one highlight glyph per viewport (matched keyword,
157
+ a single "live" marker) plus the chart series — never a button, fill, or body text.
158
+ - Dress code, log, and event-payload panels in the near-black inlay (`#150f23`, Monaco) — real product
159
+ chrome, not a light mock. Every numeric column is `tabular-nums`; every ID / timestamp is `font-mono`.
160
+ - Stay flat — cool hairlines and the surface ladder before shadow; reach past a hairline only for a
161
+ real overlay. Keyboard-first: the blue `ring` focus outline is always visible.
162
+ - Leave behind the starfield texture, the floating mascots, the lime squiggle divider, and the 96px
163
+ marketing rhythm. What carries: the violet palette and cool temperature, the authoritative near-black
164
+ button, the Rubik caps cadence, Monaco, and the 8px radius character.
165
+
166
+ ```yaml design-primitives
167
+ radius: 8px # corpus: buttons/code/selects at rounded.md (8px); inputs 6px, cards 12px, badges 4px — no sharp corners
168
+ shadow-intensity: 0.4 # derived: light-canvas floating cards/modals take real level-2 drop shadows (~0.1 alpha); dark depth is texture (left behind); operator keeps shadow to overlays
169
+ border-weight: 1px # corpus: every border is 1px
170
+ density-gap: 1 # derived: console heritage is dense-capable, but corpus functional body is a roomier 16px/1.5; honest standard tier, archetypes step denser
171
+ density-inset: 1 # derived: matches density-gap for coherent component insets
172
+ font-sans: Rubik, -apple-system, system-ui, "Segoe UI", Helvetica, Arial, sans-serif # corpus: Rubik carries every body/caption/button/eyebrow role
173
+ font-mono: Monaco, Menlo, "Ubuntu Mono", monospace # corpus: Monaco on code blocks, install snippets, inline tokens
174
+ font-weight-normal: 400 # derived: corpus default UI body-md is 500 (display-tuned); operator dense body/table chrome reads cleaner at 400
175
+ font-weight-strong: 600 # corpus: heading-sm/body-strong at 600; the 700 button-cap and 700/88px hero display stay behind
176
+ heading-tracking: 0 # corpus: every Rubik heading tier tracks 0; the +0.2px tracking signature lives on uppercase caps, applied to the caption/button step by hand
177
+ duration-unit: 50ms # derived: corpus documents no motion timings; operator-standard functional base
178
+ duration-fast: 100ms # derived: corpus silent on motion
179
+ duration-normal: 150ms # derived: corpus silent on motion
180
+ duration-slow: 250ms # derived: corpus silent on motion
181
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent on motion; standard functional ease
182
+ contrast-boost: 1 # derived: the corpus hairline-cloud grid lines already read as a grid; no boost
183
+ icon-stroke: 1.75 # derived: corpus iconography is illustrated sticker mascots (marketing, left behind); operator line-icon stroke one step under lucide's 2
184
+ icon-size-base: 16px # derived: corpus has no UI icon size; operator standard
185
+ sidebar-width-expanded: 248px # derived: corpus has no app shell (marketing top-nav only); operator standard
186
+ sidebar-width-collapsed: 56px # derived: standard operator icon rail
187
+ topbar-height: 56px # derived: corpus nav padding 16/24px is marketing-generous; operator tightens to 56px
188
+ side-panel-width: 420px # derived: corpus has no shell; operator standard
189
+ side-panel-width-rich: 640px # derived: content-heavy detail (event payload / stack trace)
190
+ modal-width-max: 560px # derived: corpus dialogs are marketing; operator confirmation cap
191
+ form-max-width: 640px # derived: corpus contact form is a single light panel; 640 caps operator forms (the ~1152px container is marketing)
192
+ table-row-height: 40px # derived: standard operator; dense archetypes (log-stream) step down via the surface catalog
193
+ verbosity: default # derived: the console cadence is terse, but the brand narrates (playful, not austere); default suits a developer operator surface
194
+ feedback: subtle # derived: present-but-quiet operator feedback
195
+ density-tier: standard # derived: observability-console heritage is dense-capable, but corpus functional body is roomier than a trading terminal; honest standard, archetypes step denser
196
+ product-traits: [dev-tools, observability, dashboard, log-stream]
197
+ ```
198
+
199
+ ```yaml lever-manifest
200
+ version: 1
201
+ fonts: { sans: "Rubik, -apple-system, system-ui, \"Segoe UI\", Helvetica, Arial, sans-serif", mono: "Monaco, Menlo, \"Ubuntu Mono\", monospace" }
202
+ color-tokens:
203
+ light:
204
+ background: "#ffffff"
205
+ foreground: "#1f1633"
206
+ card: "#ffffff"
207
+ card-foreground: "#1f1633"
208
+ muted: "#f3f1f8" # derived: a faint violet tint over the corpus press-gray (#f0f0f0), holding the cool violet temperature on light
209
+ muted-foreground: "#6b6577" # derived: corpus documents only dark-surface muted; a violet-leaning mid gray reads as secondary text on white
210
+ border: "#e5e7eb" # corpus hairline-cloud — light-canvas dividers and grid lines
211
+ input: "#cfcfdb" # corpus hairline-cool — text-field and form-control edges
212
+ ring: "#3b82f6" # derived: corpus documents a dedicated translucent blue focus ring rgba(59,130,246,0.5) — "the only blue in the system"; carried as solid #3b82f6
213
+ primary: "#150f23" # corpus Midnight Violet — the authoritative near-black action, "strongest UI affordance regardless of polarity"
214
+ primary-foreground: "#ffffff"
215
+ accent: "#e9e5f4" # derived: faint violet selection wash, one step past muted so selection reads over hover; never lime/pink
216
+ accent-foreground: "#1f1633"
217
+ destructive: "#e11d48" # derived: corpus documents no error red (pink is decorative punctuation, never a signal); a cool crimson carries destruction on-temperature, distinct from the decorative pink
218
+ destructive-foreground: "#ffffff"
219
+ success: "#16a34a" # derived: corpus has no status green (lime is a decorative highlight, fails as a signal); a clean green carries success
220
+ warning: "#d97706" # derived: corpus has no caution hue; amber carries warning, kept distinct from the decorative lime
221
+ popover: "#ffffff"
222
+ popover-foreground: "#1f1633"
223
+ secondary: "#f3f1f8" # matches muted — secondary-button fill
224
+ secondary-foreground: "#1f1633"
225
+ chart-1: "#6a5fc1" # corpus Violet Link — the brand's own accent family carries the chart series
226
+ chart-2: "#c2ef4e" # corpus Electric Lime — the signature, scoped to charts + the scarce highlight glyph
227
+ chart-3: "#fa7faa" # corpus Hot Pink
228
+ chart-4: "#422082" # corpus Deep Violet
229
+ chart-5: "#79628c" # corpus Mid Violet
230
+ sidebar: "#f7f6fb" # derived: a faint violet-tinted step below the white canvas so the nav rail reads as chrome
231
+ sidebar-foreground: "#1f1633"
232
+ sidebar-primary: "#150f23" # active-nav marker = the primary action color
233
+ sidebar-primary-foreground: "#ffffff"
234
+ sidebar-accent: "#e9e5f4" # hover/selected nav lift, matches accent
235
+ sidebar-accent-foreground: "#1f1633"
236
+ sidebar-border: "#e5e7eb"
237
+ sidebar-ring: "#3b82f6"
238
+ spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
239
+ radius-scale: [4, 6, 8, 10, 12, 18, 9999]
240
+ shadow-levels: [none, sm, md]
241
+ motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
242
+ icons: { family: lucide, stroke: 1.75 }
243
+ accent-count: 1
244
+ ```
@@ -0,0 +1,227 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Shopify
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Shopify — operator reading
9
+
10
+ Shopify's brand runs two canvases that never blend: a cinematic near-black marketing track (full-bleed
11
+ merchant photography, 96px thin display type, one white-stroked black pill) and a warm-cream
12
+ transactional track (pricing, signup, dashboards) in pastel greens with pill buttons and Inter body. An
13
+ operator surface wears the **transactional** track: the cinematic black canvas, the photography, and the
14
+ hero-scale thin display type stay behind; the cream/white layering, pure-black ink, the single
15
+ mint-green accent, the soft paper-halo shadow, and the pill button character carry across — a
16
+ comfortable, editorial, high-contrast translation, not a marketing transcription.
17
+
18
+ ## 1 Visual Theme
19
+
20
+ Light by default; dark is opt-in. The anchor surface is a faintly warm cream `background` carrying
21
+ crisp white `card` panels — that cream-page / white-card layering is the brand's editorial warmth. Ink
22
+ is pure black; a single chromatic accent, mint-green `accent`, marks growth and selection. Depth is not
23
+ flat — white cards lift on a soft layered "paper halo" (`shadow`), the light track's signature.
24
+ Comfortable `standard` density; the pill button shape carries in from the brand.
25
+
26
+ ## 2 Color Roles
27
+
28
+ Light values first (exact values in the manifest). One chromatic accent — the mint-green family;
29
+ black is ink/primary, a neutral, not a second color.
30
+
31
+ | Role | Value | Allowed where |
32
+ | --- | --- | --- |
33
+ | `background` | warm cream `#fbfbf5` | the page canvas — editorial warmth under white cards |
34
+ | `card` / `popover` | white `#ffffff` | cards, panels, overlays — the crisp surface on the cream page |
35
+ | `foreground` | pure black `#000000` | all primary ink on light (the brand's `ink`) |
36
+ | `muted` / `secondary` | light zinc `#f4f4f5` | hover rows, subtle fills, secondary chips |
37
+ | `muted-foreground` | mid zinc `#71717a` | labels, captions, secondary text |
38
+ | `border` / `input` | hairline zinc `#e4e4e7` | every separator, grid line, and field edge |
39
+ | `primary` | black `#000000` | the one primary action (a black pill); active nav |
40
+ | `primary-foreground` | white `#ffffff` | labels on the black pill |
41
+ | `accent` | aloe mint `#c1fbd4` | selected/hovered rows, growth highlight, featured tint — a fill, never behind type |
42
+ | `accent-foreground` | black `#000000` | ink on the mint fill |
43
+ | `ring` | black `#000000` | the focus outline — matches `primary`, unmistakable |
44
+ | `destructive` | commerce red `#d82c0d` | destructive actions and error state only |
45
+ | `success` | commerce green `#008060` | positive status text and badges |
46
+ | `warning` | amber `#b45309` | caution status only |
47
+
48
+ The pale aloe/pistachio greens are surface fills, never text colors — a status "success" reads on the
49
+ saturated `#008060`. The cool zinc text ladder against the warm cream canvas is the temperature signature.
50
+
51
+ ## 3 Typography
52
+
53
+ The brand's display face, **Neue Haas Grotesk Display** at a thin cut (weight 330), is a marketing
54
+ signature and its hero scale stays behind. The operator workhorse is **Inter** (`font-sans`): body, UI,
55
+ tables, labels, and headings all ride it, so one sans serves dense chrome. `font-mono` is the system
56
+ monospace for IDs, codes, timestamps, and log lines. Numeric columns render `tabular-nums`.
57
+
58
+ | Step | Role | Size · line | Weight · tracking |
59
+ | --- | --- | --- | --- |
60
+ | h1 | page title | 24px / 1.2 | `font-weight-strong` · `heading-tracking` |
61
+ | h2 | section head | 20px / 1.3 | `font-weight-strong` · `heading-tracking` |
62
+ | h3 | card / group head | 16px / 1.35 | `font-weight-strong` · `heading-tracking` |
63
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` |
64
+ | small | labels, meta, dense rows | 13px / 1.4 | `font-weight-normal` |
65
+ | caption | uppercase eyebrow | 12px / 1.2 | `font-weight-strong`, `+0.06em`, uppercase |
66
+
67
+ Headings track slightly **open** (`heading-tracking` positive) — the editorial voice runs opposite to
68
+ the tight tracking most operator UIs use; keep it. The OpenType `ss03` stylistic set is the brand's
69
+ character-level signature: apply `font-feature-settings: "ss03"` on the root so it tracks across every
70
+ role. Bump weight for emphasis; never change size.
71
+
72
+ ## 4 Component Stylings
73
+
74
+ - **Button** — `primary`: filled black `primary` on `primary-foreground`, **pill** (the brand
75
+ signature, not `radius`). Secondary: white `card` fill, 1px `border`, `foreground` ink — outlined,
76
+ also pill. Featured/positive: `accent` mint fill, `foreground`, pill.
77
+ - **Input** — `card` fill, 1px `border` (`border-weight`), `radius`; focus draws the black `ring` at 2px.
78
+ - **Card** — white `card` on the cream `background`, 1px `border`, `radius` (larger step for content
79
+ cards); lifts on the soft layered `shadow` — the paper halo, not a hard drop.
80
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
81
+ numeric columns; selection tints `accent`.
82
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`),
83
+ beside the work, not over it.
84
+ - **Badge** — hairline `border`, `muted`/status fill, uppercase caption; status badges take `success` /
85
+ `warning` / `destructive`, never `primary`; the mint `accent` marks featured, not status.
86
+
87
+ ## 5 Layout
88
+
89
+ Base spacing unit 4px; the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 · 48 · 64` (the brand's own
90
+ 8px-family scale, extended down for fine operator work). Shell dimensions map one-to-one to the layout
91
+ primitives: sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`, side
92
+ panel `side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms `form-max-width`,
93
+ tables full-width. Card and section insets run generous (the brand pads comfortably) but the global
94
+ tier stays `standard` — governed by `density-tier`, stepped per archetype, never by absolute overrides.
95
+
96
+ ## 6 Depth
97
+
98
+ Not flat — the light track carries hierarchy partly with a soft shadow:
99
+
100
+ - **0 — canvas** cream `background`, no shadow.
101
+ - **1 — card / panel** white `card` on a 1px `border`, lifted by the soft layered "paper halo"
102
+ (`shadow` at `sm`/`md`) — many tiny low-opacity shadows, never one hard drop.
103
+ - **2 — overlay** `popover` / side panel / modal — the `md`/`lg` shadow, the strongest lift.
104
+
105
+ Focus is a 2px black `ring` outline (never a glow), on every interactive element. Three z-levels:
106
+ content, sticky chrome, overlay. Rank is border, position, and the soft halo — never a harsh shadow.
107
+
108
+ ## 7 Do's & Don'ts
109
+
110
+ - **Do** reserve black `primary` for the single most important action; buttons take the **pill** — the
111
+ one place the brand overrides the operator no-pill default; honor it.
112
+ - **Do** keep the single chromatic accent the mint-green family — a fill for selection, growth, and the
113
+ featured tier, never behind type.
114
+ - **Do** lift white cards on the cream canvas with the soft layered paper halo, and apply
115
+ `font-feature-settings: "ss03"` at the root with `tabular-nums` on every numeric column.
116
+ - **Don't** promote a second chromatic accent, or use the pale aloe/pistachio as a status color —
117
+ status uses `success` / `warning` / `destructive`.
118
+ - **Don't** reach for a rounded-rectangle button — the pill is the brand's non-negotiable button shape.
119
+ - **Don't** bring the cinematic black canvas, full-bleed photography, or 96px thin display type into
120
+ operator chrome — they stay on the marketing track.
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
+ - Layer white `card` panels on the cream `background`; lift them with the soft layered paper halo
138
+ (`shadow`), not a hard drop; overlays one step up.
139
+ - `primary` is black ink; the primary action is a black pill, and buttons keep the pill everywhere —
140
+ this brand overrides the no-pill default.
141
+ - One chromatic accent: mint-green `accent`, a fill for selection, growth, and featured — never behind
142
+ type, never as status.
143
+ - Apply `font-feature-settings: "ss03"` at the root and keep headings tracked slightly open; body and
144
+ tables ride Inter, the thin display face stays behind.
145
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`; the black `ring`
146
+ focus outline is always visible and every workflow completes from the keyboard.
147
+ - Leave the cinematic black track and its photography on marketing surfaces — never the operator UI.
148
+
149
+ ```yaml design-primitives
150
+ radius: 8px # derived: brand inputs 8px / cards 12px; 8px is the default component radius (buttons pill via the scale)
151
+ shadow-intensity: 0.6 # derived: the light track's signature soft "paper halo" carries real card hierarchy, not a flat brand
152
+ border-weight: 1px
153
+ density-gap: 1
154
+ density-inset: 1
155
+ font-sans: Inter, system-ui, sans-serif # derived: brand splits Neue Haas Grotesk Display (thin display, stays behind) + Inter (UI/body); the single sans slot takes Inter, the operator workhorse
156
+ font-mono: ui-monospace, SFMono-Regular, Menlo, monospace # brand code face is the system monospace
157
+ font-weight-normal: 400 # derived: brand variable body 420 is display-tuned; dense operator body reads cleaner at 400
158
+ font-weight-strong: 600 # derived: brand strong 550 collapses to the standard operator 600
159
+ heading-tracking: 0.01em # derived: Shopify headings track open (~+0.015em), inverted from the typical tight operator heading; a restrained +0.01em carries that editorial voice
160
+ duration-unit: 50ms # derived: corpus documents no motion; functional operator base
161
+ duration-fast: 120ms # derived: corpus silent on motion; functional
162
+ duration-normal: 200ms # derived: corpus silent on motion; functional
163
+ duration-slow: 320ms # derived: corpus silent on motion; functional
164
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent on motion; standard functional easing
165
+ contrast-boost: 1 # black ink on cream is already high-contrast; no boost needed
166
+ icon-stroke: 1.75 # derived: corpus silent on icons; refined operator stroke
167
+ icon-size-base: 16px # derived: corpus silent on icons; operator norm
168
+ sidebar-width-expanded: 240px # derived: marketing corpus has no admin shell; comfortable operator sidebar
169
+ sidebar-width-collapsed: 64px # derived: comfortable icon rail matching the brand's roomier density
170
+ topbar-height: 56px # derived: comfortable operator topbar
171
+ side-panel-width: 440px # derived: comfortable detail panel
172
+ side-panel-width-rich: 640px # derived: content-heavy panel
173
+ modal-width-max: 560px # derived: matches the brand's generous card width
174
+ form-max-width: 720px # derived: echoes the brand's ~720px reading column
175
+ table-row-height: 44px # derived: the brand's 44px touch minimum reads comfortable, not dense
176
+ verbosity: default
177
+ feedback: subtle
178
+ density-tier: standard # derived: consumer-commerce brand reads comfortable, not terminal-dense; archetypes step denser
179
+ product-traits: [commerce, admin, dashboard, crm]
180
+ ```
181
+
182
+ ```yaml lever-manifest
183
+ version: 1
184
+ fonts: { sans: "Inter, system-ui, sans-serif", mono: "ui-monospace, SFMono-Regular, Menlo, monospace" }
185
+ color-tokens:
186
+ light:
187
+ background: "#fbfbf5"
188
+ foreground: "#000000"
189
+ card: "#ffffff"
190
+ card-foreground: "#000000"
191
+ muted: "#f4f4f5"
192
+ muted-foreground: "#71717a"
193
+ border: "#e4e4e7"
194
+ input: "#e4e4e7"
195
+ ring: "#000000"
196
+ primary: "#000000"
197
+ primary-foreground: "#ffffff"
198
+ accent: "#c1fbd4"
199
+ accent-foreground: "#000000"
200
+ destructive: "#d82c0d" # derived: corpus documents no error hue; a warm commerce red
201
+ destructive-foreground: "#ffffff"
202
+ success: "#008060" # derived: pale aloe/pistachio are fills, not status; a saturated commerce green carries success with contrast
203
+ warning: "#b45309" # derived: corpus silent on caution; readable amber
204
+ popover: "#ffffff"
205
+ popover-foreground: "#000000"
206
+ secondary: "#f4f4f5"
207
+ secondary-foreground: "#000000"
208
+ chart-1: "#008060" # derived: corpus has no chart palette; commerce-green-forward categorical ramp
209
+ chart-2: "#5c6ac4" # derived: chart ramp
210
+ chart-3: "#47c1bf" # derived: chart ramp
211
+ chart-4: "#b45309" # derived: chart ramp (matches warning)
212
+ chart-5: "#d82c0d" # derived: chart ramp (matches destructive)
213
+ sidebar: "#f7f7f2" # derived: light rail, a hair off the cream canvas; the black track stays on marketing
214
+ sidebar-foreground: "#000000"
215
+ sidebar-primary: "#000000"
216
+ sidebar-primary-foreground: "#ffffff"
217
+ sidebar-accent: "#d4f9e0" # pistachio — the softer green for nav hover
218
+ sidebar-accent-foreground: "#000000"
219
+ sidebar-border: "#e4e4e7"
220
+ sidebar-ring: "#000000"
221
+ spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
222
+ radius-scale: [0, 4, 8, 12, 20, 9999]
223
+ shadow-levels: [none, sm, md, lg]
224
+ motion: { durations: [120, 200, 320], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
225
+ icons: { family: lucide, stroke: 1.75 }
226
+ accent-count: 1
227
+ ```