@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,233 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Miro
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Miro — the operator reading
9
+
10
+ Miro's marketing canvas is a confident, playful frame: a canary-yellow wordmark on stark white,
11
+ black-pill CTAs, and oversized pastel feature cards echoing the live whiteboard's sticky-note palette.
12
+ The 80px Roobert display, the 120px hero rhythm, the real-board mockups, and the exuberant pastels stay
13
+ on the marketing site. An operator surface inherits the *spine*: black ink on white, one chromatic
14
+ accent (Miro brand blue), the friendly geometric Roobert type voice at its elegant medium weight, and a
15
+ roomy rounded radius — a friendly tool made by people who like color, the joy demoted to chart
16
+ encodings. Judgments away from the brand are annotated `# derived:` where the corpus is silent.
17
+
18
+ ## 1 Visual Theme
19
+
20
+ Light by default; dark is not documented and stays opt-in. Flat: hierarchy is carried by hairline
21
+ `border`, type weight, and the black/white contrast — never by heavy shadow, and where a true overlay
22
+ lifts, the shadow is soft and **navy-tinted** (`rgba(5,0,56,…)`), never a hard black drop. The primary
23
+ action fills black — Miro's own primary is the black pill, so `primary` is achromatic and the one
24
+ chromatic accent, Miro brand blue, stays a scarce single-shot. Canary yellow is a brand grace for one
25
+ moment (the wordmark lockup), no operator role. The anchor surface is a white content canvas beside a
26
+ faintly cool `sidebar`. Density is `standard`, leaning roomy — the airy rhythm read into an operator
27
+ tier, stepping denser per archetype.
28
+
29
+ ## 2 Color Roles
30
+
31
+ Light values first (the manifest carries the corpus's native hex). One chromatic accent — brand blue
32
+ carries interactive meaning; the sticky-note pastels appear only as chart series; yellow is a grace.
33
+
34
+ | Role | Value | Allowed where |
35
+ | --- | --- | --- |
36
+ | `background` / `card` / `popover` | white `#ffffff` | page, cards, and overlays — the dominant surface |
37
+ | `foreground` | Miro ink `#1c1c1e` | all primary ink — headlines, body, labels |
38
+ | `muted` / `secondary` | cool surface `#f7f8fa` | hover rows, tile fills, secondary buttons, the sidebar ground |
39
+ | `muted-foreground` | slate `#555a6a` | labels, captions, table meta — the secondary ink role |
40
+ | `border` | hairline `#e0e2e8` | every separator, grid line, and divider |
41
+ | `input` | stronger hairline `#c7cad5` | field edges — Miro deliberately gives inputs a heavier edge than dividers |
42
+ | `primary` | black `#1c1c1e` | the one primary action; active-nav fill; selected tab |
43
+ | `accent` | pale lavender `#f5f3ff` | selected / hovered rows and nav — a tint, never a fill (Miro's featured-tier wash) |
44
+ | `accent-foreground` / `ring` | brand blue `#4262ff` | inline links, the focus outline, active indicators — the single chromatic pop |
45
+ | `destructive` | red `#e5484d` | destructive actions and error state only |
46
+ | `success` / `warning` | green `#00b473` / amber `#fcb900` | status signalling only, never chrome |
47
+
48
+ The pastels — coral `#ff9999`, teal `#0fbcb0`, rose, orange — are marketing surfaces with no operator
49
+ role, reappearing only as `chart-*` encodings (§7). Canary yellow `#ffd02f` is the wordmark grace,
50
+ never a CTA, status hue, or background fill.
51
+
52
+ ## 3 Typography
53
+
54
+ One sans, one mono. `font-sans` is **Roobert PRO** — Miro's geometric, slightly-rounded custom face
55
+ (fallbacks Noto Sans, -apple-system, BlinkMacSystemFont) — carrying UI, body, and headings by weight
56
+ and size, never a second family. Its irreducible trait is the **elegant medium weight**: headings run
57
+ 500, not 700 — the brand has no 700 — so hierarchy comes from size and the geometric face, not
58
+ heaviness. `font-mono` substitutes for the mono the corpus never ships, reserved for IDs, codes,
59
+ timestamps, and log lines; numeric columns render `tabular-nums`.
60
+
61
+ | Step | Role | Size · line | Weight · tracking |
62
+ | --- | --- | --- | --- |
63
+ | h1 | page title | 24px / 1.25 | `font-weight-strong` (500) · `heading-tracking` |
64
+ | h2 | section head | 18px / 1.35 | `font-weight-strong` (500) · -0.01em |
65
+ | h3 | card / group head | 16px / 1.45 | `font-weight-strong` (500) · 0 |
66
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` (400) |
67
+ | small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` (400) |
68
+ | eyebrow / caption | uppercase table divider | 11px / 1.4 | 600, `+0.05em`, uppercase |
69
+
70
+ Emphasis bumps weight one step (400 → 500); the 600 weight is reserved for uppercase eyebrows and badge
71
+ chips. Never change size to emphasise. The 80px hero display, 64px stat-display, and the aggressive
72
+ -2px display tracking stay on the marketing site.
73
+
74
+ ## 4 Component Stylings
75
+
76
+ Every recurring operator component composes from the primitives — no literal values.
77
+
78
+ - **Button** — `primary`: filled black `primary` on white `primary-foreground`, base `radius` (8px) —
79
+ the marketing full-pill relaxes to the functional radius in dense chrome; the pill (9999) stays on
80
+ icon-only buttons, filter chips, and badges. Secondary: `secondary` fill, 1px `border`, `foreground`.
81
+ Ghost: transparent, `accent` on hover.
82
+ - **Input** — `background` fill, 1px `border` at the stronger `input` edge, `radius`; focus draws the
83
+ brand-blue `ring` at 2px, no fill change and no glow.
84
+ - **Card** — `card` surface, 1px `border`, `radius`, inset by `density-inset`; shadow only when it must
85
+ lift (`shadow-intensity`); larger panels may take the 12px radius step.
86
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
87
+ numeric columns; selection tints the pale-lavender `accent` with a brand-blue indicator.
88
+ - **Side panel** — detail and edit open beside the work (`side-panel-width`, `side-panel-width-rich`
89
+ for content-heavy), not over it.
90
+ - **Badge** — pill radius, `muted`/status fill, uppercase caption; status badges take `success` /
91
+ `warning` / `destructive`, never `primary` or brand blue.
92
+
93
+ ## 5 Layout
94
+
95
+ Base spacing unit 4px (8px the primary increment); the on-scale ramp is `4 · 8 · 12 · 16 · 20 · 24 ·
96
+ 32 · 40 · 48 · 64` — Miro's distinctive 20px step is kept. Shell dimensions map one-to-one to the
97
+ layout primitives: sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`
98
+ (64px — Miro's own nav height), side panel `side-panel-width` / `side-panel-width-rich`, modal
99
+ `modal-width-max`, forms `form-max-width`, tables full-width. Density is governed globally by
100
+ `density-tier` and stepped per archetype by the surface catalog. The 96px and 120px marketing rhythms
101
+ stay behind.
102
+
103
+ ## 6 Depth
104
+
105
+ Flat, with strategic soft depth on true overlays only. Hierarchy is the surface ladder and hairlines,
106
+ not shadow:
107
+
108
+ - **0 — canvas** `background`, no border.
109
+ - **1 — panel / card** `card` on a 1px `border`; shadow only when it must lift off the canvas.
110
+ - **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
111
+ shadow, navy-tinted (`rgba(5,0,56,0.08)`), never a hard black drop. Rank is border and position.
112
+
113
+ Focus is a 2px brand-blue `ring` outline (never a glow), visible on every interactive element. Three
114
+ z-levels: content, chrome, overlay.
115
+
116
+ ## 7 Do's & Don'ts
117
+
118
+ - **Do** fill black `primary` for the single most important action; everything else is neutral or status.
119
+ - **Do** keep brand blue scarce — inline links, the focus `ring`, and active indicators only; it is a
120
+ single-shot accent, not a fill or a body-text color.
121
+ - **Do** carry hierarchy with size, the geometric Roobert face, hairlines, and whitespace — never heavy
122
+ weight; there is no 700. Apply `tabular-nums` to numeric columns and `font-mono` to IDs and timestamps.
123
+ - **Don't** reach for the sticky-note pastels as UI chrome; they are marketing surfaces and appear
124
+ operator-side only as `chart-*` series.
125
+ - **Don't** spend canary yellow on a CTA, status hue, or background — it is the wordmark grace, nothing more.
126
+ - **Don't** introduce a second chromatic accent, or signal elevation with heavy or hard-black shadows —
127
+ Miro's shadows are soft and navy-tinted.
128
+
129
+ ## 8 Responsive
130
+
131
+ The operator sweep is 375 / 768 / 1024 / 1440.
132
+
133
+ | Breakpoint | What changes |
134
+ | --- | --- |
135
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
136
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
137
+ | 1024 | sidebar expands; two-pane list+detail holds side by side |
138
+ | 1440 | content caps at `form-max-width` for forms; tables and dashboards use the full width |
139
+
140
+ ## 9 Agent Prompt Guide
141
+
142
+ Directives the emitting agent follows verbatim:
143
+
144
+ - Wear the spine, not the marketing: black ink on white, the friendly rounded radius, hairline depth.
145
+ The 80px hero display, the pastel feature cards, the real-board mockups, and the 120px rhythm stay behind.
146
+ - Primary action fills black. If two things want the black fill, one of them is not primary. Brand blue
147
+ is single-shot — inline links, the focus `ring`, active indicators — never a fill or body text; canary
148
+ yellow is the wordmark grace, never a UI color.
149
+ - Buttons sit at the base `radius`; the full pill (9999) is for icon-only buttons, filter chips, and
150
+ badges. Hierarchy is size and the geometric face, never heavy weight — there is no 700; emphasise 400 → 500.
151
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`.
152
+ - The sticky-note pastels live only in charts (`chart-1..5`); stay flat — hairline and weight before
153
+ shadow, and reach past a hairline only for a real, soft, navy-tinted overlay.
154
+
155
+ ```yaml design-primitives
156
+ radius: 8px # corpus: Miro's functional radius (rounded.md — inputs, search-pill, ghost); the marketing 28-32px pastel cards stay behind
157
+ shadow-intensity: 0.5 # derived: predominantly flat with soft navy-tinted shadows (corpus 0.04-0.12 alpha); shadow lifts only true overlays
158
+ border-weight: 1px
159
+ density-gap: 1
160
+ density-inset: 1
161
+ font-sans: Roobert PRO, Noto Sans, -apple-system, BlinkMacSystemFont, sans-serif # corpus: Roobert PRO plus documented fallbacks
162
+ font-mono: Geist Mono, ui-monospace, SFMono-Regular, monospace # derived: Miro ships no mono (all Roobert); operator IDs/codes/logs need one — Geist Mono's geometric humanist character pairs with Roobert
163
+ font-weight-normal: 400 # corpus: body 400
164
+ font-weight-strong: 500 # corpus: headings AND medium emphasis run 500; Roobert never uses 700 — the elegant medium-weight display voice carries
165
+ heading-tracking: -0.01em # derived: display tracks -2px…-1px but relaxes to 0 by heading-3; a faint -0.01em echoes the display DNA at operator heading sizes
166
+ duration-unit: 50ms # derived: corpus documents no timings; operator functional base
167
+ duration-fast: 100ms # derived: operator functional default
168
+ duration-normal: 150ms # corpus: recommends 150-200ms ease
169
+ duration-slow: 200ms # corpus: recommends 150-200ms ease (upper bound); friendly-quick
170
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus recommends a generic "ease"; standard functional curve
171
+ contrast-boost: 1 # derived: Miro's hairlines are visible and inputs already take a stronger edge; no boost needed
172
+ icon-stroke: 1.75 # derived: Miro ships no icon system; lucide at 1.75 matches Roobert's geometric medium-weight character
173
+ icon-size-base: 16px # derived: operator standard
174
+ sidebar-width-expanded: 256px # derived: Miro is marketing (no app shell); the airy brand rhythm → a touch roomier than a dense rail
175
+ sidebar-width-collapsed: 64px # derived: mirrors Miro's ~64px nav height as the icon rail
176
+ topbar-height: 64px # corpus: Miro's documented top-nav height (~64px)
177
+ side-panel-width: 440px # derived: no shell in corpus; roomy per the friendly brand rhythm
178
+ side-panel-width-rich: 640px # derived: no shell; content-heavy detail width
179
+ modal-width-max: 560px # derived: no shell; modals for confirmations only
180
+ form-max-width: 640px # derived: no shell; comfortable single-column form cap
181
+ table-row-height: 44px # corpus: Miro's 44px form/touch-target height → roomy operator rows; dense archetypes step down via the surface catalog
182
+ verbosity: default
183
+ feedback: subtle # rationale: Miro's friendly, responsive brand wants present-but-tasteful feedback
184
+ density-tier: standard # rationale: a spacious, airy consumer brand read down to an honest operator tier, leaning roomy; density earned per archetype
185
+ product-traits: [saas, collaboration, workspace, dashboard, admin]
186
+ ```
187
+
188
+ ```yaml lever-manifest
189
+ version: 1
190
+ fonts: { sans: "Roobert PRO, Noto Sans, -apple-system, BlinkMacSystemFont, sans-serif", mono: "Geist Mono, ui-monospace, SFMono-Regular, monospace" }
191
+ color-tokens:
192
+ light:
193
+ background: "#ffffff"
194
+ foreground: "#1c1c1e"
195
+ card: "#ffffff"
196
+ card-foreground: "#1c1c1e"
197
+ muted: "#f7f8fa"
198
+ muted-foreground: "#555a6a"
199
+ border: "#e0e2e8"
200
+ input: "#c7cad5" # corpus: hairline-strong — Miro gives inputs a heavier edge than dividers
201
+ ring: "#4262ff" # corpus: brand blue on the focus edge (text-input-focused)
202
+ primary: "#1c1c1e" # corpus: the black-pill primary CTA color
203
+ primary-foreground: "#ffffff"
204
+ accent: "#f5f3ff" # corpus: surface-pricing-featured lavender — the featured/selected wash
205
+ accent-foreground: "#4262ff" # corpus: brand blue on the lavender tint
206
+ destructive: "#e5484d" # derived: Miro ships only soft error backgrounds; a saturated red is needed for destructive fills, tuned to the warm coral-leaning palette
207
+ destructive-foreground: "#ffffff"
208
+ success: "#00b473" # corpus: success-accent green
209
+ warning: "#fcb900" # derived: brand-yellow-deep repurposed as the amber warning hue
210
+ popover: "#ffffff"
211
+ popover-foreground: "#1c1c1e"
212
+ secondary: "#f7f8fa"
213
+ secondary-foreground: "#1c1c1e"
214
+ chart-1: "#4262ff" # brand: blue anchors the ramp as the saturated primary series
215
+ chart-2: "#0fbcb0" # brand: teal sticky-note hue
216
+ chart-3: "#ff9999" # brand: coral sticky-note hue
217
+ chart-4: "#fcb900" # brand: deep-yellow sticky-note hue
218
+ chart-5: "#00b473" # brand: green success accent, completing the sticky-note set
219
+ sidebar: "#f7f8fa"
220
+ sidebar-foreground: "#1c1c1e"
221
+ sidebar-primary: "#1c1c1e"
222
+ sidebar-primary-foreground: "#ffffff"
223
+ sidebar-accent: "#eef0f3" # corpus: hairline-soft — neutral nav hover/selection tint
224
+ sidebar-accent-foreground: "#1c1c1e"
225
+ sidebar-border: "#e0e2e8"
226
+ sidebar-ring: "#4262ff" # corpus: brand-blue focus ring in the nav
227
+ spacing-scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64]
228
+ radius-scale: [0, 4, 8, 12, 16, 9999]
229
+ shadow-levels: [none, sm, md]
230
+ motion: { durations: [100, 150, 200], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
231
+ icons: { family: lucide, stroke: 1.75 }
232
+ accent-count: 1
233
+ ```
@@ -0,0 +1,220 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Mistral AI
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Mistral AI — the operator reading
9
+
10
+ Mistral's public brand is cinematographic: sunset gradients over mountain photography, a red-to-cream
11
+ "stripe" closing every page, hero-scale near-serif display type. This is the *operator* reading — the
12
+ palette temperature, the single saturated-orange accent, the sober editorial geometry, and the type
13
+ voice carry across; the gradients, photographic heroes, and hero-scale display face stay behind. An
14
+ internal tool wearing Mistral is a warm, cream-panelled console with one orange action, not a landing
15
+ page. Both machine blocks are fully valued; judgments away from the brand are annotated inline.
16
+
17
+ ## 1 Visual Theme
18
+
19
+ Light by default; dark is opt-in. Flat — hierarchy rides hairline `border`, type weight, and the warm
20
+ surface ladder, never heavy shadow. A single accent, Mistral Orange `primary` (`#fa520f`), for the one
21
+ action that matters. The neutrals are true grays, but the *surfaces* run warm — a white canvas beside a
22
+ cream-tinted `sidebar` with cream panels, the operator signature that carries Mistral's temperature
23
+ without a gradient. Density is `standard`, leaning comfortable (44px rows), dense-capable.
24
+
25
+ ## 2 Color Roles
26
+
27
+ Light values; hex is the brand's native format (the manifest carries the same). One accent — `primary`
28
+ orange is the only chromatic hue that carries meaning; status hues speak only status.
29
+
30
+ | Role | Value | Allowed where |
31
+ | --- | --- | --- |
32
+ | `background` / `card` / `popover` | canvas white `#ffffff` | page, cards, and overlays — the dominant surface |
33
+ | `foreground` | ink `#1f1f1f` | all primary ink |
34
+ | `muted` | warm-white `#fffaeb` | hover rows, quiet fills, subtle sections |
35
+ | `secondary` | cream `#fff8e0` | secondary buttons, grouped panels |
36
+ | `muted-foreground` | steel `#6a6a6a` | labels, captions, secondary text |
37
+ | `border` | hairline `#e5e5e5` | separators and grid lines on white |
38
+ | `input` | hairline-strong `#c7c7c7` | field edges — a firmer edge than the grid, per brand |
39
+ | `primary` | Mistral Orange `#fa520f` | the one primary action; active nav; key interactive detail |
40
+ | `accent` | cream-deeper `#fff0c2` | selected/hovered rows and nav, on-accent surfaces only |
41
+ | `ring` | `primary` `#fa520f` | the focus outline — unmistakable, keyboard-first |
42
+ | `destructive` | red `#d92d20` | destructive actions and error state only |
43
+ | `success` / `warning` | green `#16a34a` / amber `#d97706` | status signalling only, never chrome |
44
+
45
+ The sunset yellows (`#ffd900`, the sunshine ramp) and gradient bands are brand graces, not operator
46
+ tokens (see §7). The source palette ships no semantic red or green, so status red/green/amber are
47
+ derived functional imports, kept muted.
48
+
49
+ ## 3 Typography
50
+
51
+ One sans, one mono. `font-sans` is Inter — body, UI, and headings all ride it; heading weight and
52
+ tracking, not a second family, carry the voice. `font-mono` is JetBrains Mono for IDs, codes,
53
+ timestamps, and log lines. Numeric columns render `tabular-nums` so figures align down a column.
54
+
55
+ | Step | Role | Size · line | Weight · tracking |
56
+ | --- | --- | --- | --- |
57
+ | h1 | page title | 24px / 1.25 | `font-weight-strong` · `heading-tracking` |
58
+ | h2 | section head | 18px / 1.3 | `font-weight-strong` · `heading-tracking` |
59
+ | h3 | card / group head | 15px / 1.35 | `font-weight-strong` |
60
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` |
61
+ | small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
62
+ | caption | uppercase eyebrow | 11px / 1.4 | 600, `+0.09em`, uppercase |
63
+
64
+ Heading emphasis is `font-weight-strong` = **500**, not 600 — a deliberately lighter, editorial emphasis
65
+ is the brand's tell (the marketing heads run 500); 600 is reserved for the uppercase eyebrow. Emphasize
66
+ by weight, never size. The near-serif PP Editorial Old is a hero-display grace and stays behind —
67
+ operator surfaces have no hero, so Inter carries every head.
68
+
69
+ ## 4 Component Stylings
70
+
71
+ Every recurring operator component composes from the primitives — no literal values.
72
+ - **Button** — `primary`: filled orange on `primary-foreground`, `radius` (8px), no pill. Secondary:
73
+ `secondary` (cream) fill, `border`, `foreground`. Ghost: transparent, `accent` on hover.
74
+ - **Input** — `background` fill, 1px `input` border (firmer than the grid), `radius`; focus draws the
75
+ `ring` at 2px, no glow; field height rides `table-row-height` (44px).
76
+ - **Card** — `card` surface, 1px `border`, 12px corner (one step up from the 8px button), shadow only
77
+ when lifted; the cream variant uses `secondary` fill with a warm `sidebar-border` edge, not gray.
78
+ - **Table row** — `table-row-height` (44px); `border` grid lines; `muted` on hover; `tabular-nums` on
79
+ numerics; selection tints `accent`.
80
+ - **Side panel** — detail and edit open in the panel (`side-panel-width`/`-rich`), beside the work.
81
+ - **Badge** — hairline `border`, `muted`/status fill, uppercase caption; pill radius (9999) is for
82
+ badges only. Status badges take `success` / `warning` / `destructive`, never `primary`.
83
+
84
+ ## 5 Layout
85
+
86
+ Base spacing unit 4px; the on-scale ramp is the brand's own `4 · 8 · 12 · 16 · 20 · 24 · 32 · 40 · 48 ·
87
+ 64` (capped below the hero-scale 96/120 that stays behind). Shell dimensions map one-to-one to the
88
+ layout primitives: sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`,
89
+ side panel `side-panel-width` / `side-panel-width-rich`, modal `modal-width-max`, forms `form-max-width`,
90
+ tables full-width. Density is governed globally by `density-tier`, stepped per archetype by the catalog.
91
+
92
+ ## 6 Depth
93
+
94
+ Flat. Hierarchy comes from the warm surface ladder and hairlines, not shadow:
95
+
96
+ - **0 — canvas** `background`, no border.
97
+ - **1 — panel / card** `card` or cream `secondary` on a 1px border; `sm` shadow only to lift off canvas.
98
+ - **2 — overlay** `popover` / side panel / modal — the one place `shadow-intensity` earns a soft `md`
99
+ shadow. Rank is border, surface, and position, never a heavier drop shadow.
100
+
101
+ Focus is a 2px `ring` outline (never a glow), visible on every interactive element. Three z-levels:
102
+ content, sticky chrome, overlay — the marketing photographic and gradient depth does not carry.
103
+
104
+ ## 7 Do's & Don'ts
105
+
106
+ - **Do** reserve `primary` orange for the single most important action on a surface; everything else is
107
+ neutral or status.
108
+ - **Do** carry warmth with cream surfaces — the `sidebar` and grouped panels — against a white canvas.
109
+ - **Do** apply `tabular-nums` to every numeric column and `font-mono` to IDs, codes, and timestamps.
110
+ - **Do** keep the sober editorial geometry — 8px buttons, 12px cards; emphasize heads with weight-500.
111
+ - **Don't** pill the primary CTA — Mistral's button geometry is sober, not playful; 9999 is for badges.
112
+ - **Don't** promote the sunset yellows, a gradient, or the near-serif display into chrome — the stripe
113
+ band, sunshine ramp, hero photography, and display face are marketing signatures that stay behind.
114
+ - **Don't** open detail or edit in a modal when the side panel fits — modals are for confirmations.
115
+
116
+ ## 8 Responsive
117
+
118
+ The operator sweep is 375 / 768 / 1024 / 1440.
119
+
120
+ | Breakpoint | What changes |
121
+ | --- | --- |
122
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
123
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
124
+ | 1024 | sidebar expands; two-pane queue+detail holds side by side |
125
+ | 1440 | content caps at `form-max-width` for forms; tables and dashboards use the full width |
126
+
127
+ ## 9 Agent Prompt Guide
128
+
129
+ This entry dresses an internal tool — CRM, queue, dashboard, console — in Mistral's design language.
130
+ Carries: the warm temperature (white canvas + cream `sidebar` and panels), the single orange accent,
131
+ the sober 8px/12px radius, the Inter voice with editorial weight-500 heads, JetBrains Mono. Stays
132
+ behind: the sunset gradient bands, the hero-scale PP Editorial Old display face, the photographic heroes.
133
+
134
+ - Lead every list surface with its table; lead every entity with its primary read, not its chrome.
135
+ - Accent only the primary action with orange. If two things want the accent, one is not primary.
136
+ - Anchor warmth in the surface ladder, not the ink — grays stay gray; cream carries the brand.
137
+ - Detail and edit go in the side panel; a modal is a confirmation, not a workspace.
138
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`.
139
+ - Every workflow completes from the keyboard; the orange `ring` focus outline is always visible.
140
+ - Stay flat and sober — hairline and weight before shadow, no pills, no gradient chrome.
141
+
142
+ ```yaml design-primitives
143
+ radius: 8px # derived: brand button radius is md=8px; scale keeps 12px for cards
144
+ shadow-intensity: 0.4 # derived: brand runs predominantly flat, shadows at 0.04 alpha — lift only overlays
145
+ border-weight: 1px
146
+ density-gap: 1
147
+ density-inset: 1
148
+ font-sans: Inter, system-ui, sans-serif # brand's UI/prose face; the hero-scale near-serif display stays behind
149
+ font-mono: JetBrains Mono, ui-monospace, SFMono-Regular, monospace
150
+ font-weight-normal: 400
151
+ font-weight-strong: 500 # derived: brand headings emphasize at 500 (editorial), not 600 — 600 reserved for the eyebrow
152
+ heading-tracking: -0.01em # brand display tracks -0.5px at the large heads; operator heads echo the tightening
153
+ duration-unit: 50ms # derived: corpus does not extract motion timings
154
+ duration-fast: 100ms # derived: no corpus value; operator default
155
+ duration-normal: 150ms # brand note recommends 150–200ms ease for state transitions
156
+ duration-slow: 200ms # brand note recommends 150–200ms; slow lands at the top of that range
157
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent on easing; standard operator ease
158
+ contrast-boost: 1
159
+ icon-stroke: 1.75 # derived: corpus does not specify icons; refined operator stroke
160
+ icon-size-base: 16px
161
+ sidebar-width-expanded: 248px # derived: corpus is marketing-nav only; operator shell default
162
+ sidebar-width-collapsed: 56px # derived: operator shell default
163
+ topbar-height: 56px # derived: brand marketing nav ~64px; tightened for an operator topbar
164
+ side-panel-width: 420px # derived: no operator side panel in corpus; standard width
165
+ side-panel-width-rich: 640px # derived: standard rich-content width
166
+ modal-width-max: 560px # derived: corpus has a modal elevation level but no width; standard cap
167
+ form-max-width: 560px # brand contact form caps ~520px; rounded to the operator standard
168
+ table-row-height: 44px # brand touch targets (inputs/buttons) render 44px — comfortable, editorial
169
+ verbosity: default
170
+ feedback: subtle
171
+ density-tier: standard # derived: brand reads comfortable/editorial; standard keeps it dense-capable, not cramped
172
+ product-traits: [dashboard, ai-console, dev-tools, admin]
173
+ ```
174
+
175
+ ```yaml lever-manifest
176
+ version: 1
177
+ fonts: { sans: "Inter, system-ui, sans-serif", mono: "JetBrains Mono, ui-monospace, SFMono-Regular, monospace" }
178
+ color-tokens:
179
+ light:
180
+ background: "#ffffff"
181
+ foreground: "#1f1f1f"
182
+ card: "#ffffff"
183
+ card-foreground: "#1f1f1f"
184
+ muted: "#fffaeb"
185
+ muted-foreground: "#6a6a6a"
186
+ border: "#e5e5e5"
187
+ input: "#c7c7c7"
188
+ ring: "#fa520f"
189
+ primary: "#fa520f"
190
+ primary-foreground: "#ffffff"
191
+ accent: "#fff0c2"
192
+ accent-foreground: "#1f1f1f"
193
+ destructive: "#d92d20" # derived: source palette ships no semantic red; distinct from the CTA orange
194
+ destructive-foreground: "#ffffff"
195
+ success: "#16a34a" # derived: source palette ships no green; functional status import
196
+ warning: "#d97706" # derived: amber distinct from CTA orange; brand yellows fail contrast for status
197
+ popover: "#ffffff"
198
+ popover-foreground: "#1f1f1f"
199
+ secondary: "#fff8e0"
200
+ secondary-foreground: "#1f1f1f"
201
+ chart-1: "#fa520f" # derived: sunset ramp as categorical; warm palette suits sequential/few-series charts
202
+ chart-2: "#cc3a05"
203
+ chart-3: "#ffa110"
204
+ chart-4: "#ffd06a"
205
+ chart-5: "#ff8a00"
206
+ sidebar: "#fff8e0"
207
+ sidebar-foreground: "#1f1f1f"
208
+ sidebar-primary: "#fa520f"
209
+ sidebar-primary-foreground: "#ffffff"
210
+ sidebar-accent: "#fff0c2"
211
+ sidebar-accent-foreground: "#1f1f1f"
212
+ sidebar-border: "#e6d5a8" # brand's cream-surface border (beige-deep)
213
+ sidebar-ring: "#fa520f"
214
+ spacing-scale: [4, 8, 12, 16, 20, 24, 32, 40, 48, 64]
215
+ radius-scale: [4, 6, 8, 12, 16, 9999]
216
+ shadow-levels: [none, sm, md]
217
+ motion: { durations: [100, 150, 200], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
218
+ icons: { family: lucide, stroke: 1.75 }
219
+ accent-count: 1
220
+ ```