@24vlh/vds 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 (65) hide show
  1. package/LICENSE.txt +201 -0
  2. package/README.md +147 -0
  3. package/dist/components/accordion.css +170 -0
  4. package/dist/components/accordion.min.css +1 -0
  5. package/dist/components/authoring.css +332 -0
  6. package/dist/components/authoring.min.css +1 -0
  7. package/dist/components/buttons.css +683 -0
  8. package/dist/components/buttons.min.css +1 -0
  9. package/dist/components/charts.css +502 -0
  10. package/dist/components/charts.min.css +1 -0
  11. package/dist/components/command.css +521 -0
  12. package/dist/components/command.min.css +1 -0
  13. package/dist/components/content-blocks.css +944 -0
  14. package/dist/components/content-blocks.min.css +1 -0
  15. package/dist/components/doc-block.css +782 -0
  16. package/dist/components/doc-block.min.css +1 -0
  17. package/dist/components/feedback.css +657 -0
  18. package/dist/components/feedback.min.css +1 -0
  19. package/dist/components/flows.css +1101 -0
  20. package/dist/components/flows.min.css +1 -0
  21. package/dist/components/forms-advanced.css +462 -0
  22. package/dist/components/forms-advanced.min.css +1 -0
  23. package/dist/components/forms.css +1831 -0
  24. package/dist/components/forms.min.css +1 -0
  25. package/dist/components/header-footer.css +348 -0
  26. package/dist/components/header-footer.min.css +1 -0
  27. package/dist/components/hero.css +498 -0
  28. package/dist/components/hero.min.css +1 -0
  29. package/dist/components/icons.css +937 -0
  30. package/dist/components/icons.min.css +1 -0
  31. package/dist/components/navigation.css +900 -0
  32. package/dist/components/navigation.min.css +1 -0
  33. package/dist/components/overlays.css +498 -0
  34. package/dist/components/overlays.min.css +1 -0
  35. package/dist/components/sections.css +450 -0
  36. package/dist/components/sections.min.css +1 -0
  37. package/dist/components/skeleton.css +385 -0
  38. package/dist/components/skeleton.min.css +1 -0
  39. package/dist/components/tables.css +591 -0
  40. package/dist/components/tables.min.css +1 -0
  41. package/dist/components/tabs.css +307 -0
  42. package/dist/components/tabs.min.css +1 -0
  43. package/dist/components/toasts.css +421 -0
  44. package/dist/components/toasts.min.css +1 -0
  45. package/dist/components/tooltips-popovers.css +447 -0
  46. package/dist/components/tooltips-popovers.min.css +1 -0
  47. package/dist/components/typography.css +250 -0
  48. package/dist/components/typography.min.css +1 -0
  49. package/dist/components/utilities.css +3434 -0
  50. package/dist/components/utilities.min.css +1 -0
  51. package/dist/core.css +866 -0
  52. package/dist/core.min.css +1 -0
  53. package/dist/identity.css +266 -0
  54. package/dist/identity.min.css +1 -0
  55. package/dist/themes/carbon.css +658 -0
  56. package/dist/themes/carbon.min.css +1 -0
  57. package/dist/themes/graphite.css +658 -0
  58. package/dist/themes/graphite.min.css +1 -0
  59. package/dist/themes/navy.css +657 -0
  60. package/dist/themes/navy.min.css +1 -0
  61. package/dist/themes/slate.css +659 -0
  62. package/dist/themes/slate.min.css +1 -0
  63. package/dist/vds.css +20313 -0
  64. package/dist/vds.min.css +1 -0
  65. package/package.json +64 -0
@@ -0,0 +1,447 @@
1
+ /************************************************************
2
+ * VLAH DESIGN SYSTEM (VDS) - Tooltips & Popovers
3
+ *
4
+ * Responsibilities:
5
+ * - Provide tooltip (non-interactive) and popover (interactive) micro-surfaces
6
+ * - Implement arrow rendering, semantic variants, and density modes (A / default / C)
7
+ * - Define positional system (top, bottom, left, right + corner variants)
8
+ * - Support visible/open states via modifiers and data-state attributes
9
+ * - Ensure accessible behaviour: pointer safety, focus-visible, and reduced-motion
10
+ *
11
+ * System Notes:
12
+ * - Pure CSS; visibility controlled externally (no JS assumptions)
13
+ * - Fully token-driven: surfaces, borders, radii, shadows, z-index, transitions
14
+ * - Tooltip/popover arrows inherit background and border to keep seams clean
15
+ * - Designed to work with any inline trigger or anchor and with overlays/forms
16
+ ************************************************************/
17
+
18
+ /* ---------------------------------------------------------
19
+ 1. TOOLTIP TRIGGERS
20
+ Attach this class to ensure proper positioning context.
21
+ --------------------------------------------------------- */
22
+
23
+ .tooltip-trigger {
24
+ position: relative;
25
+ display: inline-flex;
26
+ align-items: center;
27
+ }
28
+
29
+ /* ---------------------------------------------------------
30
+ 2. BASE TOOLTIP
31
+ --------------------------------------------------------- */
32
+
33
+ .tooltip {
34
+ position: absolute;
35
+ z-index: var(--z-tooltip);
36
+
37
+ max-width: 24rem;
38
+ padding: var(--space-2) var(--space-3);
39
+
40
+ background-color: var(--color-surface);
41
+ color: var(--color-text);
42
+ border-radius: var(--radius-sm);
43
+ border: 1px solid var(--color-border-subtle);
44
+ box-shadow: var(--shadow-2);
45
+
46
+ font-size: var(--text-xs);
47
+ line-height: 1.4;
48
+ white-space: normal;
49
+
50
+ opacity: 0;
51
+ transform: translateY(0.25rem);
52
+ pointer-events: none;
53
+
54
+ transition: opacity var(--transition-fast) var(--ease-out), transform var(--transition-fast) var(--ease-out);
55
+ }
56
+
57
+ .tooltip--visible,
58
+ .tooltip[data-state="open"] {
59
+ opacity: 1;
60
+ transform: translateY(0);
61
+ pointer-events: auto;
62
+ }
63
+
64
+ /* ---------------------------------------------------------
65
+ 3. TOOLTIP POSITIONS
66
+ --------------------------------------------------------- */
67
+
68
+ .tooltip--top {
69
+ bottom: 100%;
70
+ left: 50%;
71
+ transform: translate(-50%, -0.25rem);
72
+ }
73
+
74
+ .tooltip--top.tooltip--visible,
75
+ .tooltip--top[data-state="open"] {
76
+ transform: translate(-50%, 0);
77
+ }
78
+
79
+ .tooltip--bottom {
80
+ top: 100%;
81
+ left: 50%;
82
+ transform: translate(-50%, 0.25rem);
83
+ }
84
+
85
+ .tooltip--bottom.tooltip--visible,
86
+ .tooltip--bottom[data-state="open"] {
87
+ transform: translate(-50%, 0);
88
+ }
89
+
90
+ .tooltip--left {
91
+ right: 100%;
92
+ top: 50%;
93
+ transform: translate(-0.25rem, -50%);
94
+ }
95
+
96
+ .tooltip--left.tooltip--visible,
97
+ .tooltip--left[data-state="open"] {
98
+ transform: translate(0, -50%);
99
+ }
100
+
101
+ .tooltip--right {
102
+ left: 100%;
103
+ top: 50%;
104
+ transform: translate(0.25rem, -50%);
105
+ }
106
+
107
+ .tooltip--right.tooltip--visible,
108
+ .tooltip--right[data-state="open"] {
109
+ transform: translate(0, -50%);
110
+ }
111
+
112
+ /* ---------------------------------------------------------
113
+ 4. TOOLTIP ARROW
114
+ --------------------------------------------------------- */
115
+
116
+ .tooltip__arrow {
117
+ position: absolute;
118
+ width: var(--space-3);
119
+ height: var(--space-3);
120
+
121
+ background-color: inherit;
122
+ border: inherit;
123
+ border-left: none;
124
+ border-top: none;
125
+
126
+ transform: rotate(45deg);
127
+ }
128
+
129
+ .tooltip--top .tooltip__arrow {
130
+ top: 100%;
131
+ left: 50%;
132
+ transform: translate(-50%, -50%) rotate(45deg);
133
+ }
134
+
135
+ .tooltip--bottom .tooltip__arrow {
136
+ bottom: 100%;
137
+ left: 50%;
138
+ transform: translate(-50%, 50%) rotate(45deg);
139
+ }
140
+
141
+ .tooltip--left .tooltip__arrow {
142
+ left: 100%;
143
+ top: 50%;
144
+ transform: translate(50%, -50%) rotate(45deg);
145
+ }
146
+
147
+ .tooltip--right .tooltip__arrow {
148
+ right: 100%;
149
+ top: 50%;
150
+ transform: translate(-50%, -50%) rotate(45deg);
151
+ }
152
+
153
+ /* ---------------------------------------------------------
154
+ 5. TOOLTIP DENSITY
155
+ --------------------------------------------------------- */
156
+
157
+ .tooltip--a {
158
+ padding: var(--space-3) var(--space-4);
159
+ font-size: var(--text-sm);
160
+ }
161
+
162
+ .tooltip--c {
163
+ padding: var(--space-1) var(--space-2);
164
+ font-size: var(--text-xs);
165
+ }
166
+
167
+ /* ---------------------------------------------------------
168
+ 6. TOOLTIP SEMANTIC VARIANTS
169
+ --------------------------------------------------------- */
170
+
171
+ .tooltip--info {
172
+ background-color: var(--semantic-info-bg);
173
+ color: var(--semantic-info-text);
174
+ border-color: var(--semantic-info-border);
175
+ }
176
+
177
+ .tooltip--success {
178
+ background-color: var(--semantic-success-bg);
179
+ color: var(--semantic-success-text);
180
+ border-color: var(--semantic-success-border);
181
+ }
182
+
183
+ .tooltip--warning {
184
+ background-color: var(--semantic-warning-bg);
185
+ color: var(--semantic-warning-text);
186
+ border-color: var(--semantic-warning-border);
187
+ }
188
+
189
+ .tooltip--danger {
190
+ background-color: var(--semantic-danger-bg);
191
+ color: var(--semantic-danger-text);
192
+ border-color: var(--semantic-danger-border);
193
+ }
194
+
195
+ /* ---------------------------------------------------------
196
+ 7. POPOVER ANCHOR
197
+ --------------------------------------------------------- */
198
+
199
+ .popover-anchor {
200
+ position: relative;
201
+ display: inline-block;
202
+ }
203
+
204
+ /* ---------------------------------------------------------
205
+ 8. BASE POPOVER
206
+ --------------------------------------------------------- */
207
+
208
+ .popover {
209
+ position: absolute;
210
+ z-index: var(--z-tooltip);
211
+
212
+ min-width: 12rem;
213
+ max-width: 28rem;
214
+
215
+ background-color: var(--color-surface);
216
+ color: var(--color-text);
217
+ border-radius: var(--radius-md);
218
+ border: 1px solid var(--color-border-subtle);
219
+ box-shadow: var(--shadow-3);
220
+
221
+ display: flex;
222
+ flex-direction: column;
223
+
224
+ opacity: 0;
225
+ transform: translateY(0.25rem);
226
+ pointer-events: none;
227
+
228
+ transition: opacity var(--transition-fast) var(--ease-out), transform var(--transition-fast) var(--ease-out);
229
+ }
230
+
231
+ .popover--open,
232
+ .popover[data-state="open"] {
233
+ opacity: 1;
234
+ transform: translateY(0);
235
+ pointer-events: auto;
236
+ }
237
+
238
+ /* ---------------------------------------------------------
239
+ 9. POPOVER POSITIONS
240
+ --------------------------------------------------------- */
241
+
242
+ .popover--top {
243
+ bottom: 100%;
244
+ left: 50%;
245
+ transform: translate(-50%, -0.25rem);
246
+ }
247
+
248
+ .popover--top.popover--open,
249
+ .popover--top[data-state="open"] {
250
+ transform: translate(-50%, 0);
251
+ }
252
+
253
+ .popover--bottom {
254
+ top: 100%;
255
+ left: 50%;
256
+ transform: translate(-50%, 0.25rem);
257
+ }
258
+
259
+ .popover--bottom.popover--open,
260
+ .popover--bottom[data-state="open"] {
261
+ transform: translate(-50%, 0);
262
+ }
263
+
264
+ .popover--left {
265
+ right: 100%;
266
+ top: 50%;
267
+ transform: translate(-0.25rem, -50%);
268
+ }
269
+
270
+ .popover--left.popover--open,
271
+ .popover--left[data-state="open"] {
272
+ transform: translate(0, -50%);
273
+ }
274
+
275
+ .popover--right {
276
+ left: 100%;
277
+ top: 50%;
278
+ transform: translate(0.25rem, -50%);
279
+ }
280
+
281
+ .popover--right.popover--open,
282
+ .popover--right[data-state="open"] {
283
+ transform: translate(0, -50%);
284
+ }
285
+
286
+ .popover--bottom-right {
287
+ top: 100%;
288
+ right: 0;
289
+ transform: translateY(0.25rem);
290
+ }
291
+
292
+ .popover--bottom-right.popover--open,
293
+ .popover--bottom-right[data-state="open"] {
294
+ transform: translateY(0);
295
+ }
296
+
297
+ .popover--bottom-left {
298
+ top: 100%;
299
+ left: 0;
300
+ transform: translateY(0.25rem);
301
+ }
302
+
303
+ .popover--bottom-left.popover--open,
304
+ .popover--bottom-left[data-state="open"] {
305
+ transform: translateY(0);
306
+ }
307
+
308
+ .popover--top-right {
309
+ bottom: 100%;
310
+ right: 0;
311
+ transform: translateY(-0.25rem);
312
+ }
313
+
314
+ .popover--top-right.popover--open,
315
+ .popover--top-right[data-state="open"] {
316
+ transform: translateY(0);
317
+ }
318
+
319
+ .popover--top-left {
320
+ bottom: 100%;
321
+ left: 0;
322
+ transform: translateY(-0.25rem);
323
+ }
324
+
325
+ .popover--top-left.popover--open,
326
+ .popover--top-left[data-state="open"] {
327
+ transform: translateY(0);
328
+ }
329
+
330
+ /* ---------------------------------------------------------
331
+ 10. POPOVER ARROW
332
+ --------------------------------------------------------- */
333
+
334
+ .popover__arrow {
335
+ position: absolute;
336
+ width: var(--space-3);
337
+ height: var(--space-3);
338
+
339
+ background-color: inherit;
340
+ border: inherit;
341
+ border-left: none;
342
+ border-top: none;
343
+
344
+ transform: rotate(45deg);
345
+ }
346
+
347
+ .popover--bottom .popover__arrow,
348
+ .popover--bottom-right .popover__arrow,
349
+ .popover--bottom-left .popover__arrow {
350
+ bottom: 100%;
351
+ left: var(--space-6);
352
+ transform: translateY(50%) rotate(45deg);
353
+ }
354
+
355
+ .popover--top .popover__arrow,
356
+ .popover--top-right .popover__arrow,
357
+ .popover--top-left .popover__arrow {
358
+ top: 100%;
359
+ left: var(--space-6);
360
+ transform: translateY(-50%) rotate(45deg);
361
+ }
362
+
363
+ .popover--left .popover__arrow {
364
+ left: 100%;
365
+ top: 50%;
366
+ transform: translate(50%, -50%) rotate(45deg);
367
+ }
368
+
369
+ .popover--right .popover__arrow {
370
+ right: 100%;
371
+ top: 50%;
372
+ transform: translate(-50%, -50%) rotate(45deg);
373
+ }
374
+
375
+ /* ---------------------------------------------------------
376
+ 11. POPOVER LAYOUT
377
+ --------------------------------------------------------- */
378
+
379
+ .popover__header,
380
+ .popover__footer {
381
+ padding: var(--space-3) var(--space-4);
382
+ border-bottom: 1px solid var(--color-border-subtle);
383
+ }
384
+
385
+ .popover__footer {
386
+ border-top: 1px solid var(--color-border-subtle);
387
+ border-bottom: none;
388
+ display: flex;
389
+ justify-content: flex-end;
390
+ gap: var(--space-2);
391
+ }
392
+
393
+ .popover__body {
394
+ padding: var(--space-3) var(--space-4);
395
+ }
396
+
397
+ .popover__title {
398
+ font-size: var(--text-sm);
399
+ font-weight: 600;
400
+ }
401
+
402
+ /* ---------------------------------------------------------
403
+ 12. POPOVER DENSITY
404
+ --------------------------------------------------------- */
405
+
406
+ .popover--a .popover__header,
407
+ .popover--a .popover__footer,
408
+ .popover--a .popover__body {
409
+ padding: var(--space-4) var(--space-5);
410
+ font-size: var(--text-sm);
411
+ }
412
+
413
+ .popover--c .popover__header,
414
+ .popover--c .popover__footer,
415
+ .popover--c .popover__body {
416
+ padding: var(--space-2) var(--space-3);
417
+ font-size: var(--text-xs);
418
+ }
419
+
420
+ /* ---------------------------------------------------------
421
+ 13. POPOVER SEMANTICS
422
+ (Aligns with overlay-inline semantics)
423
+ --------------------------------------------------------- */
424
+
425
+ .popover--info {
426
+ background-color: var(--semantic-info-bg);
427
+ color: var(--semantic-info-text);
428
+ border-color: var(--semantic-info-border);
429
+ }
430
+
431
+ .popover--success {
432
+ background-color: var(--semantic-success-bg);
433
+ color: var(--semantic-success-text);
434
+ border-color: var(--semantic-success-border);
435
+ }
436
+
437
+ .popover--warning {
438
+ background-color: var(--semantic-warning-bg);
439
+ color: var(--semantic-warning-text);
440
+ border-color: var(--semantic-warning-border);
441
+ }
442
+
443
+ .popover--danger {
444
+ background-color: var(--semantic-danger-bg);
445
+ color: var(--semantic-danger-text);
446
+ border-color: var(--semantic-danger-border);
447
+ }
@@ -0,0 +1 @@
1
+ .tooltip-trigger{align-items:center;display:inline-flex;position:relative}.tooltip{background-color:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-sm);box-shadow:var(--shadow-2);color:var(--color-text);font-size:var(--text-xs);line-height:1.4;max-width:24rem;opacity:0;padding:var(--space-2) var(--space-3);pointer-events:none;position:absolute;transform:translateY(.25rem);transition:opacity var(--transition-fast) var(--ease-out),transform var(--transition-fast) var(--ease-out);white-space:normal;z-index:var(--z-tooltip)}.tooltip--visible,.tooltip[data-state=open]{opacity:1;pointer-events:auto;transform:translateY(0)}.tooltip--top{bottom:100%;left:50%;transform:translate(-50%,-.25rem)}.tooltip--top.tooltip--visible,.tooltip--top[data-state=open]{transform:translate(-50%)}.tooltip--bottom{left:50%;top:100%;transform:translate(-50%,.25rem)}.tooltip--bottom.tooltip--visible,.tooltip--bottom[data-state=open]{transform:translate(-50%)}.tooltip--left{right:100%;top:50%;transform:translate(-.25rem,-50%)}.tooltip--left.tooltip--visible,.tooltip--left[data-state=open]{transform:translateY(-50%)}.tooltip--right{left:100%;top:50%;transform:translate(.25rem,-50%)}.tooltip--right.tooltip--visible,.tooltip--right[data-state=open]{transform:translateY(-50%)}.tooltip__arrow{background-color:inherit;border:inherit;border-left:none;border-top:none;height:var(--space-3);position:absolute;transform:rotate(45deg);width:var(--space-3)}.tooltip--top .tooltip__arrow{left:50%;top:100%;transform:translate(-50%,-50%) rotate(45deg)}.tooltip--bottom .tooltip__arrow{bottom:100%;left:50%;transform:translate(-50%,50%) rotate(45deg)}.tooltip--left .tooltip__arrow{left:100%;top:50%;transform:translate(50%,-50%) rotate(45deg)}.tooltip--right .tooltip__arrow{right:100%;top:50%;transform:translate(-50%,-50%) rotate(45deg)}.tooltip--a{font-size:var(--text-sm);padding:var(--space-3) var(--space-4)}.tooltip--c{font-size:var(--text-xs);padding:var(--space-1) var(--space-2)}.tooltip--info{background-color:var(--semantic-info-bg);border-color:var(--semantic-info-border);color:var(--semantic-info-text)}.tooltip--success{background-color:var(--semantic-success-bg);border-color:var(--semantic-success-border);color:var(--semantic-success-text)}.tooltip--warning{background-color:var(--semantic-warning-bg);border-color:var(--semantic-warning-border);color:var(--semantic-warning-text)}.tooltip--danger{background-color:var(--semantic-danger-bg);border-color:var(--semantic-danger-border);color:var(--semantic-danger-text)}.popover-anchor{display:inline-block;position:relative}.popover{background-color:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-3);color:var(--color-text);display:flex;flex-direction:column;max-width:28rem;min-width:12rem;opacity:0;pointer-events:none;position:absolute;transform:translateY(.25rem);transition:opacity var(--transition-fast) var(--ease-out),transform var(--transition-fast) var(--ease-out);z-index:var(--z-tooltip)}.popover--open,.popover[data-state=open]{opacity:1;pointer-events:auto;transform:translateY(0)}.popover--top{bottom:100%;left:50%;transform:translate(-50%,-.25rem)}.popover--top.popover--open,.popover--top[data-state=open]{transform:translate(-50%)}.popover--bottom{left:50%;top:100%;transform:translate(-50%,.25rem)}.popover--bottom.popover--open,.popover--bottom[data-state=open]{transform:translate(-50%)}.popover--left{right:100%;top:50%;transform:translate(-.25rem,-50%)}.popover--left.popover--open,.popover--left[data-state=open]{transform:translateY(-50%)}.popover--right{left:100%;top:50%;transform:translate(.25rem,-50%)}.popover--right.popover--open,.popover--right[data-state=open]{transform:translateY(-50%)}.popover--bottom-right{right:0;top:100%;transform:translateY(.25rem)}.popover--bottom-right.popover--open,.popover--bottom-right[data-state=open]{transform:translateY(0)}.popover--bottom-left{left:0;top:100%;transform:translateY(.25rem)}.popover--bottom-left.popover--open,.popover--bottom-left[data-state=open]{transform:translateY(0)}.popover--top-right{bottom:100%;right:0;transform:translateY(-.25rem)}.popover--top-right.popover--open,.popover--top-right[data-state=open]{transform:translateY(0)}.popover--top-left{bottom:100%;left:0;transform:translateY(-.25rem)}.popover--top-left.popover--open,.popover--top-left[data-state=open]{transform:translateY(0)}.popover__arrow{background-color:inherit;border:inherit;border-left:none;border-top:none;height:var(--space-3);position:absolute;transform:rotate(45deg);width:var(--space-3)}.popover--bottom .popover__arrow,.popover--bottom-left .popover__arrow,.popover--bottom-right .popover__arrow{bottom:100%;left:var(--space-6);transform:translateY(50%) rotate(45deg)}.popover--top .popover__arrow,.popover--top-left .popover__arrow,.popover--top-right .popover__arrow{left:var(--space-6);top:100%;transform:translateY(-50%) rotate(45deg)}.popover--left .popover__arrow{left:100%;top:50%;transform:translate(50%,-50%) rotate(45deg)}.popover--right .popover__arrow{right:100%;top:50%;transform:translate(-50%,-50%) rotate(45deg)}.popover__footer,.popover__header{border-bottom:1px solid var(--color-border-subtle);padding:var(--space-3) var(--space-4)}.popover__footer{border-bottom:none;border-top:1px solid var(--color-border-subtle);display:flex;gap:var(--space-2);justify-content:flex-end}.popover__body{padding:var(--space-3) var(--space-4)}.popover__title{font-size:var(--text-sm);font-weight:600}.popover--a .popover__body,.popover--a .popover__footer,.popover--a .popover__header{font-size:var(--text-sm);padding:var(--space-4) var(--space-5)}.popover--c .popover__body,.popover--c .popover__footer,.popover--c .popover__header{font-size:var(--text-xs);padding:var(--space-2) var(--space-3)}.popover--info{background-color:var(--semantic-info-bg);border-color:var(--semantic-info-border);color:var(--semantic-info-text)}.popover--success{background-color:var(--semantic-success-bg);border-color:var(--semantic-success-border);color:var(--semantic-success-text)}.popover--warning{background-color:var(--semantic-warning-bg);border-color:var(--semantic-warning-border);color:var(--semantic-warning-text)}.popover--danger{background-color:var(--semantic-danger-bg);border-color:var(--semantic-danger-border);color:var(--semantic-danger-text)}
@@ -0,0 +1,250 @@
1
+ /************************************************************
2
+ * VLAH DESIGN SYSTEM (VDS) - Typography System
3
+ *
4
+ * Responsibilities:
5
+ * - Establish the full text scale, font stacks, weights, and line-heights
6
+ * - Style headings, paragraphs, blockquotes, pullquotes, lists, code, pre,
7
+ * tables, figures, captions, badges, and footnotes for rich prose
8
+ * - Provide consistent spacing rhythm and vertical flow for long-form
9
+ * documents and documentation environments
10
+ * - Ensure inline elements (code, links, emphasis, badges, refs) integrate
11
+ * cleanly inside the prose engine
12
+ *
13
+ * System Notes:
14
+ * - 100% token-driven: text sizes, weights, radii, colors, spacing
15
+ * - Safe to embed within doc-block, authoring, and content-block systems
16
+ * - Code theming inherited from code tokens; tables align with tables.css
17
+ * - Designed for predictable behaviour across themes and reduced-motion
18
+ ************************************************************/
19
+
20
+ [data-vds-typography],
21
+ .vds-typography {
22
+ --typography-code-block-border: var(--color-border-subtle);
23
+ --prose-table-cell-padding: var(--space-2);
24
+
25
+ --blockquote-border-width: 3px;
26
+ --pullquote-border-width: 3px;
27
+ }
28
+
29
+ .typography {
30
+ color: var(--color-text);
31
+ font-size: var(--text-base);
32
+ line-height: var(--line-height-normal);
33
+ }
34
+
35
+ .typography h1,
36
+ .typography h2,
37
+ .typography h3,
38
+ .typography h4,
39
+ .typography h5,
40
+ .typography h6 {
41
+ font-family: var(--font-family-sans), sans-serif;
42
+ font-weight: 600;
43
+ color: var(--color-text);
44
+ margin-top: var(--space-8);
45
+ margin-bottom: var(--space-4);
46
+ line-height: var(--line-height-tight);
47
+ }
48
+
49
+ .typography h1:first-child,
50
+ .typography h2:first-child,
51
+ .typography h3:first-child,
52
+ .typography h4:first-child,
53
+ .typography h5:first-child,
54
+ .typography h6:first-child {
55
+ margin-top: 0;
56
+ }
57
+
58
+ .typography h1 {
59
+ font-size: var(--text-4xl);
60
+ }
61
+
62
+ .typography h2 {
63
+ font-size: var(--text-3xl);
64
+ }
65
+
66
+ .typography h3 {
67
+ font-size: var(--text-2xl);
68
+ }
69
+
70
+ .typography h4 {
71
+ font-size: var(--text-xl);
72
+ }
73
+
74
+ .typography h5 {
75
+ font-size: var(--text-lg);
76
+ }
77
+
78
+ .typography h6 {
79
+ font-size: var(--text-base);
80
+ }
81
+
82
+ .typography p {
83
+ margin-top: var(--space-3);
84
+ margin-bottom: var(--space-3);
85
+ }
86
+
87
+ .typography strong {
88
+ font-weight: 600;
89
+ }
90
+
91
+ .typography em {
92
+ font-style: italic;
93
+ }
94
+
95
+ .typography code {
96
+ font-family: var(--font-family-mono), monospace;
97
+ font-size: 0.875em;
98
+ padding-left: var(--space-1);
99
+ padding-right: var(--space-1);
100
+ padding-top: 0.1em;
101
+ padding-bottom: 0.1em;
102
+ border-radius: var(--radius-sm);
103
+ background: var(--code-inline-bg);
104
+ border: 1px solid var(--code-inline-border);
105
+ }
106
+
107
+ .table code {
108
+ padding: 0 !important;
109
+ border: none !important;
110
+ background: none !important;
111
+ font-size: inherit !important;
112
+ line-height: inherit !important;
113
+ }
114
+
115
+ .typography pre {
116
+ font-family: var(--font-family-mono), monospace;
117
+ font-size: var(--text-sm);
118
+ background: var(--code-block-bg);
119
+ border: 1px solid var(--typography-code-block-border);
120
+ padding: var(--space-4);
121
+ border-radius: var(--radius-md);
122
+ overflow-x: auto;
123
+ margin-top: var(--space-4);
124
+ margin-bottom: var(--space-4);
125
+ }
126
+
127
+ .typography pre code {
128
+ background: none !important;
129
+ border: none !important;
130
+ }
131
+
132
+ .typography pre code {
133
+ padding: 0;
134
+ border-radius: 0;
135
+ }
136
+
137
+ .typography ul,
138
+ .typography ol {
139
+ margin-top: var(--space-3);
140
+ margin-bottom: var(--space-3);
141
+ padding-left: var(--space-6);
142
+ }
143
+
144
+ .typography li {
145
+ margin-top: var(--space-1);
146
+ margin-bottom: var(--space-1);
147
+ }
148
+
149
+ .typography ul ul,
150
+ .typography ol ol,
151
+ .typography ul ol,
152
+ .typography ol ul {
153
+ margin-top: var(--space-1);
154
+ margin-bottom: var(--space-1);
155
+ }
156
+
157
+ .typography blockquote {
158
+ margin-top: var(--space-6);
159
+ margin-bottom: var(--space-6);
160
+ padding-left: var(--space-4);
161
+ border-left: var(--blockquote-border-width) solid var(--blockquote-text);
162
+ color: var(--color-text-muted);
163
+ font-style: italic;
164
+ }
165
+
166
+ .typography .pullquote {
167
+ margin-top: var(--space-8);
168
+ margin-bottom: var(--space-8);
169
+ padding: var(--space-4);
170
+ border-left: var(--pullquote-border-width) solid var(--blockquote-border);
171
+ font-size: var(--text-xl);
172
+ line-height: var(--line-height-tight);
173
+ }
174
+
175
+ .typography figure {
176
+ margin-top: var(--space-6);
177
+ margin-bottom: var(--space-6);
178
+ text-align: center;
179
+ }
180
+
181
+ .typography figcaption {
182
+ margin-top: var(--space-2);
183
+ font-size: var(--text-sm);
184
+ color: var(--color-text-muted);
185
+ }
186
+
187
+ .typography img {
188
+ max-width: 100%;
189
+ border-radius: var(--radius-md);
190
+ }
191
+
192
+ .typography table:not(.table) {
193
+ width: 100%;
194
+ border-collapse: collapse;
195
+ margin-top: var(--space-4);
196
+ margin-bottom: var(--space-4);
197
+ font-size: var(--text-sm);
198
+ }
199
+
200
+ .typography table:not(.table) th,
201
+ .typography table:not(.table) td {
202
+ border-bottom: 1px solid var(--color-border-subtle);
203
+ padding: var(--prose-table-cell-padding);
204
+ text-align: left;
205
+ }
206
+
207
+ .typography table:not(.table) th {
208
+ font-weight: 600;
209
+ background: var(--color-surface-subtle);
210
+ color: var(--color-text);
211
+ }
212
+
213
+ .typography table:not(.table) caption {
214
+ text-align: left;
215
+ font-size: var(--text-sm);
216
+ color: var(--color-text-muted);
217
+ margin-bottom: var(--space-2);
218
+ }
219
+
220
+ .typography .badge-inline {
221
+ display: inline-block;
222
+ padding: 0 var(--space-2);
223
+ font-size: var(--text-xs);
224
+ background: var(--color-bg-soft);
225
+ border-radius: var(--radius-sm);
226
+ color: var(--color-text-muted);
227
+ }
228
+
229
+ .typography .footnotes {
230
+ margin-top: var(--space-8);
231
+ padding-top: var(--space-4);
232
+ font-size: var(--footnote-font-size);
233
+ color: var(--footnote-color);
234
+ border-top: 1px solid var(--color-border-subtle);
235
+ }
236
+
237
+ .typography .footnotes ol {
238
+ padding-left: var(--space-6);
239
+ }
240
+
241
+ .typography .fn-ref {
242
+ font-size: 0.75em;
243
+ vertical-align: super;
244
+ }
245
+
246
+ .typography .fn-backref {
247
+ margin-left: var(--space-2);
248
+ font-size: var(--text-xs);
249
+ color: var(--color-text-muted);
250
+ }
@@ -0,0 +1 @@
1
+ .vds-typography,[data-vds-typography]{--typography-code-block-border:var(--color-border-subtle);--prose-table-cell-padding:var(--space-2);--blockquote-border-width:3px;--pullquote-border-width:3px}.typography{color:var(--color-text);font-size:var(--text-base);line-height:var(--line-height-normal)}.typography h1,.typography h2,.typography h3,.typography h4,.typography h5,.typography h6{color:var(--color-text);font-family:var(--font-family-sans),sans-serif;font-weight:600;line-height:var(--line-height-tight);margin-bottom:var(--space-4);margin-top:var(--space-8)}.typography h1:first-child,.typography h2:first-child,.typography h3:first-child,.typography h4:first-child,.typography h5:first-child,.typography h6:first-child{margin-top:0}.typography h1{font-size:var(--text-4xl)}.typography h2{font-size:var(--text-3xl)}.typography h3{font-size:var(--text-2xl)}.typography h4{font-size:var(--text-xl)}.typography h5{font-size:var(--text-lg)}.typography h6{font-size:var(--text-base)}.typography p{margin-bottom:var(--space-3);margin-top:var(--space-3)}.typography strong{font-weight:600}.typography em{font-style:italic}.typography code{background:var(--code-inline-bg);border:1px solid var(--code-inline-border);border-radius:var(--radius-sm);font-family:var(--font-family-mono),monospace;font-size:.875em;padding-bottom:.1em;padding-left:var(--space-1);padding-right:var(--space-1);padding-top:.1em}.table code{background:none!important;border:none!important;font-size:inherit!important;line-height:inherit!important;padding:0!important}.typography pre{background:var(--code-block-bg);border:1px solid var(--typography-code-block-border);border-radius:var(--radius-md);font-family:var(--font-family-mono),monospace;font-size:var(--text-sm);margin-bottom:var(--space-4);margin-top:var(--space-4);overflow-x:auto;padding:var(--space-4)}.typography pre code{background:none!important;border:none!important;border-radius:0;padding:0}.typography ol,.typography ul{margin-bottom:var(--space-3);margin-top:var(--space-3);padding-left:var(--space-6)}.typography li,.typography ol ol,.typography ol ul,.typography ul ol,.typography ul ul{margin-bottom:var(--space-1);margin-top:var(--space-1)}.typography blockquote{border-left:var(--blockquote-border-width) solid var(--blockquote-text);color:var(--color-text-muted);font-style:italic;margin-bottom:var(--space-6);margin-top:var(--space-6);padding-left:var(--space-4)}.typography .pullquote{border-left:var(--pullquote-border-width) solid var(--blockquote-border);font-size:var(--text-xl);line-height:var(--line-height-tight);margin-bottom:var(--space-8);margin-top:var(--space-8);padding:var(--space-4)}.typography figure{margin-bottom:var(--space-6);margin-top:var(--space-6);text-align:center}.typography figcaption{color:var(--color-text-muted);font-size:var(--text-sm);margin-top:var(--space-2)}.typography img{border-radius:var(--radius-md);max-width:100%}.typography table:not(.table){border-collapse:collapse;font-size:var(--text-sm);margin-bottom:var(--space-4);margin-top:var(--space-4);width:100%}.typography table:not(.table) td,.typography table:not(.table) th{border-bottom:1px solid var(--color-border-subtle);padding:var(--prose-table-cell-padding);text-align:left}.typography table:not(.table) th{background:var(--color-surface-subtle);color:var(--color-text);font-weight:600}.typography table:not(.table) caption{color:var(--color-text-muted);font-size:var(--text-sm);margin-bottom:var(--space-2);text-align:left}.typography .badge-inline{background:var(--color-bg-soft);border-radius:var(--radius-sm);color:var(--color-text-muted);display:inline-block;font-size:var(--text-xs);padding:0 var(--space-2)}.typography .footnotes{border-top:1px solid var(--color-border-subtle);color:var(--footnote-color);font-size:var(--footnote-font-size);margin-top:var(--space-8);padding-top:var(--space-4)}.typography .footnotes ol{padding-left:var(--space-6)}.typography .fn-ref{font-size:.75em;vertical-align:super}.typography .fn-backref{color:var(--color-text-muted);font-size:var(--text-xs);margin-left:var(--space-2)}