@24vlh/vds 0.1.0 → 0.1.1

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.
@@ -1,1101 +1 @@
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
- }
1
+ .vds-flow,[data-vds-flow]{--flow-component-disabled-opacity:0.48;--flow-step-bullet-sm:var(--space-5);--flow-step-bullet-md:var(--space-5_5);--flow-step-bullet-lg:var(--space-6);--flow-timeline-point-sm:var(--space-2);--flow-timeline-point-md:var(--space-3);--flow-timeline-point-xs:var(--space-1_5);--flow-node-min-width:var(--space-40);--flow-stage-min-width:var(--space-48);--flow-grid-min-md:var(--flow-stage-min-width);--flow-icon-size-sm:var(--space-3);--flow-icon-size-md:var(--space-4);--flow-icon-size-lg:var(--space-5);--flow-gap-xs:var(--space-1);--flow-gap-sm:var(--space-2);--flow-gap-md:var(--space-3);--flow-gap-lg:var(--space-4);--flow-gap-xl:var(--space-8);--flow-inset-xs:var(--space-2);--flow-inset-sm:var(--space-3);--flow-inset-md:var(--space-4);--flow-inset-lg:var(--space-6);--flow-progress-stripe-size:var(--space-3);--flow-progress-stripe-speed:1.2s}.flow--compact .flow{gap:var(--flow-gap-lg)}.flow--compact .flow__body{gap:var(--flow-gap-md)}.flow--compact .steps,.flow--compact .timeline{gap:var(--flow-gap-sm)}.flow--compact .journey{gap:var(--flow-gap-md)}.flow--compact .process-flow{gap:var(--flow-gap-sm)}.flow--compact .state-flow{gap:var(--flow-gap-xs)}.flow--compact .form-flow{gap:var(--flow-gap-md)}.steps__item--upcoming{color:var(--color-text-soft)}.flow-branch__option--upcoming,.journey__stage--upcoming,.process-flow__node--upcoming,.state-flow__item--upcoming{background-color:var(--color-surface-subtle);border-color:var(--color-border-subtle);color:var(--color-text-muted)}.flow-branch__option--clickable:focus-visible,.journey__stage--clickable:focus-visible,.process-flow__node--clickable:focus-visible,.steps__item--clickable:focus-visible,.steps__item:focus-visible{outline:var(--focus-ring-width) solid var(--color-accent);outline-offset:var(--focus-ring-offset)}.steps__item--disabled,.steps__item[aria-disabled=true]{cursor:not-allowed;opacity:var(--flow-component-disabled-opacity)}.flow-branch__option--disabled,.flow-branch__option[aria-disabled=true],.journey__stage--disabled,.journey__stage[aria-disabled=true],.process-flow__node--disabled,.process-flow__node[aria-disabled=true]{opacity:var(--flow-component-disabled-opacity);pointer-events:none}.flow{gap:var(--space-8)}.flow,.flow__header{display:flex;flex-direction:column}.flow__header{gap:var(--space-2)}.flow__title{font-size:var(--text-lg);font-weight:600}.flow__subtitle{color:var(--color-text-muted);font-size:var(--text-sm)}.flow__body{display:flex;flex-direction:column;gap:var(--space-6)}.flow__nav{justify-content:flex-end}.flow__nav,.steps{display:flex;gap:var(--space-4)}.steps,.steps__item{align-items:center}.steps__item{color:var(--color-text-muted);display:flex;font-size:var(--text-xs);gap:var(--flow-gap-sm)}.steps__item--clickable{cursor:pointer}.steps__item--clickable:hover .steps__label{color:var(--color-text)}.steps__item--clickable:active{opacity:.95;transform:translateY(1px)}.steps__item--error{color:var(--color-danger-strong)}.steps__item--error .steps__bullet{background-color:var(--danger-soft-surface,var(--color-danger-soft));border-color:var(--danger-soft-border,var(--color-danger));color:var(--danger-soft-on,var(--color-on-danger))}.steps__item--warning{color:var(--color-warning-strong)}.steps__item--warning .steps__bullet{background-color:var(--warning-soft-surface,var(--color-warning-soft));border-color:var(--warning-soft-border,var(--color-warning));color:var(--warning-soft-on,var(--color-on-warning))}.steps__item[aria-current=step],.steps__item[aria-current=step] .steps__label{color:var(--color-text)}.steps__bullet{align-items:center;background-color:var(--color-surface-subtle);border:var(--border-width) solid var(--color-border-subtle);border-radius:999px;color:var(--color-text-muted);display:flex;flex-shrink:0;font-size:var(--text-xxs);height:var(--flow-step-bullet-md);justify-content:center;width:var(--flow-step-bullet-md)}.steps__label{white-space:nowrap}.steps__line{background-color:var(--color-border-subtle);flex:1;height:var(--border-width)}.steps__item--active .steps__bullet{background-color:var(--accent-soft-surface,var(--color-accent-soft));border-color:var(--accent-soft-border,var(--color-accent));color:var(--accent-soft-on,var(--color-on-accent))}.steps__item--complete .steps__bullet{background-color:var(--success-soft-surface,var(--color-success-soft));border-color:var(--success-soft-border,var(--color-success));color:var(--success-soft-on,var(--color-on-success));opacity:.7}.steps__item--active,.steps__item--complete{color:var(--color-text)}.steps--a .steps__bullet{height:var(--flow-step-bullet-lg);width:var(--flow-step-bullet-lg)}.steps--c .steps__bullet{font-size:var(--text-xxs);height:var(--flow-step-bullet-sm);width:var(--flow-step-bullet-sm)}.steps--vertical{flex-direction:column}.steps--vertical,.steps--vertical .steps__item{align-items:flex-start}.steps--vertical .steps__line{background-color:var(--color-border-subtle);flex:auto;height:auto;margin-left:calc(var(--flow-step-bullet-md)/2 - var(--border-width)/2);min-height:var(--flow-gap-xl);width:var(--border-width)}.flow-progress{border-radius:var(--radius-sm);height:var(--border-width-strong);overflow:hidden;width:100%}.flow-progress,.flow-progress__bar{background-color:var(--color-muted-bg)}.flow-progress__bar{height:100%;transition:width .2s ease;width:0}.flow-progress--striped .flow-progress__bar{animation:flow-progress-stripes var(--flow-progress-stripe-speed) linear infinite;background-image:repeating-linear-gradient(45deg,var(--color-text-soft) 0,var(--color-text-soft) var(--flow-progress-stripe-size),var(--color-muted-bg) var(--flow-progress-stripe-size),var(--color-muted-bg) calc(var(--flow-progress-stripe-size)*2))}.flow-progress--striped .flow-progress__bar--error{background-image:repeating-linear-gradient(45deg,var(--color-danger) 0,var(--color-danger) var(--flow-progress-stripe-size),var(--color-danger-soft) var(--flow-progress-stripe-size),var(--color-danger-soft) calc(var(--flow-progress-stripe-size)*2))}.flow-progress--striped .flow-progress__bar--warning{background-image:repeating-linear-gradient(45deg,var(--color-warning) 0,var(--color-warning) var(--flow-progress-stripe-size),var(--color-warning-soft) var(--flow-progress-stripe-size),var(--color-warning-soft) calc(var(--flow-progress-stripe-size)*2))}@keyframes flow-progress-stripes{0%{background-position:0 0}to{background-position:calc(var(--flow-progress-stripe-size)*-2.828) 0}}@media (prefers-reduced-motion:reduce){.flow-progress--striped .flow-progress__bar{animation:none;background-position:0 0}}.flow-progress--striped-right .flow-progress__bar{animation:flow-progress-stripes-right var(--flow-progress-stripe-speed) linear infinite}@keyframes flow-progress-stripes-right{0%{background-position:calc(var(--flow-progress-stripe-size)*-2.828) 0}to{background-position:0 0}}@media (prefers-reduced-motion:reduce){.flow-progress--striped-right .flow-progress__bar{animation:none;background-position:0 0}}.flow-progress--segments{border-radius:var(--radius-sm);display:flex;height:var(--border-width-strong);overflow:hidden}.flow-progress__segment{background-color:var(--color-muted-bg);flex:1}.flow-progress__segment--complete{background-color:var(--color-success)}.flow-progress__segment--error{background-color:var(--color-danger)}.flow-progress__segment--warning{background-color:var(--color-warning)}.timeline{display:flex;flex-direction:column;gap:var(--flow-gap-md)}.timeline__item{align-items:stretch;display:flex;gap:var(--flow-gap-sm)}.timeline__point-wrap{align-items:center;display:flex;flex-direction:column;gap:var(--flow-gap-xs)}.timeline__point{background-color:var(--color-surface);border:var(--border-width-strong) solid var(--color-accent);border-radius:999px;flex-shrink:0;height:var(--flow-timeline-point-sm);width:var(--flow-timeline-point-sm)}.timeline__point--upcoming{border-color:var(--color-border-subtle)}.timeline__point--error{background-color:var(--color-danger-soft);border-color:var(--color-danger)}.timeline__point--warning{background-color:var(--warning-soft-surface,var(--color-warning-soft));border-color:var(--warning-soft-border,var(--color-warning))}.timeline__point--success{background-color:var(--danger-soft-surface,var(--color-danger-soft));border-color:var(--danger-soft-border,var(--color-danger))}.timeline__point--info{background-color:var(--info-soft-surface,var(--color-info-soft));border-color:var(--info-soft-border,var(--color-info))}.timeline__icon{color:var(--color-icon-muted);height:var(--flow-icon-size-md);width:var(--flow-icon-size-md)}.timeline__icon--left{margin-right:var(--flow-gap-xs)}.timeline__icon--right{margin-left:var(--flow-gap-xs)}.timeline__icon--top{margin-bottom:var(--flow-gap-xs)}.timeline__line{background-color:var(--color-border-subtle);flex:1;width:var(--border-width-strong)}.timeline__content{display:flex;flex:1;flex-direction:column;gap:var(--flow-gap-xs)}.timeline__label{align-items:center;display:flex;font-size:var(--text-sm);font-weight:500;gap:var(--space-2)}.timeline__note{color:var(--color-text-muted);font-size:var(--text-xs)}.timeline--horizontal{align-items:flex-start;flex-direction:row}.timeline--horizontal .timeline__item{align-items:center;flex-direction:column}.timeline--horizontal .timeline__point-wrap{flex-direction:row}.timeline--horizontal .timeline__line{height:var(--border-width-strong);width:var(--component-gap-xl)}.timeline--compact .timeline__item{gap:var(--flow-gap-xs)}.timeline--compact .timeline__note{font-size:var(--text-xxs)}.timeline--compact .timeline__point{height:var(--flow-timeline-point-xs);width:var(--flow-timeline-point-xs)}.timeline--compact .timeline__icon{height:var(--flow-icon-size-sm);width:var(--flow-icon-size-sm)}.timeline--rich{display:flex;flex-direction:column;gap:var(--flow-gap-lg)}.timeline--rich .timeline__item{align-items:stretch;background-color:var(--flow-zebra-bg-alt);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-sm);display:flex;gap:var(--flow-gap-md);padding:var(--flow-inset-sm)}.timeline--rich .timeline__item:nth-child(2n){background-color:var(--flow-zebra-bg)}.timeline--rich .timeline__item:nth-child(odd){background-color:var(--flow-zebra-bg-alt)}.timeline--rich .timeline__point-wrap{align-items:center;display:flex;flex-direction:column;flex-shrink:0;gap:var(--flow-gap-xs)}.timeline--rich .timeline__point{height:var(--flow-timeline-point-md);width:var(--flow-timeline-point-md)}.timeline--rich .timeline__line{background-color:var(--color-border-subtle);border-radius:var(--radius-sm);flex:1;width:var(--border-width-strong)}.timeline--rich .timeline__item:last-child .timeline__line{display:none}.timeline-events{display:flex;flex-direction:column;gap:var(--space-4)}.timeline-events .timeline__item{align-items:flex-start;gap:var(--space-4)}.timeline__timestamp{color:var(--color-text-soft);font-size:var(--text-xxs)}.timeline__meta{color:var(--color-text-muted);font-size:var(--text-xs)}.timeline__body{color:var(--color-text);font-size:var(--text-sm);margin-top:var(--flow-gap-xs)}.timeline--audit .timeline__label{font-size:var(--text-xs);letter-spacing:.05em;text-transform:uppercase}.timeline--audit .timeline__body{font-size:var(--text-xs)}.journey{display:flex;flex-wrap:wrap;gap:var(--flow-gap-lg)}.journey--compact{gap:var(--flow-gap-md)}.journey__stage{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);display:flex;flex:1 1 var(--flow-stage-min-width);flex-direction:column;gap:var(--flow-gap-sm);min-width:var(--flow-stage-min-width);padding:var(--flow-inset-md)}.journey__stage--clickable{cursor:pointer}.journey__stage--clickable:hover{border-color:var(--color-accent)}.journey__stage--clickable:active{opacity:.96;transform:translateY(1px)}.journey__stage--disabled{opacity:var(--flow-component-disabled-opacity);pointer-events:none}.journey__stage--active{background-color:var(--accent-soft-surface,var(--color-accent-soft));border-color:var(--color-accent);color:var(--accent-soft-on,var(--color-on-accent))}.journey__stage--complete,.journey__stage--success{background-color:var(--success-soft-surface,var(--color-success-soft));border-color:var(--color-success);color:var(--success-soft-on,var(--color-on-success))}.journey__stage--error{background-color:var(--danger-soft-surface,var(--color-danger-soft));border-color:var(--color-danger);color:var(--danger-soft-on,var(--color-on-danger))}.journey__stage--warning{background-color:var(--warning-soft-surface,var(--color-warning-soft));border-color:var(--color-warning);color:var(--warning-soft-on,var(--color-on-warning))}.journey__stage--info{background-color:var(--info-soft-surface,var(--color-info-soft));border-color:var(--color-accent);color:var(--info-soft-on,var(--color-on-info))}.journey__icon{color:var(--color-icon-muted);height:var(--flow-icon-size-lg);width:var(--flow-icon-size-lg)}.journey__marker{color:var(--color-text-muted);font-size:var(--text-xs);font-weight:600;letter-spacing:.04em;text-transform:uppercase}.journey__title{font-size:var(--text-md);font-weight:600}.journey__details{color:var(--color-text-muted);font-size:var(--text-sm)}.process-flow{align-items:center;display:flex;flex-wrap:wrap;gap:var(--flow-gap-md)}.process-flow--compact{gap:var(--flow-gap-sm)}.process-flow__node{align-items:center;background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);display:flex;flex-direction:column;font-size:var(--text-sm);gap:var(--flow-gap-xs);min-width:var(--flow-node-min-width);padding:var(--flow-inset-sm) var(--flow-inset-md);text-align:center}.process-flow__node--clickable{cursor:pointer}.process-flow__node--clickable:hover{border-color:var(--color-accent)}.process-flow__node--clickable:active{opacity:.96;transform:translateY(1px)}.process-flow__node--disabled{opacity:var(--flow-component-disabled-opacity);pointer-events:none}.process-flow__node--active{background-color:var(--accent-soft-surface,var(--color-accent-soft));border-color:var(--color-accent)}.process-flow__node--complete,.process-flow__node--success{background-color:var(--success-soft-surface,var(--color-success-soft));border-color:var(--color-success)}.process-flow__node--error{background-color:var(--danger-soft-surface,var(--color-danger-soft));border-color:var(--color-danger)}.process-flow__node--warning{background-color:var(--warning-soft-surface,var(--color-warning-soft));border-color:var(--color-warning)}.process-flow__node--info{background-color:var(--info-soft-surface,var(--color-info-soft));border-color:var(--color-accent)}.process-flow__icon{color:var(--color-icon-muted);flex-shrink:0;height:var(--flow-icon-size-md);margin-bottom:0;width:var(--flow-icon-size-md)}.process-flow__arrow{background-color:var(--color-border-subtle);flex-shrink:0;height:var(--border-width);width:var(--space-6)}.process-flow__arrow--error{background-color:var(--color-danger)}.process-flow__arrow--warning{background-color:var(--color-warning)}.process-flow--vertical{align-items:flex-start;flex-direction:column}.process-flow--vertical .process-flow__arrow{height:var(--space-6);margin-left:calc(var(--flow-node-min-width)/2 - var(--border-width)/2);width:var(--border-width)}.state-flow{align-items:center;display:inline-flex;flex-wrap:wrap;gap:var(--flow-gap-sm)}.state-flow__item{background-color:var(--color-surface-subtle);border:var(--border-width) solid var(--color-border-subtle);border-radius:999px;color:var(--color-text-muted);font-size:var(--text-xs);padding:var(--flow-inset-xs) var(--flow-inset-sm)}.state-flow__item--active{background-color:var(--accent-soft-surface,var(--color-accent-soft));border-color:var(--color-accent);color:var(--accent-soft-on,var(--color-on-accent))}.state-flow__item--complete{background-color:var(--success-soft-surface,var(--color-success-soft));border-color:var(--color-success);color:var(--success-soft-on,var(--color-on-success))}.state-flow__item--error{background-color:var(--danger-soft-surface,var(--color-danger-soft));border-color:var(--color-danger);color:var(--danger-soft-on,var(--color-on-danger))}.state-flow__item--warning{background-color:var(--warning-soft-surface,var(--color-warning-soft));border-color:var(--color-warning);color:var(--warning-soft-on,var(--color-on-warning))}.state-flow__item--info{background-color:var(--info-soft-surface,var(--color-info-soft));border-color:var(--color-accent);color:var(--info-soft-on,var(--color-on-info))}.form-flow{gap:var(--flow-gap-lg);justify-content:center}.form-flow,.form-flow__step{display:flex;flex-direction:column}.form-flow__step{gap:var(--flow-gap-md)}.form-flow__step--error{background-color:var(--color-danger-soft);border-left:var(--border-width-strong) solid var(--color-danger);padding-left:var(--flow-inset-sm)}.form-flow__step--warning{background-color:var(--color-warning-soft);border-left:var(--border-width-strong) solid var(--color-warning);padding-left:var(--flow-inset-sm)}.form-flow__step--success,.form-flow__step--valid{background-color:var(--color-success-soft);border-left:var(--border-width-strong) solid var(--color-success);padding-left:var(--flow-inset-sm)}.form-flow__actions{display:flex;gap:var(--flow-gap-md);justify-content:space-between}.form-flow__actions-right{display:inline-flex;gap:var(--flow-gap-md);margin-left:auto}.flow-branch{grid-gap:var(--flow-gap-lg);display:grid;gap:var(--flow-gap-lg);grid-template-columns:repeat(auto-fit,minmax(var(--flow-grid-min-md),1fr))}.flow-branch__icon{color:var(--color-icon-muted);flex-shrink:0;height:var(--flow-icon-size-md);width:var(--flow-icon-size-md)}.flow-branch__title{color:var(--color-text);font-size:var(--text-md);font-weight:600}.flow-branch__details{color:var(--color-text-muted);font-size:var(--text-sm);line-height:var(--line-height-normal)}.flow-branch--compact{gap:var(--flow-gap-md)}.flow-branch--compact .flow-branch__title{font-size:var(--text-sm)}.flow-branch--compact .flow-branch__details{font-size:var(--text-xs)}.flow-branch__option{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);display:flex;flex-direction:column;font-size:var(--text-sm);gap:var(--flow-gap-sm);padding:var(--flow-inset-md)}.flow-branch__option--clickable{cursor:pointer}.flow-branch__option--clickable:hover{border-color:var(--color-accent)}.flow-branch__option--clickable:active{opacity:.96;transform:translateY(1px)}.flow-branch__option--disabled{opacity:var(--flow-component-disabled-opacity);pointer-events:none}.flow-branch__option--active{background-color:var(--accent-soft-surface,var(--color-accent-soft));border-color:var(--color-accent);color:var(--accent-soft-on,var(--color-on-accent))}.flow-branch__option--complete,.flow-branch__option--success{background-color:var(--success-soft-surface,var(--color-success-soft));border-color:var(--color-success);color:var(--success-soft-on,var(--color-on-success))}.flow-branch__option--error{background-color:var(--danger-soft-surface,var(--color-danger-soft));border-color:var(--color-danger);color:var(--danger-soft-on,var(--color-on-danger))}.flow-branch__option--warning{background-color:var(--warning-soft-surface,var(--color-warning-soft));border-color:var(--color-warning);color:var(--warning-soft-on,var(--color-on-warning))}.flow-branch__option--info{background-color:var(--info-soft-surface,var(--color-info-soft));border-color:var(--color-accent);color:var(--info-soft-on,var(--color-on-info))}.flow-branch__arrow{background-color:var(--color-border-subtle);flex-shrink:0;height:var(--border-width);margin-left:auto;margin-right:auto;width:var(--space-6)}.flow-branch__arrow--error{background-color:var(--color-danger)}.flow-branch__arrow--warning{background-color:var(--color-warning)}@media (max-width:768px){.steps{flex-wrap:wrap}.process-flow{align-items:flex-start;flex-direction:column}.process-flow__arrow{height:var(--space-4);width:var(--border-width)}.journey{flex-direction:column}.journey__stage{width:100%}}