@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,234 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: IBM
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # IBM — Carbon operator design
9
+
10
+ The operator reading of IBM's Carbon Design System. Carbon was built for enterprise product
11
+ surfaces, so it dresses an internal tool almost natively — but the source corpus is IBM's *marketing*
12
+ canvas, and marketing graces are stripped here. What carries: the flat 0px square geometry, IBM Blue
13
+ as the single accent, IBM Plex Sans, the 4px grid, and depth carried by hairlines and surface change.
14
+ What stays behind: the 76/60/42px weight-300 hero display type, the full-bleed blue CTA banner, the
15
+ dark inverted footer, and the soft-blue hero gradient. Both machine blocks are fully valued; every
16
+ judgment past the corpus is annotated `# derived:` where it lands.
17
+
18
+ ## 1 Visual Theme
19
+
20
+ Light by default; dark is opt-in — in the brand only the footer and global header invert, and that
21
+ inversion is a marketing move that stays behind. Flat and square: every button, card, input, and
22
+ container sits at 0px corners, and hierarchy is carried by a 1px hairline `border` and surface change,
23
+ never by shadow. A single accent — IBM Blue `primary` #0f62fe — is reserved for the one action that
24
+ matters, for links, and for the focus rule. The neutral ramp is a true charcoal-on-white: ink #161616
25
+ on a white canvas, with #f4f4f4 and #e0e0e0 grays doing the structural work. Dense by design — Carbon
26
+ expects a lot on the page, not a lot of air. The anchor surface is a white content canvas beside a
27
+ faint gray side nav.
28
+
29
+ ## 2 Color Roles
30
+
31
+ Light values first; hex is the brand's native format. One accent — `primary` is the only chromatic hue
32
+ that carries meaning; status hues speak only status.
33
+
34
+ | Role | Value | Allowed where |
35
+ | --- | --- | --- |
36
+ | `background` / `card` / `popover` | white `#ffffff` | page, tiles, and overlays — the dominant surface |
37
+ | `foreground` | charcoal `#161616` | all headings and primary ink |
38
+ | `muted` / `secondary` | light gray `#f4f4f4` (Carbon surface-1) | field fills, alternate-row bands, hovered tiles |
39
+ | `muted-foreground` | mid gray `#525252` | meta, sub-headlines, secondary text |
40
+ | `border` / `input` | hairline `#e0e0e0` (Carbon gray-20) | every card edge, grid line, field rule, divider |
41
+ | `primary` | IBM Blue `#0f62fe` | the one primary action; links; active nav; focus rule |
42
+ | `accent` | blue-10 tint `#edf5ff` | selected/hovered rows and nav, on-accent surfaces only |
43
+ | `ring` | `primary` `#0f62fe` | the 2px focus outline — keyboard-first, unmistakable |
44
+ | `destructive` | red-60 `#da1e28` | destructive actions and error state only |
45
+ | `success` / `warning` | green-50 `#24a148` / yellow-30 `#f1c21b` | status signalling only, never chrome |
46
+
47
+ ## 3 Typography
48
+
49
+ One family carries everything: **IBM Plex Sans** for UI, body, and headings — hierarchy comes from size
50
+ and weight, never a second face. Operator headings run `font-weight-strong` (600); the marketing
51
+ weight-300 hero display treatment stays behind. **IBM Plex Mono** returns for IDs, codes, timestamps,
52
+ and log lines — Carbon keeps mono to product surfaces, and an operator UI is a product surface. Body
53
+ carries Carbon's signature `+0.16px` positive letter-spacing (part of the voice — keep it). Numeric
54
+ columns render `tabular-nums` so figures align down a column.
55
+
56
+ | Step | Role | Size · line | Weight · tracking |
57
+ | --- | --- | --- | --- |
58
+ | h1 | page title | 32px / 1.25 | `font-weight-strong` · `heading-tracking` |
59
+ | h2 | section head | 24px / 1.33 | `font-weight-strong` · `heading-tracking` |
60
+ | h3 | card / group head | 20px / 1.40 | `font-weight-strong` · `heading-tracking` |
61
+ | body | UI + prose | 16px / 1.50 | `font-weight-normal` · +0.16px |
62
+ | small | labels, meta, dense table | 14px / 1.29 | `font-weight-normal` · +0.16px |
63
+ | caption | eyebrow, utility meta | 12px / 1.33 | `font-weight-normal` · +0.32px, sentence case |
64
+
65
+ Eyebrows stay sentence case — Carbon resists the all-caps tracked eyebrow. Bump weight for emphasis;
66
+ never change size.
67
+
68
+ ## 4 Component Stylings
69
+
70
+ Every recurring operator component composes from the primitives — no literal values.
71
+
72
+ - **Button** — `primary`: filled `primary` on `primary-foreground`, `radius` (0px, square), 12px·16px
73
+ padding, never pill. Secondary follows Carbon's charcoal treatment: `foreground` fill,
74
+ `primary-foreground` text. Tertiary/ghost: transparent with a 1px `primary` border and `primary`
75
+ text, fill only on hover.
76
+ - **Input** — `muted` fill, a 1px bottom `border`; focus swaps the bottom rule for Carbon's signature
77
+ 2px `ring` underline and draws the full focus outline, square, no radius.
78
+ - **Card** — `card` surface on a 1px `border`, 0px corners, no shadow; a "recommended" tile lifts by
79
+ moving to the `muted` ground, not by elevation.
80
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; row selection
81
+ tints `accent`; `tabular-nums` on numeric columns; `font-mono` on IDs and codes.
82
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`,
83
+ `side-panel-width-rich` for content-heavy), beside the work, not over it.
84
+ - **Badge** — square (0px) tag, hairline `border`, status fill; status badges take `success` /
85
+ `warning` / `destructive`, never `primary`.
86
+
87
+ ## 5 Layout
88
+
89
+ Base spacing unit 4px (Carbon's 4-pixel grid); the on-scale ramp is `2 · 4 · 8 · 12 · 16 · 24 · 32 ·
90
+ 48 · 64 · 96`. Shell dimensions map one-to-one to the layout primitives: side nav
91
+ `sidebar-width-expanded` (256px) / `sidebar-width-collapsed` (48px icon rail), topbar `topbar-height`
92
+ (48px), side panel `side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms
93
+ `form-max-width`, tables full-width. Density is governed globally by `density-tier` (`dense`) and
94
+ stepped per archetype by the surface catalog. Sections separate by thin gray rows, not by large
95
+ vertical gaps — Carbon spends alignment, not air.
96
+
97
+ ## 6 Depth
98
+
99
+ Flat. Hierarchy comes from the surface ladder and hairlines, not shadow:
100
+
101
+ - **0 — canvas** `background` white, no border.
102
+ - **1 — tile / card** `card` on a 1px `border`; no shadow — the default enterprise tile.
103
+ - **2 — surface band** the `muted` ground for alternate rows and hovered tiles; rank is surface
104
+ change, not elevation.
105
+ - **3 — overlay** `popover` / menu / side panel / modal — the one place `shadow-intensity` earns a
106
+ soft `sm`/`md` shadow.
107
+
108
+ Focus is Carbon's 2px `primary` outline (with a hairline-strong underline on fields), visible on every
109
+ interactive element. Three z-levels: content, sticky chrome, overlay.
110
+
111
+ ## 7 Do's & Don'ts
112
+
113
+ - **Do** keep every button, card, input, and container at 0px square — the flat geometry *is* the
114
+ brand.
115
+ - **Do** reserve `primary` IBM Blue for the single primary action, links, and the focus rule; treat it
116
+ as scarce.
117
+ - **Do** carry hierarchy with surface change (`background` → `muted`) and 1px hairlines — skip drop
118
+ shadows.
119
+ - **Do** apply the +0.16px tracking to body sizes and `tabular-nums` / `font-mono` to figures and IDs.
120
+ - **Don't** round corners — even 4px breaks the Carbon look.
121
+ - **Don't** bold operator headings past `font-weight-strong`, or reach for the marketing weight-300
122
+ hero display.
123
+ - **Don't** promote a second chromatic accent — status uses `success` / `warning` / `destructive`
124
+ only.
125
+ - **Don't** open detail or edit in a modal when the side panel fits, and don't signal rank with shadow.
126
+
127
+ ## 8 Responsive
128
+
129
+ The operator sweep is 375 / 768 / 1024 / 1440.
130
+
131
+ | Breakpoint | What changes |
132
+ | --- | --- |
133
+ | 375 | side nav → hamburger overlay; utility meta hides; two-pane list+detail stacks; side panel → full sheet; density holds |
134
+ | 768 | side nav collapses to the 48px icon rail; tables scroll their overflow; card grid → 2-up |
135
+ | 1024 | side nav expands to 256px; two-pane queue+detail holds side by side; grid up to 4-up |
136
+ | 1440 | content caps at `form-max-width` for forms; tables and dashboards use the full width |
137
+
138
+ ## 9 Agent Prompt Guide
139
+
140
+ This entry dresses an internal operator surface — a queue, a data console, an admin panel — in Carbon.
141
+ Carry over: flat 0px square geometry, IBM Blue as the single accent, IBM Plex Sans plus Plex Mono, the
142
+ 4px grid, hairline-and-surface-change depth, the 2px blue focus rule, and the +0.16px body tracking.
143
+ Leave behind: the 76/60/42px weight-300 hero display type, the full-bleed blue CTA banner, the dark
144
+ inverted footer, and the soft-blue hero gradient — all marketing.
145
+
146
+ - Lead every list surface with its data table; keep it square and dense.
147
+ - Accent only the primary action. IBM Blue is scarce — links, primary CTA, focus. Anything more is
148
+ drift.
149
+ - Keep 0px corners everywhere; a rounded corner reads as a different brand.
150
+ - IDs, codes, and timestamps in Plex Mono; every numeric column `tabular-nums`; body keeps +0.16px
151
+ tracking and sentence-case eyebrows.
152
+ - Depth is hairline and surface change; reach past a hairline only for a real overlay.
153
+ - Detail and edit go in the side panel; a modal is a confirmation, not a workspace.
154
+ - Keep the whole app light; do not invert to charcoal outside a deliberate dark opt-in.
155
+
156
+ ```yaml design-primitives
157
+ radius: 0px # derived: Carbon commits to 0px square corners on every surface; the scale still offers 2/4px for rare exceptions
158
+ shadow-intensity: 0.3 # derived: Carbon resists shadow on flat tiles; only overlays (menu/modal) take a soft Carbon elevation
159
+ border-weight: 1px
160
+ density-gap: 0.85 # derived: "content is dense by design" — dense tier tightens the spacing scale
161
+ density-inset: 0.85 # derived: matches the dense tier for coherent component insets
162
+ font-sans: IBM Plex Sans, Helvetica Neue, Arial, sans-serif
163
+ font-mono: IBM Plex Mono, ui-monospace, SFMono-Regular, monospace # derived: Carbon keeps mono to product surfaces; the operator UI is a product surface, so Plex Mono returns for IDs/codes/logs
164
+ font-weight-normal: 400
165
+ font-weight-strong: 600 # rationale: Carbon body-emphasis weight; operator headings use 600, not the marketing weight-300 hero display
166
+ heading-tracking: 0em # rationale: Carbon operator-scale headings track 0; the negative display tracking (-0.5px at 76px) stays with the marketing hero
167
+ duration-unit: 50ms # derived: corpus is silent on motion; a functional operator base
168
+ duration-fast: 70ms # derived: Carbon fast-01
169
+ duration-normal: 150ms # derived: Carbon moderate-01
170
+ duration-slow: 240ms # derived: Carbon moderate-02
171
+ ease-default: cubic-bezier(0.2,0,0.38,0.9) # derived: Carbon "productive standard" easing (corpus silent; brand-authentic)
172
+ contrast-boost: 1 # derived: Carbon's 1px #e0e0e0 hairlines already read crisply; no boost needed
173
+ icon-stroke: 2 # derived: Carbon @carbon/icons run a 2px square stroke — heavier and squarer than the default 1.75
174
+ icon-size-base: 16px # derived: Carbon's smallest icon size on the 16px grid
175
+ sidebar-width-expanded: 256px # derived: Carbon UI Shell SideNav width
176
+ sidebar-width-collapsed: 48px # derived: Carbon SideNav icon rail / header height (corpus top-nav is 48px)
177
+ topbar-height: 48px # rationale: corpus top-nav height is 48px exactly
178
+ side-panel-width: 400px # derived: corpus documents no side panel; standard operator detail width
179
+ side-panel-width-rich: 640px # derived: content-heavy detail; matches Carbon's wide modal
180
+ modal-width-max: 640px # derived: Carbon medium modal width
181
+ form-max-width: 640px # derived: single-column form cap
182
+ table-row-height: 40px # derived: Carbon DataTable "short" row; dense archetypes step to 32px via the surface catalog
183
+ verbosity: default
184
+ feedback: subtle
185
+ density-tier: dense # rationale: Carbon reads dense — "content is dense by design, not a lot of air"
186
+ product-traits: [enterprise, dashboard, admin, data-grid, dev-tools]
187
+ ```
188
+
189
+ ```yaml lever-manifest
190
+ version: 1
191
+ fonts: { sans: "IBM Plex Sans, Helvetica Neue, Arial, sans-serif", mono: "IBM Plex Mono, ui-monospace, SFMono-Regular, monospace" }
192
+ color-tokens:
193
+ light:
194
+ background: "#ffffff"
195
+ foreground: "#161616"
196
+ card: "#ffffff"
197
+ card-foreground: "#161616"
198
+ muted: "#f4f4f4"
199
+ muted-foreground: "#525252"
200
+ border: "#e0e0e0"
201
+ input: "#e0e0e0"
202
+ ring: "#0f62fe"
203
+ primary: "#0f62fe"
204
+ primary-foreground: "#ffffff"
205
+ accent: "#edf5ff" # derived: Carbon blue-10 row-selection tint (corpus gives no selection color)
206
+ accent-foreground: "#0f62fe"
207
+ destructive: "#da1e28"
208
+ destructive-foreground: "#ffffff"
209
+ success: "#24a148"
210
+ warning: "#f1c21b"
211
+ popover: "#ffffff"
212
+ popover-foreground: "#161616"
213
+ secondary: "#f4f4f4"
214
+ secondary-foreground: "#161616"
215
+ chart-1: "#6929c4" # derived: Carbon @carbon/charts categorical 1 (purple-70) — corpus silent on charts
216
+ chart-2: "#1192e8" # derived: Carbon categorical 2 (cyan-50)
217
+ chart-3: "#005d5d" # derived: Carbon categorical 3 (teal-70)
218
+ chart-4: "#9f1853" # derived: Carbon categorical 4 (magenta-70)
219
+ chart-5: "#fa4d56" # derived: Carbon categorical 5 (red-50)
220
+ sidebar: "#f4f4f4" # derived: Carbon surface-1 side-nav ground, distinct from the white canvas
221
+ sidebar-foreground: "#161616"
222
+ sidebar-primary: "#0f62fe"
223
+ sidebar-primary-foreground: "#ffffff"
224
+ sidebar-accent: "#edf5ff" # derived: blue-10 active/hovered nav tint
225
+ sidebar-accent-foreground: "#0f62fe"
226
+ sidebar-border: "#e0e0e0"
227
+ sidebar-ring: "#0f62fe"
228
+ spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64, 96]
229
+ radius-scale: [0, 2, 4, 6, 8, 9999]
230
+ shadow-levels: [none, sm, md]
231
+ motion: { durations: [70, 150, 240], easings: ["cubic-bezier(0.2,0,0.38,0.9)"] }
232
+ icons: { family: lucide, stroke: 2 }
233
+ accent-count: 1
234
+ ```
@@ -0,0 +1,240 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Intercom
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Intercom — the operator reading
9
+
10
+ The calm, editorial customer-service brand rendered for internal tools. Intercom's public surfaces are
11
+ publication-quiet and product-screenshot-led; an operator surface wearing this brand keeps the warm
12
+ cream canvas, the white-on-cream lift, the charcoal ink, the single reserved Fin Orange, the modest
13
+ radii, and the geometric-sans voice that never bolds past 500. The 72px hero display, the
14
+ product-mockup rhythm, the pure-black quote strip, the pill tab toggles, and the 96px section breathing
15
+ stay behind. What carries is the feel: a warm cream ground the category never uses, panels that lift by
16
+ turning white rather than by casting shadow, and one orange spark held in reserve. Both machine blocks
17
+ are fully valued; every judgment past the corpus is annotated `# derived:`.
18
+
19
+ ## 1 Visual Theme
20
+
21
+ Light by default; dark is opt-in (Intercom ships no dark theme on the public web). The anchor surface
22
+ is not white — it is a soft warm cream `background` (`#f5f1ec`), the brand's defining signal. Panels
23
+ and cards lift **onto white** (`card`, `#ffffff`): the depth strategy is a surface change, not a shadow.
24
+ Flat throughout — hierarchy comes from the cream-to-white ladder, warm hairline `border` (`#d3cec6`),
25
+ and type weight, never heavy elevation. A single chromatic voltage, Fin Orange (`primary`, `#ff5600`),
26
+ is held in reserve for the one action that matters; everything neutral is charcoal ink (`foreground`,
27
+ `#111111`) on cream. Corners are modest — `radius` (8px) on buttons and inputs, a larger step on cards
28
+ — never pill, never square. Density is `standard`: calm and editorial, not cramped.
29
+
30
+ ## 2 Color Roles
31
+
32
+ Light values (the manifest carries the exact hex — Intercom's native format). One accent: Fin Orange
33
+ is the only chromatic hue that carries meaning; the report palette lives in charts, status speaks only
34
+ status.
35
+
36
+ | Role | Value | Allowed where |
37
+ | --- | --- | --- |
38
+ | `background` | cream `#f5f1ec` | the page canvas — warm, never pure white; the brand's defining surface |
39
+ | `card` / `popover` | white `#ffffff` | cards, panels, overlays — they lift off the cream by turning white |
40
+ | `foreground` | charcoal `#111111` | all primary ink, headlines, and neutral/secondary button labels |
41
+ | `muted` | warm cream `#ebe7e1` | hover rows, subtle fills, quiet panel bands (surface-2) |
42
+ | `muted-foreground` | ink-muted `#626260` | labels, captions, secondary text, inactive tabs |
43
+ | `secondary` | warm cream `#ebe7e1` | secondary button fill — ink label on cream, 1px `border` |
44
+ | `border` / `input` | warm hairline `#d3cec6` | every separator, grid line, and field edge — a soft warm gray, not an ink line |
45
+ | `primary` | Fin Orange `#ff5600` | the single primary action per surface; active nav; the one reserved voltage |
46
+ | `accent` | deep cream `#e6e0d6` | selected/hovered rows and nav — Intercom selects by a warm-neutral shift, not by colour |
47
+ | `ring` | Fin Orange `#ff5600` | the focus outline — unmistakable, because keyboard-first |
48
+ | `destructive` | error red `#c41c1c` | destructive actions and error state only |
49
+ | `success` / `warning` | green `#0bdf50` / amber `#d97706` | status signalling only, never chrome |
50
+
51
+ Charcoal is Intercom's marketing primary because a marketing page carries many CTAs; the operator
52
+ reading has one primary action per surface, so it earns the reserved orange, and charcoal stays the
53
+ neutral ink for secondary actions. Brand Blue (`#0007cb`) and the pure-black quote strip are marketing
54
+ graces — they carry no operator role (see §7).
55
+
56
+ ## 3 Typography
57
+
58
+ One sans, one mono. `font-sans` is Saans — Intercom's proprietary geometric sans (Inter at weight 500
59
+ the closest open substitute); the whole ramp rides it, display voice carried by size and modest weight,
60
+ not a second family. The signature is restraint: `font-weight-strong` stops at **500** — Saans at 500
61
+ reads confident without bold, and the brand never reaches past it. Negative tracking is the other
62
+ signature, scaling with size (the corpus runs -0.5px at 28px). `font-mono` is SaansMono (JetBrains Mono
63
+ the approximation) for IDs, codes, timestamps, and log lines; numeric columns render `tabular-nums`.
64
+
65
+ | Step | Role | Size · line | Weight · tracking |
66
+ | --- | --- | --- | --- |
67
+ | h1 | page title | 24px / 1.25 | `font-weight-strong` · `heading-tracking` |
68
+ | h2 | section head | 20px / 1.3 | `font-weight-strong` · -0.015em |
69
+ | h3 | card / group head | 16px / 1.35 | `font-weight-strong` · -0.01em |
70
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` |
71
+ | small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
72
+ | eyebrow | section eyebrow | 13px / 1.3 | `font-weight-strong`, sentence case, no tracking |
73
+ | code | IDs, logs, amounts | 13px / 1.5 | `font-weight-normal` |
74
+
75
+ Body line-height relaxes to 1.5 — an editorial breath the category tightens away. Eyebrows are
76
+ **sentence case**, never the all-caps tracked label the operator default reaches for. Bump weight to
77
+ `font-weight-strong` (500) for emphasis; never bold. The 72px hero display stays behind.
78
+
79
+ ## 4 Component Stylings
80
+
81
+ Every recurring operator component composes from the primitives — no literal values.
82
+
83
+ - **Button** — `primary`: filled Fin Orange on `primary-foreground` (white), `radius` (8px), no pill.
84
+ Secondary: `secondary` warm-cream fill, 1px `border`, `foreground` ink label. Ghost: transparent,
85
+ `accent` on hover.
86
+ - **Input** — `card` (white) fill, 1px `border` (`border-weight`), `radius`; focus draws the Fin Orange `ring` at 2px, no glow.
87
+ - **Card** — `card` white surface lifting off the cream canvas, 1px `border`, a larger corner step from
88
+ the radius scale; shadow only when a true overlay floats (`shadow-intensity`); inset by `density-inset`.
89
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
90
+ numeric columns; row selection tints `accent` (warm-neutral, not orange).
91
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`
92
+ for content-heavy), beside the work, not over it.
93
+ - **Badge** — pill radius, hairline `border`, `muted`/status fill, sentence-case label; status badges
94
+ take `success` / `warning` / `destructive`, never `primary`.
95
+
96
+ ## 5 Layout
97
+
98
+ Base spacing unit 8px; the on-scale ramp is `4 · 8 · 12 · 16 · 24 · 32 · 48 · 64` (the marketing 96px
99
+ section step stays behind). Shell dimensions map one-to-one to the layout primitives: sidebar
100
+ `sidebar-width-expanded` (248px) / `sidebar-width-collapsed` (56px), topbar `topbar-height` (56px, the
101
+ corpus nav height), side panel `side-panel-width` (420px) / `side-panel-width-rich` (640px), modal cap
102
+ `modal-width-max`, forms `form-max-width`, tables full-width; card interior padding a calm 24px. Density
103
+ is governed globally by `density-tier` and stepped per archetype by the surface catalog.
104
+
105
+ ## 6 Depth
106
+
107
+ Flat, surface-change-first. Hierarchy comes from the cream-to-white ladder and warm hairlines, not
108
+ shadow — Intercom resists drop shadows:
109
+
110
+ - **0 — canvas** `background` cream (`#f5f1ec`), no border.
111
+ - **1 — panel / card** `card` white lifting off the cream on a 1px `border`; the lift is the elevation.
112
+ - **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a single
113
+ faint `sm` shadow, over a scrim for modals. Rank is the white-on-cream shift, the border, and position.
114
+
115
+ Focus is a 2px Fin Orange `ring` outline (never a glow), visible on every interactive element. Three
116
+ z-levels: content, sticky chrome, overlay.
117
+
118
+ ## 7 Do's & Don'ts
119
+
120
+ - **Do** anchor on the warm cream canvas — pure white reads as ordinary SaaS; the cream is the brand.
121
+ - **Do** lift panels and cards onto white (`card`) off the cream — the surface change is the depth.
122
+ - **Do** reserve Fin Orange (`primary`) for the single most important action; everything else is
123
+ charcoal ink or status.
124
+ - **Do** keep corners modest (`radius` 8px on buttons/inputs, the larger step on cards), write eyebrows
125
+ in sentence case, apply `tabular-nums` to numeric columns and `font-mono` to IDs/codes/timestamps.
126
+ - **Don't** use pure white as the canvas, or add drop shadows to floating cards.
127
+ - **Don't** spread Fin Orange — no orange section fills, no orange on secondary actions, no second
128
+ chromatic accent. The report palette stays in charts; status uses `success` / `warning` / `destructive`.
129
+ - **Don't** bold — Saans stops at weight 500; emphasise by weight, never a heavier cut or a size jump.
130
+ - **Don't** write all-caps tracked eyebrows, pill the primary CTA, or pull the 72px hero, the black
131
+ quote strip, or the product-mockup rhythm into operator chrome.
132
+
133
+ ## 8 Responsive
134
+
135
+ The operator sweep is 375 / 768 / 1024 / 1440.
136
+
137
+ | Breakpoint | What changes |
138
+ | --- | --- |
139
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
140
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow; card grids drop to 2-up |
141
+ | 1024 | sidebar expands; two-pane queue+detail holds side by side; card grids 3-up |
142
+ | 1440 | forms cap at `form-max-width`; tables and dashboards use the full width; the cream breathing widens |
143
+
144
+ ## 9 Agent Prompt Guide
145
+
146
+ Directives the emitting agent follows verbatim. This brand is calm and editorial; keep it restrained
147
+ for operator work.
148
+
149
+ - Reach for the warm cream canvas first — never pure white; the cream tint is Intercom.
150
+ - Lift panels and cards by turning them white on the cream, not by casting a shadow.
151
+ - Accent only the primary action in Fin Orange (`primary`). If two things want the accent, one is not
152
+ primary. Neutral and secondary actions are charcoal ink on cream.
153
+ - Type stays Saans (Inter fallback) at weight 500 for emphasis and 400 for body — never bold. Eyebrows
154
+ are sentence case, never all-caps tracked; page titles carry negative tracking.
155
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`. Every workflow
156
+ completes from the keyboard; the Fin Orange `ring` focus outline is always visible.
157
+ - Stay flat — the cream-to-white ladder and warm hairlines before shadow; reach for the one faint tier
158
+ only for a real overlay.
159
+ - One accent. The report palette (`chart-*`) is for charts only; Brand Blue and the black quote strip
160
+ are not operator colors. Leave the hero, the product-mockup rhythm, and the 96px breathing behind.
161
+
162
+ ```yaml design-primitives
163
+ radius: 8px # corpus: buttons/inputs at rounded.md (8px); scale offers 12px cards, 16px product tiles
164
+ shadow-intensity: 0.25 # derived: Intercom resists drop shadows — depth is white-on-cream surface change; shadow only faint on true overlays
165
+ border-weight: 1px
166
+ density-gap: 1
167
+ density-inset: 1
168
+ font-sans: Saans, Inter, system-ui, sans-serif # corpus: proprietary Saans; Inter at weight 500 the closest free substitute
169
+ font-mono: SaansMono, "JetBrains Mono", ui-monospace, monospace # corpus: proprietary SaansMono; JetBrains Mono the approximation
170
+ font-weight-normal: 400
171
+ font-weight-strong: 500 # corpus: weight 500 carries display "confident without bold" — the brand never bolds past 500
172
+ heading-tracking: -0.02em # corpus: aggressive negative tracking is an Intercom signature (-0.5px at 28px); ~-0.02em at operator heading scale
173
+ duration-unit: 50ms # derived: corpus (marketing) is silent on motion; operator-standard functional base
174
+ duration-fast: 100ms # derived: corpus silent on motion
175
+ duration-normal: 150ms # derived: corpus silent on motion
176
+ duration-slow: 250ms # derived: corpus silent on motion
177
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent; standard operator ease
178
+ contrast-boost: 1 # derived: Intercom's soft warm hairline (#d3cec6 on cream) is intentionally low-contrast; no boost
179
+ icon-stroke: 1.5 # derived: refined editorial feel; one step under lucide's 2
180
+ icon-size-base: 16px
181
+ sidebar-width-expanded: 248px # derived: Intercom has no operator shell; standard operator rail
182
+ sidebar-width-collapsed: 56px # derived: corpus has no shell; operator standard icon rail
183
+ topbar-height: 56px # corpus: top-nav height 56px
184
+ side-panel-width: 420px # derived: corpus has no shell; standard side panel
185
+ side-panel-width-rich: 640px # derived: corpus has no shell; content-heavy detail width
186
+ modal-width-max: 560px # derived: corpus has no shell; confirmations only
187
+ form-max-width: 640px # derived: corpus has no shell; standard form column
188
+ table-row-height: 44px # derived: Intercom's calm editorial rhythm breathes a touch over the dense 40px
189
+ verbosity: default
190
+ feedback: subtle # rationale: Intercom is a warm, human support brand — gentle present feedback, not austere silence
191
+ density-tier: standard # rationale: editorial-spacious marketing read down to an honest operator tier; warmth carried by the cream palette, not whitespace
192
+ product-traits: [customer-support, helpdesk, inbox, crm, ai-agent]
193
+ ```
194
+
195
+ ```yaml lever-manifest
196
+ version: 1
197
+ fonts: { sans: "Saans, Inter, system-ui, sans-serif", mono: "SaansMono, \"JetBrains Mono\", ui-monospace, monospace" }
198
+ color-tokens:
199
+ light:
200
+ background: "#f5f1ec" # cream canvas — the brand's defining surface, never pure white
201
+ foreground: "#111111" # charcoal ink
202
+ card: "#ffffff" # white — cards lift off the cream canvas
203
+ card-foreground: "#111111"
204
+ muted: "#ebe7e1" # surface-2 warm cream — hover rows, subtle fills
205
+ muted-foreground: "#626260" # ink-muted
206
+ border: "#d3cec6" # warm hairline
207
+ input: "#d3cec6"
208
+ ring: "#ff5600" # derived: focus outline in the brand voltage, unmistakable for keyboard-first
209
+ primary: "#ff5600" # Fin Orange — the single voltage, reserved for the one primary action per surface (operator reading of Intercom's reserve-orange rule)
210
+ primary-foreground: "#ffffff" # corpus: white on button-fin
211
+ accent: "#e6e0d6" # derived: deep-cream selection tint (a step past surface-2) — Intercom selects by warm-neutral shift, reserving orange
212
+ accent-foreground: "#111111"
213
+ destructive: "#c41c1c" # corpus: semantic-error
214
+ destructive-foreground: "#ffffff"
215
+ success: "#0bdf50" # corpus: semantic-success (bright brand green; a status fill/dot, not text)
216
+ warning: "#d97706" # derived: corpus has no warning amber; a warm amber kept distinct from the red-orange Fin primary
217
+ popover: "#ffffff"
218
+ popover-foreground: "#111111"
219
+ secondary: "#ebe7e1" # warm cream secondary button (operator reading of Intercom's white/cream secondary — cream stays visible on white cards)
220
+ secondary-foreground: "#111111"
221
+ chart-1: "#fe4c02" # corpus report palette: report-orange
222
+ chart-2: "#65b5ff" # corpus: report-blue
223
+ chart-3: "#0bdf50" # corpus: report-green
224
+ chart-4: "#ff2067" # corpus: report-pink
225
+ chart-5: "#b3e01c" # corpus: report-lime
226
+ sidebar: "#efeae3" # derived: warm cream rail, a hair off the cream canvas
227
+ sidebar-foreground: "#111111"
228
+ sidebar-primary: "#ff5600" # Fin Orange marks the active nav item
229
+ sidebar-primary-foreground: "#ffffff"
230
+ sidebar-accent: "#e6e0d6" # matches accent — warm-cream hover/active nav
231
+ sidebar-accent-foreground: "#111111"
232
+ sidebar-border: "#d3cec6"
233
+ sidebar-ring: "#ff5600"
234
+ spacing-scale: [4, 8, 12, 16, 24, 32, 48, 64] # corpus base unit 8px; drops the marketing 96px section step
235
+ radius-scale: [0, 4, 6, 8, 12, 16, 24, 9999] # corpus radius scale (xs..xxl, pill)
236
+ shadow-levels: [none, sm] # Intercom resists shadows — one faint tier for true overlays over the flat baseline
237
+ motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] } # derived: corpus silent on motion
238
+ icons: { family: lucide, stroke: 1.5 }
239
+ accent-count: 1
240
+ ```