@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,1101 @@
1
+ /************************************************************
2
+ * VLAH DESIGN SYSTEM (VDS) - Flows & Timelines
3
+ *
4
+ * Responsibilities:
5
+ * - Provide multi-step flow architecture: horizontal/vertical steps,
6
+ * state transitions, process nodes, journeys, branching flows,
7
+ * form-flow scaffolding, and rich timelines
8
+ * - Implement progress bars (solid, striped, reversed, segmented)
9
+ * with CSS-only animation and semantic variants
10
+ * - Expose interaction patterns: clickable, disabled, upcoming,
11
+ * error/success/warning/info states, density modes, and icon variants
12
+ * - Deliver layout scaffolding for complex journeys and workflows,
13
+ * ensuring predictable spacing, sizing, and semantic signalling
14
+ *
15
+ * System Notes:
16
+ * - Fully token-driven: flow gaps, insets, radii, bullet sizes,
17
+ * timeline points, stripe sizes, and animation speeds
18
+ * - 100% CSS; reduced-motion fallbacks defined for animated stripes
19
+ * - Composable: integrates with cards, content blocks, utilities,
20
+ * and documentation previews without overrides
21
+ ************************************************************/
22
+
23
+ /* ---------------------------------------------------------
24
+ 1. FLOW TOKEN DEFINITIONS
25
+ --------------------------------------------------------- */
26
+
27
+ [data-vds-flow],
28
+ .vds-flow {
29
+ --flow-component-disabled-opacity: 0.48;
30
+
31
+ --flow-step-bullet-sm: var(--space-5);
32
+ --flow-step-bullet-md: var(--space-5_5);
33
+ --flow-step-bullet-lg: var(--space-6);
34
+
35
+ --flow-timeline-point-sm: var(--space-2);
36
+ --flow-timeline-point-md: var(--space-3);
37
+ --flow-timeline-point-xs: var(--space-1_5);
38
+
39
+ --flow-node-min-width: var(--space-40);
40
+ --flow-stage-min-width: var(--space-48);
41
+ --flow-grid-min-md: var(--flow-stage-min-width);
42
+
43
+ --flow-icon-size-sm: var(--space-3);
44
+ --flow-icon-size-md: var(--space-4);
45
+ --flow-icon-size-lg: var(--space-5);
46
+
47
+ --flow-gap-xs: var(--space-1);
48
+ --flow-gap-sm: var(--space-2);
49
+ --flow-gap-md: var(--space-3);
50
+ --flow-gap-lg: var(--space-4);
51
+ --flow-gap-xl: var(--space-8);
52
+
53
+ --flow-inset-xs: var(--space-2);
54
+ --flow-inset-sm: var(--space-3);
55
+ --flow-inset-md: var(--space-4);
56
+ --flow-inset-lg: var(--space-6);
57
+
58
+ --flow-progress-stripe-size: var(--space-3);
59
+ --flow-progress-stripe-speed: 1.2s;
60
+ }
61
+
62
+ /* ---------------------------------------------------------
63
+ 2. GLOBAL FLOW MODIFIERS
64
+ --------------------------------------------------------- */
65
+
66
+ .flow--compact .flow {
67
+ gap: var(--flow-gap-lg);
68
+ }
69
+
70
+ .flow--compact .flow__body {
71
+ gap: var(--flow-gap-md);
72
+ }
73
+
74
+ .flow--compact .steps {
75
+ gap: var(--flow-gap-sm);
76
+ }
77
+
78
+ .flow--compact .timeline {
79
+ gap: var(--flow-gap-sm);
80
+ }
81
+
82
+ .flow--compact .journey {
83
+ gap: var(--flow-gap-md);
84
+ }
85
+
86
+ .flow--compact .process-flow {
87
+ gap: var(--flow-gap-sm);
88
+ }
89
+
90
+ .flow--compact .state-flow {
91
+ gap: var(--flow-gap-xs);
92
+ }
93
+
94
+ .flow--compact .form-flow {
95
+ gap: var(--flow-gap-md);
96
+ }
97
+
98
+ .steps__item--upcoming {
99
+ color: var(--color-text-soft);
100
+ }
101
+
102
+ .journey__stage--upcoming,
103
+ .process-flow__node--upcoming,
104
+ .flow-branch__option--upcoming,
105
+ .state-flow__item--upcoming {
106
+ border-color: var(--color-border-subtle);
107
+ background-color: var(--color-surface-subtle);
108
+ color: var(--color-text-muted);
109
+ }
110
+
111
+ .steps__item:focus-visible,
112
+ .steps__item--clickable:focus-visible,
113
+ .journey__stage--clickable:focus-visible,
114
+ .process-flow__node--clickable:focus-visible,
115
+ .flow-branch__option--clickable:focus-visible {
116
+ outline: var(--focus-ring-width) solid var(--color-accent);
117
+ outline-offset: var(--focus-ring-offset);
118
+ }
119
+
120
+ .steps__item--disabled,
121
+ .steps__item[aria-disabled="true"] {
122
+ opacity: var(--flow-component-disabled-opacity);
123
+ cursor: not-allowed;
124
+ }
125
+
126
+ .journey__stage--disabled,
127
+ .journey__stage[aria-disabled="true"],
128
+ .process-flow__node--disabled,
129
+ .process-flow__node[aria-disabled="true"],
130
+ .flow-branch__option--disabled,
131
+ .flow-branch__option[aria-disabled="true"] {
132
+ opacity: var(--flow-component-disabled-opacity);
133
+ pointer-events: none;
134
+ }
135
+
136
+ /* ---------------------------------------------------------
137
+ 3. FLOW CONTAINER / WIZARD
138
+ --------------------------------------------------------- */
139
+
140
+ .flow {
141
+ display: flex;
142
+ flex-direction: column;
143
+ gap: var(--space-8);
144
+ }
145
+
146
+ .flow__header {
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: var(--space-2);
150
+ }
151
+
152
+ .flow__title {
153
+ font-size: var(--text-lg);
154
+ font-weight: 600;
155
+ }
156
+
157
+ .flow__subtitle {
158
+ font-size: var(--text-sm);
159
+ color: var(--color-text-muted);
160
+ }
161
+
162
+ .flow__body {
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: var(--space-6);
166
+ }
167
+
168
+ .flow__nav {
169
+ display: flex;
170
+ justify-content: flex-end;
171
+ gap: var(--space-4);
172
+ }
173
+
174
+ /* ---------------------------------------------------------
175
+ 4. STEP INDICATOR (HORIZONTAL)
176
+ --------------------------------------------------------- */
177
+
178
+ .steps {
179
+ display: flex;
180
+ align-items: center;
181
+ gap: var(--space-4);
182
+ }
183
+
184
+ .steps__item {
185
+ display: flex;
186
+ align-items: center;
187
+ gap: var(--flow-gap-sm);
188
+ font-size: var(--text-xs);
189
+ color: var(--color-text-muted);
190
+ }
191
+
192
+ .steps__item--clickable {
193
+ cursor: pointer;
194
+ }
195
+
196
+ .steps__item--clickable:hover .steps__label {
197
+ color: var(--color-text);
198
+ }
199
+
200
+ .steps__item--clickable:active {
201
+ transform: translateY(1px);
202
+ opacity: 0.95;
203
+ }
204
+
205
+ .steps__item--error {
206
+ color: var(--color-danger-strong);
207
+ }
208
+
209
+ .steps__item--error .steps__bullet {
210
+ background-color: var(--danger-soft-surface, var(--color-danger-soft));
211
+ border-color: var(--danger-soft-border, var(--color-danger));
212
+ color: var(--danger-soft-on, var(--color-on-danger));
213
+ }
214
+
215
+ .steps__item--warning {
216
+ color: var(--color-warning-strong);
217
+ }
218
+
219
+ .steps__item--warning .steps__bullet {
220
+ background-color: var(--warning-soft-surface, var(--color-warning-soft));
221
+ border-color: var(--warning-soft-border, var(--color-warning));
222
+ color: var(--warning-soft-on, var(--color-on-warning));
223
+ }
224
+
225
+ .steps__item[aria-current="step"],
226
+ .steps__item[aria-current="step"] .steps__label {
227
+ color: var(--color-text);
228
+ }
229
+
230
+ .steps__bullet {
231
+ width: var(--flow-step-bullet-md);
232
+ height: var(--flow-step-bullet-md);
233
+ border-radius: 999px;
234
+
235
+ display: flex;
236
+ align-items: center;
237
+ justify-content: center;
238
+
239
+ border: var(--border-width) solid var(--color-border-subtle);
240
+ background-color: var(--color-surface-subtle);
241
+ color: var(--color-text-muted);
242
+
243
+ font-size: var(--text-xxs);
244
+ flex-shrink: 0;
245
+ }
246
+
247
+ .steps__label {
248
+ white-space: nowrap;
249
+ }
250
+
251
+ .steps__line {
252
+ flex: 1;
253
+ height: var(--border-width);
254
+ background-color: var(--color-border-subtle);
255
+ }
256
+
257
+ .steps__item--active .steps__bullet {
258
+ background-color: var(--accent-soft-surface, var(--color-accent-soft));
259
+ border-color: var(--accent-soft-border, var(--color-accent));
260
+ color: var(--accent-soft-on, var(--color-on-accent));
261
+ }
262
+
263
+ .steps__item--complete .steps__bullet {
264
+ background-color: var(--success-soft-surface, var(--color-success-soft));
265
+ border-color: var(--success-soft-border, var(--color-success));
266
+ color: var(--success-soft-on, var(--color-on-success));
267
+ opacity: 0.7;
268
+ }
269
+
270
+ .steps__item--active,
271
+ .steps__item--complete {
272
+ color: var(--color-text);
273
+ }
274
+
275
+ .steps--a .steps__bullet {
276
+ width: var(--flow-step-bullet-lg);
277
+ height: var(--flow-step-bullet-lg);
278
+ }
279
+
280
+ .steps--c .steps__bullet {
281
+ width: var(--flow-step-bullet-sm);
282
+ height: var(--flow-step-bullet-sm);
283
+ font-size: var(--text-xxs);
284
+ }
285
+
286
+ /* ---------------------------------------------------------
287
+ 5. STEP INDICATOR (VERTICAL)
288
+ --------------------------------------------------------- */
289
+
290
+ .steps--vertical {
291
+ flex-direction: column;
292
+ align-items: flex-start;
293
+ }
294
+
295
+ .steps--vertical .steps__item {
296
+ align-items: flex-start;
297
+ }
298
+
299
+ .steps--vertical .steps__line {
300
+ width: var(--border-width);
301
+ min-height: var(--flow-gap-xl);
302
+ height: auto;
303
+ background-color: var(--color-border-subtle);
304
+ margin-left: calc(var(--flow-step-bullet-md) / 2 - var(--border-width) / 2);
305
+ flex: auto;
306
+ }
307
+
308
+ /* ---------------------------------------------------------
309
+ 6. FLOW PROGRESS BARS
310
+ --------------------------------------------------------- */
311
+
312
+ .flow-progress {
313
+ width: 100%;
314
+ height: var(--border-width-strong);
315
+ background-color: var(--color-muted-bg);
316
+ border-radius: var(--radius-sm);
317
+ overflow: hidden;
318
+ }
319
+
320
+ .flow-progress__bar {
321
+ height: 100%;
322
+ width: 0;
323
+ background-color: var(--color-muted-bg);
324
+ transition: width 0.2s ease;
325
+ }
326
+
327
+ .flow-progress--striped .flow-progress__bar {
328
+ background-image: repeating-linear-gradient(
329
+ 45deg,
330
+ var(--color-text-soft) 0,
331
+ var(--color-text-soft) var(--flow-progress-stripe-size),
332
+ var(--color-muted-bg) var(--flow-progress-stripe-size),
333
+ var(--color-muted-bg) calc(var(--flow-progress-stripe-size) * 2)
334
+ );
335
+ animation: flow-progress-stripes var(--flow-progress-stripe-speed) linear infinite;
336
+ }
337
+
338
+ .flow-progress--striped .flow-progress__bar--error {
339
+ background-image: repeating-linear-gradient(
340
+ 45deg,
341
+ var(--color-danger) 0,
342
+ var(--color-danger) var(--flow-progress-stripe-size),
343
+ var(--color-danger-soft) var(--flow-progress-stripe-size),
344
+ var(--color-danger-soft) calc(var(--flow-progress-stripe-size) * 2)
345
+ );
346
+ }
347
+
348
+ .flow-progress--striped .flow-progress__bar--warning {
349
+ background-image: repeating-linear-gradient(
350
+ 45deg,
351
+ var(--color-warning) 0,
352
+ var(--color-warning) var(--flow-progress-stripe-size),
353
+ var(--color-warning-soft) var(--flow-progress-stripe-size),
354
+ var(--color-warning-soft) calc(var(--flow-progress-stripe-size) * 2)
355
+ );
356
+ }
357
+
358
+ @keyframes flow-progress-stripes {
359
+ from {
360
+ background-position: 0 0;
361
+ }
362
+ to {
363
+ background-position: calc(var(--flow-progress-stripe-size) * -2.828) 0;
364
+ }
365
+ }
366
+
367
+ @media (prefers-reduced-motion: reduce) {
368
+ .flow-progress--striped .flow-progress__bar {
369
+ animation: none;
370
+ background-position: 0 0;
371
+ }
372
+ }
373
+
374
+ .flow-progress--striped-right .flow-progress__bar {
375
+ animation: flow-progress-stripes-right var(--flow-progress-stripe-speed) linear infinite;
376
+ }
377
+
378
+ @keyframes flow-progress-stripes-right {
379
+ from {
380
+ background-position: calc(var(--flow-progress-stripe-size) * -2.828) 0;
381
+ }
382
+ to {
383
+ background-position: 0 0;
384
+ }
385
+ }
386
+
387
+ @media (prefers-reduced-motion: reduce) {
388
+ .flow-progress--striped-right .flow-progress__bar {
389
+ animation: none;
390
+ background-position: 0 0;
391
+ }
392
+ }
393
+
394
+ .flow-progress--segments {
395
+ display: flex;
396
+ height: var(--border-width-strong);
397
+ overflow: hidden;
398
+ border-radius: var(--radius-sm);
399
+ }
400
+
401
+ .flow-progress__segment {
402
+ flex: 1;
403
+ background-color: var(--color-muted-bg);
404
+ }
405
+
406
+ .flow-progress__segment--complete {
407
+ background-color: var(--color-success);
408
+ }
409
+
410
+ .flow-progress__segment--error {
411
+ background-color: var(--color-danger);
412
+ }
413
+
414
+ .flow-progress__segment--warning {
415
+ background-color: var(--color-warning);
416
+ }
417
+
418
+ /* ---------------------------------------------------------
419
+ 7. MINIMAL TIMELINE (A)
420
+ --------------------------------------------------------- */
421
+
422
+ .timeline {
423
+ display: flex;
424
+ flex-direction: column;
425
+ gap: var(--flow-gap-md);
426
+ }
427
+
428
+ .timeline__item {
429
+ display: flex;
430
+ align-items: stretch;
431
+ gap: var(--flow-gap-sm);
432
+ }
433
+
434
+ .timeline__point-wrap {
435
+ display: flex;
436
+ flex-direction: column;
437
+ align-items: center;
438
+ gap: var(--flow-gap-xs);
439
+ }
440
+
441
+ .timeline__point {
442
+ width: var(--flow-timeline-point-sm);
443
+ height: var(--flow-timeline-point-sm);
444
+ border-radius: 999px;
445
+ border: var(--border-width-strong) solid var(--color-accent);
446
+ background-color: var(--color-surface);
447
+ flex-shrink: 0;
448
+ }
449
+
450
+ .timeline__point--upcoming {
451
+ border-color: var(--color-border-subtle);
452
+ }
453
+
454
+ .timeline__point--error {
455
+ border-color: var(--color-danger);
456
+ background-color: var(--color-danger-soft);
457
+ }
458
+
459
+ .timeline__point--warning {
460
+ border-color: var(--warning-soft-border, var(--color-warning));
461
+ background-color: var(--warning-soft-surface, var(--color-warning-soft));
462
+ }
463
+
464
+ .timeline__point--success {
465
+ border-color: var(--danger-soft-border, var(--color-danger));
466
+ background-color: var(--danger-soft-surface, var(--color-danger-soft));
467
+ }
468
+
469
+ .timeline__point--info {
470
+ border-color: var(--info-soft-border, var(--color-info));
471
+ background-color: var(--info-soft-surface, var(--color-info-soft));
472
+ }
473
+
474
+ .timeline__icon {
475
+ width: var(--flow-icon-size-md);
476
+ height: var(--flow-icon-size-md);
477
+ color: var(--color-icon-muted);
478
+ }
479
+
480
+ .timeline__icon--left {
481
+ margin-right: var(--flow-gap-xs);
482
+ }
483
+
484
+ .timeline__icon--right {
485
+ margin-left: var(--flow-gap-xs);
486
+ }
487
+
488
+ .timeline__icon--top {
489
+ margin-bottom: var(--flow-gap-xs);
490
+ }
491
+
492
+ .timeline__line {
493
+ flex: 1;
494
+ width: var(--border-width-strong);
495
+ background-color: var(--color-border-subtle);
496
+ }
497
+
498
+ .timeline__content {
499
+ flex: 1;
500
+ display: flex;
501
+ flex-direction: column;
502
+ gap: var(--flow-gap-xs);
503
+ }
504
+
505
+ .timeline__label {
506
+ font-size: var(--text-sm);
507
+ font-weight: 500;
508
+
509
+ display: flex;
510
+ align-items: center;
511
+ gap: var(--space-2);
512
+ }
513
+
514
+ .timeline__note {
515
+ font-size: var(--text-xs);
516
+ color: var(--color-text-muted);
517
+ }
518
+
519
+ .timeline--horizontal {
520
+ flex-direction: row;
521
+ align-items: flex-start;
522
+ }
523
+
524
+ .timeline--horizontal .timeline__item {
525
+ flex-direction: column;
526
+ align-items: center;
527
+ }
528
+
529
+ .timeline--horizontal .timeline__point-wrap {
530
+ flex-direction: row;
531
+ }
532
+
533
+ .timeline--horizontal .timeline__line {
534
+ width: var(--component-gap-xl);
535
+ height: var(--border-width-strong);
536
+ }
537
+
538
+ .timeline--compact .timeline__item {
539
+ gap: var(--flow-gap-xs);
540
+ }
541
+
542
+ .timeline--compact .timeline__note {
543
+ font-size: var(--text-xxs);
544
+ }
545
+
546
+ .timeline--compact .timeline__point {
547
+ width: var(--flow-timeline-point-xs);
548
+ height: var(--flow-timeline-point-xs);
549
+ }
550
+
551
+ .timeline--compact .timeline__icon {
552
+ width: var(--flow-icon-size-sm);
553
+ height: var(--flow-icon-size-sm);
554
+ }
555
+
556
+ /* ---------------------------------------------------------
557
+ 8. RICH TIMELINE (B)
558
+ --------------------------------------------------------- */
559
+
560
+ .timeline--rich {
561
+ display: flex;
562
+ flex-direction: column;
563
+ gap: var(--flow-gap-lg);
564
+ }
565
+
566
+ .timeline--rich .timeline__item {
567
+ display: flex;
568
+ align-items: stretch;
569
+ gap: var(--flow-gap-md);
570
+ border-radius: var(--radius-sm);
571
+ padding: var(--flow-inset-sm);
572
+ border: var(--border-width) solid var(--color-border-subtle);
573
+ background-color: var(--flow-zebra-bg-alt);
574
+ }
575
+
576
+ .timeline--rich .timeline__item:nth-child(even) {
577
+ background-color: var(--flow-zebra-bg);
578
+ }
579
+
580
+ .timeline--rich .timeline__item:nth-child(odd) {
581
+ background-color: var(--flow-zebra-bg-alt);
582
+ }
583
+
584
+ .timeline--rich .timeline__point-wrap {
585
+ display: flex;
586
+ flex-direction: column;
587
+ align-items: center;
588
+ gap: var(--flow-gap-xs);
589
+ flex-shrink: 0;
590
+ }
591
+
592
+ .timeline--rich .timeline__point {
593
+ width: var(--flow-timeline-point-md);
594
+ height: var(--flow-timeline-point-md);
595
+ }
596
+
597
+ .timeline--rich .timeline__line {
598
+ flex: 1;
599
+ width: var(--border-width-strong);
600
+ background-color: var(--color-border-subtle);
601
+ border-radius: var(--radius-sm);
602
+ }
603
+
604
+ .timeline--rich .timeline__item:last-child .timeline__line {
605
+ display: none;
606
+ }
607
+
608
+ .timeline-events {
609
+ display: flex;
610
+ flex-direction: column;
611
+ gap: var(--space-4);
612
+ }
613
+
614
+ .timeline-events .timeline__item {
615
+ align-items: flex-start;
616
+ gap: var(--space-4);
617
+ }
618
+
619
+ .timeline__timestamp {
620
+ font-size: var(--text-xxs);
621
+ color: var(--color-text-soft);
622
+ }
623
+
624
+ .timeline__meta {
625
+ font-size: var(--text-xs);
626
+ color: var(--color-text-muted);
627
+ }
628
+
629
+ .timeline__body {
630
+ font-size: var(--text-sm);
631
+ color: var(--color-text);
632
+ margin-top: var(--flow-gap-xs);
633
+ }
634
+
635
+ .timeline--audit .timeline__label {
636
+ font-size: var(--text-xs);
637
+ text-transform: uppercase;
638
+ letter-spacing: 0.05em;
639
+ }
640
+
641
+ .timeline--audit .timeline__body {
642
+ font-size: var(--text-xs);
643
+ }
644
+
645
+ /* ---------------------------------------------------------
646
+ 9. JOURNEY MAP (HIGH-LEVEL FLOWS)
647
+ --------------------------------------------------------- */
648
+
649
+ .journey {
650
+ display: flex;
651
+ flex-wrap: wrap;
652
+ gap: var(--flow-gap-lg);
653
+ }
654
+
655
+ .journey--compact {
656
+ gap: var(--flow-gap-md);
657
+ }
658
+
659
+ .journey__stage {
660
+ flex: 1 1 var(--flow-stage-min-width);
661
+ min-width: var(--flow-stage-min-width);
662
+
663
+ display: flex;
664
+ flex-direction: column;
665
+ gap: var(--flow-gap-sm);
666
+
667
+ padding: var(--flow-inset-md);
668
+ border-radius: var(--radius-md);
669
+ border: var(--border-width) solid var(--color-border-subtle);
670
+ background-color: var(--color-surface);
671
+ }
672
+
673
+ .journey__stage--clickable {
674
+ cursor: pointer;
675
+ }
676
+
677
+ .journey__stage--clickable:hover {
678
+ border-color: var(--color-accent);
679
+ }
680
+
681
+ .journey__stage--clickable:active {
682
+ transform: translateY(1px);
683
+ opacity: 0.96;
684
+ }
685
+
686
+ .journey__stage--disabled {
687
+ opacity: var(--flow-component-disabled-opacity);
688
+ pointer-events: none;
689
+ }
690
+
691
+ .journey__stage--active {
692
+ border-color: var(--color-accent);
693
+ background-color: var(--accent-soft-surface, var(--color-accent-soft));
694
+ color: var(--accent-soft-on, var(--color-on-accent));
695
+ }
696
+
697
+ .journey__stage--complete,
698
+ .journey__stage--success {
699
+ border-color: var(--color-success);
700
+ background-color: var(--success-soft-surface, var(--color-success-soft));
701
+ color: var(--success-soft-on, var(--color-on-success));
702
+ }
703
+
704
+ .journey__stage--error {
705
+ border-color: var(--color-danger);
706
+ background-color: var(--danger-soft-surface, var(--color-danger-soft));
707
+ color: var(--danger-soft-on, var(--color-on-danger));
708
+ }
709
+
710
+ .journey__stage--warning {
711
+ border-color: var(--color-warning);
712
+ background-color: var(--warning-soft-surface, var(--color-warning-soft));
713
+ color: var(--warning-soft-on, var(--color-on-warning));
714
+ }
715
+
716
+ .journey__stage--info {
717
+ border-color: var(--color-accent);
718
+ background-color: var(--info-soft-surface, var(--color-info-soft));
719
+ color: var(--info-soft-on, var(--color-on-info));
720
+ }
721
+
722
+ .journey__icon {
723
+ width: var(--flow-icon-size-lg);
724
+ height: var(--flow-icon-size-lg);
725
+ color: var(--color-icon-muted);
726
+ }
727
+
728
+ .journey__marker {
729
+ font-size: var(--text-xs);
730
+ font-weight: 600;
731
+ text-transform: uppercase;
732
+ letter-spacing: 0.04em;
733
+ color: var(--color-text-muted);
734
+ }
735
+
736
+ .journey__title {
737
+ font-size: var(--text-md);
738
+ font-weight: 600;
739
+ }
740
+
741
+ .journey__details {
742
+ font-size: var(--text-sm);
743
+ color: var(--color-text-muted);
744
+ }
745
+
746
+ /* ---------------------------------------------------------
747
+ 10. PROCESS FLOW (NODE-BASED)
748
+ --------------------------------------------------------- */
749
+
750
+ .process-flow {
751
+ display: flex;
752
+ flex-wrap: wrap;
753
+ align-items: center;
754
+ gap: var(--flow-gap-md);
755
+ }
756
+
757
+ .process-flow--compact {
758
+ gap: var(--flow-gap-sm);
759
+ }
760
+
761
+ .process-flow__node {
762
+ min-width: var(--flow-node-min-width);
763
+ padding: var(--flow-inset-sm) var(--flow-inset-md);
764
+ border-radius: var(--radius-md);
765
+ border: var(--border-width) solid var(--color-border-subtle);
766
+ background-color: var(--color-surface);
767
+ font-size: var(--text-sm);
768
+ display: flex;
769
+ flex-direction: column;
770
+ align-items: center;
771
+ text-align: center;
772
+ gap: var(--flow-gap-xs);
773
+ }
774
+
775
+ .process-flow__node--clickable {
776
+ cursor: pointer;
777
+ }
778
+
779
+ .process-flow__node--clickable:hover {
780
+ border-color: var(--color-accent);
781
+ }
782
+
783
+ .process-flow__node--clickable:active {
784
+ transform: translateY(1px);
785
+ opacity: 0.96;
786
+ }
787
+
788
+ .process-flow__node--disabled {
789
+ opacity: var(--flow-component-disabled-opacity);
790
+ pointer-events: none;
791
+ }
792
+
793
+ .process-flow__node--active {
794
+ border-color: var(--color-accent);
795
+ background-color: var(--accent-soft-surface, var(--color-accent-soft));
796
+ }
797
+
798
+ .process-flow__node--complete,
799
+ .process-flow__node--success {
800
+ border-color: var(--color-success);
801
+ background-color: var(--success-soft-surface, var(--color-success-soft));
802
+ }
803
+
804
+ .process-flow__node--error {
805
+ border-color: var(--color-danger);
806
+ background-color: var(--danger-soft-surface, var(--color-danger-soft));
807
+ }
808
+
809
+ .process-flow__node--warning {
810
+ border-color: var(--color-warning);
811
+ background-color: var(--warning-soft-surface, var(--color-warning-soft));
812
+ }
813
+
814
+ .process-flow__node--info {
815
+ border-color: var(--color-accent);
816
+ background-color: var(--info-soft-surface, var(--color-info-soft));
817
+ }
818
+
819
+ .process-flow__icon {
820
+ width: var(--flow-icon-size-md);
821
+ height: var(--flow-icon-size-md);
822
+ color: var(--color-icon-muted);
823
+ margin-bottom: 0;
824
+ flex-shrink: 0;
825
+ }
826
+
827
+ .process-flow__arrow {
828
+ width: var(--space-6);
829
+ height: var(--border-width);
830
+ background-color: var(--color-border-subtle);
831
+ flex-shrink: 0;
832
+ }
833
+
834
+ .process-flow__arrow--error {
835
+ background-color: var(--color-danger);
836
+ }
837
+
838
+ .process-flow__arrow--warning {
839
+ background-color: var(--color-warning);
840
+ }
841
+
842
+ .process-flow--vertical {
843
+ flex-direction: column;
844
+ align-items: flex-start;
845
+ }
846
+
847
+ .process-flow--vertical .process-flow__arrow {
848
+ width: var(--border-width);
849
+ height: var(--space-6);
850
+ margin-left: calc(
851
+ var(--flow-node-min-width) / 2 - var(--border-width) / 2
852
+ );
853
+ }
854
+
855
+ /* ---------------------------------------------------------
856
+ 11. STATE FLOW (STATUS STEPS)
857
+ --------------------------------------------------------- */
858
+
859
+ .state-flow {
860
+ display: inline-flex;
861
+ align-items: center;
862
+ gap: var(--flow-gap-sm);
863
+ flex-wrap: wrap;
864
+ }
865
+
866
+ .state-flow__item {
867
+ padding: var(--flow-inset-xs) var(--flow-inset-sm);
868
+ font-size: var(--text-xs);
869
+ border-radius: 999px;
870
+ border: var(--border-width) solid var(--color-border-subtle);
871
+ background-color: var(--color-surface-subtle);
872
+ color: var(--color-text-muted);
873
+ }
874
+
875
+ .state-flow__item--active {
876
+ border-color: var(--color-accent);
877
+ color: var(--accent-soft-on, var(--color-on-accent));
878
+ background-color: var(--accent-soft-surface, var(--color-accent-soft));
879
+ }
880
+
881
+ .state-flow__item--complete {
882
+ border-color: var(--color-success);
883
+ color: var(--success-soft-on, var(--color-on-success));
884
+ background-color: var(--success-soft-surface, var(--color-success-soft));
885
+ }
886
+
887
+ .state-flow__item--error {
888
+ border-color: var(--color-danger);
889
+ color: var(--danger-soft-on, var(--color-on-danger));
890
+ background-color: var(--danger-soft-surface, var(--color-danger-soft));
891
+ }
892
+
893
+ .state-flow__item--warning {
894
+ border-color: var(--color-warning);
895
+ color: var(--warning-soft-on, var(--color-on-warning));
896
+ background-color: var(--warning-soft-surface, var(--color-warning-soft));
897
+ }
898
+
899
+ .state-flow__item--info {
900
+ border-color: var(--color-accent);
901
+ color: var(--info-soft-on, var(--color-on-info));
902
+ background-color: var(--info-soft-surface, var(--color-info-soft));
903
+ }
904
+
905
+ /* ---------------------------------------------------------
906
+ 12. MULTI-STEP FORM SCAFFOLDING
907
+ --------------------------------------------------------- */
908
+
909
+ .form-flow {
910
+ display: flex;
911
+ flex-direction: column;
912
+ justify-content: center;
913
+ gap: var(--flow-gap-lg);
914
+ }
915
+
916
+ .form-flow__step {
917
+ display: flex;
918
+ flex-direction: column;
919
+ gap: var(--flow-gap-md);
920
+ }
921
+
922
+ .form-flow__step--error {
923
+ border-left: var(--border-width-strong) solid var(--color-danger);
924
+ padding-left: var(--flow-inset-sm);
925
+ background-color: var(--color-danger-soft);
926
+ }
927
+
928
+ .form-flow__step--warning {
929
+ border-left: var(--border-width-strong) solid var(--color-warning);
930
+ padding-left: var(--flow-inset-sm);
931
+ background-color: var(--color-warning-soft);
932
+ }
933
+
934
+ .form-flow__step--valid,
935
+ .form-flow__step--success {
936
+ border-left: var(--border-width-strong) solid var(--color-success);
937
+ padding-left: var(--flow-inset-sm);
938
+ background-color: var(--color-success-soft);
939
+ }
940
+
941
+ .form-flow__actions {
942
+ display: flex;
943
+ justify-content: space-between;
944
+ gap: var(--flow-gap-md);
945
+ }
946
+
947
+ .form-flow__actions-right {
948
+ margin-left: auto;
949
+ display: inline-flex;
950
+ gap: var(--flow-gap-md);
951
+ }
952
+
953
+ /* ---------------------------------------------------------
954
+ 13. BRANCHING FLOW CALLOUTS
955
+ --------------------------------------------------------- */
956
+
957
+ .flow-branch {
958
+ display: grid;
959
+ grid-template-columns: repeat(auto-fit, minmax(var(--flow-grid-min-md), 1fr));
960
+ grid-gap: var(--flow-gap-lg);
961
+ gap: var(--flow-gap-lg);
962
+ }
963
+
964
+ .flow-branch__icon {
965
+ width: var(--flow-icon-size-md);
966
+ height: var(--flow-icon-size-md);
967
+ color: var(--color-icon-muted);
968
+ flex-shrink: 0;
969
+ }
970
+
971
+ .flow-branch__title {
972
+ font-size: var(--text-md);
973
+ font-weight: 600;
974
+ color: var(--color-text);
975
+ }
976
+
977
+ .flow-branch__details {
978
+ font-size: var(--text-sm);
979
+ color: var(--color-text-muted);
980
+ line-height: var(--line-height-normal);
981
+ }
982
+
983
+ .flow-branch--compact {
984
+ gap: var(--flow-gap-md);
985
+ }
986
+
987
+ .flow-branch--compact .flow-branch__title {
988
+ font-size: var(--text-sm);
989
+ }
990
+
991
+ .flow-branch--compact .flow-branch__details {
992
+ font-size: var(--text-xs);
993
+ }
994
+
995
+ .flow-branch__option {
996
+ border-radius: var(--radius-md);
997
+ border: var(--border-width) solid var(--color-border-subtle);
998
+ background-color: var(--color-surface);
999
+ padding: var(--flow-inset-md);
1000
+
1001
+ display: flex;
1002
+ flex-direction: column;
1003
+ gap: var(--flow-gap-sm);
1004
+
1005
+ font-size: var(--text-sm);
1006
+ }
1007
+
1008
+ .flow-branch__option--clickable {
1009
+ cursor: pointer;
1010
+ }
1011
+
1012
+ .flow-branch__option--clickable:hover {
1013
+ border-color: var(--color-accent);
1014
+ }
1015
+
1016
+ .flow-branch__option--clickable:active {
1017
+ transform: translateY(1px);
1018
+ opacity: 0.96;
1019
+ }
1020
+
1021
+ .flow-branch__option--disabled {
1022
+ opacity: var(--flow-component-disabled-opacity);
1023
+ pointer-events: none;
1024
+ }
1025
+
1026
+ .flow-branch__option--active {
1027
+ border-color: var(--color-accent);
1028
+ background-color: var(--accent-soft-surface, var(--color-accent-soft));
1029
+ color: var(--accent-soft-on, var(--color-on-accent));
1030
+ }
1031
+
1032
+ .flow-branch__option--complete,
1033
+ .flow-branch__option--success {
1034
+ border-color: var(--color-success);
1035
+ background-color: var(--success-soft-surface, var(--color-success-soft));
1036
+ color: var(--success-soft-on, var(--color-on-success));
1037
+ }
1038
+
1039
+ .flow-branch__option--error {
1040
+ border-color: var(--color-danger);
1041
+ background-color: var(--danger-soft-surface, var(--color-danger-soft));
1042
+ color: var(--danger-soft-on, var(--color-on-danger));
1043
+ }
1044
+
1045
+ .flow-branch__option--warning {
1046
+ border-color: var(--color-warning);
1047
+ background-color: var(--warning-soft-surface, var(--color-warning-soft));
1048
+ color: var(--warning-soft-on, var(--color-on-warning));
1049
+ }
1050
+
1051
+ .flow-branch__option--info {
1052
+ border-color: var(--color-accent);
1053
+ background-color: var(--info-soft-surface, var(--color-info-soft));
1054
+ color: var(--info-soft-on, var(--color-on-info));
1055
+ }
1056
+
1057
+ .flow-branch__arrow {
1058
+ width: var(--space-6);
1059
+ height: var(--border-width);
1060
+ background-color: var(--color-border-subtle);
1061
+ margin-left: auto;
1062
+ margin-right: auto;
1063
+ flex-shrink: 0;
1064
+ }
1065
+
1066
+ .flow-branch__arrow--error {
1067
+ background-color: var(--color-danger);
1068
+ }
1069
+
1070
+ .flow-branch__arrow--warning {
1071
+ background-color: var(--color-warning);
1072
+ }
1073
+
1074
+ /* ---------------------------------------------------------
1075
+ 14. RESPONSIVE
1076
+ --------------------------------------------------------- */
1077
+
1078
+ @media (max-width: 768px) {
1079
+
1080
+ .steps {
1081
+ flex-wrap: wrap;
1082
+ }
1083
+
1084
+ .process-flow {
1085
+ flex-direction: column;
1086
+ align-items: flex-start;
1087
+ }
1088
+
1089
+ .process-flow__arrow {
1090
+ width: var(--border-width);
1091
+ height: var(--space-4);
1092
+ }
1093
+
1094
+ .journey {
1095
+ flex-direction: column;
1096
+ }
1097
+
1098
+ .journey__stage {
1099
+ width: 100%;
1100
+ }
1101
+ }