@motion-proto/live-tokens 0.47.1 → 0.48.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 (116) hide show
  1. package/.claude/skills/live-tokens-adjust-shape-space/SKILL.md +68 -0
  2. package/.claude/skills/live-tokens-create-component/SKILL.md +2 -2
  3. package/.claude/skills/live-tokens-generate-theme/SKILL.md +152 -0
  4. package/CHANGELOG.md +270 -0
  5. package/README.md +37 -26
  6. package/bin/adjust.mjs +254 -0
  7. package/bin/cli.mjs +94 -7
  8. package/bin/generate-theme.mjs +251 -0
  9. package/bin/migrate.mjs +95 -6
  10. package/dist-plugin/adjust/index.cjs +259 -0
  11. package/dist-plugin/adjust/index.d.cts +45 -0
  12. package/dist-plugin/adjust/index.d.ts +45 -0
  13. package/dist-plugin/adjust/index.js +176 -0
  14. package/dist-plugin/{chunk-H4TRUINI.js → chunk-44RSTAII.js} +0 -48
  15. package/dist-plugin/chunk-6OZFXIQI.js +316 -0
  16. package/dist-plugin/chunk-76TFDTJO.js +556 -0
  17. package/dist-plugin/chunk-D3ZVKOR4.js +52 -0
  18. package/dist-plugin/dataPaths-DBN0RPuT.d.cts +54 -0
  19. package/dist-plugin/dataPaths-DBN0RPuT.d.ts +54 -0
  20. package/dist-plugin/generateColorsAndType/index.cjs +1781 -0
  21. package/dist-plugin/generateColorsAndType/index.d.cts +81 -0
  22. package/dist-plugin/generateColorsAndType/index.d.ts +81 -0
  23. package/dist-plugin/generateColorsAndType/index.js +1210 -0
  24. package/dist-plugin/index.cjs +849 -531
  25. package/dist-plugin/index.d.cts +3 -2
  26. package/dist-plugin/index.d.ts +3 -2
  27. package/dist-plugin/index.js +658 -1132
  28. package/dist-plugin/migrateData/index.cjs +728 -0
  29. package/dist-plugin/migrateData/index.d.cts +60 -0
  30. package/dist-plugin/migrateData/index.d.ts +60 -0
  31. package/dist-plugin/migrateData/index.js +348 -0
  32. package/dist-plugin/themeTypes-DMHZOnUn.d.cts +211 -0
  33. package/dist-plugin/themeTypes-DMHZOnUn.d.ts +211 -0
  34. package/dist-plugin/tokensCssMigrations/index.cjs +2 -1
  35. package/dist-plugin/tokensCssMigrations/index.d.cts +3 -15
  36. package/dist-plugin/tokensCssMigrations/index.d.ts +3 -15
  37. package/dist-plugin/tokensCssMigrations/index.js +4 -2
  38. package/package.json +18 -4
  39. package/src/editor/component-editor/scaffolding/ComponentFileManager.svelte +183 -158
  40. package/src/editor/component-editor/scaffolding/ComponentFileMenu.svelte +0 -4
  41. package/src/editor/component-editor/scaffolding/SaveAsDialog.svelte +4 -4
  42. package/src/editor/component-editor/scaffolding/TokenLayout.svelte +2 -59
  43. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +1 -1
  44. package/src/editor/core/components/adjustAliases.ts +180 -0
  45. package/src/editor/core/components/aliasKinds.ts +73 -0
  46. package/src/editor/core/components/componentConfigService.ts +26 -38
  47. package/src/editor/core/flashStatus.ts +1 -1
  48. package/src/editor/core/fonts/fontMigration.ts +13 -13
  49. package/src/editor/core/fonts/fontPairing.ts +35 -0
  50. package/src/editor/core/palettes/paletteDerivation.ts +83 -13
  51. package/src/editor/core/preview/lookPreview.ts +141 -0
  52. package/src/editor/core/productionPulse.ts +34 -21
  53. package/src/editor/core/storage/files/versionedFileResourceClient.ts +18 -45
  54. package/src/editor/core/store/editorConfigStore.ts +2 -2
  55. package/src/editor/core/store/editorPersistence.ts +0 -1
  56. package/src/editor/core/store/editorStore.ts +114 -51
  57. package/src/editor/core/store/editorTypes.ts +0 -1
  58. package/src/editor/core/store/gradientSource.ts +2 -2
  59. package/src/editor/core/themes/colorsAndTypeService.ts +95 -0
  60. package/src/editor/core/themes/generateColorsAndType.ts +433 -0
  61. package/src/editor/core/themes/loadRows.ts +64 -0
  62. package/src/editor/core/themes/lookSummary.ts +75 -0
  63. package/src/editor/core/themes/migrations/2026-04-24-legacy-keys-and-bg-to-canvas.ts +3 -3
  64. package/src/editor/core/themes/migrations/2026-05-13-primary-to-brand.ts +2 -2
  65. package/src/editor/core/themes/migrations/2026-05-26-drop-overlay-extra-stops.ts +3 -3
  66. package/src/editor/core/themes/migrations/2026-08-13-drop-legacy-shape-space-keys.ts +38 -0
  67. package/src/editor/core/themes/migrations/2026-08-15-line-height-scale-rename.ts +57 -0
  68. package/src/editor/core/themes/migrations/index.ts +19 -11
  69. package/src/editor/core/themes/slices/components.ts +4 -4
  70. package/src/editor/core/themes/slices/fonts.ts +1 -1
  71. package/src/editor/core/themes/slices/gradients.ts +22 -0
  72. package/src/editor/core/themes/slices/palettes.ts +2 -2
  73. package/src/editor/core/themes/themeInit.ts +21 -29
  74. package/src/editor/core/themes/themeService.ts +218 -78
  75. package/src/editor/core/themes/themeTypes.ts +94 -51
  76. package/src/editor/docs/Docs.svelte +1 -0
  77. package/src/editor/docs/chapters.ts +1 -0
  78. package/src/editor/docs/content/01-overview.md +1 -1
  79. package/src/editor/docs/content/editing-tokens.md +6 -6
  80. package/src/editor/docs/content/getting-started.md +9 -7
  81. package/src/editor/docs/content/themes-workflow.md +74 -34
  82. package/src/editor/docs/content/where-themes-live.md +61 -0
  83. package/src/editor/docs/content.generated.ts +5 -4
  84. package/src/editor/index.ts +27 -27
  85. package/src/editor/pages/ComponentEditorPage.svelte +2 -2
  86. package/src/editor/pages/EditorShell.svelte +4 -30
  87. package/src/editor/ui/FileLoadList.svelte +67 -7
  88. package/src/editor/ui/GradientEditor.svelte +3 -3
  89. package/src/editor/ui/ThemePanel.svelte +1067 -0
  90. package/src/editor/ui/UIDialog.svelte +11 -9
  91. package/src/editor/ui/index.ts +4 -2
  92. package/src/live-tokens/data/colors-and-type/autumn.json +2490 -0
  93. package/src/live-tokens/data/{themes → colors-and-type}/default.json +962 -549
  94. package/src/live-tokens/data/colors-and-type/halloween.json +2529 -0
  95. package/src/live-tokens/data/colors-and-type/midnight-study.json +2536 -0
  96. package/src/live-tokens/data/colors-and-type/ocean.json +2489 -0
  97. package/src/live-tokens/data/colors-and-type/royal-velvet.json +2520 -0
  98. package/src/live-tokens/data/colors-and-type/spring-meadow.json +2476 -0
  99. package/src/live-tokens/data/colors-and-type/sunset.json +2528 -0
  100. package/src/live-tokens/data/themes/autumn.json +3918 -0
  101. package/src/live-tokens/data/themes/halloween.json +3992 -0
  102. package/src/live-tokens/data/themes/midnight-study.json +3932 -0
  103. package/src/live-tokens/data/themes/ocean.json +3917 -0
  104. package/src/live-tokens/data/themes/royal-velvet.json +3983 -0
  105. package/src/live-tokens/data/themes/spring-meadow.json +3904 -0
  106. package/src/live-tokens/data/themes/sunset.json +3931 -0
  107. package/src/live-tokens/data/tokens.generated.css +129 -140
  108. package/src/system/styles/CONVENTIONS.md +1 -1
  109. package/src/system/styles/fonts.css +1 -1
  110. package/template/README.md +7 -5
  111. package/template/_gitignore +0 -6
  112. package/src/editor/core/components/componentPersist.ts +0 -62
  113. package/src/editor/core/manifests/manifestService.ts +0 -172
  114. package/src/editor/ui/ManifestFileManager.svelte +0 -446
  115. package/src/editor/ui/ThemeFileManager.svelte +0 -785
  116. package/src/live-tokens/data/manifests/default.json +0 -35
@@ -1,4 +1,4 @@
1
- /* Generated by themeFileApi from the production theme and component configs. Do not edit. */
1
+ /* Generated by themeFileApi from the production theme. Do not edit. */
2
2
  /* tokens.css holds developer-authored defaults; this file holds editor overrides. */
3
3
 
4
4
  /* Production theme: default */
@@ -15,10 +15,7 @@
15
15
  --badge-trait-text-line-height: var(--line-height-none);
16
16
  --badge-trait-border: var(--border-brand-medium);
17
17
  --badge-trait-border-width: var(--border-width-1);
18
- --badge-trait-radius: var(--radius-full);
19
- --badge-trait-padding: var(--space-6);
20
18
  --badge-trait-shadow: transparent;
21
- --sectiondivider-padding: var(--space-16);
22
19
  --sectiondivider-title: var(--text-primary);
23
20
  --sectiondivider-title-font-family: var(--font-display);
24
21
  --sectiondivider-title-font-size: var(--font-size-5xl);
@@ -35,25 +32,17 @@
35
32
  --dialog-primary-default-text: var(--text-primary);
36
33
  --dialog-primary-default-border: var(--border-neutral-medium);
37
34
  --dialog-primary-default-border-width: var(--border-width-1);
38
- --dialog-primary-default-radius: var(--radius-md);
39
- --dialog-primary-default-padding: var(--space-8);
40
35
  --dialog-primary-hover-surface: var(--surface-neutral-higher);
41
36
  --dialog-primary-hover-text: var(--text-primary);
42
37
  --dialog-primary-hover-border: var(--border-neutral-strong);
43
38
  --dialog-primary-hover-border-width: var(--border-width-1);
44
- --dialog-primary-hover-radius: var(--radius-md);
45
- --dialog-primary-hover-padding: var(--space-8);
46
39
  --dialog-secondary-default-text: var(--text-primary);
47
40
  --dialog-secondary-default-border: var(--border-neutral-medium);
48
41
  --dialog-secondary-default-border-width: var(--border-width-1);
49
- --dialog-secondary-default-radius: var(--radius-md);
50
- --dialog-secondary-default-padding: var(--space-8);
51
42
  --dialog-secondary-hover-surface: var(--surface-neutral-lower);
52
43
  --dialog-secondary-hover-text: var(--text-primary);
53
44
  --dialog-secondary-hover-border: var(--border-neutral-strong);
54
45
  --dialog-secondary-hover-border-width: var(--border-width-1);
55
- --dialog-secondary-hover-radius: var(--radius-md);
56
- --dialog-secondary-hover-padding: var(--space-8);
57
46
  --columns-count: 12;
58
47
  --columns-max-width: 1440px;
59
48
  --columns-gutter: 32px;
@@ -69,17 +58,17 @@
69
58
  --shadow-lg: 5px 5px 9px 0px hsla(237, 18%, 3%, 0.9);
70
59
  --shadow-xl: 6px 7px 13px 0px hsla(237, 18%, 3%, 0.9);
71
60
  --shadow-2xl: 8px 9px 16px 0px hsla(237, 18%, 3%, 0.9);
72
- --color-brand-100: #ffbad3;
73
- --color-brand-200: #ff98c1;
74
- --color-brand-300: #ff7db4;
75
- --color-brand-400: #ff5da7;
76
- --color-brand-500: #fb2898;
77
- --color-brand-600: #db0081;
78
- --color-brand-700: #af0066;
79
- --color-brand-800: #800049;
80
- --color-brand-850: #54002e;
81
- --color-brand-900: #2d0016;
82
- --color-brand-950: #100005;
61
+ --color-brand-100: #ffe7ef;
62
+ --color-brand-200: #ffb5d1;
63
+ --color-brand-300: #ff7cb3;
64
+ --color-brand-400: #fb2898;
65
+ --color-brand-500: #d5007d;
66
+ --color-brand-600: #ab0064;
67
+ --color-brand-700: #85004c;
68
+ --color-brand-800: #610036;
69
+ --color-brand-850: #400022;
70
+ --color-brand-900: #21000f;
71
+ --color-brand-950: #070002;
83
72
  --surface-brand-lowest: #1d000c;
84
73
  --surface-brand-lower: #3e0020;
85
74
  --surface-brand-low: #620037;
@@ -93,21 +82,21 @@
93
82
  --border-brand-medium: #e9008a;
94
83
  --border-brand-strong: #ff6cad;
95
84
  --text-brand: #ff75b1;
96
- --text-brand-secondary: #f61693;
97
- --text-brand-tertiary: #b73373;
98
- --text-brand-muted: #7b3854;
85
+ --text-brand-secondary: #df2d88;
86
+ --text-brand-tertiary: #953b63;
87
+ --text-brand-muted: #5c3846;
99
88
  --text-brand-disabled: #403337;
100
- --color-accent-100: #98e1dd;
101
- --color-accent-200: #73c3c0;
102
- --color-accent-300: #43a29e;
103
- --color-accent-400: #008582;
104
- --color-accent-500: #006d6a;
105
- --color-accent-600: #005856;
106
- --color-accent-700: #004645;
107
- --color-accent-800: #003634;
108
- --color-accent-850: #002625;
109
- --color-accent-900: #001615;
110
- --color-accent-950: #000606;
89
+ --color-accent-100: #b4fffb;
90
+ --color-accent-200: #84e9e5;
91
+ --color-accent-300: #6ad0cc;
92
+ --color-accent-400: #50b8b4;
93
+ --color-accent-500: #329f9b;
94
+ --color-accent-600: #008582;
95
+ --color-accent-700: #006866;
96
+ --color-accent-800: #004b49;
97
+ --color-accent-850: #002f2e;
98
+ --color-accent-900: #001514;
99
+ --color-accent-950: #000202;
111
100
  --surface-accent-lowest: #000f0e;
112
101
  --surface-accent-lower: #002423;
113
102
  --surface-accent-low: #003c3b;
@@ -121,21 +110,21 @@
121
110
  --border-accent-medium: #259592;
122
111
  --border-accent-strong: #53bbb7;
123
112
  --text-accent: #62efea;
124
- --text-accent-secondary: #5bbcb8;
125
- --text-accent-tertiary: #508b88;
126
- --text-accent-muted: #425d5c;
113
+ --text-accent-secondary: #5baba8;
114
+ --text-accent-tertiary: #4d7271;
115
+ --text-accent-muted: #3c4847;
127
116
  --text-accent-disabled: #313232;
128
- --color-special-100: #d2c8ff;
129
- --color-special-200: #b9a7ff;
130
- --color-special-300: #a181ff;
131
- --color-special-400: #8b5cf6;
132
- --color-special-500: #773ee0;
133
- --color-special-600: #641ccb;
134
- --color-special-700: #5100aa;
135
- --color-special-800: #3d0083;
136
- --color-special-850: #29005e;
137
- --color-special-900: #17003a;
138
- --color-special-950: #060019;
117
+ --color-special-100: #efecff;
118
+ --color-special-200: #d3caff;
119
+ --color-special-300: #b9a7ff;
120
+ --color-special-400: #a282ff;
121
+ --color-special-500: #8b5cf6;
122
+ --color-special-600: #733ed8;
123
+ --color-special-700: #5c1bba;
124
+ --color-special-800: #430090;
125
+ --color-special-850: #2a005f;
126
+ --color-special-900: #130033;
127
+ --color-special-950: #03000d;
139
128
  --surface-special-lowest: #0f002b;
140
129
  --surface-special-lower: #250055;
141
130
  --surface-special-low: #3d0084;
@@ -149,21 +138,21 @@
149
138
  --border-special-medium: #8c5df8;
150
139
  --border-special-strong: #ac93ff;
151
140
  --text-special: #baa9ff;
152
- --text-special-secondary: #9a75ff;
153
- --text-special-tertiary: #745dba;
154
- --text-special-muted: #504773;
141
+ --text-special-secondary: #8665e0;
142
+ --text-special-tertiary: #5c4e8b;
143
+ --text-special-muted: #3e3a4f;
155
144
  --text-special-disabled: #303032;
156
- --color-canvas-100: #cecfe5;
157
- --color-canvas-200: #b8b9cf;
158
- --color-canvas-300: #a5a6bd;
159
- --color-canvas-400: #9596ac;
160
- --color-canvas-500: #85869d;
161
- --color-canvas-600: #76768d;
162
- --color-canvas-700: #65657c;
163
- --color-canvas-800: #525269;
164
- --color-canvas-850: #3c3c53;
165
- --color-canvas-900: #1c1b32;
166
- --color-canvas-950: #040215;
145
+ --color-canvas-100: #ecedff;
146
+ --color-canvas-200: #d0d0ed;
147
+ --color-canvas-300: #b6b6d2;
148
+ --color-canvas-400: #9c9db8;
149
+ --color-canvas-500: #84849e;
150
+ --color-canvas-600: #6b6c85;
151
+ --color-canvas-700: #53546c;
152
+ --color-canvas-800: #3c3c53;
153
+ --color-canvas-850: #25243a;
154
+ --color-canvas-900: #0f0e21;
155
+ --color-canvas-950: #02000b;
167
156
  --surface-canvas-lowest: #0a0523;
168
157
  --surface-canvas-lower: #1c1a37;
169
158
  --surface-canvas-low: #31304c;
@@ -177,14 +166,14 @@
177
166
  --border-canvas-medium: #80809b;
178
167
  --border-canvas-strong: #a4a5c0;
179
168
  --text-canvas: #9595c6;
180
- --text-canvas-secondary: #7b7c9f;
181
- --text-canvas-tertiary: #62637a;
182
- --text-canvas-muted: #4b4b56;
169
+ --text-canvas-secondary: #6b6b89;
170
+ --text-canvas-tertiary: #4e4f5e;
171
+ --text-canvas-muted: #3c3c41;
183
172
  --text-canvas-disabled: #343435;
184
173
  --page-bg: #3c3c53;
185
174
  --page-bg-attachment: scroll;
186
175
  --color-neutral-100: #dde6ed;
187
- --color-neutral-200: #c0c9d0;
176
+ --color-neutral-200: #c1c9d0;
188
177
  --color-neutral-300: #a5adb4;
189
178
  --color-neutral-400: #8a9299;
190
179
  --color-neutral-500: #70787e;
@@ -207,22 +196,22 @@
207
196
  --border-neutral-medium: #7c848b;
208
197
  --border-neutral-strong: #a0a9af;
209
198
  --text-primary: #ffffff;
210
- --text-secondary: #dfe7ee;
211
- --text-tertiary: #a3a8ad;
212
- --text-muted: #6b6e70;
199
+ --text-secondary: #c2cacf;
200
+ --text-tertiary: #7e8285;
201
+ --text-muted: #4e4f50;
213
202
  --text-disabled: #383838;
214
203
  --text-inverted: #0f0f0f;
215
204
  --color-alternate-100: #eae3e0;
216
- --color-alternate-200: #cec8c4;
217
- --color-alternate-300: #b4adaa;
218
- --color-alternate-400: #9a9491;
205
+ --color-alternate-200: #cfc8c5;
206
+ --color-alternate-300: #b5aeab;
207
+ --color-alternate-400: #9b9591;
219
208
  --color-alternate-500: #817b78;
220
- --color-alternate-600: #696360;
221
- --color-alternate-700: #514b49;
222
- --color-alternate-800: #3a3532;
223
- --color-alternate-850: #25201e;
224
- --color-alternate-900: #110d0b;
225
- --color-alternate-950: #030101;
209
+ --color-alternate-600: #67615e;
210
+ --color-alternate-700: #4e4845;
211
+ --color-alternate-800: #35302d;
212
+ --color-alternate-850: #1e1917;
213
+ --color-alternate-900: #090604;
214
+ --color-alternate-950: #000000;
226
215
  --surface-alternate-lowest: #100907;
227
216
  --surface-alternate-lower: #241d19;
228
217
  --surface-alternate-low: #39322f;
@@ -236,21 +225,21 @@
236
225
  --border-alternate-medium: #88827f;
237
226
  --border-alternate-strong: #ada6a3;
238
227
  --text-alternate: #ffffff;
239
- --text-alternate-secondary: #f5efec;
240
- --text-alternate-tertiary: #b2aeac;
241
- --text-alternate-muted: #747271;
228
+ --text-alternate-secondary: #d6d0cd;
229
+ --text-alternate-tertiary: #8a8786;
230
+ --text-alternate-muted: #545352;
242
231
  --text-alternate-disabled: #3b3b3b;
243
- --color-info-100: #9adbff;
244
- --color-info-200: #00bbff;
245
- --color-info-300: #009ed8;
246
- --color-info-400: #0084b6;
247
- --color-info-500: #006e98;
248
- --color-info-600: #005a7d;
249
- --color-info-700: #004764;
250
- --color-info-800: #00364d;
251
- --color-info-850: #002536;
252
- --color-info-900: #001420;
253
- --color-info-950: #00050b;
232
+ --color-info-100: #ddf2ff;
233
+ --color-info-200: #8fd7ff;
234
+ --color-info-300: #00bbff;
235
+ --color-info-400: #009dd7;
236
+ --color-info-500: #0081b1;
237
+ --color-info-600: #00678f;
238
+ --color-info-700: #004f6f;
239
+ --color-info-800: #003850;
240
+ --color-info-850: #002334;
241
+ --color-info-900: #00101a;
242
+ --color-info-950: #000205;
254
243
  --surface-info-lowest: #000d17;
255
244
  --surface-info-lower: #002232;
256
245
  --surface-info-low: #003951;
@@ -264,21 +253,21 @@
264
253
  --border-info-medium: #008ec3;
265
254
  --border-info-strong: #00b6f8;
266
255
  --text-info: #64caff;
267
- --text-info-secondary: #009cd6;
268
- --text-info-tertiary: #126e96;
269
- --text-info-muted: #1f4255;
256
+ --text-info-secondary: #0083b4;
257
+ --text-info-tertiary: #1c506a;
258
+ --text-info-muted: #1d2c34;
270
259
  --text-info-disabled: #181a1b;
271
- --color-success-100: #92e9a3;
272
- --color-success-200: #6fcf85;
273
- --color-success-300: #44b564;
274
- --color-success-400: #009c45;
275
- --color-success-500: #008238;
276
- --color-success-600: #006a2d;
277
- --color-success-700: #005422;
278
- --color-success-800: #003f17;
279
- --color-success-850: #002b0e;
280
- --color-success-900: #001805;
281
- --color-success-950: #000701;
260
+ --color-success-100: #c7ffd1;
261
+ --color-success-200: #77f194;
262
+ --color-success-300: #59d47a;
263
+ --color-success-400: #38b85f;
264
+ --color-success-500: #009c45;
265
+ --color-success-600: #007e36;
266
+ --color-success-700: #006128;
267
+ --color-success-800: #00461b;
268
+ --color-success-850: #002c0e;
269
+ --color-success-900: #001404;
270
+ --color-success-950: #000300;
282
271
  --surface-success-lowest: #001003;
283
272
  --surface-success-lower: #00270b;
284
273
  --surface-success-low: #004018;
@@ -292,21 +281,21 @@
292
281
  --border-success-medium: #059e46;
293
282
  --border-success-strong: #47c46b;
294
283
  --text-success: #88f2a0;
295
- --text-success-secondary: #6fbf80;
296
- --text-success-tertiary: #568d61;
297
- --text-success-muted: #3e5f44;
284
+ --text-success-secondary: #2e974e;
285
+ --text-success-tertiary: #31673e;
286
+ --text-success-muted: #2c4530;
298
287
  --text-success-disabled: #263429;
299
- --color-warning-100: #ffb01f;
300
- --color-warning-200: #e39a00;
301
- --color-warning-300: #c68600;
302
- --color-warning-400: #ab7300;
303
- --color-warning-500: #916100;
304
- --color-warning-600: #784f00;
305
- --color-warning-700: #5f3e00;
306
- --color-warning-800: #482e00;
307
- --color-warning-850: #321e00;
308
- --color-warning-900: #1c0f00;
309
- --color-warning-950: #090300;
288
+ --color-warning-100: #ffebd1;
289
+ --color-warning-200: #ffd08e;
290
+ --color-warning-300: #ffb01f;
291
+ --color-warning-400: #e09800;
292
+ --color-warning-500: #be8000;
293
+ --color-warning-600: #9b6800;
294
+ --color-warning-700: #784f00;
295
+ --color-warning-800: #563800;
296
+ --color-warning-850: #362100;
297
+ --color-warning-900: #190d00;
298
+ --color-warning-950: #040100;
310
299
  --surface-warning-lowest: #130900;
311
300
  --surface-warning-lower: #372200;
312
301
  --surface-warning-low: #613f00;
@@ -320,21 +309,21 @@
320
309
  --border-warning-medium: #af7600;
321
310
  --border-warning-strong: #df9700;
322
311
  --text-warning: #ffecd2;
323
- --text-warning-secondary: #ffb22c;
324
- --text-warning-tertiary: #c28e3e;
325
- --text-warning-muted: #866d4a;
312
+ --text-warning-secondary: #eba633;
313
+ --text-warning-tertiary: #a17e4c;
314
+ --text-warning-muted: #685d4d;
326
315
  --text-warning-disabled: #4d4b4a;
327
- --color-danger-100: #ffbeb8;
328
- --color-danger-200: #ff8b84;
329
- --color-danger-300: #f0494a;
330
- --color-danger-400: #d10023;
331
- --color-danger-500: #ac001b;
332
- --color-danger-600: #8d0014;
333
- --color-danger-700: #72000e;
334
- --color-danger-800: #5a0009;
335
- --color-danger-850: #420005;
336
- --color-danger-900: #2a0002;
337
- --color-danger-950: #110000;
316
+ --color-danger-100: #ffe9e6;
317
+ --color-danger-200: #ffc3bd;
318
+ --color-danger-300: #ff9a93;
319
+ --color-danger-400: #ff6a65;
320
+ --color-danger-500: #f0373e;
321
+ --color-danger-600: #d10023;
322
+ --color-danger-700: #a40019;
323
+ --color-danger-800: #78000f;
324
+ --color-danger-850: #4e0006;
325
+ --color-danger-900: #280002;
326
+ --color-danger-950: #080000;
338
327
  --surface-danger-lowest: #1f0001;
339
328
  --surface-danger-lower: #410004;
340
329
  --surface-danger-low: #67000c;
@@ -348,9 +337,9 @@
348
337
  --border-danger-medium: #ea3039;
349
338
  --border-danger-strong: #ff7872;
350
339
  --text-danger: #ff635f;
351
- --text-danger-secondary: #f5042c;
352
- --text-danger-tertiary: #b63536;
353
- --text-danger-muted: #793d39;
340
+ --text-danger-secondary: #bb292f;
341
+ --text-danger-tertiary: #813b37;
342
+ --text-danger-muted: #543b39;
354
343
  --text-danger-disabled: #3c3939;
355
344
  --font-display: "Arvo", serif;
356
345
  --font-sans: "Manrope", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, sans-serif;
@@ -37,7 +37,7 @@ Editor chrome uses **only** the `--ui-*` font namespace (`--ui-font-sans`, `--ui
37
37
 
38
38
  ## Layer 1 — theme tokens (`tokens.css`)
39
39
 
40
- Theme tokens are the design system's vocabulary. They describe colors, sizes, spacing, shadows, and motion: the things a designer reasons about independent of any one component. Components consume them, and themes in `themes/*.json` recolor or re-scale them.
40
+ Theme tokens are the design system's vocabulary. They describe colors, sizes, spacing, shadows, and motion: the things a designer reasons about independent of any one component. Components consume them, and the colors-and-type files in `colors-and-type/*.json` recolor or re-scale them.
41
41
 
42
42
  ### Category-first naming
43
43
 
@@ -1,4 +1,4 @@
1
- /* Generated from the production theme by syncFontsToCss. Do not edit. */
1
+ /* Generated from the production colors and type by syncFontsToCss. Do not edit. */
2
2
  /* Both fonts.css and fonts/ are in dist/, so relative paths work at runtime. */
3
3
 
4
4
  /* Adobe Typekit — fira-code */
@@ -18,16 +18,18 @@ This project follows the package's [recommended layout](https://github.com/motio
18
18
  a reserved `/live-tokens/*` namespace (so they never collide with your pages):
19
19
  `/live-tokens/editor` (theme tokens), `/live-tokens/components` (per-component
20
20
  aliases), and `/live-tokens/docs` (the user guide).
21
- - `src/system/styles/tokens.css` — your theme token vocabulary. The dev server
22
- writes edits here when you use the in-browser editor.
21
+ - `src/system/styles/tokens.css` — your theme token vocabulary. Hand-authored
22
+ and yours; the editor reads it but never writes it.
23
23
  - `src/styles/site.css` — themed page typography. Yours to edit.
24
24
 
25
25
  ## Editing live
26
26
 
27
27
  Run `npm run dev`, then click **Open Token Editor** on the home page (or visit
28
- `/live-tokens/editor`). Changes persist to `src/system/styles/tokens.css` and the JSON under
29
- `src/live-tokens/data/`. The editor is dev-only — `npm run build` ships plain
30
- CSS variables and the components you used, nothing else.
28
+ `/live-tokens/editor`). Edits live in the JSON under `src/live-tokens/data/`:
29
+ Save keeps them in a theme, and Adopt writes the theme into
30
+ `src/live-tokens/data/tokens.generated.css`, the file your built site ships.
31
+ The editor is dev-only — `npm run build` ships plain CSS variables and the
32
+ components you used, nothing else.
31
33
 
32
34
  ## Adding components
33
35
 
@@ -5,12 +5,6 @@ dist-ssr
5
5
  *.log
6
6
  .npmrc
7
7
 
8
- # Editor-written backups stay local to each machine; the live JSON/CSS commit.
9
- src/live-tokens/data/themes/_backups/
10
- src/live-tokens/data/manifests/_backups/
11
- src/live-tokens/data/component-configs/*/_backups/
12
- src/system/styles/_backups/
13
-
14
8
  .DS_Store
15
9
  .vscode/*
16
10
  !.vscode/extensions.json
@@ -1,62 +0,0 @@
1
- import { get } from 'svelte/store';
2
- import type { AliasDiskValue, ComponentConfig } from '../themes/themeTypes';
3
- import { editorState, markComponentSaved } from '../store/editorStore';
4
- import { refToDiskValue } from '../store/cssVarRef';
5
- import { CURRENT_COMPONENT_SCHEMA_VERSION } from '../themes/migrations';
6
- import {
7
- listComponentConfigs,
8
- saveComponentConfig,
9
- setActiveComponentFile,
10
- } from './componentConfigService';
11
-
12
- /**
13
- * Save the current in-memory state of a component to its active file. Mirrors
14
- * the `persist` flow inside `ComponentFileManager.svelte` so callers without a
15
- * file-manager instance (e.g. an unsaved-components dialog upstream)
16
- * can save a dirty component without duplicating the schema-version + aliases
17
- * stringification logic.
18
- *
19
- * Refuses to overwrite `default` — that's the protected source-derived snapshot.
20
- * Callers that hit `{ ok: false, reason: 'default' }` should prompt for a new
21
- * name and re-route to a Save-As flow.
22
- */
23
- export type SaveActiveComponentResult =
24
- | { ok: true; fileName: string; displayName: string }
25
- | { ok: false; reason: 'default' | 'no-state' | 'error'; error?: unknown };
26
-
27
-
28
- export async function saveActiveComponentConfig(
29
- component: string,
30
- ): Promise<SaveActiveComponentResult> {
31
- const slice = get(editorState).components[component];
32
- if (!slice) return { ok: false, reason: 'no-state' };
33
-
34
- try {
35
- const list = await listComponentConfigs(component);
36
- const fileName = list.activeFile;
37
- if (fileName === 'default') return { ok: false, reason: 'default' };
38
-
39
- const active = list.files.find((f) => f.fileName === fileName);
40
- const displayName = active?.name ?? fileName;
41
-
42
- const now = new Date().toISOString();
43
- const aliases: Record<string, AliasDiskValue> = {};
44
- for (const [k, ref] of Object.entries(slice.aliases)) aliases[k] = refToDiskValue(ref);
45
-
46
- const data: ComponentConfig = {
47
- name: displayName,
48
- component,
49
- createdAt: now,
50
- updatedAt: now,
51
- aliases,
52
- config: { ...slice.config },
53
- schemaVersion: CURRENT_COMPONENT_SCHEMA_VERSION,
54
- };
55
- await saveComponentConfig(component, fileName, data);
56
- await setActiveComponentFile(component, fileName);
57
- markComponentSaved(component);
58
- return { ok: true, fileName, displayName };
59
- } catch (error) {
60
- return { ok: false, reason: 'error', error };
61
- }
62
- }