@nebutra/tokens 0.1.2 → 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 (72) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/brands/README.md +66 -0
  3. package/brands/cosmos/DESIGN.md +356 -0
  4. package/brands/cosmos/brand.json +209 -0
  5. package/brands/cosmos/refero-tokens.json +312 -0
  6. package/brands/gsap/brand.json +18 -91
  7. package/brands/linear/DESIGN.md +478 -0
  8. package/brands/linear/brand.json +20 -76
  9. package/brands/notion/brand.json +20 -90
  10. package/brands/raycast/brand.json +19 -81
  11. package/brands/stripe/brand.json +17 -88
  12. package/brands/vanta/brand.json +17 -101
  13. package/brands/vercel/brand.json +17 -68
  14. package/dist/brand-package/index.d.ts +123 -0
  15. package/dist/brand-package/index.js +2316 -0
  16. package/dist/brand-package/index.js.map +1 -0
  17. package/dist/brand-package/use-brand.d.ts +2 -0
  18. package/dist/brand-package/use-brand.js +963 -0
  19. package/dist/brand-package/use-brand.js.map +1 -0
  20. package/dist/index.d.ts +81 -0
  21. package/dist/index.js +2581 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/use-brand-ClmvK_lC.d.ts +387 -0
  24. package/package.json +41 -10
  25. package/recipe.css +330 -1
  26. package/skins/README.md +2 -4
  27. package/skins/cosmos.css +239 -0
  28. package/skins/gsap.css +62 -138
  29. package/skins/linear.css +85 -132
  30. package/skins/notion.css +62 -141
  31. package/skins/raycast.css +68 -137
  32. package/skins/stripe.css +60 -143
  33. package/skins/vanta.css +60 -151
  34. package/skins/vercel.css +83 -128
  35. package/styles.css +477 -115
  36. package/.turbo/turbo-build.log +0 -8
  37. package/.turbo/turbo-typecheck.log +0 -4
  38. package/AGENTS.md +0 -45
  39. package/DESIGN.md +0 -357
  40. package/scripts/compile-brand-run.ts +0 -79
  41. package/scripts/compile-brand.mjs +0 -25
  42. package/scripts/emit-skins-run.ts +0 -62
  43. package/scripts/emit-skins.mjs +0 -31
  44. package/scripts/sync-styles.mjs +0 -29
  45. package/src/brand-package/__tests__/compile-refero.test.ts +0 -427
  46. package/src/brand-package/__tests__/emit-css.test.ts +0 -130
  47. package/src/brand-package/apply-brand.ts +0 -92
  48. package/src/brand-package/compile-helpers.ts +0 -170
  49. package/src/brand-package/compile-refero.ts +0 -69
  50. package/src/brand-package/emit-css.ts +0 -468
  51. package/src/brand-package/hex-to-hsl.ts +0 -100
  52. package/src/brand-package/index.ts +0 -71
  53. package/src/brand-package/infer-recipe.ts +0 -198
  54. package/src/brand-package/normalize.ts +0 -295
  55. package/src/brand-package/presets/context.ts +0 -17
  56. package/src/brand-package/presets/generic.ts +0 -214
  57. package/src/brand-package/presets/gsap.ts +0 -146
  58. package/src/brand-package/presets/index.ts +0 -31
  59. package/src/brand-package/presets/linear.ts +0 -183
  60. package/src/brand-package/presets/notion.ts +0 -208
  61. package/src/brand-package/presets/raycast.ts +0 -138
  62. package/src/brand-package/presets/recipe.ts +0 -61
  63. package/src/brand-package/presets/stripe.ts +0 -207
  64. package/src/brand-package/presets/vanta.ts +0 -220
  65. package/src/brand-package/presets/vercel.ts +0 -187
  66. package/src/brand-package/types.ts +0 -285
  67. package/src/brand-package/use-brand.ts +0 -207
  68. package/src/brand-package/validate.ts +0 -108
  69. package/src/index.ts +0 -67
  70. package/src/theme-provider.tsx +0 -246
  71. package/tsconfig.json +0 -11
  72. package/turbo.json +0 -15
package/skins/vercel.css CHANGED
@@ -1,19 +1,10 @@
1
1
  /**
2
2
  * Brand carrier skin: Vercel (vercel) v1.0.0
3
3
  * darkDefault=false dualMode=true button=solid
4
- * fonts=1 zones=yes mode=global
4
+ * fonts=0 mode=global
5
5
  * Contract: roles.action → --primary; roles.brand → --brand-mark (never default CTA)
6
6
  */
7
7
 
8
- /* Brand font faces */
9
- @font-face {
10
- font-family: "Geist Sans";
11
- src: url("https://cdn.jsdelivr.net/fontsource/fonts/geist-sans:vf@latest/latin-wght-normal.woff2")
12
- format("woff2");
13
- font-weight: 100 900;
14
- font-display: swap;
15
- }
16
-
17
8
  :root,
18
9
  html[data-brand="vercel"] {
19
10
  /* ── Color roles (carrier) ── */
@@ -28,7 +19,7 @@ html[data-brand="vercel"] {
28
19
  --role-muted: 0 0% 92%;
29
20
  --role-muted-fg: 0 0% 40%;
30
21
  --role-border: 0 0% 92%;
31
- --role-input: 0 0% 100%;
22
+ --role-input: 0 0% 92%;
32
23
  --role-ring: 0 0% 9%;
33
24
 
34
25
  /* ── shadcn bridge (primary = action CTA) ── */
@@ -49,7 +40,7 @@ html[data-brand="vercel"] {
49
40
  --destructive: 0 72% 51%;
50
41
  --destructive-foreground: 0 0% 100%;
51
42
  --border: 0 0% 92%;
52
- --input: 0 0% 100%;
43
+ --input: 0 0% 92%;
53
44
  --ring: 0 0% 9%;
54
45
  --success: 133 50% 32%;
55
46
  --success-foreground: 0 0% 100%;
@@ -63,17 +54,35 @@ html[data-brand="vercel"] {
63
54
  --sidebar-accent-foreground: 0 0% 30%;
64
55
  --sidebar-border: 0 0% 92%;
65
56
  --sidebar-ring: 0 0% 9%;
57
+ --brand-primary: hsl(0 0% 9%);
58
+ --brand-accent: hsl(0 0% 9%);
59
+ --brand-accent-foreground: hsl(0 0% 100%);
60
+ --brand-tertiary: hsl(0 0% 9%);
66
61
  --brand-gradient: hsl(var(--primary));
67
62
  --brand-gradient-reverse: hsl(var(--primary));
68
63
  --brand-gradient-vertical: hsl(var(--primary));
69
64
  --brand-gradient-radial: hsl(var(--primary));
70
65
 
66
+ /* ── Neutral ramp, anchored on this language's roles ── */
67
+ --neutral-1: hsl(0 0% 98%);
68
+ --neutral-2: hsl(0 0% 100%);
69
+ --neutral-3: color-mix(in oklab, hsl(0 0% 92%) 20%, hsl(0 0% 100%));
70
+ --neutral-4: color-mix(in oklab, hsl(0 0% 92%) 40%, hsl(0 0% 100%));
71
+ --neutral-5: color-mix(in oklab, hsl(0 0% 92%) 60%, hsl(0 0% 100%));
72
+ --neutral-6: color-mix(in oklab, hsl(0 0% 92%) 80%, hsl(0 0% 100%));
73
+ --neutral-7: hsl(0 0% 92%);
74
+ --neutral-8: color-mix(in oklab, hsl(0 0% 40%) 25%, hsl(0 0% 92%));
75
+ --neutral-9: color-mix(in oklab, hsl(0 0% 40%) 50%, hsl(0 0% 92%));
76
+ --neutral-10: color-mix(in oklab, hsl(0 0% 40%) 75%, hsl(0 0% 92%));
77
+ --neutral-11: hsl(0 0% 40%);
78
+ --neutral-12: hsl(0 0% 9%);
79
+
71
80
  /* Recipe (action language + free elev/radii) */
72
81
  /* Shape slots */
73
82
  --btn-default-radius: 6px;
74
83
  --radius-button: 6px;
75
84
  --radius-buttons: 6px;
76
- --radius-md: 6px;
85
+ --radius-md: min(6px, 6px);
77
86
  --radius-card: 6px;
78
87
  --radius-lg: 6px;
79
88
  --radius-badge: 6px;
@@ -86,16 +95,16 @@ html[data-brand="vercel"] {
86
95
  --elevation-card: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
87
96
  --elevation-control: 0 0 #0000;
88
97
  --elevation-raised: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
89
- --shadow-xs: 0 0 #0000;
90
- --shadow-sm: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
91
- --shadow-md: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
92
- --shadow-lg: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
98
+ --elevation-xs: 0 0 #0000;
99
+ --elevation-sm: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
100
+ --elevation-md: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
101
+ --elevation-lg: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgb(250, 250, 250) 0px 0px 0px 1px;
93
102
  --btn-default-shadow: 0 0 #0000;
94
103
  --btn-default-bg: hsl(var(--primary));
95
104
  --btn-default-fg: hsl(var(--primary-foreground));
96
105
  --btn-default-border-width: 0px;
97
106
  --btn-default-border: transparent;
98
- --btn-default-stroke-gradient: transparent;
107
+ --btn-default-stroke-gradient: linear-gradient(transparent, transparent);
99
108
  --btn-default-hover-bg: color-mix(in srgb, hsl(var(--primary)) 90%, transparent);
100
109
  --badge-default-bg: hsl(var(--secondary));
101
110
  --badge-default-fg: hsl(var(--secondary-foreground));
@@ -107,44 +116,48 @@ html[data-brand="vercel"] {
107
116
  --control-height-sm: 1.75rem;
108
117
  --control-height-md: 2rem;
109
118
  --control-height-lg: 2.5rem;
119
+ --control-height-icon-sm: 1.5rem;
120
+ --control-height-icon-md: 1.75rem;
121
+ --control-height-icon-lg: 2rem;
110
122
  --control-font-size-md: 0.8125rem;
111
123
 
112
124
  /* Typography */
113
- --font-sans: "Geist Sans", "Geist", ui-sans-serif, system-ui, sans-serif;
114
- --font-heading: "Geist Sans", "Geist", ui-sans-serif, system-ui, sans-serif;
115
- --font-display: "Geist Sans", "Geist", ui-sans-serif, system-ui, sans-serif;
116
- --font-mono: "Geist Mono", ui-monospace, Menlo, monospace;
125
+ --font-sans:
126
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
127
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
128
+ --font-cn:
129
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
130
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
131
+ --font-heading:
132
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
133
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
134
+ --font-display:
135
+ var(--font-geist-sans), "Geist Sans", "Geist", var(--font-noto-sans-sc, "Noto Sans SC"),
136
+ "PingFang SC", ui-sans-serif, system-ui, sans-serif;
137
+ --font-mono: var(--font-geist-mono), "Geist Mono", ui-monospace, Menlo, monospace;
117
138
  --font-weight-heading: 450;
118
139
 
119
- /* Zone type scales */
120
- --zone-product-caption-size: 13px;
121
- --zone-product-caption-leading: 1.54;
122
- --zone-product-caption-weight: 400;
123
- --zone-product-body-sm-size: 14px;
124
- --zone-product-body-sm-leading: 1.43;
125
- --zone-product-body-sm-weight: 400;
126
- --zone-product-body-size: 16px;
127
- --zone-product-body-leading: 1.5;
128
- --zone-product-body-weight: 400;
129
- --zone-product-heading-size: 30px;
130
- --zone-product-heading-leading: 1.1;
131
- --zone-product-heading-tracking: -1.5px;
132
- --zone-product-heading-weight: 500;
133
- --zone-marketing-body-size: 16px;
134
- --zone-marketing-body-leading: 1.5;
135
- --zone-marketing-body-weight: 400;
136
- --zone-marketing-heading-size: 30px;
137
- --zone-marketing-heading-leading: 1.1;
138
- --zone-marketing-heading-tracking: -1.5px;
139
- --zone-marketing-heading-weight: 450;
140
- --zone-marketing-heading-lg-size: 56px;
141
- --zone-marketing-heading-lg-leading: 1;
142
- --zone-marketing-heading-lg-tracking: -3.36px;
143
- --zone-marketing-heading-lg-weight: 450;
144
- --zone-marketing-display-size: 64px;
145
- --zone-marketing-display-leading: 1;
146
- --zone-marketing-display-tracking: -3.84px;
147
- --zone-marketing-display-weight: 450;
140
+ /* Motion */
141
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
142
+ --motion-ease-out: cubic-bezier(0, 0, 0.2, 1);
143
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
144
+ --motion-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
145
+ --duration-micro: 100ms;
146
+ --motion-duration-micro: 100ms;
147
+ --duration-flow: 150ms;
148
+ --motion-duration-flow: 150ms;
149
+ --duration-reveal: 200ms;
150
+ --motion-duration-reveal: 200ms;
151
+ --duration-cinematic: 300ms;
152
+ --motion-duration-cinematic: 300ms;
153
+
154
+ /* Spacing */
155
+ --space-source-xs: 0.5rem;
156
+ --space-source-sm: 0.75rem;
157
+ --space-source-md: 1rem;
158
+ --space-source-lg: 1.5rem;
159
+ --space-source-xl: 2rem;
160
+ --space-source-2xl: 3rem;
148
161
 
149
162
  /* Taxonomy / decorative (not product CTA) */
150
163
  --brand-category-carbon: #000000;
@@ -165,7 +178,7 @@ html.dark[data-brand="vercel"] {
165
178
  --role-muted: 0 0% 12%;
166
179
  --role-muted-fg: 0 0% 63%;
167
180
  --role-border: 0 0% 16%;
168
- --role-input: 0 0% 4%;
181
+ --role-input: 0 0% 16%;
169
182
  --role-ring: 0 0% 100%;
170
183
 
171
184
  /* ── shadcn bridge (primary = action CTA) ── */
@@ -186,7 +199,7 @@ html.dark[data-brand="vercel"] {
186
199
  --destructive: 0 72% 51%;
187
200
  --destructive-foreground: 0 0% 100%;
188
201
  --border: 0 0% 16%;
189
- --input: 0 0% 4%;
202
+ --input: 0 0% 16%;
190
203
  --ring: 0 0% 100%;
191
204
  --success: 133 49% 40%;
192
205
  --success-foreground: 0 0% 100%;
@@ -200,84 +213,26 @@ html.dark[data-brand="vercel"] {
200
213
  --sidebar-accent-foreground: 0 0% 93%;
201
214
  --sidebar-border: 0 0% 16%;
202
215
  --sidebar-ring: 0 0% 100%;
216
+ --brand-primary: hsl(0 0% 100%);
217
+ --brand-accent: hsl(0 0% 100%);
218
+ --brand-accent-foreground: hsl(0 0% 0%);
219
+ --brand-tertiary: hsl(0 0% 100%);
203
220
  --brand-gradient: hsl(var(--primary));
204
221
  --brand-gradient-reverse: hsl(var(--primary));
205
222
  --brand-gradient-vertical: hsl(var(--primary));
206
223
  --brand-gradient-radial: hsl(var(--primary));
207
- }
208
-
209
- /* Zone: product — product never inherits marketing display */
210
- [data-zone="product"],
211
- .zone-product {
212
- font-size: var(--zone-product-body-size, 16px);
213
- line-height: var(--zone-product-body-leading, 1.5);
214
- font-weight: var(--zone-product-body-weight, 400);
215
- --text-caption: var(--zone-product-caption-size, inherit);
216
- --leading-caption: var(--zone-product-caption-leading, inherit);
217
- --tracking-caption: var(--zone-product-caption-tracking, inherit);
218
- --text-body-sm: var(--zone-product-body-sm-size, inherit);
219
- --leading-body-sm: var(--zone-product-body-sm-leading, inherit);
220
- --tracking-body-sm: var(--zone-product-body-sm-tracking, inherit);
221
- --text-body: var(--zone-product-body-size, inherit);
222
- --leading-body: var(--zone-product-body-leading, inherit);
223
- --tracking-body: var(--zone-product-body-tracking, inherit);
224
- --text-body-lg: var(--zone-product-body-lg-size, inherit);
225
- --leading-body-lg: var(--zone-product-body-lg-leading, inherit);
226
- --tracking-body-lg: var(--zone-product-body-lg-tracking, inherit);
227
- --text-subheading: var(--zone-product-subheading-size, inherit);
228
- --leading-subheading: var(--zone-product-subheading-leading, inherit);
229
- --tracking-subheading: var(--zone-product-subheading-tracking, inherit);
230
- --text-heading-sm: var(--zone-product-heading-sm-size, inherit);
231
- --leading-heading-sm: var(--zone-product-heading-sm-leading, inherit);
232
- --tracking-heading-sm: var(--zone-product-heading-sm-tracking, inherit);
233
- --text-heading: var(--zone-product-heading-size, inherit);
234
- --leading-heading: var(--zone-product-heading-leading, inherit);
235
- --tracking-heading: var(--zone-product-heading-tracking, inherit);
236
- --text-heading-lg: var(--zone-product-heading-lg-size, inherit);
237
- --leading-heading-lg: var(--zone-product-heading-lg-leading, inherit);
238
- --tracking-heading-lg: var(--zone-product-heading-lg-tracking, inherit);
239
- --text-display: var(--zone-product-display-size, var(--zone-product-heading-size, inherit));
240
- --leading-display: var(--zone-product-display-leading, inherit);
241
- --tracking-display: var(--zone-product-display-tracking, inherit);
242
- }
243
-
244
- /* Zone: marketing — product never inherits marketing display */
245
- [data-zone="marketing"],
246
- .zone-marketing {
247
- font-size: var(--zone-marketing-body-size, 16px);
248
- line-height: var(--zone-marketing-body-leading, 1.5);
249
- font-weight: var(--zone-marketing-body-weight, 400);
250
- --text-caption: var(--zone-marketing-caption-size, inherit);
251
- --leading-caption: var(--zone-marketing-caption-leading, inherit);
252
- --tracking-caption: var(--zone-marketing-caption-tracking, inherit);
253
- --text-body-sm: var(--zone-marketing-body-sm-size, inherit);
254
- --leading-body-sm: var(--zone-marketing-body-sm-leading, inherit);
255
- --tracking-body-sm: var(--zone-marketing-body-sm-tracking, inherit);
256
- --text-body: var(--zone-marketing-body-size, inherit);
257
- --leading-body: var(--zone-marketing-body-leading, inherit);
258
- --tracking-body: var(--zone-marketing-body-tracking, inherit);
259
- --text-body-lg: var(--zone-marketing-body-lg-size, inherit);
260
- --leading-body-lg: var(--zone-marketing-body-lg-leading, inherit);
261
- --tracking-body-lg: var(--zone-marketing-body-lg-tracking, inherit);
262
- --text-subheading: var(--zone-marketing-subheading-size, inherit);
263
- --leading-subheading: var(--zone-marketing-subheading-leading, inherit);
264
- --tracking-subheading: var(--zone-marketing-subheading-tracking, inherit);
265
- --text-heading-sm: var(--zone-marketing-heading-sm-size, inherit);
266
- --leading-heading-sm: var(--zone-marketing-heading-sm-leading, inherit);
267
- --tracking-heading-sm: var(--zone-marketing-heading-sm-tracking, inherit);
268
- --text-heading: var(--zone-marketing-heading-size, inherit);
269
- --leading-heading: var(--zone-marketing-heading-leading, inherit);
270
- --tracking-heading: var(--zone-marketing-heading-tracking, inherit);
271
- --text-heading-lg: var(--zone-marketing-heading-lg-size, inherit);
272
- --leading-heading-lg: var(--zone-marketing-heading-lg-leading, inherit);
273
- --tracking-heading-lg: var(--zone-marketing-heading-lg-tracking, inherit);
274
- --text-display: var(--zone-marketing-display-size, inherit);
275
- --leading-display: var(--zone-marketing-display-leading, inherit);
276
- --tracking-display: var(--zone-marketing-display-tracking, inherit);
277
- }
278
224
 
279
- /* Product chrome must not use decorative gradients as action fills */
280
- [data-zone="product"] .btn-brand-default,
281
- .zone-product .btn-brand-default {
282
- /* intentional no-op: documents contract; action uses --primary only */
225
+ /* ── Neutral ramp, anchored on this language's roles ── */
226
+ --neutral-1: hsl(0 0% 0%);
227
+ --neutral-2: hsl(0 0% 4%);
228
+ --neutral-3: color-mix(in oklab, hsl(0 0% 16%) 20%, hsl(0 0% 4%));
229
+ --neutral-4: color-mix(in oklab, hsl(0 0% 16%) 40%, hsl(0 0% 4%));
230
+ --neutral-5: color-mix(in oklab, hsl(0 0% 16%) 60%, hsl(0 0% 4%));
231
+ --neutral-6: color-mix(in oklab, hsl(0 0% 16%) 80%, hsl(0 0% 4%));
232
+ --neutral-7: hsl(0 0% 16%);
233
+ --neutral-8: color-mix(in oklab, hsl(0 0% 63%) 25%, hsl(0 0% 16%));
234
+ --neutral-9: color-mix(in oklab, hsl(0 0% 63%) 50%, hsl(0 0% 16%));
235
+ --neutral-10: color-mix(in oklab, hsl(0 0% 63%) 75%, hsl(0 0% 16%));
236
+ --neutral-11: hsl(0 0% 63%);
237
+ --neutral-12: hsl(0 0% 93%);
283
238
  }