@truedat/dd 8.11.6 → 8.11.9

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 (43) hide show
  1. package/package.json +4 -3
  2. package/src/components/Graphs.js +30 -4
  3. package/src/components/LineageContextMenu.js +185 -58
  4. package/src/components/LineageDownloadButton.js +16 -6
  5. package/src/components/LineageEventsPanel.js +80 -27
  6. package/src/components/LineageEventsTable.js +7 -3
  7. package/src/components/LineageGraph.js +5166 -306
  8. package/src/components/LineageGraphToolbar.js +896 -0
  9. package/src/components/LineageInspectorPanel.js +748 -0
  10. package/src/components/LineageResourceNode.js +501 -0
  11. package/src/components/LineageRoutes.js +1 -2
  12. package/src/components/LineageSelectionPanel.js +28 -12
  13. package/src/components/StructureGraph.js +8 -1
  14. package/src/components/StructureGraphView.js +14 -0
  15. package/src/components/StructureImpact.js +2 -22
  16. package/src/components/StructureLineage.js +2 -19
  17. package/src/components/StructuresUploadEventsTable.js +0 -3
  18. package/src/components/__tests__/LineageContextMenu.spec.js +42 -0
  19. package/src/components/__tests__/LineageGraph.spec.js +896 -0
  20. package/src/components/__tests__/LineageGraphLayout.spec.js +639 -0
  21. package/src/components/__tests__/LineageGraphToolbar.spec.js +366 -0
  22. package/src/components/__tests__/LineageHierarchy.spec.js +116 -0
  23. package/src/components/__tests__/LineageInspectorPanel.spec.js +364 -0
  24. package/src/components/__tests__/LineageResourceNode.spec.js +338 -0
  25. package/src/components/__tests__/LineageRoutes.spec.js +27 -9
  26. package/src/components/__tests__/__snapshots__/LineageDownloadButton.spec.js.snap +23 -3
  27. package/src/components/__tests__/__snapshots__/LineageForm.spec.js.snap +23 -3
  28. package/src/components/__tests__/lineageEventHelpers.spec.js +60 -0
  29. package/src/components/lineageEventHelpers.js +53 -17
  30. package/src/reducers/__tests__/lineageEvents.spec.js +164 -0
  31. package/src/reducers/__tests__/lineageQuery.spec.js +11 -0
  32. package/src/reducers/lineageEvents.js +68 -2
  33. package/src/reducers/lineageQuery.js +2 -6
  34. package/src/styles/LineageGraph.less +4094 -0
  35. package/src/styles/LineageGraphColors.less +105 -0
  36. package/src/styles/LineageGraphCore.less +20 -0
  37. package/src/styles/LineageResourceNode.less +711 -0
  38. package/src/utils/__tests__/lineageGraphIndex.spec.js +52 -0
  39. package/src/utils/__tests__/lineageLayout.spec.js +252 -0
  40. package/src/utils/__tests__/lineageTopology.spec.js +256 -0
  41. package/src/utils/lineageGraphIndex.js +296 -0
  42. package/src/utils/lineageLayout.js +1050 -0
  43. package/src/styles/lineageGraph.less +0 -1236
@@ -0,0 +1,4094 @@
1
+ @import "LineageGraphColors.less";
2
+
3
+ .graph-hash {
4
+ font-family: monospace;
5
+ }
6
+
7
+ .dl svg {
8
+ border-radius: 5px;
9
+ }
10
+
11
+ .lineage-view {
12
+ --td-graph-container-height: clamp(620px, calc(100vh - 170px), 88vh);
13
+ --td-graph-border-radius: 8px;
14
+ --td-lineage-sidebar-width: 450px;
15
+ --td-lineage-sidebar-collapsed-width: 56px;
16
+ --td-lineage-menu-transition-duration: 180ms;
17
+ --td-lineage-menu-transition-easing: ease;
18
+ border-radius: 8px;
19
+ font-family: Lato, "Helvetica Neue", Arial, Helvetica, sans-serif;
20
+
21
+ &.ui.segment {
22
+ padding: 0;
23
+ border: 0;
24
+ background: transparent;
25
+ box-shadow: none;
26
+ }
27
+
28
+ &__header {
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: space-between;
32
+ gap: 16px;
33
+ margin-bottom: 16px;
34
+ padding: 10px 12px;
35
+ border: 1px solid #dfe6ef;
36
+ border-radius: 8px;
37
+ background: #ffffff;
38
+ box-shadow: 0 1px 3px rgba(21, 26, 36, 0.06);
39
+ }
40
+
41
+ &__header-main {
42
+ display: flex;
43
+ min-width: 0;
44
+ align-items: center;
45
+ gap: 12px;
46
+ }
47
+
48
+ &__header-icon {
49
+ display: flex;
50
+ width: 36px;
51
+ height: 36px;
52
+ flex: 0 0 auto;
53
+ align-items: center;
54
+ justify-content: center;
55
+ border: 1px solid #d7dde6;
56
+ border-radius: 8px;
57
+ background: #f8fafc;
58
+ color: #002057;
59
+ }
60
+
61
+ &__header-copy {
62
+ min-width: 0;
63
+ }
64
+
65
+ &__header-title-row {
66
+ display: flex;
67
+ min-width: 0;
68
+ align-items: center;
69
+ gap: 8px;
70
+ line-height: 1.2;
71
+
72
+ h2 {
73
+ margin: 0;
74
+ color: #002057;
75
+ font-size: 18px;
76
+ font-weight: 700;
77
+ line-height: 1.2;
78
+ white-space: nowrap;
79
+ }
80
+ }
81
+
82
+ &__header-copy p {
83
+ margin: 4px 0 0;
84
+ color: #697386;
85
+ font-size: 12px;
86
+ line-height: 1.3;
87
+ }
88
+
89
+ &__export-button.ui.button {
90
+ flex: 0 0 auto;
91
+ margin: 0;
92
+ border-radius: 6px;
93
+ color: #435064 !important;
94
+ font-size: 10px;
95
+ font-weight: 700;
96
+ text-transform: uppercase;
97
+ }
98
+
99
+ &__workspace {
100
+ position: relative;
101
+ display: block;
102
+ min-width: 0;
103
+ overflow: visible;
104
+ }
105
+
106
+ &__sidebar {
107
+ position: absolute;
108
+ top: 15px;
109
+ left: 15px;
110
+ width: var(--td-lineage-sidebar-width);
111
+ min-width: 0;
112
+ max-height: calc(100vh - 65px);
113
+ overflow: visible;
114
+ border-radius: 8px;
115
+ background: transparent;
116
+ box-shadow: none;
117
+ transition:
118
+ width var(--td-lineage-menu-transition-duration)
119
+ var(--td-lineage-menu-transition-easing),
120
+ min-height var(--td-lineage-menu-transition-duration)
121
+ var(--td-lineage-menu-transition-easing),
122
+ box-shadow var(--td-lineage-menu-transition-duration)
123
+ var(--td-lineage-menu-transition-easing);
124
+ z-index: 5000;
125
+
126
+ .lineage-toolbar {
127
+ margin-bottom: 0;
128
+ }
129
+
130
+ .lineage-toolbar__form {
131
+ gap: 14px;
132
+ }
133
+
134
+ .lineage-toolbar__fields {
135
+ grid-template-columns: 1fr;
136
+ }
137
+
138
+ .lineage-selection-column--resource {
139
+ grid-column: 1 / -1;
140
+ }
141
+
142
+ .lineage-toolbar__controls {
143
+ grid-template-columns: 1fr;
144
+ }
145
+
146
+ .lineage-resource-field {
147
+ grid-template-columns: minmax(0, 1fr) auto;
148
+ }
149
+
150
+ .lineage-column-dropdown.ui.dropdown .menu.visible {
151
+ width: min(430px, calc(100vw - 88px));
152
+ column-width: 220px;
153
+ z-index: 4000;
154
+ }
155
+
156
+ .lineage-toolbar__actions {
157
+ grid-column: 1 / -1;
158
+
159
+ .ui.button:first-child {
160
+ order: 3;
161
+ grid-column: 1 / -1;
162
+ }
163
+
164
+ .ui.button:nth-child(2) {
165
+ order: 1;
166
+ }
167
+
168
+ .ui.button:nth-child(3) {
169
+ order: 2;
170
+ }
171
+ }
172
+
173
+ .lineage-resource-selector.ui.multiple.dropdown > .label {
174
+ max-width: calc(100% - 12px);
175
+ }
176
+
177
+ .lineage-resource-selector.ui.multiple.dropdown:not(.active):not(.visible) {
178
+ max-height: min(292px, calc(100vh - 360px));
179
+ overflow-x: hidden;
180
+ overflow-y: auto;
181
+ overscroll-behavior: contain;
182
+
183
+ > .label {
184
+ display: flex;
185
+ width: calc(100% - 12px);
186
+ max-width: none;
187
+ align-items: center;
188
+ }
189
+ }
190
+ }
191
+
192
+ &__sidebar-panel {
193
+ box-sizing: border-box;
194
+ display: flex;
195
+ width: var(--td-lineage-sidebar-width);
196
+ max-height: inherit;
197
+ flex-direction: column;
198
+ gap: 0;
199
+ opacity: 1;
200
+ overflow: visible;
201
+ transform: translateX(0);
202
+ transition:
203
+ opacity var(--td-lineage-menu-transition-duration)
204
+ var(--td-lineage-menu-transition-easing),
205
+ transform var(--td-lineage-menu-transition-duration)
206
+ var(--td-lineage-menu-transition-easing),
207
+ visibility 0ms linear 0ms;
208
+ visibility: visible;
209
+ }
210
+
211
+ &__sidebar-header {
212
+ position: relative;
213
+ display: block;
214
+ padding: 0 10px;
215
+ }
216
+
217
+ &__sidebar-toggle.ui.button {
218
+ position: absolute;
219
+ top: 0;
220
+ right: -48px;
221
+ width: 40px;
222
+ height: 40px;
223
+ min-height: 40px;
224
+ margin: 0;
225
+ padding: 0;
226
+ border: 1px solid #d7dde6;
227
+ border-radius: 8px;
228
+ background: #ffffff !important;
229
+ box-shadow: 0 6px 16px rgba(21, 26, 36, 0.08);
230
+ transition:
231
+ background-color var(--td-lineage-menu-transition-duration)
232
+ var(--td-lineage-menu-transition-easing),
233
+ border-color var(--td-lineage-menu-transition-duration)
234
+ var(--td-lineage-menu-transition-easing),
235
+ box-shadow var(--td-lineage-menu-transition-duration)
236
+ var(--td-lineage-menu-transition-easing),
237
+ color var(--td-lineage-menu-transition-duration)
238
+ var(--td-lineage-menu-transition-easing);
239
+ z-index: 2;
240
+ }
241
+
242
+ &__sidebar-tabs {
243
+ display: flex;
244
+ min-width: 0;
245
+ width: 100%;
246
+ max-width: 100%;
247
+ align-items: flex-end;
248
+ gap: 4px;
249
+ overflow: visible;
250
+ border: 0;
251
+ background: transparent;
252
+ }
253
+
254
+ &__sidebar-tab {
255
+ position: relative;
256
+ display: inline-flex;
257
+ flex: 1 1 0;
258
+ width: auto;
259
+ min-width: 0;
260
+ min-height: 40px;
261
+ align-items: center;
262
+ justify-content: center;
263
+ gap: 7px;
264
+ padding: 6px 12px 7px;
265
+ border: 1px solid #d7dde6;
266
+ border-bottom-color: #d7dde6;
267
+ border-radius: 8px 8px 0 0;
268
+ background: #f8fafc;
269
+ color: #697386;
270
+ cursor: pointer;
271
+ font-size: 10px;
272
+ font-weight: 800;
273
+ letter-spacing: 0;
274
+ line-height: 1.2;
275
+ text-transform: uppercase;
276
+ transition:
277
+ background-color var(--td-lineage-menu-transition-duration)
278
+ var(--td-lineage-menu-transition-easing),
279
+ border-color var(--td-lineage-menu-transition-duration)
280
+ var(--td-lineage-menu-transition-easing),
281
+ color var(--td-lineage-menu-transition-duration)
282
+ var(--td-lineage-menu-transition-easing);
283
+
284
+ &:not([aria-selected="true"]):hover {
285
+ border-color: #002057;
286
+ background: #002057;
287
+ color: #ffffff;
288
+ }
289
+
290
+ &[aria-selected="true"] {
291
+ z-index: 2;
292
+ margin-bottom: -1px;
293
+ border-bottom-color: #ffffff;
294
+ background: #ffffff;
295
+ color: #002057;
296
+ box-shadow: 0 -4px 12px rgba(21, 26, 36, 0.05);
297
+ }
298
+
299
+ &-icon {
300
+ display: inline-flex;
301
+ width: 28px;
302
+ height: 28px;
303
+ flex: 0 0 auto;
304
+ align-items: center;
305
+ justify-content: center;
306
+ border: 1px solid #d7dde6;
307
+ border-radius: 8px;
308
+ background: #ffffff;
309
+ color: #697386;
310
+ transition:
311
+ background-color var(--td-lineage-menu-transition-duration)
312
+ var(--td-lineage-menu-transition-easing),
313
+ border-color var(--td-lineage-menu-transition-duration)
314
+ var(--td-lineage-menu-transition-easing),
315
+ box-shadow var(--td-lineage-menu-transition-duration)
316
+ var(--td-lineage-menu-transition-easing),
317
+ color var(--td-lineage-menu-transition-duration)
318
+ var(--td-lineage-menu-transition-easing);
319
+
320
+ .icon {
321
+ margin: 0;
322
+ font-size: 15px;
323
+ line-height: 1;
324
+ }
325
+ }
326
+
327
+ &[aria-selected="true"] &-icon {
328
+ border-color: #002057;
329
+ background: #002057;
330
+ color: #ffffff;
331
+ box-shadow: 0 8px 18px rgba(0, 32, 87, 0.2);
332
+ }
333
+
334
+ &:not([aria-selected="true"]):hover &-icon {
335
+ border-color: rgba(255, 255, 255, 0.36);
336
+ background: rgba(255, 255, 255, 0.12);
337
+ box-shadow: none;
338
+ color: #ffffff;
339
+ }
340
+
341
+ &-label {
342
+ min-width: 0;
343
+ overflow: hidden;
344
+ text-overflow: ellipsis;
345
+ white-space: nowrap;
346
+ }
347
+
348
+ &-count {
349
+ display: inline-flex;
350
+ flex: 0 0 auto;
351
+ min-width: 16px;
352
+ align-items: center;
353
+ justify-content: center;
354
+ margin-left: 5px;
355
+ padding: 1px 4px;
356
+ border-radius: 6px;
357
+ background: #edf0f4;
358
+ color: #697386;
359
+ font-size: 9px;
360
+ line-height: 1.2;
361
+ transition:
362
+ background-color var(--td-lineage-menu-transition-duration)
363
+ var(--td-lineage-menu-transition-easing),
364
+ color var(--td-lineage-menu-transition-duration)
365
+ var(--td-lineage-menu-transition-easing);
366
+ }
367
+
368
+ &[aria-selected="true"] &-count {
369
+ background: #edf4ff;
370
+ color: #002057;
371
+ }
372
+
373
+ &:not([aria-selected="true"]):hover &-count {
374
+ background: rgba(255, 255, 255, 0.16);
375
+ color: #ffffff !important;
376
+ }
377
+ }
378
+
379
+ &__sidebar-content {
380
+ min-width: 0;
381
+ padding: 20px;
382
+ border: 1px solid #d7dde6;
383
+ border-radius: 8px;
384
+ background: #ffffff;
385
+ box-shadow: 0 12px 36px rgba(21, 26, 36, 0.14);
386
+ overflow: visible;
387
+
388
+ &--events {
389
+ overflow: visible;
390
+ }
391
+ }
392
+
393
+ &__workspace--sidebar-collapsed {
394
+ .lineage-view__sidebar {
395
+ width: var(--td-lineage-sidebar-collapsed-width);
396
+ min-height: 0;
397
+ overflow: visible;
398
+ }
399
+
400
+ .lineage-view__sidebar-panel {
401
+ position: absolute;
402
+ top: 0;
403
+ left: 0;
404
+ opacity: 0;
405
+ pointer-events: none;
406
+ transform: translateX(-16px);
407
+ transition:
408
+ opacity var(--td-lineage-menu-transition-duration)
409
+ var(--td-lineage-menu-transition-easing),
410
+ transform var(--td-lineage-menu-transition-duration)
411
+ var(--td-lineage-menu-transition-easing),
412
+ visibility 0ms linear var(--td-lineage-menu-transition-duration);
413
+ visibility: hidden;
414
+ }
415
+
416
+ .lineage-view__sidebar-rail.ui.button {
417
+ display: flex;
418
+ }
419
+ }
420
+
421
+ &__sidebar-rail.ui.button {
422
+ position: relative;
423
+ display: none;
424
+ width: auto;
425
+ padding: 0 12px;
426
+ height: 40px;
427
+ min-width: 40px;
428
+ min-height: 40px;
429
+ margin: 0;
430
+ flex-direction: row;
431
+ align-items: center;
432
+ justify-content: flex-start;
433
+ gap: 8px;
434
+ border: 1px solid #d7dde6;
435
+ border-radius: var(--td-graph-border-radius, 8px);
436
+ background: #ffffff !important;
437
+ box-shadow: 0 12px 36px rgba(21, 26, 36, 0.14);
438
+ color: #697386;
439
+ overflow: hidden;
440
+ transition:
441
+ background-color var(--td-lineage-menu-transition-duration)
442
+ var(--td-lineage-menu-transition-easing),
443
+ border-color var(--td-lineage-menu-transition-duration)
444
+ var(--td-lineage-menu-transition-easing),
445
+ box-shadow var(--td-lineage-menu-transition-duration)
446
+ var(--td-lineage-menu-transition-easing),
447
+ color var(--td-lineage-menu-transition-duration)
448
+ var(--td-lineage-menu-transition-easing);
449
+
450
+ > .icon {
451
+ flex: 0 0 auto;
452
+ order: 2;
453
+ margin: 0;
454
+ position: relative;
455
+ z-index: 1;
456
+ }
457
+
458
+ &:hover,
459
+ &:focus {
460
+ border-color: #002057;
461
+ background: #002057 !important;
462
+ color: #ffffff !important;
463
+ }
464
+
465
+ &:hover > .icon,
466
+ &:focus > .icon,
467
+ &:hover span,
468
+ &:focus span {
469
+ color: #ffffff !important;
470
+ }
471
+
472
+ span {
473
+ position: relative;
474
+ z-index: 1;
475
+ font-size: 12px;
476
+ font-weight: 700;
477
+ line-height: 1;
478
+ white-space: nowrap;
479
+ }
480
+ }
481
+
482
+ &__sidebar-rail--hint.ui.button {
483
+ border-color: #d7dde6;
484
+ background: #ffffff !important;
485
+ }
486
+
487
+ &__sidebar-rail--hint-on.ui.button {
488
+ border-color: #ed5c17;
489
+ background: #fff1eb !important;
490
+ box-shadow: 0 12px 36px rgba(237, 92, 23, 0.24);
491
+ color: #ed5c17;
492
+ }
493
+
494
+ &__main {
495
+ width: 100%;
496
+ min-width: 0;
497
+ }
498
+
499
+ .ui.dropdown .menu,
500
+ .ui.dropdown .menu.visible,
501
+ .fix-dropdown-selector.ui.dropdown .menu,
502
+ .fix-dropdown-selector.ui.dropdown .menu.visible {
503
+ z-index: 4000 !important;
504
+ }
505
+
506
+ @media (prefers-reduced-motion: reduce) {
507
+ &__sidebar,
508
+ &__sidebar-panel,
509
+ &__sidebar-toggle.ui.button,
510
+ &__sidebar-tab,
511
+ &__sidebar-tab-icon,
512
+ &__sidebar-tab-count,
513
+ &__sidebar-rail.ui.button {
514
+ transition: none;
515
+ }
516
+ }
517
+
518
+ @media (max-width: 767px) {
519
+ &__header {
520
+ align-items: flex-start;
521
+ }
522
+
523
+ &__workspace {
524
+ display: grid;
525
+ grid-template-columns: 1fr;
526
+ }
527
+
528
+ &__sidebar {
529
+ position: static;
530
+ width: 100%;
531
+ max-height: none;
532
+ min-height: 0;
533
+ }
534
+
535
+ &__workspace--sidebar-collapsed &__sidebar {
536
+ min-height: 48px;
537
+ }
538
+
539
+ &__sidebar-panel {
540
+ width: 100%;
541
+ }
542
+
543
+ &__sidebar-header {
544
+ display: grid;
545
+ grid-template-columns: minmax(0, 1fr) 40px;
546
+ gap: 8px;
547
+ padding: 0;
548
+ }
549
+
550
+ &__sidebar-toggle.ui.button {
551
+ position: static;
552
+ }
553
+
554
+ &__sidebar-tab {
555
+ padding-inline: 4px;
556
+ gap: 4px;
557
+ }
558
+
559
+ &__sidebar-tab-icon {
560
+ display: none;
561
+ }
562
+
563
+ &__sidebar-tab-label {
564
+ white-space: normal;
565
+ overflow: visible;
566
+ }
567
+
568
+ &__sidebar-rail.ui.button {
569
+ width: auto;
570
+ height: 40px;
571
+ min-height: 40px;
572
+ flex-direction: row;
573
+ justify-content: flex-start;
574
+ padding: 0 12px;
575
+ gap: 8px;
576
+ }
577
+ }
578
+ }
579
+
580
+ .lineage-toolbar {
581
+ margin-bottom: 16px;
582
+ overflow: visible;
583
+
584
+ &--panel {
585
+ margin-bottom: 0;
586
+ }
587
+
588
+ &__title {
589
+ padding-bottom: 8px !important;
590
+ }
591
+
592
+ &__form {
593
+ display: grid;
594
+ gap: 12px;
595
+ overflow: visible;
596
+ }
597
+
598
+ &__fields {
599
+ display: grid;
600
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
601
+ gap: 8px;
602
+ align-items: start;
603
+ overflow: visible;
604
+ }
605
+
606
+ &__controls {
607
+ display: grid;
608
+ grid-template-columns: minmax(0, 1fr);
609
+ gap: 8px;
610
+ align-items: end;
611
+ }
612
+
613
+ &__levels {
614
+ display: flex;
615
+ min-width: 0;
616
+ flex-direction: column;
617
+ align-items: flex-start;
618
+ gap: 6px;
619
+
620
+ .ui.header {
621
+ margin: 0;
622
+ color: #435064;
623
+ font-size: 12px;
624
+ font-weight: 700;
625
+ line-height: 1.2;
626
+ }
627
+ }
628
+
629
+ &__level-options.inline.fields {
630
+ display: flex;
631
+ width: 100%;
632
+ min-width: 0;
633
+ flex-wrap: wrap;
634
+ align-items: center;
635
+ gap: 4px 10px;
636
+ margin: 0;
637
+
638
+ .field {
639
+ margin: 0;
640
+ }
641
+
642
+ label {
643
+ font-size: 11px;
644
+ }
645
+ }
646
+
647
+ &__level-option {
648
+ padding-right: 8px;
649
+ }
650
+
651
+ &__level-depth.field {
652
+ display: inline-flex;
653
+ min-width: 0;
654
+ align-items: center;
655
+ gap: 3px;
656
+
657
+ .ui.radio.checkbox {
658
+ margin: 0;
659
+ }
660
+ }
661
+
662
+ &__level-input.field {
663
+ width: 46px;
664
+ min-width: 46px;
665
+ margin: 0 !important;
666
+
667
+ > .field {
668
+ width: 46px;
669
+ margin: 0;
670
+ }
671
+
672
+ .ui.input,
673
+ .ui.input > input,
674
+ input {
675
+ width: 46px;
676
+ min-width: 46px;
677
+ max-width: 46px;
678
+ }
679
+
680
+ .ui.input > input,
681
+ input {
682
+ height: 30px;
683
+ padding: 5px 6px;
684
+ text-align: center;
685
+ }
686
+
687
+ input[type="number"]::-webkit-inner-spin-button,
688
+ input[type="number"]::-webkit-outer-spin-button {
689
+ -webkit-appearance: none;
690
+ margin: 0;
691
+ }
692
+
693
+ input[type="number"] {
694
+ -moz-appearance: textfield;
695
+ }
696
+ }
697
+
698
+ &__actions {
699
+ display: grid;
700
+ grid-column: 1 / -1;
701
+ grid-template-columns: repeat(2, minmax(0, 1fr));
702
+ gap: 8px;
703
+
704
+ .ui.button {
705
+ margin: 0;
706
+ transition:
707
+ background-color var(--td-lineage-menu-transition-duration)
708
+ var(--td-lineage-menu-transition-easing),
709
+ border-color var(--td-lineage-menu-transition-duration)
710
+ var(--td-lineage-menu-transition-easing),
711
+ box-shadow var(--td-lineage-menu-transition-duration)
712
+ var(--td-lineage-menu-transition-easing),
713
+ color var(--td-lineage-menu-transition-duration)
714
+ var(--td-lineage-menu-transition-easing);
715
+ }
716
+
717
+ > span,
718
+ > span > .ui.button {
719
+ display: block;
720
+ width: 100%;
721
+ }
722
+ }
723
+
724
+ @media (prefers-reduced-motion: reduce) {
725
+ &__actions .ui.button {
726
+ transition: none;
727
+ }
728
+ }
729
+
730
+ @media (max-width: 767px) {
731
+ &__fields {
732
+ grid-template-columns: 1fr;
733
+ }
734
+
735
+ &__controls {
736
+ grid-template-columns: 1fr;
737
+ }
738
+
739
+ &__actions {
740
+ justify-content: stretch;
741
+
742
+ .ui.button {
743
+ flex: 1 1 auto;
744
+ }
745
+ }
746
+ }
747
+ }
748
+
749
+ .lineage-selection-column {
750
+ min-width: 0;
751
+ overflow: visible;
752
+
753
+ &--resource {
754
+ grid-column: 1 / -1;
755
+ }
756
+
757
+ @media (max-width: 767px) {
758
+ &--resource {
759
+ grid-column: span 1;
760
+ }
761
+ }
762
+ }
763
+
764
+ .lineage-resource-field {
765
+ display: grid;
766
+ grid-template-columns: minmax(0, 1fr) auto;
767
+ gap: 6px;
768
+ align-items: start;
769
+
770
+ @media (max-width: 767px) {
771
+ grid-template-columns: minmax(0, 1fr) auto;
772
+ }
773
+ }
774
+
775
+ .lineage-resource-toggle {
776
+ display: inline-flex;
777
+ width: auto;
778
+ min-width: 34px;
779
+ height: 34px;
780
+ align-items: center;
781
+ justify-content: center;
782
+ margin: 0;
783
+ padding: 0 6px;
784
+ border-radius: 6px;
785
+ border: 1px solid rgba(34, 36, 38, 0.15);
786
+ background: #e0e1e2;
787
+ color: rgba(0, 0, 0, 0.6);
788
+ cursor: pointer;
789
+ font-size: 13px;
790
+ transition:
791
+ background-color var(--td-lineage-menu-transition-duration)
792
+ var(--td-lineage-menu-transition-easing),
793
+ border-color var(--td-lineage-menu-transition-duration)
794
+ var(--td-lineage-menu-transition-easing),
795
+ box-shadow var(--td-lineage-menu-transition-duration)
796
+ var(--td-lineage-menu-transition-easing),
797
+ color var(--td-lineage-menu-transition-duration)
798
+ var(--td-lineage-menu-transition-easing);
799
+ white-space: nowrap;
800
+
801
+ &:disabled {
802
+ opacity: 0.45;
803
+ cursor: not-allowed;
804
+ }
805
+
806
+ &-content {
807
+ display: inline-flex;
808
+ align-items: center;
809
+ gap: 4px;
810
+ }
811
+
812
+ .icon {
813
+ width: 1em;
814
+ height: 1em;
815
+ margin: 0;
816
+ font-size: 14px;
817
+ line-height: 1;
818
+ }
819
+
820
+ &--add {
821
+ border-color: #ed5c17;
822
+ background: #ed5c17;
823
+ box-shadow: 0 0 0 1px #ed5c17 inset;
824
+ color: #ffffff;
825
+
826
+ &:hover,
827
+ &:focus {
828
+ border-color: #ed5c17;
829
+ background: #ed5c17;
830
+ box-shadow: 0 0 0 1px #ed5c17 inset;
831
+ color: #ffffff;
832
+ }
833
+
834
+ .icon {
835
+ color: #ffffff;
836
+ }
837
+ }
838
+
839
+ @media (prefers-reduced-motion: reduce) {
840
+ transition: none;
841
+ }
842
+ }
843
+
844
+ .lineage-domain-selector.ui.dropdown .menu > .item.disabled {
845
+ background-color: #f6f8fb;
846
+ color: #a2a9b8;
847
+ cursor: not-allowed;
848
+ }
849
+
850
+ .lineage-domain-selector-skeleton {
851
+ position: relative;
852
+ display: flex;
853
+ min-height: 34px;
854
+ align-items: center;
855
+ justify-content: space-between;
856
+ padding: 8px 10px;
857
+ border: 1px solid #d7dde6;
858
+ border-radius: 6px;
859
+ background: #ffffff;
860
+ overflow: hidden;
861
+
862
+ &::before {
863
+ position: absolute;
864
+ inset: 0;
865
+ background: linear-gradient(
866
+ 90deg,
867
+ rgba(246, 248, 251, 0) 0%,
868
+ rgba(246, 248, 251, 0.88) 50%,
869
+ rgba(246, 248, 251, 0) 100%
870
+ );
871
+ content: "";
872
+ transform: translateX(-100%);
873
+ animation: lineage-domain-skeleton 1100ms ease-in-out infinite;
874
+ }
875
+
876
+ &__label {
877
+ width: min(150px, 62%);
878
+ height: 10px;
879
+ border-radius: 999px;
880
+ background: #dfe5ee;
881
+ }
882
+
883
+ &__icon {
884
+ width: 10px;
885
+ height: 10px;
886
+ border-right: 2px solid #b8c1cf;
887
+ border-bottom: 2px solid #b8c1cf;
888
+ transform: rotate(45deg);
889
+ }
890
+ }
891
+
892
+ @keyframes lineage-domain-skeleton {
893
+ to {
894
+ transform: translateX(100%);
895
+ }
896
+ }
897
+
898
+ .lineage-column-dropdown.ui.dropdown .menu.visible {
899
+ width: min(480px, calc(100vw - 80px));
900
+ column-gap: 0;
901
+ column-width: 220px;
902
+ z-index: 4000;
903
+
904
+ > .item {
905
+ break-inside: avoid;
906
+ }
907
+ }
908
+
909
+ .lineage-resource-selector.ui.multiple.dropdown > .label {
910
+ max-width: 180px;
911
+ overflow: hidden;
912
+ text-overflow: ellipsis;
913
+ white-space: nowrap;
914
+ }
915
+
916
+ .lineage-events-panel {
917
+ display: flex;
918
+ min-height: 100%;
919
+ flex-direction: column;
920
+ gap: 10px;
921
+
922
+ .lineage-view__sidebar-content--events & {
923
+ &__scrollable {
924
+ --td-lineage-events-scrollbar-width: 16px;
925
+ --td-lineage-events-sidebar-offset: 21px;
926
+
927
+ box-sizing: border-box;
928
+ max-height: calc(var(--td-graph-container-height) - 98px);
929
+ padding-top: 4px;
930
+ width: calc(
931
+ 100% + var(--td-lineage-events-scrollbar-width) +
932
+ var(--td-lineage-events-sidebar-offset)
933
+ );
934
+ margin-right: calc(
935
+ (
936
+ var(--td-lineage-events-scrollbar-width) +
937
+ var(--td-lineage-events-sidebar-offset)
938
+ ) *
939
+ -1
940
+ );
941
+ overflow-y: scroll;
942
+ padding-right: calc(
943
+ var(--td-lineage-events-scrollbar-width) +
944
+ var(--td-lineage-events-sidebar-offset)
945
+ );
946
+ scrollbar-color: #002057 transparent;
947
+ scrollbar-width: thin;
948
+
949
+ &::-webkit-scrollbar {
950
+ width: 6px;
951
+ }
952
+
953
+ &::-webkit-scrollbar-track {
954
+ border-radius: 3px;
955
+ background: transparent;
956
+ }
957
+
958
+ &::-webkit-scrollbar-thumb {
959
+ border-radius: 3px;
960
+ background: #002057;
961
+
962
+ &:hover {
963
+ background: #0040a8;
964
+ }
965
+ }
966
+ }
967
+
968
+ &__list {
969
+ gap: 12px;
970
+ }
971
+ }
972
+
973
+ &__header {
974
+ display: flex;
975
+ align-items: center;
976
+ justify-content: space-between;
977
+ color: #202a3a;
978
+ font-size: 13px;
979
+ font-weight: 800;
980
+ letter-spacing: 0.08em;
981
+ line-height: 1.2;
982
+ text-transform: uppercase;
983
+
984
+ .icon {
985
+ margin: 0;
986
+ color: #58647a;
987
+ font-size: 18px;
988
+ }
989
+ }
990
+
991
+ &__list {
992
+ display: flex;
993
+ flex-direction: column;
994
+ gap: 8px;
995
+ }
996
+
997
+ &__item {
998
+ padding: 10px;
999
+ border: 1px solid #e8edf3;
1000
+ border-radius: 6px;
1001
+ background: #ffffff;
1002
+ box-shadow: 0 4px 14px rgba(21, 26, 36, 0.04);
1003
+ transition:
1004
+ border-color var(--td-lineage-menu-transition-duration)
1005
+ var(--td-lineage-menu-transition-easing),
1006
+ background-color var(--td-lineage-menu-transition-duration)
1007
+ var(--td-lineage-menu-transition-easing),
1008
+ box-shadow var(--td-lineage-menu-transition-duration)
1009
+ var(--td-lineage-menu-transition-easing),
1010
+ transform var(--td-lineage-menu-transition-duration)
1011
+ var(--td-lineage-menu-transition-easing);
1012
+
1013
+ &:hover {
1014
+ border-color: #d7dde6;
1015
+ background: #ffffff;
1016
+ }
1017
+
1018
+ &--clickable {
1019
+ cursor: pointer;
1020
+
1021
+ &:hover {
1022
+ border-color: #002057;
1023
+ box-shadow: 0 6px 20px rgba(21, 26, 36, 0.1);
1024
+ transform: translateY(-1px);
1025
+ }
1026
+
1027
+ &:focus-visible {
1028
+ outline: 2px solid #002057;
1029
+ outline-offset: 2px;
1030
+ }
1031
+ }
1032
+
1033
+ &--active {
1034
+ border-color: #3b82f6;
1035
+ background: #eff6ff;
1036
+ box-shadow:
1037
+ 0 0 0 1px rgba(59, 130, 246, 0.22),
1038
+ 0 6px 20px rgba(37, 99, 235, 0.14);
1039
+
1040
+ &:hover {
1041
+ border-color: #2563eb;
1042
+ background: #dbeafe;
1043
+ }
1044
+ }
1045
+
1046
+ &--lineage {
1047
+ .lineage-events-panel__row {
1048
+ border-top: 0;
1049
+ margin: 6px -10px -10px;
1050
+ background: rgba(237, 92, 23, 0.05);
1051
+ }
1052
+
1053
+ .lineage-events-panel__type {
1054
+ color: #ed5c17;
1055
+
1056
+ .icon {
1057
+ color: #ed5c17;
1058
+ }
1059
+ }
1060
+ }
1061
+
1062
+ &--impact {
1063
+ .lineage-events-panel__row {
1064
+ border-top: 0;
1065
+ margin: 6px -10px -10px;
1066
+ background: rgba(37, 99, 235, 0.05);
1067
+ }
1068
+
1069
+ .lineage-events-panel__type {
1070
+ color: #2563eb;
1071
+
1072
+ .icon {
1073
+ color: #2563eb;
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+
1079
+ &__item-header {
1080
+ display: flex;
1081
+ align-items: center;
1082
+ justify-content: space-between;
1083
+ gap: 12px;
1084
+ }
1085
+
1086
+ &__item-title {
1087
+ display: inline-flex;
1088
+ min-height: 22px;
1089
+ min-width: 0;
1090
+ align-items: center;
1091
+ gap: 6px;
1092
+ padding: 0;
1093
+ color: #002057;
1094
+ font-size: 15px;
1095
+ font-weight: 700;
1096
+ line-height: 1.4;
1097
+
1098
+ .icon {
1099
+ flex: 0 0 auto;
1100
+ margin: 0;
1101
+ color: #58647a;
1102
+ }
1103
+
1104
+ span {
1105
+ min-width: 0;
1106
+ overflow: hidden;
1107
+ text-overflow: ellipsis;
1108
+ display: -webkit-box;
1109
+ -webkit-box-orient: vertical;
1110
+ -webkit-line-clamp: 2;
1111
+ overflow-wrap: anywhere;
1112
+ }
1113
+ }
1114
+
1115
+ &__meta {
1116
+ display: flex;
1117
+ flex-wrap: wrap;
1118
+ gap: 4px 10px;
1119
+ margin-top: 7px;
1120
+ color: #526176;
1121
+ font-size: 12px;
1122
+ font-weight: 800;
1123
+ line-height: 1.25;
1124
+ }
1125
+
1126
+ &__scope {
1127
+ display: -webkit-box;
1128
+ margin: 6px 0 0;
1129
+ overflow: hidden;
1130
+ color: #66758a;
1131
+ font-family: inherit;
1132
+ font-size: 12px;
1133
+ font-weight: 700;
1134
+ line-height: 1.35;
1135
+ -webkit-box-orient: vertical;
1136
+ -webkit-line-clamp: 2;
1137
+ }
1138
+
1139
+ &__row {
1140
+ padding: 8px;
1141
+ border-radius: 0 0 6px 6px;
1142
+ display: grid;
1143
+ align-items: center;
1144
+ padding-top: 6px;
1145
+ border-top: 1px solid #eef2f6;
1146
+ }
1147
+
1148
+ &__row-main {
1149
+ display: flex;
1150
+ min-width: 0;
1151
+ flex-wrap: wrap;
1152
+ align-items: center;
1153
+ gap: 6px 10px;
1154
+ }
1155
+
1156
+ &__type {
1157
+ display: inline-flex;
1158
+ flex: 1 1 96px;
1159
+ min-width: 0;
1160
+ align-items: center;
1161
+ gap: 6px;
1162
+ overflow: hidden;
1163
+ color: #2b3444;
1164
+ font-size: 12px;
1165
+ font-weight: 800;
1166
+ line-height: 1.4;
1167
+ text-overflow: ellipsis;
1168
+ white-space: nowrap;
1169
+
1170
+ .icon {
1171
+ flex: 0 0 auto;
1172
+ margin: 0;
1173
+ color: #697386;
1174
+ font-size: 12px;
1175
+ }
1176
+ }
1177
+
1178
+ &__date {
1179
+ flex: 1 1 96px;
1180
+ min-width: 0;
1181
+ overflow: hidden;
1182
+ color: #58647a;
1183
+ font-size: 12px;
1184
+ font-weight: 700;
1185
+ line-height: 1.4;
1186
+ text-align: right;
1187
+ text-overflow: ellipsis;
1188
+ white-space: nowrap;
1189
+ }
1190
+
1191
+ &__card-status {
1192
+ display: inline-flex;
1193
+ flex: 0 0 auto;
1194
+ align-items: center;
1195
+ gap: 4px;
1196
+ color: #697386;
1197
+ font-size: 12px;
1198
+ font-weight: 800;
1199
+ line-height: 1;
1200
+ text-transform: uppercase;
1201
+
1202
+ &--completed {
1203
+ color: #159a6a;
1204
+ }
1205
+
1206
+ &--failed {
1207
+ color: #e23d5b;
1208
+ }
1209
+ }
1210
+
1211
+ &__card-status-trigger {
1212
+ display: inline-flex;
1213
+ align-items: center;
1214
+ gap: 4px;
1215
+ padding: 0;
1216
+ border: 0;
1217
+ background: transparent;
1218
+ color: inherit;
1219
+ cursor: inherit;
1220
+ font-size: inherit;
1221
+ font-weight: inherit;
1222
+ line-height: inherit;
1223
+ text-transform: inherit;
1224
+
1225
+ .icon {
1226
+ margin: 0;
1227
+ font-size: 14px;
1228
+ }
1229
+ }
1230
+
1231
+ &__card-status--failed &__card-status-trigger {
1232
+ cursor: pointer;
1233
+ }
1234
+
1235
+ &__status-popup.ui.popup {
1236
+ max-width: min(480px, calc(100vw - 32px));
1237
+ max-height: min(320px, calc(100dvh - 32px));
1238
+ font-family: inherit;
1239
+ font-size: 13px;
1240
+ line-height: 1.5;
1241
+ word-break: break-word;
1242
+ }
1243
+
1244
+ &__status-popup-id {
1245
+ display: block;
1246
+ color: #002057;
1247
+ font-size: 18px;
1248
+ font-weight: 800;
1249
+ line-height: 1.3;
1250
+ word-break: break-word;
1251
+ }
1252
+
1253
+ &__status-popup-divider {
1254
+ height: 1px;
1255
+ margin: 8px 0;
1256
+ border: 0;
1257
+ background: #e5eaf0;
1258
+ }
1259
+
1260
+ &__status-popup-error {
1261
+ max-height: min(240px, calc(100dvh - 96px));
1262
+ overflow: auto;
1263
+ white-space: pre-wrap;
1264
+ word-break: break-word;
1265
+ }
1266
+
1267
+ &__empty {
1268
+ display: flex;
1269
+ min-height: 180px;
1270
+ flex: 1 1 auto;
1271
+ flex-direction: column;
1272
+ align-items: center;
1273
+ justify-content: center;
1274
+ gap: 8px;
1275
+ padding: 24px 8px;
1276
+ color: #a2a9b8;
1277
+ font-size: 11px;
1278
+ font-weight: 600;
1279
+ text-align: center;
1280
+
1281
+ .icon {
1282
+ margin: 0;
1283
+ color: #cbd3df;
1284
+ font-size: 24px;
1285
+ }
1286
+ }
1287
+
1288
+ @media (prefers-reduced-motion: reduce) {
1289
+ &__item,
1290
+ &__item--clickable {
1291
+ transition: none;
1292
+ }
1293
+ }
1294
+ }
1295
+
1296
+ .lineage-graph {
1297
+ margin: 0 !important;
1298
+ }
1299
+ .lineage-graph > .row {
1300
+ padding-top: 0 !important;
1301
+ padding-right: 0 !important;
1302
+ padding-left: 0 !important;
1303
+ }
1304
+ .lineage-graph > .row > .column {
1305
+ padding-right: 0 !important;
1306
+ padding-left: 0 !important;
1307
+ }
1308
+ .lineage-graph__canvas {
1309
+ position: relative;
1310
+ border: 1px solid #d7dde6;
1311
+ border-radius: 8px;
1312
+ background: #f8fafc;
1313
+ box-shadow: none;
1314
+ overflow: hidden;
1315
+ }
1316
+ .lineage-graph__loading {
1317
+ position: absolute;
1318
+ inset: 0;
1319
+ z-index: 10;
1320
+ display: flex;
1321
+ align-items: center;
1322
+ justify-content: center;
1323
+ background: rgba(248, 250, 252, 0.45);
1324
+ }
1325
+ .lineage-graph__loading-card {
1326
+ display: flex;
1327
+ flex-direction: column;
1328
+ align-items: center;
1329
+ gap: 6px;
1330
+ min-width: 240px;
1331
+ max-width: 380px;
1332
+ padding: 22px 30px;
1333
+ border: 1px solid #e2e6ed;
1334
+ border-radius: 8px;
1335
+ background: rgba(255, 255, 255, 0.98);
1336
+ box-shadow: 0 18px 40px rgba(21, 26, 36, 0.18);
1337
+ backdrop-filter: blur(10px);
1338
+ -webkit-backdrop-filter: blur(10px);
1339
+ text-align: center;
1340
+ }
1341
+ .lineage-graph__loading-spinner {
1342
+ width: 26px;
1343
+ height: 26px;
1344
+ margin-bottom: 4px;
1345
+ border: 3px solid rgba(237, 92, 23, 0.18);
1346
+ border-top-color: var(--td-graph-accent, #ed5c17);
1347
+ border-radius: 50%;
1348
+ animation: lineage-graph-spin 0.8s linear infinite;
1349
+ }
1350
+ @keyframes lineage-graph-spin {
1351
+ to {
1352
+ transform: rotate(360deg);
1353
+ }
1354
+ }
1355
+ .lineage-graph__loading-title {
1356
+ margin: 0;
1357
+ color: #151a24;
1358
+ font-size: 14px;
1359
+ font-weight: 700;
1360
+ }
1361
+ .lineage-graph__loading-note {
1362
+ margin: 0;
1363
+ color: #435064;
1364
+ font-size: 12px;
1365
+ line-height: 1.5;
1366
+ }
1367
+ .lineage-graph__loading-note .graph-hash {
1368
+ color: var(--td-graph-accent, #ed5c17);
1369
+ font-size: 11px;
1370
+ }
1371
+ @media (prefers-reduced-motion: reduce) {
1372
+ .lineage-graph__loading-spinner {
1373
+ animation-duration: 1.6s;
1374
+ }
1375
+ }
1376
+
1377
+ .lineage-graph__stage--lineage {
1378
+ --td-graph-edge-active: #ed5c17;
1379
+ --td-lineage-interaction-bg: #fff7ed;
1380
+ --td-lineage-selected-text: #431407;
1381
+ --td-lineage-interaction-fill: #ffedd5;
1382
+ }
1383
+ .lineage-graph__stage--impact {
1384
+ --td-graph-edge-active: #2563eb;
1385
+ --td-lineage-interaction-bg: #eff6ff;
1386
+ --td-lineage-selected-text: #ffffff;
1387
+ --td-lineage-interaction-fill: #dbeafe;
1388
+ --td-lineage-interaction-rgb: 37, 99, 235;
1389
+ --td-lineage-interaction-shadow-rgb: 30, 64, 175;
1390
+ }
1391
+
1392
+ // Size overlay panels against the canvas, including sidebar/page gutters.
1393
+ .lineage-graph__stage-surface {
1394
+ container-type: inline-size;
1395
+ }
1396
+
1397
+ .lineage-graph__stage .react-flow,
1398
+ .lineage-graph__stage-surface.react-flow,
1399
+ .lineage-graph__stage-surface .react-flow {
1400
+ /* Type classes keep hover and selection colors out of inline styles. */
1401
+ --xy-edge-stroke-default: #b0b8c8;
1402
+ --xy-edge-stroke-width-default: 0.5;
1403
+ --xy-edge-stroke-selected-default: var(--td-graph-edge-active);
1404
+ --xy-connectionline-stroke-default: var(--td-graph-edge-active);
1405
+ --xy-connectionline-stroke-width-default: 1.6;
1406
+ }
1407
+ .lineage-graph__stage-surface.react-flow,
1408
+ .lineage-graph__stage-surface .react-flow {
1409
+ --td-graph-accent: var(--td-graph-edge-active, #ed5c17);
1410
+ /* Purple identifies connections that carry lineage metadata. */
1411
+ --td-graph-edge-metadata: #7c3aed;
1412
+ }
1413
+ .lineage-graph__stage .react-flow__pane,
1414
+ .lineage-graph__stage-surface .react-flow__pane {
1415
+ cursor: grab;
1416
+ }
1417
+ .lineage-graph__stage .react-flow__pane.dragging,
1418
+ .lineage-graph__stage-surface .react-flow__pane.dragging {
1419
+ cursor: grabbing;
1420
+ }
1421
+ .lineage-graph__stage .react-flow__node,
1422
+ .lineage-graph__stage-surface .react-flow__node {
1423
+ outline: none;
1424
+ box-shadow: none;
1425
+ transition: opacity 140ms ease;
1426
+ }
1427
+ .lineage-graph__stage .react-flow__node-lineageGroup,
1428
+ .lineage-graph__stage-surface .react-flow__node-lineageGroup {
1429
+ border: 0 !important;
1430
+ background: transparent !important;
1431
+ }
1432
+ .lineage-graph__stage .react-flow__node:focus,
1433
+ .lineage-graph__stage .react-flow__node.selected,
1434
+ .lineage-graph__stage-surface .react-flow__node:focus,
1435
+ .lineage-graph__stage-surface .react-flow__node.selected {
1436
+ outline: none;
1437
+ box-shadow: none;
1438
+ }
1439
+ .lineage-graph__stage .react-flow__node:focus-visible,
1440
+ .lineage-graph__stage-surface .react-flow__node:focus-visible {
1441
+ border-radius: 8px;
1442
+ outline: 2px solid var(--td-graph-accent, #ed5c17);
1443
+ outline-offset: 4px;
1444
+ }
1445
+ .lineage-graph__stage .react-flow__node-lineageResource:focus-visible,
1446
+ .lineage-graph__stage .react-flow__node-lineageGroup:focus-visible,
1447
+ .lineage-graph__stage-surface .react-flow__node-lineageResource:focus-visible,
1448
+ .lineage-graph__stage-surface .react-flow__node-lineageGroup:focus-visible {
1449
+ outline: none;
1450
+ }
1451
+ .lineage-graph__stage .react-flow__node-lineageGroup .react-flow__handle,
1452
+ .lineage-graph__stage-surface
1453
+ .react-flow__node-lineageGroup
1454
+ .react-flow__handle {
1455
+ display: block !important;
1456
+ border-color: transparent !important;
1457
+ background: transparent !important;
1458
+ box-shadow: none !important;
1459
+ opacity: 0 !important;
1460
+ pointer-events: none !important;
1461
+ visibility: visible !important;
1462
+ }
1463
+ .lineage-graph__stage
1464
+ .td-lineage-group-node:hover
1465
+ > .react-flow__handle.td-lineage-node-handle--connected,
1466
+ .lineage-graph__stage-surface
1467
+ .td-lineage-group-node:hover
1468
+ > .react-flow__handle.td-lineage-node-handle--connected {
1469
+ border-color: #ffffff !important;
1470
+ background: var(--td-graph-accent, #f97316) !important;
1471
+ opacity: 1 !important;
1472
+ }
1473
+ .lineage-graph__stage .td-lineage-group-node__system-indicator,
1474
+ .lineage-graph__stage-surface .td-lineage-group-node__system-indicator {
1475
+ display: none !important;
1476
+ }
1477
+ .lineage-graph__stage .react-flow__edge,
1478
+ .lineage-graph__stage-surface .react-flow__edge {
1479
+ opacity: 1;
1480
+ }
1481
+ .lineage-graph__stage .td-graph-edge-label,
1482
+ .lineage-graph__stage-surface .td-graph-edge-label {
1483
+ padding: 3px 7px;
1484
+ border: 1px solid #d7dde6;
1485
+ border-radius: 6px;
1486
+ background: var(--td-graph-edge-label-bg, rgba(255, 255, 255, 0.96));
1487
+ box-shadow: 0 6px 18px rgba(21, 26, 36, 0.12);
1488
+ color: var(--td-graph-edge-label-text, #3a4150);
1489
+ font-weight: 600;
1490
+ line-height: 1.2;
1491
+ }
1492
+ .lineage-graph__stage .td-graph-edge,
1493
+ .lineage-graph__stage-surface .td-graph-edge {
1494
+ stroke-linecap: round;
1495
+ stroke-linejoin: round;
1496
+ stroke-width: 0.5px;
1497
+ stroke-opacity: 0.4;
1498
+ paint-order: stroke;
1499
+ transition:
1500
+ stroke-width 140ms ease,
1501
+ opacity 140ms ease,
1502
+ stroke-opacity 140ms ease;
1503
+ }
1504
+ .lineage-graph__stage .td-graph-edge--hovered,
1505
+ .lineage-graph__stage .td-graph-edge--source-bundle-hovered,
1506
+ .lineage-graph__stage-surface .td-graph-edge--hovered,
1507
+ .lineage-graph__stage-surface .td-graph-edge--source-bundle-hovered {
1508
+ stroke: var(--td-graph-edge-active, #ed5c17) !important;
1509
+ stroke-width: 2px !important;
1510
+ stroke-opacity: 1;
1511
+ filter: none;
1512
+ }
1513
+ .lineage-graph__stage .td-graph-edge--node-hovered,
1514
+ .lineage-graph__stage-surface .td-graph-edge--node-hovered {
1515
+ stroke: var(--td-graph-edge-active, #ed5c17) !important;
1516
+ stroke-width: 2px !important;
1517
+ stroke-opacity: 1;
1518
+ filter: none;
1519
+ }
1520
+ .lineage-graph__stage .td-graph-edge--containment,
1521
+ .lineage-graph__stage-surface .td-graph-edge--containment {
1522
+ stroke-opacity: 0.45;
1523
+ }
1524
+ .lineage-graph__stage .td-graph-edge--restrictive,
1525
+ .lineage-graph__stage-surface .td-graph-edge--restrictive {
1526
+ filter: none;
1527
+ }
1528
+ .lineage-graph__stage .td-graph-edge--focus-focused,
1529
+ .lineage-graph__stage-surface .td-graph-edge--focus-focused {
1530
+ stroke: var(--td-graph-edge-active, #ed5c17) !important;
1531
+ stroke-width: 3px !important;
1532
+ stroke-opacity: 1;
1533
+ filter: none;
1534
+ }
1535
+ .lineage-graph__stage .td-graph-edge--focus-dimmed,
1536
+ .lineage-graph__stage-surface .td-graph-edge--focus-dimmed {
1537
+ stroke: #b0b8c8 !important;
1538
+ stroke-opacity: 0.4;
1539
+ filter: none;
1540
+ }
1541
+ .lineage-graph__stage .td-graph-edge--focus-dimmed.td-graph-edge--node-hovered,
1542
+ .lineage-graph__stage-surface
1543
+ .td-graph-edge--focus-dimmed.td-graph-edge--node-hovered {
1544
+ stroke: var(--td-graph-edge-active, #ed5c17) !important;
1545
+ stroke-width: 2px !important;
1546
+ stroke-opacity: 1;
1547
+ }
1548
+ .lineage-graph__stage {
1549
+ position: relative;
1550
+ }
1551
+ .lineage-graph__toolbar {
1552
+ position: absolute;
1553
+ top: 12px;
1554
+ left: 12px;
1555
+ z-index: 20;
1556
+ display: flex;
1557
+ align-items: center;
1558
+ gap: 8px;
1559
+ padding: 6px;
1560
+ border: 1px solid #e2e6ed;
1561
+ border-radius: 8px;
1562
+ background: rgba(255, 255, 255, 0.96);
1563
+ box-shadow: 0 6px 18px rgba(21, 26, 36, 0.08);
1564
+ pointer-events: auto;
1565
+ }
1566
+ .lineage-graph__toolbar-search {
1567
+ width: 220px;
1568
+ }
1569
+ .lineage-graph__toolbar-search input {
1570
+ border-color: #d7dde6;
1571
+ font-size: 12px;
1572
+ }
1573
+ .lineage-graph__toolbar-search input:focus-visible {
1574
+ outline: 2px solid var(--td-graph-accent, #ed5c17);
1575
+ outline-offset: -2px;
1576
+ }
1577
+ .lineage-graph__toolbar-system-filter.ui.dropdown {
1578
+ min-width: 140px;
1579
+ border-color: #d7dde6;
1580
+ font-size: 12px;
1581
+ }
1582
+ .lineage-graph__toolbar-export.ui.button {
1583
+ margin: 0;
1584
+ }
1585
+ .lineage-graph__selection-control {
1586
+ position: absolute;
1587
+ top: 12px;
1588
+ right: 12px;
1589
+ z-index: 400;
1590
+ width: min(320px, calc(100vw - 40px));
1591
+ pointer-events: auto;
1592
+ animation: td-lineage-selection-control-in 160ms ease-out;
1593
+ }
1594
+ .lineage-graph__selection-control .lineage-graph__selected-node-trigger {
1595
+ width: auto;
1596
+ min-width: 34px;
1597
+ max-width: 260px;
1598
+ gap: 8px;
1599
+ padding: 0 10px;
1600
+ }
1601
+ .lineage-graph__selected-node-trigger > span {
1602
+ min-width: 0;
1603
+ overflow: hidden;
1604
+ font-size: 12px;
1605
+ font-weight: 700;
1606
+ line-height: 1.2;
1607
+ text-overflow: ellipsis;
1608
+ white-space: nowrap;
1609
+ }
1610
+ .lineage-graph__selected-node-trigger .icon {
1611
+ flex: 0 0 auto;
1612
+ margin: 0;
1613
+ }
1614
+ .lineage-graph__node-menu {
1615
+ position: absolute;
1616
+ top: calc(100% + 8px);
1617
+ right: 0;
1618
+ z-index: 40;
1619
+ width: 100%;
1620
+ padding: 16px 16px 14px;
1621
+ border: 1px solid #d7dde6;
1622
+ border-radius: 8px;
1623
+ background: rgba(255, 255, 255, 0.98);
1624
+ box-shadow: 0 18px 40px rgba(21, 26, 36, 0.18);
1625
+ overflow: hidden;
1626
+ backdrop-filter: blur(10px);
1627
+ pointer-events: auto;
1628
+ }
1629
+ @keyframes td-lineage-selection-control-in {
1630
+ from {
1631
+ opacity: 0;
1632
+ transform: translateY(-4px);
1633
+ }
1634
+
1635
+ to {
1636
+ opacity: 1;
1637
+ transform: translateY(0);
1638
+ }
1639
+ }
1640
+ .lineage-context-menu {
1641
+ display: flex;
1642
+ flex-direction: column;
1643
+ gap: 14px;
1644
+ }
1645
+ .lineage-context-menu__header {
1646
+ display: flex;
1647
+ min-width: 0;
1648
+ align-items: center;
1649
+ gap: 12px;
1650
+ padding-right: 28px;
1651
+ padding-bottom: 12px;
1652
+ border-bottom: 1px solid #eef2f6;
1653
+ }
1654
+ .lineage-context-menu__header-icon {
1655
+ display: inline-flex;
1656
+ width: 38px;
1657
+ height: 38px;
1658
+ flex: 0 0 auto;
1659
+ align-items: center;
1660
+ justify-content: center;
1661
+ border: 1px solid #002057;
1662
+ border-radius: 8px;
1663
+ background: #002057;
1664
+ box-shadow: 0 10px 22px rgba(0, 32, 87, 0.2);
1665
+ color: #ffffff;
1666
+ }
1667
+ .lineage-context-menu__header-icon .icon {
1668
+ margin: 0;
1669
+ font-size: 16px;
1670
+ }
1671
+ .lineage-context-menu__header-copy {
1672
+ display: flex;
1673
+ min-width: 0;
1674
+ flex-direction: column;
1675
+ gap: 3px;
1676
+ }
1677
+ .lineage-context-menu__eyebrow {
1678
+ color: #96a1b3;
1679
+ font-size: 10px;
1680
+ font-weight: 800;
1681
+ letter-spacing: 0.08em;
1682
+ line-height: 1.2;
1683
+ text-transform: uppercase;
1684
+ }
1685
+ .lineage-context-menu__title {
1686
+ overflow: hidden;
1687
+ color: #202a3a;
1688
+ font-size: 14px;
1689
+ font-weight: 800;
1690
+ line-height: 1.3;
1691
+ text-overflow: ellipsis;
1692
+ white-space: nowrap;
1693
+ }
1694
+ .lineage-context-menu--wide .lineage-context-menu__title {
1695
+ white-space: normal;
1696
+ }
1697
+ .lineage-context-menu__actions {
1698
+ display: flex;
1699
+ flex-direction: column;
1700
+ gap: 8px;
1701
+ }
1702
+ .lineage-context-menu__action,
1703
+ .lineage-context-menu__action--link {
1704
+ display: flex;
1705
+ min-width: 0;
1706
+ align-items: center;
1707
+ gap: 10px;
1708
+ min-height: 48px;
1709
+ padding: 10px 12px;
1710
+ border: 1px solid #e2e6ed;
1711
+ border-radius: 8px;
1712
+ background: #f8fafc;
1713
+ color: #435064;
1714
+ cursor: pointer;
1715
+ text-align: left;
1716
+ text-decoration: none;
1717
+ transition:
1718
+ transform 140ms ease,
1719
+ border-color 140ms ease,
1720
+ background-color 140ms ease,
1721
+ color 140ms ease,
1722
+ box-shadow 140ms ease;
1723
+ }
1724
+ .lineage-context-menu__action:hover,
1725
+ .lineage-context-menu__action--link:hover {
1726
+ border-color: #002057;
1727
+ background: #002057;
1728
+ box-shadow: 0 10px 24px rgba(0, 32, 87, 0.24);
1729
+ color: #ffffff;
1730
+ transform: translateY(-1px);
1731
+ }
1732
+ .lineage-context-menu__action--active {
1733
+ border-color: var(--td-graph-accent, #ed5c17);
1734
+ background: #fff7ed;
1735
+ box-shadow: 0 0 0 2px rgba(237, 92, 23, 0.16);
1736
+ color: #9a3412;
1737
+ }
1738
+ .lineage-context-menu__action--active .lineage-context-menu__action-icon {
1739
+ border-color: var(--td-graph-accent, #ed5c17);
1740
+ background: var(--td-graph-accent, #ed5c17);
1741
+ color: #ffffff;
1742
+ }
1743
+ .lineage-context-menu__action-icon {
1744
+ display: inline-flex;
1745
+ width: 32px;
1746
+ height: 32px;
1747
+ flex: 0 0 auto;
1748
+ align-items: center;
1749
+ justify-content: center;
1750
+ border: 1px solid #d7dde6;
1751
+ border-radius: 8px;
1752
+ background: #ffffff;
1753
+ color: #697386;
1754
+ transition:
1755
+ border-color 140ms ease,
1756
+ background-color 140ms ease,
1757
+ color 140ms ease,
1758
+ box-shadow 140ms ease;
1759
+ }
1760
+ .lineage-context-menu__action-icon .icon {
1761
+ margin: 0;
1762
+ font-size: 14px;
1763
+ }
1764
+ .lineage-context-menu__action:hover .lineage-context-menu__action-icon,
1765
+ .lineage-context-menu__action--link:hover .lineage-context-menu__action-icon {
1766
+ border-color: rgba(255, 255, 255, 0.36);
1767
+ background: rgba(255, 255, 255, 0.12);
1768
+ box-shadow: none;
1769
+ color: #ffffff;
1770
+ }
1771
+ .lineage-context-menu__action-copy {
1772
+ display: flex;
1773
+ min-width: 0;
1774
+ flex-direction: column;
1775
+ gap: 2px;
1776
+ }
1777
+ .lineage-context-menu__action-title {
1778
+ overflow: hidden;
1779
+ font-size: 12px;
1780
+ font-weight: 700;
1781
+ line-height: 1.25;
1782
+ text-overflow: ellipsis;
1783
+ white-space: nowrap;
1784
+ }
1785
+ .lineage-graph__node-menu-close.ui.button {
1786
+ position: absolute;
1787
+ top: 10px;
1788
+ right: 10px;
1789
+ z-index: 1;
1790
+ margin: 0;
1791
+ border: 1px solid #d7dde6 !important;
1792
+ border-radius: 8px !important;
1793
+ background: #ffffff !important;
1794
+ box-shadow: 0 8px 18px rgba(21, 26, 36, 0.08);
1795
+ color: #96a1b3 !important;
1796
+ }
1797
+ .lineage-graph__node-menu-close.ui.button:hover {
1798
+ border-color: #b6c4d8 !important;
1799
+ background: #f8fafc !important;
1800
+ color: #435064 !important;
1801
+ }
1802
+ .lineage-view .td-graph-container {
1803
+ border-radius: 8px;
1804
+ background: var(--td-graph-bg, #f8fafc);
1805
+ }
1806
+ .lineage-graph .react-flow__controls {
1807
+ overflow: visible;
1808
+ z-index: 400;
1809
+ }
1810
+ .lineage-view .td-graph-container .react-flow__controls {
1811
+ border: 1px solid #d7dde6;
1812
+ border-radius: 8px;
1813
+ background: rgba(255, 255, 255, 0.96);
1814
+ box-shadow: 0 8px 20px rgba(21, 26, 36, 0.1);
1815
+ overflow: visible;
1816
+ }
1817
+ .lineage-view .td-graph-container .react-flow__controls-button {
1818
+ width: 30px;
1819
+ height: 30px;
1820
+ border-bottom: 0;
1821
+ background: transparent;
1822
+ color: #435064;
1823
+ }
1824
+ .lineage-view .td-graph-container .react-flow__controls-button:hover {
1825
+ background: #f1f4f8;
1826
+ color: #151a24;
1827
+ }
1828
+ .lineage-view .td-graph-container .react-flow__controls-button:focus-visible {
1829
+ position: relative;
1830
+ z-index: 2;
1831
+ outline: 2px solid var(--td-graph-accent, #ed5c17);
1832
+ outline-offset: -2px;
1833
+ }
1834
+ .lineage-graph__empty {
1835
+ display: flex;
1836
+ min-height: var(--td-graph-container-height, 640px);
1837
+ flex-direction: column;
1838
+ align-items: center;
1839
+ justify-content: center;
1840
+ padding: 32px;
1841
+ background-color: var(--td-graph-bg, #f7f8fa);
1842
+ color: #697386;
1843
+ text-align: center;
1844
+ gap: 8px;
1845
+ }
1846
+ .lineage-graph__empty-icon {
1847
+ display: flex;
1848
+ align-items: center;
1849
+ justify-content: center;
1850
+ width: 48px;
1851
+ height: 48px;
1852
+ margin-bottom: 4px;
1853
+ border: 1px solid #e2e6ed;
1854
+ border-radius: 50%;
1855
+ background-color: #ffffff;
1856
+ color: var(--td-graph-accent, #ed5c17);
1857
+ opacity: 0.6;
1858
+
1859
+ svg {
1860
+ width: 22px;
1861
+ height: 22px;
1862
+ }
1863
+ }
1864
+ .lineage-graph__empty-title {
1865
+ margin: 0;
1866
+ color: #435064;
1867
+ font-size: 14px;
1868
+ font-weight: 600;
1869
+ line-height: 1.4;
1870
+ }
1871
+ .lineage-graph__empty-description {
1872
+ margin: 0;
1873
+ color: #697386;
1874
+ font-size: 12px;
1875
+ font-weight: 400;
1876
+ line-height: 1.5;
1877
+ max-width: 360px;
1878
+ }
1879
+ .lineage-graph__empty-hint {
1880
+ margin: 4px 0 0;
1881
+ color: #b0b8c8;
1882
+ font-size: 11px;
1883
+ font-weight: 400;
1884
+ line-height: 1.4;
1885
+ }
1886
+ .lineage-graph__legend-control {
1887
+ position: absolute;
1888
+ right: 100%;
1889
+ top: 0;
1890
+ margin-right: 10px;
1891
+ z-index: 10;
1892
+ }
1893
+ .lineage-graph__legend-toggle.react-flow__controls-button {
1894
+ width: auto;
1895
+ min-width: 92px;
1896
+ gap: 6px;
1897
+ padding: 0 9px;
1898
+ font-size: 10px;
1899
+ font-weight: 800;
1900
+ letter-spacing: 0.04em;
1901
+ line-height: 1;
1902
+ text-transform: uppercase;
1903
+ }
1904
+ .lineage-graph__legend-toggle.react-flow__controls-button .icon {
1905
+ margin: 0;
1906
+ }
1907
+ .lineage-graph__legend-toggle.react-flow__controls-button:disabled {
1908
+ cursor: not-allowed;
1909
+ opacity: 0.55;
1910
+ }
1911
+ .lineage-graph__legend {
1912
+ position: absolute;
1913
+ top: 38px;
1914
+ right: 0;
1915
+ z-index: 12;
1916
+ width: 190px;
1917
+ padding: 10px;
1918
+ border: 1px solid #e2e6ed;
1919
+ border-radius: 8px;
1920
+ background: rgba(255, 255, 255, 0.96);
1921
+ color: #435064;
1922
+ font-size: 11px;
1923
+ box-shadow: 0 6px 18px rgba(21, 26, 36, 0.08);
1924
+ }
1925
+ .lineage-graph__legend-title {
1926
+ margin-bottom: 8px;
1927
+ color: #151a24;
1928
+ font-size: 10px;
1929
+ font-weight: 700;
1930
+ text-transform: uppercase;
1931
+ }
1932
+ .lineage-graph__legend-item {
1933
+ display: flex;
1934
+ align-items: center;
1935
+ gap: 8px;
1936
+ min-height: 20px;
1937
+ }
1938
+ .lineage-graph__legend-swatch {
1939
+ width: 14px;
1940
+ height: 10px;
1941
+ flex: 0 0 auto;
1942
+ border: 1px solid var(--lineage-legend-color, #d7dde6);
1943
+ border-radius: 4px;
1944
+ background-color: var(--lineage-legend-color, #f4f6f8);
1945
+ }
1946
+ .lineage-graph__metadata-panel {
1947
+ max-height: 72vh;
1948
+ overflow: hidden;
1949
+ }
1950
+ .lineage-graph__metadata-content {
1951
+ max-height: calc(72vh - 120px);
1952
+ overflow-y: auto;
1953
+ }
1954
+
1955
+ // ── Inspector Panel (right-side overlay) ──────────────────────────────
1956
+ .lineage-inspector {
1957
+ position: absolute;
1958
+ top: 12px;
1959
+ right: 12px;
1960
+ z-index: 500;
1961
+ width: min(340px, calc(100vw - 40px));
1962
+ max-height: calc(var(--td-graph-container-height, 640px) - 60px);
1963
+ pointer-events: auto;
1964
+ animation: td-lineage-inspector-in 180ms ease-out;
1965
+
1966
+ &__panel {
1967
+ display: flex;
1968
+ flex-direction: column;
1969
+ gap: 0;
1970
+ border: 1px solid #d7dde6;
1971
+ border-radius: 8px;
1972
+ background: rgba(255, 255, 255, 0.98);
1973
+ box-shadow: 0 18px 40px rgba(21, 26, 36, 0.18);
1974
+ backdrop-filter: blur(10px);
1975
+ -webkit-backdrop-filter: blur(10px);
1976
+ overflow: hidden;
1977
+ }
1978
+
1979
+ &__header {
1980
+ display: flex;
1981
+ align-items: center;
1982
+ justify-content: space-between;
1983
+ gap: 8px;
1984
+ padding: 12px 14px 10px;
1985
+ border-bottom: 1px solid #eef2f6;
1986
+ }
1987
+
1988
+ &__header-title {
1989
+ display: inline-flex;
1990
+ align-items: center;
1991
+ gap: 7px;
1992
+ color: #202a3a;
1993
+ font-size: 12px;
1994
+ font-weight: 800;
1995
+ letter-spacing: 0.06em;
1996
+ line-height: 1.2;
1997
+ text-transform: uppercase;
1998
+
1999
+ .icon {
2000
+ margin: 0;
2001
+ color: #ed5c17;
2002
+ font-size: 14px;
2003
+ }
2004
+ }
2005
+
2006
+ &__close.ui.button {
2007
+ width: 28px;
2008
+ height: 28px;
2009
+ min-height: 28px;
2010
+ margin: 0;
2011
+ padding: 0;
2012
+ border: 1px solid #d7dde6;
2013
+ border-radius: 6px;
2014
+ background: #ffffff;
2015
+ box-shadow: 0 4px 10px rgba(21, 26, 36, 0.06);
2016
+ color: #96a1b3;
2017
+
2018
+ &:hover {
2019
+ border-color: #b6c4d8;
2020
+ background: #f8fafc;
2021
+ color: #435064;
2022
+ }
2023
+ }
2024
+
2025
+ &__section {
2026
+ padding: 14px;
2027
+ }
2028
+
2029
+ &__node-header {
2030
+ display: flex;
2031
+ align-items: center;
2032
+ gap: 10px;
2033
+ margin-bottom: 12px;
2034
+ }
2035
+
2036
+ &__node-icon {
2037
+ display: inline-flex;
2038
+ width: 34px;
2039
+ height: 34px;
2040
+ flex: 0 0 auto;
2041
+ align-items: center;
2042
+ justify-content: center;
2043
+ border: 1px solid #002057;
2044
+ border-radius: 8px;
2045
+ background: #002057;
2046
+ box-shadow: 0 8px 16px rgba(0, 32, 87, 0.18);
2047
+ color: #ffffff;
2048
+
2049
+ .icon {
2050
+ margin: 0;
2051
+ font-size: 15px;
2052
+ }
2053
+ }
2054
+
2055
+ &__node-copy {
2056
+ display: flex;
2057
+ min-width: 0;
2058
+ flex-direction: column;
2059
+ gap: 2px;
2060
+ }
2061
+
2062
+ &__eyebrow {
2063
+ color: #96a1b3;
2064
+ font-size: 10px;
2065
+ font-weight: 800;
2066
+ letter-spacing: 0.08em;
2067
+ line-height: 1.2;
2068
+ text-transform: uppercase;
2069
+ }
2070
+
2071
+ &__node-name {
2072
+ overflow: hidden;
2073
+ color: #202a3a;
2074
+ font-size: 14px;
2075
+ font-weight: 800;
2076
+ line-height: 1.3;
2077
+ text-overflow: ellipsis;
2078
+ white-space: nowrap;
2079
+ }
2080
+
2081
+ &__actions {
2082
+ display: flex;
2083
+ gap: 7px;
2084
+ margin-top: 4px;
2085
+ }
2086
+
2087
+ &__action {
2088
+ display: flex;
2089
+ min-width: 0;
2090
+ align-items: center;
2091
+ gap: 9px;
2092
+ min-height: 42px;
2093
+ padding: 8px 10px;
2094
+ border: 1px solid #e2e6ed;
2095
+ border-radius: 7px;
2096
+ background: #f8fafc;
2097
+ color: #435064;
2098
+ cursor: pointer;
2099
+ text-align: left;
2100
+ text-decoration: none;
2101
+ transition:
2102
+ transform 120ms ease,
2103
+ border-color 120ms ease,
2104
+ background-color 120ms ease,
2105
+ color 120ms ease,
2106
+ box-shadow 120ms ease;
2107
+
2108
+ &:hover {
2109
+ border-color: #002057;
2110
+ background: #002057;
2111
+ box-shadow: 0 8px 20px rgba(0, 32, 87, 0.22);
2112
+ color: #ffffff;
2113
+ transform: translateY(-1px);
2114
+ }
2115
+
2116
+ &--active {
2117
+ border-color: var(--td-graph-accent, #ed5c17);
2118
+ background: #fff7ed;
2119
+ box-shadow: 0 0 0 2px rgba(237, 92, 23, 0.16);
2120
+ color: #9a3412;
2121
+ }
2122
+ }
2123
+
2124
+ &__action-icon {
2125
+ display: inline-flex;
2126
+ width: 28px;
2127
+ height: 28px;
2128
+ flex: 0 0 auto;
2129
+ align-items: center;
2130
+ justify-content: center;
2131
+ border: 1px solid #d7dde6;
2132
+ border-radius: 7px;
2133
+ background: #ffffff;
2134
+ color: #697386;
2135
+ transition:
2136
+ border-color 120ms ease,
2137
+ background-color 120ms ease,
2138
+ color 120ms ease;
2139
+
2140
+ .icon {
2141
+ margin: 0;
2142
+ font-size: 13px;
2143
+ }
2144
+ }
2145
+
2146
+ &__action:hover &__action-icon {
2147
+ border-color: rgba(255, 255, 255, 0.36);
2148
+ background: rgba(255, 255, 255, 0.12);
2149
+ box-shadow: none;
2150
+ color: #ffffff;
2151
+ }
2152
+
2153
+ &__action--active &__action-icon {
2154
+ border-color: var(--td-graph-accent, #ed5c17);
2155
+ background: var(--td-graph-accent, #ed5c17);
2156
+ color: #ffffff;
2157
+ }
2158
+
2159
+ &__action-copy {
2160
+ display: flex;
2161
+ min-width: 0;
2162
+ flex-direction: column;
2163
+ gap: 1px;
2164
+ }
2165
+
2166
+ &__action-title {
2167
+ overflow: hidden;
2168
+ font-size: 12px;
2169
+ font-weight: 700;
2170
+ line-height: 1.25;
2171
+ letter-spacing: 0.02em;
2172
+ text-overflow: ellipsis;
2173
+ white-space: nowrap;
2174
+ }
2175
+
2176
+ &__metadata-section {
2177
+ border-top: 1px solid #eef2f6;
2178
+ }
2179
+
2180
+ &__section-header {
2181
+ display: flex;
2182
+ align-items: center;
2183
+ gap: 7px;
2184
+ margin-bottom: 10px;
2185
+ color: #697386;
2186
+ font-size: 11px;
2187
+ font-weight: 800;
2188
+ letter-spacing: 0.06em;
2189
+ line-height: 1.2;
2190
+ text-transform: uppercase;
2191
+
2192
+ .icon {
2193
+ margin: 0;
2194
+ color: #96a1b3;
2195
+ font-size: 13px;
2196
+ }
2197
+ }
2198
+
2199
+ &__metadata-list {
2200
+ display: flex;
2201
+ flex-direction: column;
2202
+ gap: 6px;
2203
+ margin: 0;
2204
+ padding: 0;
2205
+ }
2206
+
2207
+ &__metadata-item {
2208
+ display: flex;
2209
+ align-items: flex-start;
2210
+ gap: 8px;
2211
+ padding: 6px 8px;
2212
+ border: 1px solid #eef2f6;
2213
+ border-radius: 6px;
2214
+ background: #f8fafc;
2215
+ }
2216
+
2217
+ &__metadata-key {
2218
+ flex: 0 0 auto;
2219
+ min-width: 0;
2220
+ max-width: 50%;
2221
+ color: #697386;
2222
+ font-size: 10px;
2223
+ font-weight: 700;
2224
+ line-height: 1.35;
2225
+ text-transform: uppercase;
2226
+ letter-spacing: 0.04em;
2227
+ word-break: break-word;
2228
+ }
2229
+
2230
+ &__metadata-value {
2231
+ flex: 1 1 auto;
2232
+ min-width: 0;
2233
+ margin: 0;
2234
+ color: #202a3a;
2235
+ font-family: inherit;
2236
+ font-size: 12px;
2237
+ font-weight: 600;
2238
+ line-height: 1.4;
2239
+ word-break: break-all;
2240
+ }
2241
+
2242
+ &__empty {
2243
+ display: flex;
2244
+ flex-direction: column;
2245
+ align-items: center;
2246
+ justify-content: center;
2247
+ gap: 8px;
2248
+ padding: 28px 16px;
2249
+ color: #b0b8c8;
2250
+ font-size: 12px;
2251
+ font-weight: 600;
2252
+ text-align: center;
2253
+
2254
+ .icon {
2255
+ margin: 0;
2256
+ color: #cbd3df;
2257
+ font-size: 20px;
2258
+ }
2259
+ }
2260
+
2261
+ @media (prefers-reduced-motion: reduce) {
2262
+ animation: none;
2263
+
2264
+ &__action {
2265
+ transition: none;
2266
+ }
2267
+ }
2268
+ }
2269
+
2270
+ @keyframes td-lineage-inspector-in {
2271
+ from {
2272
+ opacity: 0;
2273
+ transform: translateY(-4px);
2274
+ }
2275
+
2276
+ to {
2277
+ opacity: 1;
2278
+ transform: translateY(0);
2279
+ }
2280
+ }
2281
+ .structure-lineage__download-button {
2282
+ position: absolute;
2283
+ top: 12px;
2284
+ right: 12px;
2285
+ z-index: 25;
2286
+ display: flex;
2287
+ align-items: center;
2288
+ justify-content: flex-end;
2289
+ }
2290
+ .structure-lineage__download-button span,
2291
+ .structure-lineage__download-button .ui.button,
2292
+ .structure-lineage__download-button .ui.popup {
2293
+ pointer-events: auto;
2294
+ }
2295
+ .structure-lineage__download-action.ui.button {
2296
+ min-height: 30px;
2297
+ margin: 0;
2298
+ border: 1px solid #d7dde6 !important;
2299
+ border-radius: 8px;
2300
+ background: rgba(255, 255, 255, 0.96) !important;
2301
+ box-shadow: 0 8px 20px rgba(21, 26, 36, 0.1) !important;
2302
+ color: #435064 !important;
2303
+ font-size: 10px;
2304
+ font-weight: 800;
2305
+ letter-spacing: 0.04em;
2306
+ line-height: 1;
2307
+ text-transform: uppercase;
2308
+ }
2309
+ .structure-lineage__download-action.ui.button:hover,
2310
+ .structure-lineage__download-action.ui.button:focus {
2311
+ border-color: #002057 !important;
2312
+ background: #002057 !important;
2313
+ color: #ffffff !important;
2314
+ }
2315
+ .structure-lineage__download-action.ui.button > .icon {
2316
+ margin-right: 6px;
2317
+ }
2318
+ .structure-lineage {
2319
+ --td-structure-lineage-height: clamp(480px, calc(100vh - 260px), 82vh);
2320
+ }
2321
+ .structure-lineage .td-graph-container .react-flow__controls.top.right {
2322
+ display: flex;
2323
+ width: max-content;
2324
+ align-items: center;
2325
+ flex-direction: row;
2326
+ flex-wrap: nowrap;
2327
+ top: 12px;
2328
+ right: 12px;
2329
+ left: auto;
2330
+ margin: 0;
2331
+ }
2332
+ .structure-lineage .td-graph-container .react-flow__controls.top.right > span {
2333
+ display: inline-flex;
2334
+ flex: 0 0 auto;
2335
+ }
2336
+ .structure-lineage .lineage-graph__legend-control {
2337
+ display: none !important;
2338
+ }
2339
+ .structure-lineage .lineage-graph__selection-control {
2340
+ top: 52px;
2341
+ }
2342
+ .structure-lineage .lineage-graph__canvas,
2343
+ .structure-lineage .lineage-graph__stage,
2344
+ .structure-lineage .td-graph-container {
2345
+ height: var(--td-structure-lineage-height);
2346
+ min-height: var(--td-structure-lineage-height);
2347
+ max-height: var(--td-structure-lineage-height);
2348
+ }
2349
+ .structure-lineage .lineage-graph__empty {
2350
+ min-height: var(--td-structure-lineage-height);
2351
+ }
2352
+
2353
+ @media (prefers-reduced-motion: reduce) {
2354
+ .lineage-graph__stage .react-flow__node,
2355
+ .lineage-graph__stage-surface .react-flow__node,
2356
+ .lineage-graph__stage .td-graph-edge,
2357
+ .lineage-graph__stage-surface .td-graph-edge,
2358
+ .lineage-graph__selection-control {
2359
+ transition: none;
2360
+ animation: none;
2361
+ }
2362
+
2363
+ .lineage-graph__stage .td-graph-edge-flow-dot,
2364
+ .lineage-graph__stage-surface .td-graph-edge-flow-dot {
2365
+ display: none;
2366
+ }
2367
+ }
2368
+
2369
+ // Unified toolbar and overlay panels used by /graphs (normal and fullscreen).
2370
+ .lineage-graph__stage-surface
2371
+ .react-flow__controls.td-graph-controls--vertical {
2372
+ top: 12px;
2373
+ right: 12px;
2374
+ z-index: 450;
2375
+ gap: 2px;
2376
+ margin: 0;
2377
+ padding: 5px;
2378
+ border: 1px solid #d7dde6;
2379
+ border-radius: 11px;
2380
+ background: rgba(255, 255, 255, 0.96);
2381
+ box-shadow: 0 12px 28px rgba(15, 23, 42, 0.13);
2382
+ overflow: visible;
2383
+ backdrop-filter: blur(10px);
2384
+ }
2385
+ .lineage-graph__stage-surface
2386
+ .td-graph-controls--vertical
2387
+ .react-flow__controls-button,
2388
+ .lineage-graph__dock-download.ui.button {
2389
+ display: inline-flex;
2390
+ width: 34px;
2391
+ min-width: 34px;
2392
+ height: 34px;
2393
+ min-height: 34px;
2394
+ align-items: center;
2395
+ justify-content: center;
2396
+ margin: 0;
2397
+ padding: 0;
2398
+ border: 0;
2399
+ border-radius: 7px;
2400
+ background: transparent;
2401
+ box-shadow: none;
2402
+ color: #435064;
2403
+ cursor: pointer;
2404
+ transition:
2405
+ background-color 140ms ease,
2406
+ color 140ms ease,
2407
+ box-shadow 140ms ease;
2408
+ }
2409
+ .lineage-graph__stage-surface
2410
+ .td-graph-controls--vertical
2411
+ .react-flow__controls-button:hover,
2412
+ .lineage-graph__dock-download.ui.button:hover {
2413
+ background: #002057 !important;
2414
+ color: #ffffff !important;
2415
+ }
2416
+ .lineage-graph__stage-surface .lineage-graph__dock-button--active,
2417
+ .lineage-graph__stage-surface .lineage-graph__dock-button--active:hover {
2418
+ background: var(--td-graph-accent, #ed5c17);
2419
+ box-shadow: 0 5px 12px rgba(237, 92, 23, 0.25);
2420
+ color: #ffffff;
2421
+ }
2422
+ .lineage-graph__stage-surface
2423
+ .td-graph-controls--vertical
2424
+ .lineage-graph__dock-depth-button {
2425
+ position: relative;
2426
+ display: inline-flex;
2427
+ align-items: center;
2428
+ justify-content: center;
2429
+ }
2430
+ .lineage-graph__stage-surface
2431
+ .td-graph-controls--vertical
2432
+ .lineage-graph__dock-depth-button
2433
+ > .icon {
2434
+ display: inline-flex;
2435
+ width: 13px;
2436
+ min-width: 13px;
2437
+ height: 13px;
2438
+ align-items: center;
2439
+ justify-content: center;
2440
+ line-height: 13px;
2441
+ }
2442
+ .lineage-graph__stage-surface
2443
+ .td-graph-controls--vertical
2444
+ .lineage-graph__dock-depth-button.lineage-graph__dock-button--active,
2445
+ .lineage-graph__stage-surface
2446
+ .td-graph-controls--vertical
2447
+ .lineage-graph__dock-depth-button.lineage-graph__dock-button--active:hover {
2448
+ background: var(--td-graph-accent, #ed5c17) !important;
2449
+ color: #ffffff !important;
2450
+ }
2451
+ .lineage-graph__dock-depth-value {
2452
+ position: absolute;
2453
+ top: -3px;
2454
+ right: -3px;
2455
+ display: inline-flex;
2456
+ box-sizing: border-box;
2457
+ min-width: 15px;
2458
+ height: 15px;
2459
+ align-items: center;
2460
+ justify-content: center;
2461
+ padding: 0 3px;
2462
+ border: 2px solid #ffffff;
2463
+ border-radius: 999px;
2464
+ background: var(--td-graph-accent, #ed5c17);
2465
+ box-shadow: 0 2px 5px rgba(15, 23, 42, 0.18);
2466
+ color: #ffffff;
2467
+ font-size: 8px;
2468
+ font-weight: 800;
2469
+ line-height: 1;
2470
+ pointer-events: none;
2471
+ transition:
2472
+ background-color 140ms ease,
2473
+ color 140ms ease;
2474
+ }
2475
+ .lineage-graph__stage-surface
2476
+ .td-graph-controls--vertical
2477
+ .lineage-graph__dock-depth-button:hover
2478
+ .lineage-graph__dock-depth-value {
2479
+ background: #ffffff;
2480
+ color: #002057;
2481
+ }
2482
+ .lineage-graph__stage-surface
2483
+ .lineage-graph__dock-button--active
2484
+ .lineage-graph__dock-depth-value {
2485
+ background: #ffffff;
2486
+ color: var(--td-graph-accent, #ed5c17);
2487
+ }
2488
+ .lineage-graph__stage-surface .lineage-graph__dock-context {
2489
+ --td-lineage-context-control-size: 34px;
2490
+ --td-lineage-context-expanded-height: 68px;
2491
+ --td-lineage-inspector-toolbar-offset: 10px;
2492
+ --td-lineage-inspector-panel-width: min(400px, calc(100cqw - 72px));
2493
+ --td-lineage-context-collapsed-width: min(260px, calc(100cqw - 28px));
2494
+ --td-lineage-context-expanded-width: calc(
2495
+ var(--td-lineage-inspector-panel-width) +
2496
+ var(--td-lineage-inspector-toolbar-offset) +
2497
+ var(--td-lineage-context-control-size) - 1px
2498
+ );
2499
+ --td-lineage-inspector-motion-duration: 180ms;
2500
+ --td-lineage-inspector-motion-easing: cubic-bezier(0.16, 1, 0.3, 1);
2501
+
2502
+ position: relative;
2503
+ display: flex;
2504
+ width: 34px;
2505
+ height: 34px;
2506
+ align-self: flex-end;
2507
+ flex: 0 0 34px;
2508
+ }
2509
+ .lineage-graph__dock-context > .lineage-graph__dock-context-button {
2510
+ position: absolute;
2511
+ top: 0;
2512
+ right: 0;
2513
+ z-index: 2;
2514
+ }
2515
+ .lineage-graph__dock-context-bar {
2516
+ position: absolute;
2517
+ top: 0;
2518
+ right: 0;
2519
+ z-index: 472;
2520
+ display: flex;
2521
+ width: var(--td-lineage-context-collapsed-width);
2522
+ height: var(--td-lineage-context-control-size);
2523
+ align-items: flex-start;
2524
+ border-radius: 7px;
2525
+ background: #002057;
2526
+ box-shadow: 0 5px 12px rgba(0, 32, 87, 0.25);
2527
+ color: #ffffff;
2528
+ overflow: hidden;
2529
+ transform-origin: right top;
2530
+ transition:
2531
+ width var(--td-lineage-inspector-motion-duration)
2532
+ var(--td-lineage-inspector-motion-easing),
2533
+ height var(--td-lineage-inspector-motion-duration)
2534
+ var(--td-lineage-inspector-motion-easing),
2535
+ border-radius var(--td-lineage-inspector-motion-duration)
2536
+ var(--td-lineage-inspector-motion-easing),
2537
+ box-shadow var(--td-lineage-inspector-motion-duration)
2538
+ var(--td-lineage-inspector-motion-easing);
2539
+ }
2540
+ .lineage-graph__dock-context-bar--expanded {
2541
+ width: var(--td-lineage-context-expanded-width);
2542
+ height: calc(var(--td-lineage-context-expanded-height) + 1px);
2543
+ border-radius: 10px 7px 7px 0;
2544
+ box-shadow: 0 18px 42px rgba(15, 23, 42, 0.18);
2545
+ }
2546
+ .lineage-graph__dock-context-bar--expanded::after {
2547
+ position: absolute;
2548
+ top: 0;
2549
+ right: var(--td-lineage-context-control-size);
2550
+ width: 1px;
2551
+ height: 100%;
2552
+ background: rgba(255, 255, 255, 0.34);
2553
+ content: "";
2554
+ pointer-events: none;
2555
+ }
2556
+ .lineage-graph__dock-context--pinned
2557
+ .lineage-graph__dock-context-bar:not(
2558
+ .lineage-graph__dock-context-bar--expanded
2559
+ ) {
2560
+ background: var(--td-graph-accent, #ed5c17);
2561
+ box-shadow: 0 5px 12px rgba(237, 92, 23, 0.28);
2562
+ }
2563
+ .lineage-graph__dock-context-bar--edge {
2564
+ background: var(--td-graph-edge-metadata, #7c3aed);
2565
+ box-shadow: 0 5px 12px rgba(124, 58, 237, 0.28);
2566
+ }
2567
+ .lineage-graph__dock-context-clear,
2568
+ .lineage-graph__dock-context-unpin {
2569
+ display: inline-flex;
2570
+ height: var(--td-lineage-context-control-size);
2571
+ align-items: center;
2572
+ justify-content: center;
2573
+ padding: 0;
2574
+ border: 0;
2575
+ background: transparent;
2576
+ color: inherit;
2577
+ cursor: pointer;
2578
+ }
2579
+ .lineage-graph__dock-context-reopen {
2580
+ position: static;
2581
+ display: flex;
2582
+ height: 100%;
2583
+ min-width: 0;
2584
+ flex: 1 1 auto;
2585
+ align-items: center;
2586
+ text-align: left;
2587
+ }
2588
+ .lineage-graph__dock-context-clear,
2589
+ .lineage-graph__dock-context-unpin {
2590
+ width: var(--td-lineage-context-control-size);
2591
+ min-width: var(--td-lineage-context-control-size);
2592
+ }
2593
+ .lineage-graph__dock-context-clear {
2594
+ border-left: 1px solid rgba(255, 255, 255, 0.34);
2595
+ }
2596
+ .lineage-graph__dock-context-bar--expanded .lineage-graph__dock-context-clear {
2597
+ border-left: 0;
2598
+ }
2599
+ .lineage-graph__dock-context-bar--expanded .lineage-graph__dock-context-unpin {
2600
+ height: 100%;
2601
+ border-right: 1px solid rgba(255, 255, 255, 0.34);
2602
+ }
2603
+ .lineage-graph__dock-context--pinned
2604
+ .lineage-graph__dock-context-bar--expanded
2605
+ .lineage-graph__dock-context-unpin {
2606
+ background: var(--td-graph-accent, #ed5c17);
2607
+ color: #ffffff;
2608
+ }
2609
+ .lineage-graph__dock-context-summary {
2610
+ display: flex;
2611
+ width: 100%;
2612
+ height: 100%;
2613
+ min-width: 0;
2614
+ align-items: center;
2615
+ gap: 8px;
2616
+ padding: 0 10px;
2617
+ overflow: hidden;
2618
+ pointer-events: none;
2619
+ }
2620
+ .lineage-graph__dock-context-summary-icon {
2621
+ display: inline-flex;
2622
+ width: 20px;
2623
+ min-width: 20px;
2624
+ height: 20px;
2625
+ align-items: center;
2626
+ justify-content: center;
2627
+ border: 1px solid transparent;
2628
+ border-radius: 6px;
2629
+ transition:
2630
+ width var(--td-lineage-inspector-motion-duration)
2631
+ var(--td-lineage-inspector-motion-easing),
2632
+ min-width var(--td-lineage-inspector-motion-duration)
2633
+ var(--td-lineage-inspector-motion-easing),
2634
+ height var(--td-lineage-inspector-motion-duration)
2635
+ var(--td-lineage-inspector-motion-easing),
2636
+ border-color var(--td-lineage-inspector-motion-duration)
2637
+ var(--td-lineage-inspector-motion-easing),
2638
+ background-color var(--td-lineage-inspector-motion-duration)
2639
+ var(--td-lineage-inspector-motion-easing);
2640
+ }
2641
+ .lineage-graph__dock-context-summary-icon > .icon {
2642
+ margin: 0;
2643
+ font-size: 13px;
2644
+ }
2645
+ .lineage-graph__dock-context-copy {
2646
+ display: flex;
2647
+ min-width: 0;
2648
+ flex: 1 1 auto;
2649
+ flex-direction: column;
2650
+ justify-content: center;
2651
+ gap: 3px;
2652
+ }
2653
+ .lineage-graph__dock-context-label,
2654
+ .lineage-graph__dock-context-type {
2655
+ display: block;
2656
+ overflow: hidden;
2657
+ line-height: 1.2;
2658
+ text-align: left;
2659
+ text-overflow: ellipsis;
2660
+ white-space: nowrap;
2661
+ }
2662
+ .lineage-graph__dock-context-label {
2663
+ font-size: 11px;
2664
+ font-weight: 700;
2665
+ transition: font-size var(--td-lineage-inspector-motion-duration)
2666
+ var(--td-lineage-inspector-motion-easing);
2667
+ }
2668
+ .lineage-graph__dock-context-type {
2669
+ max-height: 0;
2670
+ color: rgba(255, 255, 255, 0.66);
2671
+ font-size: 9px;
2672
+ font-weight: 800;
2673
+ letter-spacing: 0.08em;
2674
+ opacity: 0;
2675
+ text-transform: uppercase;
2676
+ transform: translateY(-3px);
2677
+ transition:
2678
+ max-height var(--td-lineage-inspector-motion-duration)
2679
+ var(--td-lineage-inspector-motion-easing),
2680
+ opacity var(--td-lineage-inspector-motion-duration)
2681
+ var(--td-lineage-inspector-motion-easing),
2682
+ transform var(--td-lineage-inspector-motion-duration)
2683
+ var(--td-lineage-inspector-motion-easing);
2684
+ }
2685
+ .lineage-graph__dock-context-bar--expanded
2686
+ .lineage-graph__dock-context-summary-icon {
2687
+ width: 34px;
2688
+ min-width: 34px;
2689
+ height: 34px;
2690
+ border-color: rgba(255, 255, 255, 0.3);
2691
+ border-radius: 8px;
2692
+ background: rgba(255, 255, 255, 0.1);
2693
+ }
2694
+ .lineage-graph__dock-context-bar--expanded .lineage-graph__dock-context-label {
2695
+ font-size: 16px;
2696
+ font-weight: 800;
2697
+ }
2698
+ .lineage-graph__dock-context-bar--expanded .lineage-graph__dock-context-type {
2699
+ max-height: 12px;
2700
+ opacity: 1;
2701
+ transform: translateY(0);
2702
+ }
2703
+ .lineage-graph__dock-context-clear .icon,
2704
+ .lineage-graph__dock-context-unpin .icon {
2705
+ margin: 0;
2706
+ }
2707
+ .lineage-graph__dock-context-clear .icon {
2708
+ font-size: 13px;
2709
+ }
2710
+ .lineage-graph__dock-context-bar--expanded
2711
+ .lineage-graph__dock-context-clear
2712
+ .icon {
2713
+ animation: td-lineage-context-close-in
2714
+ var(--td-lineage-inspector-motion-duration)
2715
+ var(--td-lineage-inspector-motion-easing) both;
2716
+ }
2717
+ .lineage-graph__dock-context-bar:not(.lineage-graph__dock-context-bar--expanded)
2718
+ .lineage-graph__dock-context-clear
2719
+ .icon {
2720
+ animation: td-lineage-context-close-out
2721
+ var(--td-lineage-inspector-motion-duration)
2722
+ var(--td-lineage-inspector-motion-easing) both;
2723
+ }
2724
+ .lineage-graph__dock-context-clear:hover,
2725
+ .lineage-graph__dock-context-unpin:hover {
2726
+ background: rgba(255, 255, 255, 0.12);
2727
+ }
2728
+ .lineage-unpin-icon {
2729
+ position: relative;
2730
+ }
2731
+ .lineage-unpin-icon::after {
2732
+ position: absolute;
2733
+ top: 50%;
2734
+ left: 50%;
2735
+ width: 1.25em;
2736
+ height: 2px;
2737
+ border-radius: 1px;
2738
+ background: currentColor;
2739
+ content: "";
2740
+ transform: translate(-50%, -50%) rotate(-45deg);
2741
+ }
2742
+ .lineage-graph__stage-surface
2743
+ .td-graph-controls--vertical
2744
+ .react-flow__controls-button:disabled,
2745
+ .lineage-graph__dock-download.ui.button:disabled {
2746
+ color: #aeb7c5;
2747
+ cursor: not-allowed;
2748
+ opacity: 0.58;
2749
+ }
2750
+ .lineage-graph__stage-surface
2751
+ .td-graph-controls--vertical
2752
+ .react-flow__controls-button:focus-visible,
2753
+ .lineage-graph__dock-download.ui.button:focus-visible,
2754
+ .lineage-graph__tool-panel-close:focus-visible,
2755
+ .lineage-graph__search-result:focus-visible,
2756
+ .lineage-graph__dock-context-button:focus-visible,
2757
+ .lineage-graph__dock-context-clear:focus-visible,
2758
+ .lineage-graph__dock-context-unpin:focus-visible,
2759
+ .lineage-inspector__minimize:focus-visible,
2760
+ .lineage-inspector__path--truncated:focus-visible,
2761
+ .lineage-inspector__action:focus-visible {
2762
+ outline: 2px solid var(--td-graph-accent, #ed5c17);
2763
+ outline-offset: 2px;
2764
+ }
2765
+ .lineage-graph__dock {
2766
+ display: contents;
2767
+ }
2768
+ .lineage-graph__dock-tooltip-trigger {
2769
+ display: inline-flex;
2770
+ }
2771
+ .lineage-graph__dock-button-icon {
2772
+ display: inline-flex;
2773
+ align-items: center;
2774
+ justify-content: center;
2775
+ }
2776
+ .lineage-graph__dock-download-spinner {
2777
+ animation: td-lineage-dock-spin 800ms linear infinite;
2778
+ }
2779
+ @keyframes td-lineage-dock-spin {
2780
+ to {
2781
+ transform: rotate(360deg);
2782
+ }
2783
+ }
2784
+ .lineage-graph__depth-popup.ui.popup {
2785
+ width: min(220px, calc(100vw - 64px));
2786
+ max-width: calc(100vw - 64px);
2787
+ padding: 0;
2788
+ border: 1px solid #d7dde6;
2789
+ border-radius: 10px;
2790
+ background: rgba(255, 255, 255, 0.98);
2791
+ box-shadow: 0 18px 42px rgba(15, 23, 42, 0.18);
2792
+ color: #253044;
2793
+ }
2794
+ .lineage-graph__depth-popup.ui.popup::before {
2795
+ background: #ffffff;
2796
+ box-shadow: 1px -1px 0 0 #d7dde6;
2797
+ }
2798
+ .lineage-graph__settings-popup.ui.popup {
2799
+ width: min(240px, calc(100vw - 64px));
2800
+ max-width: calc(100vw - 64px);
2801
+ padding: 0;
2802
+ border: 1px solid #d7dde6;
2803
+ border-radius: 10px;
2804
+ background: rgba(255, 255, 255, 0.98);
2805
+ box-shadow: 0 18px 42px rgba(15, 23, 42, 0.18);
2806
+ color: #253044;
2807
+ }
2808
+ .lineage-graph__settings-popup.ui.popup::before {
2809
+ background: #ffffff;
2810
+ box-shadow: 1px -1px 0 0 #d7dde6;
2811
+ }
2812
+ .lineage-graph__settings-popover {
2813
+ display: grid;
2814
+ gap: 10px;
2815
+ padding: 14px;
2816
+ }
2817
+ .lineage-graph__settings-popover-header {
2818
+ color: #172033;
2819
+ font-size: 12px;
2820
+ font-weight: 800;
2821
+ }
2822
+ .lineage-graph__settings-toggle {
2823
+ display: flex;
2824
+ align-items: center;
2825
+ gap: 8px;
2826
+ color: #435064;
2827
+ font-size: 12px;
2828
+ line-height: 1.4;
2829
+ cursor: pointer;
2830
+ }
2831
+ .lineage-graph__settings-toggle input {
2832
+ flex: 0 0 auto;
2833
+ margin: 0;
2834
+ accent-color: var(--td-graph-accent, #ed5c17);
2835
+ cursor: pointer;
2836
+ }
2837
+ .lineage-graph__depth-popover {
2838
+ display: grid;
2839
+ gap: 13px;
2840
+ padding: 14px;
2841
+ }
2842
+ .lineage-graph__depth-popover-header {
2843
+ display: flex;
2844
+ min-width: 0;
2845
+ align-items: center;
2846
+ }
2847
+ .lineage-graph__depth-popover-header > span:first-child {
2848
+ overflow: hidden;
2849
+ color: #172033;
2850
+ font-size: 12px;
2851
+ font-weight: 800;
2852
+ line-height: 1.2;
2853
+ text-overflow: ellipsis;
2854
+ white-space: nowrap;
2855
+ }
2856
+ .lineage-graph__depth-slider {
2857
+ width: 100%;
2858
+ height: 18px;
2859
+ margin: 0;
2860
+ accent-color: var(--td-graph-accent, #ed5c17);
2861
+ cursor: pointer;
2862
+ }
2863
+ .lineage-graph__depth-slider:focus-visible {
2864
+ border-radius: 999px;
2865
+ outline: 2px solid var(--td-graph-accent, #ed5c17);
2866
+ outline-offset: 3px;
2867
+ }
2868
+ .lineage-graph__depth-popover-scale {
2869
+ display: flex;
2870
+ align-items: center;
2871
+ justify-content: space-between;
2872
+ gap: 2px;
2873
+ }
2874
+ .lineage-graph__depth-popover-scale > span {
2875
+ display: inline-flex;
2876
+ width: 20px;
2877
+ height: 20px;
2878
+ align-items: center;
2879
+ justify-content: center;
2880
+ border-radius: 5px;
2881
+ color: #96a1b3;
2882
+ font-size: 10px;
2883
+ font-weight: 800;
2884
+ line-height: 1;
2885
+ }
2886
+ .lineage-graph__depth-popover-scale > .is-active {
2887
+ background: #fff4ed;
2888
+ color: #c2410c;
2889
+ }
2890
+ .lineage-graph__depth-popover-scale > .is-current {
2891
+ background: var(--td-graph-accent, #ed5c17);
2892
+ color: #ffffff;
2893
+ }
2894
+ .lineage-graph__dock-divider {
2895
+ display: block;
2896
+ width: 24px;
2897
+ height: 1px;
2898
+ flex: 0 0 1px;
2899
+ margin: 4px 5px;
2900
+ background: #e2e8f0;
2901
+ }
2902
+ .lineage-graph__dock-depth {
2903
+ display: grid;
2904
+ gap: 2px;
2905
+ color: #435064;
2906
+ font-size: 9px;
2907
+ font-weight: 700;
2908
+ line-height: 1;
2909
+ }
2910
+ .lineage-graph__dock-depth select {
2911
+ min-width: 54px;
2912
+ height: 24px;
2913
+ border: 1px solid #cbd5e1;
2914
+ border-radius: 6px;
2915
+ background: #ffffff;
2916
+ color: #1f2937;
2917
+ cursor: pointer;
2918
+ }
2919
+ .lineage-graph__dock-depth select:focus-visible {
2920
+ outline: 2px solid var(--td-graph-accent, #ed5c17);
2921
+ outline-offset: 2px;
2922
+ }
2923
+ @keyframes td-lineage-context-close-in {
2924
+ from {
2925
+ transform: rotate(0);
2926
+ }
2927
+ to {
2928
+ transform: rotate(180deg);
2929
+ }
2930
+ }
2931
+ @keyframes td-lineage-context-close-out {
2932
+ from {
2933
+ transform: rotate(0);
2934
+ }
2935
+ to {
2936
+ transform: rotate(-180deg);
2937
+ }
2938
+ }
2939
+ .lineage-graph__tool-panel,
2940
+ .lineage-inspector {
2941
+ position: absolute;
2942
+ top: 0;
2943
+ right: calc(100% + 10px);
2944
+ z-index: 470;
2945
+ display: flex;
2946
+ width: min(336px, calc(100vw - 82px));
2947
+ max-height: min(
2948
+ 580px,
2949
+ calc(100vh - 86px),
2950
+ calc(var(--td-graph-container-height, 640px) - 24px)
2951
+ );
2952
+ flex-direction: column;
2953
+ border: 1px solid #d7dde6;
2954
+ border-radius: 10px;
2955
+ background: rgba(255, 255, 255, 0.98);
2956
+ box-shadow: 0 18px 42px rgba(15, 23, 42, 0.18);
2957
+ overflow: hidden;
2958
+ pointer-events: auto;
2959
+ animation: td-lineage-dock-panel-in
2960
+ var(--td-lineage-inspector-motion-duration, 180ms)
2961
+ var(--td-lineage-inspector-motion-easing, cubic-bezier(0.16, 1, 0.3, 1));
2962
+ backdrop-filter: blur(12px);
2963
+ }
2964
+ .lineage-inspector {
2965
+ width: var(
2966
+ --td-lineage-inspector-panel-width,
2967
+ min(400px, calc(100vw - 72px))
2968
+ );
2969
+ }
2970
+ .lineage-graph__stage-surface .lineage-inspector--body-only {
2971
+ top: var(--td-lineage-context-expanded-height);
2972
+ right: calc(100% + var(--td-lineage-inspector-toolbar-offset) - 1px);
2973
+ width: var(--td-lineage-inspector-panel-width);
2974
+ max-height: min(
2975
+ calc(580px - var(--td-lineage-context-expanded-height)),
2976
+ calc(100vh - 86px - var(--td-lineage-context-expanded-height)),
2977
+ calc(
2978
+ var(--td-graph-container-height, 640px) - 24px -
2979
+ var(--td-lineage-context-expanded-height)
2980
+ )
2981
+ );
2982
+ border-top: 0;
2983
+ border-radius: 0 0 10px 10px;
2984
+ transform-origin: right top;
2985
+ }
2986
+ .lineage-graph__tool-panel-header,
2987
+ .lineage-inspector__header {
2988
+ display: flex;
2989
+ min-width: 0;
2990
+ align-items: center;
2991
+ gap: 10px;
2992
+ flex: 0 0 auto;
2993
+ }
2994
+ .lineage-inspector__minimize {
2995
+ display: inline-flex;
2996
+ width: 28px;
2997
+ height: 34px;
2998
+ flex: 0 0 28px;
2999
+ align-items: center;
3000
+ justify-content: center;
3001
+ margin-left: -8px;
3002
+ padding: 0;
3003
+ border: 0;
3004
+ border-radius: 6px;
3005
+ background: transparent;
3006
+ color: rgba(255, 255, 255, 0.78);
3007
+ cursor: pointer;
3008
+ }
3009
+ .lineage-inspector__minimize:hover {
3010
+ background: rgba(255, 255, 255, 0.12);
3011
+ color: #ffffff;
3012
+ }
3013
+ .lineage-inspector__minimize--pinned,
3014
+ .lineage-inspector__minimize--pinned:hover {
3015
+ background: var(--td-graph-accent, #ed5c17);
3016
+ color: #ffffff;
3017
+ }
3018
+ .lineage-inspector__minimize .icon {
3019
+ margin: 0;
3020
+ }
3021
+ .lineage-graph__tool-panel-header {
3022
+ justify-content: space-between;
3023
+ min-height: 46px;
3024
+ padding: 9px 10px 9px 14px;
3025
+ border-bottom: 1px solid #e5eaf0;
3026
+ color: #172033;
3027
+ }
3028
+ .lineage-graph__tool-panel-header > span {
3029
+ display: inline-flex;
3030
+ align-items: center;
3031
+ gap: 8px;
3032
+ font-size: 12px;
3033
+ font-weight: 800;
3034
+ }
3035
+ .lineage-graph__tool-panel-header .icon,
3036
+ .lineage-graph__tool-panel-close .icon,
3037
+ .lineage-inspector__header .icon,
3038
+ .lineage-inspector__action .icon {
3039
+ margin: 0;
3040
+ }
3041
+ .lineage-graph__tool-panel-close {
3042
+ display: inline-flex;
3043
+ width: 28px;
3044
+ height: 28px;
3045
+ flex: 0 0 auto;
3046
+ align-items: center;
3047
+ justify-content: center;
3048
+ padding: 0;
3049
+ border: 0;
3050
+ border-radius: 6px;
3051
+ background: transparent;
3052
+ color: inherit;
3053
+ cursor: pointer;
3054
+ }
3055
+ .lineage-graph__tool-panel-close:hover {
3056
+ background: #f1f5f9;
3057
+ color: #002057;
3058
+ }
3059
+
3060
+ .lineage-graph__search-fields {
3061
+ display: grid;
3062
+ gap: 8px;
3063
+ padding: 12px;
3064
+ border-bottom: 1px solid #eef2f6;
3065
+ }
3066
+ .lineage-graph__search-input.ui.input,
3067
+ .lineage-graph__search-input.ui.input input,
3068
+ .lineage-graph__search-system-filter.ui.dropdown {
3069
+ width: 100%;
3070
+ }
3071
+ .lineage-graph__search-input.ui.input input,
3072
+ .lineage-graph__search-system-filter.ui.dropdown {
3073
+ min-height: 36px;
3074
+ border-color: #d7dde6;
3075
+ border-radius: 7px;
3076
+ font-size: 12px;
3077
+ }
3078
+ .lineage-graph__search-empty {
3079
+ display: flex;
3080
+ min-height: 116px;
3081
+ align-items: center;
3082
+ justify-content: center;
3083
+ gap: 8px;
3084
+ padding: 20px;
3085
+ color: #7b8798;
3086
+ font-size: 12px;
3087
+ text-align: center;
3088
+ }
3089
+ .lineage-graph__search-count {
3090
+ padding: 9px 12px 6px;
3091
+ color: #7b8798;
3092
+ font-size: 10px;
3093
+ font-weight: 800;
3094
+ letter-spacing: 0.06em;
3095
+ text-transform: uppercase;
3096
+ }
3097
+ .lineage-graph__search-results {
3098
+ max-height: 380px;
3099
+ padding: 0 7px 8px;
3100
+ overflow-y: auto;
3101
+ }
3102
+ .lineage-graph__search-result {
3103
+ display: flex;
3104
+ width: 100%;
3105
+ min-width: 0;
3106
+ align-items: center;
3107
+ gap: 9px;
3108
+ padding: 8px;
3109
+ border: 0;
3110
+ border-radius: 7px;
3111
+ background: transparent;
3112
+ color: #253044;
3113
+ cursor: pointer;
3114
+ text-align: left;
3115
+ }
3116
+ .lineage-graph__search-result:hover,
3117
+ .lineage-graph__search-result[aria-selected="true"] {
3118
+ background: #fff4ed;
3119
+ color: #9a3412;
3120
+ }
3121
+ .lineage-graph__search-result-icon {
3122
+ display: inline-flex;
3123
+ width: 28px;
3124
+ height: 28px;
3125
+ flex: 0 0 auto;
3126
+ align-items: center;
3127
+ justify-content: center;
3128
+ border-radius: 6px;
3129
+ background: #eef2f7;
3130
+ color: #526176;
3131
+ }
3132
+ .lineage-graph__search-result-icon .icon {
3133
+ margin: 0;
3134
+ }
3135
+ .lineage-graph__search-result-copy {
3136
+ display: flex;
3137
+ min-width: 0;
3138
+ flex-direction: column;
3139
+ gap: 2px;
3140
+ }
3141
+ .lineage-graph__search-result-copy > span,
3142
+ .lineage-graph__search-result-copy > small {
3143
+ overflow: hidden;
3144
+ text-overflow: ellipsis;
3145
+ white-space: nowrap;
3146
+ }
3147
+ .lineage-graph__search-result-copy > span {
3148
+ font-size: 12px;
3149
+ font-weight: 750;
3150
+ }
3151
+ .lineage-graph__search-result-copy > small {
3152
+ color: #7b8798;
3153
+ font-size: 10px;
3154
+ }
3155
+
3156
+ .lineage-graph__tool-panel--legend {
3157
+ padding-bottom: 8px;
3158
+ }
3159
+ .lineage-graph__legend-section {
3160
+ display: flex;
3161
+ flex-direction: column;
3162
+ gap: 7px;
3163
+ padding: 11px 14px;
3164
+ border-bottom: 1px solid #eef2f6;
3165
+ }
3166
+ .lineage-graph__legend-section:last-child {
3167
+ border-bottom: 0;
3168
+ }
3169
+ .lineage-graph__legend-section-title,
3170
+ .lineage-inspector__section-title {
3171
+ color: #697386;
3172
+ font-size: 10px;
3173
+ font-weight: 800;
3174
+ letter-spacing: 0.07em;
3175
+ text-transform: uppercase;
3176
+ }
3177
+ .lineage-graph__legend-item {
3178
+ min-height: 23px;
3179
+ color: #344054;
3180
+ font-size: 12px;
3181
+ }
3182
+ .lineage-graph__legend-swatch {
3183
+ width: 15px;
3184
+ height: 10px;
3185
+ }
3186
+ .lineage-graph__legend-indicators,
3187
+ .lineage-graph__legend-relations {
3188
+ display: flex;
3189
+ flex-wrap: wrap;
3190
+ gap: 6px;
3191
+ }
3192
+ .lineage-graph__legend-indicator,
3193
+ .lineage-graph__legend-relations > span {
3194
+ display: inline-flex;
3195
+ align-items: center;
3196
+ gap: 5px;
3197
+ padding: 4px 7px;
3198
+ border: 1px solid #e2e8f0;
3199
+ border-radius: 999px;
3200
+ background: #f8fafc;
3201
+ color: #526176;
3202
+ font-size: 10px;
3203
+ font-weight: 700;
3204
+ }
3205
+ .lineage-graph__legend-indicator .lineage-graph__dock-button-icon {
3206
+ color: var(--td-graph-accent, #ed5c17);
3207
+ }
3208
+
3209
+ .lineage-inspector__header {
3210
+ justify-content: flex-start;
3211
+ min-height: calc(var(--td-lineage-context-expanded-height, 68px) + 1px);
3212
+ padding: 12px 16px;
3213
+ border: 0;
3214
+ background: #002057;
3215
+ color: #ffffff;
3216
+ }
3217
+ .lineage-inspector__header--edge {
3218
+ background: var(--td-graph-edge-metadata, #7c3aed);
3219
+ }
3220
+ .lineage-inspector__header-icon {
3221
+ display: inline-flex;
3222
+ width: 34px;
3223
+ height: 34px;
3224
+ flex: 0 0 auto;
3225
+ align-items: center;
3226
+ justify-content: center;
3227
+ border: 1px solid rgba(255, 255, 255, 0.3);
3228
+ border-radius: 8px;
3229
+ background: rgba(255, 255, 255, 0.1);
3230
+ }
3231
+ .lineage-view__header-icon > .icon,
3232
+ .lineage-inspector__header-icon > .icon {
3233
+ display: inline-flex;
3234
+ width: 100%;
3235
+ height: 100%;
3236
+ align-items: center;
3237
+ justify-content: center;
3238
+ margin: 0;
3239
+ line-height: 1;
3240
+ }
3241
+ .lineage-inspector__header-copy {
3242
+ display: flex;
3243
+ min-width: 0;
3244
+ flex: 1 1 auto;
3245
+ flex-direction: column;
3246
+ gap: 3px;
3247
+ }
3248
+ .lineage-inspector__eyebrow {
3249
+ color: rgba(255, 255, 255, 0.66);
3250
+ font-size: 9px;
3251
+ font-weight: 800;
3252
+ letter-spacing: 0.1em;
3253
+ text-transform: uppercase;
3254
+ }
3255
+ .lineage-inspector__header-copy strong {
3256
+ overflow: hidden;
3257
+ font-size: 16px;
3258
+ line-height: 1.3;
3259
+ text-overflow: ellipsis;
3260
+ white-space: nowrap;
3261
+ }
3262
+ .lineage-inspector__body {
3263
+ min-height: 0;
3264
+ overflow-y: auto;
3265
+ }
3266
+ .lineage-inspector__section {
3267
+ padding: 13px 16px;
3268
+ border-bottom: 1px solid #eef2f6;
3269
+ }
3270
+ .lineage-inspector__section-title {
3271
+ display: block;
3272
+ margin-bottom: 9px;
3273
+ }
3274
+ .lineage-inspector__path-wrap {
3275
+ position: relative;
3276
+ }
3277
+ .lineage-inspector__path {
3278
+ display: -webkit-box;
3279
+ max-width: 100%;
3280
+ overflow: hidden;
3281
+ color: #526176;
3282
+ font-size: 12px;
3283
+ line-height: 1.45;
3284
+ overflow-wrap: anywhere;
3285
+ -webkit-box-orient: vertical;
3286
+ -webkit-line-clamp: 2;
3287
+ }
3288
+ .lineage-inspector__path--truncated {
3289
+ cursor: help;
3290
+ }
3291
+ .lineage-inspector__path--measure {
3292
+ position: absolute;
3293
+ top: 0;
3294
+ left: 0;
3295
+ display: block;
3296
+ width: 100%;
3297
+ overflow: visible;
3298
+ visibility: hidden;
3299
+ -webkit-line-clamp: unset;
3300
+ pointer-events: none;
3301
+ }
3302
+ .lineage-inspector__facts {
3303
+ display: grid;
3304
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3305
+ border-bottom: 1px solid #eef2f6;
3306
+ }
3307
+ .lineage-inspector__facts > div {
3308
+ display: flex;
3309
+ min-width: 0;
3310
+ flex-direction: column;
3311
+ gap: 3px;
3312
+ min-height: 64px;
3313
+ justify-content: center;
3314
+ padding: 13px 16px;
3315
+ border-right: 1px solid #eef2f6;
3316
+ border-bottom: 1px solid #eef2f6;
3317
+ }
3318
+ .lineage-inspector__facts > div:nth-child(even) {
3319
+ border-right: 0;
3320
+ }
3321
+ .lineage-inspector__facts > div:last-child {
3322
+ border-right: 0;
3323
+ }
3324
+ .lineage-inspector__facts > div:nth-child(odd):nth-last-child(-n + 2),
3325
+ .lineage-inspector__facts > div:nth-child(odd):nth-last-child(-n + 2) ~ div {
3326
+ border-bottom: 0;
3327
+ }
3328
+ .lineage-inspector__facts span,
3329
+ .lineage-inspector__edge-summary span,
3330
+ .lineage-inspector__relation-type > span {
3331
+ color: #7b8798;
3332
+ font-size: 9px;
3333
+ font-weight: 800;
3334
+ letter-spacing: 0.06em;
3335
+ text-transform: uppercase;
3336
+ }
3337
+ .lineage-inspector__facts strong {
3338
+ overflow: hidden;
3339
+ color: #263247;
3340
+ font-size: 14px;
3341
+ line-height: 1.35;
3342
+ text-overflow: ellipsis;
3343
+ white-space: nowrap;
3344
+ }
3345
+ .lineage-inspector__quality {
3346
+ display: flex;
3347
+ align-items: center;
3348
+ justify-content: space-between;
3349
+ gap: 12px;
3350
+ margin: 13px 16px 0;
3351
+ padding: 9px 11px;
3352
+ border: 1px solid #d8e2dc;
3353
+ border-radius: 7px;
3354
+ background: #f4faf6;
3355
+ color: #267346;
3356
+ font-size: 12px;
3357
+ }
3358
+ .lineage-inspector__quality > strong {
3359
+ font-size: 18px;
3360
+ line-height: 1;
3361
+ }
3362
+ .lineage-inspector__quality > span {
3363
+ display: inline-flex;
3364
+ align-items: center;
3365
+ gap: 6px;
3366
+ }
3367
+ .lineage-inspector__quality--warning {
3368
+ border-color: #f1d9a5;
3369
+ background: #fff9eb;
3370
+ color: #8a5a00;
3371
+ }
3372
+ .lineage-inspector__quality--poor {
3373
+ border-color: #f1c7c2;
3374
+ background: #fff4f2;
3375
+ color: #a23427;
3376
+ }
3377
+ .lineage-inspector__quality--neutral {
3378
+ border-color: #dfe4eb;
3379
+ background: #f8fafc;
3380
+ color: #526176;
3381
+ }
3382
+ .lineage-inspector__section--actions {
3383
+ border-bottom: 0;
3384
+ padding-bottom: 8px;
3385
+ }
3386
+ .lineage-inspector__section--actions .lineage-inspector__section-title {
3387
+ margin-bottom: 7px;
3388
+ }
3389
+ .lineage-inspector__action-wrapper {
3390
+ display: inline-flex;
3391
+ }
3392
+ .lineage-inspector__actions {
3393
+ display: flex;
3394
+ align-items: stretch;
3395
+ gap: 10px;
3396
+ margin-top: 0;
3397
+ }
3398
+ .lineage-inspector__action-group {
3399
+ display: inline-flex;
3400
+ flex-wrap: wrap;
3401
+ align-content: flex-start;
3402
+ gap: 6px;
3403
+ }
3404
+ .lineage-inspector__action-group--local {
3405
+ flex: 0 0 auto;
3406
+ }
3407
+ .lineage-inspector__action-group--navigation {
3408
+ min-width: 0;
3409
+ flex: 1 1 auto;
3410
+ }
3411
+ .lineage-inspector__action-divider {
3412
+ width: 1px;
3413
+ min-height: 40px;
3414
+ flex: 0 0 1px;
3415
+ align-self: stretch;
3416
+ background: #dfe5ed;
3417
+ }
3418
+ .lineage-inspector__action {
3419
+ display: inline-flex;
3420
+ width: 40px;
3421
+ height: 40px;
3422
+ min-width: 40px;
3423
+ min-height: 40px;
3424
+ align-items: center;
3425
+ justify-content: center;
3426
+ padding: 0;
3427
+ border: 1px solid transparent;
3428
+ border-radius: 8px;
3429
+ background: transparent;
3430
+ box-shadow: none;
3431
+ color: #697386;
3432
+ cursor: pointer;
3433
+ text-decoration: none;
3434
+ transform: none;
3435
+ transition:
3436
+ border-color 120ms ease,
3437
+ background-color 120ms ease,
3438
+ color 120ms ease,
3439
+ box-shadow 120ms ease;
3440
+ }
3441
+ .lineage-inspector__action .icon {
3442
+ margin: 0;
3443
+ font-size: 18px;
3444
+ }
3445
+ .lineage-inspector__action:hover {
3446
+ border-color: #002057;
3447
+ background: #002057;
3448
+ box-shadow: 0 8px 20px rgba(0, 32, 87, 0.22);
3449
+ color: #ffffff;
3450
+ transform: none;
3451
+ }
3452
+ .lineage-inspector__action--active {
3453
+ border-color: var(--td-graph-accent, #ed5c17);
3454
+ background: var(--td-graph-accent, #ed5c17);
3455
+ box-shadow: 0 5px 12px rgba(237, 92, 23, 0.25);
3456
+ color: #ffffff;
3457
+ }
3458
+ .lineage-inspector__action--active:hover {
3459
+ border-color: var(--td-graph-accent, #ed5c17);
3460
+ background: var(--td-graph-accent, #ed5c17);
3461
+ color: #ffffff;
3462
+ }
3463
+ .lineage-inspector__action--danger:hover {
3464
+ border-color: #c9483c;
3465
+ background: #e23d5b;
3466
+ box-shadow: 0 5px 12px rgba(226, 61, 91, 0.25);
3467
+ color: #ffffff;
3468
+ }
3469
+ .lineage-inspector__action--view-detail:hover {
3470
+ border-color: #667085;
3471
+ background: #667085;
3472
+ color: #ffffff;
3473
+ }
3474
+ .lineage-inspector__edge-summary {
3475
+ display: grid;
3476
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
3477
+ align-items: center;
3478
+ gap: 10px;
3479
+ padding: 15px 16px;
3480
+ border-bottom: 1px solid #eef2f6;
3481
+ }
3482
+ .lineage-inspector__edge-summary > div {
3483
+ display: flex;
3484
+ min-width: 0;
3485
+ flex-direction: column;
3486
+ gap: 4px;
3487
+ }
3488
+ .lineage-inspector__edge-summary > div:last-child {
3489
+ text-align: left;
3490
+ }
3491
+ .lineage-inspector__edge-summary strong {
3492
+ overflow: hidden;
3493
+ color: #263247;
3494
+ font-size: 14px;
3495
+ line-height: 1.35;
3496
+ text-overflow: ellipsis;
3497
+ white-space: normal;
3498
+ overflow-wrap: anywhere;
3499
+ }
3500
+ .lineage-inspector__edge-summary > .icon {
3501
+ margin: 0;
3502
+ color: var(--td-graph-edge-metadata, #7c3aed);
3503
+ font-size: 20px;
3504
+ transform: scaleX(1.5);
3505
+ }
3506
+ .lineage-inspector__relation-type {
3507
+ display: flex;
3508
+ align-items: center;
3509
+ justify-content: space-between;
3510
+ gap: 10px;
3511
+ padding: 10px 16px;
3512
+ border-bottom: 1px solid #eef2f6;
3513
+ }
3514
+ .lineage-inspector__relation-type strong {
3515
+ padding: 3px 7px;
3516
+ border-radius: 999px;
3517
+ background: #eef2f7;
3518
+ color: #435064;
3519
+ font-size: 12px;
3520
+ }
3521
+ .lineage-inspector__metadata-list {
3522
+ display: flex;
3523
+ flex-direction: column;
3524
+ margin: 0;
3525
+ }
3526
+ .lineage-inspector__metadata-item {
3527
+ display: grid;
3528
+ grid-template-columns: minmax(90px, 0.42fr) minmax(0, 1fr);
3529
+ gap: 14px;
3530
+ padding: 10px;
3531
+ border-bottom: 1px solid #e7ebf0;
3532
+ }
3533
+ .lineage-inspector__metadata-item:last-child {
3534
+ border-bottom: 0;
3535
+ }
3536
+ .lineage-inspector__metadata-item dt {
3537
+ align-self: start;
3538
+ padding-top: 6px;
3539
+ color: #697386;
3540
+ font-size: 10px;
3541
+ font-weight: 800;
3542
+ letter-spacing: 0.05em;
3543
+ line-height: 1.4;
3544
+ overflow-wrap: anywhere;
3545
+ text-transform: uppercase;
3546
+ }
3547
+ .lineage-inspector__metadata-item dd {
3548
+ min-width: 0;
3549
+ margin: 0;
3550
+ }
3551
+ .lineage-inspector__metadata-item pre {
3552
+ margin: 0;
3553
+ padding: 10px 12px;
3554
+ border: 1px solid #e7ebf0;
3555
+ border-radius: 6px;
3556
+ background: #f8fafc;
3557
+ color: #263247;
3558
+ font-family: inherit;
3559
+ font-size: 12px;
3560
+ line-height: 1.5;
3561
+ overflow-wrap: anywhere;
3562
+ white-space: pre-wrap;
3563
+ }
3564
+
3565
+ @keyframes td-lineage-dock-panel-in {
3566
+ from {
3567
+ opacity: 0;
3568
+ transform: translateX(8px) scale(0.985);
3569
+ }
3570
+ to {
3571
+ opacity: 1;
3572
+ transform: translateX(0);
3573
+ }
3574
+ }
3575
+
3576
+ @media (max-width: 767px) {
3577
+ .lineage-graph__stage-surface
3578
+ .react-flow__controls.td-graph-controls--vertical {
3579
+ top: 8px;
3580
+ right: 8px;
3581
+ }
3582
+ .lineage-graph__stage-surface
3583
+ .td-graph-controls--vertical
3584
+ .react-flow__controls-button,
3585
+ .lineage-graph__dock-download.ui.button {
3586
+ width: 38px;
3587
+ min-width: 38px;
3588
+ height: 38px;
3589
+ min-height: 38px;
3590
+ }
3591
+ .lineage-graph__stage-surface .lineage-graph__dock-context {
3592
+ --td-lineage-context-control-size: 38px;
3593
+ --td-lineage-context-expanded-height: 76px;
3594
+ --td-lineage-inspector-panel-width: min(360px, calc(100cqw - 72px));
3595
+ --td-lineage-context-collapsed-width: min(240px, calc(100cqw - 28px));
3596
+
3597
+ width: 38px;
3598
+ height: 38px;
3599
+ flex-basis: 38px;
3600
+ }
3601
+ .lineage-graph__tool-panel,
3602
+ .lineage-inspector {
3603
+ width: min(360px, calc(100cqw - 72px));
3604
+ max-height: calc(100vh - 72px);
3605
+ }
3606
+ .lineage-graph__stage-surface .lineage-inspector--body-only {
3607
+ right: calc(100% + var(--td-lineage-inspector-toolbar-offset) - 1px);
3608
+ }
3609
+ .lineage-inspector__action {
3610
+ width: 44px;
3611
+ height: 44px;
3612
+ min-width: 44px;
3613
+ min-height: 44px;
3614
+ }
3615
+ .lineage-inspector__actions {
3616
+ flex-direction: column;
3617
+ gap: 9px;
3618
+ }
3619
+ .lineage-inspector__action-divider {
3620
+ width: 100%;
3621
+ height: 1px;
3622
+ min-height: 1px;
3623
+ align-self: auto;
3624
+ }
3625
+ }
3626
+
3627
+ @media (prefers-reduced-motion: reduce) {
3628
+ .lineage-graph__tool-panel,
3629
+ .lineage-inspector,
3630
+ .lineage-graph__dock-context-clear .icon {
3631
+ animation: none;
3632
+ }
3633
+ .lineage-graph__dock-context-bar,
3634
+ .lineage-graph__dock-context-summary-icon,
3635
+ .lineage-graph__dock-context-label,
3636
+ .lineage-graph__dock-context-type,
3637
+ .lineage-graph__stage-surface
3638
+ .td-graph-controls--vertical
3639
+ .react-flow__controls-button,
3640
+ .lineage-inspector__action {
3641
+ transition: none;
3642
+ }
3643
+ }
3644
+
3645
+ /* ---------------------------------------------------------------------------
3646
+ * Core Graph decorations used only by LineageGraph (moved from
3647
+ * @truedat/core/styles/CommonGraphs.less when graph.less was split into
3648
+ * CommonGraphs.less + ConceptGraph.less).
3649
+ * ------------------------------------------------------------------------ */
3650
+
3651
+ .td-graph-container {
3652
+ .td-graph-minimap-shell {
3653
+ position: absolute;
3654
+ bottom: 12px;
3655
+ left: 12px;
3656
+ z-index: 5;
3657
+ overflow: hidden;
3658
+ width: 200px;
3659
+ border: 1px solid #d7dde6;
3660
+ border-radius: 16px;
3661
+ background: rgba(255, 255, 255, 0.94);
3662
+ box-shadow: 0 12px 28px rgba(15, 23, 42, 0.13);
3663
+ backdrop-filter: blur(10px);
3664
+ -webkit-backdrop-filter: blur(10px);
3665
+ transition: width 200ms ease;
3666
+ }
3667
+
3668
+ .td-graph-minimap-shell--collapsed {
3669
+ width: 200px;
3670
+ }
3671
+
3672
+ .td-graph-minimap-shell--expanded {
3673
+ width: auto;
3674
+ min-width: 288px;
3675
+ }
3676
+
3677
+ .td-graph-minimap-body {
3678
+ position: relative;
3679
+ width: 100%;
3680
+ }
3681
+
3682
+ .td-graph-minimap-expand {
3683
+ display: none;
3684
+ }
3685
+
3686
+ .td-graph-minimap-header {
3687
+ display: flex;
3688
+ height: 32px;
3689
+ align-items: center;
3690
+ gap: 10px;
3691
+ padding: 0 12px;
3692
+ border-bottom: 1px solid #e5eaf0;
3693
+ color: #334155;
3694
+ }
3695
+
3696
+ .td-graph-minimap-title {
3697
+ display: inline-flex;
3698
+ min-width: 0;
3699
+ flex: 1;
3700
+ align-items: center;
3701
+ gap: 8px;
3702
+ font-size: 12px;
3703
+ font-weight: 800;
3704
+ white-space: nowrap;
3705
+ }
3706
+
3707
+ .td-graph-minimap-title .icon {
3708
+ display: inline-flex;
3709
+ align-items: center;
3710
+ justify-content: center;
3711
+ height: 14px;
3712
+ margin: 0;
3713
+ line-height: 1;
3714
+ color: #ed5c17;
3715
+ }
3716
+
3717
+ .td-graph-minimap-zoom {
3718
+ color: #64748b;
3719
+ font-size: 12px;
3720
+ font-weight: 800;
3721
+ white-space: nowrap;
3722
+ }
3723
+
3724
+ .td-graph-minimap-toggle {
3725
+ display: inline-flex;
3726
+ width: 24px;
3727
+ height: 24px;
3728
+ align-items: center;
3729
+ justify-content: center;
3730
+ padding: 0;
3731
+ border: 0;
3732
+ background: transparent;
3733
+ color: #64748b;
3734
+ cursor: pointer;
3735
+ }
3736
+
3737
+ .td-graph-minimap-toggle:hover,
3738
+ .td-graph-minimap-toggle:focus-visible {
3739
+ color: #002057;
3740
+ }
3741
+
3742
+ .td-graph-minimap-toggle:focus-visible {
3743
+ outline: 2px solid #ed5c17;
3744
+ outline-offset: 2px;
3745
+ }
3746
+
3747
+ .td-graph-minimap-controls {
3748
+ display: flex;
3749
+ gap: 8px;
3750
+ margin-top: 12px;
3751
+ .td-graph-minimap-control-button {
3752
+ width: 34px;
3753
+ height: 34px;
3754
+ min-width: 34px;
3755
+ min-height: 34px;
3756
+ padding: 0;
3757
+ background: rgba(255, 255, 255, 0.94);
3758
+ border: 1px solid #d7dde6;
3759
+ border-radius: 16px;
3760
+ color: #64748b;
3761
+ cursor: pointer;
3762
+ display: flex;
3763
+ align-items: center;
3764
+ justify-content: center;
3765
+ &:hover {
3766
+ color: #002057;
3767
+ }
3768
+ &:focus-visible {
3769
+ outline: 2px solid #ed5c17;
3770
+ outline-offset: 2px;
3771
+ }
3772
+ }
3773
+ }
3774
+
3775
+ .react-flow__minimap {
3776
+ position: static;
3777
+ display: block;
3778
+ margin: 0;
3779
+ border: 0;
3780
+ border-radius: 0;
3781
+ background: transparent;
3782
+ box-shadow: none;
3783
+ backdrop-filter: none;
3784
+ -webkit-backdrop-filter: none;
3785
+ }
3786
+
3787
+ .react-flow__minimap .react-flow__minimap-mask {
3788
+ fill: rgba(15, 23, 42, 0.08);
3789
+ stroke: transparent;
3790
+ stroke-width: 0;
3791
+ transition:
3792
+ stroke 120ms ease,
3793
+ stroke-width 120ms ease,
3794
+ fill 120ms ease;
3795
+ cursor: move;
3796
+ }
3797
+
3798
+ .react-flow__minimap:hover .react-flow__minimap-mask {
3799
+ stroke: #002057;
3800
+ stroke-width: 6;
3801
+ fill: rgba(0, 32, 87, 0.12);
3802
+ }
3803
+
3804
+ .react-flow__minimap .react-flow__minimap-node {
3805
+ fill: #334155;
3806
+ stroke: rgba(15, 23, 42, 0.12);
3807
+ stroke-width: 1;
3808
+ }
3809
+ }
3810
+
3811
+ .ui.modal.td-graph-modal > .content {
3812
+ padding: 0;
3813
+ }
3814
+
3815
+ .ui.fullscreen.modal.td-graph-modal--expanded {
3816
+ inset: 12px auto auto 12px !important;
3817
+ width: calc(100vw - 24px) !important;
3818
+ height: calc(100vh - 24px);
3819
+ margin: 0 !important;
3820
+ border: 1px solid #d7dde6;
3821
+ border-radius: 8px;
3822
+ overflow: visible;
3823
+ }
3824
+
3825
+ .ui.fullscreen.modal.td-graph-modal--expanded > .close {
3826
+ top: -14px;
3827
+ right: -14px;
3828
+ z-index: 20;
3829
+ width: 30px;
3830
+ height: 30px;
3831
+ margin: 0;
3832
+ border-radius: 8px;
3833
+ background: #ffffff;
3834
+ box-shadow: 0 8px 18px rgba(21, 26, 36, 0.18);
3835
+ }
3836
+
3837
+ .ui.modal.td-graph-modal--expanded > .content {
3838
+ height: 100%;
3839
+ border-radius: 8px;
3840
+ background: transparent;
3841
+ overflow: hidden;
3842
+ }
3843
+
3844
+ .ui.modal.td-graph-modal--expanded .td-graph-container {
3845
+ height: 100%;
3846
+ }
3847
+
3848
+ .td-graph-edge-metadata-badge {
3849
+ position: absolute;
3850
+ pointer-events: auto;
3851
+ cursor: pointer;
3852
+ z-index: 1001;
3853
+
3854
+ &__dot {
3855
+ display: block;
3856
+ width: 8px;
3857
+ height: 8px;
3858
+ border-radius: 50%;
3859
+ border: 1.5px solid #ffffff;
3860
+ background: var(--td-graph-edge-metadata, #7c3aed);
3861
+ box-shadow:
3862
+ 0 0 0 3px rgba(124, 58, 237, 0.2),
3863
+ 0 2px 6px rgba(21, 26, 36, 0.18);
3864
+ transition:
3865
+ transform 120ms ease,
3866
+ box-shadow 120ms ease;
3867
+ }
3868
+
3869
+ &:hover &__dot {
3870
+ transform: scale(1.35);
3871
+ box-shadow:
3872
+ 0 0 0 5px rgba(124, 58, 237, 0.32),
3873
+ 0 3px 10px rgba(21, 26, 36, 0.24);
3874
+ }
3875
+ }
3876
+
3877
+ /* Lineage variants of the shared node-state rules (the concept variant lives
3878
+ in @truedat/core/styles/ConceptGraph.less). */
3879
+ .td-lineage-group-node--connected,
3880
+ .td-lineage-resource-node--connected {
3881
+ border-color: var(--td-graph-accent, #ed5c17);
3882
+ box-shadow: 0 0 0 2px rgba(237, 92, 23, 0.22);
3883
+ }
3884
+
3885
+ .td-lineage-group-node .react-flow__handle,
3886
+ .td-lineage-resource-node .react-flow__handle {
3887
+ width: 8px;
3888
+ height: 8px;
3889
+ border: 0;
3890
+ background: transparent;
3891
+ opacity: 0;
3892
+ pointer-events: none;
3893
+ }
3894
+
3895
+ .lineage-inspector__original-resource {
3896
+ width: 100%;
3897
+ min-width: 0;
3898
+ cursor: pointer;
3899
+ }
3900
+
3901
+ .lineage-graph__stage .td-graph-edge--connection-selected {
3902
+ stroke: var(--td-graph-edge-metadata, #7c3aed) !important;
3903
+ stroke-width: 3px !important;
3904
+ stroke-opacity: 1;
3905
+ }
3906
+
3907
+ .lineage-graph__stage .td-graph-edge-label--aggregated,
3908
+ .lineage-graph__stage-surface .td-graph-edge-label--aggregated {
3909
+ display: inline-flex;
3910
+ align-items: center;
3911
+ gap: 4px;
3912
+ min-width: 20px;
3913
+ padding: 2px 6px;
3914
+ border-color: var(--td-graph-accent, #ed5c17);
3915
+ background: #ffffff;
3916
+ color: var(--td-graph-accent, #ed5c17);
3917
+ font-size: 10px;
3918
+ font-weight: 800;
3919
+ text-align: center;
3920
+ }
3921
+
3922
+ .lineage-inspector__edge-summary {
3923
+ grid-template-columns: minmax(0, 1fr);
3924
+ gap: 10px;
3925
+ }
3926
+ .lineage-inspector__edge-summary > div {
3927
+ padding: 10px 12px;
3928
+ border: 1px solid #e2e8f0;
3929
+ border-radius: 8px;
3930
+ background: #f8fafc;
3931
+ }
3932
+ .lineage-inspector__edge-summary > .icon {
3933
+ justify-self: center;
3934
+ transform: rotate(90deg);
3935
+ }
3936
+
3937
+ .lineage-view__main {
3938
+ --td-lineage-canvas-height: max(
3939
+ 0px,
3940
+ calc(100dvh - var(--td-lineage-canvas-top, 170px) - 16px)
3941
+ );
3942
+ }
3943
+
3944
+ .lineage-graph
3945
+ .react-flow__node.td-lineage-group-node--entity-system
3946
+ > .td-lineage-group-node,
3947
+ .lineage-graph
3948
+ .react-flow__node.td-lineage-resource-node--entity-system
3949
+ > .td-lineage-resource-node {
3950
+ border-color: #b3b3b3;
3951
+ }
3952
+
3953
+ // Catalog state only changes borders and group headers, never box backgrounds.
3954
+ .lineage-graph
3955
+ .react-flow__node.td-lineage-catalog--absent
3956
+ > :is(.td-lineage-group-node, .td-lineage-resource-node) {
3957
+ border: 2px dashed #b3b3b3;
3958
+ }
3959
+ .lineage-graph
3960
+ .react-flow__node.td-lineage-catalog--deleted
3961
+ > :is(.td-lineage-group-node, .td-lineage-resource-node) {
3962
+ border: 2px dashed #dc2626;
3963
+ }
3964
+ .lineage-graph
3965
+ .react-flow__node.td-lineage-catalog--absent
3966
+ > .td-lineage-group-node {
3967
+ :is(.td-lineage-group-node__header, .td-lineage-group-node__absolute-header) {
3968
+ background: linear-gradient(135deg, #4e4e4e, #979191);
3969
+ box-shadow: none;
3970
+ color: #ffffff;
3971
+ }
3972
+ :is(
3973
+ .td-lineage-group-node__label,
3974
+ .td-lineage-group-node__absolute-label,
3975
+ .td-lineage-group-node__type-icon.icon,
3976
+ .td-lineage-group-node__toggle
3977
+ ) {
3978
+ color: #ffffff;
3979
+ }
3980
+ }
3981
+
3982
+ // Only catalog-present SYSTEM headers use the dark blue treatment.
3983
+ .lineage-graph {
3984
+ --td-graph-bg: #eaeaea;
3985
+
3986
+ .react-flow__node :is(.td-lineage-group-node, .td-lineage-resource-node) {
3987
+ background: #ffffff;
3988
+ }
3989
+
3990
+ .react-flow__node.td-lineage-catalog--present:is(
3991
+ .td-lineage-group-node--entity-system,
3992
+ .td-lineage-entity-color--system
3993
+ )
3994
+ > .td-lineage-group-node {
3995
+ :is(
3996
+ .td-lineage-group-node__header,
3997
+ .td-lineage-group-node__absolute-header
3998
+ ) {
3999
+ background: linear-gradient(135deg, #003882, #001a40);
4000
+ border-bottom-color: #001a40;
4001
+ box-shadow: none;
4002
+ color: #ffffff;
4003
+ }
4004
+
4005
+ :is(
4006
+ .td-lineage-group-node__absolute-label,
4007
+ .td-lineage-group-node__label,
4008
+ .td-lineage-group-node__toggle
4009
+ ) {
4010
+ color: #ffffff;
4011
+ }
4012
+
4013
+ .td-lineage-group-node__type-icon.icon {
4014
+ color: #93c5fd;
4015
+ }
4016
+
4017
+ .td-lineage-group-node__toggle:hover {
4018
+ background: #002b66;
4019
+ }
4020
+ }
4021
+
4022
+ // A SYSTEM without visible children uses the resource-node renderer.
4023
+ .react-flow__node.td-lineage-catalog--present.td-lineage-resource-node--entity-system
4024
+ > .td-lineage-resource-node {
4025
+ .td-lineage-resource-node__header {
4026
+ background: linear-gradient(135deg, #003882, #001a40);
4027
+ border-bottom-color: #001a40;
4028
+ box-shadow: none;
4029
+ color: #ffffff;
4030
+ }
4031
+
4032
+ :is(.td-lineage-resource-node__label, .td-lineage-resource-node__kind) {
4033
+ color: #ffffff;
4034
+ }
4035
+
4036
+ .td-lineage-resource-node__type-icon {
4037
+ color: #93c5fd;
4038
+ }
4039
+ }
4040
+ }
4041
+
4042
+ .lineage-graph__tool-panel--legend {
4043
+ overflow-y: auto;
4044
+ }
4045
+ .lineage-graph__basic-legend-swatch {
4046
+ flex: 0 0 28px;
4047
+ width: 28px;
4048
+ height: 18px;
4049
+ border: 1px solid #cbd5e1;
4050
+ border-radius: 4px;
4051
+ &--system {
4052
+ background: linear-gradient(135deg, #003882, #001a40);
4053
+ }
4054
+ &--types {
4055
+ background: linear-gradient(90deg, #0f766e 50%, #7c3aed 50%);
4056
+ }
4057
+ &--absent {
4058
+ border: 2px dashed #b3b3b3;
4059
+ background: linear-gradient(135deg, #4e4e4e, #979191);
4060
+ }
4061
+ &--deleted {
4062
+ border: 2px dashed #dc2626;
4063
+ }
4064
+ &--selection {
4065
+ border: 2px solid #ed5c17;
4066
+ }
4067
+ &--dependencies {
4068
+ height: 6px;
4069
+ border: 0;
4070
+ background: linear-gradient(90deg, #2563eb 50%, #ed5c17 50%);
4071
+ }
4072
+ }
4073
+ .lineage-graph__basic-legend-badge {
4074
+ min-width: 28px;
4075
+ padding: 2px 4px;
4076
+ border: 1px solid #cbd5e1;
4077
+ border-radius: 3px;
4078
+ font-size: 10px;
4079
+ font-weight: 700;
4080
+ text-align: center;
4081
+ }
4082
+
4083
+ .lineage-graph__basic-legend-swatch--impact,
4084
+ .lineage-graph__basic-legend-swatch--lineage {
4085
+ height: 3px;
4086
+ border: 0;
4087
+ background: #2563eb;
4088
+ }
4089
+ .lineage-graph__basic-legend-swatch--lineage {
4090
+ background: #ed5c17;
4091
+ }
4092
+ .lineage-graph__tool-panel--legend .lineage-graph__legend-section:empty {
4093
+ display: none;
4094
+ }