@dixy-ui/themes 0.0.0-stage → 0.1.0-beta.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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +104 -2
  3. package/dist/ansi/ornament.d.ts +3 -0
  4. package/dist/ansi/ornament.js +8 -0
  5. package/dist/ansi-panes.css +929 -0
  6. package/dist/art-deco.css +850 -0
  7. package/dist/atelier/ornament.d.ts +4 -0
  8. package/dist/atelier/ornament.js +9 -0
  9. package/dist/atomic/ornament.d.ts +3 -0
  10. package/dist/atomic/ornament.js +8 -0
  11. package/dist/atomic-lounge.css +946 -0
  12. package/dist/authoring.d.ts +142 -0
  13. package/dist/authoring.js +83 -0
  14. package/dist/azulejo/ornament.d.ts +3 -0
  15. package/dist/azulejo/ornament.js +8 -0
  16. package/dist/azulejo-tile.css +962 -0
  17. package/dist/blueprint/ornament.d.ts +3 -0
  18. package/dist/blueprint/ornament.js +8 -0
  19. package/dist/blueprint.css +897 -0
  20. package/dist/brutalist/ornament.d.ts +3 -0
  21. package/dist/brutalist/ornament.js +8 -0
  22. package/dist/brutalist-concrete.css +936 -0
  23. package/dist/bytes.json +162 -0
  24. package/dist/candy-clay.css +778 -0
  25. package/dist/catalog.d.ts +1346 -0
  26. package/dist/catalog.js +1379 -0
  27. package/dist/character.d.ts +103 -0
  28. package/dist/character.js +477 -0
  29. package/dist/chrome.d.ts +114 -0
  30. package/dist/chrome.js +247 -0
  31. package/dist/clay/ornament.d.ts +3 -0
  32. package/dist/clay/ornament.js +8 -0
  33. package/dist/compile-css.d.ts +3 -0
  34. package/dist/compile-css.js +133 -0
  35. package/dist/deco/ornament.d.ts +3 -0
  36. package/dist/deco/ornament.js +8 -0
  37. package/dist/diwali/ornament.d.ts +3 -0
  38. package/dist/diwali/ornament.js +8 -0
  39. package/dist/diwali-lights.css +894 -0
  40. package/dist/documents.d.ts +104 -0
  41. package/dist/documents.js +1411 -0
  42. package/dist/forest/ornament.d.ts +3 -0
  43. package/dist/forest/ornament.js +12 -0
  44. package/dist/foundations.d.ts +105 -0
  45. package/dist/foundations.js +140 -0
  46. package/dist/frame-corners.d.ts +5 -0
  47. package/dist/frame-corners.js +5 -0
  48. package/dist/frame-styles.d.ts +36 -0
  49. package/dist/frame-styles.js +146 -0
  50. package/dist/freeze.d.ts +2 -0
  51. package/dist/freeze.js +9 -0
  52. package/dist/freighter/ornament.d.ts +3 -0
  53. package/dist/freighter/ornament.js +8 -0
  54. package/dist/freighter.css +942 -0
  55. package/dist/glass/ornament.d.ts +3 -0
  56. package/dist/glass/ornament.js +8 -0
  57. package/dist/glass-ui.css +923 -0
  58. package/dist/hardware/ornament.d.ts +4 -0
  59. package/dist/hardware/ornament.js +10 -0
  60. package/dist/holi/ornament.d.ts +3 -0
  61. package/dist/holi/ornament.js +8 -0
  62. package/dist/holi-colours.css +887 -0
  63. package/dist/hud/ornament.d.ts +3 -0
  64. package/dist/hud/ornament.js +8 -0
  65. package/dist/light/ornament.d.ts +3 -0
  66. package/dist/light/ornament.js +10 -0
  67. package/dist/living-forest.css +917 -0
  68. package/dist/lunar/ornament.d.ts +3 -0
  69. package/dist/lunar/ornament.js +8 -0
  70. package/dist/lunar-new-year.css +811 -0
  71. package/dist/manifests.d.ts +2485 -0
  72. package/dist/manifests.js +264 -0
  73. package/dist/material-light.css +880 -0
  74. package/dist/neon/ornament.d.ts +3 -0
  75. package/dist/neon/ornament.js +8 -0
  76. package/dist/neon-night-market.css +944 -0
  77. package/dist/ocean/ornament.d.ts +3 -0
  78. package/dist/ocean/ornament.js +8 -0
  79. package/dist/ocean-depths.css +825 -0
  80. package/dist/orbital-hud.css +973 -0
  81. package/dist/organic-css.d.ts +3 -0
  82. package/dist/organic-css.js +23 -0
  83. package/dist/organic-geometry.d.ts +20 -0
  84. package/dist/organic-geometry.js +74 -0
  85. package/dist/organic-ornament.d.ts +9 -0
  86. package/dist/organic-ornament.js +28 -0
  87. package/dist/organic-paint-launch.d.ts +43 -0
  88. package/dist/organic-paint-launch.js +1156 -0
  89. package/dist/organic-paint-world.d.ts +24 -0
  90. package/dist/organic-paint-world.js +676 -0
  91. package/dist/organic-paint.d.ts +50 -0
  92. package/dist/organic-paint.js +695 -0
  93. package/dist/organic-runtime.d.ts +4 -0
  94. package/dist/organic-runtime.js +231 -0
  95. package/dist/organic-settings.d.ts +680 -0
  96. package/dist/organic-settings.js +433 -0
  97. package/dist/ornament-parts.d.ts +20 -0
  98. package/dist/ornament-parts.js +15 -0
  99. package/dist/papel-picado.css +904 -0
  100. package/dist/phosphor/ornament.d.ts +3 -0
  101. package/dist/phosphor/ornament.js +8 -0
  102. package/dist/phosphor-terminal.css +1011 -0
  103. package/dist/picado/ornament.d.ts +3 -0
  104. package/dist/picado/ornament.js +8 -0
  105. package/dist/prism/ornament.d.ts +4 -0
  106. package/dist/prism/ornament.js +9 -0
  107. package/dist/prism-glass.css +970 -0
  108. package/dist/recipes.d.ts +938 -0
  109. package/dist/recipes.js +939 -0
  110. package/dist/resolve.d.ts +40 -0
  111. package/dist/resolve.js +24 -0
  112. package/dist/retro/ornament.d.ts +5 -0
  113. package/dist/retro/ornament.js +10 -0
  114. package/dist/retro-os.css +867 -0
  115. package/dist/riso/ornament.d.ts +3 -0
  116. package/dist/riso/ornament.js +8 -0
  117. package/dist/riso-zine.css +786 -0
  118. package/dist/sail/ornament.d.ts +3 -0
  119. package/dist/sail/ornament.js +8 -0
  120. package/dist/scrapbook.css +685 -0
  121. package/dist/signal/ornament.d.ts +4 -0
  122. package/dist/signal/ornament.js +11 -0
  123. package/dist/skins/ansi-panes.d.ts +68 -0
  124. package/dist/skins/ansi-panes.js +68 -0
  125. package/dist/skins/art-deco.d.ts +68 -0
  126. package/dist/skins/art-deco.js +68 -0
  127. package/dist/skins/atomic-lounge.d.ts +68 -0
  128. package/dist/skins/atomic-lounge.js +68 -0
  129. package/dist/skins/azulejo-tile.d.ts +68 -0
  130. package/dist/skins/azulejo-tile.js +68 -0
  131. package/dist/skins/blueprint.d.ts +68 -0
  132. package/dist/skins/blueprint.js +68 -0
  133. package/dist/skins/brutalist-concrete.d.ts +68 -0
  134. package/dist/skins/brutalist-concrete.js +68 -0
  135. package/dist/skins/candy-clay.d.ts +57 -0
  136. package/dist/skins/candy-clay.js +57 -0
  137. package/dist/skins/diwali-lights.d.ts +68 -0
  138. package/dist/skins/diwali-lights.js +68 -0
  139. package/dist/skins/freighter.d.ts +68 -0
  140. package/dist/skins/freighter.js +68 -0
  141. package/dist/skins/glass-ui.d.ts +68 -0
  142. package/dist/skins/glass-ui.js +68 -0
  143. package/dist/skins/holi-colours.d.ts +68 -0
  144. package/dist/skins/holi-colours.js +68 -0
  145. package/dist/skins/living-forest.d.ts +68 -0
  146. package/dist/skins/living-forest.js +68 -0
  147. package/dist/skins/lunar-new-year.d.ts +68 -0
  148. package/dist/skins/lunar-new-year.js +68 -0
  149. package/dist/skins/material-light.d.ts +57 -0
  150. package/dist/skins/material-light.js +57 -0
  151. package/dist/skins/neon-night-market.d.ts +68 -0
  152. package/dist/skins/neon-night-market.js +68 -0
  153. package/dist/skins/ocean-depths.d.ts +57 -0
  154. package/dist/skins/ocean-depths.js +57 -0
  155. package/dist/skins/orbital-hud.d.ts +68 -0
  156. package/dist/skins/orbital-hud.js +68 -0
  157. package/dist/skins/papel-picado.d.ts +68 -0
  158. package/dist/skins/papel-picado.js +68 -0
  159. package/dist/skins/phosphor-terminal.d.ts +68 -0
  160. package/dist/skins/phosphor-terminal.js +68 -0
  161. package/dist/skins/prism-glass.d.ts +57 -0
  162. package/dist/skins/prism-glass.js +57 -0
  163. package/dist/skins/retro-os.d.ts +57 -0
  164. package/dist/skins/retro-os.js +57 -0
  165. package/dist/skins/riso-zine.d.ts +68 -0
  166. package/dist/skins/riso-zine.js +68 -0
  167. package/dist/skins/scrapbook.d.ts +57 -0
  168. package/dist/skins/scrapbook.js +57 -0
  169. package/dist/skins/solar-sail.d.ts +68 -0
  170. package/dist/skins/solar-sail.js +68 -0
  171. package/dist/skins/studio-hardware.d.ts +57 -0
  172. package/dist/skins/studio-hardware.js +57 -0
  173. package/dist/skins/sumi-ink.d.ts +68 -0
  174. package/dist/skins/sumi-ink.js +68 -0
  175. package/dist/skins/swiss-poster.d.ts +68 -0
  176. package/dist/skins/swiss-poster.js +68 -0
  177. package/dist/skins/tactile-atelier.d.ts +57 -0
  178. package/dist/skins/tactile-atelier.js +57 -0
  179. package/dist/skins/tokyo-transit.d.ts +68 -0
  180. package/dist/skins/tokyo-transit.js +68 -0
  181. package/dist/skins/winamp-signal.d.ts +57 -0
  182. package/dist/skins/winamp-signal.js +57 -0
  183. package/dist/skins/y2k-titanium.d.ts +57 -0
  184. package/dist/skins/y2k-titanium.js +57 -0
  185. package/dist/skins/yule-knit.d.ts +68 -0
  186. package/dist/skins/yule-knit.js +68 -0
  187. package/dist/solar-sail.css +901 -0
  188. package/dist/starters-launch.d.ts +361 -0
  189. package/dist/starters-launch.js +808 -0
  190. package/dist/studio-hardware.css +867 -0
  191. package/dist/sumi/ornament.d.ts +3 -0
  192. package/dist/sumi/ornament.js +8 -0
  193. package/dist/sumi-ink.css +733 -0
  194. package/dist/swiss/ornament.d.ts +3 -0
  195. package/dist/swiss/ornament.js +8 -0
  196. package/dist/swiss-poster.css +727 -0
  197. package/dist/tactile-atelier.css +922 -0
  198. package/dist/theme-document.schema.json +790 -0
  199. package/dist/theme-schema.d.ts +453 -0
  200. package/dist/theme-schema.js +416 -0
  201. package/dist/titanium/ornament.d.ts +3 -0
  202. package/dist/titanium/ornament.js +11 -0
  203. package/dist/tokyo-transit.css +756 -0
  204. package/dist/transit/ornament.d.ts +3 -0
  205. package/dist/transit/ornament.js +8 -0
  206. package/dist/winamp-signal.css +1048 -0
  207. package/dist/y2k-titanium.css +979 -0
  208. package/dist/yule/ornament.d.ts +3 -0
  209. package/dist/yule/ornament.js +8 -0
  210. package/dist/yule-knit.css +850 -0
  211. package/package.json +351 -3
@@ -0,0 +1,1411 @@
1
+ import { parseThemeDocument } from "./theme-schema.js";
2
+ import { defaultChrome } from "./chrome.js";
3
+ import { launchCharacters, launchChrome, launchDocuments, } from "./starters-launch.js";
4
+ /**
5
+ * Ornament tuning per starter, applied after migration so saved v2 documents
6
+ * keep their own migrated defaults. Forest: ivy weighted to the corners with
7
+ * smaller, sparser leaves, so content and gutters stay calm.
8
+ */
9
+ const starterOrnaments = {
10
+ "dixy/living-forest": {
11
+ density: 18,
12
+ cornerDensity: 95,
13
+ canopyDepth: 34,
14
+ variation: 58,
15
+ scale: 19,
16
+ stemWeight: 30,
17
+ seed: 23,
18
+ style: "Wildflower hedge",
19
+ canopy: "Corner cascades",
20
+ stem: "Tender shoots",
21
+ },
22
+ };
23
+ /** Card glass per starter: v6 material fields that v2 sources cannot carry. */
24
+ const starterMaterials = {
25
+ "dixy/prism-glass": { backdropBlur: 22, backdropSaturate: 160 },
26
+ "dixy/ocean-depths": { backdropBlur: 14, backdropSaturate: 130 },
27
+ };
28
+ /** Window structure per starter; starters not listed keep plain frames. */
29
+ // Title bars stay available in the playground, but no starter ships one: they added
30
+ // height without meaning on content cards.
31
+ const starterChrome = {
32
+ "dixy/winamp-signal": {
33
+ edge: "bevel",
34
+ well: "lcd",
35
+ corners: "pixel",
36
+ },
37
+ "dixy/retro-os": { edge: "bevel", corners: "pixel" },
38
+ "dixy/studio-hardware": { well: "recessed" },
39
+ "dixy/art-deco": { edge: "stepped" },
40
+ "dixy/tactile-atelier": { well: "paper" },
41
+ "dixy/living-forest": { corners: "round" },
42
+ "dixy/prism-glass": { well: "glass" },
43
+ "dixy/ocean-depths": { well: "glass", corners: "round" },
44
+ "dixy/candy-clay": { edge: "line", well: "sunken", corners: "round" },
45
+ "dixy/y2k-titanium": { edge: "line", well: "tinted", corners: "notched" },
46
+ "dixy/material-light": { well: "sunken" },
47
+ "dixy/blueprint": {
48
+ edge: "double",
49
+ well: "none",
50
+ corners: "pixel",
51
+ },
52
+ "dixy/riso-zine": {
53
+ edge: "double",
54
+ well: "none",
55
+ corners: "inherit",
56
+ },
57
+ "dixy/neon-night-market": {
58
+ edge: "pill",
59
+ well: "none",
60
+ corners: "round",
61
+ },
62
+ "dixy/sumi-ink": { corners: "pixel" },
63
+ "dixy/tokyo-transit": {
64
+ edge: "line",
65
+ well: "tinted",
66
+ corners: "round",
67
+ },
68
+ "dixy/scrapbook": {
69
+ edge: "pill",
70
+ well: "tinted",
71
+ corners: "round",
72
+ },
73
+ };
74
+ /** Each starter's control language, motion, type voice, state cues, details and backdrop. */
75
+ const starterCharacters = {
76
+ "dixy/blueprint": {
77
+ controls: "instrument",
78
+ motion: {
79
+ style: "snappy",
80
+ press: 1,
81
+ tempo: 0.9,
82
+ },
83
+ type: {
84
+ headingCase: "uppercase",
85
+ headingTracking: 0.08,
86
+ headingWeight: 500,
87
+ numerals: "tabular",
88
+ },
89
+ states: "marching",
90
+ details: {
91
+ focus: "dashed",
92
+ divider: "dashed",
93
+ selection: "inverse",
94
+ scrollbar: "thin",
95
+ iconStroke: 1.25,
96
+ },
97
+ backdrop: {
98
+ pattern: "grid",
99
+ intensity: 0.35,
100
+ scale: 1,
101
+ },
102
+ },
103
+ "dixy/riso-zine": {
104
+ controls: "standard",
105
+ motion: {
106
+ style: "stepped",
107
+ press: 1.5,
108
+ tempo: 1,
109
+ },
110
+ type: {
111
+ headingCase: "none",
112
+ headingTracking: -0.01,
113
+ headingWeight: 400,
114
+ numerals: "proportional",
115
+ },
116
+ states: "stamp",
117
+ details: {
118
+ focus: "offset",
119
+ divider: "dotted",
120
+ selection: "highlighter",
121
+ scrollbar: "accent",
122
+ iconStroke: 2.5,
123
+ },
124
+ backdrop: {
125
+ pattern: "halftone",
126
+ intensity: 0.4,
127
+ scale: 1.4,
128
+ },
129
+ },
130
+ "dixy/neon-night-market": {
131
+ controls: "glass",
132
+ motion: {
133
+ style: "springy",
134
+ press: 1,
135
+ tempo: 1,
136
+ },
137
+ type: {
138
+ headingCase: "none",
139
+ headingTracking: 0.02,
140
+ headingWeight: 400,
141
+ numerals: "proportional",
142
+ },
143
+ states: "glow",
144
+ details: {
145
+ focus: "glow",
146
+ divider: "line",
147
+ selection: "accent",
148
+ scrollbar: "accent",
149
+ iconStroke: 1.75,
150
+ },
151
+ backdrop: {
152
+ pattern: "scanlines",
153
+ intensity: 0.15,
154
+ scale: 1,
155
+ },
156
+ },
157
+ "dixy/sumi-ink": {
158
+ controls: "standard",
159
+ motion: {
160
+ style: "drift",
161
+ press: 0.8,
162
+ tempo: 1.4,
163
+ },
164
+ type: {
165
+ headingCase: "none",
166
+ headingTracking: 0.04,
167
+ headingWeight: 400,
168
+ numerals: "oldstyle",
169
+ },
170
+ states: "standard",
171
+ details: {
172
+ focus: "offset",
173
+ divider: "line",
174
+ selection: "inverse",
175
+ scrollbar: "thin",
176
+ iconStroke: 1.25,
177
+ },
178
+ backdrop: {
179
+ pattern: "fibre",
180
+ intensity: 0.4,
181
+ scale: 1.2,
182
+ },
183
+ },
184
+ "dixy/tokyo-transit": {
185
+ controls: "standard",
186
+ motion: {
187
+ style: "snappy",
188
+ press: 1,
189
+ tempo: 0.85,
190
+ },
191
+ type: {
192
+ headingCase: "none",
193
+ headingTracking: 0,
194
+ headingWeight: 700,
195
+ numerals: "tabular",
196
+ },
197
+ states: "led",
198
+ details: {
199
+ focus: "ring",
200
+ divider: "line",
201
+ selection: "accent",
202
+ scrollbar: "native",
203
+ iconStroke: 2,
204
+ },
205
+ backdrop: {
206
+ pattern: "none",
207
+ intensity: 0,
208
+ scale: 1,
209
+ },
210
+ },
211
+ "dixy/scrapbook": {
212
+ controls: "standard",
213
+ motion: { style: "springy", press: 1.5, tempo: 1 },
214
+ type: {
215
+ headingCase: "none",
216
+ headingTracking: 0,
217
+ headingWeight: 700,
218
+ numerals: "proportional",
219
+ },
220
+ states: "glow",
221
+ details: {
222
+ focus: "offset",
223
+ divider: "dotted",
224
+ selection: "highlighter",
225
+ scrollbar: "accent",
226
+ iconStroke: 2,
227
+ },
228
+ backdrop: { pattern: "fibre", intensity: 0.35, scale: 0.8 },
229
+ },
230
+ "dixy/living-forest": {
231
+ controls: "botanical",
232
+ motion: { style: "drift", press: 1, tempo: 0.8 },
233
+ type: {
234
+ headingCase: "none",
235
+ headingTracking: -0.01,
236
+ headingWeight: 600,
237
+ numerals: "oldstyle",
238
+ },
239
+ states: "glow",
240
+ details: {
241
+ focus: "offset",
242
+ divider: "dotted",
243
+ selection: "highlighter",
244
+ scrollbar: "thin",
245
+ iconStroke: 1.75,
246
+ },
247
+ backdrop: { pattern: "topo", intensity: 0.1, scale: 2.6 },
248
+ },
249
+ "dixy/retro-os": {
250
+ controls: "pixel",
251
+ motion: { style: "stepped", press: 3, tempo: 1 },
252
+ type: {
253
+ headingCase: "none",
254
+ headingTracking: 0,
255
+ headingWeight: 400,
256
+ numerals: "tabular",
257
+ },
258
+ states: "marching",
259
+ details: {
260
+ focus: "dashed",
261
+ divider: "dashed",
262
+ selection: "inverse",
263
+ scrollbar: "accent",
264
+ iconStroke: 2.5,
265
+ },
266
+ backdrop: { pattern: "dots", intensity: 0.5, scale: 1 },
267
+ },
268
+ "dixy/winamp-signal": {
269
+ controls: "instrument",
270
+ motion: { style: "snappy", press: 0.5, tempo: 0.8 },
271
+ type: {
272
+ headingCase: "none",
273
+ headingTracking: 0.02,
274
+ headingWeight: 400,
275
+ numerals: "tabular",
276
+ },
277
+ states: "led",
278
+ details: {
279
+ focus: "glow",
280
+ divider: "groove",
281
+ selection: "inverse",
282
+ scrollbar: "thin",
283
+ iconStroke: 1.5,
284
+ },
285
+ backdrop: { pattern: "scanlines", intensity: 0.6, scale: 1 },
286
+ },
287
+ "dixy/studio-hardware": {
288
+ controls: "hardware",
289
+ motion: { style: "weighted", press: 2, tempo: 1 },
290
+ type: {
291
+ headingCase: "none",
292
+ headingTracking: -0.03,
293
+ headingWeight: 700,
294
+ numerals: "tabular",
295
+ },
296
+ states: "inlay",
297
+ details: {
298
+ focus: "offset",
299
+ divider: "groove",
300
+ selection: "accent",
301
+ scrollbar: "thin",
302
+ iconStroke: 2.25,
303
+ },
304
+ backdrop: { pattern: "grid", intensity: 0.35, scale: 1 },
305
+ },
306
+ "dixy/prism-glass": {
307
+ controls: "glass",
308
+ motion: { style: "drift", press: 0.5, tempo: 1.1 },
309
+ type: {
310
+ headingCase: "none",
311
+ headingTracking: -0.03,
312
+ headingWeight: 800,
313
+ numerals: "proportional",
314
+ },
315
+ states: "glow",
316
+ details: {
317
+ focus: "glow",
318
+ divider: "line",
319
+ selection: "highlighter",
320
+ scrollbar: "thin",
321
+ iconStroke: 1.5,
322
+ },
323
+ backdrop: { pattern: "caustics", intensity: 0.6, scale: 1.2 },
324
+ },
325
+ "dixy/tactile-atelier": {
326
+ controls: "stitched",
327
+ motion: { style: "weighted", press: 1.5, tempo: 0.9 },
328
+ type: {
329
+ headingCase: "none",
330
+ headingTracking: 0,
331
+ headingWeight: 500,
332
+ numerals: "oldstyle",
333
+ },
334
+ states: "stamp",
335
+ details: {
336
+ focus: "double",
337
+ divider: "dashed",
338
+ selection: "highlighter",
339
+ scrollbar: "thin",
340
+ iconStroke: 1.75,
341
+ },
342
+ backdrop: { pattern: "fibre", intensity: 0.4, scale: 1 },
343
+ },
344
+ "dixy/ocean-depths": {
345
+ controls: "pearl",
346
+ motion: { style: "drift", press: 1, tempo: 1.2 },
347
+ type: {
348
+ headingCase: "none",
349
+ headingTracking: -0.02,
350
+ headingWeight: 500,
351
+ numerals: "proportional",
352
+ },
353
+ states: "glow",
354
+ details: {
355
+ focus: "glow",
356
+ divider: "dotted",
357
+ selection: "accent",
358
+ scrollbar: "thin",
359
+ iconStroke: 1.75,
360
+ },
361
+ backdrop: { pattern: "caustics", intensity: 0.7, scale: 1.5 },
362
+ },
363
+ "dixy/candy-clay": {
364
+ controls: "clay",
365
+ motion: { style: "springy", press: 2.5, tempo: 1 },
366
+ type: {
367
+ headingCase: "none",
368
+ headingTracking: -0.01,
369
+ headingWeight: 700,
370
+ numerals: "proportional",
371
+ },
372
+ states: "glow",
373
+ details: {
374
+ focus: "offset",
375
+ divider: "dotted",
376
+ selection: "highlighter",
377
+ scrollbar: "accent",
378
+ iconStroke: 2.5,
379
+ },
380
+ backdrop: { pattern: "dots", intensity: 0.35, scale: 1.6 },
381
+ },
382
+ "dixy/art-deco": {
383
+ controls: "brass",
384
+ motion: { style: "weighted", press: 1, tempo: 1.2 },
385
+ type: {
386
+ headingCase: "uppercase",
387
+ headingTracking: 0.08,
388
+ headingWeight: 400,
389
+ numerals: "oldstyle",
390
+ },
391
+ states: "inlay",
392
+ details: {
393
+ focus: "double",
394
+ divider: "double",
395
+ selection: "inverse",
396
+ scrollbar: "thin",
397
+ iconStroke: 1.25,
398
+ },
399
+ backdrop: { pattern: "sunburst", intensity: 0.5, scale: 1 },
400
+ },
401
+ "dixy/y2k-titanium": {
402
+ controls: "chrome",
403
+ motion: { style: "snappy", press: 1, tempo: 0.9 },
404
+ type: {
405
+ headingCase: "uppercase",
406
+ headingTracking: 0.08,
407
+ headingWeight: 600,
408
+ numerals: "tabular",
409
+ },
410
+ states: "led",
411
+ details: {
412
+ focus: "offset",
413
+ divider: "groove",
414
+ selection: "inverse",
415
+ scrollbar: "accent",
416
+ iconStroke: 1.75,
417
+ },
418
+ backdrop: { pattern: "halftone", intensity: 0.5, scale: 1 },
419
+ },
420
+ "dixy/material-light": {
421
+ controls: "halo",
422
+ motion: { style: "springy", press: 0.5, tempo: 0.8 },
423
+ type: {
424
+ headingCase: "none",
425
+ headingTracking: -0.035,
426
+ headingWeight: 500,
427
+ numerals: "proportional",
428
+ },
429
+ states: "glow",
430
+ details: {
431
+ focus: "glow",
432
+ divider: "line",
433
+ selection: "accent",
434
+ scrollbar: "thin",
435
+ iconStroke: 1.5,
436
+ },
437
+ backdrop: { pattern: "dots", intensity: 0.22, scale: 0.8 },
438
+ },
439
+ };
440
+ /** Portable recipes for all eleven installed themes. */
441
+ export const themeDocuments = [
442
+ {
443
+ schemaVersion: 2,
444
+ id: "dixy/living-forest",
445
+ name: "Living Forest",
446
+ revision: 1,
447
+ foundations: {
448
+ componentFinish: "inherit",
449
+ customAccent: true,
450
+ lightness: 0.48,
451
+ chroma: 0.1,
452
+ hue: 145,
453
+ accentColor: "grass",
454
+ neutralColor: "sage",
455
+ radius: "lg",
456
+ density: "comfortable",
457
+ material: "paper",
458
+ shape: "rounded",
459
+ appearance: "light",
460
+ bodyFont: "figtree",
461
+ headingFont: "fraunces",
462
+ border: 1,
463
+ depth: "raised",
464
+ ornament: "balanced",
465
+ relief: 1,
466
+ effects: "static",
467
+ },
468
+ recipes: {
469
+ material: {
470
+ id: "botanical-paper",
471
+ version: 1,
472
+ parameters: {
473
+ surfaceMix: 15,
474
+ darkSurfaceMix: 25,
475
+ cushion: 0,
476
+ inkTint: 0.15,
477
+ sheen: 0.3,
478
+ textureScale: 1,
479
+ lightAngle: 145,
480
+ },
481
+ },
482
+ frame: {
483
+ id: "forest",
484
+ version: 1,
485
+ parameters: {
486
+ width: 1,
487
+ paddingTop: 32,
488
+ paddingInline: 32,
489
+ paddingBottom: 32,
490
+ inset: 12,
491
+ cornerScale: 1,
492
+ cornerVariation: 0.125,
493
+ },
494
+ },
495
+ },
496
+ },
497
+ {
498
+ schemaVersion: 2,
499
+ id: "dixy/retro-os",
500
+ name: "Retro OS",
501
+ revision: 1,
502
+ foundations: {
503
+ componentFinish: "inherit",
504
+ customAccent: false,
505
+ lightness: 0.54,
506
+ chroma: 0.2,
507
+ hue: 305,
508
+ accentColor: "indigo",
509
+ neutralColor: "sand",
510
+ radius: "none",
511
+ density: "default",
512
+ material: "matte",
513
+ shape: "square",
514
+ appearance: "light",
515
+ bodyFont: "inter",
516
+ headingFont: "pixel",
517
+ border: 2,
518
+ depth: "raised",
519
+ ornament: "balanced",
520
+ relief: 1,
521
+ effects: "static",
522
+ },
523
+ recipes: {
524
+ material: {
525
+ id: "pixel-enamel",
526
+ version: 1,
527
+ parameters: {
528
+ surfaceMix: 10,
529
+ darkSurfaceMix: 20,
530
+ cushion: 0,
531
+ inkTint: 0,
532
+ sheen: 0.2,
533
+ textureScale: 1,
534
+ lightAngle: 145,
535
+ },
536
+ },
537
+ frame: {
538
+ id: "pixel",
539
+ version: 1,
540
+ parameters: {
541
+ width: 2,
542
+ paddingTop: 24,
543
+ paddingInline: 24,
544
+ paddingBottom: 24,
545
+ inset: 0,
546
+ cornerScale: 1,
547
+ cornerVariation: 0,
548
+ },
549
+ },
550
+ },
551
+ },
552
+ {
553
+ schemaVersion: 2,
554
+ id: "dixy/winamp-signal",
555
+ name: "Winamp Signal",
556
+ revision: 1,
557
+ foundations: {
558
+ componentFinish: "inherit",
559
+ customAccent: false,
560
+ lightness: 0.54,
561
+ chroma: 0.2,
562
+ hue: 305,
563
+ accentColor: "lime",
564
+ neutralColor: "olive",
565
+ radius: "sm",
566
+ density: "default",
567
+ material: "metal",
568
+ shape: "square",
569
+ appearance: "dark",
570
+ bodyFont: "inter",
571
+ headingFont: "lcd",
572
+ border: 1,
573
+ depth: "raised",
574
+ ornament: "balanced",
575
+ relief: 1,
576
+ effects: "static",
577
+ },
578
+ recipes: {
579
+ material: {
580
+ id: "gunmetal",
581
+ version: 1,
582
+ parameters: {
583
+ surfaceMix: 25,
584
+ darkSurfaceMix: 15,
585
+ cushion: 0,
586
+ inkTint: 0,
587
+ sheen: 0.4,
588
+ textureScale: 1,
589
+ lightAngle: 145,
590
+ },
591
+ },
592
+ frame: {
593
+ id: "rails",
594
+ version: 1,
595
+ parameters: {
596
+ width: 3,
597
+ paddingTop: 34,
598
+ paddingInline: 24,
599
+ paddingBottom: 26,
600
+ inset: 20,
601
+ cornerScale: 1,
602
+ cornerVariation: 0,
603
+ },
604
+ },
605
+ },
606
+ },
607
+ {
608
+ schemaVersion: 2,
609
+ id: "dixy/studio-hardware",
610
+ name: "Studio Hardware",
611
+ revision: 1,
612
+ foundations: {
613
+ componentFinish: "inherit",
614
+ customAccent: false,
615
+ lightness: 0.54,
616
+ chroma: 0.2,
617
+ hue: 305,
618
+ accentColor: "orange",
619
+ neutralColor: "stone",
620
+ radius: "lg",
621
+ density: "default",
622
+ material: "metal",
623
+ shape: "rounded",
624
+ appearance: "light",
625
+ bodyFont: "inter",
626
+ headingFont: "inter",
627
+ border: 1,
628
+ depth: "raised",
629
+ ornament: "balanced",
630
+ relief: 1,
631
+ effects: "static",
632
+ },
633
+ recipes: {
634
+ material: {
635
+ id: "ceramic",
636
+ version: 1,
637
+ parameters: {
638
+ surfaceMix: 15,
639
+ darkSurfaceMix: 20,
640
+ cushion: 0,
641
+ inkTint: 0,
642
+ sheen: 0.5,
643
+ textureScale: 1,
644
+ lightAngle: 145,
645
+ },
646
+ },
647
+ frame: {
648
+ id: "ceramic",
649
+ version: 1,
650
+ parameters: {
651
+ width: 1,
652
+ paddingTop: 30,
653
+ paddingInline: 30,
654
+ paddingBottom: 30,
655
+ inset: 14,
656
+ cornerScale: 1,
657
+ cornerVariation: 0,
658
+ },
659
+ },
660
+ },
661
+ },
662
+ {
663
+ schemaVersion: 2,
664
+ id: "dixy/prism-glass",
665
+ name: "Prism Glass",
666
+ revision: 1,
667
+ foundations: {
668
+ componentFinish: "inherit",
669
+ customAccent: false,
670
+ lightness: 0.54,
671
+ chroma: 0.2,
672
+ hue: 305,
673
+ accentColor: "iris",
674
+ neutralColor: "mauve",
675
+ radius: "lg",
676
+ density: "default",
677
+ material: "glossy",
678
+ shape: "rounded",
679
+ appearance: "light",
680
+ bodyFont: "manrope",
681
+ headingFont: "manrope",
682
+ border: 1,
683
+ depth: "raised",
684
+ ornament: "balanced",
685
+ relief: 1,
686
+ effects: "static",
687
+ },
688
+ recipes: {
689
+ material: {
690
+ id: "prismatic-glass",
691
+ version: 1,
692
+ parameters: {
693
+ surfaceMix: 0,
694
+ darkSurfaceMix: 0,
695
+ cushion: 0,
696
+ inkTint: 0,
697
+ sheen: 0.6,
698
+ textureScale: 1,
699
+ lightAngle: 145,
700
+ },
701
+ },
702
+ frame: {
703
+ id: "glass",
704
+ version: 1,
705
+ parameters: {
706
+ width: 1,
707
+ paddingTop: 28,
708
+ paddingInline: 28,
709
+ paddingBottom: 28,
710
+ inset: 6,
711
+ cornerScale: 1,
712
+ cornerVariation: 0,
713
+ },
714
+ },
715
+ },
716
+ },
717
+ {
718
+ schemaVersion: 2,
719
+ id: "dixy/tactile-atelier",
720
+ name: "Tactile Atelier",
721
+ revision: 1,
722
+ foundations: {
723
+ componentFinish: "inherit",
724
+ customAccent: true,
725
+ lightness: 0.53,
726
+ chroma: 0.15,
727
+ hue: 35,
728
+ accentColor: "tomato",
729
+ neutralColor: "sand",
730
+ radius: "sm",
731
+ density: "comfortable",
732
+ material: "paper",
733
+ shape: "rounded",
734
+ appearance: "light",
735
+ bodyFont: "figtree",
736
+ headingFont: "cormorant",
737
+ border: 1,
738
+ depth: "raised",
739
+ ornament: "balanced",
740
+ relief: 1,
741
+ effects: "static",
742
+ },
743
+ recipes: {
744
+ material: {
745
+ id: "atelier-paper",
746
+ version: 1,
747
+ parameters: {
748
+ surfaceMix: 10,
749
+ darkSurfaceMix: 20,
750
+ cushion: 0,
751
+ inkTint: 0,
752
+ sheen: 0.25,
753
+ textureScale: 1,
754
+ lightAngle: 145,
755
+ },
756
+ },
757
+ frame: {
758
+ id: "stitch",
759
+ version: 1,
760
+ parameters: {
761
+ width: 9,
762
+ paddingTop: 26,
763
+ paddingInline: 26,
764
+ paddingBottom: 26,
765
+ inset: 10,
766
+ cornerScale: 1,
767
+ cornerVariation: 0,
768
+ },
769
+ },
770
+ },
771
+ },
772
+ {
773
+ schemaVersion: 2,
774
+ id: "dixy/ocean-depths",
775
+ name: "Ocean Depths",
776
+ revision: 1,
777
+ foundations: {
778
+ componentFinish: "inherit",
779
+ customAccent: true,
780
+ lightness: 0.72,
781
+ chroma: 0.13,
782
+ hue: 190,
783
+ accentColor: "teal",
784
+ neutralColor: "mist",
785
+ radius: "lg",
786
+ density: "default",
787
+ material: "glossy",
788
+ shape: "rounded",
789
+ appearance: "light",
790
+ bodyFont: "figtree",
791
+ headingFont: "fraunces",
792
+ border: 1,
793
+ depth: "raised",
794
+ ornament: "balanced",
795
+ relief: 1,
796
+ effects: "static",
797
+ },
798
+ recipes: {
799
+ material: {
800
+ id: "sea-glass",
801
+ version: 1,
802
+ parameters: {
803
+ surfaceMix: 0,
804
+ darkSurfaceMix: 0,
805
+ cushion: 0,
806
+ inkTint: 0,
807
+ sheen: 0.4,
808
+ textureScale: 1,
809
+ lightAngle: 145,
810
+ },
811
+ },
812
+ frame: {
813
+ // Plain card: the material carries the look (as in the HTML redesign).
814
+ id: "none",
815
+ version: 1,
816
+ parameters: {
817
+ width: 0,
818
+ paddingTop: 26,
819
+ paddingInline: 24,
820
+ paddingBottom: 24,
821
+ inset: 0,
822
+ cornerScale: 1,
823
+ cornerVariation: 0,
824
+ },
825
+ },
826
+ },
827
+ },
828
+ {
829
+ schemaVersion: 2,
830
+ id: "dixy/candy-clay",
831
+ name: "Candy Clay",
832
+ revision: 1,
833
+ foundations: {
834
+ componentFinish: "inherit",
835
+ customAccent: false,
836
+ lightness: 0.74,
837
+ chroma: 0.17,
838
+ hue: 48,
839
+ accentColor: "pink",
840
+ neutralColor: "mauve",
841
+ radius: "full",
842
+ density: "default",
843
+ material: "soft",
844
+ shape: "rounded",
845
+ appearance: "light",
846
+ bodyFont: "rounded",
847
+ headingFont: "rounded",
848
+ border: 1,
849
+ depth: "raised",
850
+ ornament: "balanced",
851
+ relief: 1,
852
+ effects: "static",
853
+ },
854
+ recipes: {
855
+ material: {
856
+ id: "candy-clay",
857
+ version: 1,
858
+ parameters: {
859
+ surfaceMix: 10,
860
+ darkSurfaceMix: 20,
861
+ cushion: 0.85,
862
+ inkTint: 0.85,
863
+ sheen: 0.5,
864
+ textureScale: 1,
865
+ lightAngle: 145,
866
+ },
867
+ },
868
+ frame: {
869
+ // Plain card: the material carries the look (as in the HTML redesign).
870
+ id: "none",
871
+ version: 1,
872
+ parameters: {
873
+ width: 0,
874
+ paddingTop: 28,
875
+ paddingInline: 26,
876
+ paddingBottom: 26,
877
+ inset: 0,
878
+ cornerScale: 1.5,
879
+ cornerVariation: 0.15,
880
+ },
881
+ },
882
+ },
883
+ },
884
+ {
885
+ schemaVersion: 2,
886
+ id: "dixy/art-deco",
887
+ name: "Art Deco",
888
+ revision: 1,
889
+ foundations: {
890
+ componentFinish: "inherit",
891
+ customAccent: false,
892
+ lightness: 0.54,
893
+ chroma: 0.2,
894
+ hue: 305,
895
+ accentColor: "jade",
896
+ neutralColor: "sand",
897
+ radius: "none",
898
+ density: "default",
899
+ material: "glossy",
900
+ shape: "rounded",
901
+ appearance: "light",
902
+ bodyFont: "figtree",
903
+ headingFont: "deco",
904
+ border: 1,
905
+ depth: "raised",
906
+ ornament: "balanced",
907
+ relief: 1,
908
+ effects: "static",
909
+ },
910
+ recipes: {
911
+ material: {
912
+ id: "lacquer-brass",
913
+ version: 1,
914
+ parameters: {
915
+ surfaceMix: 10,
916
+ darkSurfaceMix: 15,
917
+ cushion: 0,
918
+ inkTint: 0,
919
+ sheen: 0.3,
920
+ textureScale: 1,
921
+ lightAngle: 145,
922
+ },
923
+ },
924
+ frame: {
925
+ id: "deco",
926
+ version: 1,
927
+ parameters: {
928
+ width: 2,
929
+ paddingTop: 36,
930
+ paddingInline: 36,
931
+ paddingBottom: 36,
932
+ inset: 10,
933
+ cornerScale: 1,
934
+ cornerVariation: 0,
935
+ },
936
+ },
937
+ },
938
+ },
939
+ {
940
+ schemaVersion: 2,
941
+ id: "dixy/y2k-titanium",
942
+ name: "Y2K Titanium",
943
+ revision: 1,
944
+ foundations: {
945
+ componentFinish: "inherit",
946
+ customAccent: true,
947
+ lightness: 0.7,
948
+ chroma: 0.15,
949
+ hue: 220,
950
+ accentColor: "cyan",
951
+ neutralColor: "slate",
952
+ radius: "none",
953
+ density: "default",
954
+ material: "metal",
955
+ shape: "rounded",
956
+ appearance: "light",
957
+ bodyFont: "inter",
958
+ headingFont: "techno",
959
+ border: 1,
960
+ depth: "raised",
961
+ ornament: "balanced",
962
+ relief: 1,
963
+ effects: "static",
964
+ },
965
+ recipes: {
966
+ material: {
967
+ id: "titanium",
968
+ version: 1,
969
+ parameters: {
970
+ surfaceMix: 15,
971
+ darkSurfaceMix: 20,
972
+ cushion: 0,
973
+ inkTint: 0,
974
+ sheen: 0.5,
975
+ textureScale: 1,
976
+ lightAngle: 145,
977
+ },
978
+ },
979
+ frame: {
980
+ id: "chamfer",
981
+ version: 1,
982
+ parameters: {
983
+ width: 3,
984
+ paddingTop: 30,
985
+ paddingInline: 28,
986
+ paddingBottom: 28,
987
+ inset: 10,
988
+ cornerScale: 1,
989
+ cornerVariation: 0,
990
+ },
991
+ },
992
+ },
993
+ },
994
+ {
995
+ schemaVersion: 2,
996
+ id: "dixy/material-light",
997
+ name: "Material Light",
998
+ revision: 1,
999
+ foundations: {
1000
+ componentFinish: "inherit",
1001
+ customAccent: false,
1002
+ lightness: 0.54,
1003
+ chroma: 0.2,
1004
+ hue: 305,
1005
+ accentColor: "blue",
1006
+ neutralColor: "slate",
1007
+ radius: "lg",
1008
+ density: "default",
1009
+ material: "glossy",
1010
+ shape: "rounded",
1011
+ appearance: "light",
1012
+ bodyFont: "figtree",
1013
+ headingFont: "figtree",
1014
+ border: 1,
1015
+ depth: "raised",
1016
+ ornament: "balanced",
1017
+ relief: 1,
1018
+ effects: "static",
1019
+ },
1020
+ recipes: {
1021
+ material: {
1022
+ id: "frosted-porcelain",
1023
+ version: 1,
1024
+ parameters: {
1025
+ surfaceMix: 20,
1026
+ darkSurfaceMix: 25,
1027
+ cushion: 0,
1028
+ inkTint: 0,
1029
+ sheen: 0.3,
1030
+ textureScale: 1,
1031
+ lightAngle: 145,
1032
+ },
1033
+ },
1034
+ frame: {
1035
+ id: "halo",
1036
+ version: 1,
1037
+ parameters: {
1038
+ width: 1,
1039
+ paddingTop: 30,
1040
+ paddingInline: 28,
1041
+ paddingBottom: 28,
1042
+ inset: 10,
1043
+ cornerScale: 1,
1044
+ cornerVariation: 0,
1045
+ },
1046
+ },
1047
+ },
1048
+ },
1049
+ {
1050
+ schemaVersion: 2,
1051
+ id: "dixy/scrapbook",
1052
+ name: "Scrapbook",
1053
+ revision: 1,
1054
+ foundations: {
1055
+ componentFinish: "inherit",
1056
+ customAccent: false,
1057
+ lightness: 0.54,
1058
+ chroma: 0.2,
1059
+ hue: 305,
1060
+ accentColor: "crimson",
1061
+ neutralColor: "mauve",
1062
+ radius: "sm",
1063
+ density: "default",
1064
+ material: "glossy",
1065
+ shape: "rounded",
1066
+ appearance: "light",
1067
+ bodyFont: "figtree",
1068
+ headingFont: "caveat",
1069
+ border: 2,
1070
+ depth: "raised",
1071
+ ornament: "balanced",
1072
+ relief: 1,
1073
+ effects: "static",
1074
+ },
1075
+ recipes: {
1076
+ material: {
1077
+ id: "scrapbook-paper",
1078
+ version: 1,
1079
+ parameters: {
1080
+ surfaceMix: 10,
1081
+ darkSurfaceMix: 20,
1082
+ cushion: 0,
1083
+ inkTint: 0,
1084
+ sheen: 0,
1085
+ textureScale: 1,
1086
+ lightAngle: 160,
1087
+ },
1088
+ },
1089
+ frame: {
1090
+ id: "none",
1091
+ version: 1,
1092
+ parameters: {
1093
+ width: 0,
1094
+ paddingTop: 24,
1095
+ paddingInline: 22,
1096
+ paddingBottom: 22,
1097
+ inset: 0,
1098
+ cornerScale: 1,
1099
+ cornerVariation: 0,
1100
+ },
1101
+ },
1102
+ },
1103
+ },
1104
+ {
1105
+ schemaVersion: 2,
1106
+ id: "dixy/blueprint",
1107
+ name: "Blueprint",
1108
+ revision: 1,
1109
+ foundations: {
1110
+ componentFinish: "inherit",
1111
+ customAccent: false,
1112
+ lightness: 0.54,
1113
+ chroma: 0.2,
1114
+ hue: 305,
1115
+ accentColor: "sky",
1116
+ neutralColor: "slate",
1117
+ radius: "sm",
1118
+ density: "default",
1119
+ material: "paper",
1120
+ shape: "square",
1121
+ appearance: "dark",
1122
+ bodyFont: "inter",
1123
+ headingFont: "plex",
1124
+ border: 1,
1125
+ depth: "none",
1126
+ ornament: "balanced",
1127
+ relief: 1,
1128
+ effects: "static",
1129
+ },
1130
+ recipes: {
1131
+ material: {
1132
+ id: "cyanotype",
1133
+ version: 1,
1134
+ parameters: {
1135
+ surfaceMix: 30,
1136
+ darkSurfaceMix: 35,
1137
+ cushion: 0,
1138
+ inkTint: 0,
1139
+ sheen: 0.1,
1140
+ textureScale: 1,
1141
+ lightAngle: 180,
1142
+ },
1143
+ },
1144
+ frame: {
1145
+ id: "drafting",
1146
+ version: 1,
1147
+ parameters: {
1148
+ width: 1,
1149
+ paddingTop: 36,
1150
+ paddingInline: 34,
1151
+ paddingBottom: 34,
1152
+ inset: 10,
1153
+ cornerScale: 0.5,
1154
+ cornerVariation: 0,
1155
+ },
1156
+ },
1157
+ },
1158
+ },
1159
+ {
1160
+ schemaVersion: 2,
1161
+ id: "dixy/riso-zine",
1162
+ name: "Riso Zine",
1163
+ revision: 1,
1164
+ foundations: {
1165
+ componentFinish: "inherit",
1166
+ customAccent: false,
1167
+ lightness: 0.54,
1168
+ chroma: 0.2,
1169
+ hue: 305,
1170
+ accentColor: "pink",
1171
+ neutralColor: "sand",
1172
+ radius: "sm",
1173
+ density: "default",
1174
+ material: "paper",
1175
+ shape: "rounded",
1176
+ appearance: "light",
1177
+ bodyFont: "inter",
1178
+ headingFont: "archivo",
1179
+ border: 2,
1180
+ depth: "raised",
1181
+ ornament: "balanced",
1182
+ relief: 1,
1183
+ effects: "static",
1184
+ },
1185
+ recipes: {
1186
+ material: {
1187
+ id: "riso-paper",
1188
+ version: 1,
1189
+ parameters: {
1190
+ surfaceMix: 35,
1191
+ darkSurfaceMix: 40,
1192
+ cushion: 0,
1193
+ inkTint: 0,
1194
+ sheen: 0,
1195
+ textureScale: 1.4,
1196
+ lightAngle: 135,
1197
+ },
1198
+ },
1199
+ frame: {
1200
+ id: "riso",
1201
+ version: 1,
1202
+ parameters: {
1203
+ width: 2,
1204
+ paddingTop: 34,
1205
+ paddingInline: 32,
1206
+ paddingBottom: 32,
1207
+ inset: 10,
1208
+ cornerScale: 0.6,
1209
+ cornerVariation: 0.1,
1210
+ },
1211
+ },
1212
+ },
1213
+ },
1214
+ {
1215
+ schemaVersion: 2,
1216
+ id: "dixy/neon-night-market",
1217
+ name: "Neon Night Market",
1218
+ revision: 1,
1219
+ foundations: {
1220
+ componentFinish: "inherit",
1221
+ customAccent: false,
1222
+ lightness: 0.54,
1223
+ chroma: 0.2,
1224
+ hue: 305,
1225
+ accentColor: "fuchsia",
1226
+ neutralColor: "mauve",
1227
+ radius: "lg",
1228
+ density: "default",
1229
+ material: "glossy",
1230
+ shape: "pill",
1231
+ appearance: "dark",
1232
+ bodyFont: "inter",
1233
+ headingFont: "neon",
1234
+ border: 1,
1235
+ depth: "floating",
1236
+ ornament: "balanced",
1237
+ relief: 1,
1238
+ effects: "static",
1239
+ },
1240
+ recipes: {
1241
+ material: {
1242
+ id: "wet-asphalt",
1243
+ version: 1,
1244
+ parameters: {
1245
+ surfaceMix: 40,
1246
+ darkSurfaceMix: 45,
1247
+ cushion: 0,
1248
+ inkTint: 0,
1249
+ sheen: 0.45,
1250
+ textureScale: 1,
1251
+ lightAngle: 200,
1252
+ },
1253
+ },
1254
+ frame: {
1255
+ id: "neon",
1256
+ version: 1,
1257
+ parameters: {
1258
+ width: 1,
1259
+ paddingTop: 36,
1260
+ paddingInline: 34,
1261
+ paddingBottom: 36,
1262
+ inset: 12,
1263
+ cornerScale: 1.2,
1264
+ cornerVariation: 0,
1265
+ },
1266
+ },
1267
+ },
1268
+ },
1269
+ {
1270
+ schemaVersion: 2,
1271
+ id: "dixy/sumi-ink",
1272
+ name: "Sumi Ink",
1273
+ revision: 1,
1274
+ foundations: {
1275
+ componentFinish: "inherit",
1276
+ customAccent: false,
1277
+ lightness: 0.54,
1278
+ chroma: 0.2,
1279
+ hue: 305,
1280
+ accentColor: "tomato",
1281
+ neutralColor: "stone",
1282
+ radius: "sm",
1283
+ density: "comfortable",
1284
+ material: "paper",
1285
+ shape: "rounded",
1286
+ appearance: "light",
1287
+ bodyFont: "inter",
1288
+ headingFont: "mincho",
1289
+ border: 1,
1290
+ depth: "none",
1291
+ ornament: "balanced",
1292
+ relief: 1,
1293
+ effects: "static",
1294
+ },
1295
+ recipes: {
1296
+ material: {
1297
+ id: "washi",
1298
+ version: 1,
1299
+ parameters: {
1300
+ surfaceMix: 30,
1301
+ darkSurfaceMix: 40,
1302
+ cushion: 0,
1303
+ inkTint: 0.2,
1304
+ sheen: 0.1,
1305
+ textureScale: 1.2,
1306
+ lightAngle: 160,
1307
+ },
1308
+ },
1309
+ frame: {
1310
+ id: "sumi",
1311
+ version: 1,
1312
+ parameters: {
1313
+ width: 0,
1314
+ paddingTop: 38,
1315
+ paddingInline: 36,
1316
+ paddingBottom: 38,
1317
+ inset: 12,
1318
+ cornerScale: 0.5,
1319
+ cornerVariation: 0.2,
1320
+ },
1321
+ },
1322
+ },
1323
+ },
1324
+ {
1325
+ schemaVersion: 2,
1326
+ id: "dixy/tokyo-transit",
1327
+ name: "Tokyo Transit",
1328
+ revision: 1,
1329
+ foundations: {
1330
+ componentFinish: "inherit",
1331
+ customAccent: false,
1332
+ lightness: 0.54,
1333
+ chroma: 0.2,
1334
+ hue: 305,
1335
+ accentColor: "green",
1336
+ neutralColor: "gray",
1337
+ radius: "md",
1338
+ density: "default",
1339
+ material: "matte",
1340
+ shape: "rounded",
1341
+ appearance: "light",
1342
+ bodyFont: "gothic",
1343
+ headingFont: "gothic",
1344
+ border: 1,
1345
+ depth: "raised",
1346
+ ornament: "balanced",
1347
+ relief: 1,
1348
+ effects: "static",
1349
+ },
1350
+ recipes: {
1351
+ material: {
1352
+ id: "station-enamel",
1353
+ version: 1,
1354
+ parameters: {
1355
+ surfaceMix: 40,
1356
+ darkSurfaceMix: 45,
1357
+ cushion: 0,
1358
+ inkTint: 0,
1359
+ sheen: 0.3,
1360
+ textureScale: 1,
1361
+ lightAngle: 180,
1362
+ },
1363
+ },
1364
+ frame: {
1365
+ id: "transit",
1366
+ version: 1,
1367
+ parameters: {
1368
+ width: 1,
1369
+ paddingTop: 38,
1370
+ paddingInline: 34,
1371
+ paddingBottom: 34,
1372
+ inset: 10,
1373
+ cornerScale: 1,
1374
+ cornerVariation: 0,
1375
+ },
1376
+ },
1377
+ },
1378
+ },
1379
+ // The fifteen 2026-12 launch starters live in starters-launch.ts.
1380
+ ...launchDocuments,
1381
+ ].map((source) => {
1382
+ // Starters are authored as v2 data; migrate first, then apply their own character.
1383
+ const migrated = parseThemeDocument(source);
1384
+ const ornament = starterOrnaments[migrated.id];
1385
+ const glass = starterMaterials[migrated.id];
1386
+ return parseThemeDocument({
1387
+ ...migrated,
1388
+ recipes: {
1389
+ ...migrated.recipes,
1390
+ material: glass
1391
+ ? {
1392
+ ...migrated.recipes.material,
1393
+ parameters: { ...migrated.recipes.material.parameters, ...glass },
1394
+ }
1395
+ : migrated.recipes.material,
1396
+ frame: ornament
1397
+ ? {
1398
+ ...migrated.recipes.frame,
1399
+ ornament: { ...migrated.recipes.frame.ornament, ...ornament },
1400
+ }
1401
+ : migrated.recipes.frame,
1402
+ },
1403
+ character: {
1404
+ ...(starterCharacters[migrated.id] ?? launchCharacters[migrated.id]),
1405
+ chrome: {
1406
+ ...defaultChrome,
1407
+ ...(starterChrome[migrated.id] ?? launchChrome[migrated.id]),
1408
+ },
1409
+ },
1410
+ });
1411
+ });