@profpowell/vb-design-system 0.1.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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +122 -0
  3. package/dist/vb-design-system.css +993 -0
  4. package/dist/vb-design-system.js +4482 -0
  5. package/dist/vb-design-system.min.css +1 -0
  6. package/dist/vb-design-system.min.js +513 -0
  7. package/package.json +78 -0
  8. package/src/index.css +21 -0
  9. package/src/index.js +24 -0
  10. package/src/lib/bundle-registry.js +156 -0
  11. package/src/lib/vb-element.js +96 -0
  12. package/src/patterns/do-dont.css +86 -0
  13. package/src/patterns/token-table.css +67 -0
  14. package/src/utils/copy-init.js +287 -0
  15. package/src/web-components/accessibility-specimen/api.json +51 -0
  16. package/src/web-components/accessibility-specimen/logic.js +232 -0
  17. package/src/web-components/accessibility-specimen/static.html +41 -0
  18. package/src/web-components/accessibility-specimen/styles.css +156 -0
  19. package/src/web-components/brand-specimen/api.json +37 -0
  20. package/src/web-components/brand-specimen/logic.js +61 -0
  21. package/src/web-components/brand-specimen/static.html +77 -0
  22. package/src/web-components/brand-specimen/styles.css +10 -0
  23. package/src/web-components/breakpoint-specimen/api.json +44 -0
  24. package/src/web-components/breakpoint-specimen/logic.js +186 -0
  25. package/src/web-components/breakpoint-specimen/static.html +38 -0
  26. package/src/web-components/breakpoint-specimen/styles.css +180 -0
  27. package/src/web-components/color-palette/api.json +73 -0
  28. package/src/web-components/color-palette/logic.js +280 -0
  29. package/src/web-components/color-palette/static.html +54 -0
  30. package/src/web-components/color-palette/styles.css +113 -0
  31. package/src/web-components/color-picker/_color-utils.js +210 -0
  32. package/src/web-components/component-sampler/api.json +15 -0
  33. package/src/web-components/component-sampler/logic.js +120 -0
  34. package/src/web-components/component-sampler/static.html +47 -0
  35. package/src/web-components/component-sampler/styles.css +9 -0
  36. package/src/web-components/font-pairer/_font-data.js +95 -0
  37. package/src/web-components/font-pairer/api.json +56 -0
  38. package/src/web-components/font-pairer/logic.js +401 -0
  39. package/src/web-components/font-pairer/static.html +9 -0
  40. package/src/web-components/font-pairer/styles.css +10 -0
  41. package/src/web-components/gradient-builder/_gradient-utils.js +54 -0
  42. package/src/web-components/gradient-builder/api.json +63 -0
  43. package/src/web-components/gradient-builder/logic.js +261 -0
  44. package/src/web-components/gradient-builder/static.html +9 -0
  45. package/src/web-components/gradient-builder/styles.css +10 -0
  46. package/src/web-components/icon-set/api.json +39 -0
  47. package/src/web-components/icon-set/logic.js +133 -0
  48. package/src/web-components/icon-set/static.html +36 -0
  49. package/src/web-components/icon-set/styles.css +82 -0
  50. package/src/web-components/icon-specimen/api.json +46 -0
  51. package/src/web-components/icon-specimen/logic.js +67 -0
  52. package/src/web-components/icon-specimen/static.html +39 -0
  53. package/src/web-components/icon-specimen/styles.css +38 -0
  54. package/src/web-components/layout-specimen/api.json +12 -0
  55. package/src/web-components/layout-specimen/logic.js +219 -0
  56. package/src/web-components/layout-specimen/static.html +22 -0
  57. package/src/web-components/layout-specimen/styles.css +95 -0
  58. package/src/web-components/motion-specimen/api.json +54 -0
  59. package/src/web-components/motion-specimen/logic.js +146 -0
  60. package/src/web-components/motion-specimen/static.html +13 -0
  61. package/src/web-components/motion-specimen/styles.css +29 -0
  62. package/src/web-components/palette-generator/_palette-utils.js +133 -0
  63. package/src/web-components/palette-generator/api.json +79 -0
  64. package/src/web-components/palette-generator/logic.js +288 -0
  65. package/src/web-components/palette-generator/static.html +47 -0
  66. package/src/web-components/palette-generator/styles.css +36 -0
  67. package/src/web-components/semantic-palette/_color-math.js +149 -0
  68. package/src/web-components/semantic-palette/api.json +41 -0
  69. package/src/web-components/semantic-palette/logic.js +400 -0
  70. package/src/web-components/semantic-palette/static.html +42 -0
  71. package/src/web-components/semantic-palette/styles.css +20 -0
  72. package/src/web-components/spacing-specimen/api.json +63 -0
  73. package/src/web-components/spacing-specimen/logic.js +132 -0
  74. package/src/web-components/spacing-specimen/static.html +71 -0
  75. package/src/web-components/spacing-specimen/styles.css +58 -0
  76. package/src/web-components/theme-catalog/api.json +14 -0
  77. package/src/web-components/theme-catalog/logic.js +228 -0
  78. package/src/web-components/theme-catalog/static.html +15 -0
  79. package/src/web-components/theme-export/api.json +18 -0
  80. package/src/web-components/theme-export/dtcg-serialize.js +417 -0
  81. package/src/web-components/theme-export/logic.js +201 -0
  82. package/src/web-components/theme-export/static.html +12 -0
  83. package/src/web-components/theme-export/theme-css-parse.js +93 -0
  84. package/src/web-components/theme-import/api.json +14 -0
  85. package/src/web-components/theme-import/catalog/atlassian.tokens.json +303 -0
  86. package/src/web-components/theme-import/catalog/bootstrap.tokens.json +304 -0
  87. package/src/web-components/theme-import/catalog/carbon.tokens.json +301 -0
  88. package/src/web-components/theme-import/catalog/catppuccin-mocha.tokens.json +301 -0
  89. package/src/web-components/theme-import/catalog/govuk.tokens.json +301 -0
  90. package/src/web-components/theme-import/catalog/manifest.json +132 -0
  91. package/src/web-components/theme-import/catalog/material.tokens.json +289 -0
  92. package/src/web-components/theme-import/catalog/salesforce.tokens.json +301 -0
  93. package/src/web-components/theme-import/catalog/tailwind.tokens.json +302 -0
  94. package/src/web-components/theme-import/dtcg-deserialize.js +322 -0
  95. package/src/web-components/theme-import/logic.js +263 -0
  96. package/src/web-components/theme-import/static.html +15 -0
  97. package/src/web-components/token-specimen/api.json +24 -0
  98. package/src/web-components/token-specimen/logic.js +256 -0
  99. package/src/web-components/token-specimen/static.html +47 -0
  100. package/src/web-components/token-specimen/styles.css +10 -0
  101. package/src/web-components/type-specimen/api.json +91 -0
  102. package/src/web-components/type-specimen/logic.js +156 -0
  103. package/src/web-components/type-specimen/static.html +84 -0
  104. package/src/web-components/type-specimen/styles.css +131 -0
@@ -0,0 +1,993 @@
1
+ /* src/web-components/color-palette/styles.css */
2
+ color-palette:not(:defined) {
3
+ display: block;
4
+ }
5
+ color-palette {
6
+ display: block;
7
+ }
8
+ color-palette .palette {
9
+ display: flex;
10
+ flex-wrap: wrap;
11
+ gap: var(--size-xs, 0.5rem);
12
+ }
13
+ color-palette .palette.grid {
14
+ display: grid;
15
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
16
+ }
17
+ color-palette .palette.list {
18
+ flex-direction: column;
19
+ }
20
+ color-palette .palette.list .swatch-wrap {
21
+ flex-direction: row;
22
+ align-items: center;
23
+ gap: var(--size-s, 0.75rem);
24
+ }
25
+ color-palette .palette.list .color-box {
26
+ inline-size: 36px !important;
27
+ block-size: 36px !important;
28
+ }
29
+ color-palette .swatch-wrap {
30
+ display: flex;
31
+ flex-direction: column;
32
+ align-items: center;
33
+ gap: var(--size-2xs, 0.25rem);
34
+ }
35
+ color-palette .color-box {
36
+ position: relative;
37
+ border: 1px solid oklch(0% 0 0 / 0.15);
38
+ border-radius: var(--radius-s, 0.25rem);
39
+ cursor: pointer;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ padding: 0;
44
+ font-family: var(--font-mono, monospace);
45
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
46
+ overflow: hidden;
47
+ }
48
+ color-palette .color-box:hover {
49
+ transform: translateY(-2px);
50
+ box-shadow: 0 4px 8px oklch(0% 0 0 / 0.15);
51
+ z-index: 1;
52
+ }
53
+ color-palette .color-box:focus-visible {
54
+ outline: 2px solid var(--color-focus-ring, currentColor);
55
+ outline-offset: 2px;
56
+ }
57
+ color-palette .color-value {
58
+ font-size: 0.625rem;
59
+ line-height: 1.2;
60
+ opacity: 0;
61
+ transition: opacity 0.15s ease;
62
+ text-align: center;
63
+ padding: 2px 4px;
64
+ word-break: break-all;
65
+ }
66
+ color-palette .color-box:hover .color-value,
67
+ color-palette .color-box:focus-visible .color-value,
68
+ color-palette .color-value.visible {
69
+ opacity: 1;
70
+ }
71
+ color-palette .color-box.copied::after {
72
+ content: "Copied!";
73
+ position: absolute;
74
+ inset: 0;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ background: oklch(0% 0 0 / 0.6);
79
+ color: white;
80
+ font-size: var(--font-size-xs, 0.75rem);
81
+ font-weight: 600;
82
+ font-family: var(--font-sans, system-ui);
83
+ border-radius: inherit;
84
+ }
85
+ color-palette .color-name {
86
+ font-size: var(--font-size-xs, 0.75rem);
87
+ color: var(--color-text-muted, #666);
88
+ text-align: center;
89
+ max-inline-size: 100%;
90
+ overflow: hidden;
91
+ text-overflow: ellipsis;
92
+ white-space: nowrap;
93
+ }
94
+
95
+ /* src/web-components/palette-generator/styles.css */
96
+ palette-generator {
97
+ display: block;
98
+ }
99
+ palette-generator .pg-seed-label {
100
+ display: block;
101
+ font-size: var(--font-size-sm, 0.875rem);
102
+ font-weight: 600;
103
+ color: var(--color-text-muted, #666);
104
+ margin-block-end: var(--size-2xs, 0.25rem);
105
+ }
106
+ palette-generator > color-picker,
107
+ palette-generator > input[type=color] {
108
+ margin-block-end: var(--size-s, 0.75rem);
109
+ padding-block-end: var(--size-s, 0.75rem);
110
+ border-block-end: 1px solid var(--color-border-subtle, #e5e5e5);
111
+ }
112
+ palette-generator .pg-export {
113
+ margin-block-start: var(--size-s, 0.75rem);
114
+ }
115
+ palette-generator .pg-export button:hover {
116
+ background: var(--surface-hover, #f5f5f5);
117
+ }
118
+ palette-generator .pg-export button:focus-visible {
119
+ outline: var(--focus-ring-width, 2px) solid var(--focus-ring-color, currentColor);
120
+ outline-offset: 2px;
121
+ }
122
+
123
+ /* src/web-components/type-specimen/styles.css */
124
+ type-specimen:not(:defined) {
125
+ display: block;
126
+ }
127
+ type-specimen {
128
+ display: block;
129
+ }
130
+ type-specimen .specimen-header {
131
+ margin-block-end: var(--size-s, 0.75rem);
132
+ }
133
+ type-specimen .specimen-label {
134
+ display: block;
135
+ font-size: var(--font-size-xs, 0.75rem);
136
+ font-weight: 700;
137
+ text-transform: uppercase;
138
+ letter-spacing: 0.08em;
139
+ color: var(--color-text-muted, #666);
140
+ margin-block-end: var(--size-2xs, 0.25rem);
141
+ font-family: var(--font-sans, system-ui);
142
+ }
143
+ type-specimen .specimen-sample {
144
+ font-size: var(--font-size-3xl, 1.875rem);
145
+ line-height: 1.2;
146
+ margin: 0;
147
+ padding: var(--size-xs, 0.5rem);
148
+ border: 1px dashed transparent;
149
+ border-radius: var(--radius-s, 0.25rem);
150
+ transition: border-color 0.15s ease;
151
+ cursor: text;
152
+ }
153
+ type-specimen .specimen-sample:hover {
154
+ border-color: var(--color-border, #ddd);
155
+ }
156
+ type-specimen .specimen-sample:focus {
157
+ outline: none;
158
+ border-color: var(--color-primary, #333);
159
+ }
160
+ type-specimen .specimen-chars {
161
+ display: flex;
162
+ flex-direction: column;
163
+ gap: var(--size-2xs, 0.25rem);
164
+ margin-block-end: var(--size-s, 0.75rem);
165
+ padding: var(--size-xs, 0.5rem);
166
+ background: var(--color-surface-raised, #f8f8f8);
167
+ border-radius: var(--radius-s, 0.25rem);
168
+ }
169
+ type-specimen .char-row {
170
+ display: flex;
171
+ flex-wrap: wrap;
172
+ gap: 2px;
173
+ align-items: center;
174
+ font-size: var(--font-size-sm, 0.875rem);
175
+ }
176
+ type-specimen .char-label {
177
+ font-family: var(--font-sans, system-ui);
178
+ font-size: var(--font-size-xs, 0.75rem);
179
+ font-weight: 600;
180
+ color: var(--color-text-muted, #666);
181
+ inline-size: 3.5rem;
182
+ flex-shrink: 0;
183
+ }
184
+ type-specimen .char-row span:not(.char-label) {
185
+ inline-size: 1.25em;
186
+ text-align: center;
187
+ }
188
+ type-specimen .specimen-weights {
189
+ display: flex;
190
+ flex-wrap: wrap;
191
+ gap: var(--size-s, 0.75rem);
192
+ margin-block-end: var(--size-s, 0.75rem);
193
+ }
194
+ type-specimen .weight-sample {
195
+ display: flex;
196
+ flex-direction: column;
197
+ align-items: center;
198
+ gap: 2px;
199
+ }
200
+ type-specimen .weight-label {
201
+ font-family: var(--font-mono, monospace);
202
+ font-size: var(--font-size-xs, 0.75rem);
203
+ color: var(--color-text-muted, #666);
204
+ }
205
+ type-specimen .weight-text {
206
+ font-size: var(--font-size-2xl, 1.5rem);
207
+ }
208
+ type-specimen .specimen-scale {
209
+ display: flex;
210
+ flex-direction: column;
211
+ gap: var(--size-2xs, 0.25rem);
212
+ }
213
+ type-specimen .scale-step {
214
+ display: flex;
215
+ align-items: baseline;
216
+ gap: var(--size-s, 0.75rem);
217
+ line-height: 1.3;
218
+ }
219
+ type-specimen .scale-label {
220
+ font-family: var(--font-mono, monospace);
221
+ font-size: var(--font-size-xs, 0.75rem);
222
+ color: var(--color-text-muted, #666);
223
+ inline-size: 2.5rem;
224
+ flex-shrink: 0;
225
+ text-align: end;
226
+ }
227
+ type-specimen .scale-text {
228
+ overflow: hidden;
229
+ text-overflow: ellipsis;
230
+ white-space: nowrap;
231
+ }
232
+
233
+ /* src/web-components/spacing-specimen/styles.css */
234
+ spacing-specimen:not(:defined) {
235
+ display: block;
236
+ }
237
+ spacing-specimen {
238
+ display: block;
239
+ }
240
+ spacing-specimen .specimen-label {
241
+ display: block;
242
+ font-size: var(--font-size-xs, 0.75rem);
243
+ font-weight: 700;
244
+ text-transform: uppercase;
245
+ letter-spacing: 0.08em;
246
+ color: var(--color-text-muted, #666);
247
+ margin-block-end: var(--size-s, 0.75rem);
248
+ font-family: var(--font-sans, system-ui);
249
+ }
250
+ spacing-specimen .specimen-scale {
251
+ display: flex;
252
+ flex-direction: column;
253
+ gap: var(--size-2xs, 0.25rem);
254
+ }
255
+ spacing-specimen .scale-step {
256
+ display: grid;
257
+ grid-template-columns: 3rem 1fr auto;
258
+ align-items: center;
259
+ gap: var(--size-s, 0.75rem);
260
+ min-block-size: 1.75rem;
261
+ }
262
+ spacing-specimen .scale-name {
263
+ font-family: var(--font-mono, monospace);
264
+ font-size: var(--font-size-sm, 0.875rem);
265
+ color: var(--color-text-muted, #666);
266
+ text-align: end;
267
+ }
268
+ spacing-specimen .scale-bar {
269
+ display: block;
270
+ block-size: var(--size-m, 1rem);
271
+ min-inline-size: 2px;
272
+ background: var(--color-interactive, oklch(55% 0.2 260));
273
+ border-radius: var(--radius-s, 0.25rem);
274
+ transition: inline-size 0.3s ease;
275
+ }
276
+ spacing-specimen .scale-value {
277
+ font-family: var(--font-mono, monospace);
278
+ font-size: var(--font-size-xs, 0.75rem);
279
+ color: var(--color-text-muted, #666);
280
+ font-variant-numeric: tabular-nums;
281
+ min-inline-size: 3.5rem;
282
+ text-align: end;
283
+ }
284
+
285
+ /* src/web-components/token-specimen/styles.css */
286
+ token-specimen:not(:defined) {
287
+ display: block;
288
+ min-height: 2rem;
289
+ }
290
+ token-specimen {
291
+ display: block;
292
+ }
293
+
294
+ /* src/web-components/component-sampler/styles.css */
295
+ component-sampler:not(:defined) {
296
+ display: block;
297
+ }
298
+ component-sampler {
299
+ display: block;
300
+ }
301
+
302
+ /* src/web-components/semantic-palette/styles.css */
303
+ semantic-palette[data-upgraded] > dl,
304
+ semantic-palette[data-upgraded] > ul,
305
+ semantic-palette[data-upgraded] > ol {
306
+ display: none;
307
+ }
308
+ semantic-palette .sp-export button:hover {
309
+ background: var(--color-surface-hover, var(--color-surface-raised, #f5f5f5));
310
+ }
311
+ semantic-palette .sp-export button:focus-visible {
312
+ outline: var(--focus-ring-width, 2px) solid var(--focus-ring-color, currentColor);
313
+ outline-offset: 2px;
314
+ }
315
+
316
+ /* src/web-components/motion-specimen/styles.css */
317
+ @keyframes ms-slide {
318
+ from {
319
+ inset-inline-start: 0;
320
+ }
321
+ to {
322
+ inset-inline-start: calc(100% - 1rem);
323
+ }
324
+ }
325
+ @keyframes ms-fill {
326
+ 0% {
327
+ transform: scaleX(0);
328
+ }
329
+ 60% {
330
+ transform: scaleX(1);
331
+ }
332
+ 100% {
333
+ transform: scaleX(1);
334
+ opacity: 0.3;
335
+ }
336
+ }
337
+ @media (prefers-reduced-motion: reduce) {
338
+ motion-specimen .ms-dot {
339
+ animation: none !important;
340
+ inset-inline-start: calc(50% - 0.5rem) !important;
341
+ }
342
+ motion-specimen .ms-bar-fill {
343
+ animation: none !important;
344
+ transform: scaleX(0.6) !important;
345
+ opacity: 0.6 !important;
346
+ }
347
+ }
348
+
349
+ /* src/web-components/accessibility-specimen/styles.css */
350
+ accessibility-specimen {
351
+ display: block;
352
+ font: inherit;
353
+ }
354
+ accessibility-specimen .as-contrast-table {
355
+ inline-size: 100%;
356
+ border-collapse: collapse;
357
+ border: var(--border-width-thin, 1px) solid var(--color-border, #ddd);
358
+ border-radius: var(--radius-m, 0.5rem);
359
+ overflow: hidden;
360
+ font-size: 0.95em;
361
+ }
362
+ accessibility-specimen .as-contrast-table th,
363
+ accessibility-specimen .as-contrast-table td {
364
+ padding-block: var(--size-2xs, 0.375rem);
365
+ padding-inline: var(--size-s, 0.5rem);
366
+ text-align: start;
367
+ border-block-end: var(--border-width-thin, 1px) solid var(--color-border, #ddd);
368
+ }
369
+ accessibility-specimen .as-contrast-table tr:last-child th,
370
+ accessibility-specimen .as-contrast-table tr:last-child td {
371
+ border-block-end: none;
372
+ }
373
+ accessibility-specimen .as-contrast-table thead {
374
+ background: var(--color-surface-raised, var(--color-surface, #fff));
375
+ font-size: 0.85em;
376
+ text-transform: uppercase;
377
+ letter-spacing: 0.04em;
378
+ color: var(--color-text-muted, currentColor);
379
+ }
380
+ accessibility-specimen .as-pair-label {
381
+ font-weight: 500;
382
+ display: flex;
383
+ align-items: center;
384
+ gap: var(--size-2xs, 0.375rem);
385
+ font-variant-numeric: tabular-nums;
386
+ }
387
+ accessibility-specimen .as-swatch {
388
+ display: inline-block;
389
+ inline-size: 1.25rem;
390
+ block-size: 1.25rem;
391
+ border-radius: var(--radius-s, 0.25rem);
392
+ border: var(--border-width-thin, 1px) solid currentColor;
393
+ flex-shrink: 0;
394
+ }
395
+ accessibility-specimen .as-pair-sample {
396
+ font-weight: 500;
397
+ font-size: 1em;
398
+ white-space: nowrap;
399
+ text-align: center;
400
+ }
401
+ accessibility-specimen .as-pair-ratio {
402
+ font-variant-numeric: tabular-nums;
403
+ font-weight: 600;
404
+ }
405
+ accessibility-specimen .as-badge {
406
+ text-align: center;
407
+ font-weight: 600;
408
+ font-size: 1.1em;
409
+ inline-size: 3em;
410
+ }
411
+ accessibility-specimen .as-pass {
412
+ color: var(--color-success, #2e7d32);
413
+ }
414
+ accessibility-specimen .as-fail {
415
+ color: var(--color-error, #c62828);
416
+ }
417
+ accessibility-specimen .as-empty {
418
+ text-align: center;
419
+ font-style: italic;
420
+ color: var(--color-text-muted, currentColor);
421
+ padding-block: var(--size-l, 1.5rem) !important;
422
+ }
423
+ accessibility-specimen .as-checklist {
424
+ list-style: none;
425
+ margin: 0;
426
+ padding: 0;
427
+ display: flex;
428
+ flex-direction: column;
429
+ gap: var(--size-2xs, 0.375rem);
430
+ }
431
+ accessibility-specimen .as-checklist > li {
432
+ display: flex;
433
+ align-items: flex-start;
434
+ gap: var(--size-xs, 0.5rem);
435
+ padding-block: var(--size-2xs, 0.375rem);
436
+ padding-inline: var(--size-s, 0.5rem);
437
+ border: var(--border-width-thin, 1px) solid var(--color-border, #ddd);
438
+ border-radius: var(--radius-s, 0.25rem);
439
+ }
440
+ accessibility-specimen .as-checklist-icon {
441
+ flex-shrink: 0;
442
+ display: inline-flex;
443
+ align-items: center;
444
+ justify-content: center;
445
+ inline-size: 1.5rem;
446
+ block-size: 1.5rem;
447
+ border-radius: var(--radius-full, 999px);
448
+ font-weight: 700;
449
+ line-height: 1;
450
+ }
451
+ accessibility-specimen .as-status-pass {
452
+ border-color: var(--color-success, #2e7d32);
453
+ }
454
+ accessibility-specimen .as-status-pass .as-checklist-icon {
455
+ background: var(--color-success, #2e7d32);
456
+ color: var(--color-text-on-success, white);
457
+ }
458
+ accessibility-specimen .as-status-fail {
459
+ border-color: var(--color-error, #c62828);
460
+ }
461
+ accessibility-specimen .as-status-fail .as-checklist-icon {
462
+ background: var(--color-error, #c62828);
463
+ color: var(--color-text-on-error, white);
464
+ }
465
+ accessibility-specimen .as-status-warn {
466
+ border-color: var(--color-warning, #b8860b);
467
+ }
468
+ accessibility-specimen .as-status-warn .as-checklist-icon {
469
+ background: var(--color-warning, #b8860b);
470
+ color: var(--color-text-on-warning, white);
471
+ }
472
+ accessibility-specimen .as-status-na .as-checklist-icon {
473
+ background: var(--color-text-muted, oklch(60% 0 0));
474
+ color: var(--color-surface, white);
475
+ }
476
+ accessibility-specimen .as-sr-only {
477
+ position: absolute;
478
+ inline-size: 1px;
479
+ block-size: 1px;
480
+ padding: 0;
481
+ margin: -1px;
482
+ overflow: hidden;
483
+ clip: rect(0 0 0 0);
484
+ white-space: nowrap;
485
+ border: 0;
486
+ }
487
+
488
+ /* src/web-components/breakpoint-specimen/styles.css */
489
+ breakpoint-specimen:not(:defined) {
490
+ display: block;
491
+ }
492
+ breakpoint-specimen {
493
+ display: block;
494
+ font-family: var(--font-sans, system-ui);
495
+ color: var(--color-text, #1a1a1a);
496
+ }
497
+ @scope (breakpoint-specimen) {
498
+ .bps-label {
499
+ display: block;
500
+ font-size: var(--font-size-xs, 0.75rem);
501
+ font-weight: 700;
502
+ text-transform: uppercase;
503
+ letter-spacing: 0.08em;
504
+ color: var(--color-text-muted, #666);
505
+ margin-block-end: var(--size-s, 0.75rem);
506
+ }
507
+ .bps-readout {
508
+ display: inline-flex;
509
+ align-items: baseline;
510
+ gap: var(--size-s, 0.75rem);
511
+ font-family: var(--font-mono, ui-monospace, monospace);
512
+ font-variant-numeric: tabular-nums;
513
+ margin-block-end: var(--size-m, 1rem);
514
+ }
515
+ .bps-width {
516
+ font-size: var(--font-size-l, 1.25rem);
517
+ font-weight: 600;
518
+ }
519
+ .bps-active {
520
+ font-size: var(--font-size-sm, 0.875rem);
521
+ padding: var(--size-3xs, 0.125rem) var(--size-xs, 0.5rem);
522
+ border-radius: var(--radius-s, 0.25rem);
523
+ background: var(--color-surface-raised, oklch(96% 0 0));
524
+ color: var(--color-text-muted, #666);
525
+ border: 1px solid var(--color-border, oklch(85% 0 0));
526
+ }
527
+ .bps-active[data-active]:not([data-active=""]) {
528
+ background: var(--color-accent-soft, oklch(94% 0.04 260));
529
+ color: var(--color-accent, oklch(45% 0.18 260));
530
+ border-color: currentColor;
531
+ }
532
+ .bps-ruler {
533
+ position: relative;
534
+ block-size: var(--size-xl, 2.5rem);
535
+ margin: var(--size-s, 0.75rem) 0 var(--size-l, 1.5rem);
536
+ border-block-start: 2px solid var(--color-border, oklch(85% 0 0));
537
+ }
538
+ .bps-cursor {
539
+ position: absolute;
540
+ inset-block: -0.5rem auto;
541
+ inline-size: 2px;
542
+ block-size: calc(100% + 1rem);
543
+ background: var(--color-accent, oklch(45% 0.18 260));
544
+ inset-inline-start: var(--bps-pos, 0%);
545
+ transform: translateX(-1px);
546
+ transition: inset-inline-start 0.12s linear;
547
+ z-index: 1;
548
+ }
549
+ .bps-stop {
550
+ position: absolute;
551
+ inset-block-start: -2px;
552
+ inset-inline-start: var(--bps-pos, 0%);
553
+ display: block;
554
+ }
555
+ .bps-tick {
556
+ display: block;
557
+ inline-size: 1px;
558
+ block-size: var(--size-xs, 0.5rem);
559
+ background: var(--color-text-muted, #666);
560
+ }
561
+ .bps-stop-label {
562
+ position: absolute;
563
+ inset-block-start: var(--size-s, 0.75rem);
564
+ inset-inline-start: 0;
565
+ transform: translateX(-50%);
566
+ font-family: var(--font-mono, ui-monospace, monospace);
567
+ font-size: var(--font-size-xs, 0.75rem);
568
+ color: var(--color-text-muted, #666);
569
+ text-align: center;
570
+ white-space: nowrap;
571
+ line-height: 1.2;
572
+ }
573
+ .bps-stop[data-current] .bps-stop-label {
574
+ color: var(--color-accent, oklch(45% 0.18 260));
575
+ font-weight: 600;
576
+ }
577
+ .bps-stop[data-current] .bps-tick {
578
+ background: var(--color-accent, oklch(45% 0.18 260));
579
+ inline-size: 2px;
580
+ }
581
+ .bps-list {
582
+ display: grid;
583
+ grid-template-columns: max-content 1fr;
584
+ gap: var(--size-2xs, 0.25rem) var(--size-m, 1rem);
585
+ margin: 0;
586
+ font-size: var(--font-size-sm, 0.875rem);
587
+ }
588
+ .bps-row {
589
+ display: contents;
590
+ }
591
+ .bps-row dt {
592
+ font-family: var(--font-mono, ui-monospace, monospace);
593
+ font-weight: 600;
594
+ color: var(--color-text-muted, #666);
595
+ }
596
+ .bps-row dd {
597
+ margin: 0;
598
+ color: var(--color-text-muted, #666);
599
+ }
600
+ .bps-row[data-current] dt,
601
+ .bps-row[data-current] dd {
602
+ color: var(--color-accent, oklch(45% 0.18 260));
603
+ font-weight: 600;
604
+ }
605
+ }
606
+ breakpoint-specimen:not([data-observe]) [data-bp=sm] {
607
+ font-style: italic;
608
+ }
609
+ @media (width >= 37.5rem) {
610
+ breakpoint-specimen:not([data-observe]) [data-bp=sm] {
611
+ font-style: normal;
612
+ }
613
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=sm] dt,
614
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=sm] dd {
615
+ color: var(--color-text, currentColor);
616
+ }
617
+ }
618
+ @media (width >= 48rem) {
619
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=md] dt,
620
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=md] dd {
621
+ color: var(--color-text, currentColor);
622
+ }
623
+ }
624
+ @media (width >= 64rem) {
625
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=lg] dt,
626
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=lg] dd {
627
+ color: var(--color-text, currentColor);
628
+ }
629
+ }
630
+ @media (width >= 87.5rem) {
631
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=xl] dt,
632
+ breakpoint-specimen:not([data-observe]) .bps-row[data-bp=xl] dd {
633
+ color: var(--color-text, currentColor);
634
+ }
635
+ }
636
+ @media print {
637
+ breakpoint-specimen .bps-readout,
638
+ breakpoint-specimen .bps-ruler {
639
+ display: none;
640
+ }
641
+ }
642
+
643
+ /* src/web-components/layout-specimen/styles.css */
644
+ layout-specimen {
645
+ display: flex;
646
+ flex-direction: column;
647
+ gap: var(--size-l, 1.5rem);
648
+ font: inherit;
649
+ }
650
+ layout-specimen .ls-entry {
651
+ display: grid;
652
+ grid-template-columns: 1fr;
653
+ gap: var(--size-s, 0.75rem);
654
+ padding: var(--size-s, 0.75rem);
655
+ border: var(--border-width-thin, 1px) solid var(--color-border, #ddd);
656
+ border-radius: var(--radius-m, 0.5rem);
657
+ background: var(--color-surface, #fff);
658
+ }
659
+ layout-specimen .ls-entry-head {
660
+ display: flex;
661
+ flex-direction: column;
662
+ gap: var(--size-3xs, 0.125rem);
663
+ }
664
+ layout-specimen .ls-entry-name {
665
+ margin: 0;
666
+ font-size: 1em;
667
+ font-family: var(--font-mono, ui-monospace, monospace);
668
+ color: var(--color-text, #1a1a1a);
669
+ }
670
+ layout-specimen .ls-entry-desc {
671
+ margin: 0;
672
+ font-size: 0.875em;
673
+ color: var(--color-text-muted, currentColor);
674
+ }
675
+ layout-specimen .ls-live {
676
+ padding: var(--size-s, 0.75rem);
677
+ background: var(--color-surface-sunken, oklch(94% 0 0));
678
+ border-radius: var(--radius-s, 0.25rem);
679
+ min-block-size: 4rem;
680
+ }
681
+ layout-specimen .ls-snippet {
682
+ margin: 0;
683
+ padding: var(--size-2xs, 0.375rem) var(--size-s, 0.5rem);
684
+ background: var(--color-surface-sunken, oklch(94% 0 0));
685
+ border-radius: var(--radius-s, 0.25rem);
686
+ font-size: 0.8em;
687
+ line-height: 1.4;
688
+ font-family: var(--font-mono, ui-monospace, monospace);
689
+ color: var(--color-text, #1a1a1a);
690
+ overflow-x: auto;
691
+ white-space: pre;
692
+ }
693
+ layout-specimen .ls-box {
694
+ display: inline-flex;
695
+ align-items: center;
696
+ justify-content: center;
697
+ padding: var(--size-xs, 0.5rem);
698
+ background: var(--color-action-subtle, color-mix(in oklch, var(--color-interactive, oklch(55% 0.2 260)) 15%, transparent));
699
+ color: var(--color-text, #1a1a1a);
700
+ border: var(--border-width-thin, 1px) solid var(--color-interactive, currentColor);
701
+ border-radius: var(--radius-s, 0.25rem);
702
+ font-size: 0.85em;
703
+ font-weight: 500;
704
+ min-block-size: 2rem;
705
+ }
706
+ layout-specimen .ls-box-main {
707
+ background: var(--color-surface, #fff);
708
+ border-style: dashed;
709
+ }
710
+ layout-specimen .ls-box-reel {
711
+ inline-size: 5rem;
712
+ flex-shrink: 0;
713
+ }
714
+ layout-specimen .ls-chip {
715
+ display: inline-flex;
716
+ align-items: center;
717
+ padding: var(--size-3xs, 0.125rem) var(--size-2xs, 0.375rem);
718
+ background: var(--color-surface-raised, var(--color-surface, #fff));
719
+ border: var(--border-width-thin, 1px) solid var(--color-border, #ddd);
720
+ border-radius: var(--radius-full, 999px);
721
+ font-size: 0.85em;
722
+ }
723
+
724
+ /* src/web-components/font-pairer/styles.css */
725
+ font-pairer {
726
+ display: block;
727
+ max-inline-size: 56rem;
728
+ }
729
+ font-pairer:not(:defined) {
730
+ display: none;
731
+ }
732
+
733
+ /* src/web-components/gradient-builder/styles.css */
734
+ gradient-builder {
735
+ display: block;
736
+ max-inline-size: 32rem;
737
+ }
738
+ gradient-builder:not(:defined) {
739
+ display: none;
740
+ }
741
+
742
+ /* src/web-components/brand-specimen/styles.css */
743
+ .brand-specimen {
744
+ display: grid;
745
+ gap: var(--size-l, 1.5rem);
746
+ }
747
+ .bs-surfaces {
748
+ display: grid;
749
+ grid-template-columns: 1fr 1fr;
750
+ gap: var(--size-m, 1rem);
751
+ }
752
+ .bs-surfaces figure {
753
+ margin: 0;
754
+ padding: var(--size-l, 1.5rem);
755
+ border-radius: var(--radius-m, 0.5rem);
756
+ display: grid;
757
+ place-items: center;
758
+ gap: var(--size-s, 0.75rem);
759
+ }
760
+ .bs-surfaces [data-surface=light] {
761
+ background: #fff;
762
+ color: #111;
763
+ }
764
+ .bs-surfaces [data-surface=dark] {
765
+ background: #111;
766
+ color: #fff;
767
+ }
768
+ .bs-scale {
769
+ display: flex;
770
+ align-items: end;
771
+ gap: var(--size-l, 1.5rem);
772
+ flex-wrap: wrap;
773
+ }
774
+ .bs-scale span {
775
+ display: grid;
776
+ justify-items: center;
777
+ gap: var(--size-2xs, 0.25rem);
778
+ }
779
+ .bs-clear-box {
780
+ display: inline-block;
781
+ padding: 1em;
782
+ outline: 1px dashed var(--color-border, #d4d4d8);
783
+ outline-offset: 0.25em;
784
+ }
785
+
786
+ /* src/web-components/icon-set/styles.css */
787
+ icon-set:not(:defined) {
788
+ display: block;
789
+ }
790
+ icon-set {
791
+ display: block;
792
+ font-family: var(--font-sans, system-ui);
793
+ color: var(--color-text, #1a1a1a);
794
+ }
795
+ @scope (icon-set) {
796
+ .icon-set__search input {
797
+ inline-size: 100%;
798
+ padding: var(--size-s, 0.5rem);
799
+ border: 1px solid var(--color-border, #d4d4d8);
800
+ border-radius: var(--radius-s, 0.25rem);
801
+ font: inherit;
802
+ color: inherit;
803
+ background: var(--color-surface, #fff);
804
+ }
805
+ .icon-set__grid {
806
+ list-style: none;
807
+ margin: var(--size-m, 1rem) 0 0;
808
+ padding: 0;
809
+ grid-template-columns: repeat(auto-fill, minmax(6rem, 1fr));
810
+ gap: var(--size-2xs, 0.25rem);
811
+ }
812
+ .icon-set__grid [hidden] {
813
+ display: none;
814
+ }
815
+ .icon-set__grid button {
816
+ inline-size: 100%;
817
+ block-size: 100%;
818
+ display: grid;
819
+ align-content: start;
820
+ justify-items: center;
821
+ gap: var(--size-2xs, 0.25rem);
822
+ padding: var(--size-s, 0.75rem);
823
+ background: none;
824
+ border: 1px solid transparent;
825
+ border-radius: var(--radius-s, 0.25rem);
826
+ cursor: pointer;
827
+ font-size: var(--font-size-xs, 0.75rem);
828
+ color: inherit;
829
+ }
830
+ .icon-set__grid button > span:last-child {
831
+ min-block-size: 2lh;
832
+ text-align: center;
833
+ overflow-wrap: anywhere;
834
+ }
835
+ .icon-set__grid button:hover {
836
+ border-color: var(--color-border, #d4d4d8);
837
+ background: var(--color-surface-2, #f4f4f5);
838
+ }
839
+ .icon-set__icon {
840
+ display: inline-flex;
841
+ align-items: center;
842
+ justify-content: center;
843
+ inline-size: 1.5rem;
844
+ block-size: 1.5rem;
845
+ }
846
+ .icon-set__grid [data-icon] {
847
+ font-size: 1.5rem;
848
+ }
849
+ }
850
+
851
+ /* src/web-components/icon-specimen/styles.css */
852
+ icon-specimen:not(:defined) {
853
+ display: block;
854
+ }
855
+ icon-specimen {
856
+ display: block;
857
+ font-family: var(--font-sans, system-ui);
858
+ color: var(--color-text, #1a1a1a);
859
+ }
860
+ @scope (icon-specimen) {
861
+ .icon-specimen {
862
+ inline-size: 100%;
863
+ border-collapse: collapse;
864
+ }
865
+ .icon-specimen th,
866
+ .icon-specimen td {
867
+ text-align: start;
868
+ padding: var(--size-s, 0.75rem);
869
+ border-block-end: 1px solid var(--color-border, #d4d4d8);
870
+ }
871
+ .icon-specimen thead th {
872
+ font-size: var(--font-size-xs, 0.75rem);
873
+ font-weight: 700;
874
+ text-transform: uppercase;
875
+ letter-spacing: 0.05em;
876
+ color: var(--color-text-muted, #71717a);
877
+ }
878
+ .icon-specimen td [data-icon] {
879
+ color: inherit;
880
+ vertical-align: middle;
881
+ }
882
+ }
883
+
884
+ /* src/patterns/do-dont.css */
885
+ [data-list=do-dont],
886
+ [data-list=pro-con] {
887
+ list-style: none;
888
+ padding-inline-start: 0;
889
+ display: grid;
890
+ grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
891
+ gap: var(--size-s, 0.5rem);
892
+ }
893
+ [data-list] > [data-do],
894
+ [data-list] > [data-pro] {
895
+ padding: var(--size-s, 0.5rem) var(--size-m, 1rem);
896
+ border-inline-start: 4px solid var(--color-success, oklch(55% 0.2 145));
897
+ background: var(--color-success-subtle, oklch(95% 0.03 145));
898
+ border-radius: var(--radius-s, 0.25rem);
899
+ }
900
+ [data-list] > [data-dont],
901
+ [data-list] > [data-con] {
902
+ padding: var(--size-s, 0.5rem) var(--size-m, 1rem);
903
+ border-inline-start: 4px solid var(--color-error, oklch(55% 0.22 25));
904
+ background: var(--color-error-subtle, oklch(95% 0.03 25));
905
+ border-radius: var(--radius-s, 0.25rem);
906
+ }
907
+ [data-list=do-dont] > [data-do]::before {
908
+ content: "Do";
909
+ display: block;
910
+ font-weight: 700;
911
+ font-size: var(--font-size-xs, 0.75rem);
912
+ color: var(--color-success, oklch(45% 0.2 145));
913
+ margin-block-end: var(--size-2xs, 0.25rem);
914
+ text-transform: uppercase;
915
+ letter-spacing: 0.05em;
916
+ }
917
+ [data-list=do-dont] > [data-dont]::before {
918
+ content: "Don\2019t";
919
+ display: block;
920
+ font-weight: 700;
921
+ font-size: var(--font-size-xs, 0.75rem);
922
+ color: var(--color-error, oklch(45% 0.22 25));
923
+ margin-block-end: var(--size-2xs, 0.25rem);
924
+ text-transform: uppercase;
925
+ letter-spacing: 0.05em;
926
+ }
927
+ [data-list=pro-con] > [data-pro]::before {
928
+ content: "Pro";
929
+ display: block;
930
+ font-weight: 700;
931
+ font-size: var(--font-size-xs, 0.75rem);
932
+ color: var(--color-success, oklch(45% 0.2 145));
933
+ margin-block-end: var(--size-2xs, 0.25rem);
934
+ text-transform: uppercase;
935
+ letter-spacing: 0.05em;
936
+ }
937
+ [data-list=pro-con] > [data-con]::before {
938
+ content: "Con";
939
+ display: block;
940
+ font-weight: 700;
941
+ font-size: var(--font-size-xs, 0.75rem);
942
+ color: var(--color-error, oklch(45% 0.22 25));
943
+ margin-block-end: var(--size-2xs, 0.25rem);
944
+ text-transform: uppercase;
945
+ letter-spacing: 0.05em;
946
+ }
947
+
948
+ /* src/patterns/token-table.css */
949
+ .ds-token-table {
950
+ width: 100%;
951
+ border-collapse: collapse;
952
+ font-size: var(--font-size-s, 0.875rem);
953
+ }
954
+ .ds-token-table thead {
955
+ border-block-end: 2px solid var(--color-border, #ddd);
956
+ }
957
+ .ds-token-table th {
958
+ text-align: start;
959
+ padding: var(--size-xs, 0.25rem) var(--size-s, 0.5rem);
960
+ font-size: var(--font-size-xs, 0.75rem);
961
+ font-weight: 700;
962
+ text-transform: uppercase;
963
+ letter-spacing: 0.05em;
964
+ color: var(--color-text-muted, #666);
965
+ }
966
+ .ds-token-table td {
967
+ padding: var(--size-xs, 0.25rem) var(--size-s, 0.5rem);
968
+ border-block-end: 1px solid var(--color-border, #eee);
969
+ vertical-align: middle;
970
+ }
971
+ .ds-token-table code {
972
+ font-family: var(--font-mono, monospace);
973
+ font-size: var(--font-size-xs, 0.75rem);
974
+ }
975
+ .ds-token-table .ds-swatch {
976
+ display: inline-block;
977
+ width: 2.5rem;
978
+ height: 1.5rem;
979
+ border-radius: var(--radius-s, 0.25rem);
980
+ border: 1px solid var(--color-border, #ddd);
981
+ vertical-align: middle;
982
+ }
983
+ .ds-token-table token-swatch {
984
+ display: inline-flex;
985
+ }
986
+ .ds-token-table token-swatch > [data-preview] {
987
+ width: 2.5rem;
988
+ height: 1.5rem;
989
+ border-radius: var(--radius-s, 0.25rem);
990
+ border: 1px solid var(--color-border, #ddd);
991
+ }
992
+
993
+ /* src/index.css */