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,407 +0,0 @@
1
- {
2
- "version": 1,
3
- "canvas": {
4
- "width": 900,
5
- "height": 1140,
6
- "background": "#ffffff"
7
- },
8
- "elements": [
9
- {
10
- "id": "title",
11
- "type": "text",
12
- "x": 56,
13
- "y": 44,
14
- "text": "Meeting Transcript",
15
- "align": "left",
16
- "valign": "top",
17
- "fontSize": 30,
18
- "fontFamily": "Inter, system-ui, sans-serif",
19
- "weight": 700,
20
- "fill": "#0f172a"
21
- },
22
- {
23
- "id": "subtitle",
24
- "type": "text",
25
- "x": 56,
26
- "y": 86,
27
- "text": "Product Sync — May 27, 2026 · 10:00 AM · 4 participants",
28
- "align": "left",
29
- "valign": "top",
30
- "fontSize": 13,
31
- "fontFamily": "Inter, system-ui, sans-serif",
32
- "weight": 400,
33
- "fill": "#64748b"
34
- },
35
- {
36
- "id": "divider-top",
37
- "type": "path",
38
- "d": "M 56 118 L 844 118",
39
- "stroke": "#e2e8f0",
40
- "strokeWidth": 1,
41
- "fill": "none"
42
- },
43
- {
44
- "id": "msg-0-speaker",
45
- "type": "text",
46
- "x": 56,
47
- "y": 150,
48
- "text": "Sarah Chen",
49
- "align": "left",
50
- "valign": "top",
51
- "fontSize": 13,
52
- "fontFamily": "Inter, system-ui, sans-serif",
53
- "weight": 600,
54
- "fill": "#1e293b"
55
- },
56
- {
57
- "id": "msg-0-time",
58
- "type": "text",
59
- "x": 844,
60
- "y": 150,
61
- "text": "10:01",
62
- "align": "right",
63
- "valign": "top",
64
- "fontSize": 12,
65
- "fontFamily": "Inter, system-ui, sans-serif",
66
- "weight": 400,
67
- "fill": "#94a3b8"
68
- },
69
- {
70
- "id": "msg-0-bg",
71
- "type": "path",
72
- "d": "M 64 174 L 836 174 Q 844 174 844 182 L 844 257 Q 844 265 836 265 L 64 265 Q 56 265 56 257 L 56 182 Q 56 174 64 174 Z",
73
- "fill": "#f8fafc",
74
- "stroke": "#e2e8f0",
75
- "strokeWidth": 1
76
- },
77
- {
78
- "id": "msg-0-text",
79
- "type": "text",
80
- "x": 70,
81
- "y": 188,
82
- "text": "Alright, let's get started. The main topic today is the timeline\nfor the v2.4 release. We need to finalize which features ship\nand which get pushed to the next cycle.",
83
- "align": "left",
84
- "valign": "top",
85
- "fontSize": 13,
86
- "fontFamily": "Inter, system-ui, sans-serif",
87
- "weight": 400,
88
- "lineHeight": 1.6,
89
- "fill": "#334155",
90
- "maxWidth": 760
91
- },
92
- {
93
- "id": "msg-1-speaker",
94
- "type": "text",
95
- "x": 56,
96
- "y": 285,
97
- "text": "Marcus Taylor",
98
- "align": "left",
99
- "valign": "top",
100
- "fontSize": 13,
101
- "fontFamily": "Inter, system-ui, sans-serif",
102
- "weight": 600,
103
- "fill": "#1e293b"
104
- },
105
- {
106
- "id": "msg-1-time",
107
- "type": "text",
108
- "x": 844,
109
- "y": 285,
110
- "text": "10:02",
111
- "align": "right",
112
- "valign": "top",
113
- "fontSize": 12,
114
- "fontFamily": "Inter, system-ui, sans-serif",
115
- "weight": 400,
116
- "fill": "#94a3b8"
117
- },
118
- {
119
- "id": "msg-1-bg",
120
- "type": "path",
121
- "d": "M 64 309 L 836 309 Q 844 309 844 317 L 844 392 Q 844 400 836 400 L 64 400 Q 56 400 56 392 L 56 317 Q 56 309 64 309 Z",
122
- "fill": "#f8fafc",
123
- "stroke": "#e2e8f0",
124
- "strokeWidth": 1
125
- },
126
- {
127
- "id": "msg-1-text",
128
- "type": "text",
129
- "x": 70,
130
- "y": 323,
131
- "text": "From the backend side, the API gateway migration is on track.\nWe finished the schema federation layer last week and rate\nlimiting is in review right now.",
132
- "align": "left",
133
- "valign": "top",
134
- "fontSize": 13,
135
- "fontFamily": "Inter, system-ui, sans-serif",
136
- "weight": 400,
137
- "lineHeight": 1.6,
138
- "fill": "#334155",
139
- "maxWidth": 760
140
- },
141
- {
142
- "id": "msg-2-speaker",
143
- "type": "text",
144
- "x": 56,
145
- "y": 420,
146
- "text": "Priya Nair",
147
- "align": "left",
148
- "valign": "top",
149
- "fontSize": 13,
150
- "fontFamily": "Inter, system-ui, sans-serif",
151
- "weight": 600,
152
- "fill": "#1e293b"
153
- },
154
- {
155
- "id": "msg-2-time",
156
- "type": "text",
157
- "x": 844,
158
- "y": 420,
159
- "text": "10:03",
160
- "align": "right",
161
- "valign": "top",
162
- "fontSize": 12,
163
- "fontFamily": "Inter, system-ui, sans-serif",
164
- "weight": 400,
165
- "fill": "#94a3b8"
166
- },
167
- {
168
- "id": "msg-2-bg",
169
- "type": "path",
170
- "d": "M 64 444 L 836 444 Q 844 444 844 452 L 844 527 Q 844 535 836 535 L 64 535 Q 56 535 56 527 L 56 452 Q 56 444 64 444 Z",
171
- "fill": "#f8fafc",
172
- "stroke": "#e2e8f0",
173
- "strokeWidth": 1
174
- },
175
- {
176
- "id": "msg-2-text",
177
- "type": "text",
178
- "x": 70,
179
- "y": 458,
180
- "text": "Design system updates are about 80% done. The new tokens\nare merged but we still need to audit accessibility on the\nrefactored form components before release.",
181
- "align": "left",
182
- "valign": "top",
183
- "fontSize": 13,
184
- "fontFamily": "Inter, system-ui, sans-serif",
185
- "weight": 400,
186
- "lineHeight": 1.6,
187
- "fill": "#334155",
188
- "maxWidth": 760
189
- },
190
- {
191
- "id": "msg-3-speaker",
192
- "type": "text",
193
- "x": 56,
194
- "y": 555,
195
- "text": "Sarah Chen",
196
- "align": "left",
197
- "valign": "top",
198
- "fontSize": 13,
199
- "fontFamily": "Inter, system-ui, sans-serif",
200
- "weight": 600,
201
- "fill": "#1e293b"
202
- },
203
- {
204
- "id": "msg-3-time",
205
- "type": "text",
206
- "x": 844,
207
- "y": 555,
208
- "text": "10:04",
209
- "align": "right",
210
- "valign": "top",
211
- "fontSize": 12,
212
- "fontFamily": "Inter, system-ui, sans-serif",
213
- "weight": 400,
214
- "fill": "#94a3b8"
215
- },
216
- {
217
- "id": "msg-3-bg",
218
- "type": "path",
219
- "d": "M 64 579 L 836 579 Q 844 579 844 587 L 844 662 Q 844 670 836 670 L 64 670 Q 56 670 56 662 L 56 587 Q 56 579 64 579 Z",
220
- "fill": "#f8fafc",
221
- "stroke": "#e2e8f0",
222
- "strokeWidth": 1
223
- },
224
- {
225
- "id": "msg-3-text",
226
- "type": "text",
227
- "x": 70,
228
- "y": 593,
229
- "text": "Good. Let's set a hard cutoff for Friday on the a11y audit.\nIf it's not passing by then we defer the form components\nand ship everything else on schedule.",
230
- "align": "left",
231
- "valign": "top",
232
- "fontSize": 13,
233
- "fontFamily": "Inter, system-ui, sans-serif",
234
- "weight": 400,
235
- "lineHeight": 1.6,
236
- "fill": "#334155",
237
- "maxWidth": 760
238
- },
239
- {
240
- "id": "msg-4-speaker",
241
- "type": "text",
242
- "x": 56,
243
- "y": 690,
244
- "text": "James Olsen",
245
- "align": "left",
246
- "valign": "top",
247
- "fontSize": 13,
248
- "fontFamily": "Inter, system-ui, sans-serif",
249
- "weight": 600,
250
- "fill": "#1e293b"
251
- },
252
- {
253
- "id": "msg-4-time",
254
- "type": "text",
255
- "x": 844,
256
- "y": 690,
257
- "text": "10:05",
258
- "align": "right",
259
- "valign": "top",
260
- "fontSize": 12,
261
- "fontFamily": "Inter, system-ui, sans-serif",
262
- "weight": 400,
263
- "fill": "#94a3b8"
264
- },
265
- {
266
- "id": "msg-4-bg",
267
- "type": "path",
268
- "d": "M 64 714 L 836 714 Q 844 714 844 722 L 844 797 Q 844 805 836 805 L 64 805 Q 56 805 56 797 L 56 722 Q 56 714 64 714 Z",
269
- "fill": "#f8fafc",
270
- "stroke": "#e2e8f0",
271
- "strokeWidth": 1
272
- },
273
- {
274
- "id": "msg-4-text",
275
- "type": "text",
276
- "x": 70,
277
- "y": 728,
278
- "text": "I can help with the audit. I've been running automated scans\non the onboarding flow already so I know the tooling well.\nShould have results by Thursday.",
279
- "align": "left",
280
- "valign": "top",
281
- "fontSize": 13,
282
- "fontFamily": "Inter, system-ui, sans-serif",
283
- "weight": 400,
284
- "lineHeight": 1.6,
285
- "fill": "#334155",
286
- "maxWidth": 760
287
- },
288
- {
289
- "id": "msg-5-speaker",
290
- "type": "text",
291
- "x": 56,
292
- "y": 825,
293
- "text": "Priya Nair",
294
- "align": "left",
295
- "valign": "top",
296
- "fontSize": 13,
297
- "fontFamily": "Inter, system-ui, sans-serif",
298
- "weight": 600,
299
- "fill": "#1e293b"
300
- },
301
- {
302
- "id": "msg-5-time",
303
- "type": "text",
304
- "x": 844,
305
- "y": 825,
306
- "text": "10:06",
307
- "align": "right",
308
- "valign": "top",
309
- "fontSize": 12,
310
- "fontFamily": "Inter, system-ui, sans-serif",
311
- "weight": 400,
312
- "fill": "#94a3b8"
313
- },
314
- {
315
- "id": "msg-5-bg",
316
- "type": "path",
317
- "d": "M 64 849 L 836 849 Q 844 849 844 857 L 844 911 Q 844 919 836 919 L 64 919 Q 56 919 56 911 L 56 857 Q 56 849 64 849 Z",
318
- "fill": "#f8fafc",
319
- "stroke": "#e2e8f0",
320
- "strokeWidth": 1
321
- },
322
- {
323
- "id": "msg-5-text",
324
- "type": "text",
325
- "x": 70,
326
- "y": 863,
327
- "text": "That would be great. I'll share the component list and the\ntest matrix with you after this call so we don't duplicate work.",
328
- "align": "left",
329
- "valign": "top",
330
- "fontSize": 13,
331
- "fontFamily": "Inter, system-ui, sans-serif",
332
- "weight": 400,
333
- "lineHeight": 1.6,
334
- "fill": "#334155",
335
- "maxWidth": 760
336
- },
337
- {
338
- "id": "msg-6-speaker",
339
- "type": "text",
340
- "x": 56,
341
- "y": 939,
342
- "text": "Sarah Chen",
343
- "align": "left",
344
- "valign": "top",
345
- "fontSize": 13,
346
- "fontFamily": "Inter, system-ui, sans-serif",
347
- "weight": 600,
348
- "fill": "#1e293b"
349
- },
350
- {
351
- "id": "msg-6-time",
352
- "type": "text",
353
- "x": 844,
354
- "y": 939,
355
- "text": "10:07",
356
- "align": "right",
357
- "valign": "top",
358
- "fontSize": 12,
359
- "fontFamily": "Inter, system-ui, sans-serif",
360
- "weight": 400,
361
- "fill": "#94a3b8"
362
- },
363
- {
364
- "id": "msg-6-bg",
365
- "type": "path",
366
- "d": "M 64 963 L 836 963 Q 844 963 844 971 L 844 1046 Q 844 1054 836 1054 L 64 1054 Q 56 1054 56 1046 L 56 971 Q 56 963 64 963 Z",
367
- "fill": "#f8fafc",
368
- "stroke": "#e2e8f0",
369
- "strokeWidth": 1
370
- },
371
- {
372
- "id": "msg-6-text",
373
- "type": "text",
374
- "x": 70,
375
- "y": 977,
376
- "text": "Perfect. Let's reconvene Thursday afternoon to review the\naudit results and make the final call. I'll send a calendar\ninvite. Anything else before we wrap?",
377
- "align": "left",
378
- "valign": "top",
379
- "fontSize": 13,
380
- "fontFamily": "Inter, system-ui, sans-serif",
381
- "weight": 400,
382
- "lineHeight": 1.6,
383
- "fill": "#334155",
384
- "maxWidth": 760
385
- },
386
- {
387
- "id": "btn-export-bg",
388
- "type": "path",
389
- "d": "M 388 1086 L 512 1086 Q 520 1086 520 1094 L 520 1120 Q 520 1128 512 1128 L 388 1128 Q 380 1128 380 1120 L 380 1094 Q 380 1086 388 1086 Z",
390
- "fill": "#1e293b",
391
- "stroke": "none"
392
- },
393
- {
394
- "id": "btn-export-label",
395
- "type": "text",
396
- "x": 450,
397
- "y": 1107,
398
- "text": "Export Transcript",
399
- "align": "center",
400
- "valign": "middle",
401
- "fontSize": 14,
402
- "fontFamily": "Inter, system-ui, sans-serif",
403
- "weight": 600,
404
- "fill": "#ffffff"
405
- }
406
- ]
407
- }
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="920" viewBox="0 0 1000 920" role="img"><rect x="0" y="0" width="1000" height="920" fill="#ffffff"/><text id="headline" xml:space="preserve" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="40" font-weight="700" letter-spacing="0" fill="#0f172a"><tspan x="500" y="76">Typography&#160;Stress&#160;Test</tspan></text><text id="subtitle" xml:space="preserve" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="16" font-weight="400" fill="#475569"><tspan x="500" y="120">Demonstrating&#160;multiple&#160;alignment&#160;modes,&#160;text&#160;styles,&#160;and&#160;layout&#160;patterns</tspan><tspan x="500" y="144.8">in&#160;a&#160;single&#160;cohesive&#160;document&#160;without&#160;visual&#160;overlap.</tspan></text><path id="divider-1" d="M 72 176 L 928 176" fill="none" stroke="#e2e8f0" stroke-width="1"/><text id="para-heading" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="226">Overview</tspan></text><text id="para-body" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" letter-spacing="0" fill="#334155"><tspan x="72" y="255">This&#160;document&#160;tests&#160;the&#160;render&#160;kernel's&#160;ability&#160;to&#160;handle&#160;diverse&#160;typographic</tspan><tspan x="72" y="278.8">scenarios.&#160;Each&#160;section&#160;exercises&#160;a&#160;different&#160;combination&#160;of&#160;alignment,&#160;weight,</tspan><tspan x="72" y="302.6">size,&#160;and&#160;line&#160;height.&#160;The&#160;goal&#160;is&#160;to&#160;verify&#160;that&#160;spacing&#160;remains&#160;predictable</tspan><tspan x="72" y="326.4">and&#160;that&#160;no&#160;elements&#160;collide&#160;regardless&#160;of&#160;content&#160;length&#160;or&#160;style&#160;variation.</tspan></text><text id="list-heading" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="368">Validation&#160;Checklist</tspan></text><text id="list-num-0" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="397">1.</tspan></text><text id="list-item-0" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="397">Confirm&#160;that&#160;centered&#160;text&#160;remains&#160;horizontally&#160;balanced&#160;at&#160;all&#160;font&#160;sizes.</tspan></text><text id="list-num-1" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="425">2.</tspan></text><text id="list-item-1" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="425">Verify&#160;left-aligned&#160;blocks&#160;maintain&#160;consistent&#160;left&#160;edge&#160;across&#160;line&#160;breaks.</tspan></text><text id="list-num-2" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="453">3.</tspan></text><text id="list-item-2" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="453">Check&#160;that&#160;right-aligned&#160;notes&#160;anchor&#160;correctly&#160;without&#160;drifting.</tspan></text><text id="list-num-3" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="481">4.</tspan></text><text id="list-item-3" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="481">Ensure&#160;code&#160;blocks&#160;preserve&#160;whitespace&#160;and&#160;monospace&#160;character&#160;width.</tspan></text><text id="list-num-4" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="509">5.</tspan></text><text id="list-item-4" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="509">Validate&#160;that&#160;pill&#160;components&#160;center&#160;their&#160;labels&#160;within&#160;fixed&#160;bounds.</tspan></text><path id="code-bg" d="M 80 562 L 920 562 Q 928 562 928 570 L 928 754 Q 928 762 920 762 L 80 762 Q 72 762 72 754 L 72 570 Q 72 562 80 562 Z" fill="#1e293b" stroke="none" stroke-width="0"/><text id="code-text" xml:space="preserve" text-anchor="start" dominant-baseline="middle" font-family="JetBrains Mono, Fira Code, monospace" font-size="12" font-weight="400" fill="#e2e8f0"><tspan x="92" y="588">function&#160;validateLayout(elements)&#160;{</tspan><tspan x="92" y="606.6">&#160;&#160;const&#160;bounds&#160;=&#160;elements.map(el&#160;=&gt;&#160;getBounds(el));</tspan><tspan x="92" y="625.2">&#160;&#160;for&#160;(let&#160;i&#160;=&#160;0;&#160;i&#160;&lt;&#160;bounds.length;&#160;i++)&#160;{</tspan><tspan x="92" y="643.8">&#160;&#160;&#160;&#160;for&#160;(let&#160;j&#160;=&#160;i&#160;+&#160;1;&#160;j&#160;&lt;&#160;bounds.length;&#160;j++)&#160;{</tspan><tspan x="92" y="662.4">&#160;&#160;&#160;&#160;&#160;&#160;if&#160;(intersects(bounds[i],&#160;bounds[j]))&#160;{</tspan><tspan x="92" y="681">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return&#160;{&#160;valid:&#160;false,&#160;collision:&#160;[i,&#160;j]&#160;};</tspan><tspan x="92" y="699.6">&#160;&#160;&#160;&#160;&#160;&#160;}</tspan><tspan x="92" y="718.2">&#160;&#160;&#160;&#160;}</tspan><tspan x="92" y="736.8">&#160;&#160;}</tspan><tspan x="92" y="755.4">&#160;&#160;return&#160;{&#160;valid:&#160;true&#160;};</tspan><tspan x="92" y="774">}</tspan></text><text id="note-text" xml:space="preserve" text-anchor="end" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="400" letter-spacing="0" fill="#94a3b8"><tspan x="928" y="796">Note:&#160;All&#160;measurements&#160;are&#160;in&#160;logical&#160;pixels.</tspan><tspan x="928" y="814">Actual&#160;rendering&#160;may&#160;vary&#160;by&#160;display&#160;density.</tspan></text><path id="pill-bg-0" d="M 358 842 L 426 842 Q 440 842 440 856 L 440 856 Q 440 870 426 870 L 358 870 Q 344 870 344 856 L 344 856 Q 344 842 358 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-0" xml:space="preserve" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="392" y="856">Centered</tspan></text><path id="pill-bg-1" d="M 466 842 L 534 842 Q 548 842 548 856 L 548 856 Q 548 870 534 870 L 466 870 Q 452 870 452 856 L 452 856 Q 452 842 466 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-1" xml:space="preserve" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="500" y="856">Balanced</tspan></text><path id="pill-bg-2" d="M 574 842 L 642 842 Q 656 842 656 856 L 656 856 Q 656 870 642 870 L 574 870 Q 560 870 560 856 L 560 856 Q 560 842 574 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-2" xml:space="preserve" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="608" y="856">Verified</tspan></text></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="920" viewBox="0 0 1000 920" role="img"><rect x="0" y="0" width="1000" height="920" fill="#ffffff"/><text id="headline" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="40" font-weight="700" letter-spacing="0" fill="#0f172a"><tspan x="500" y="76">Typography Stress Test</tspan></text><text id="subtitle" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="16" font-weight="400" fill="#475569"><tspan x="500" y="120">Demonstrating multiple alignment modes, text styles, and layout patterns</tspan><tspan x="500" y="144.8">in a single cohesive document without visual overlap.</tspan></text><path id="divider-1" d="M 72 176 L 928 176" fill="none" stroke="#e2e8f0" stroke-width="1"/><text id="para-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="226">Overview</tspan></text><text id="para-body" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" letter-spacing="0" fill="#334155"><tspan x="72" y="255">This document tests the render kernel's ability to handle diverse typographic</tspan><tspan x="72" y="278.8">scenarios. Each section exercises a different combination of alignment, weight,</tspan><tspan x="72" y="302.6">size, and line height. The goal is to verify that spacing remains predictable</tspan><tspan x="72" y="326.4">and that no elements collide regardless of content length or style variation.</tspan></text><text id="list-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="368">Validation Checklist</tspan></text><text id="list-num-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="397">1.</tspan></text><text id="list-item-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="397">Confirm that centered text remains horizontally balanced at all font sizes.</tspan></text><text id="list-num-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="425">2.</tspan></text><text id="list-item-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="425">Verify left-aligned blocks maintain consistent left edge across line breaks.</tspan></text><text id="list-num-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="453">3.</tspan></text><text id="list-item-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="453">Check that right-aligned notes anchor correctly without drifting.</tspan></text><text id="list-num-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="481">4.</tspan></text><text id="list-item-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="481">Ensure code blocks preserve whitespace and monospace character width.</tspan></text><text id="list-num-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="509">5.</tspan></text><text id="list-item-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="509">Validate that pill components center their labels within fixed bounds.</tspan></text><path id="code-bg" d="M 80 562 L 920 562 Q 928 562 928 570 L 928 754 Q 928 762 920 762 L 80 762 Q 72 762 72 754 L 72 570 Q 72 562 80 562 Z" fill="#1e293b" stroke="none" stroke-width="0"/><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="92" y="588">function validateLayout(elements) {</tspan><tspan x="92" y="606.6"> const bounds = elements.map(el =&gt; getBounds(el));</tspan><tspan x="92" y="625.2"> for (let i = 0; i &lt; bounds.length; i++) {</tspan><tspan x="92" y="643.8"> for (let j = i + 1; j &lt; bounds.length; j++) {</tspan><tspan x="92" y="662.4"> if (intersects(bounds[i], bounds[j])) {</tspan><tspan x="92" y="681"> return { valid: false, collision: [i, j] };</tspan><tspan x="92" y="699.6"> }</tspan><tspan x="92" y="718.2"> }</tspan><tspan x="92" y="736.8"> }</tspan><tspan x="92" y="755.4"> return { valid: true };</tspan><tspan x="92" y="774">}</tspan></text><text id="note-text" text-anchor="end" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="400" letter-spacing="0" fill="#94a3b8"><tspan x="928" y="796">Note: All measurements are in logical pixels.</tspan><tspan x="928" y="814">Actual rendering may vary by display density.</tspan></text><path id="pill-bg-0" d="M 358 842 L 426 842 Q 440 842 440 856 L 440 856 Q 440 870 426 870 L 358 870 Q 344 870 344 856 L 344 856 Q 344 842 358 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-0" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="392" y="856">Centered</tspan></text><path id="pill-bg-1" d="M 466 842 L 534 842 Q 548 842 548 856 L 548 856 Q 548 870 534 870 L 466 870 Q 452 870 452 856 L 452 856 Q 452 842 466 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-1" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="500" y="856">Balanced</tspan></text><path id="pill-bg-2" d="M 574 842 L 642 842 Q 656 842 656 856 L 656 856 Q 656 870 642 870 L 574 870 Q 560 870 560 856 L 560 856 Q 560 842 574 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-2" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="608" y="856">Verified</tspan></text></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="920" viewBox="0 0 1000 920" role="img"><rect x="0" y="0" width="1000" height="920" fill="#ffffff"/><text id="headline" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="42.24316212409655" font-weight="336.3636363636364" letter-spacing="2.4392094689758634" fill="#0f172a"><tspan x="500" y="77.12158106204828">Typography Stress Test</tspan></text><text id="subtitle" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="16" font-weight="400" fill="#475569"><tspan x="500" y="120">Demonstrating multiple alignment modes, text styles, and layout patterns</tspan><tspan x="500" y="150.39999999999995">in a single cohesive document without visual overlap.</tspan></text><path id="divider-1" d="M 72 176 L 928 176" fill="none" stroke="#e2e8f0" stroke-width="1"/><text id="para-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="226">Overview</tspan></text><text id="para-body" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" letter-spacing="0.5800790335891854" fill="#334155"><tspan x="72" y="255">This document tests the render kernel's ability to handle diverse typographic</tspan><tspan x="72" y="278.8">scenarios. Each section exercises a different combination of alignment, weight,</tspan><tspan x="72" y="302.6">size, and line height. The goal is to verify that spacing remains predictable</tspan><tspan x="72" y="326.4">and that no elements collide regardless of content length or style variation.</tspan></text><text id="list-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="368">Validation Checklist</tspan></text><text id="list-num-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="397">1.</tspan></text><text id="list-item-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="397">Confirm that centered text remains horizontally balanced at all font sizes.</tspan></text><text id="list-num-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="425">2.</tspan></text><text id="list-item-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="425">Verify left-aligned blocks maintain consistent left edge across line breaks.</tspan></text><text id="list-num-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="453">3.</tspan></text><text id="list-item-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="453">Check that right-aligned notes anchor correctly without drifting.</tspan></text><text id="list-num-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="481">4.</tspan></text><text id="list-item-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="481">Ensure code blocks preserve whitespace and monospace character width.</tspan></text><text id="list-num-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="509">5.</tspan></text><text id="list-item-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="509">Validate that pill components center their labels within fixed bounds.</tspan></text><path id="code-bg" d="M 80 562 L 920 562 Q 928 562 928 570 L 928 754 Q 928 762 920 762 L 80 762 Q 72 762 72 754 L 72 570 Q 72 562 80 562 Z" fill="#1e293b" stroke="none" stroke-width="0"/><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="92" y="588">function validateLayout(elements) {</tspan><tspan x="92" y="606.6"> const bounds = elements.map(el =&gt; getBounds(el));</tspan><tspan x="92" y="625.2"> for (let i = 0; i &lt; bounds.length; i++) {</tspan><tspan x="92" y="643.8"> for (let j = i + 1; j &lt; bounds.length; j++) {</tspan><tspan x="92" y="662.4"> if (intersects(bounds[i], bounds[j])) {</tspan><tspan x="92" y="681"> return { valid: false, collision: [i, j] };</tspan><tspan x="92" y="699.6"> }</tspan><tspan x="92" y="718.2"> }</tspan><tspan x="92" y="736.8"> }</tspan><tspan x="92" y="755.4"> return { valid: true };</tspan><tspan x="92" y="774">}</tspan></text><text id="note-text" text-anchor="end" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13.951250723887783" font-weight="400" letter-spacing="1.1707504343326705" fill="#94a3b8"><tspan x="928" y="796.9756253619439">Note: All measurements are in logical pixels.</tspan><tspan x="928" y="817.9025014477755">Actual rendering may vary by display density.</tspan></text><path id="pill-bg-0" d="M 358 842 L 426 842 Q 440 842 440 856 L 440 856 Q 440 870 426 870 L 358 870 Q 344 870 344 856 L 344 856 Q 344 842 358 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-0" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="665.2173913043479" fill="#475569"><tspan x="392" y="856">Centered</tspan></text><path id="pill-bg-1" d="M 466 842 L 534 842 Q 548 842 548 856 L 548 856 Q 548 870 534 870 L 466 870 Q 452 870 452 856 L 452 856 Q 452 842 466 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-1" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="696.5217391304348" fill="#475569"><tspan x="500" y="856">Balanced</tspan></text><path id="pill-bg-2" d="M 574 842 L 642 842 Q 656 842 656 856 L 656 856 Q 656 870 642 870 L 574 870 Q 560 870 560 856 L 560 856 Q 560 842 574 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-2" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="685.1851851851852" fill="#475569"><tspan x="608" y="856">Verified</tspan></text></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="920" viewBox="0 0 1000 920" role="img"><rect x="0" y="0" width="1000" height="920" fill="#ffffff"/><text id="headline" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="36.85701737924497" font-weight="390.9090909090909" letter-spacing="3.7857456551887574" fill="#0f172a"><tspan x="500" y="74.42850868962249">Typography Stress Test</tspan></text><text id="subtitle" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="16" font-weight="400" fill="#475569"><tspan x="500" y="120">Demonstrating multiple alignment modes, text styles, and layout patterns</tspan><tspan x="500" y="145.13723240616773">in a single cohesive document without visual overlap.</tspan></text><path id="divider-1" d="M 72 176 L 928 176" fill="none" stroke="#e2e8f0" stroke-width="1"/><text id="para-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="226">Overview</tspan></text><text id="para-body" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" letter-spacing="0.5891224141459042" fill="#334155"><tspan x="72" y="255">This document tests the render kernel's ability to handle diverse typographic</tspan><tspan x="72" y="278.8">scenarios. Each section exercises a different combination of alignment, weight,</tspan><tspan x="72" y="302.6">size, and line height. The goal is to verify that spacing remains predictable</tspan><tspan x="72" y="326.4">and that no elements collide regardless of content length or style variation.</tspan></text><text id="list-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="368">Validation Checklist</tspan></text><text id="list-num-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="397">1.</tspan></text><text id="list-item-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="397">Confirm that centered text remains horizontally balanced at all font sizes.</tspan></text><text id="list-num-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="425">2.</tspan></text><text id="list-item-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="425">Verify left-aligned blocks maintain consistent left edge across line breaks.</tspan></text><text id="list-num-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="453">3.</tspan></text><text id="list-item-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="453">Check that right-aligned notes anchor correctly without drifting.</tspan></text><text id="list-num-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="481">4.</tspan></text><text id="list-item-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="481">Ensure code blocks preserve whitespace and monospace character width.</tspan></text><text id="list-num-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="509">5.</tspan></text><text id="list-item-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="509">Validate that pill components center their labels within fixed bounds.</tspan></text><path id="code-bg" d="M 80 562 L 920 562 Q 928 562 928 570 L 928 754 Q 928 762 920 762 L 80 762 Q 72 762 72 754 L 72 570 Q 72 562 80 562 Z" fill="#1e293b" stroke="none" stroke-width="0"/><text id="code-text" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="400" fill="#e2e8f0"><tspan x="92" y="588">function validateLayout(elements) {</tspan><tspan x="92" y="606.6"> const bounds = elements.map(el =&gt; getBounds(el));</tspan><tspan x="92" y="625.2"> for (let i = 0; i &lt; bounds.length; i++) {</tspan><tspan x="92" y="643.8"> for (let j = i + 1; j &lt; bounds.length; j++) {</tspan><tspan x="92" y="662.4"> if (intersects(bounds[i], bounds[j])) {</tspan><tspan x="92" y="681"> return { valid: false, collision: [i, j] };</tspan><tspan x="92" y="699.6"> }</tspan><tspan x="92" y="718.2"> }</tspan><tspan x="92" y="736.8"> }</tspan><tspan x="92" y="755.4"> return { valid: true };</tspan><tspan x="92" y="774">}</tspan></text><text id="note-text" text-anchor="end" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="13.88851814364226" font-weight="400" letter-spacing="1.1442590718211303" fill="#94a3b8"><tspan x="928" y="796.9442590718211">Note: All measurements are in logical pixels.</tspan><tspan x="928" y="817.7770362872844">Actual rendering may vary by display density.</tspan></text><path id="pill-bg-0" d="M 358 842 L 426 842 Q 440 842 440 856 L 440 856 Q 440 870 426 870 L 358 870 Q 344 870 344 856 L 344 856 Q 344 842 358 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-0" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="543.4782608695652" fill="#475569"><tspan x="392" y="856">Centered</tspan></text><path id="pill-bg-1" d="M 466 842 L 534 842 Q 548 842 548 856 L 548 856 Q 548 870 534 870 L 466 870 Q 452 870 452 856 L 452 856 Q 452 842 466 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-1" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="574.7826086956521" fill="#475569"><tspan x="500" y="856">Balanced</tspan></text><path id="pill-bg-2" d="M 574 842 L 642 842 Q 656 842 656 856 L 656 856 Q 656 870 642 870 L 574 870 Q 560 870 560 856 L 560 856 Q 560 842 574 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-2" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="606.0869565217391" fill="#475569"><tspan x="608" y="856">Verified</tspan></text></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="920" viewBox="0 0 1000 920" role="img"><rect x="0" y="0" width="1000" height="920" fill="#ffffff"/><text id="headline" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="40" font-weight="800" fill="#0f172a"><tspan x="500" y="76">Typography Stress Test</tspan></text><text id="subtitle" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="16" font-weight="400" fill="#475569"><tspan x="500" y="120">Demonstrating multiple alignment modes, text styles, and layout patterns</tspan><tspan x="500" y="144.8">in a single cohesive document without visual overlap.</tspan></text><path id="divider-1" d="M 72 176 L 928 176" fill="none" stroke="#e2e8f0" stroke-width="1"/><text id="para-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="226">Overview</tspan></text><text id="para-body" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="72" y="255">This document tests the render kernel's ability to handle diverse typographic</tspan><tspan x="72" y="278.8">scenarios. Each section exercises a different combination of alignment, weight,</tspan><tspan x="72" y="302.6">size, and line height. The goal is to verify that spacing remains predictable</tspan><tspan x="72" y="326.4">and that no elements collide regardless of content length or style variation.</tspan></text><text id="list-heading" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="20" font-weight="700" fill="#0f172a"><tspan x="72" y="368">Validation Checklist</tspan></text><text id="list-num-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="397">1.</tspan></text><text id="list-item-0" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="397">Confirm that centered text remains horizontally balanced at all font sizes.</tspan></text><text id="list-num-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="425">2.</tspan></text><text id="list-item-1" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="425">Verify left-aligned blocks maintain consistent left edge across line breaks.</tspan></text><text id="list-num-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="453">3.</tspan></text><text id="list-item-2" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="453">Check that right-aligned notes anchor correctly without drifting.</tspan></text><text id="list-num-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="481">4.</tspan></text><text id="list-item-3" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="481">Ensure code blocks preserve whitespace and monospace character width.</tspan></text><text id="list-num-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="600" fill="#2563eb"><tspan x="72" y="509">5.</tspan></text><text id="list-item-4" text-anchor="start" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="14" font-weight="400" fill="#334155"><tspan x="96" y="509">Validate that pill components center their labels within fixed bounds.</tspan></text><path id="code-bg" d="M 80 562 L 920 562 Q 928 562 928 570 L 928 754 Q 928 762 920 762 L 80 762 Q 72 762 72 754 L 72 570 Q 72 562 80 562 Z" fill="#1e293b" stroke="none" stroke-width="0"/><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="92" y="588">function validateLayout(elements) {</tspan><tspan x="92" y="606.6"> const bounds = elements.map(el =&gt; getBounds(el));</tspan><tspan x="92" y="625.2"> for (let i = 0; i &lt; bounds.length; i++) {</tspan><tspan x="92" y="643.8"> for (let j = i + 1; j &lt; bounds.length; j++) {</tspan><tspan x="92" y="662.4"> if (intersects(bounds[i], bounds[j])) {</tspan><tspan x="92" y="681"> return { valid: false, collision: [i, j] };</tspan><tspan x="92" y="699.6"> }</tspan><tspan x="92" y="718.2"> }</tspan><tspan x="92" y="736.8"> }</tspan><tspan x="92" y="755.4"> return { valid: true };</tspan><tspan x="92" y="774">}</tspan></text><text id="note-text" text-anchor="end" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="400" fill="#94a3b8"><tspan x="928" y="796">Note: All measurements are in logical pixels.</tspan><tspan x="928" y="814">Actual rendering may vary by display density.</tspan></text><path id="pill-bg-0" d="M 358 842 L 426 842 Q 440 842 440 856 L 440 856 Q 440 870 426 870 L 358 870 Q 344 870 344 856 L 344 856 Q 344 842 358 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-0" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="392" y="856">Centered</tspan></text><path id="pill-bg-1" d="M 466 842 L 534 842 Q 548 842 548 856 L 548 856 Q 548 870 534 870 L 466 870 Q 452 870 452 856 L 452 856 Q 452 842 466 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-1" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="500" y="856">Balanced</tspan></text><path id="pill-bg-2" d="M 574 842 L 642 842 Q 656 842 656 856 L 656 856 Q 656 870 642 870 L 574 870 Q 560 870 560 856 L 560 856 Q 560 842 574 842 Z" fill="#f1f5f9" stroke="#cbd5e1" stroke-width="1"/><text id="pill-text-2" text-anchor="middle" dominant-baseline="middle" font-family="Roboto, Arial, sans-serif" font-size="12" font-weight="500" fill="#475569"><tspan x="608" y="856">Verified</tspan></text></svg>