sketchmark 2.1.0 → 2.1.2

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 (117) hide show
  1. package/package.json +1 -7
  2. package/ANIMATABLE_MATRIX.md +0 -177
  3. package/KERNEL_SPEC.md +0 -412
  4. package/PACKS.md +0 -81
  5. package/PRESETS.md +0 -182
  6. package/dist/src/builders/index.d.ts +0 -64
  7. package/dist/src/builders/index.js +0 -212
  8. package/dist/src/compounds.d.ts +0 -13
  9. package/dist/src/compounds.js +0 -118
  10. package/dist/src/deck.d.ts +0 -4
  11. package/dist/src/deck.js +0 -91
  12. package/dist/src/export/index.d.ts +0 -8
  13. package/dist/src/export/index.js +0 -15
  14. package/dist/src/kernel.d.ts +0 -8
  15. package/dist/src/kernel.js +0 -68
  16. package/dist/src/motion.d.ts +0 -4
  17. package/dist/src/motion.js +0 -262
  18. package/dist/src/patch.d.ts +0 -5
  19. package/dist/src/patch.js +0 -72
  20. package/dist/src/player/index.d.ts +0 -68
  21. package/dist/src/player/index.js +0 -600
  22. package/dist/src/project.d.ts +0 -11
  23. package/dist/src/project.js +0 -107
  24. package/dist/src/render/raw-three.d.ts +0 -7
  25. package/dist/src/render/raw-three.js +0 -17
  26. package/dist/src/render/three-html.d.ts +0 -2
  27. package/dist/src/render/three-html.js +0 -257
  28. package/dist/src/render/three-preview-svg.d.ts +0 -3
  29. package/dist/src/render/three-preview-svg.js +0 -102
  30. package/dist/src/scenes.d.ts +0 -4
  31. package/dist/src/scenes.js +0 -26
  32. package/dist/src/sequences.d.ts +0 -43
  33. package/dist/src/sequences.js +0 -109
  34. package/dist/src/shapes/builtins.d.ts +0 -2
  35. package/dist/src/shapes/builtins.js +0 -393
  36. package/dist/src/shapes/common.d.ts +0 -9
  37. package/dist/src/shapes/common.js +0 -76
  38. package/dist/src/shapes/geometry.d.ts +0 -22
  39. package/dist/src/shapes/geometry.js +0 -166
  40. package/dist/src/shapes/index.d.ts +0 -2
  41. package/dist/src/shapes/index.js +0 -18
  42. package/dist/src/shapes/registry.d.ts +0 -8
  43. package/dist/src/shapes/registry.js +0 -31
  44. package/dist/src/shapes/types.d.ts +0 -32
  45. package/dist/src/shapes/types.js +0 -2
  46. package/examples/1730642890464.jpg +0 -0
  47. package/examples/app-screen.svg +0 -1
  48. package/examples/app-screen.visual.json +0 -503
  49. package/examples/dashboard-table.svg +0 -1
  50. package/examples/dashboard-table.visual.json +0 -708
  51. package/examples/dev-docs.svg +0 -1
  52. package/examples/dev-docs.visual.json +0 -248
  53. package/examples/explainer.mp4 +0 -0
  54. package/examples/explainer.visual.json +0 -1713
  55. package/examples/group-origin-effects-lab-check.svg +0 -1
  56. package/examples/group-origin-effects-lab.visual.json +0 -1880
  57. package/examples/image-clip-radius.visual.json +0 -271
  58. package/examples/make-app-screen.cjs +0 -368
  59. package/examples/make-dashboard-table.cjs +0 -277
  60. package/examples/make-dev-docs.cjs +0 -233
  61. package/examples/make-explainer.cjs +0 -438
  62. package/examples/make-group-origin-effects-lab.cjs +0 -370
  63. package/examples/make-image-clip-radius.cjs +0 -169
  64. package/examples/make-modal-dialog.cjs +0 -355
  65. package/examples/make-origin-effects-lab.cjs +0 -311
  66. package/examples/make-preset-character-motion.cjs +0 -32
  67. package/examples/make-presets-demo.cjs +0 -30
  68. package/examples/make-pricing.cjs +0 -286
  69. package/examples/make-product-demo.cjs +0 -468
  70. package/examples/make-product-hero.cjs +0 -223
  71. package/examples/make-release-notes.cjs +0 -333
  72. package/examples/make-settings-panel.cjs +0 -435
  73. package/examples/make-split-preview.cjs +0 -248
  74. package/examples/make-storyboard.cjs +0 -215
  75. package/examples/make-transcript.cjs +0 -234
  76. package/examples/make-typography-test.cjs +0 -397
  77. package/examples/make-ui-demo-explainer.cjs +0 -1094
  78. package/examples/make-ui-flow.cjs +0 -762
  79. package/examples/make-walkthrough.cjs +0 -815
  80. package/examples/modal-dialog.svg +0 -1
  81. package/examples/modal-dialog.visual.json +0 -239
  82. package/examples/origin-effects-lab-check.svg +0 -1
  83. package/examples/origin-effects-lab.visual.json +0 -1412
  84. package/examples/preset-character-motion.visual.json +0 -949
  85. package/examples/presets-demo.visual.json +0 -787
  86. package/examples/pricing.svg +0 -1
  87. package/examples/pricing.visual.json +0 -652
  88. package/examples/product-demo.mp4 +0 -0
  89. package/examples/product-demo.visual.json +0 -866
  90. package/examples/product-hero.svg +0 -1
  91. package/examples/product-hero.visual.json +0 -242
  92. package/examples/release-notes.svg +0 -1
  93. package/examples/release-notes.visual.json +0 -467
  94. package/examples/settings-panel.svg +0 -1
  95. package/examples/settings-panel.visual.json +0 -501
  96. package/examples/split-preview.svg +0 -1
  97. package/examples/split-preview.visual.json +0 -124
  98. package/examples/storyboard.svg +0 -1
  99. package/examples/storyboard.visual.json +0 -312
  100. package/examples/transcript.svg +0 -1
  101. package/examples/transcript.visual.json +0 -407
  102. package/examples/typography-indent-check.svg +0 -1
  103. package/examples/typography-lineheight-0.svg +0 -1
  104. package/examples/typography-lineheight-2.svg +0 -1
  105. package/examples/typography-test-check.svg +0 -1
  106. package/examples/typography-test.svg +0 -1
  107. package/examples/typography-test.visual.json +0 -757
  108. package/examples/ui-demo-explainer-billing.svg +0 -1
  109. package/examples/ui-demo-explainer-check.svg +0 -1
  110. package/examples/ui-demo-explainer-save.svg +0 -1
  111. package/examples/ui-demo-explainer-toggle.svg +0 -1
  112. package/examples/ui-demo-explainer.mp4 +0 -0
  113. package/examples/ui-demo-explainer.visual.json +0 -2597
  114. package/examples/ui-flow.mp4 +0 -0
  115. package/examples/ui-flow.visual.json +0 -1211
  116. package/examples/walkthrough.mp4 +0 -0
  117. package/examples/walkthrough.visual.json +0 -1372
@@ -1,501 +0,0 @@
1
- {
2
- "version": 1,
3
- "canvas": {
4
- "width": 960,
5
- "height": 1200,
6
- "background": "#f8fafc"
7
- },
8
- "elements": [
9
- {
10
- "id": "panel-title",
11
- "type": "text",
12
- "x": 64,
13
- "y": 48,
14
- "text": "Settings",
15
- "align": "left",
16
- "valign": "top",
17
- "fontSize": 32,
18
- "fontFamily": "Inter, system-ui, sans-serif",
19
- "weight": 700,
20
- "fill": "#0f172a"
21
- },
22
- {
23
- "id": "panel-desc",
24
- "type": "text",
25
- "x": 64,
26
- "y": 96,
27
- "text": "Manage your account preferences and application configuration.",
28
- "align": "left",
29
- "valign": "top",
30
- "fontSize": 14,
31
- "fontFamily": "Inter, system-ui, sans-serif",
32
- "weight": 400,
33
- "fill": "#64748b"
34
- },
35
- {
36
- "id": "display-name-label",
37
- "type": "text",
38
- "x": 88,
39
- "y": 204,
40
- "text": "Display Name",
41
- "align": "left",
42
- "valign": "top",
43
- "fontSize": 14,
44
- "fontFamily": "Inter, system-ui, sans-serif",
45
- "weight": 500,
46
- "fill": "#334155"
47
- },
48
- {
49
- "id": "display-name-helper",
50
- "type": "text",
51
- "x": 88,
52
- "y": 226,
53
- "text": "Your public-facing name shown across the application.",
54
- "align": "left",
55
- "valign": "top",
56
- "fontSize": 12,
57
- "fontFamily": "Inter, system-ui, sans-serif",
58
- "weight": 400,
59
- "fill": "#64748b"
60
- },
61
- {
62
- "id": "display-name-input-bg",
63
- "type": "path",
64
- "d": "M 94 250 L 866 250 Q 872 250 872 256 L 872 282 Q 872 288 866 288 L 94 288 Q 88 288 88 282 L 88 256 Q 88 250 94 250 Z",
65
- "fill": "#ffffff",
66
- "stroke": "#cbd5e1",
67
- "strokeWidth": 1
68
- },
69
- {
70
- "id": "display-name-placeholder",
71
- "type": "text",
72
- "x": 100,
73
- "y": 269,
74
- "text": "Jane Doe",
75
- "align": "left",
76
- "valign": "middle",
77
- "fontSize": 13,
78
- "fontFamily": "Inter, system-ui, sans-serif",
79
- "weight": 400,
80
- "fill": "#94a3b8"
81
- },
82
- {
83
- "id": "email-label",
84
- "type": "text",
85
- "x": 88,
86
- "y": 312,
87
- "text": "Email Address",
88
- "align": "left",
89
- "valign": "top",
90
- "fontSize": 14,
91
- "fontFamily": "Inter, system-ui, sans-serif",
92
- "weight": 500,
93
- "fill": "#334155"
94
- },
95
- {
96
- "id": "email-helper",
97
- "type": "text",
98
- "x": 88,
99
- "y": 334,
100
- "text": "Used for notifications and account recovery.",
101
- "align": "left",
102
- "valign": "top",
103
- "fontSize": 12,
104
- "fontFamily": "Inter, system-ui, sans-serif",
105
- "weight": 400,
106
- "fill": "#64748b"
107
- },
108
- {
109
- "id": "email-input-bg",
110
- "type": "path",
111
- "d": "M 94 358 L 866 358 Q 872 358 872 364 L 872 390 Q 872 396 866 396 L 94 396 Q 88 396 88 390 L 88 364 Q 88 358 94 358 Z",
112
- "fill": "#ffffff",
113
- "stroke": "#cbd5e1",
114
- "strokeWidth": 1
115
- },
116
- {
117
- "id": "email-placeholder",
118
- "type": "text",
119
- "x": 100,
120
- "y": 377,
121
- "text": "jane@example.com",
122
- "align": "left",
123
- "valign": "middle",
124
- "fontSize": 13,
125
- "fontFamily": "Inter, system-ui, sans-serif",
126
- "weight": 400,
127
- "fill": "#94a3b8"
128
- },
129
- {
130
- "id": "profile-card",
131
- "type": "path",
132
- "d": "M 74 136 L 886 136 Q 896 136 896 146 L 896 410 Q 896 420 886 420 L 74 420 Q 64 420 64 410 L 64 146 Q 64 136 74 136 Z",
133
- "fill": "#ffffff",
134
- "stroke": "#e2e8f0",
135
- "strokeWidth": 1
136
- },
137
- {
138
- "id": "profile-title",
139
- "type": "text",
140
- "x": 88,
141
- "y": 154,
142
- "text": "Profile",
143
- "align": "left",
144
- "valign": "top",
145
- "fontSize": 18,
146
- "fontFamily": "Inter, system-ui, sans-serif",
147
- "weight": 600,
148
- "fill": "#1e293b"
149
- },
150
- {
151
- "id": "profile-div",
152
- "type": "path",
153
- "d": "M 64 180 L 896 180",
154
- "stroke": "#e2e8f0",
155
- "strokeWidth": 1,
156
- "fill": "none"
157
- },
158
- {
159
- "id": "email-notif-label",
160
- "type": "text",
161
- "x": 88,
162
- "y": 520,
163
- "text": "Email Notifications",
164
- "align": "left",
165
- "valign": "top",
166
- "fontSize": 14,
167
- "fontFamily": "Inter, system-ui, sans-serif",
168
- "weight": 500,
169
- "fill": "#334155"
170
- },
171
- {
172
- "id": "email-notif-track",
173
- "type": "path",
174
- "d": "M 843 518 L 861 518 Q 872 518 872 529 L 872 529 Q 872 540 861 540 L 843 540 Q 832 540 832 529 L 832 529 Q 832 518 843 518 Z",
175
- "fill": "#2563eb",
176
- "stroke": "none"
177
- },
178
- {
179
- "id": "email-notif-knob",
180
- "type": "path",
181
- "d": "M 861 521 A 8 8 0 1 1 861 537 A 8 8 0 1 1 861 521 Z",
182
- "fill": "#ffffff",
183
- "stroke": "none"
184
- },
185
- {
186
- "id": "email-notif-helper",
187
- "type": "text",
188
- "x": 88,
189
- "y": 542,
190
- "text": "Receive updates about activity in your projects.",
191
- "align": "left",
192
- "valign": "top",
193
- "fontSize": 12,
194
- "fontFamily": "Inter, system-ui, sans-serif",
195
- "weight": 400,
196
- "fill": "#64748b"
197
- },
198
- {
199
- "id": "marketing-label",
200
- "type": "text",
201
- "x": 88,
202
- "y": 586,
203
- "text": "Marketing Emails",
204
- "align": "left",
205
- "valign": "top",
206
- "fontSize": 14,
207
- "fontFamily": "Inter, system-ui, sans-serif",
208
- "weight": 500,
209
- "fill": "#334155"
210
- },
211
- {
212
- "id": "marketing-track",
213
- "type": "path",
214
- "d": "M 843 584 L 861 584 Q 872 584 872 595 L 872 595 Q 872 606 861 606 L 843 606 Q 832 606 832 595 L 832 595 Q 832 584 843 584 Z",
215
- "fill": "#d1d5db",
216
- "stroke": "none"
217
- },
218
- {
219
- "id": "marketing-knob",
220
- "type": "path",
221
- "d": "M 843 587 A 8 8 0 1 1 843 603 A 8 8 0 1 1 843 587 Z",
222
- "fill": "#ffffff",
223
- "stroke": "none"
224
- },
225
- {
226
- "id": "marketing-helper",
227
- "type": "text",
228
- "x": 88,
229
- "y": 608,
230
- "text": "Occasional product announcements and feature previews.",
231
- "align": "left",
232
- "valign": "top",
233
- "fontSize": 12,
234
- "fontFamily": "Inter, system-ui, sans-serif",
235
- "weight": 400,
236
- "fill": "#64748b"
237
- },
238
- {
239
- "id": "slack-label",
240
- "type": "text",
241
- "x": 88,
242
- "y": 652,
243
- "text": "Slack Integration",
244
- "align": "left",
245
- "valign": "top",
246
- "fontSize": 14,
247
- "fontFamily": "Inter, system-ui, sans-serif",
248
- "weight": 500,
249
- "fill": "#334155"
250
- },
251
- {
252
- "id": "slack-track",
253
- "type": "path",
254
- "d": "M 843 650 L 861 650 Q 872 650 872 661 L 872 661 Q 872 672 861 672 L 843 672 Q 832 672 832 661 L 832 661 Q 832 650 843 650 Z",
255
- "fill": "#2563eb",
256
- "stroke": "none"
257
- },
258
- {
259
- "id": "slack-knob",
260
- "type": "path",
261
- "d": "M 861 653 A 8 8 0 1 1 861 669 A 8 8 0 1 1 861 653 Z",
262
- "fill": "#ffffff",
263
- "stroke": "none"
264
- },
265
- {
266
- "id": "slack-helper",
267
- "type": "text",
268
- "x": 88,
269
- "y": 674,
270
- "text": "Push real-time alerts to your connected Slack workspace.",
271
- "align": "left",
272
- "valign": "top",
273
- "fontSize": 12,
274
- "fontFamily": "Inter, system-ui, sans-serif",
275
- "weight": 400,
276
- "fill": "#64748b"
277
- },
278
- {
279
- "id": "notif-card",
280
- "type": "path",
281
- "d": "M 74 452 L 886 452 Q 896 452 896 462 L 896 708 Q 896 718 886 718 L 74 718 Q 64 718 64 708 L 64 462 Q 64 452 74 452 Z",
282
- "fill": "#ffffff",
283
- "stroke": "#e2e8f0",
284
- "strokeWidth": 1
285
- },
286
- {
287
- "id": "notif-title",
288
- "type": "text",
289
- "x": 88,
290
- "y": 470,
291
- "text": "Notifications",
292
- "align": "left",
293
- "valign": "top",
294
- "fontSize": 18,
295
- "fontFamily": "Inter, system-ui, sans-serif",
296
- "weight": 600,
297
- "fill": "#1e293b"
298
- },
299
- {
300
- "id": "notif-div",
301
- "type": "path",
302
- "d": "M 64 496 L 896 496",
303
- "stroke": "#e2e8f0",
304
- "strokeWidth": 1,
305
- "fill": "none"
306
- },
307
- {
308
- "id": "twofa-label",
309
- "type": "text",
310
- "x": 88,
311
- "y": 818,
312
- "text": "Two-Factor Authentication",
313
- "align": "left",
314
- "valign": "top",
315
- "fontSize": 14,
316
- "fontFamily": "Inter, system-ui, sans-serif",
317
- "weight": 500,
318
- "fill": "#334155"
319
- },
320
- {
321
- "id": "twofa-track",
322
- "type": "path",
323
- "d": "M 843 816 L 861 816 Q 872 816 872 827 L 872 827 Q 872 838 861 838 L 843 838 Q 832 838 832 827 L 832 827 Q 832 816 843 816 Z",
324
- "fill": "#2563eb",
325
- "stroke": "none"
326
- },
327
- {
328
- "id": "twofa-knob",
329
- "type": "path",
330
- "d": "M 861 819 A 8 8 0 1 1 861 835 A 8 8 0 1 1 861 819 Z",
331
- "fill": "#ffffff",
332
- "stroke": "none"
333
- },
334
- {
335
- "id": "twofa-helper",
336
- "type": "text",
337
- "x": 88,
338
- "y": 840,
339
- "text": "Adds an extra layer of protection to your account.",
340
- "align": "left",
341
- "valign": "top",
342
- "fontSize": 12,
343
- "fontFamily": "Inter, system-ui, sans-serif",
344
- "weight": 400,
345
- "fill": "#64748b"
346
- },
347
- {
348
- "id": "session-label",
349
- "type": "text",
350
- "x": 88,
351
- "y": 884,
352
- "text": "Session Timeout",
353
- "align": "left",
354
- "valign": "top",
355
- "fontSize": 14,
356
- "fontFamily": "Inter, system-ui, sans-serif",
357
- "weight": 500,
358
- "fill": "#334155"
359
- },
360
- {
361
- "id": "session-helper",
362
- "type": "text",
363
- "x": 88,
364
- "y": 906,
365
- "text": "Automatically log out after this period of inactivity.",
366
- "align": "left",
367
- "valign": "top",
368
- "fontSize": 12,
369
- "fontFamily": "Inter, system-ui, sans-serif",
370
- "weight": 400,
371
- "fill": "#64748b"
372
- },
373
- {
374
- "id": "session-input-bg",
375
- "type": "path",
376
- "d": "M 94 930 L 866 930 Q 872 930 872 936 L 872 962 Q 872 968 866 968 L 94 968 Q 88 968 88 962 L 88 936 Q 88 930 94 930 Z",
377
- "fill": "#ffffff",
378
- "stroke": "#cbd5e1",
379
- "strokeWidth": 1
380
- },
381
- {
382
- "id": "session-placeholder",
383
- "type": "text",
384
- "x": 100,
385
- "y": 949,
386
- "text": "30 minutes",
387
- "align": "left",
388
- "valign": "middle",
389
- "fontSize": 13,
390
- "fontFamily": "Inter, system-ui, sans-serif",
391
- "weight": 400,
392
- "fill": "#94a3b8"
393
- },
394
- {
395
- "id": "security-warn-bg",
396
- "type": "path",
397
- "d": "M 94 992 L 866 992 Q 872 992 872 998 L 872 1050 Q 872 1056 866 1056 L 94 1056 Q 88 1056 88 1050 L 88 998 Q 88 992 94 992 Z",
398
- "fill": "#fef3c7",
399
- "stroke": "#f59e0b",
400
- "strokeWidth": 1
401
- },
402
- {
403
- "id": "security-warn-icon",
404
- "type": "text",
405
- "x": 102,
406
- "y": 1004,
407
- "text": "⚠",
408
- "align": "left",
409
- "valign": "top",
410
- "fontSize": 14,
411
- "fontFamily": "Inter, system-ui, sans-serif",
412
- "weight": 400,
413
- "fill": "#92400e"
414
- },
415
- {
416
- "id": "security-warn-text",
417
- "type": "text",
418
- "x": 124,
419
- "y": 1005,
420
- "text": "Disabling 2FA will immediately remove the second factor from\nyour account. You will not be prompted again until re-enabled.",
421
- "align": "left",
422
- "valign": "top",
423
- "fontSize": 12,
424
- "fontFamily": "Inter, system-ui, sans-serif",
425
- "weight": 400,
426
- "lineHeight": 1.65,
427
- "fill": "#92400e",
428
- "maxWidth": 734
429
- },
430
- {
431
- "id": "security-card",
432
- "type": "path",
433
- "d": "M 74 750 L 886 750 Q 896 750 896 760 L 896 1070 Q 896 1080 886 1080 L 74 1080 Q 64 1080 64 1070 L 64 760 Q 64 750 74 750 Z",
434
- "fill": "#ffffff",
435
- "stroke": "#e2e8f0",
436
- "strokeWidth": 1
437
- },
438
- {
439
- "id": "security-title",
440
- "type": "text",
441
- "x": 88,
442
- "y": 768,
443
- "text": "Security",
444
- "align": "left",
445
- "valign": "top",
446
- "fontSize": 18,
447
- "fontFamily": "Inter, system-ui, sans-serif",
448
- "weight": 600,
449
- "fill": "#1e293b"
450
- },
451
- {
452
- "id": "security-div",
453
- "type": "path",
454
- "d": "M 64 794 L 896 794",
455
- "stroke": "#e2e8f0",
456
- "strokeWidth": 1,
457
- "fill": "none"
458
- },
459
- {
460
- "id": "btn-reset-bg",
461
- "type": "path",
462
- "d": "M 72 1120 L 156 1120 Q 164 1120 164 1128 L 164 1154 Q 164 1162 156 1162 L 72 1162 Q 64 1162 64 1154 L 64 1128 Q 64 1120 72 1120 Z",
463
- "fill": "#ffffff",
464
- "stroke": "#cbd5e1",
465
- "strokeWidth": 1
466
- },
467
- {
468
- "id": "btn-reset-label",
469
- "type": "text",
470
- "x": 114,
471
- "y": 1141,
472
- "text": "Reset",
473
- "align": "center",
474
- "valign": "middle",
475
- "fontSize": 14,
476
- "fontFamily": "Inter, system-ui, sans-serif",
477
- "weight": 500,
478
- "fill": "#475569"
479
- },
480
- {
481
- "id": "btn-save-bg",
482
- "type": "path",
483
- "d": "M 188 1120 L 292 1120 Q 300 1120 300 1128 L 300 1154 Q 300 1162 292 1162 L 188 1162 Q 180 1162 180 1154 L 180 1128 Q 180 1120 188 1120 Z",
484
- "fill": "#2563eb",
485
- "stroke": "none"
486
- },
487
- {
488
- "id": "btn-save-label",
489
- "type": "text",
490
- "x": 240,
491
- "y": 1141,
492
- "text": "Save Changes",
493
- "align": "center",
494
- "valign": "middle",
495
- "fontSize": 14,
496
- "fontFamily": "Inter, system-ui, sans-serif",
497
- "weight": 600,
498
- "fill": "#ffffff"
499
- }
500
- ]
501
- }
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1200" height="600" viewBox="0 0 1200 600" role="img"><rect x="0" y="0" width="1200" height="600" fill="#f8fafc"/><path id="code-bg" d="M 60 48 L 568 48 Q 580 48 580 60 L 580 540 Q 580 552 568 552 L 60 552 Q 48 552 48 540 L 48 60 Q 48 48 60 48 Z" fill="#1e293b" stroke="none" stroke-width="0"/><text id="code-label" text-anchor="start" dominant-baseline="middle" font-family="JetBrains Mono, Fira Code, monospace" font-size="11" font-weight="500" fill="#64748b"><tspan x="72" y="73.5">document.visual.json</tspan></text><text id="code-text" text-anchor="start" dominant-baseline="middle" font-family="JetBrains Mono, Fira Code, monospace" font-size="12" font-weight="400" fill="#e2e8f0"><tspan x="72" y="102">{</tspan><tspan x="72" y="120"> "version": 1,</tspan><tspan x="72" y="138"> "canvas": {</tspan><tspan x="72" y="156"> "width": 400,</tspan><tspan x="72" y="174"> "height": 300,</tspan><tspan x="72" y="192"> "background": "#ffffff"</tspan><tspan x="72" y="210"> },</tspan><tspan x="72" y="228"> "elements": [</tspan><tspan x="72" y="246"> {</tspan><tspan x="72" y="264"> "id": "card",</tspan><tspan x="72" y="282"> "type": "path",</tspan><tspan x="72" y="300"> "d": "M 20 20 L 380 20 ...",</tspan><tspan x="72" y="318"> "fill": "#f1f5f9",</tspan><tspan x="72" y="336"> "stroke": "#e2e8f0"</tspan><tspan x="72" y="354"> },</tspan><tspan x="72" y="372"> {</tspan><tspan x="72" y="390"> "id": "title",</tspan><tspan x="72" y="408"> "type": "text",</tspan><tspan x="72" y="426"> "x": 40,</tspan><tspan x="72" y="444"> "y": 60,</tspan><tspan x="72" y="462"> "text": "Welcome",</tspan><tspan x="72" y="480"> "fontSize": 24,</tspan><tspan x="72" y="498"> "weight": 700</tspan><tspan x="72" y="516"> }</tspan><tspan x="72" y="534"> ]</tspan><tspan x="72" y="552">}</tspan></text><path id="badge-bg" d="M 834 48 L 938 48 Q 951 48 951 61 L 951 61 Q 951 74 938 74 L 834 74 Q 821 74 821 61 L 821 61 Q 821 48 834 48 Z" fill="#8b5cf6" stroke="none" stroke-width="0"/><text id="badge-text" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="11" font-weight="600" fill="#ffffff"><tspan x="886" y="61">Rendered output</tspan></text><path id="preview-bg" d="M 632 94 L 1140 94 Q 1152 94 1152 106 L 1152 540 Q 1152 552 1140 552 L 632 552 Q 620 552 620 540 L 620 106 Q 620 94 632 94 Z" fill="#ffffff" stroke="#e2e8f0" stroke-width="1"/><path id="inner-card-bg" d="M 660 126 L 1112 126 Q 1120 126 1120 134 L 1120 318 Q 1120 326 1112 326 L 660 326 Q 652 326 652 318 L 652 134 Q 652 126 660 126 Z" fill="#f1f5f9" stroke="#e2e8f0" stroke-width="1"/><text id="inner-card-title" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="24" font-weight="700" fill="#0f172a"><tspan x="676" y="170">Welcome</tspan></text><text id="inner-card-body" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13" font-weight="400" fill="#64748b"><tspan x="676" y="204.5">This card was rendered from the JSON</tspan><tspan x="676" y="224.65">definition on the left. The kernel resolves</tspan><tspan x="676" y="244.8">all elements into positioned primitives.</tspan></text><text id="preview-caption" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13" font-weight="400" fill="#64748b"><tspan x="652" y="360.5">Live preview updates as the document changes.</tspan><tspan x="652" y="380.65">No build step required — just edit and see.</tspan></text></svg>
@@ -1,124 +0,0 @@
1
- {
2
- "version": 1,
3
- "canvas": {
4
- "width": 1200,
5
- "height": 600,
6
- "background": "#f8fafc"
7
- },
8
- "elements": [
9
- {
10
- "id": "code-bg",
11
- "type": "path",
12
- "d": "M 60 48 L 568 48 Q 580 48 580 60 L 580 540 Q 580 552 568 552 L 60 552 Q 48 552 48 540 L 48 60 Q 48 48 60 48 Z",
13
- "fill": "#1e293b",
14
- "stroke": "none"
15
- },
16
- {
17
- "id": "code-label",
18
- "type": "text",
19
- "x": 72,
20
- "y": 68,
21
- "text": "document.visual.json",
22
- "align": "left",
23
- "valign": "top",
24
- "fontSize": 11,
25
- "fontFamily": "JetBrains Mono, Fira Code, monospace",
26
- "weight": 500,
27
- "fill": "#64748b"
28
- },
29
- {
30
- "id": "code-text",
31
- "type": "text",
32
- "x": 72,
33
- "y": 96,
34
- "text": "{\n \"version\": 1,\n \"canvas\": {\n \"width\": 400,\n \"height\": 300,\n \"background\": \"#ffffff\"\n },\n \"elements\": [\n {\n \"id\": \"card\",\n \"type\": \"path\",\n \"d\": \"M 20 20 L 380 20 ...\",\n \"fill\": \"#f1f5f9\",\n \"stroke\": \"#e2e8f0\"\n },\n {\n \"id\": \"title\",\n \"type\": \"text\",\n \"x\": 40,\n \"y\": 60,\n \"text\": \"Welcome\",\n \"fontSize\": 24,\n \"weight\": 700\n }\n ]\n}",
35
- "align": "left",
36
- "valign": "top",
37
- "fontSize": 12,
38
- "fontFamily": "JetBrains Mono, Fira Code, monospace",
39
- "weight": 400,
40
- "lineHeight": 1.5,
41
- "fill": "#e2e8f0",
42
- "maxWidth": 484
43
- },
44
- {
45
- "id": "badge-bg",
46
- "type": "path",
47
- "d": "M 834 48 L 938 48 Q 951 48 951 61 L 951 61 Q 951 74 938 74 L 834 74 Q 821 74 821 61 L 821 61 Q 821 48 834 48 Z",
48
- "fill": "#8b5cf6",
49
- "stroke": "none"
50
- },
51
- {
52
- "id": "badge-text",
53
- "type": "text",
54
- "x": 886,
55
- "y": 61,
56
- "text": "Rendered output",
57
- "align": "center",
58
- "valign": "middle",
59
- "fontSize": 11,
60
- "fontFamily": "Inter, system-ui, sans-serif",
61
- "weight": 600,
62
- "fill": "#ffffff"
63
- },
64
- {
65
- "id": "preview-bg",
66
- "type": "path",
67
- "d": "M 632 94 L 1140 94 Q 1152 94 1152 106 L 1152 540 Q 1152 552 1140 552 L 632 552 Q 620 552 620 540 L 620 106 Q 620 94 632 94 Z",
68
- "fill": "#ffffff",
69
- "stroke": "#e2e8f0",
70
- "strokeWidth": 1
71
- },
72
- {
73
- "id": "inner-card-bg",
74
- "type": "path",
75
- "d": "M 660 126 L 1112 126 Q 1120 126 1120 134 L 1120 318 Q 1120 326 1112 326 L 660 326 Q 652 326 652 318 L 652 134 Q 652 126 660 126 Z",
76
- "fill": "#f1f5f9",
77
- "stroke": "#e2e8f0",
78
- "strokeWidth": 1
79
- },
80
- {
81
- "id": "inner-card-title",
82
- "type": "text",
83
- "x": 676,
84
- "y": 158,
85
- "text": "Welcome",
86
- "align": "left",
87
- "valign": "top",
88
- "fontSize": 24,
89
- "fontFamily": "Inter, system-ui, sans-serif",
90
- "weight": 700,
91
- "fill": "#0f172a"
92
- },
93
- {
94
- "id": "inner-card-body",
95
- "type": "text",
96
- "x": 676,
97
- "y": 198,
98
- "text": "This card was rendered from the JSON\ndefinition on the left. The kernel resolves\nall elements into positioned primitives.",
99
- "align": "left",
100
- "valign": "top",
101
- "fontSize": 13,
102
- "fontFamily": "Inter, system-ui, sans-serif",
103
- "weight": 400,
104
- "lineHeight": 1.55,
105
- "fill": "#64748b",
106
- "maxWidth": 420
107
- },
108
- {
109
- "id": "preview-caption",
110
- "type": "text",
111
- "x": 652,
112
- "y": 354,
113
- "text": "Live preview updates as the document changes.\nNo build step required — just edit and see.",
114
- "align": "left",
115
- "valign": "top",
116
- "fontSize": 13,
117
- "fontFamily": "Inter, system-ui, sans-serif",
118
- "weight": 400,
119
- "lineHeight": 1.55,
120
- "fill": "#64748b",
121
- "maxWidth": 468
122
- }
123
- ]
124
- }
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1100" height="720" viewBox="0 0 1100 720" role="img"><rect x="0" y="0" width="1100" height="720" fill="#f1f5f9"/><text id="page-title" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="28" font-weight="700" fill="#0f172a"><tspan x="48" y="54">Product Launch Storyboard</tspan></text><text id="page-subtitle" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#64748b"><tspan x="48" y="85">Four key moments in the announcement video sequence.</tspan></text><path id="panel-1-bg" d="M 58 122 L 528 122 Q 538 122 538 132 L 538 372 Q 538 382 528 382 L 58 382 Q 48 382 48 372 L 48 132 Q 48 122 58 122 Z" fill="#ffffff" stroke="#e2e8f0" stroke-width="1"/><text id="panel-1-number" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="32" font-weight="700" fill="#cbd5e1"><tspan x="68" y="158">01</tspan></text><path id="panel-1-tag-bg" d="M 462 142 L 505 142 Q 518 142 518 155 L 518 155 Q 518 168 505 168 L 462 168 Q 449 168 449 155 L 449 155 Q 449 142 462 142 Z" fill="#0f172a" stroke="none" stroke-width="0"/><text id="panel-1-tag-text" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="11" font-weight="600" fill="#ffffff"><tspan x="483.5" y="155">Intro</tspan></text><text id="panel-1-title" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="18" font-weight="600" fill="#1e293b"><tspan x="68" y="203">Brand Logo Reveal</tspan></text><text id="panel-1-caption" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13" font-weight="400" fill="#475569"><tspan x="68" y="232.5">Open on a dark screen. The logo fades in from</tspan><tspan x="68" y="253.3">the center with a subtle glow effect. Hold for</tspan><tspan x="68" y="274.1">two seconds to establish brand presence.</tspan></text><path id="panel-2-bg" d="M 572 122 L 1042 122 Q 1052 122 1052 132 L 1052 372 Q 1052 382 1042 382 L 572 382 Q 562 382 562 372 L 562 132 Q 562 122 572 122 Z" fill="#ffffff" stroke="#e2e8f0" stroke-width="1"/><text id="panel-2-number" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="32" font-weight="700" fill="#cbd5e1"><tspan x="582" y="158">02</tspan></text><path id="panel-2-tag-bg" d="M 967 142 L 1019 142 Q 1032 142 1032 155 L 1032 155 Q 1032 168 1019 168 L 967 168 Q 954 168 954 155 L 954 155 Q 954 142 967 142 Z" fill="#0f172a" stroke="none" stroke-width="0"/><text id="panel-2-tag-text" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="11" font-weight="600" fill="#ffffff"><tspan x="993" y="155">Action</tspan></text><text id="panel-2-title" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="18" font-weight="600" fill="#1e293b"><tspan x="582" y="203">Feature Demonstration</tspan></text><text id="panel-2-caption" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13" font-weight="400" fill="#475569"><tspan x="582" y="232.5">Quick cuts showing the product in use. Focus</tspan><tspan x="582" y="253.3">on three key interactions: search, create, and</tspan><tspan x="582" y="274.1">share. Each clip lasts 1.5 seconds.</tspan></text><path id="panel-3-bg" d="M 58 406 L 528 406 Q 538 406 538 416 L 538 656 Q 538 666 528 666 L 58 666 Q 48 666 48 656 L 48 416 Q 48 406 58 406 Z" fill="#ffffff" stroke="#e2e8f0" stroke-width="1"/><text id="panel-3-number" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="32" font-weight="700" fill="#cbd5e1"><tspan x="68" y="442">03</tspan></text><path id="panel-3-tag-bg" d="M 462 426 L 505 426 Q 518 426 518 439 L 518 439 Q 518 452 505 452 L 462 452 Q 449 452 449 439 L 449 439 Q 449 426 462 426 Z" fill="#0f172a" stroke="none" stroke-width="0"/><text id="panel-3-tag-text" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="11" font-weight="600" fill="#ffffff"><tspan x="483.5" y="439">Pause</tspan></text><text id="panel-3-title" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="18" font-weight="600" fill="#1e293b"><tspan x="68" y="487">Customer Testimonial</tspan></text><text id="panel-3-caption" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13" font-weight="400" fill="#475569"><tspan x="68" y="516.5">A single customer speaks directly to camera.</tspan><tspan x="68" y="537.3">Keep framing tight on their face. Let the quote</tspan><tspan x="68" y="558.1">breathe with natural pauses for emphasis.</tspan></text><path id="panel-4-bg" d="M 572 406 L 1042 406 Q 1052 406 1052 416 L 1052 656 Q 1052 666 1042 666 L 572 666 Q 562 666 562 656 L 562 416 Q 562 406 572 406 Z" fill="#ffffff" stroke="#e2e8f0" stroke-width="1"/><text id="panel-4-number" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="32" font-weight="700" fill="#cbd5e1"><tspan x="582" y="442">04</tspan></text><path id="panel-4-tag-bg" d="M 994 426 L 1019 426 Q 1032 426 1032 439 L 1032 439 Q 1032 452 1019 452 L 994 452 Q 981 452 981 439 L 981 439 Q 981 426 994 426 Z" fill="#0f172a" stroke="none" stroke-width="0"/><text id="panel-4-tag-text" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="11" font-weight="600" fill="#ffffff"><tspan x="1006.5" y="439">End</tspan></text><text id="panel-4-title" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="18" font-weight="600" fill="#1e293b"><tspan x="582" y="487">Call to Action</tspan></text><text id="panel-4-caption" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13" font-weight="400" fill="#475569"><tspan x="582" y="516.5">Product name and tagline animate in from</tspan><tspan x="582" y="537.3">the left. URL and QR code appear below.</tspan><tspan x="582" y="558.1">End with logo lockup in the corner.</tspan></text></svg>