@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,220 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Lovable
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Lovable — warm parchment operator design
9
+
10
+ An operator reading of Lovable's warm, humanist brand. This entry keeps what carries onto a dense
11
+ internal tool — the cream-and-charcoal palette, the opacity-derived neutral ramp, the soft warm radius
12
+ character, the humanist type voice, the flat border-over-shadow depth — and leaves the marketing behind:
13
+ hero-scale display type, negative tracking at 48–60px, the gradient washes, the 96–208px editorial
14
+ section spacing. Light by default; a single achromatic accent (charcoal `primary`) does the emphasis
15
+ work. Both machine blocks are fully valued; every judgment away from the source lands with a `# derived:` note.
16
+
17
+ ## 1 Visual Theme
18
+
19
+ Warm, flat, parchment operator console. The canvas is a deliberate cream (`background` `#f7f4ed`), never
20
+ pure white — the brand's signature warmth carried onto the tool. Ink is a near-black charcoal
21
+ (`foreground` `#1c1c1c`), organic rather than clinical. Hierarchy comes from warm hairline `border`, type
22
+ weight, and charcoal-on-cream contrast — never heavy shadow. The one accent is achromatic: `primary` is
23
+ charcoal itself, reserved for the single most important action. Every neutral is one hue — charcoal at
24
+ varying opacity over cream — so the surface reads tonally unified. The anchor surface is a cream canvas
25
+ beside a faintly deeper cream `sidebar`. Density is `standard`.
26
+
27
+ ## 2 Color Roles
28
+
29
+ Light values first. One accent — `primary` is charcoal, the only role that carries emphasis; status hues
30
+ speak only status. Neutrals derive from `#1c1c1c` at low opacity over cream, which is why they read warm.
31
+
32
+ | Role | Value | Allowed where |
33
+ | --- | --- | --- |
34
+ | `background` / `card` | cream `#f7f4ed` | page and cards — the dominant surface; cards seat on hairlines, not a fill shift |
35
+ | `foreground` | charcoal `#1c1c1c` | all primary ink and headings |
36
+ | `muted` | warm tint `#eeebe5` (charcoal ~4% over cream) | hover rows, subtle fills, secondary surfaces |
37
+ | `muted-foreground` | muted gray `#5f5f5d` | labels, captions, secondary text |
38
+ | `border` / `input` | light cream `#eceae4` | every separator, grid line, card edge, and field edge |
39
+ | `primary` | charcoal `#1c1c1c` | the one primary action; active nav; key interactive detail |
40
+ | `primary-foreground` | off-white `#fcfbf8` | text/icon on charcoal fills |
41
+ | `accent` | warm tint `#eeebe5` | selected/hovered rows and nav |
42
+ | `ring` | ring blue `#3b82f6` | the keyboard focus outline — the one cool element, an accessibility affordance, not a brand accent |
43
+ | `destructive` | warm red `#c0392b` | destructive actions and error state only |
44
+ | `success` / `warning` | sage `#4f7a3f` / ochre `#c08a2d` | status signalling only, never chrome |
45
+
46
+ Interactive borders may step to a stronger charcoal-40% edge (`rgba(28,28,28,0.4)`); passive containment stays `#eceae4`.
47
+
48
+ ## 3 Typography
49
+
50
+ One sans, one mono. `font-sans` is Camera Plain Variable — a humanist face with rounded terminals that
51
+ gives the tool its warmth; the UI, body, and headings all ride it (`ui-sans-serif, system-ui` fallbacks).
52
+ Weight range is narrow: 400 for body/UI, 600 for headings (600 is the ceiling — never 700). `font-mono`
53
+ is derived (no brand mono documented) for IDs, codes, timestamps, and log lines. Numeric columns render
54
+ `tabular-nums` so figures align down a column (floor P4).
55
+
56
+ | Step | Role | Size · line | Weight · tracking |
57
+ | --- | --- | --- | --- |
58
+ | h1 | page title | 24px / 1.25 | `font-weight-strong` · `heading-tracking` |
59
+ | h2 | section head | 18px / 1.3 | `font-weight-strong` · `heading-tracking` |
60
+ | h3 | card / group head | 15px / 1.35 | `font-weight-strong` |
61
+ | body | UI + prose | 14px / 1.5 | `font-weight-normal` |
62
+ | small | labels, meta, dense table | 13px / 1.4 | `font-weight-normal` |
63
+ | caption | eyebrow, metadata | 12px / 1.3 | `font-weight-normal` |
64
+
65
+ The marketing hero ramp (36–60px, weight 480/600, tracking −0.9px to −1.5px) stays behind; the operator
66
+ ramp tops out at 24px. Bump weight for emphasis; never change size to emphasize.
67
+
68
+ ## 4 Component Stylings
69
+
70
+ Every recurring operator component composes from the primitives — no literal values.
71
+
72
+ - **Button** — `primary`: filled charcoal `primary` on `primary-foreground`, `radius`, no pill. The
73
+ signature inset shadow (a white highlight line above, a dark hairline and soft drop below) rides
74
+ `shadow-intensity` for a pressed-into-surface feel. Secondary: `secondary` fill, `border`, `foreground`.
75
+ Ghost: transparent, `accent` on hover.
76
+ - **Input** — `background` fill, 1px `border` (`border-weight`), `radius`; focus draws the `ring` outline.
77
+ - **Card** — `card` surface, 1px `border`, `radius` at the card step; no shadow by default — the warm
78
+ hairline is the containment mechanism; inset by `density-inset`.
79
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
80
+ numeric columns; row selection tints `accent`.
81
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`),
82
+ beside the work, not over it (floor P3).
83
+ - **Badge** — hairline `border`, `muted`/status fill; status badges take `success` / `warning` /
84
+ `destructive`, never `primary`. The full-pill `9999px` radius is reserved for icon toggles only.
85
+
86
+ ## 5 Layout
87
+
88
+ Base spacing unit 8px; the operator ramp is `4 · 8 · 12 · 16 · 24 · 32 · 40 · 56 · 80` (the editorial
89
+ 96–208px expanses stay behind). Shell dimensions map one-to-one to the layout primitives: sidebar
90
+ `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`, side panel
91
+ `side-panel-width` / `side-panel-width-rich`, modal cap `modal-width-max`, forms `form-max-width`, tables
92
+ full-width. Density is governed globally by `density-tier` (rewriting the scale through `density-gap`)
93
+ and stepped per archetype by the surface catalog — never by absolute overrides.
94
+
95
+ ## 6 Depth
96
+
97
+ Flat and shallow. Hierarchy comes from the warm hairline against the cream surface, not shadow:
98
+
99
+ - **0 — canvas** `background`, no border.
100
+ - **1 — panel / card** `card` on a 1px `#eceae4` border; no shadow — warm borders do the containment.
101
+ - **2 — overlay** `popover` / side panel / modal lifts a half-step to off-white and earns a single soft,
102
+ diffused shadow (`shadow-intensity` → `md`) — the brand's warm glow, never a sharp drop.
103
+
104
+ Focus is the `ring` outline on every interactive element (floor P6); the soft warm focus shadow
105
+ (`rgba(0,0,0,0.1) 0px 4px 12px`) is the active-state treatment. Three z-levels: content, chrome, overlay.
106
+
107
+ ## 7 Do's & Don'ts
108
+
109
+ - **Do** keep the cream `background` (`#f7f4ed`) as the foundation — never pure white; the warmth is the brand.
110
+ - **Do** derive every neutral from charcoal at low opacity for tonal unity, not arbitrary grays.
111
+ - **Do** reserve charcoal `primary` for the single most important action; everything else is neutral or status.
112
+ - **Do** carry containment with the `#eceae4` hairline, not a shadow.
113
+ - **Do** apply `tabular-nums` to every numeric column and `font-mono` to IDs, codes, and timestamps.
114
+ - **Don't** introduce a saturated chromatic accent — the palette is warm-neutral; the blue `ring` is an
115
+ accessibility affordance, not license for a second accent.
116
+ - **Don't** use weight 700 (600 is the ceiling), pill a rectangular button, signal elevation with heavy
117
+ drop shadows, or open detail/edit in a modal when the side panel fits.
118
+
119
+ ## 8 Responsive
120
+
121
+ The operator sweep is 375 / 768 / 1024 / 1440.
122
+
123
+ | Breakpoint | What changes |
124
+ | --- | --- |
125
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
126
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
127
+ | 1024 | sidebar expands; two-pane list+detail holds side by side |
128
+ | 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
129
+
130
+ ## 9 Agent Prompt Guide
131
+
132
+ What carries from Lovable onto an operator tool, and what stays behind:
133
+
134
+ - **Reach for first**: the cream `background` and charcoal `foreground`, plus the humanist Camera Plain voice — this brand is defined by warmth.
135
+ - **One accent, achromatic**: charcoal `primary` is the emphasis (if two things want it, one is not
136
+ primary); derive every muted fill and border from charcoal-over-cream, never a cold gray.
137
+ - **Flat before lifted**: warm `#eceae4` hairline before any shadow; reach past it only for a real overlay, and then only the soft diffused glow.
138
+ - **Numbers**: every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono` (P4).
139
+ - **Keyboard-first**: every workflow completes from the keyboard; the `ring` focus outline is always visible (P6).
140
+ - **Left behind** (marketing only): hero type at 36–60px, display-scale negative tracking, the gradient washes, the 96–208px editorial spacing. Warmth comes from palette and type, not lavish gaps.
141
+
142
+ ```yaml design-primitives
143
+ radius: 6px
144
+ shadow-intensity: 0.3 # derived: brand is flat, borders over shadows; only the soft focus glow and button inset lift
145
+ border-weight: 1px
146
+ density-gap: 1
147
+ density-inset: 1
148
+ font-sans: Camera Plain Variable, ui-sans-serif, system-ui, sans-serif
149
+ font-mono: IBM Plex Mono, ui-monospace, SFMono-Regular, monospace # derived: no brand mono documented; IBM Plex Mono's humanist warmth pairs with Camera Plain for IDs/codes/logs
150
+ font-weight-normal: 400
151
+ font-weight-strong: 600 # derived: brand ceiling is 600 — never 700
152
+ heading-tracking: -0.015em # derived: Camera Plain compresses at scale; scaled down from the −0.9/−1.5px display tracking to a gentle operator-heading value
153
+ duration-unit: 50ms # derived: corpus silent on timing; operator default
154
+ duration-fast: 100ms # derived: corpus silent on timing; operator default
155
+ duration-normal: 150ms # derived: corpus silent on timing; operator default
156
+ duration-slow: 250ms # derived: corpus silent on timing; operator default
157
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent; standard ease suits the soft, diffused character
158
+ contrast-boost: 1 # derived: the soft warm #eceae4 hairline is intentional; boosting contrast would fight the brand
159
+ icon-stroke: 1.75 # derived: shadcn/lucide default 2 stepped to 1.75 for a refined humanist stroke
160
+ icon-size-base: 16px
161
+ sidebar-width-expanded: 248px # derived: source is a marketing site with no shell; operator default
162
+ sidebar-width-collapsed: 56px # derived: operator default
163
+ topbar-height: 56px # derived: a touch taller than baseline to honor the comfortable, breathing rhythm
164
+ side-panel-width: 420px # derived: operator default
165
+ side-panel-width-rich: 640px # derived: operator default
166
+ modal-width-max: 560px # derived: operator default
167
+ form-max-width: 640px # derived: marketing max width ~1200px is hero-scale; operator forms cap tighter
168
+ table-row-height: 44px # derived: comfortable 8×16 button padding character carried to a slightly taller warm row
169
+ verbosity: default
170
+ feedback: subtle # derived: brand uses opacity-0.8 active and soft diffused focus — gentle, understated feedback
171
+ density-tier: standard # derived: a spacious marketing brand read at operator density; warmth carries via palette and type, not lavish gaps
172
+ product-traits: [dev-tools, ai-builder, no-code]
173
+ ```
174
+
175
+ ```yaml lever-manifest
176
+ version: 1
177
+ fonts: { sans: "Camera Plain Variable, ui-sans-serif, system-ui, sans-serif", mono: "IBM Plex Mono, ui-monospace, SFMono-Regular, monospace" }
178
+ color-tokens:
179
+ light:
180
+ background: "#f7f4ed"
181
+ foreground: "#1c1c1c"
182
+ card: "#f7f4ed"
183
+ card-foreground: "#1c1c1c"
184
+ muted: "#eeebe5" # derived: charcoal ~4% over cream (rgba(28,28,28,0.04)) resolved to an opaque warm tint
185
+ muted-foreground: "#5f5f5d"
186
+ border: "#eceae4"
187
+ input: "#eceae4"
188
+ ring: "#3b82f6"
189
+ primary: "#1c1c1c"
190
+ primary-foreground: "#fcfbf8"
191
+ accent: "#eeebe5" # derived: subtle warm hover/selection tint, same as muted
192
+ accent-foreground: "#1c1c1c"
193
+ destructive: "#c0392b" # derived: warm red tuned to the parchment palette (corpus silent on status hues)
194
+ destructive-foreground: "#fcfbf8"
195
+ success: "#4f7a3f" # derived: muted sage green, warm-leaning to fit the palette
196
+ warning: "#c08a2d" # derived: ochre amber, warm-leaning
197
+ popover: "#fcfbf8" # derived: off-white lifts overlays a half-step above the cream canvas
198
+ popover-foreground: "#1c1c1c"
199
+ secondary: "#eeebe5" # derived: the cream-surface button given a faint warm fill so it reads against the cream page
200
+ secondary-foreground: "#1c1c1c"
201
+ chart-1: "#1c1c1c" # derived: charcoal anchors the primary series
202
+ chart-2: "#c08a2d" # derived: warm categorical ramp from the status hues + ring blue, kept within the palette
203
+ chart-3: "#4f7a3f" # derived
204
+ chart-4: "#bc6c3a" # derived: terracotta/burnt-orange to extend the warm ramp
205
+ chart-5: "#3b82f6" # derived: the ring blue as a single cool anchor
206
+ sidebar: "#f2efe6" # derived: a faintly deeper cream than the canvas so the nav rail reads as chrome
207
+ sidebar-foreground: "#1c1c1c"
208
+ sidebar-primary: "#1c1c1c"
209
+ sidebar-primary-foreground: "#fcfbf8"
210
+ sidebar-accent: "#eeebe5"
211
+ sidebar-accent-foreground: "#1c1c1c"
212
+ sidebar-border: "#eceae4"
213
+ sidebar-ring: "#3b82f6"
214
+ spacing-scale: [4, 8, 12, 16, 24, 32, 40, 56, 80] # 8px base; editorial 96–208 stay behind with the marketing
215
+ radius-scale: [4, 6, 8, 12, 16, 9999] # no hard 0 — the brand's soft-corner character starts at 4px
216
+ shadow-levels: [none, sm, md]
217
+ motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
218
+ icons: { family: lucide, stroke: 1.75 }
219
+ accent-count: 1
220
+ ```
@@ -0,0 +1,220 @@
1
+ ---
2
+ schema: design-md/v1
3
+ product: Meta
4
+ provenance: library
5
+ sourced: 2026-07-04
6
+ ---
7
+
8
+ # Meta — the stark-white, cobalt-accent operator reading
9
+
10
+ An operator translation of Meta's hardware-commerce design language (Quest, Ray-Ban Meta glasses). The
11
+ merchandising theatre stays behind: the 64px Optimistic hero display, full-bleed photography, the
12
+ dual-CTA hero, the black-pill marketing CTA, the 80/120px rhythm. What carries is the chassis underneath
13
+ — a stark white canvas (`#ffffff`), a single saturated cobalt accent (`#0064e0`, Meta's own buy-now
14
+ color promoted to the operator primary), a cool blue-gray neutral temperature, Optimistic VF's snug
15
+ geometric-humanist voice, moderate rounding, and Facebook-Blue focus. Both blocks are fully valued;
16
+ judgments past the corpus are annotated `# derived:`, corpus values `# corpus:`.
17
+
18
+ ## 1 Visual Theme
19
+
20
+ Light by default; dark is opt-in (Meta ships no dark tokens — light is the whole thesis). Stark white
21
+ `background` (`#ffffff`) is the identity — the brand's photography-carrying ground, kept pure-white here.
22
+ Flat: hierarchy comes from a cool hairline `border`, type weight, and the two-layer elevation Meta
23
+ actually uses — never a decorative shadow. A single accent, cobalt `primary` (`#0064e0`) — Meta's scarce
24
+ commerce buy-now color — is the only chromatic hue that carries meaning. Ink is a deep cool near-black
25
+ `foreground` (`#0a1317`) leaning faintly blue, so the neutrals read cool, not warm-gray. The anchor
26
+ surface is a white content canvas beside a faintly cool-tinted `sidebar`. Density is `standard` — Meta's
27
+ marketing breathes, but its commerce configurator runs dense, and the operator reading takes its pace.
28
+
29
+ ## 2 Color Roles
30
+
31
+ Light values first (hex, the corpus's native format). One accent — `primary` is the only chromatic hue that carries meaning; the status hues speak only status.
32
+
33
+ | Role | Value | Allowed where |
34
+ | --- | --- | --- |
35
+ | `background` / `card` / `popover` | stark white `#ffffff` | page, cards, and overlays — the dominant surface, differentiated by border not brightness |
36
+ | `foreground` | deep cool ink `#0a1317` | all primary ink and headlines |
37
+ | `muted` / `secondary` | soft cool cloud `#f1f4f7` / `#e9edf2` | hover rows, subtle fills, secondary button fill |
38
+ | `muted-foreground` | steel blue-gray `#5d6c7b` | labels, captions, secondary text |
39
+ | `border` | soft hairline `#dee3e9` | every separator, grid line, and card edge |
40
+ | `input` | firmer control gray `#ced0d4` | field edges — one notch firmer than the divider hairline |
41
+ | `primary` | cobalt `#0064e0` | the one primary action; active nav; the key interactive detail |
42
+ | `accent` | cobalt tint `#e6f0fc` | selected / hovered rows and nav — selection tints cobalt, never fills it |
43
+ | `ring` | Facebook Blue `#1876f2` | the 2px focus outline — Meta's exact input-focus hue, one notch brighter than cobalt |
44
+ | `destructive` | critical red `#e41e3f` | destructive actions and error state only |
45
+ | `success` / `warning` | green `#31a24c` / amber `#f2a918` | status signalling only, never chrome |
46
+
47
+ The black marketing pill (`#000000`), Oculus purple (`#a121ce`), and promo yellow (`#f7b928`) are brand graces off the operator palette: the black CTA and dual-CTA grammar stay behind (§7), purple lives only in charts, and promo yellow fails as status on white (status takes the amber `warning`).
48
+
49
+ ## 3 Typography
50
+
51
+ One display sans, one derived mono. `font-sans` is Optimistic VF — Meta's variable face — with the
52
+ corpus's Montserrat fallback and Inter added for dense-body legibility; UI, body, and headings all ride
53
+ it, weight and Optimistic's `ss01`/`ss02` sets carrying the humanist voice, not a second family. The
54
+ 64/48px hero and display sizes stay behind; the operator ramp keeps the face at working sizes. Optimistic
55
+ is drawn snug — body carries a `-0.14` to `-0.16px` negative tracking, reflected in the ramp as a light
56
+ `-0.01em`. `font-mono` is a derived Roboto Mono for IDs, codes, timestamps; numeric columns render `tabular-nums`.
57
+
58
+ | Step | Role | Size · line | Weight · tracking |
59
+ | --- | --- | --- | --- |
60
+ | h1 | page title | 28px / 1.21 | `font-weight-strong` · `heading-tracking` |
61
+ | h2 | section head | 24px / 1.25 | `font-weight-strong` · `heading-tracking` |
62
+ | h3 | card / group head | 18px / 1.44 | `font-weight-strong` · 0 |
63
+ | body | UI + prose | 16px / 1.5 | `font-weight-normal` · `-0.01em` |
64
+ | small | labels, meta, dense table | 14px / 1.43 | `font-weight-normal` · `-0.01em` |
65
+ | caption | uppercase eyebrow | 12px / 1.33 | `font-weight-strong`, `+0.02em`, uppercase |
66
+ | code | IDs, codes, timestamps | 13px / 1.5 | `font-weight-normal` |
67
+
68
+ Body runs at 16px, not 14 — Meta's `body-md` reading pace; emphasise by weight, never size. The `ss01`/`ss02` heading sets are a hand-applied invariant the machine block can't carry.
69
+
70
+ ## 4 Component Stylings
71
+
72
+ Every recurring operator component composes from the primitives — no literal values.
73
+
74
+ - **Button** — `primary`: filled cobalt on `primary-foreground`, `radius` (8px rect), no pill; press
75
+ deepens the cobalt. Secondary: `secondary` fill, 1px `border`. Ghost: transparent, `accent` on hover.
76
+ - **Input** — `background` fill, 1px `border` (the firmer `input` gray), `radius`; focus draws the `ring`
77
+ in Facebook Blue at 2px, no glow.
78
+ - **Card** — white `card` on a 1px `border`; panels read by hairline, not brightness (nothing sits
79
+ lighter than the canvas); shadow only when lifted; inset by `density-inset`.
80
+ - **Table row** — height `table-row-height`; `border` grid lines; `muted` on hover; `tabular-nums` on
81
+ numeric columns; row selection tints `accent`.
82
+ - **Side panel** — detail and edit open in the side panel (`side-panel-width`, `side-panel-width-rich`
83
+ for content-heavy), beside the work, not over it.
84
+ - **Badge** — pill radius (`9999`, the one place Meta's signature pill survives), `muted`/status fill,
85
+ uppercase caption; status badges take `success` / `warning` / `destructive`, never `primary`.
86
+
87
+ ## 5 Layout
88
+
89
+ Base spacing unit 4px with 8px as the dominant step (Meta's grid); the on-scale ramp is `4 · 8 · 12 · 16
90
+ · 24 · 32 · 48 · 64` — the 80/120px marketing rhythm stays behind. Shell dimensions map one-to-one to the
91
+ layout primitives: sidebar `sidebar-width-expanded` / `sidebar-width-collapsed`, topbar `topbar-height`,
92
+ side panel `side-panel-width` / `side-panel-width-rich` (the corpus PDP purchase rail informs the width),
93
+ modal cap `modal-width-max`, forms `form-max-width`, tables full-width. Density is governed globally by
94
+ `density-tier`, stepped per archetype by the surface catalog — never by absolute overrides.
95
+
96
+ ## 6 Depth
97
+
98
+ Flat, with Meta's exact two-layer elevation:
99
+
100
+ - **0 — canvas** `background` (`#ffffff`), no border.
101
+ - **1 — panel / card** white `card` on a 1px `border`; the hairline is the divider, not a shadow. A faint
102
+ `sm` lift only when a control must read as raised (Meta's pill-tab-active indicator).
103
+ - **2 — overlay** `popover` / side panel / modal / sticky rail — the one place `shadow-intensity` earns a
104
+ soft `md` shadow (Meta's `rgba(20,22,26,0.3) 0 1px 4px`). Rank is border and position, never a heavier shadow.
105
+
106
+ Focus is a 2px Facebook-Blue `ring` outline (never a glow), on every interactive element. Three z-levels: content, sticky chrome, overlay.
107
+
108
+ ## 7 Do's & Don'ts
109
+
110
+ - **Do** anchor on the stark white canvas — Meta's whole thesis; cards differentiate by hairline, not tint.
111
+ - **Do** reserve cobalt `primary` for the single most important action; its weight is meaningful because scarce.
112
+ - **Do** keep the neutrals cool — ink and grays lean faintly blue (`#0a1317`, `#5d6c7b`), never warm-gray.
113
+ - **Do** apply `tabular-nums` to numeric columns, `font-mono` to IDs/codes/timestamps, and set the type snug.
114
+ - **Don't** promote the black marketing pill or dual-CTA hero grammar — one cobalt accent, not a two-CTA pair.
115
+ - **Don't** pill every control — the 100px pill is a marketing signal; controls take the 8px `radius` rect, pill (`9999`) for badges.
116
+ - **Don't** promote a second chromatic accent — Oculus purple stays in charts, promo yellow stays behind.
117
+ - **Don't** signal elevation with heavy drop shadows, or open detail in a modal when the side panel fits.
118
+
119
+ ## 8 Responsive
120
+
121
+ The operator sweep is 375 / 768 / 1024 / 1440.
122
+
123
+ | Breakpoint | What changes |
124
+ | --- | --- |
125
+ | 375 | sidebar → off-canvas drawer; two-pane list+detail stacks; side panel → full sheet; density holds |
126
+ | 768 | sidebar collapses to the icon rail (`sidebar-width-collapsed`); tables scroll their overflow |
127
+ | 1024 | sidebar expands; two-pane queue+detail holds side by side |
128
+ | 1440 | forms cap at `form-max-width`; tables and dashboards use the full width |
129
+
130
+ ## 9 Agent Prompt Guide
131
+
132
+ - **Carries:** the stark white `#ffffff` canvas; the single cobalt `#0064e0` accent; the cool blue-gray
133
+ neutral temperature; Optimistic VF's geometric-humanist voice (Montserrat / Inter fallback, `ss01`+`ss02`
134
+ on headings) with snug tracking; the 8px control radius; the Facebook-Blue focus ring; the 16px pace.
135
+ - **Stays behind:** the 64/48px hero and display type; full-bleed product photography; the black-pill and
136
+ dual-CTA hero grammar; pill-everything (100px) controls; the promo banner; the 80/120px section rhythm.
137
+ - Lead every list surface with its table; lead every entity with its primary read, not its chrome.
138
+ - Accent only the primary action in cobalt. If two things want the accent, one of them is not primary.
139
+ - Every numeric column is `tabular-nums`; every ID / code / timestamp is `font-mono`; keep the type snug.
140
+ - Every workflow completes from the keyboard; the Facebook-Blue `ring` focus outline is always visible.
141
+
142
+ ```yaml design-primitives
143
+ radius: 8px # corpus: form inputs / radio options at rounded.lg (8px); the 100px marketing pill stays behind (badges keep the pill)
144
+ shadow-intensity: 0.3 # corpus: only two elevated layers, at rgba ~0.2–0.3 alpha; chrome is otherwise flat
145
+ border-weight: 1px
146
+ density-gap: 1
147
+ density-inset: 1
148
+ font-sans: Optimistic VF, Montserrat, Inter, system-ui, sans-serif # corpus: Optimistic VF with Montserrat fallback; Inter added for dense-body legibility
149
+ font-mono: Roboto Mono, ui-monospace, SFMono-Regular, monospace # derived: corpus ships no mono; Roboto Mono is the geometric-neutral sibling to the Optimistic/Montserrat voice
150
+ font-weight-normal: 400 # corpus: body-md weight 400
151
+ font-weight-strong: 600 # derived: corpus display headings are 500 (too light to separate at operator sizes) and functional emphasis 700; 600 is the operator middle
152
+ heading-tracking: -0.01em # derived: corpus tracks headings at 0 but sets body snug (-0.14/-0.16px); Optimistic is drawn snug, so a slight -0.01em keeps that character at heading scale
153
+ duration-unit: 50ms # derived: corpus documents no base unit; operator standard
154
+ duration-fast: 100ms # derived: corpus silent below its 150ms floor
155
+ duration-normal: 150ms # corpus: recommends 150–250ms ease-out for primary surface transitions
156
+ duration-slow: 300ms # corpus: recommends 300ms ease-in-out for accordion expand/collapse
157
+ ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus recommends ease-out; the standard functional curve
158
+ contrast-boost: 1 # derived: standard density reads as a grid without boosted hairlines
159
+ icon-stroke: 1.75 # derived: corpus uses line icons (20–32px); operator-standard stroke
160
+ icon-size-base: 16px # derived: corpus feature icons run 20–32px; the base UI glyph tightens to 16px
161
+ sidebar-width-expanded: 248px # derived: corpus has no app shell; operator standard rail
162
+ sidebar-width-collapsed: 56px # derived: corpus has no app shell; operator standard icon rail
163
+ topbar-height: 56px # derived: corpus top nav ~64px is marketing-generous; operator tightens to 56px
164
+ side-panel-width: 420px # derived: corpus PDP purchase rail caps ~380px; nudged to 420 for operator detail
165
+ side-panel-width-rich: 640px # derived: content-heavy detail width
166
+ modal-width-max: 560px # derived: corpus has no shell; confirmations only
167
+ form-max-width: 640px # derived: corpus configurator column; a comfortable form cap
168
+ table-row-height: 44px # derived: corpus has no tables; the 44px input / touch-target height sets a comfortable row
169
+ verbosity: default
170
+ feedback: subtle
171
+ density-tier: standard # derived: corpus marketing breathes (80/120px) but the commerce configurator runs dense; the operator reading takes the panel's standard tier
172
+ product-traits: [catalog, commerce, dashboard, admin]
173
+ ```
174
+
175
+ ```yaml lever-manifest
176
+ version: 1
177
+ fonts: { sans: "Optimistic VF, Montserrat, Inter, system-ui, sans-serif", mono: "Roboto Mono, ui-monospace, SFMono-Regular, monospace" }
178
+ color-tokens:
179
+ light:
180
+ background: "#ffffff"
181
+ foreground: "#0a1317"
182
+ card: "#ffffff"
183
+ card-foreground: "#0a1317"
184
+ muted: "#f1f4f7"
185
+ muted-foreground: "#5d6c7b"
186
+ border: "#dee3e9"
187
+ input: "#ced0d4"
188
+ ring: "#1876f2"
189
+ primary: "#0064e0"
190
+ primary-foreground: "#ffffff"
191
+ accent: "#e6f0fc" # derived: light tint of cobalt #0064e0 (corpus tints callouts with primary-soft at 15% alpha)
192
+ accent-foreground: "#0064e0"
193
+ destructive: "#e41e3f"
194
+ destructive-foreground: "#ffffff"
195
+ success: "#31a24c"
196
+ warning: "#f2a918" # derived: corpus splits attention #f2a918 and promo yellow #f7b928; the operator warning takes the legible amber (promo yellow fails as status text on white)
197
+ popover: "#ffffff"
198
+ popover-foreground: "#0a1317"
199
+ secondary: "#e9edf2" # derived: one step below surface-soft so secondary buttons separate from the muted hover tint
200
+ secondary-foreground: "#0a1317"
201
+ chart-1: "#0064e0" # cobalt primary
202
+ chart-2: "#0091ff" # primary-soft sky
203
+ chart-3: "#a121ce" # Oculus purple
204
+ chart-4: "#31a24c" # success green
205
+ chart-5: "#f2a918" # attention amber
206
+ sidebar: "#f7f9fb" # derived: a faint cool tint below the white canvas; Meta's nav is white with a hairline, kept faintly recessive for operator chrome
207
+ sidebar-foreground: "#0a1317"
208
+ sidebar-primary: "#0064e0"
209
+ sidebar-primary-foreground: "#ffffff"
210
+ sidebar-accent: "#e6f0fc"
211
+ sidebar-accent-foreground: "#0064e0"
212
+ sidebar-border: "#dee3e9"
213
+ sidebar-ring: "#1876f2"
214
+ spacing-scale: [4, 8, 12, 16, 24, 32, 48, 64]
215
+ radius-scale: [0, 4, 6, 8, 16, 9999]
216
+ shadow-levels: [none, sm, md]
217
+ motion: { durations: [100, 150, 300], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
218
+ icons: { family: lucide, stroke: 1.75 }
219
+ accent-count: 1
220
+ ```