@nebutra/theme 0.2.1 → 2.0.0

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 (46) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/brand-package-surface.d.ts +2 -0
  3. package/dist/brand-package-surface.js +36 -0
  4. package/dist/brand-package-surface.js.map +1 -0
  5. package/dist/chunk-4CNXYWPJ.js +259 -0
  6. package/dist/chunk-4CNXYWPJ.js.map +1 -0
  7. package/dist/chunk-XDRU7ACJ.js +91 -0
  8. package/dist/chunk-XDRU7ACJ.js.map +1 -0
  9. package/dist/client.d.ts +45 -0
  10. package/dist/client.js +43 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/index.d.ts +11 -0
  13. package/dist/index.js +77 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/language-switcher.d.ts +62 -0
  16. package/dist/language-switcher.js +242 -0
  17. package/dist/language-switcher.js.map +1 -0
  18. package/dist/languages.d.ts +62 -0
  19. package/dist/languages.js +19 -0
  20. package/dist/languages.js.map +1 -0
  21. package/morph.css +99 -0
  22. package/package.json +53 -11
  23. package/skins.css +718 -969
  24. package/src/languages.json +44 -0
  25. package/styles/sources.css +16 -0
  26. package/.turbo/turbo-build.log +0 -10
  27. package/.turbo/turbo-typecheck.log +0 -4
  28. package/AGENTS.md +0 -28
  29. package/DESIGN.md +0 -124
  30. package/scripts/sync-languages.mjs +0 -189
  31. package/scripts/sync-skins.mjs +0 -83
  32. package/scripts/sync-themes.mjs +0 -40
  33. package/src/__tests__/apply-language.test.ts +0 -70
  34. package/src/__tests__/languages.test.ts +0 -100
  35. package/src/__tests__/theme-registry.test.ts +0 -27
  36. package/src/apply-language.ts +0 -87
  37. package/src/brand-package-surface.ts +0 -30
  38. package/src/built-in-packages.generated.ts +0 -39
  39. package/src/built-in-packages.ts +0 -14
  40. package/src/client.ts +0 -35
  41. package/src/index.ts +0 -53
  42. package/src/languages.meta.json +0 -62
  43. package/src/languages.ts +0 -70
  44. package/src/registry.json +0 -7
  45. package/tsconfig.json +0 -10
  46. package/turbo.json +0 -25
package/skins.css CHANGED
@@ -7,31 +7,255 @@
7
7
  * Switch: document.documentElement.dataset.brand = "vanta" | "linear" | ...
8
8
  * Factory: delete dataset.brand (or clearLanguage() / applyLanguage("factory")).
9
9
  *
10
- * Languages: gsap, linear, notion, raycast, stripe, vanta, vercel
10
+ * Languages: cosmos, gsap, linear, notion, raycast, stripe, vanta, vercel
11
11
  */
12
12
 
13
13
  /**
14
- * Brand carrier skin: GSAP (gsap) v1.0.0
15
- * darkDefault=true dualMode=false button=gradient-stroke
16
- * fonts=2 zones=yes mode=global
14
+ * Brand carrier skin: Cosmos (cosmos) v2.0.0
15
+ * darkDefault=false dualMode=true button=solid
16
+ * fonts=0 mode=global
17
17
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
18
18
  */
19
19
 
20
- /* Brand font faces */
21
- @font-face {
22
- font-family: "Mori";
23
- src: url("/brand-assets/mori-regular.woff2") format("woff2");
24
- font-weight: 400;
25
- font-display: swap;
20
+ html[data-brand="cosmos"] {
21
+ /* ── Color roles (carrier) ── */
22
+ --role-canvas: 30 20% 96%;
23
+ --role-canvas-fg: 0 0% 5%;
24
+ --role-surface: 0 0% 100%;
25
+ --role-surface-fg: 0 0% 5%;
26
+ --role-action: 0 0% 5%;
27
+ --role-action-fg: 30 20% 96%;
28
+ --role-quiet: 0 0% 100%;
29
+ --role-quiet-fg: 0 0% 5%;
30
+ --role-muted: 30 20% 96%;
31
+ --role-muted-fg: 12 2% 42%;
32
+ --role-border: 30 5% 85%;
33
+ --role-input: 30 5% 85%;
34
+ --role-ring: 0 0% 5%;
35
+ --role-brand: 0 0% 5%;
36
+ --role-brand-fg: 30 20% 96%;
37
+ --brand-mark: 0 0% 5%;
38
+ --brand-mark-foreground: 30 20% 96%;
39
+
40
+ /* ── shadcn bridge (primary = action CTA) ── */
41
+ --background: 30 20% 96%;
42
+ --foreground: 0 0% 5%;
43
+ --card: 0 0% 100%;
44
+ --card-foreground: 0 0% 5%;
45
+ --popover: 0 0% 100%;
46
+ --popover-foreground: 0 0% 5%;
47
+ --primary: 0 0% 5%;
48
+ --primary-foreground: 30 20% 96%;
49
+ --secondary: 0 0% 100%;
50
+ --secondary-foreground: 0 0% 5%;
51
+ --muted: 30 20% 96%;
52
+ --muted-foreground: 12 2% 42%;
53
+ --accent: 0 0% 5%;
54
+ --accent-foreground: 30 20% 96%;
55
+ --destructive: 4 76% 40%;
56
+ --destructive-foreground: 0 0% 100%;
57
+ --border: 30 5% 85%;
58
+ --input: 30 5% 85%;
59
+ --ring: 0 0% 5%;
60
+ --success: 134 62% 40%;
61
+ --success-foreground: 0 0% 100%;
62
+ --info: 12 2% 42%;
63
+ --info-foreground: 0 0% 100%;
64
+ --sidebar: 0 0% 100%;
65
+ --sidebar-foreground: 0 0% 5%;
66
+ --sidebar-primary: 0 0% 5%;
67
+ --sidebar-primary-foreground: 30 20% 96%;
68
+ --sidebar-accent: 0 0% 5%;
69
+ --sidebar-accent-foreground: 30 20% 96%;
70
+ --sidebar-border: 30 5% 85%;
71
+ --sidebar-ring: 0 0% 5%;
72
+ --brand-primary: hsl(0 0% 5%);
73
+ --brand-accent: hsl(0 0% 5%);
74
+ --brand-accent-foreground: hsl(30 20% 96%);
75
+ --brand-tertiary: hsl(0 0% 5%);
76
+ --brand-gradient: hsl(var(--primary));
77
+ --brand-gradient-reverse: hsl(var(--primary));
78
+ --brand-gradient-vertical: hsl(var(--primary));
79
+ --brand-gradient-radial: hsl(var(--primary));
80
+
81
+ /* ── Neutral ramp, anchored on this language's roles ── */
82
+ --neutral-1: hsl(30 20% 96%);
83
+ --neutral-2: hsl(0 0% 100%);
84
+ --neutral-3: color-mix(in oklab, hsl(30 5% 85%) 20%, hsl(0 0% 100%));
85
+ --neutral-4: color-mix(in oklab, hsl(30 5% 85%) 40%, hsl(0 0% 100%));
86
+ --neutral-5: color-mix(in oklab, hsl(30 5% 85%) 60%, hsl(0 0% 100%));
87
+ --neutral-6: color-mix(in oklab, hsl(30 5% 85%) 80%, hsl(0 0% 100%));
88
+ --neutral-7: hsl(30 5% 85%);
89
+ --neutral-8: color-mix(in oklab, hsl(12 2% 42%) 25%, hsl(30 5% 85%));
90
+ --neutral-9: color-mix(in oklab, hsl(12 2% 42%) 50%, hsl(30 5% 85%));
91
+ --neutral-10: color-mix(in oklab, hsl(12 2% 42%) 75%, hsl(30 5% 85%));
92
+ --neutral-11: hsl(12 2% 42%);
93
+ --neutral-12: hsl(0 0% 5%);
94
+
95
+ /* Recipe (action language + free elev/radii) */
96
+ /* Shape slots */
97
+ --btn-default-radius: 16px;
98
+ --radius-button: 16px;
99
+ --radius-buttons: 16px;
100
+ --radius-md: min(16px, 16px);
101
+ --radius-card: 16px;
102
+ --radius-lg: 16px;
103
+ --radius-badge: 16px;
104
+ --badge-default-radius: 16px;
105
+ --radius-inputs: 16px;
106
+ --input-radius: 16px;
107
+ --radius-pill: 9999px;
108
+
109
+ /* Free elevation (carrier-provided CSS shadows) */
110
+ --elevation-card: 0 0 #0000;
111
+ --elevation-control: 0 0 #0000;
112
+ --elevation-raised: 0 0 #0000;
113
+ --elevation-xs: 0 0 #0000;
114
+ --elevation-sm: 0 0 #0000;
115
+ --elevation-md: 0 0 #0000;
116
+ --elevation-lg: 0 0 #0000;
117
+ --btn-default-shadow: 0 0 #0000;
118
+ --btn-default-bg: hsl(var(--primary));
119
+ --btn-default-fg: hsl(var(--primary-foreground));
120
+ --btn-default-border-width: 0px;
121
+ --btn-default-border: transparent;
122
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
123
+ --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
124
+ --badge-default-bg: hsl(var(--secondary));
125
+ --badge-default-fg: hsl(var(--secondary-foreground));
126
+ --badge-default-border: transparent;
127
+ --badge-default-hover-bg: color-mix(in srgb, hsl(var(--secondary)) 90%, white);
128
+
129
+ /* Typography */
130
+ --font-sans:
131
+ var(--font-reg-fraunces), "Fraunces", "GT Super", Georgia,
132
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-serif, serif;
133
+ --font-cn:
134
+ var(--font-reg-fraunces), "Fraunces", "GT Super", Georgia,
135
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-serif, serif;
136
+ --font-heading:
137
+ var(--font-reg-fraunces), "Fraunces", "GT Super", Georgia,
138
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-serif, serif;
139
+ --font-display:
140
+ var(--font-reg-fraunces), "Fraunces", "GT Super", Georgia,
141
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-serif, serif;
142
+ --font-mono: var(--font-jetbrains-mono), "JetBrains Mono", ui-monospace, monospace;
143
+ --font-weight-heading: 350;
144
+
145
+ /* Motion */
146
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
147
+ --motion-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
148
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
149
+ --motion-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
150
+ --duration-micro: 80ms;
151
+ --motion-duration-micro: 80ms;
152
+ --duration-flow: 180ms;
153
+ --motion-duration-flow: 180ms;
154
+ --duration-reveal: 180ms;
155
+ --motion-duration-reveal: 180ms;
156
+ --duration-cinematic: 320ms;
157
+ --motion-duration-cinematic: 320ms;
158
+
159
+ /* Spacing */
160
+ --space-source-xs: 0.5rem;
161
+ --space-source-sm: 1rem;
162
+ --space-source-md: 1.25rem;
163
+ --space-source-lg: 1.5rem;
164
+ --space-source-xl: 2rem;
165
+ --space-source-2xl: 3rem;
166
+
167
+ /* Taxonomy / decorative (not product CTA) */
168
+ --brand-category-linen-canvas: #f7f5f3;
169
+ --brand-category-ink-black: #0d0d0d;
170
+ --brand-category-paper-white: #ffffff;
171
+ --brand-category-stone: #6e6a69;
172
+ --brand-category-pebble: #9a9796;
26
173
  }
27
174
 
28
- @font-face {
29
- font-family: "Mori";
30
- src: url("/brand-assets/mori-semibold.woff2") format("woff2");
31
- font-weight: 600;
32
- font-display: swap;
175
+ .dark,
176
+ html.dark[data-brand="cosmos"] {
177
+ /* ── Color roles (carrier) ── */
178
+ --role-canvas: 0 0% 5%;
179
+ --role-canvas-fg: 30 20% 96%;
180
+ --role-surface: 0 0% 11%;
181
+ --role-surface-fg: 30 20% 96%;
182
+ --role-action: 30 20% 96%;
183
+ --role-action-fg: 0 0% 5%;
184
+ --role-quiet: 0 0% 14%;
185
+ --role-quiet-fg: 30 20% 96%;
186
+ --role-muted: 0 0% 11%;
187
+ --role-muted-fg: 15 2% 60%;
188
+ --role-border: 0 1% 18%;
189
+ --role-input: 0 1% 18%;
190
+ --role-ring: 30 20% 96%;
191
+ --role-brand: 30 20% 96%;
192
+ --role-brand-fg: 0 0% 5%;
193
+ --brand-mark: 30 20% 96%;
194
+ --brand-mark-foreground: 0 0% 5%;
195
+
196
+ /* ── shadcn bridge (primary = action CTA) ── */
197
+ --background: 0 0% 5%;
198
+ --foreground: 30 20% 96%;
199
+ --card: 0 0% 11%;
200
+ --card-foreground: 30 20% 96%;
201
+ --popover: 0 0% 11%;
202
+ --popover-foreground: 30 20% 96%;
203
+ --primary: 30 20% 96%;
204
+ --primary-foreground: 0 0% 5%;
205
+ --secondary: 0 0% 14%;
206
+ --secondary-foreground: 30 20% 96%;
207
+ --muted: 0 0% 11%;
208
+ --muted-foreground: 15 2% 60%;
209
+ --accent: 30 20% 96%;
210
+ --accent-foreground: 0 0% 5%;
211
+ --destructive: 4 76% 40%;
212
+ --destructive-foreground: 0 0% 100%;
213
+ --border: 0 1% 18%;
214
+ --input: 0 1% 18%;
215
+ --ring: 30 20% 96%;
216
+ --success: 134 62% 40%;
217
+ --success-foreground: 0 0% 100%;
218
+ --info: 12 2% 42%;
219
+ --info-foreground: 0 0% 100%;
220
+ --sidebar: 0 0% 11%;
221
+ --sidebar-foreground: 30 20% 96%;
222
+ --sidebar-primary: 30 20% 96%;
223
+ --sidebar-primary-foreground: 0 0% 5%;
224
+ --sidebar-accent: 30 20% 96%;
225
+ --sidebar-accent-foreground: 0 0% 5%;
226
+ --sidebar-border: 0 1% 18%;
227
+ --sidebar-ring: 30 20% 96%;
228
+ --brand-primary: hsl(30 20% 96%);
229
+ --brand-accent: hsl(30 20% 96%);
230
+ --brand-accent-foreground: hsl(0 0% 5%);
231
+ --brand-tertiary: hsl(30 20% 96%);
232
+ --brand-gradient: hsl(var(--primary));
233
+ --brand-gradient-reverse: hsl(var(--primary));
234
+ --brand-gradient-vertical: hsl(var(--primary));
235
+ --brand-gradient-radial: hsl(var(--primary));
236
+
237
+ /* ── Neutral ramp, anchored on this language's roles ── */
238
+ --neutral-1: hsl(0 0% 5%);
239
+ --neutral-2: hsl(0 0% 11%);
240
+ --neutral-3: color-mix(in oklab, hsl(0 1% 18%) 20%, hsl(0 0% 11%));
241
+ --neutral-4: color-mix(in oklab, hsl(0 1% 18%) 40%, hsl(0 0% 11%));
242
+ --neutral-5: color-mix(in oklab, hsl(0 1% 18%) 60%, hsl(0 0% 11%));
243
+ --neutral-6: color-mix(in oklab, hsl(0 1% 18%) 80%, hsl(0 0% 11%));
244
+ --neutral-7: hsl(0 1% 18%);
245
+ --neutral-8: color-mix(in oklab, hsl(15 2% 60%) 25%, hsl(0 1% 18%));
246
+ --neutral-9: color-mix(in oklab, hsl(15 2% 60%) 50%, hsl(0 1% 18%));
247
+ --neutral-10: color-mix(in oklab, hsl(15 2% 60%) 75%, hsl(0 1% 18%));
248
+ --neutral-11: hsl(15 2% 60%);
249
+ --neutral-12: hsl(30 20% 96%);
33
250
  }
34
251
 
252
+ /**
253
+ * Brand carrier skin: GSAP (gsap) v1.0.0
254
+ * darkDefault=true dualMode=false button=gradient-stroke
255
+ * fonts=0 mode=global
256
+ * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
257
+ */
258
+
35
259
  html[data-brand="gsap"] {
36
260
  /* ── Color roles (carrier) ── */
37
261
  --role-canvas: 150 7% 6%;
@@ -80,17 +304,35 @@ html[data-brand="gsap"] {
80
304
  --sidebar-accent-foreground: 54 100% 94%;
81
305
  --sidebar-border: 70 5% 25%;
82
306
  --sidebar-ring: 137 92% 47%;
307
+ --brand-primary: hsl(137 92% 47%);
308
+ --brand-accent: hsl(137 92% 47%);
309
+ --brand-accent-foreground: hsl(150 7% 6%);
310
+ --brand-tertiary: hsl(137 92% 47%);
83
311
  --brand-gradient: hsl(var(--primary));
84
312
  --brand-gradient-reverse: hsl(var(--primary));
85
313
  --brand-gradient-vertical: hsl(var(--primary));
86
314
  --brand-gradient-radial: hsl(var(--primary));
87
315
 
316
+ /* ── Neutral ramp, anchored on this language's roles ── */
317
+ --neutral-1: hsl(150 7% 6%);
318
+ --neutral-2: hsl(0 0% 10%);
319
+ --neutral-3: color-mix(in oklab, hsl(70 5% 25%) 20%, hsl(0 0% 10%));
320
+ --neutral-4: color-mix(in oklab, hsl(70 5% 25%) 40%, hsl(0 0% 10%));
321
+ --neutral-5: color-mix(in oklab, hsl(70 5% 25%) 60%, hsl(0 0% 10%));
322
+ --neutral-6: color-mix(in oklab, hsl(70 5% 25%) 80%, hsl(0 0% 10%));
323
+ --neutral-7: hsl(70 5% 25%);
324
+ --neutral-8: color-mix(in oklab, hsl(60 6% 46%) 25%, hsl(70 5% 25%));
325
+ --neutral-9: color-mix(in oklab, hsl(60 6% 46%) 50%, hsl(70 5% 25%));
326
+ --neutral-10: color-mix(in oklab, hsl(60 6% 46%) 75%, hsl(70 5% 25%));
327
+ --neutral-11: hsl(60 6% 46%);
328
+ --neutral-12: hsl(54 100% 94%);
329
+
88
330
  /* Recipe (action language + free elev/radii) */
89
331
  /* Shape slots */
90
332
  --btn-default-radius: 100px;
91
333
  --radius-button: 100px;
92
334
  --radius-buttons: 100px;
93
- --radius-md: 100px;
335
+ --radius-md: min(100px, 8px);
94
336
  --radius-card: 8px;
95
337
  --radius-lg: 8px;
96
338
  --radius-badge: 9999px;
@@ -103,10 +345,10 @@ html[data-brand="gsap"] {
103
345
  --elevation-card: 0 0 #0000;
104
346
  --elevation-control: 0 0 #0000;
105
347
  --elevation-raised: 0 0 #0000;
106
- --shadow-xs: 0 0 #0000;
107
- --shadow-sm: 0 0 #0000;
108
- --shadow-md: 0 0 #0000;
109
- --shadow-lg: 0 0 #0000;
348
+ --elevation-xs: 0 0 #0000;
349
+ --elevation-sm: 0 0 #0000;
350
+ --elevation-md: 0 0 #0000;
351
+ --elevation-lg: 0 0 #0000;
110
352
  --btn-default-shadow: 0 0 #0000;
111
353
  --btn-default-bg: transparent;
112
354
  --btn-default-fg: hsl(var(--foreground));
@@ -124,52 +366,49 @@ html[data-brand="gsap"] {
124
366
  --control-height-sm: 1.75rem;
125
367
  --control-height-md: 2rem;
126
368
  --control-height-lg: 2.5rem;
369
+ --control-height-icon-sm: 1.5rem;
370
+ --control-height-icon-md: 1.75rem;
371
+ --control-height-icon-lg: 2rem;
127
372
  --control-font-size-md: 0.8125rem;
128
373
 
129
374
  /* Typography */
130
- --font-sans: "Mori", "Inter Tight", "DM Sans", ui-sans-serif, system-ui, sans-serif;
131
- --font-heading: "Mori", "Inter Tight", ui-sans-serif, system-ui, sans-serif;
132
- --font-display: "Mori", "Inter Tight", ui-sans-serif, system-ui, sans-serif;
375
+ --font-sans:
376
+ var(--font-reg-inter-tight), "Mori", "Inter Tight", "DM Sans",
377
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-sans-serif, system-ui, sans-serif;
378
+ --font-cn:
379
+ var(--font-reg-inter-tight), "Mori", "Inter Tight", "DM Sans",
380
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-sans-serif, system-ui, sans-serif;
381
+ --font-heading:
382
+ var(--font-reg-inter-tight), "Mori", "Inter Tight", var(--font-noto-sans-sc, "Noto Sans SC"),
383
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
384
+ --font-display:
385
+ var(--font-reg-inter-tight), "Mori", "Inter Tight", var(--font-noto-sans-sc, "Noto Sans SC"),
386
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
133
387
  --font-weight-heading: 600;
134
388
 
135
- /* Zone type scales */
136
- --zone-product-caption-size: 14px;
137
- --zone-product-caption-leading: 1.4;
138
- --zone-product-caption-tracking: -0.14px;
139
- --zone-product-caption-weight: 400;
140
- --zone-product-body-sm-size: 16px;
141
- --zone-product-body-sm-leading: 1.15;
142
- --zone-product-body-sm-weight: 400;
143
- --zone-product-body-size: 19px;
144
- --zone-product-body-leading: 1.15;
145
- --zone-product-body-weight: 400;
146
- --zone-product-body-lg-size: 23px;
147
- --zone-product-body-lg-leading: 1.38;
148
- --zone-product-body-lg-tracking: -0.23px;
149
- --zone-product-body-lg-weight: 400;
150
- --zone-product-subheading-size: 34px;
151
- --zone-product-subheading-leading: 1.2;
152
- --zone-product-subheading-tracking: -0.34px;
153
- --zone-product-subheading-weight: 400;
154
- --zone-product-heading-size: 44px;
155
- --zone-product-heading-leading: 1.2;
156
- --zone-product-heading-tracking: -0.44px;
157
- --zone-product-heading-weight: 600;
158
- --zone-marketing-body-size: 19px;
159
- --zone-marketing-body-leading: 1.15;
160
- --zone-marketing-body-weight: 400;
161
- --zone-marketing-heading-size: 66px;
162
- --zone-marketing-heading-leading: 1.2;
163
- --zone-marketing-heading-tracking: -0.66px;
164
- --zone-marketing-heading-weight: 600;
165
- --zone-marketing-heading-lg-size: 101px;
166
- --zone-marketing-heading-lg-leading: 1;
167
- --zone-marketing-heading-lg-tracking: -1.11px;
168
- --zone-marketing-heading-lg-weight: 600;
169
- --zone-marketing-display-size: 224px;
170
- --zone-marketing-display-leading: 0.9;
171
- --zone-marketing-display-tracking: -4.48px;
172
- --zone-marketing-display-weight: 600;
389
+ /* Motion */
390
+ --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
391
+ --motion-ease-out: cubic-bezier(0.22, 1, 0.36, 1);
392
+ --ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
393
+ --motion-ease-in-out: cubic-bezier(0.65, 0, 0.35, 1);
394
+ --ease-spring: cubic-bezier(0.68, -0.55, 0.265, 1.55);
395
+ --motion-ease-spring: cubic-bezier(0.68, -0.55, 0.265, 1.55);
396
+ --duration-micro: 120ms;
397
+ --motion-duration-micro: 120ms;
398
+ --duration-flow: 250ms;
399
+ --motion-duration-flow: 250ms;
400
+ --duration-reveal: 400ms;
401
+ --motion-duration-reveal: 400ms;
402
+ --duration-cinematic: 700ms;
403
+ --motion-duration-cinematic: 700ms;
404
+
405
+ /* Spacing */
406
+ --space-source-xs: 0.5rem;
407
+ --space-source-sm: 0.875rem;
408
+ --space-source-md: 1.25rem;
409
+ --space-source-lg: 1.75rem;
410
+ --space-source-xl: 2.5rem;
411
+ --space-source-2xl: 3.5rem;
173
412
 
174
413
  /* Taxonomy / decorative (not product CTA) */
175
414
  --brand-category-gsap: #0ae448;
@@ -180,98 +419,13 @@ html[data-brand="gsap"] {
180
419
  --brand-category-other: #abff84;
181
420
  }
182
421
 
183
- /* Zone: product — product never inherits marketing display */
184
- [data-zone="product"],
185
- .zone-product {
186
- font-size: var(--zone-product-body-size, 19px);
187
- line-height: var(--zone-product-body-leading, 1.15);
188
- font-weight: var(--zone-product-body-weight, 400);
189
- --text-caption: var(--zone-product-caption-size, inherit);
190
- --leading-caption: var(--zone-product-caption-leading, inherit);
191
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
192
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
193
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
194
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
195
- --text-body: var(--zone-product-body-size, inherit);
196
- --leading-body: var(--zone-product-body-leading, inherit);
197
- --tracking-body: var(--zone-product-body-tracking, inherit);
198
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
199
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
200
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
201
- --text-subheading: var(--zone-product-subheading-size, inherit);
202
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
203
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
204
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
205
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
206
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
207
- --text-heading: var(--zone-product-heading-size, inherit);
208
- --leading-heading: var(--zone-product-heading-leading, inherit);
209
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
210
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
211
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
212
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
213
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
214
- --leading-display: var(--zone-product-display-leading, inherit);
215
- --tracking-display: var(--zone-product-display-tracking, inherit);
216
- }
217
-
218
- /* Zone: marketing — product never inherits marketing display */
219
- [data-zone="marketing"],
220
- .zone-marketing {
221
- font-size: var(--zone-marketing-body-size, 19px);
222
- line-height: var(--zone-marketing-body-leading, 1.15);
223
- font-weight: var(--zone-marketing-body-weight, 400);
224
- --text-caption: var(--zone-marketing-caption-size, inherit);
225
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
226
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
227
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
228
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
229
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
230
- --text-body: var(--zone-marketing-body-size, inherit);
231
- --leading-body: var(--zone-marketing-body-leading, inherit);
232
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
233
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
234
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
235
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
236
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
237
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
238
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
239
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
240
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
241
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
242
- --text-heading: var(--zone-marketing-heading-size, inherit);
243
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
244
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
245
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
246
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
247
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
248
- --text-display: var(--zone-marketing-display-size, inherit);
249
- --leading-display: var(--zone-marketing-display-leading, inherit);
250
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
251
- }
252
-
253
- /* Product chrome must not use decorative gradients as action fills */
254
- [data-zone="product"] .btn-brand-default,
255
- .zone-product .btn-brand-default {
256
- /* intentional no-op: documents contract; action uses --primary only */
257
- }
258
-
259
422
  /**
260
423
  * Brand carrier skin: Linear (linear) v1.0.0
261
424
  * darkDefault=true dualMode=true button=solid
262
- * fonts=1 zones=yes mode=global
425
+ * fonts=0 mode=global
263
426
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
264
427
  */
265
428
 
266
- /* Brand font faces */
267
- @font-face {
268
- font-family: "Inter Variable";
269
- src: url("https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2")
270
- format("woff2");
271
- font-weight: 100 900;
272
- font-display: swap;
273
- }
274
-
275
429
  html[data-brand="linear"] {
276
430
  /* ── Color roles (carrier) ── */
277
431
  --role-canvas: 0 0% 100%;
@@ -285,7 +439,7 @@ html[data-brand="linear"] {
285
439
  --role-muted: 220 14% 96%;
286
440
  --role-muted-fg: 218 5% 41%;
287
441
  --role-border: 220 13% 91%;
288
- --role-input: 0 0% 100%;
442
+ --role-input: 220 13% 91%;
289
443
  --role-ring: 64 89% 54%;
290
444
 
291
445
  /* ── shadcn bridge (primary = action CTA) ── */
@@ -306,7 +460,7 @@ html[data-brand="linear"] {
306
460
  --destructive: 0 79% 63%;
307
461
  --destructive-foreground: 0 0% 100%;
308
462
  --border: 220 13% 91%;
309
- --input: 0 0% 100%;
463
+ --input: 220 13% 91%;
310
464
  --ring: 64 89% 54%;
311
465
  --success: 134 62% 40%;
312
466
  --success-foreground: 0 0% 100%;
@@ -320,17 +474,35 @@ html[data-brand="linear"] {
320
474
  --sidebar-accent-foreground: 210 11% 4%;
321
475
  --sidebar-border: 220 13% 91%;
322
476
  --sidebar-ring: 64 89% 54%;
477
+ --brand-primary: hsl(64 89% 54%);
478
+ --brand-accent: hsl(64 89% 54%);
479
+ --brand-accent-foreground: hsl(210 11% 4%);
480
+ --brand-tertiary: hsl(64 89% 54%);
323
481
  --brand-gradient: hsl(var(--primary));
324
482
  --brand-gradient-reverse: hsl(var(--primary));
325
483
  --brand-gradient-vertical: hsl(var(--primary));
326
484
  --brand-gradient-radial: hsl(var(--primary));
327
485
 
486
+ /* ── Neutral ramp, anchored on this language's roles ── */
487
+ --neutral-1: hsl(0 0% 100%);
488
+ --neutral-2: hsl(0 0% 98%);
489
+ --neutral-3: color-mix(in oklab, hsl(220 13% 91%) 20%, hsl(0 0% 98%));
490
+ --neutral-4: color-mix(in oklab, hsl(220 13% 91%) 40%, hsl(0 0% 98%));
491
+ --neutral-5: color-mix(in oklab, hsl(220 13% 91%) 60%, hsl(0 0% 98%));
492
+ --neutral-6: color-mix(in oklab, hsl(220 13% 91%) 80%, hsl(0 0% 98%));
493
+ --neutral-7: hsl(220 13% 91%);
494
+ --neutral-8: color-mix(in oklab, hsl(218 5% 41%) 25%, hsl(220 13% 91%));
495
+ --neutral-9: color-mix(in oklab, hsl(218 5% 41%) 50%, hsl(220 13% 91%));
496
+ --neutral-10: color-mix(in oklab, hsl(218 5% 41%) 75%, hsl(220 13% 91%));
497
+ --neutral-11: hsl(218 5% 41%);
498
+ --neutral-12: hsl(210 11% 4%);
499
+
328
500
  /* Recipe (action language + free elev/radii) */
329
501
  /* Shape slots */
330
502
  --btn-default-radius: 6px;
331
503
  --radius-button: 6px;
332
504
  --radius-buttons: 6px;
333
- --radius-md: 6px;
505
+ --radius-md: min(6px, 12px);
334
506
  --radius-card: 12px;
335
507
  --radius-lg: 12px;
336
508
  --radius-badge: 9999px;
@@ -340,19 +512,19 @@ html[data-brand="linear"] {
340
512
  --radius-pill: 9999px;
341
513
 
342
514
  /* Free elevation (carrier-provided CSS shadows) */
343
- --elevation-card: var(--shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
344
- --elevation-control: var(--shadow-xs, 0 1px 2px 0 rgb(0 0 0 / 0.04));
345
- --elevation-raised: var(--shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
346
- --shadow-xs: var(--shadow-xs, 0 1px 2px 0 rgb(0 0 0 / 0.04));
347
- --shadow-sm: var(--shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
348
- --shadow-md: var(--shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
349
- --shadow-lg: var(--shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1));
515
+ --elevation-card: 0 1px 2px 0 rgb(0 0 0 / 0.05);
516
+ --elevation-control: 0 1px 2px 0 rgb(0 0 0 / 0.04);
517
+ --elevation-raised: 0 4px 6px -1px rgb(0 0 0 / 0.1);
518
+ --elevation-xs: 0 1px 2px 0 rgb(0 0 0 / 0.04);
519
+ --elevation-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
520
+ --elevation-md: 0 4px 6px -1px rgb(0 0 0 / 0.1);
521
+ --elevation-lg: 0 4px 6px -1px rgb(0 0 0 / 0.1);
350
522
  --btn-default-shadow: 0 0 #0000;
351
523
  --btn-default-bg: hsl(var(--primary));
352
524
  --btn-default-fg: hsl(var(--primary-foreground));
353
525
  --btn-default-border-width: 0px;
354
526
  --btn-default-border: transparent;
355
- --btn-default-stroke-gradient: transparent;
527
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
356
528
  --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
357
529
  --badge-default-bg: hsl(var(--primary));
358
530
  --badge-default-fg: hsl(var(--primary-foreground));
@@ -364,47 +536,49 @@ html[data-brand="linear"] {
364
536
  --control-height-sm: 1.75rem;
365
537
  --control-height-md: 2rem;
366
538
  --control-height-lg: 2.5rem;
539
+ --control-height-icon-sm: 1.5rem;
540
+ --control-height-icon-md: 1.75rem;
541
+ --control-height-icon-lg: 2rem;
367
542
  --control-font-size-md: 0.8125rem;
368
543
 
369
544
  /* Typography */
370
- --font-sans: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif;
371
- --font-heading: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif;
372
- --font-display: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif;
373
- --font-mono: "Berkeley Mono", "JetBrains Mono", ui-monospace, monospace;
545
+ --font-sans:
546
+ var(--font-inter), "Inter Variable", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
547
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
548
+ --font-cn:
549
+ var(--font-inter), "Inter Variable", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
550
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
551
+ --font-heading:
552
+ var(--font-inter), "Inter Variable", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
553
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
554
+ --font-display:
555
+ var(--font-inter), "Inter Variable", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
556
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
557
+ --font-mono:
558
+ var(--font-jetbrains-mono), "Berkeley Mono", "JetBrains Mono", ui-monospace, monospace;
374
559
  --font-weight-heading: 510;
375
560
 
376
- /* Zone type scales */
377
- --zone-product-caption-size: 13px;
378
- --zone-product-caption-leading: 1.2;
379
- --zone-product-caption-weight: 400;
380
- --zone-product-body-sm-size: 14px;
381
- --zone-product-body-sm-leading: 1.5;
382
- --zone-product-body-sm-weight: 400;
383
- --zone-product-body-size: 14px;
384
- --zone-product-body-leading: 1.5;
385
- --zone-product-body-weight: 400;
386
- --zone-product-body-lg-size: 16px;
387
- --zone-product-body-lg-leading: 1.5;
388
- --zone-product-body-lg-weight: 400;
389
- --zone-product-heading-size: 24px;
390
- --zone-product-heading-leading: 1.25;
391
- --zone-product-heading-tracking: -0.012em;
392
- --zone-product-heading-weight: 510;
393
- --zone-product-display-size: 32px;
394
- --zone-product-display-leading: 1.15;
395
- --zone-product-display-tracking: -0.022em;
396
- --zone-product-display-weight: 510;
397
- --zone-marketing-body-size: 15px;
398
- --zone-marketing-body-leading: 1.6;
399
- --zone-marketing-body-weight: 400;
400
- --zone-marketing-heading-size: 48px;
401
- --zone-marketing-heading-leading: 1;
402
- --zone-marketing-heading-tracking: -0.022em;
403
- --zone-marketing-heading-weight: 510;
404
- --zone-marketing-display-size: 72px;
405
- --zone-marketing-display-leading: 1;
406
- --zone-marketing-display-tracking: -0.022em;
407
- --zone-marketing-display-weight: 510;
561
+ /* Motion */
562
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
563
+ --motion-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
564
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
565
+ --motion-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
566
+ --duration-micro: 80ms;
567
+ --motion-duration-micro: 80ms;
568
+ --duration-flow: 140ms;
569
+ --motion-duration-flow: 140ms;
570
+ --duration-reveal: 200ms;
571
+ --motion-duration-reveal: 200ms;
572
+ --duration-cinematic: 320ms;
573
+ --motion-duration-cinematic: 320ms;
574
+
575
+ /* Spacing */
576
+ --space-source-xs: 0.375rem;
577
+ --space-source-sm: 0.5rem;
578
+ --space-source-md: 0.75rem;
579
+ --space-source-lg: 1rem;
580
+ --space-source-xl: 1.5rem;
581
+ --space-source-2xl: 2rem;
408
582
  }
409
583
 
410
584
  .dark,
@@ -456,111 +630,37 @@ html.dark[data-brand="linear"] {
456
630
  --sidebar-accent-foreground: 218 21% 85%;
457
631
  --sidebar-border: 223 9% 15%;
458
632
  --sidebar-ring: 64 89% 54%;
633
+ --brand-primary: hsl(64 89% 54%);
634
+ --brand-accent: hsl(64 89% 54%);
635
+ --brand-accent-foreground: hsl(210 11% 4%);
636
+ --brand-tertiary: hsl(64 89% 54%);
459
637
  --brand-gradient: hsl(var(--primary));
460
638
  --brand-gradient-reverse: hsl(var(--primary));
461
639
  --brand-gradient-vertical: hsl(var(--primary));
462
640
  --brand-gradient-radial: hsl(var(--primary));
463
- }
464
-
465
- /* Zone: product — product never inherits marketing display */
466
- [data-zone="product"],
467
- .zone-product {
468
- font-size: var(--zone-product-body-size, 14px);
469
- line-height: var(--zone-product-body-leading, 1.5);
470
- font-weight: var(--zone-product-body-weight, 400);
471
- --text-caption: var(--zone-product-caption-size, inherit);
472
- --leading-caption: var(--zone-product-caption-leading, inherit);
473
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
474
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
475
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
476
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
477
- --text-body: var(--zone-product-body-size, inherit);
478
- --leading-body: var(--zone-product-body-leading, inherit);
479
- --tracking-body: var(--zone-product-body-tracking, inherit);
480
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
481
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
482
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
483
- --text-subheading: var(--zone-product-subheading-size, inherit);
484
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
485
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
486
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
487
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
488
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
489
- --text-heading: var(--zone-product-heading-size, inherit);
490
- --leading-heading: var(--zone-product-heading-leading, inherit);
491
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
492
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
493
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
494
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
495
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
496
- --leading-display: var(--zone-product-display-leading, inherit);
497
- --tracking-display: var(--zone-product-display-tracking, inherit);
498
- }
499
641
 
500
- /* Zone: marketing — product never inherits marketing display */
501
- [data-zone="marketing"],
502
- .zone-marketing {
503
- font-size: var(--zone-marketing-body-size, 15px);
504
- line-height: var(--zone-marketing-body-leading, 1.6);
505
- font-weight: var(--zone-marketing-body-weight, 400);
506
- --text-caption: var(--zone-marketing-caption-size, inherit);
507
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
508
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
509
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
510
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
511
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
512
- --text-body: var(--zone-marketing-body-size, inherit);
513
- --leading-body: var(--zone-marketing-body-leading, inherit);
514
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
515
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
516
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
517
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
518
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
519
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
520
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
521
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
522
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
523
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
524
- --text-heading: var(--zone-marketing-heading-size, inherit);
525
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
526
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
527
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
528
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
529
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
530
- --text-display: var(--zone-marketing-display-size, inherit);
531
- --leading-display: var(--zone-marketing-display-leading, inherit);
532
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
533
- }
534
-
535
- /* Product chrome must not use decorative gradients as action fills */
536
- [data-zone="product"] .btn-brand-default,
537
- .zone-product .btn-brand-default {
538
- /* intentional no-op: documents contract; action uses --primary only */
642
+ /* ── Neutral ramp, anchored on this language's roles ── */
643
+ --neutral-1: hsl(210 11% 4%);
644
+ --neutral-2: hsl(210 6% 6%);
645
+ --neutral-3: color-mix(in oklab, hsl(223 9% 15%) 20%, hsl(210 6% 6%));
646
+ --neutral-4: color-mix(in oklab, hsl(223 9% 15%) 40%, hsl(210 6% 6%));
647
+ --neutral-5: color-mix(in oklab, hsl(223 9% 15%) 60%, hsl(210 6% 6%));
648
+ --neutral-6: color-mix(in oklab, hsl(223 9% 15%) 80%, hsl(210 6% 6%));
649
+ --neutral-7: hsl(223 9% 15%);
650
+ --neutral-8: color-mix(in oklab, hsl(218 5% 41%) 25%, hsl(223 9% 15%));
651
+ --neutral-9: color-mix(in oklab, hsl(218 5% 41%) 50%, hsl(223 9% 15%));
652
+ --neutral-10: color-mix(in oklab, hsl(218 5% 41%) 75%, hsl(223 9% 15%));
653
+ --neutral-11: hsl(218 5% 41%);
654
+ --neutral-12: hsl(0 0% 100%);
539
655
  }
540
656
 
541
657
  /**
542
658
  * Brand carrier skin: Notion (notion) v1.0.0
543
659
  * darkDefault=false dualMode=false button=solid
544
- * fonts=2 zones=yes mode=global
660
+ * fonts=0 mode=global
545
661
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
546
662
  */
547
663
 
548
- /* Brand font faces */
549
- @font-face {
550
- font-family: "NotionInter";
551
- src: url("https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2")
552
- format("woff2");
553
- font-weight: 100 900;
554
- font-display: swap;
555
- }
556
-
557
- @font-face {
558
- font-family: "Lyon Text";
559
- src: url("/brand-assets/lyon-text-regular.woff2") format("woff2");
560
- font-weight: 400;
561
- font-display: swap;
562
- }
563
-
564
664
  html[data-brand="notion"] {
565
665
  /* ── Color roles (carrier) ── */
566
666
  --role-canvas: 30 10% 96%;
@@ -572,9 +672,9 @@ html[data-brand="notion"] {
572
672
  --role-quiet: 208 92% 95%;
573
673
  --role-quiet-fg: 208 100% 44%;
574
674
  --role-muted: 208 92% 95%;
575
- --role-muted-fg: 0 0% 46%;
675
+ --role-muted-fg: 0 0% 43%;
576
676
  --role-border: 30 5% 88%;
577
- --role-input: 0 0% 100%;
677
+ --role-input: 30 5% 88%;
578
678
  --role-ring: 208 100% 44%;
579
679
  --role-brand: 0 0% 0%;
580
680
  --role-brand-fg: 0 0% 100%;
@@ -593,13 +693,13 @@ html[data-brand="notion"] {
593
693
  --secondary: 208 92% 95%;
594
694
  --secondary-foreground: 208 100% 44%;
595
695
  --muted: 208 92% 95%;
596
- --muted-foreground: 0 0% 46%;
696
+ --muted-foreground: 0 0% 43%;
597
697
  --accent: 0 0% 0%;
598
698
  --accent-foreground: 0 0% 100%;
599
699
  --destructive: 7 92% 58%;
600
700
  --destructive-foreground: 0 0% 100%;
601
701
  --border: 30 5% 88%;
602
- --input: 0 0% 100%;
702
+ --input: 30 5% 88%;
603
703
  --ring: 208 100% 44%;
604
704
  --warning: 40 100% 53%;
605
705
  --warning-foreground: 0 0% 0%;
@@ -613,17 +713,35 @@ html[data-brand="notion"] {
613
713
  --sidebar-accent-foreground: 0 0% 100%;
614
714
  --sidebar-border: 30 5% 88%;
615
715
  --sidebar-ring: 208 100% 44%;
716
+ --brand-primary: hsl(0 0% 0%);
717
+ --brand-accent: hsl(208 100% 44%);
718
+ --brand-accent-foreground: hsl(0 0% 100%);
719
+ --brand-tertiary: hsl(208 100% 44%);
616
720
  --brand-gradient: hsl(var(--primary));
617
721
  --brand-gradient-reverse: hsl(var(--primary));
618
722
  --brand-gradient-vertical: hsl(var(--primary));
619
723
  --brand-gradient-radial: hsl(var(--primary));
620
724
 
725
+ /* ── Neutral ramp, anchored on this language's roles ── */
726
+ --neutral-1: hsl(30 10% 96%);
727
+ --neutral-2: hsl(0 0% 100%);
728
+ --neutral-3: color-mix(in oklab, hsl(30 5% 88%) 20%, hsl(0 0% 100%));
729
+ --neutral-4: color-mix(in oklab, hsl(30 5% 88%) 40%, hsl(0 0% 100%));
730
+ --neutral-5: color-mix(in oklab, hsl(30 5% 88%) 60%, hsl(0 0% 100%));
731
+ --neutral-6: color-mix(in oklab, hsl(30 5% 88%) 80%, hsl(0 0% 100%));
732
+ --neutral-7: hsl(30 5% 88%);
733
+ --neutral-8: color-mix(in oklab, hsl(0 0% 43%) 25%, hsl(30 5% 88%));
734
+ --neutral-9: color-mix(in oklab, hsl(0 0% 43%) 50%, hsl(30 5% 88%));
735
+ --neutral-10: color-mix(in oklab, hsl(0 0% 43%) 75%, hsl(30 5% 88%));
736
+ --neutral-11: hsl(0 0% 43%);
737
+ --neutral-12: hsl(0 0% 0%);
738
+
621
739
  /* Recipe (action language + free elev/radii) */
622
740
  /* Shape slots */
623
741
  --btn-default-radius: 8px;
624
742
  --radius-button: 8px;
625
743
  --radius-buttons: 8px;
626
- --radius-md: 8px;
744
+ --radius-md: min(8px, 12px);
627
745
  --radius-card: 12px;
628
746
  --radius-lg: 12px;
629
747
  --radius-badge: 9999px;
@@ -636,16 +754,16 @@ html[data-brand="notion"] {
636
754
  --elevation-card: 0 0 #0000;
637
755
  --elevation-control: 0 0 #0000;
638
756
  --elevation-raised: 0px 0.7px 1.462px 0px rgb(0 0 0 / 0.015), 0px 3px 9px 0px rgb(0 0 0 / 0.03);
639
- --shadow-xs: 0 0 #0000;
640
- --shadow-sm: 0 0 #0000;
641
- --shadow-md: 0px 0.7px 1.462px 0px rgb(0 0 0 / 0.015), 0px 3px 9px 0px rgb(0 0 0 / 0.03);
642
- --shadow-lg: 0px 0.7px 1.462px 0px rgb(0 0 0 / 0.015), 0px 3px 9px 0px rgb(0 0 0 / 0.03);
757
+ --elevation-xs: 0 0 #0000;
758
+ --elevation-sm: 0 0 #0000;
759
+ --elevation-md: 0px 0.7px 1.462px 0px rgb(0 0 0 / 0.015), 0px 3px 9px 0px rgb(0 0 0 / 0.03);
760
+ --elevation-lg: 0px 0.7px 1.462px 0px rgb(0 0 0 / 0.015), 0px 3px 9px 0px rgb(0 0 0 / 0.03);
643
761
  --btn-default-shadow: 0 0 #0000;
644
762
  --btn-default-bg: hsl(var(--primary));
645
763
  --btn-default-fg: hsl(var(--primary-foreground));
646
764
  --btn-default-border-width: 0px;
647
765
  --btn-default-border: transparent;
648
- --btn-default-stroke-gradient: transparent;
766
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
649
767
  --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
650
768
  --badge-default-bg: hsl(var(--secondary));
651
769
  --badge-default-fg: hsl(var(--secondary-foreground));
@@ -653,46 +771,41 @@ html[data-brand="notion"] {
653
771
  --badge-default-hover-bg: color-mix(in srgb, hsl(var(--secondary)) 90%, white);
654
772
 
655
773
  /* Typography */
656
- --font-sans: "NotionInter", "Inter", ui-sans-serif, system-ui, sans-serif;
657
- --font-heading: "NotionInter", "Inter", ui-sans-serif, system-ui, sans-serif;
658
- --font-display: "NotionInter", "Inter", ui-sans-serif, system-ui, sans-serif;
774
+ --font-sans:
775
+ var(--font-inter), "NotionInter", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
776
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
777
+ --font-cn:
778
+ var(--font-inter), "NotionInter", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
779
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
780
+ --font-heading:
781
+ var(--font-inter), "NotionInter", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
782
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
783
+ --font-display:
784
+ var(--font-inter), "NotionInter", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
785
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
659
786
  --font-weight-heading: 700;
660
787
 
661
- /* Zone type scales */
662
- --zone-product-caption-size: 12px;
663
- --zone-product-caption-leading: 1.33;
664
- --zone-product-caption-tracking: 0.12px;
665
- --zone-product-caption-weight: 500;
666
- --zone-product-body-sm-size: 14px;
667
- --zone-product-body-sm-leading: 1.43;
668
- --zone-product-body-sm-weight: 500;
669
- --zone-product-body-size: 16px;
670
- --zone-product-body-leading: 1.5;
671
- --zone-product-body-weight: 400;
672
- --zone-product-subheading-size: 20px;
673
- --zone-product-subheading-leading: 1;
674
- --zone-product-subheading-weight: 500;
675
- --zone-product-heading-sm-size: 22px;
676
- --zone-product-heading-sm-leading: 1.27;
677
- --zone-product-heading-sm-tracking: -0.242px;
678
- --zone-product-heading-sm-weight: 600;
679
- --zone-product-heading-size: 40px;
680
- --zone-product-heading-leading: 1.5;
681
- --zone-product-heading-weight: 600;
682
- --zone-marketing-body-size: 16px;
683
- --zone-marketing-body-leading: 1.5;
684
- --zone-marketing-body-weight: 400;
685
- --zone-marketing-heading-size: 48px;
686
- --zone-marketing-heading-leading: 1.5;
687
- --zone-marketing-heading-weight: 700;
688
- --zone-marketing-heading-lg-size: 54px;
689
- --zone-marketing-heading-lg-leading: 1.04;
690
- --zone-marketing-heading-lg-tracking: -1.89px;
691
- --zone-marketing-heading-lg-weight: 700;
692
- --zone-marketing-display-size: 72px;
693
- --zone-marketing-display-leading: 1.21;
694
- --zone-marketing-display-tracking: -2.016px;
695
- --zone-marketing-display-weight: 700;
788
+ /* Motion */
789
+ --ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
790
+ --motion-ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
791
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
792
+ --motion-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
793
+ --duration-micro: 120ms;
794
+ --motion-duration-micro: 120ms;
795
+ --duration-flow: 200ms;
796
+ --motion-duration-flow: 200ms;
797
+ --duration-reveal: 280ms;
798
+ --motion-duration-reveal: 280ms;
799
+ --duration-cinematic: 460ms;
800
+ --motion-duration-cinematic: 460ms;
801
+
802
+ /* Spacing */
803
+ --space-source-xs: 0.625rem;
804
+ --space-source-sm: 1rem;
805
+ --space-source-md: 1.5rem;
806
+ --space-source-lg: 2rem;
807
+ --space-source-xl: 2.75rem;
808
+ --space-source-2xl: 3.75rem;
696
809
 
697
810
  /* Taxonomy / decorative (not product CTA) */
698
811
  --brand-category-brand: #000000;
@@ -710,98 +823,13 @@ html[data-brand="notion"] {
710
823
  --brand-decorative-midnight: #02093a;
711
824
  }
712
825
 
713
- /* Zone: product — product never inherits marketing display */
714
- [data-zone="product"],
715
- .zone-product {
716
- font-size: var(--zone-product-body-size, 16px);
717
- line-height: var(--zone-product-body-leading, 1.5);
718
- font-weight: var(--zone-product-body-weight, 400);
719
- --text-caption: var(--zone-product-caption-size, inherit);
720
- --leading-caption: var(--zone-product-caption-leading, inherit);
721
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
722
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
723
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
724
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
725
- --text-body: var(--zone-product-body-size, inherit);
726
- --leading-body: var(--zone-product-body-leading, inherit);
727
- --tracking-body: var(--zone-product-body-tracking, inherit);
728
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
729
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
730
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
731
- --text-subheading: var(--zone-product-subheading-size, inherit);
732
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
733
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
734
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
735
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
736
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
737
- --text-heading: var(--zone-product-heading-size, inherit);
738
- --leading-heading: var(--zone-product-heading-leading, inherit);
739
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
740
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
741
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
742
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
743
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
744
- --leading-display: var(--zone-product-display-leading, inherit);
745
- --tracking-display: var(--zone-product-display-tracking, inherit);
746
- }
747
-
748
- /* Zone: marketing — product never inherits marketing display */
749
- [data-zone="marketing"],
750
- .zone-marketing {
751
- font-size: var(--zone-marketing-body-size, 16px);
752
- line-height: var(--zone-marketing-body-leading, 1.5);
753
- font-weight: var(--zone-marketing-body-weight, 400);
754
- --text-caption: var(--zone-marketing-caption-size, inherit);
755
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
756
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
757
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
758
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
759
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
760
- --text-body: var(--zone-marketing-body-size, inherit);
761
- --leading-body: var(--zone-marketing-body-leading, inherit);
762
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
763
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
764
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
765
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
766
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
767
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
768
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
769
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
770
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
771
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
772
- --text-heading: var(--zone-marketing-heading-size, inherit);
773
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
774
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
775
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
776
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
777
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
778
- --text-display: var(--zone-marketing-display-size, inherit);
779
- --leading-display: var(--zone-marketing-display-leading, inherit);
780
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
781
- }
782
-
783
- /* Product chrome must not use decorative gradients as action fills */
784
- [data-zone="product"] .btn-brand-default,
785
- .zone-product .btn-brand-default {
786
- /* intentional no-op: documents contract; action uses --primary only */
787
- }
788
-
789
826
  /**
790
827
  * Brand carrier skin: Raycast (raycast) v1.0.0
791
828
  * darkDefault=true dualMode=false button=solid
792
- * fonts=1 zones=yes mode=global
829
+ * fonts=0 mode=global
793
830
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
794
831
  */
795
832
 
796
- /* Brand font faces */
797
- @font-face {
798
- font-family: "Inter";
799
- src: url("https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2")
800
- format("woff2");
801
- font-weight: 100 900;
802
- font-display: swap;
803
- }
804
-
805
833
  html[data-brand="raycast"] {
806
834
  /* ── Color roles (carrier) ── */
807
835
  --role-canvas: 210 20% 2%;
@@ -813,9 +841,9 @@ html[data-brand="raycast"] {
813
841
  --role-quiet: 220 5% 11%;
814
842
  --role-quiet-fg: 0 0% 100%;
815
843
  --role-muted: 220 8% 7%;
816
- --role-muted-fg: 210 1% 42%;
844
+ --role-muted-fg: 210 1% 48%;
817
845
  --role-border: 210 2% 19%;
818
- --role-input: 220 8% 7%;
846
+ --role-input: 210 2% 19%;
819
847
  --role-ring: 240 1% 61%;
820
848
  --role-brand: 0 100% 69%;
821
849
  --role-brand-fg: 210 1% 27%;
@@ -834,13 +862,13 @@ html[data-brand="raycast"] {
834
862
  --secondary: 220 5% 11%;
835
863
  --secondary-foreground: 0 0% 100%;
836
864
  --muted: 220 8% 7%;
837
- --muted-foreground: 210 1% 42%;
865
+ --muted-foreground: 210 1% 48%;
838
866
  --accent: 0 100% 69%;
839
867
  --accent-foreground: 210 1% 27%;
840
868
  --destructive: 0 72% 51%;
841
869
  --destructive-foreground: 0 0% 100%;
842
870
  --border: 210 2% 19%;
843
- --input: 220 8% 7%;
871
+ --input: 210 2% 19%;
844
872
  --ring: 240 1% 61%;
845
873
  --success: 151 59% 59%;
846
874
  --success-foreground: 210 20% 2%;
@@ -854,17 +882,35 @@ html[data-brand="raycast"] {
854
882
  --sidebar-accent-foreground: 210 1% 27%;
855
883
  --sidebar-border: 210 2% 19%;
856
884
  --sidebar-ring: 240 1% 61%;
885
+ --brand-primary: hsl(0 100% 69%);
886
+ --brand-accent: hsl(0 0% 90%);
887
+ --brand-accent-foreground: hsl(210 1% 27%);
888
+ --brand-tertiary: hsl(0 0% 90%);
857
889
  --brand-gradient: hsl(var(--primary));
858
890
  --brand-gradient-reverse: hsl(var(--primary));
859
891
  --brand-gradient-vertical: hsl(var(--primary));
860
892
  --brand-gradient-radial: hsl(var(--primary));
861
893
 
894
+ /* ── Neutral ramp, anchored on this language's roles ── */
895
+ --neutral-1: hsl(210 20% 2%);
896
+ --neutral-2: hsl(220 18% 3%);
897
+ --neutral-3: color-mix(in oklab, hsl(210 2% 19%) 20%, hsl(220 18% 3%));
898
+ --neutral-4: color-mix(in oklab, hsl(210 2% 19%) 40%, hsl(220 18% 3%));
899
+ --neutral-5: color-mix(in oklab, hsl(210 2% 19%) 60%, hsl(220 18% 3%));
900
+ --neutral-6: color-mix(in oklab, hsl(210 2% 19%) 80%, hsl(220 18% 3%));
901
+ --neutral-7: hsl(210 2% 19%);
902
+ --neutral-8: color-mix(in oklab, hsl(210 1% 48%) 25%, hsl(210 2% 19%));
903
+ --neutral-9: color-mix(in oklab, hsl(210 1% 48%) 50%, hsl(210 2% 19%));
904
+ --neutral-10: color-mix(in oklab, hsl(210 1% 48%) 75%, hsl(210 2% 19%));
905
+ --neutral-11: hsl(210 1% 48%);
906
+ --neutral-12: hsl(0 0% 100%);
907
+
862
908
  /* Recipe (action language + free elev/radii) */
863
909
  /* Shape slots */
864
910
  --btn-default-radius: 8px;
865
911
  --radius-button: 8px;
866
912
  --radius-buttons: 8px;
867
- --radius-md: 8px;
913
+ --radius-md: min(8px, 16px);
868
914
  --radius-card: 16px;
869
915
  --radius-lg: 16px;
870
916
  --radius-badge: 6px;
@@ -889,22 +935,22 @@ html[data-brand="raycast"] {
889
935
  0,
890
936
  0.2
891
937
  ) 0px -1px 0px 0px inset;
892
- --shadow-xs: 0 0 #0000;
893
- --shadow-sm:
938
+ --elevation-xs: 0 0 #0000;
939
+ --elevation-sm:
894
940
  rgba(255, 255, 255, 0.05) 0px 1px 0px 0px inset, rgba(255, 255, 255, 0.25) 0px 0px 0px 1px, rgba(
895
941
  0,
896
942
  0,
897
943
  0,
898
944
  0.2
899
945
  ) 0px -1px 0px 0px inset;
900
- --shadow-md:
946
+ --elevation-md:
901
947
  rgba(255, 255, 255, 0.05) 0px 1px 0px 0px inset, rgba(255, 255, 255, 0.25) 0px 0px 0px 1px, rgba(
902
948
  0,
903
949
  0,
904
950
  0,
905
951
  0.2
906
952
  ) 0px -1px 0px 0px inset;
907
- --shadow-lg:
953
+ --elevation-lg:
908
954
  rgba(255, 255, 255, 0.05) 0px 1px 0px 0px inset, rgba(255, 255, 255, 0.25) 0px 0px 0px 1px, rgba(
909
955
  0,
910
956
  0,
@@ -916,7 +962,7 @@ html[data-brand="raycast"] {
916
962
  --btn-default-fg: hsl(var(--primary-foreground));
917
963
  --btn-default-border-width: 0px;
918
964
  --btn-default-border: transparent;
919
- --btn-default-stroke-gradient: transparent;
965
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
920
966
  --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
921
967
  --badge-default-bg: hsl(var(--secondary));
922
968
  --badge-default-fg: hsl(var(--secondary-foreground));
@@ -928,52 +974,50 @@ html[data-brand="raycast"] {
928
974
  --control-height-sm: 1.75rem;
929
975
  --control-height-md: 2rem;
930
976
  --control-height-lg: 2.5rem;
977
+ --control-height-icon-sm: 1.5rem;
978
+ --control-height-icon-md: 1.75rem;
979
+ --control-height-icon-lg: 2rem;
931
980
  --control-font-size-md: 0.8125rem;
932
981
 
933
982
  /* Typography */
934
- --font-sans: "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;
935
- --font-heading: "Inter", ui-sans-serif, system-ui, sans-serif;
936
- --font-display: "Inter", ui-sans-serif, system-ui, sans-serif;
937
- --font-mono: "Geist Mono", "GeistMono", ui-monospace, Menlo, monospace;
983
+ --font-sans:
984
+ var(--font-inter), "Inter", var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC",
985
+ ui-sans-serif, system-ui, -apple-system, sans-serif;
986
+ --font-cn:
987
+ var(--font-inter), "Inter", var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC",
988
+ ui-sans-serif, system-ui, -apple-system, sans-serif;
989
+ --font-heading:
990
+ var(--font-inter), "Inter", var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC",
991
+ ui-sans-serif, system-ui, sans-serif;
992
+ --font-display:
993
+ var(--font-inter), "Inter", var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC",
994
+ ui-sans-serif, system-ui, sans-serif;
995
+ --font-mono: var(--font-geist-mono), "Geist Mono", "GeistMono", ui-monospace, Menlo, monospace;
938
996
  --font-weight-heading: 400;
939
997
 
940
- /* Zone type scales */
941
- --zone-product-caption-size: 11px;
942
- --zone-product-caption-leading: 0.91;
943
- --zone-product-caption-tracking: 0.8px;
944
- --zone-product-caption-weight: 500;
945
- --zone-product-body-sm-size: 13px;
946
- --zone-product-body-sm-leading: 1.2;
947
- --zone-product-body-sm-weight: 500;
948
- --zone-product-body-size: 16px;
949
- --zone-product-body-leading: 1.15;
950
- --zone-product-body-weight: 400;
951
- --zone-product-body-lg-size: 18px;
952
- --zone-product-body-lg-leading: 1.15;
953
- --zone-product-body-lg-weight: 400;
954
- --zone-product-subheading-size: 20px;
955
- --zone-product-subheading-leading: 1.2;
956
- --zone-product-subheading-tracking: 0.2px;
957
- --zone-product-subheading-weight: 400;
958
- --zone-product-heading-sm-size: 24px;
959
- --zone-product-heading-sm-leading: 1.15;
960
- --zone-product-heading-sm-weight: 500;
961
- --zone-product-heading-size: 32px;
962
- --zone-product-heading-leading: 1.15;
963
- --zone-product-heading-weight: 500;
964
- --zone-marketing-body-size: 16px;
965
- --zone-marketing-body-leading: 1.15;
966
- --zone-marketing-body-weight: 400;
967
- --zone-marketing-heading-size: 32px;
968
- --zone-marketing-heading-leading: 1.15;
969
- --zone-marketing-heading-weight: 500;
970
- --zone-marketing-heading-lg-size: 56px;
971
- --zone-marketing-heading-lg-leading: 1.17;
972
- --zone-marketing-heading-lg-tracking: 0.22px;
973
- --zone-marketing-heading-lg-weight: 400;
974
- --zone-marketing-display-size: 64px;
975
- --zone-marketing-display-leading: 1.1;
976
- --zone-marketing-display-weight: 600;
998
+ /* Motion */
999
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
1000
+ --motion-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
1001
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
1002
+ --motion-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
1003
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
1004
+ --motion-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
1005
+ --duration-micro: 90ms;
1006
+ --motion-duration-micro: 90ms;
1007
+ --duration-flow: 160ms;
1008
+ --motion-duration-flow: 160ms;
1009
+ --duration-reveal: 220ms;
1010
+ --motion-duration-reveal: 220ms;
1011
+ --duration-cinematic: 340ms;
1012
+ --motion-duration-cinematic: 340ms;
1013
+
1014
+ /* Spacing */
1015
+ --space-source-xs: 0.375rem;
1016
+ --space-source-sm: 0.5rem;
1017
+ --space-source-md: 0.75rem;
1018
+ --space-source-lg: 1rem;
1019
+ --space-source-xl: 1.375rem;
1020
+ --space-source-2xl: 2rem;
977
1021
 
978
1022
  /* Taxonomy / decorative (not product CTA) */
979
1023
  --brand-category-brand: #ff6363;
@@ -981,97 +1025,13 @@ html[data-brand="raycast"] {
981
1025
  --brand-category-sky: #63a1ff;
982
1026
  }
983
1027
 
984
- /* Zone: product — product never inherits marketing display */
985
- [data-zone="product"],
986
- .zone-product {
987
- font-size: var(--zone-product-body-size, 16px);
988
- line-height: var(--zone-product-body-leading, 1.15);
989
- font-weight: var(--zone-product-body-weight, 400);
990
- --text-caption: var(--zone-product-caption-size, inherit);
991
- --leading-caption: var(--zone-product-caption-leading, inherit);
992
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
993
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
994
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
995
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
996
- --text-body: var(--zone-product-body-size, inherit);
997
- --leading-body: var(--zone-product-body-leading, inherit);
998
- --tracking-body: var(--zone-product-body-tracking, inherit);
999
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
1000
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
1001
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
1002
- --text-subheading: var(--zone-product-subheading-size, inherit);
1003
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
1004
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
1005
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
1006
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
1007
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
1008
- --text-heading: var(--zone-product-heading-size, inherit);
1009
- --leading-heading: var(--zone-product-heading-leading, inherit);
1010
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
1011
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
1012
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
1013
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
1014
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
1015
- --leading-display: var(--zone-product-display-leading, inherit);
1016
- --tracking-display: var(--zone-product-display-tracking, inherit);
1017
- }
1018
-
1019
- /* Zone: marketing — product never inherits marketing display */
1020
- [data-zone="marketing"],
1021
- .zone-marketing {
1022
- font-size: var(--zone-marketing-body-size, 16px);
1023
- line-height: var(--zone-marketing-body-leading, 1.15);
1024
- font-weight: var(--zone-marketing-body-weight, 400);
1025
- --text-caption: var(--zone-marketing-caption-size, inherit);
1026
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
1027
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
1028
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
1029
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
1030
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
1031
- --text-body: var(--zone-marketing-body-size, inherit);
1032
- --leading-body: var(--zone-marketing-body-leading, inherit);
1033
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
1034
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
1035
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
1036
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
1037
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
1038
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
1039
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
1040
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
1041
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
1042
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
1043
- --text-heading: var(--zone-marketing-heading-size, inherit);
1044
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
1045
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
1046
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
1047
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
1048
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
1049
- --text-display: var(--zone-marketing-display-size, inherit);
1050
- --leading-display: var(--zone-marketing-display-leading, inherit);
1051
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
1052
- }
1053
-
1054
- /* Product chrome must not use decorative gradients as action fills */
1055
- [data-zone="product"] .btn-brand-default,
1056
- .zone-product .btn-brand-default {
1057
- /* intentional no-op: documents contract; action uses --primary only */
1058
- }
1059
-
1060
1028
  /**
1061
1029
  * Brand carrier skin: Stripe (stripe) v1.0.0
1062
1030
  * darkDefault=false dualMode=false button=solid
1063
- * fonts=1 zones=yes mode=global
1031
+ * fonts=0 mode=global
1064
1032
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
1065
1033
  */
1066
1034
 
1067
- /* Brand font faces */
1068
- @font-face {
1069
- font-family: "sohne-var";
1070
- src: url("/brand-assets/sohne-var.woff2") format("woff2");
1071
- font-weight: 300 400;
1072
- font-display: swap;
1073
- }
1074
-
1075
1035
  html[data-brand="stripe"] {
1076
1036
  /* ── Color roles (carrier) ── */
1077
1037
  --role-canvas: 0 0% 100%;
@@ -1085,7 +1045,7 @@ html[data-brand="stripe"] {
1085
1045
  --role-muted: 216 56% 98%;
1086
1046
  --role-muted-fg: 217 17% 47%;
1087
1047
  --role-border: 210 44% 93%;
1088
- --role-input: 0 0% 100%;
1048
+ --role-input: 210 44% 93%;
1089
1049
  --role-ring: 248 98% 61%;
1090
1050
  --role-brand: 211 78% 11%;
1091
1051
  --role-brand-fg: 0 0% 100%;
@@ -1110,7 +1070,7 @@ html[data-brand="stripe"] {
1110
1070
  --destructive: 0 72% 51%;
1111
1071
  --destructive-foreground: 0 0% 100%;
1112
1072
  --border: 210 44% 93%;
1113
- --input: 0 0% 100%;
1073
+ --input: 210 44% 93%;
1114
1074
  --ring: 248 98% 61%;
1115
1075
  --info: 231 100% 73%;
1116
1076
  --info-foreground: 211 78% 11%;
@@ -1122,17 +1082,35 @@ html[data-brand="stripe"] {
1122
1082
  --sidebar-accent-foreground: 0 0% 100%;
1123
1083
  --sidebar-border: 210 44% 93%;
1124
1084
  --sidebar-ring: 248 98% 61%;
1085
+ --brand-primary: hsl(211 78% 11%);
1086
+ --brand-accent: hsl(248 98% 61%);
1087
+ --brand-accent-foreground: hsl(0 0% 100%);
1088
+ --brand-tertiary: hsl(248 98% 61%);
1125
1089
  --brand-gradient: hsl(var(--primary));
1126
1090
  --brand-gradient-reverse: hsl(var(--primary));
1127
1091
  --brand-gradient-vertical: hsl(var(--primary));
1128
1092
  --brand-gradient-radial: hsl(var(--primary));
1129
1093
 
1094
+ /* ── Neutral ramp, anchored on this language's roles ── */
1095
+ --neutral-1: hsl(0 0% 100%);
1096
+ --neutral-2: hsl(0 0% 100%);
1097
+ --neutral-3: color-mix(in oklab, hsl(210 44% 93%) 20%, hsl(0 0% 100%));
1098
+ --neutral-4: color-mix(in oklab, hsl(210 44% 93%) 40%, hsl(0 0% 100%));
1099
+ --neutral-5: color-mix(in oklab, hsl(210 44% 93%) 60%, hsl(0 0% 100%));
1100
+ --neutral-6: color-mix(in oklab, hsl(210 44% 93%) 80%, hsl(0 0% 100%));
1101
+ --neutral-7: hsl(210 44% 93%);
1102
+ --neutral-8: color-mix(in oklab, hsl(217 17% 47%) 25%, hsl(210 44% 93%));
1103
+ --neutral-9: color-mix(in oklab, hsl(217 17% 47%) 50%, hsl(210 44% 93%));
1104
+ --neutral-10: color-mix(in oklab, hsl(217 17% 47%) 75%, hsl(210 44% 93%));
1105
+ --neutral-11: hsl(217 17% 47%);
1106
+ --neutral-12: hsl(211 78% 11%);
1107
+
1130
1108
  /* Recipe (action language + free elev/radii) */
1131
1109
  /* Shape slots */
1132
1110
  --btn-default-radius: 4px;
1133
1111
  --radius-button: 4px;
1134
1112
  --radius-buttons: 4px;
1135
- --radius-md: 4px;
1113
+ --radius-md: min(4px, 4px);
1136
1114
  --radius-card: 4px;
1137
1115
  --radius-lg: 4px;
1138
1116
  --radius-badge: 9999px;
@@ -1145,16 +1123,16 @@ html[data-brand="stripe"] {
1145
1123
  --elevation-card: 0 0 #0000;
1146
1124
  --elevation-control: 0 0 #0000;
1147
1125
  --elevation-raised: 0 0 #0000;
1148
- --shadow-xs: 0 0 #0000;
1149
- --shadow-sm: 0 0 #0000;
1150
- --shadow-md: 0 0 #0000;
1151
- --shadow-lg: 0 0 #0000;
1126
+ --elevation-xs: 0 0 #0000;
1127
+ --elevation-sm: 0 0 #0000;
1128
+ --elevation-md: 0 0 #0000;
1129
+ --elevation-lg: 0 0 #0000;
1152
1130
  --btn-default-shadow: 0 0 #0000;
1153
1131
  --btn-default-bg: hsl(var(--primary));
1154
1132
  --btn-default-fg: hsl(var(--primary-foreground));
1155
1133
  --btn-default-border-width: 0px;
1156
1134
  --btn-default-border: transparent;
1157
- --btn-default-stroke-gradient: transparent;
1135
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
1158
1136
  --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
1159
1137
  --badge-default-bg: hsl(var(--secondary));
1160
1138
  --badge-default-fg: hsl(var(--secondary-foreground));
@@ -1162,56 +1140,41 @@ html[data-brand="stripe"] {
1162
1140
  --badge-default-hover-bg: color-mix(in srgb, hsl(var(--secondary)) 90%, white);
1163
1141
 
1164
1142
  /* Typography */
1165
- --font-sans: "sohne-var", "Inter Tight", "Inter", ui-sans-serif, system-ui, sans-serif;
1166
- --font-heading: "sohne-var", "Inter Tight", ui-sans-serif, system-ui, sans-serif;
1167
- --font-display: "sohne-var", "Inter Tight", ui-sans-serif, system-ui, sans-serif;
1143
+ --font-sans:
1144
+ var(--font-reg-inter-tight), "sohne-var", "Inter Tight", "Inter",
1145
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1146
+ --font-cn:
1147
+ var(--font-reg-inter-tight), "sohne-var", "Inter Tight", "Inter",
1148
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1149
+ --font-heading:
1150
+ var(--font-reg-inter-tight), "sohne-var", "Inter Tight",
1151
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1152
+ --font-display:
1153
+ var(--font-reg-inter-tight), "sohne-var", "Inter Tight",
1154
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1168
1155
  --font-weight-heading: 300;
1169
1156
 
1170
- /* Zone type scales */
1171
- --zone-product-caption-size: 12px;
1172
- --zone-product-caption-leading: 1.45;
1173
- --zone-product-caption-tracking: -0.12px;
1174
- --zone-product-caption-weight: 300;
1175
- --zone-product-body-sm-size: 14px;
1176
- --zone-product-body-sm-leading: 1.4;
1177
- --zone-product-body-sm-tracking: -0.14px;
1178
- --zone-product-body-sm-weight: 400;
1179
- --zone-product-body-size: 16px;
1180
- --zone-product-body-leading: 1.2;
1181
- --zone-product-body-tracking: -0.16px;
1182
- --zone-product-body-weight: 400;
1183
- --zone-product-body-lg-size: 20px;
1184
- --zone-product-body-lg-leading: 1.4;
1185
- --zone-product-body-lg-tracking: -0.2px;
1186
- --zone-product-body-lg-weight: 300;
1187
- --zone-product-subheading-size: 22px;
1188
- --zone-product-subheading-leading: 1.1;
1189
- --zone-product-subheading-tracking: -0.22px;
1190
- --zone-product-subheading-weight: 300;
1191
- --zone-product-heading-sm-size: 26px;
1192
- --zone-product-heading-sm-leading: 1.12;
1193
- --zone-product-heading-sm-tracking: -0.26px;
1194
- --zone-product-heading-sm-weight: 300;
1195
- --zone-product-heading-size: 32px;
1196
- --zone-product-heading-leading: 1.1;
1197
- --zone-product-heading-tracking: -0.64px;
1198
- --zone-product-heading-weight: 300;
1199
- --zone-marketing-body-size: 16px;
1200
- --zone-marketing-body-leading: 1.4;
1201
- --zone-marketing-body-tracking: -0.16px;
1202
- --zone-marketing-body-weight: 300;
1203
- --zone-marketing-heading-size: 32px;
1204
- --zone-marketing-heading-leading: 1.1;
1205
- --zone-marketing-heading-tracking: -0.64px;
1206
- --zone-marketing-heading-weight: 300;
1207
- --zone-marketing-heading-lg-size: 48px;
1208
- --zone-marketing-heading-lg-leading: 1.03;
1209
- --zone-marketing-heading-lg-tracking: -0.96px;
1210
- --zone-marketing-heading-lg-weight: 300;
1211
- --zone-marketing-display-size: 56px;
1212
- --zone-marketing-display-leading: 1.03;
1213
- --zone-marketing-display-tracking: -1.4px;
1214
- --zone-marketing-display-weight: 300;
1157
+ /* Motion */
1158
+ --ease-out: cubic-bezier(0.215, 0.61, 0.355, 1);
1159
+ --motion-ease-out: cubic-bezier(0.215, 0.61, 0.355, 1);
1160
+ --ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);
1161
+ --motion-ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);
1162
+ --duration-micro: 100ms;
1163
+ --motion-duration-micro: 100ms;
1164
+ --duration-flow: 180ms;
1165
+ --motion-duration-flow: 180ms;
1166
+ --duration-reveal: 260ms;
1167
+ --motion-duration-reveal: 260ms;
1168
+ --duration-cinematic: 400ms;
1169
+ --motion-duration-cinematic: 400ms;
1170
+
1171
+ /* Spacing */
1172
+ --space-source-xs: 0.5rem;
1173
+ --space-source-sm: 0.75rem;
1174
+ --space-source-md: 1.125rem;
1175
+ --space-source-lg: 1.75rem;
1176
+ --space-source-xl: 2.25rem;
1177
+ --space-source-2xl: 3.25rem;
1215
1178
 
1216
1179
  /* Taxonomy / decorative (not product CTA) */
1217
1180
  --brand-category-brand: #061b31;
@@ -1227,114 +1190,13 @@ html[data-brand="stripe"] {
1227
1190
  --brand-decorative-frost: #e5edf5;
1228
1191
  }
1229
1192
 
1230
- /* Zone: product — product never inherits marketing display */
1231
- [data-zone="product"],
1232
- .zone-product {
1233
- font-size: var(--zone-product-body-size, 16px);
1234
- line-height: var(--zone-product-body-leading, 1.2);
1235
- font-weight: var(--zone-product-body-weight, 400);
1236
- letter-spacing: var(--zone-product-body-tracking, -0.16px);
1237
- --text-caption: var(--zone-product-caption-size, inherit);
1238
- --leading-caption: var(--zone-product-caption-leading, inherit);
1239
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
1240
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
1241
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
1242
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
1243
- --text-body: var(--zone-product-body-size, inherit);
1244
- --leading-body: var(--zone-product-body-leading, inherit);
1245
- --tracking-body: var(--zone-product-body-tracking, inherit);
1246
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
1247
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
1248
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
1249
- --text-subheading: var(--zone-product-subheading-size, inherit);
1250
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
1251
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
1252
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
1253
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
1254
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
1255
- --text-heading: var(--zone-product-heading-size, inherit);
1256
- --leading-heading: var(--zone-product-heading-leading, inherit);
1257
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
1258
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
1259
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
1260
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
1261
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
1262
- --leading-display: var(--zone-product-display-leading, inherit);
1263
- --tracking-display: var(--zone-product-display-tracking, inherit);
1264
- }
1265
-
1266
- /* Zone: marketing — product never inherits marketing display */
1267
- [data-zone="marketing"],
1268
- .zone-marketing {
1269
- font-size: var(--zone-marketing-body-size, 16px);
1270
- line-height: var(--zone-marketing-body-leading, 1.4);
1271
- font-weight: var(--zone-marketing-body-weight, 300);
1272
- letter-spacing: var(--zone-marketing-body-tracking, -0.16px);
1273
- --text-caption: var(--zone-marketing-caption-size, inherit);
1274
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
1275
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
1276
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
1277
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
1278
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
1279
- --text-body: var(--zone-marketing-body-size, inherit);
1280
- --leading-body: var(--zone-marketing-body-leading, inherit);
1281
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
1282
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
1283
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
1284
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
1285
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
1286
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
1287
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
1288
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
1289
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
1290
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
1291
- --text-heading: var(--zone-marketing-heading-size, inherit);
1292
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
1293
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
1294
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
1295
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
1296
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
1297
- --text-display: var(--zone-marketing-display-size, inherit);
1298
- --leading-display: var(--zone-marketing-display-leading, inherit);
1299
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
1300
- }
1301
-
1302
- /* Product chrome must not use decorative gradients as action fills */
1303
- [data-zone="product"] .btn-brand-default,
1304
- .zone-product .btn-brand-default {
1305
- /* intentional no-op: documents contract; action uses --primary only */
1306
- }
1307
-
1308
1193
  /**
1309
1194
  * Brand carrier skin: Vanta (vanta) v1.0.0
1310
1195
  * darkDefault=false dualMode=false button=solid
1311
- * fonts=3 zones=yes mode=global
1196
+ * fonts=0 mode=global
1312
1197
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
1313
1198
  */
1314
1199
 
1315
- /* Brand font faces */
1316
- @font-face {
1317
- font-family: "Inter Variable";
1318
- src: url("https://cdn.jsdelivr.net/fontsource/fonts/inter:vf@latest/latin-wght-normal.woff2")
1319
- format("woff2");
1320
- font-weight: 100 900;
1321
- font-display: swap;
1322
- }
1323
-
1324
- @font-face {
1325
- font-family: "Reckless";
1326
- src: url("/brand-assets/reckless-regular.woff2") format("woff2");
1327
- font-weight: 400;
1328
- font-display: swap;
1329
- }
1330
-
1331
- @font-face {
1332
- font-family: "Reckless";
1333
- src: url("/brand-assets/reckless-medium.woff2") format("woff2");
1334
- font-weight: 500;
1335
- font-display: swap;
1336
- }
1337
-
1338
1200
  html[data-brand="vanta"] {
1339
1201
  /* ── Color roles (carrier) ── */
1340
1202
  --role-canvas: 220 23% 97%;
@@ -1348,7 +1210,7 @@ html[data-brand="vanta"] {
1348
1210
  --role-muted: 240 20% 93%;
1349
1211
  --role-muted-fg: 238 11% 48%;
1350
1212
  --role-border: 240 17% 11%;
1351
- --role-input: 0 0% 100%;
1213
+ --role-input: 240 17% 11%;
1352
1214
  --role-ring: 268 95% 39%;
1353
1215
  --role-brand: 272 100% 14%;
1354
1216
  --role-brand-fg: 0 0% 100%;
@@ -1373,7 +1235,7 @@ html[data-brand="vanta"] {
1373
1235
  --destructive: 0 72% 51%;
1374
1236
  --destructive-foreground: 0 0% 100%;
1375
1237
  --border: 240 17% 11%;
1376
- --input: 0 0% 100%;
1238
+ --input: 240 17% 11%;
1377
1239
  --ring: 268 95% 39%;
1378
1240
  --warning: 44 100% 53%;
1379
1241
  --warning-foreground: 240 17% 11%;
@@ -1387,17 +1249,35 @@ html[data-brand="vanta"] {
1387
1249
  --sidebar-accent-foreground: 0 0% 100%;
1388
1250
  --sidebar-border: 240 17% 11%;
1389
1251
  --sidebar-ring: 268 95% 39%;
1252
+ --brand-primary: hsl(272 100% 14%);
1253
+ --brand-accent: hsl(268 95% 39%);
1254
+ --brand-accent-foreground: hsl(0 0% 100%);
1255
+ --brand-tertiary: hsl(268 95% 39%);
1390
1256
  --brand-gradient: hsl(var(--primary));
1391
1257
  --brand-gradient-reverse: hsl(var(--primary));
1392
1258
  --brand-gradient-vertical: hsl(var(--primary));
1393
1259
  --brand-gradient-radial: hsl(var(--primary));
1394
1260
 
1261
+ /* ── Neutral ramp, anchored on this language's roles ── */
1262
+ --neutral-1: hsl(220 23% 97%);
1263
+ --neutral-2: hsl(0 0% 100%);
1264
+ --neutral-3: color-mix(in oklab, hsl(240 17% 11%) 20%, hsl(0 0% 100%));
1265
+ --neutral-4: color-mix(in oklab, hsl(240 17% 11%) 40%, hsl(0 0% 100%));
1266
+ --neutral-5: color-mix(in oklab, hsl(240 17% 11%) 60%, hsl(0 0% 100%));
1267
+ --neutral-6: color-mix(in oklab, hsl(240 17% 11%) 80%, hsl(0 0% 100%));
1268
+ --neutral-7: hsl(240 17% 11%);
1269
+ --neutral-8: color-mix(in oklab, hsl(238 11% 48%) 25%, hsl(240 17% 11%));
1270
+ --neutral-9: color-mix(in oklab, hsl(238 11% 48%) 50%, hsl(240 17% 11%));
1271
+ --neutral-10: color-mix(in oklab, hsl(238 11% 48%) 75%, hsl(240 17% 11%));
1272
+ --neutral-11: hsl(238 11% 48%);
1273
+ --neutral-12: hsl(240 17% 11%);
1274
+
1395
1275
  /* Recipe (action language + free elev/radii) */
1396
1276
  /* Shape slots */
1397
1277
  --btn-default-radius: 999px;
1398
1278
  --radius-button: 999px;
1399
1279
  --radius-buttons: 999px;
1400
- --radius-md: 999px;
1280
+ --radius-md: min(999px, 16px);
1401
1281
  --radius-card: 16px;
1402
1282
  --radius-lg: 16px;
1403
1283
  --radius-badge: 999px;
@@ -1410,16 +1290,16 @@ html[data-brand="vanta"] {
1410
1290
  --elevation-card: 0 0 #0000;
1411
1291
  --elevation-control: 0 0 #0000;
1412
1292
  --elevation-raised: 0 0 #0000;
1413
- --shadow-xs: 0 0 #0000;
1414
- --shadow-sm: 0 0 #0000;
1415
- --shadow-md: 0 0 #0000;
1416
- --shadow-lg: 0 0 #0000;
1293
+ --elevation-xs: 0 0 #0000;
1294
+ --elevation-sm: 0 0 #0000;
1295
+ --elevation-md: 0 0 #0000;
1296
+ --elevation-lg: 0 0 #0000;
1417
1297
  --btn-default-shadow: 0 0 #0000;
1418
1298
  --btn-default-bg: hsl(var(--primary));
1419
1299
  --btn-default-fg: hsl(var(--primary-foreground));
1420
1300
  --btn-default-border-width: 0px;
1421
1301
  --btn-default-border: transparent;
1422
- --btn-default-stroke-gradient: transparent;
1302
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
1423
1303
  --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
1424
1304
  --badge-default-bg: hsl(var(--secondary));
1425
1305
  --badge-default-fg: hsl(var(--secondary-foreground));
@@ -1427,49 +1307,41 @@ html[data-brand="vanta"] {
1427
1307
  --badge-default-hover-bg: color-mix(in srgb, hsl(var(--secondary)) 90%, white);
1428
1308
 
1429
1309
  /* Typography */
1430
- --font-sans: "Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif;
1431
- --font-heading: "Reckless", "Source Serif 4", "Lora", ui-serif, Georgia, serif;
1432
- --font-display: "Reckless", "Source Serif 4", "Lora", ui-serif, Georgia, serif;
1310
+ --font-sans:
1311
+ var(--font-inter), "Inter Variable", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
1312
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1313
+ --font-cn:
1314
+ var(--font-inter), "Inter Variable", "Inter", var(--font-noto-sans-sc, "Noto Sans SC"),
1315
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1316
+ --font-heading:
1317
+ var(--font-reg-source-serif-4), "Reckless", "Source Serif 4", "Lora",
1318
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-serif, Georgia, serif;
1319
+ --font-display:
1320
+ var(--font-reg-source-serif-4), "Reckless", "Source Serif 4", "Lora",
1321
+ var(--font-noto-sans-sc, "Noto Sans SC"), "PingFang SC", ui-serif, Georgia, serif;
1433
1322
  --font-weight-heading: 500;
1434
1323
 
1435
- /* Zone type scales */
1436
- --zone-product-caption-size: 12px;
1437
- --zone-product-caption-leading: 1.5;
1438
- --zone-product-caption-tracking: -0.02px;
1439
- --zone-product-caption-weight: 500;
1440
- --zone-product-body-sm-size: 14px;
1441
- --zone-product-body-sm-leading: 1.43;
1442
- --zone-product-body-sm-tracking: -0.02px;
1443
- --zone-product-body-sm-weight: 400;
1444
- --zone-product-body-size: 16px;
1445
- --zone-product-body-leading: 1.5;
1446
- --zone-product-body-tracking: -0.02px;
1447
- --zone-product-body-weight: 400;
1448
- --zone-product-subheading-size: 20px;
1449
- --zone-product-subheading-leading: 1.4;
1450
- --zone-product-subheading-weight: 500;
1451
- --zone-product-heading-sm-size: 24px;
1452
- --zone-product-heading-sm-leading: 1.35;
1453
- --zone-product-heading-sm-weight: 500;
1454
- --zone-product-heading-size: 32px;
1455
- --zone-product-heading-leading: 1.3;
1456
- --zone-product-heading-weight: 500;
1457
- --zone-marketing-body-size: 16px;
1458
- --zone-marketing-body-leading: 1.5;
1459
- --zone-marketing-body-tracking: -0.02px;
1460
- --zone-marketing-body-weight: 400;
1461
- --zone-marketing-heading-size: 42px;
1462
- --zone-marketing-heading-leading: 1.2;
1463
- --zone-marketing-heading-tracking: -0.84px;
1464
- --zone-marketing-heading-weight: 400;
1465
- --zone-marketing-heading-lg-size: 56px;
1466
- --zone-marketing-heading-lg-leading: 1.15;
1467
- --zone-marketing-heading-lg-tracking: -1.12px;
1468
- --zone-marketing-heading-lg-weight: 400;
1469
- --zone-marketing-display-size: 90px;
1470
- --zone-marketing-display-leading: 1.1;
1471
- --zone-marketing-display-tracking: -1.62px;
1472
- --zone-marketing-display-weight: 400;
1324
+ /* Motion */
1325
+ --ease-out: cubic-bezier(0.33, 1, 0.68, 1);
1326
+ --motion-ease-out: cubic-bezier(0.33, 1, 0.68, 1);
1327
+ --ease-in-out: cubic-bezier(0.37, 0, 0.63, 1);
1328
+ --motion-ease-in-out: cubic-bezier(0.37, 0, 0.63, 1);
1329
+ --duration-micro: 120ms;
1330
+ --motion-duration-micro: 120ms;
1331
+ --duration-flow: 240ms;
1332
+ --motion-duration-flow: 240ms;
1333
+ --duration-reveal: 380ms;
1334
+ --motion-duration-reveal: 380ms;
1335
+ --duration-cinematic: 620ms;
1336
+ --motion-duration-cinematic: 620ms;
1337
+
1338
+ /* Spacing */
1339
+ --space-source-xs: 0.75rem;
1340
+ --space-source-sm: 1.125rem;
1341
+ --space-source-md: 1.75rem;
1342
+ --space-source-lg: 2.5rem;
1343
+ --space-source-xl: 3.5rem;
1344
+ --space-source-2xl: 5rem;
1473
1345
 
1474
1346
  /* Taxonomy / decorative (not product CTA) */
1475
1347
  --brand-category-brand: #260048;
@@ -1482,100 +1354,13 @@ html[data-brand="vanta"] {
1482
1354
  --brand-decorative-hero-wash: #ddd6ff;
1483
1355
  }
1484
1356
 
1485
- /* Zone: product — product never inherits marketing display */
1486
- [data-zone="product"],
1487
- .zone-product {
1488
- font-size: var(--zone-product-body-size, 16px);
1489
- line-height: var(--zone-product-body-leading, 1.5);
1490
- font-weight: var(--zone-product-body-weight, 400);
1491
- letter-spacing: var(--zone-product-body-tracking, -0.02px);
1492
- --text-caption: var(--zone-product-caption-size, inherit);
1493
- --leading-caption: var(--zone-product-caption-leading, inherit);
1494
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
1495
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
1496
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
1497
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
1498
- --text-body: var(--zone-product-body-size, inherit);
1499
- --leading-body: var(--zone-product-body-leading, inherit);
1500
- --tracking-body: var(--zone-product-body-tracking, inherit);
1501
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
1502
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
1503
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
1504
- --text-subheading: var(--zone-product-subheading-size, inherit);
1505
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
1506
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
1507
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
1508
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
1509
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
1510
- --text-heading: var(--zone-product-heading-size, inherit);
1511
- --leading-heading: var(--zone-product-heading-leading, inherit);
1512
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
1513
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
1514
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
1515
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
1516
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
1517
- --leading-display: var(--zone-product-display-leading, inherit);
1518
- --tracking-display: var(--zone-product-display-tracking, inherit);
1519
- }
1520
-
1521
- /* Zone: marketing — product never inherits marketing display */
1522
- [data-zone="marketing"],
1523
- .zone-marketing {
1524
- font-size: var(--zone-marketing-body-size, 16px);
1525
- line-height: var(--zone-marketing-body-leading, 1.5);
1526
- font-weight: var(--zone-marketing-body-weight, 400);
1527
- letter-spacing: var(--zone-marketing-body-tracking, -0.02px);
1528
- --text-caption: var(--zone-marketing-caption-size, inherit);
1529
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
1530
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
1531
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
1532
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
1533
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
1534
- --text-body: var(--zone-marketing-body-size, inherit);
1535
- --leading-body: var(--zone-marketing-body-leading, inherit);
1536
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
1537
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
1538
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
1539
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
1540
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
1541
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
1542
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
1543
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
1544
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
1545
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
1546
- --text-heading: var(--zone-marketing-heading-size, inherit);
1547
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
1548
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
1549
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
1550
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
1551
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
1552
- --text-display: var(--zone-marketing-display-size, inherit);
1553
- --leading-display: var(--zone-marketing-display-leading, inherit);
1554
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
1555
- }
1556
-
1557
- /* Product chrome must not use decorative gradients as action fills */
1558
- [data-zone="product"] .btn-brand-default,
1559
- .zone-product .btn-brand-default {
1560
- /* intentional no-op: documents contract; action uses --primary only */
1561
- }
1562
-
1563
1357
  /**
1564
1358
  * Brand carrier skin: Vercel (vercel) v1.0.0
1565
1359
  * darkDefault=false dualMode=true button=solid
1566
- * fonts=1 zones=yes mode=global
1360
+ * fonts=0 mode=global
1567
1361
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
1568
1362
  */
1569
1363
 
1570
- /* Brand font faces */
1571
- @font-face {
1572
- font-family: "Geist Sans";
1573
- src: url("https://cdn.jsdelivr.net/fontsource/fonts/geist-sans:vf@latest/latin-wght-normal.woff2")
1574
- format("woff2");
1575
- font-weight: 100 900;
1576
- font-display: swap;
1577
- }
1578
-
1579
1364
  html[data-brand="vercel"] {
1580
1365
  /* ── Color roles (carrier) ── */
1581
1366
  --role-canvas: 0 0% 98%;
@@ -1589,7 +1374,7 @@ html[data-brand="vercel"] {
1589
1374
  --role-muted: 0 0% 92%;
1590
1375
  --role-muted-fg: 0 0% 40%;
1591
1376
  --role-border: 0 0% 92%;
1592
- --role-input: 0 0% 100%;
1377
+ --role-input: 0 0% 92%;
1593
1378
  --role-ring: 0 0% 9%;
1594
1379
 
1595
1380
  /* ── shadcn bridge (primary = action CTA) ── */
@@ -1610,7 +1395,7 @@ html[data-brand="vercel"] {
1610
1395
  --destructive: 0 72% 51%;
1611
1396
  --destructive-foreground: 0 0% 100%;
1612
1397
  --border: 0 0% 92%;
1613
- --input: 0 0% 100%;
1398
+ --input: 0 0% 92%;
1614
1399
  --ring: 0 0% 9%;
1615
1400
  --success: 133 50% 32%;
1616
1401
  --success-foreground: 0 0% 100%;
@@ -1624,17 +1409,35 @@ html[data-brand="vercel"] {
1624
1409
  --sidebar-accent-foreground: 0 0% 30%;
1625
1410
  --sidebar-border: 0 0% 92%;
1626
1411
  --sidebar-ring: 0 0% 9%;
1412
+ --brand-primary: hsl(0 0% 9%);
1413
+ --brand-accent: hsl(0 0% 9%);
1414
+ --brand-accent-foreground: hsl(0 0% 100%);
1415
+ --brand-tertiary: hsl(0 0% 9%);
1627
1416
  --brand-gradient: hsl(var(--primary));
1628
1417
  --brand-gradient-reverse: hsl(var(--primary));
1629
1418
  --brand-gradient-vertical: hsl(var(--primary));
1630
1419
  --brand-gradient-radial: hsl(var(--primary));
1631
1420
 
1421
+ /* ── Neutral ramp, anchored on this language's roles ── */
1422
+ --neutral-1: hsl(0 0% 98%);
1423
+ --neutral-2: hsl(0 0% 100%);
1424
+ --neutral-3: color-mix(in oklab, hsl(0 0% 92%) 20%, hsl(0 0% 100%));
1425
+ --neutral-4: color-mix(in oklab, hsl(0 0% 92%) 40%, hsl(0 0% 100%));
1426
+ --neutral-5: color-mix(in oklab, hsl(0 0% 92%) 60%, hsl(0 0% 100%));
1427
+ --neutral-6: color-mix(in oklab, hsl(0 0% 92%) 80%, hsl(0 0% 100%));
1428
+ --neutral-7: hsl(0 0% 92%);
1429
+ --neutral-8: color-mix(in oklab, hsl(0 0% 40%) 25%, hsl(0 0% 92%));
1430
+ --neutral-9: color-mix(in oklab, hsl(0 0% 40%) 50%, hsl(0 0% 92%));
1431
+ --neutral-10: color-mix(in oklab, hsl(0 0% 40%) 75%, hsl(0 0% 92%));
1432
+ --neutral-11: hsl(0 0% 40%);
1433
+ --neutral-12: hsl(0 0% 9%);
1434
+
1632
1435
  /* Recipe (action language + free elev/radii) */
1633
1436
  /* Shape slots */
1634
1437
  --btn-default-radius: 6px;
1635
1438
  --radius-button: 6px;
1636
1439
  --radius-buttons: 6px;
1637
- --radius-md: 6px;
1440
+ --radius-md: min(6px, 6px);
1638
1441
  --radius-card: 6px;
1639
1442
  --radius-lg: 6px;
1640
1443
  --radius-badge: 6px;
@@ -1647,16 +1450,16 @@ html[data-brand="vercel"] {
1647
1450
  --elevation-card: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1648
1451
  --elevation-control: 0 0 #0000;
1649
1452
  --elevation-raised: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1650
- --shadow-xs: 0 0 #0000;
1651
- --shadow-sm: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1652
- --shadow-md: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1653
- --shadow-lg: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1453
+ --elevation-xs: 0 0 #0000;
1454
+ --elevation-sm: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1455
+ --elevation-md: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1456
+ --elevation-lg: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
1654
1457
  --btn-default-shadow: 0 0 #0000;
1655
1458
  --btn-default-bg: hsl(var(--primary));
1656
1459
  --btn-default-fg: hsl(var(--primary-foreground));
1657
1460
  --btn-default-border-width: 0px;
1658
1461
  --btn-default-border: transparent;
1659
- --btn-default-stroke-gradient: transparent;
1462
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
1660
1463
  --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
1661
1464
  --badge-default-bg: hsl(var(--secondary));
1662
1465
  --badge-default-fg: hsl(var(--secondary-foreground));
@@ -1668,44 +1471,48 @@ html[data-brand="vercel"] {
1668
1471
  --control-height-sm: 1.75rem;
1669
1472
  --control-height-md: 2rem;
1670
1473
  --control-height-lg: 2.5rem;
1474
+ --control-height-icon-sm: 1.5rem;
1475
+ --control-height-icon-md: 1.75rem;
1476
+ --control-height-icon-lg: 2rem;
1671
1477
  --control-font-size-md: 0.8125rem;
1672
1478
 
1673
1479
  /* Typography */
1674
- --font-sans: "Geist Sans", "Geist", ui-sans-serif, system-ui, sans-serif;
1675
- --font-heading: "Geist Sans", "Geist", ui-sans-serif, system-ui, sans-serif;
1676
- --font-display: "Geist Sans", "Geist", ui-sans-serif, system-ui, sans-serif;
1677
- --font-mono: "Geist Mono", ui-monospace, Menlo, monospace;
1480
+ --font-sans:
1481
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
1482
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1483
+ --font-cn:
1484
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
1485
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1486
+ --font-heading:
1487
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
1488
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1489
+ --font-display:
1490
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
1491
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
1492
+ --font-mono: var(--font-geist-mono), "Geist Mono", ui-monospace, Menlo, monospace;
1678
1493
  --font-weight-heading: 450;
1679
1494
 
1680
- /* Zone type scales */
1681
- --zone-product-caption-size: 13px;
1682
- --zone-product-caption-leading: 1.54;
1683
- --zone-product-caption-weight: 400;
1684
- --zone-product-body-sm-size: 14px;
1685
- --zone-product-body-sm-leading: 1.43;
1686
- --zone-product-body-sm-weight: 400;
1687
- --zone-product-body-size: 16px;
1688
- --zone-product-body-leading: 1.5;
1689
- --zone-product-body-weight: 400;
1690
- --zone-product-heading-size: 30px;
1691
- --zone-product-heading-leading: 1.1;
1692
- --zone-product-heading-tracking: -1.5px;
1693
- --zone-product-heading-weight: 500;
1694
- --zone-marketing-body-size: 16px;
1695
- --zone-marketing-body-leading: 1.5;
1696
- --zone-marketing-body-weight: 400;
1697
- --zone-marketing-heading-size: 30px;
1698
- --zone-marketing-heading-leading: 1.1;
1699
- --zone-marketing-heading-tracking: -1.5px;
1700
- --zone-marketing-heading-weight: 450;
1701
- --zone-marketing-heading-lg-size: 56px;
1702
- --zone-marketing-heading-lg-leading: 1;
1703
- --zone-marketing-heading-lg-tracking: -3.36px;
1704
- --zone-marketing-heading-lg-weight: 450;
1705
- --zone-marketing-display-size: 64px;
1706
- --zone-marketing-display-leading: 1;
1707
- --zone-marketing-display-tracking: -3.84px;
1708
- --zone-marketing-display-weight: 450;
1495
+ /* Motion */
1496
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
1497
+ --motion-ease-out: cubic-bezier(0, 0, 0.2, 1);
1498
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
1499
+ --motion-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
1500
+ --duration-micro: 100ms;
1501
+ --motion-duration-micro: 100ms;
1502
+ --duration-flow: 150ms;
1503
+ --motion-duration-flow: 150ms;
1504
+ --duration-reveal: 200ms;
1505
+ --motion-duration-reveal: 200ms;
1506
+ --duration-cinematic: 300ms;
1507
+ --motion-duration-cinematic: 300ms;
1508
+
1509
+ /* Spacing */
1510
+ --space-source-xs: 0.5rem;
1511
+ --space-source-sm: 0.75rem;
1512
+ --space-source-md: 1rem;
1513
+ --space-source-lg: 1.5rem;
1514
+ --space-source-xl: 2rem;
1515
+ --space-source-2xl: 3rem;
1709
1516
 
1710
1517
  /* Taxonomy / decorative (not product CTA) */
1711
1518
  --brand-category-carbon: #000000;
@@ -1726,7 +1533,7 @@ html.dark[data-brand="vercel"] {
1726
1533
  --role-muted: 0 0% 12%;
1727
1534
  --role-muted-fg: 0 0% 63%;
1728
1535
  --role-border: 0 0% 16%;
1729
- --role-input: 0 0% 4%;
1536
+ --role-input: 0 0% 16%;
1730
1537
  --role-ring: 0 0% 100%;
1731
1538
 
1732
1539
  /* ── shadcn bridge (primary = action CTA) ── */
@@ -1747,7 +1554,7 @@ html.dark[data-brand="vercel"] {
1747
1554
  --destructive: 0 72% 51%;
1748
1555
  --destructive-foreground: 0 0% 100%;
1749
1556
  --border: 0 0% 16%;
1750
- --input: 0 0% 4%;
1557
+ --input: 0 0% 16%;
1751
1558
  --ring: 0 0% 100%;
1752
1559
  --success: 133 49% 40%;
1753
1560
  --success-foreground: 0 0% 100%;
@@ -1761,84 +1568,26 @@ html.dark[data-brand="vercel"] {
1761
1568
  --sidebar-accent-foreground: 0 0% 93%;
1762
1569
  --sidebar-border: 0 0% 16%;
1763
1570
  --sidebar-ring: 0 0% 100%;
1571
+ --brand-primary: hsl(0 0% 100%);
1572
+ --brand-accent: hsl(0 0% 100%);
1573
+ --brand-accent-foreground: hsl(0 0% 0%);
1574
+ --brand-tertiary: hsl(0 0% 100%);
1764
1575
  --brand-gradient: hsl(var(--primary));
1765
1576
  --brand-gradient-reverse: hsl(var(--primary));
1766
1577
  --brand-gradient-vertical: hsl(var(--primary));
1767
1578
  --brand-gradient-radial: hsl(var(--primary));
1768
- }
1769
-
1770
- /* Zone: product — product never inherits marketing display */
1771
- [data-zone="product"],
1772
- .zone-product {
1773
- font-size: var(--zone-product-body-size, 16px);
1774
- line-height: var(--zone-product-body-leading, 1.5);
1775
- font-weight: var(--zone-product-body-weight, 400);
1776
- --text-caption: var(--zone-product-caption-size, inherit);
1777
- --leading-caption: var(--zone-product-caption-leading, inherit);
1778
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
1779
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
1780
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
1781
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
1782
- --text-body: var(--zone-product-body-size, inherit);
1783
- --leading-body: var(--zone-product-body-leading, inherit);
1784
- --tracking-body: var(--zone-product-body-tracking, inherit);
1785
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
1786
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
1787
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
1788
- --text-subheading: var(--zone-product-subheading-size, inherit);
1789
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
1790
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
1791
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
1792
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
1793
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
1794
- --text-heading: var(--zone-product-heading-size, inherit);
1795
- --leading-heading: var(--zone-product-heading-leading, inherit);
1796
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
1797
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
1798
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
1799
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
1800
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
1801
- --leading-display: var(--zone-product-display-leading, inherit);
1802
- --tracking-display: var(--zone-product-display-tracking, inherit);
1803
- }
1804
-
1805
- /* Zone: marketing — product never inherits marketing display */
1806
- [data-zone="marketing"],
1807
- .zone-marketing {
1808
- font-size: var(--zone-marketing-body-size, 16px);
1809
- line-height: var(--zone-marketing-body-leading, 1.5);
1810
- font-weight: var(--zone-marketing-body-weight, 400);
1811
- --text-caption: var(--zone-marketing-caption-size, inherit);
1812
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
1813
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
1814
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
1815
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
1816
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
1817
- --text-body: var(--zone-marketing-body-size, inherit);
1818
- --leading-body: var(--zone-marketing-body-leading, inherit);
1819
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
1820
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
1821
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
1822
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
1823
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
1824
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
1825
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
1826
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
1827
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
1828
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
1829
- --text-heading: var(--zone-marketing-heading-size, inherit);
1830
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
1831
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
1832
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
1833
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
1834
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
1835
- --text-display: var(--zone-marketing-display-size, inherit);
1836
- --leading-display: var(--zone-marketing-display-leading, inherit);
1837
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
1838
- }
1839
1579
 
1840
- /* Product chrome must not use decorative gradients as action fills */
1841
- [data-zone="product"] .btn-brand-default,
1842
- .zone-product .btn-brand-default {
1843
- /* intentional no-op: documents contract; action uses --primary only */
1580
+ /* ── Neutral ramp, anchored on this language's roles ── */
1581
+ --neutral-1: hsl(0 0% 0%);
1582
+ --neutral-2: hsl(0 0% 4%);
1583
+ --neutral-3: color-mix(in oklab, hsl(0 0% 16%) 20%, hsl(0 0% 4%));
1584
+ --neutral-4: color-mix(in oklab, hsl(0 0% 16%) 40%, hsl(0 0% 4%));
1585
+ --neutral-5: color-mix(in oklab, hsl(0 0% 16%) 60%, hsl(0 0% 4%));
1586
+ --neutral-6: color-mix(in oklab, hsl(0 0% 16%) 80%, hsl(0 0% 4%));
1587
+ --neutral-7: hsl(0 0% 16%);
1588
+ --neutral-8: color-mix(in oklab, hsl(0 0% 63%) 25%, hsl(0 0% 16%));
1589
+ --neutral-9: color-mix(in oklab, hsl(0 0% 63%) 50%, hsl(0 0% 16%));
1590
+ --neutral-10: color-mix(in oklab, hsl(0 0% 63%) 75%, hsl(0 0% 16%));
1591
+ --neutral-11: hsl(0 0% 63%);
1592
+ --neutral-12: hsl(0 0% 93%);
1844
1593
  }