@x12i/diagrams 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1389 @@
1
+ /*
2
+ * @x12i/diagrams styles.
3
+ *
4
+ * Tokens only: no hard-coded colors, lengths or font sizes (a test enforces
5
+ * this). Requires the kit variables, for example:
6
+ *
7
+ * @import "@x12i/themes/themes.css";
8
+ * @import "@x12i/ui/styles.css";
9
+ * @import "@x12i/diagrams/styles.css";
10
+ *
11
+ * Every selector sits inside :where(), so it has zero specificity and any app
12
+ * class overrides it. Components expose styling hooks as data attributes
13
+ * (data-kind, data-status, data-selected, ...). Text layout uses logical
14
+ * properties, so right-to-left works without extra CSS. The few physical
15
+ * properties (connection points, the viewport) follow React Flow's left-to-right
16
+ * coordinate system on purpose.
17
+ *
18
+ * This file restates the layout rules React Flow needs, so you do not import
19
+ * "@xyflow/react/dist/style.css". Its colors and sizes come from kit tokens.
20
+ */
21
+
22
+ /* ------------------------------------------------------------ Canvas host */
23
+
24
+ :where([data-kit="diagram-canvas"]) {
25
+ position: relative;
26
+ box-sizing: border-box;
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: var(--kit-space-2);
30
+ inline-size: 100%;
31
+ min-inline-size: 0;
32
+ color: var(--kit-color-text-primary);
33
+ font-family: var(--kit-font-family-sans);
34
+ font-size: var(--kit-text-body-size);
35
+ line-height: var(--kit-text-body-line-height);
36
+ }
37
+
38
+ :where([data-kit="diagram-canvas"]):focus-visible {
39
+ outline: var(--kit-border-width-focus) solid var(--kit-color-border-focus);
40
+ outline-offset: var(--kit-space-0-5);
41
+ }
42
+
43
+ :where([data-kit="diagram-canvas"] > [data-slot="stage"]) {
44
+ position: relative;
45
+ box-sizing: border-box;
46
+ block-size: var(--diagram-height, calc(var(--kit-size-56) * 10));
47
+ min-block-size: calc(var(--kit-size-56) * 3);
48
+ overflow: hidden;
49
+ background-color: var(--kit-color-bg-canvas);
50
+ border: var(--kit-border-width-default) solid var(--kit-color-border-default);
51
+ border-radius: var(--kit-radius-panel);
52
+ }
53
+
54
+ :where([data-kit="diagram-canvas"] [data-slot="empty"]) {
55
+ position: absolute;
56
+ inset: 0;
57
+ z-index: var(--kit-z-sticky);
58
+ display: grid;
59
+ place-items: center;
60
+ margin: 0;
61
+ padding: var(--kit-space-4);
62
+ color: var(--kit-color-text-secondary);
63
+ text-align: center;
64
+ pointer-events: none;
65
+ }
66
+
67
+ /* ----------------------------------------------- React Flow layout (restated) */
68
+
69
+ :where([data-kit="diagram-canvas"] .react-flow) {
70
+ direction: ltr;
71
+ --xy-background-color: transparent;
72
+ --xy-edge-stroke: var(--kit-color-border-strong);
73
+ --xy-edge-stroke-width: var(--kit-border-width-default);
74
+ --xy-edge-stroke-selected: var(--kit-color-accent-default);
75
+ --xy-connectionline-stroke: var(--kit-color-accent-default);
76
+ --xy-connectionline-stroke-width: var(--kit-border-width-emphasis);
77
+ --xy-handle-background-color: var(--kit-color-border-strong);
78
+ --xy-selection-background-color: var(--kit-color-selection);
79
+ --xy-selection-border: var(--kit-border-width-default) dashed var(--kit-color-accent-default);
80
+ --xy-resize-background-color: var(--kit-color-accent-default);
81
+ --xy-background-pattern-color: var(--kit-color-border-default);
82
+ --xy-minimap-background-color: var(--kit-color-bg-surface);
83
+ --xy-minimap-mask-background-color: var(--kit-color-scrim);
84
+ --xy-minimap-node-background-color: var(--kit-color-border-default);
85
+ --xy-minimap-node-stroke-width: 0;
86
+ background-color: var(--xy-background-color);
87
+ }
88
+
89
+ :where([data-kit="diagram-canvas"] .react-flow__background) {
90
+ background-color: var(--xy-background-color);
91
+ pointer-events: none;
92
+ z-index: -1;
93
+ }
94
+
95
+ :where([data-kit="diagram-canvas"] .react-flow__background-pattern) {
96
+ fill: var(--xy-background-pattern-color);
97
+ }
98
+
99
+ :where([data-kit="diagram-canvas"] .react-flow__container) {
100
+ position: absolute;
101
+ inline-size: 100%;
102
+ block-size: 100%;
103
+ top: 0;
104
+ left: 0;
105
+ }
106
+
107
+ :where([data-kit="diagram-canvas"] .react-flow__pane) {
108
+ z-index: 1;
109
+ touch-action: none;
110
+ }
111
+
112
+ :where([data-kit="diagram-canvas"] .react-flow__pane.draggable) {
113
+ cursor: grab;
114
+ }
115
+
116
+ :where([data-kit="diagram-canvas"] .react-flow__pane.dragging) {
117
+ cursor: grabbing;
118
+ }
119
+
120
+ :where([data-kit="diagram-canvas"] .react-flow__pane.selection) {
121
+ cursor: pointer;
122
+ }
123
+
124
+ :where([data-kit="diagram-canvas"] .react-flow__viewport) {
125
+ transform-origin: 0 0;
126
+ z-index: 2;
127
+ pointer-events: none;
128
+ }
129
+
130
+ :where([data-kit="diagram-canvas"] .react-flow__renderer) {
131
+ z-index: 4;
132
+ }
133
+
134
+ :where([data-kit="diagram-canvas"] .react-flow__selection) {
135
+ z-index: 6;
136
+ }
137
+
138
+ :where([data-kit="diagram-canvas"] .react-flow__nodesselection) {
139
+ z-index: 3;
140
+ transform-origin: left top;
141
+ pointer-events: none;
142
+ }
143
+
144
+ :where([data-kit="diagram-canvas"] .react-flow__nodesselection-rect) {
145
+ position: absolute;
146
+ pointer-events: all;
147
+ cursor: grab;
148
+ }
149
+
150
+ :where([data-kit="diagram-canvas"] .react-flow__nodesselection-rect),
151
+ :where([data-kit="diagram-canvas"] .react-flow__selection) {
152
+ background: var(--xy-selection-background-color);
153
+ border: var(--xy-selection-border);
154
+ }
155
+
156
+ :where([data-kit="diagram-canvas"] .react-flow__edges) {
157
+ position: absolute;
158
+ }
159
+
160
+ :where([data-kit="diagram-canvas"] .react-flow__edges svg) {
161
+ position: absolute;
162
+ overflow: visible;
163
+ pointer-events: none;
164
+ }
165
+
166
+ :where([data-kit="diagram-canvas"] .react-flow__edge) {
167
+ pointer-events: visibleStroke;
168
+ }
169
+
170
+ :where([data-kit="diagram-canvas"] .react-flow__edge.selectable) {
171
+ cursor: pointer;
172
+ }
173
+
174
+ :where([data-kit="diagram-canvas"] .react-flow__edge.inactive) {
175
+ pointer-events: none;
176
+ }
177
+
178
+ :where([data-kit="diagram-canvas"] .react-flow__edge-path) {
179
+ fill: none;
180
+ }
181
+
182
+ :where([data-kit="diagram-canvas"] .react-flow__connection) {
183
+ pointer-events: none;
184
+ }
185
+
186
+ :where([data-kit="diagram-canvas"] .react-flow__connection-path) {
187
+ fill: none;
188
+ stroke: var(--xy-connectionline-stroke);
189
+ stroke-width: var(--xy-connectionline-stroke-width);
190
+ }
191
+
192
+ :where([data-kit="diagram-canvas"] svg.react-flow__connectionline) {
193
+ position: absolute;
194
+ z-index: 1001;
195
+ overflow: visible;
196
+ }
197
+
198
+ :where([data-kit="diagram-canvas"] .react-flow__nodes) {
199
+ pointer-events: none;
200
+ transform-origin: 0 0;
201
+ }
202
+
203
+ :where([data-kit="diagram-canvas"] .react-flow__node) {
204
+ position: absolute;
205
+ box-sizing: border-box;
206
+ transform-origin: 0 0;
207
+ pointer-events: all;
208
+ cursor: default;
209
+ user-select: none;
210
+ /* A transparent outline stays visible in forced-colors mode; the visible ring is drawn on the node body. */
211
+ outline: var(--kit-border-width-focus) solid transparent;
212
+ }
213
+
214
+ :where([data-kit="diagram-canvas"] .react-flow__node.selectable) {
215
+ cursor: pointer;
216
+ }
217
+
218
+ :where([data-kit="diagram-canvas"] .react-flow__node.draggable) {
219
+ cursor: grab;
220
+ }
221
+
222
+ :where([data-kit="diagram-canvas"] .react-flow__node.draggable.dragging) {
223
+ cursor: grabbing;
224
+ }
225
+
226
+ :where([data-kit="diagram-canvas"] .react-flow__edgelabel-renderer),
227
+ :where([data-kit="diagram-canvas"] .react-flow__viewport-portal) {
228
+ position: absolute;
229
+ inset: 0;
230
+ inline-size: 100%;
231
+ block-size: 100%;
232
+ user-select: none;
233
+ }
234
+
235
+ :where([data-kit="diagram-canvas"] .react-flow__edgelabel-renderer) {
236
+ pointer-events: none;
237
+ }
238
+
239
+ /* Panels (minimap, attribution) */
240
+
241
+ :where([data-kit="diagram-canvas"] .react-flow__panel) {
242
+ position: absolute;
243
+ z-index: 5;
244
+ margin: var(--kit-space-3);
245
+ }
246
+
247
+ :where([data-kit="diagram-canvas"] .react-flow__panel.top) {
248
+ top: 0;
249
+ }
250
+
251
+ :where([data-kit="diagram-canvas"] .react-flow__panel.bottom) {
252
+ bottom: 0;
253
+ }
254
+
255
+ :where([data-kit="diagram-canvas"] .react-flow__panel.left) {
256
+ left: 0;
257
+ }
258
+
259
+ :where([data-kit="diagram-canvas"] .react-flow__panel.right) {
260
+ right: 0;
261
+ }
262
+
263
+ :where([data-kit="diagram-canvas"] .react-flow__panel.top.center),
264
+ :where([data-kit="diagram-canvas"] .react-flow__panel.bottom.center) {
265
+ left: 50%;
266
+ transform: translateX(-50%);
267
+ }
268
+
269
+ :where([data-kit="diagram-canvas"] .react-flow__attribution) {
270
+ margin: 0;
271
+ padding-block: var(--kit-space-0-5);
272
+ padding-inline: var(--kit-space-1);
273
+ background: var(--kit-color-bg-surface);
274
+ font-size: var(--kit-text-caption-size);
275
+ }
276
+
277
+ :where([data-kit="diagram-canvas"] .react-flow__attribution a) {
278
+ color: var(--kit-color-text-secondary);
279
+ text-decoration: none;
280
+ }
281
+
282
+ :where([data-kit="diagram-canvas"] .react-flow__pane.selection .react-flow__panel) {
283
+ pointer-events: none;
284
+ }
285
+
286
+ /* Minimap */
287
+
288
+ :where([data-kit="diagram-canvas"] .react-flow__minimap) {
289
+ overflow: hidden;
290
+ background: var(--xy-minimap-background-color);
291
+ border: var(--kit-border-width-default) solid var(--kit-color-border-default);
292
+ border-radius: var(--kit-radius-control);
293
+ box-shadow: var(--kit-shadow-raised);
294
+ }
295
+
296
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-svg) {
297
+ display: block;
298
+ }
299
+
300
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-mask) {
301
+ fill: var(--xy-minimap-mask-background-color);
302
+ fill-rule: evenodd;
303
+ }
304
+
305
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-node) {
306
+ fill: var(--xy-minimap-node-background-color);
307
+ stroke-width: var(--xy-minimap-node-stroke-width);
308
+ }
309
+
310
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-node.success) {
311
+ fill: var(--kit-color-status-success-border);
312
+ }
313
+
314
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-node.warning) {
315
+ fill: var(--kit-color-status-warning-border);
316
+ }
317
+
318
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-node.danger) {
319
+ fill: var(--kit-color-status-danger-border);
320
+ }
321
+
322
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-node.info) {
323
+ fill: var(--kit-color-status-info-border);
324
+ }
325
+
326
+ /* ----------------------------------------------------------------- Nodes */
327
+
328
+ :where([data-kit="diagram-node"]) {
329
+ --_bg: var(--kit-color-bg-surface);
330
+ --_fg: var(--kit-color-text-primary);
331
+ --_bd: var(--kit-color-border-default);
332
+ --_bw: var(--kit-border-width-default);
333
+
334
+ position: relative;
335
+ box-sizing: border-box;
336
+ display: flex;
337
+ align-items: center;
338
+ justify-content: center;
339
+ inline-size: 100%;
340
+ block-size: 100%;
341
+ padding-block: var(--kit-space-2);
342
+ padding-inline: var(--kit-space-3);
343
+ border: var(--_bw) solid var(--_bd);
344
+ border-radius: var(--kit-radius-8);
345
+ background-color: var(--_bg);
346
+ color: var(--_fg);
347
+ font-size: var(--kit-text-label-size);
348
+ font-weight: var(--kit-text-label-weight);
349
+ line-height: var(--kit-text-label-line-height);
350
+ text-align: center;
351
+ transition:
352
+ border-color var(--kit-duration-fast) var(--kit-easing-standard),
353
+ box-shadow var(--kit-duration-fast) var(--kit-easing-standard);
354
+ }
355
+
356
+ /* Kinds */
357
+
358
+ :where([data-kit="diagram-node"][data-kind="start"]),
359
+ :where([data-kit="diagram-node"][data-kind="end"]) {
360
+ border-radius: var(--kit-radius-pill);
361
+ }
362
+
363
+ :where([data-kit="diagram-node"][data-kind="start"]) {
364
+ --_bg: var(--kit-color-bg-inverse);
365
+ --_fg: var(--kit-color-text-inverse);
366
+ --_bd: var(--kit-color-bg-inverse);
367
+ }
368
+
369
+ :where([data-kit="diagram-node"][data-kind="end"]) {
370
+ --_bd: var(--kit-color-border-strong);
371
+ --_bw: var(--kit-border-width-emphasis);
372
+ }
373
+
374
+ :where([data-kit="diagram-node"][data-kind="decision"]) {
375
+ border: 0;
376
+ background-color: transparent;
377
+ }
378
+
379
+ :where([data-kit="diagram-node"][data-kind="decision"] > [data-slot="shape"]) {
380
+ position: absolute;
381
+ inset: 0;
382
+ inline-size: 100%;
383
+ block-size: 100%;
384
+ overflow: visible;
385
+ fill: var(--_bg);
386
+ stroke: var(--_bd);
387
+ stroke-width: var(--_bw);
388
+ }
389
+
390
+ :where([data-kit="diagram-node"][data-kind="decision"] > [data-slot="content"]) {
391
+ position: relative;
392
+ padding-inline: 20%;
393
+ }
394
+
395
+ :where([data-kit="diagram-node"][data-kind="group"]),
396
+ :where([data-kit="diagram-node"][data-kind="subflow"]) {
397
+ flex-direction: column;
398
+ align-items: stretch;
399
+ justify-content: flex-start;
400
+ padding: 0;
401
+ /* Edges between children run under the group, so its fill must stay see-through. */
402
+ background-color: color-mix(in srgb, var(--kit-color-accent-subtle) 35%, transparent);
403
+ border-style: dashed;
404
+ border-radius: var(--kit-radius-12);
405
+ text-align: start;
406
+ }
407
+
408
+ :where([data-kit="diagram-node"][data-kind="subflow"]) {
409
+ border-style: solid;
410
+ }
411
+
412
+ :where([data-kit="diagram-node"][data-kind="note"]) {
413
+ --_bg: var(--kit-color-status-warning-background);
414
+ --_fg: var(--kit-color-status-warning-foreground);
415
+ --_bd: var(--kit-color-status-warning-border);
416
+ align-items: flex-start;
417
+ justify-content: flex-start;
418
+ border-radius: var(--kit-radius-4);
419
+ text-align: start;
420
+ }
421
+
422
+ :where([data-kit="diagram-node"][data-kind="image"]),
423
+ :where([data-kit="diagram-node"][data-kind="chart"]),
424
+ :where([data-kit="diagram-node"][data-kind="code"]),
425
+ :where([data-kit="diagram-node"][data-kind="entity"]) {
426
+ flex-direction: column;
427
+ align-items: stretch;
428
+ justify-content: flex-start;
429
+ gap: var(--kit-space-2);
430
+ text-align: start;
431
+ }
432
+
433
+ :where([data-kit="diagram-node"][data-kind="entity"]) {
434
+ padding: 0;
435
+ gap: 0;
436
+ }
437
+
438
+ :where([data-kit="diagram-node"][data-kind="agent"]) {
439
+ gap: var(--kit-space-2);
440
+ justify-content: flex-start;
441
+ text-align: start;
442
+ border-radius: var(--kit-radius-12);
443
+ }
444
+
445
+ /* Status colors, the same ones a Badge and a chart use */
446
+
447
+ :where([data-kit="diagram-node"][data-status="success"]) {
448
+ --_bg: var(--kit-color-status-success-background);
449
+ --_fg: var(--kit-color-status-success-foreground);
450
+ --_bd: var(--kit-color-status-success-border);
451
+ }
452
+
453
+ :where([data-kit="diagram-node"][data-status="warning"]) {
454
+ --_bg: var(--kit-color-status-warning-background);
455
+ --_fg: var(--kit-color-status-warning-foreground);
456
+ --_bd: var(--kit-color-status-warning-border);
457
+ }
458
+
459
+ :where([data-kit="diagram-node"][data-status="danger"]) {
460
+ --_bg: var(--kit-color-status-danger-background);
461
+ --_fg: var(--kit-color-status-danger-foreground);
462
+ --_bd: var(--kit-color-status-danger-border);
463
+ }
464
+
465
+ :where([data-kit="diagram-node"][data-status="info"]) {
466
+ --_bg: var(--kit-color-status-info-background);
467
+ --_fg: var(--kit-color-status-info-foreground);
468
+ --_bd: var(--kit-color-status-info-border);
469
+ }
470
+
471
+ /* Selection, focus and states */
472
+
473
+ :where([data-kit="diagram-node"][data-selected]) {
474
+ --_bd: var(--kit-color-accent-default);
475
+ --_bw: var(--kit-border-width-emphasis);
476
+ box-shadow: 0 0 0 var(--kit-space-1) var(--kit-color-selection);
477
+ }
478
+
479
+ :where([data-kit="diagram-node"][data-kind="decision"][data-selected]) {
480
+ box-shadow: none;
481
+ }
482
+
483
+ :where([data-kit="diagram-node"][data-connecting]) {
484
+ outline: var(--kit-border-width-emphasis) dashed var(--kit-color-accent-default);
485
+ outline-offset: var(--kit-space-1);
486
+ }
487
+
488
+ :where([data-kit="diagram-node"][data-locked]) {
489
+ cursor: not-allowed;
490
+ }
491
+
492
+ :where([data-kit="diagram-canvas"] .react-flow__node:focus-visible > [data-kit="diagram-node"]) {
493
+ outline: var(--kit-border-width-focus) solid var(--kit-color-border-focus);
494
+ outline-offset: var(--kit-space-0-5);
495
+ }
496
+
497
+ :where([data-kit="diagram-canvas"] .react-flow__node:focus-visible > [data-kit="diagram-node"][data-kind="decision"] > [data-slot="shape"]) {
498
+ stroke: var(--kit-color-border-focus);
499
+ stroke-width: var(--kit-border-width-focus);
500
+ }
501
+
502
+ /* Node content */
503
+
504
+ :where([data-kit="diagram-node"] [data-slot="content"]) {
505
+ min-inline-size: 0;
506
+ overflow-wrap: anywhere;
507
+ }
508
+
509
+ :where([data-kit="diagram-node"] [data-slot="label"]) {
510
+ min-inline-size: 0;
511
+ overflow-wrap: anywhere;
512
+ }
513
+
514
+ :where([data-kit="diagram-node"] [data-placeholder]) {
515
+ color: var(--kit-color-text-secondary);
516
+ font-style: italic;
517
+ }
518
+
519
+ :where([data-kit="diagram-node"] [data-slot="header"]) {
520
+ display: flex;
521
+ align-items: center;
522
+ gap: var(--kit-space-2);
523
+ padding-block: var(--kit-space-1);
524
+ padding-inline: var(--kit-space-2);
525
+ font-weight: var(--kit-text-label-weight);
526
+ }
527
+
528
+ :where([data-kit="diagram-node"][data-kind="entity"] > [data-slot="header"]) {
529
+ padding-block: var(--kit-space-2);
530
+ padding-inline: var(--kit-space-3);
531
+ border-block-end: var(--kit-border-width-default) solid var(--_bd);
532
+ background-color: var(--kit-color-bg-canvas);
533
+ border-start-start-radius: var(--kit-radius-8);
534
+ border-start-end-radius: var(--kit-radius-8);
535
+ }
536
+
537
+ :where([data-kit="diagram-node"] [data-slot="count"]),
538
+ :where([data-kit="diagram-node"] [data-slot="type"]),
539
+ :where([data-kit="diagram-node"] [data-slot="role"]) {
540
+ color: var(--kit-color-text-secondary);
541
+ font-size: var(--kit-text-caption-size);
542
+ font-weight: var(--kit-text-caption-weight);
543
+ }
544
+
545
+ :where([data-kit="diagram-node"] [data-slot="role"]) {
546
+ display: block;
547
+ }
548
+
549
+ :where([data-kit="diagram-node"] [data-slot="fields"]) {
550
+ flex: 1;
551
+ min-block-size: 0;
552
+ margin: 0;
553
+ padding: 0;
554
+ overflow: hidden;
555
+ list-style: none;
556
+ }
557
+
558
+ :where([data-kit="diagram-node"] [data-slot="fields"] > li) {
559
+ display: flex;
560
+ justify-content: space-between;
561
+ gap: var(--kit-space-3);
562
+ padding-block: var(--kit-space-0-5);
563
+ padding-inline: var(--kit-space-3);
564
+ }
565
+
566
+ :where([data-kit="diagram-node"] [data-slot="fields"] > li[data-key]) {
567
+ font-weight: var(--kit-font-weight-semibold);
568
+ }
569
+
570
+ :where([data-kit="diagram-node"] [data-slot="code"]) {
571
+ flex: 1;
572
+ min-block-size: 0;
573
+ margin: 0;
574
+ padding: var(--kit-space-2);
575
+ overflow: hidden;
576
+ border-radius: var(--kit-radius-4);
577
+ background-color: var(--kit-color-bg-canvas);
578
+ font-family: var(--kit-font-family-mono);
579
+ font-size: var(--kit-text-code-size);
580
+ line-height: var(--kit-text-code-line-height);
581
+ text-align: start;
582
+ white-space: pre;
583
+ }
584
+
585
+ :where([data-kit="diagram-node"] [data-slot="media"]) {
586
+ display: grid;
587
+ flex: 1;
588
+ min-block-size: 0;
589
+ place-items: center;
590
+ overflow: hidden;
591
+ border-radius: var(--kit-radius-4);
592
+ background-color: var(--kit-color-bg-canvas);
593
+ color: var(--kit-color-text-secondary);
594
+ }
595
+
596
+ :where([data-kit="diagram-node"] [data-slot="media"] > img) {
597
+ inline-size: 100%;
598
+ block-size: 100%;
599
+ object-fit: contain;
600
+ }
601
+
602
+ :where([data-kit="diagram-node"] [data-slot="media"] > [data-kit="diagram-icon"]) {
603
+ inline-size: var(--kit-size-icon-lg);
604
+ block-size: var(--kit-size-icon-lg);
605
+ }
606
+
607
+ :where([data-kit="diagram-node"] [data-slot="caption"]) {
608
+ text-align: center;
609
+ }
610
+
611
+ :where([data-kit="diagram-node"] [data-slot="chart"]) {
612
+ flex: 1;
613
+ inline-size: 100%;
614
+ min-block-size: 0;
615
+ }
616
+
617
+ :where([data-kit="diagram-node"] [data-slot="chart"] rect) {
618
+ fill: var(--kit-color-chart-categorical-1);
619
+ }
620
+
621
+ :where([data-kit="diagram-node"] [data-slot="avatar"]) {
622
+ display: inline-grid;
623
+ flex: none;
624
+ place-items: center;
625
+ inline-size: var(--kit-size-28);
626
+ block-size: var(--kit-size-28);
627
+ border-radius: var(--kit-radius-full);
628
+ background-color: var(--kit-color-accent-default);
629
+ color: var(--kit-color-accent-on-accent);
630
+ font-weight: var(--kit-font-weight-semibold);
631
+ }
632
+
633
+ :where([data-kit="diagram-node"] > [data-slot="status"]) {
634
+ position: absolute;
635
+ inset-block-start: 0;
636
+ inset-inline-end: var(--kit-space-2);
637
+ translate: 0 -50%;
638
+ }
639
+
640
+ :where([data-kit="diagram-node"] [data-slot="editor"]) {
641
+ box-sizing: border-box;
642
+ inline-size: 100%;
643
+ min-inline-size: 0;
644
+ margin: 0;
645
+ padding-block: var(--kit-space-0-5);
646
+ padding-inline: var(--kit-space-1);
647
+ border: var(--kit-border-width-default) solid var(--kit-color-border-focus);
648
+ border-radius: var(--kit-radius-4);
649
+ background-color: var(--kit-color-bg-surface);
650
+ color: var(--kit-color-text-primary);
651
+ font: inherit;
652
+ text-align: inherit;
653
+ resize: none;
654
+ }
655
+
656
+ :where([data-kit="diagram-node"] [data-slot="editor"]):focus-visible,
657
+ :where([data-kit="diagram-edge-label"] [data-slot="editor"]):focus-visible {
658
+ outline: var(--kit-border-width-focus) solid var(--kit-color-border-focus);
659
+ outline-offset: var(--kit-space-0-5);
660
+ }
661
+
662
+ /* A mirrored glyph for right-to-left, such as the group chevron */
663
+
664
+ :where([data-rtl] [data-mirror]) {
665
+ display: inline-flex;
666
+ transform: scaleX(-1);
667
+ }
668
+
669
+ :where([data-mirror]) {
670
+ display: inline-flex;
671
+ }
672
+
673
+ /* Icons */
674
+
675
+ :where([data-kit="diagram-icon"]) {
676
+ flex: none;
677
+ inline-size: var(--kit-size-icon-md);
678
+ block-size: var(--kit-size-icon-md);
679
+ }
680
+
681
+ /* --------------------------------------------------------------- Handles */
682
+
683
+ :where([data-kit="diagram-handle"]) {
684
+ --_size: var(--kit-size-12);
685
+ position: absolute;
686
+ inline-size: var(--_size);
687
+ block-size: var(--_size);
688
+ min-inline-size: var(--_size);
689
+ min-block-size: var(--_size);
690
+ box-sizing: border-box;
691
+ border: var(--kit-border-width-default) solid var(--kit-color-bg-surface);
692
+ border-radius: var(--kit-radius-full);
693
+ background-color: var(--xy-handle-background-color);
694
+ pointer-events: none;
695
+ transition:
696
+ background-color var(--kit-duration-fast) var(--kit-easing-standard),
697
+ scale var(--kit-duration-fast) var(--kit-easing-standard);
698
+ }
699
+
700
+ /* A larger invisible hit area, so a connection point is easy to hit with a finger or a pointer. */
701
+ :where([data-kit="diagram-handle"])::after {
702
+ content: "";
703
+ position: absolute;
704
+ inset: calc(var(--kit-space-2) * -1);
705
+ }
706
+
707
+ :where([data-kit="diagram-handle"].connectingfrom),
708
+ :where([data-kit="diagram-handle"].connectionindicator) {
709
+ pointer-events: all;
710
+ }
711
+
712
+ :where([data-kit="diagram-handle"].connectionindicator) {
713
+ cursor: crosshair;
714
+ }
715
+
716
+ :where([data-kit="diagram-handle"].react-flow__handle-top) {
717
+ top: 0;
718
+ left: 50%;
719
+ transform: translate(-50%, -50%);
720
+ }
721
+
722
+ :where([data-kit="diagram-handle"].react-flow__handle-bottom) {
723
+ top: auto;
724
+ bottom: 0;
725
+ left: 50%;
726
+ transform: translate(-50%, 50%);
727
+ }
728
+
729
+ :where([data-kit="diagram-handle"].react-flow__handle-left) {
730
+ top: 50%;
731
+ left: 0;
732
+ transform: translate(-50%, -50%);
733
+ }
734
+
735
+ :where([data-kit="diagram-handle"].react-flow__handle-right) {
736
+ top: 50%;
737
+ right: 0;
738
+ transform: translate(50%, -50%);
739
+ }
740
+
741
+ :where([data-kit="diagram-node"]:hover > [data-kit="diagram-handle"]),
742
+ :where([data-kit="diagram-node"][data-selected] > [data-kit="diagram-handle"]),
743
+ :where([data-kit="diagram-node"][data-connecting] > [data-kit="diagram-handle"]) {
744
+ background-color: var(--kit-color-accent-default);
745
+ }
746
+
747
+ :where([data-kit="diagram-handle"].connectingto.valid),
748
+ :where([data-kit="diagram-handle"].valid) {
749
+ background-color: var(--kit-color-status-success-border);
750
+ scale: 1.4;
751
+ }
752
+
753
+ :where([data-kit="diagram-handle"].connectingto:not(.valid)) {
754
+ background-color: var(--kit-color-status-danger-border);
755
+ }
756
+
757
+ :where([data-kit="diagram-canvas"][data-readonly] [data-kit="diagram-handle"]) {
758
+ display: none;
759
+ }
760
+
761
+ @media (pointer: coarse) {
762
+ :where([data-kit="diagram-handle"]) {
763
+ --_size: var(--kit-size-20);
764
+ }
765
+ }
766
+
767
+ /* Resize controls on a selected node */
768
+
769
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control) {
770
+ position: absolute;
771
+ }
772
+
773
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.left),
774
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.right) {
775
+ cursor: ew-resize;
776
+ }
777
+
778
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.top),
779
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.bottom) {
780
+ cursor: ns-resize;
781
+ }
782
+
783
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.top.left),
784
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.bottom.right) {
785
+ cursor: nwse-resize;
786
+ }
787
+
788
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.bottom.left),
789
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.top.right) {
790
+ cursor: nesw-resize;
791
+ }
792
+
793
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle) {
794
+ inline-size: var(--kit-size-12);
795
+ block-size: var(--kit-size-12);
796
+ box-sizing: border-box;
797
+ border: var(--kit-border-width-default) solid var(--kit-color-bg-surface);
798
+ border-radius: var(--kit-radius-2);
799
+ background-color: var(--xy-resize-background-color);
800
+ translate: -50% -50%;
801
+ }
802
+
803
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.left) {
804
+ left: 0;
805
+ top: 50%;
806
+ }
807
+
808
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.right) {
809
+ left: 100%;
810
+ top: 50%;
811
+ }
812
+
813
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.top) {
814
+ left: 50%;
815
+ top: 0;
816
+ }
817
+
818
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.bottom) {
819
+ left: 50%;
820
+ top: 100%;
821
+ }
822
+
823
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.top.left) {
824
+ left: 0;
825
+ }
826
+
827
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.bottom.left) {
828
+ left: 0;
829
+ }
830
+
831
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.top.right) {
832
+ left: 100%;
833
+ }
834
+
835
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.handle.bottom.right) {
836
+ left: 100%;
837
+ }
838
+
839
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line) {
840
+ border-color: var(--xy-resize-background-color);
841
+ border-width: 0;
842
+ border-style: solid;
843
+ }
844
+
845
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.left),
846
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.right) {
847
+ inline-size: var(--kit-border-width-default);
848
+ block-size: 100%;
849
+ top: 0;
850
+ transform: translate(-50%, 0);
851
+ }
852
+
853
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.left) {
854
+ left: 0;
855
+ border-left-width: var(--kit-border-width-default);
856
+ }
857
+
858
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.right) {
859
+ left: 100%;
860
+ border-right-width: var(--kit-border-width-default);
861
+ }
862
+
863
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.top),
864
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.bottom) {
865
+ inline-size: 100%;
866
+ block-size: var(--kit-border-width-default);
867
+ left: 0;
868
+ transform: translate(0, -50%);
869
+ }
870
+
871
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.top) {
872
+ top: 0;
873
+ border-top-width: var(--kit-border-width-default);
874
+ }
875
+
876
+ :where([data-kit="diagram-canvas"] .react-flow__resize-control.line.bottom) {
877
+ top: 100%;
878
+ border-bottom-width: var(--kit-border-width-default);
879
+ }
880
+
881
+ /* ----------------------------------------------------------------- Edges */
882
+
883
+ :where([data-kit="diagram-edge"]) {
884
+ fill: none;
885
+ stroke: var(--kit-color-border-strong);
886
+ stroke-width: var(--kit-border-width-default);
887
+ stroke-linecap: round;
888
+ transition: stroke var(--kit-duration-fast) var(--kit-easing-standard);
889
+ }
890
+
891
+ :where([data-kit="diagram-canvas"] .react-flow__edge:hover [data-kit="diagram-edge"]) {
892
+ stroke: var(--kit-color-text-secondary);
893
+ }
894
+
895
+ :where([data-kit="diagram-edge"][data-tone="success"]) {
896
+ stroke: var(--kit-color-status-success-border);
897
+ }
898
+
899
+ :where([data-kit="diagram-edge"][data-tone="warning"]) {
900
+ stroke: var(--kit-color-status-warning-border);
901
+ }
902
+
903
+ :where([data-kit="diagram-edge"][data-tone="danger"]) {
904
+ stroke: var(--kit-color-status-danger-border);
905
+ }
906
+
907
+ :where([data-kit="diagram-edge"][data-tone="info"]) {
908
+ stroke: var(--kit-color-status-info-border);
909
+ }
910
+
911
+ :where([data-kit="diagram-edge"][data-dashed]),
912
+ :where([data-kit="diagram-edge"][data-animated]) {
913
+ stroke-dasharray: var(--kit-space-2) var(--kit-space-1);
914
+ }
915
+
916
+ :where([data-kit="diagram-edge"][data-animated]) {
917
+ animation: kit-diagram-dash var(--kit-duration-slow) linear infinite;
918
+ }
919
+
920
+ :where([data-kit="diagram-edge"][data-selected]),
921
+ :where([data-kit="diagram-canvas"] .react-flow__edge.selected [data-kit="diagram-edge"]) {
922
+ stroke: var(--kit-color-accent-default);
923
+ stroke-width: var(--kit-border-width-emphasis);
924
+ }
925
+
926
+ :where([data-kit="diagram-canvas"] .react-flow__edge:focus-visible [data-kit="diagram-edge"]) {
927
+ stroke: var(--kit-color-border-focus);
928
+ stroke-width: var(--kit-border-width-focus);
929
+ }
930
+
931
+ :where([data-kit="diagram-canvas"] .react-flow__edge) {
932
+ outline: var(--kit-border-width-focus) solid transparent;
933
+ }
934
+
935
+ @keyframes kit-diagram-dash {
936
+ to {
937
+ stroke-dashoffset: calc(var(--kit-space-3) * -1);
938
+ }
939
+ }
940
+
941
+ /* One arrowhead per tone, defined once per canvas */
942
+
943
+ :where([data-kit="diagram-markers"]) {
944
+ position: absolute;
945
+ inline-size: 0;
946
+ block-size: 0;
947
+ overflow: hidden;
948
+ pointer-events: none;
949
+ }
950
+
951
+ :where([data-kit="diagram-markers"] marker path) {
952
+ fill: var(--kit-color-border-strong);
953
+ }
954
+
955
+ :where([data-kit="diagram-markers"] marker[data-tone="success"] path) {
956
+ fill: var(--kit-color-status-success-border);
957
+ }
958
+
959
+ :where([data-kit="diagram-markers"] marker[data-tone="warning"] path) {
960
+ fill: var(--kit-color-status-warning-border);
961
+ }
962
+
963
+ :where([data-kit="diagram-markers"] marker[data-tone="danger"] path) {
964
+ fill: var(--kit-color-status-danger-border);
965
+ }
966
+
967
+ :where([data-kit="diagram-markers"] marker[data-tone="info"] path) {
968
+ fill: var(--kit-color-status-info-border);
969
+ }
970
+
971
+ /* Edge labels */
972
+
973
+ :where([data-kit="diagram-edge-label"]) {
974
+ position: absolute;
975
+ box-sizing: border-box;
976
+ max-inline-size: calc(var(--kit-size-56) * 4);
977
+ padding-block: var(--kit-space-0-5);
978
+ padding-inline: var(--kit-space-2);
979
+ border: var(--kit-border-width-default) solid var(--kit-color-border-subtle);
980
+ border-radius: var(--kit-radius-4);
981
+ background-color: var(--kit-color-bg-surface);
982
+ color: var(--kit-color-text-secondary);
983
+ font-size: var(--kit-text-caption-size);
984
+ line-height: var(--kit-text-caption-line-height);
985
+ pointer-events: all;
986
+ cursor: pointer;
987
+ }
988
+
989
+ :where([data-kit="diagram-edge-label"][data-tone="success"]) {
990
+ border-color: var(--kit-color-status-success-border);
991
+ }
992
+
993
+ :where([data-kit="diagram-edge-label"][data-tone="warning"]) {
994
+ border-color: var(--kit-color-status-warning-border);
995
+ }
996
+
997
+ :where([data-kit="diagram-edge-label"][data-tone="danger"]) {
998
+ border-color: var(--kit-color-status-danger-border);
999
+ }
1000
+
1001
+ :where([data-kit="diagram-edge-label"][data-tone="info"]) {
1002
+ border-color: var(--kit-color-status-info-border);
1003
+ }
1004
+
1005
+ :where([data-kit="diagram-edge-label"][data-selected]) {
1006
+ border-color: var(--kit-color-accent-default);
1007
+ color: var(--kit-color-text-primary);
1008
+ }
1009
+
1010
+ :where([data-kit="diagram-edge-label"] [data-slot="editor"]) {
1011
+ box-sizing: border-box;
1012
+ inline-size: calc(var(--kit-size-56) * 2);
1013
+ margin: 0;
1014
+ padding: 0;
1015
+ border: 0;
1016
+ background-color: transparent;
1017
+ color: var(--kit-color-text-primary);
1018
+ font: inherit;
1019
+ }
1020
+
1021
+ /* --------------------------------------------------------------- Toolbar */
1022
+
1023
+ :where([data-kit="diagram-toolbar-area"]) {
1024
+ display: flex;
1025
+ flex-direction: column;
1026
+ gap: var(--kit-space-2);
1027
+ }
1028
+
1029
+ :where([data-kit="diagram-toolbar"]) {
1030
+ display: flex;
1031
+ flex-wrap: wrap;
1032
+ align-items: center;
1033
+ gap: var(--kit-space-1);
1034
+ padding: var(--kit-space-1);
1035
+ border: var(--kit-border-width-default) solid var(--kit-color-border-default);
1036
+ border-radius: var(--kit-radius-panel);
1037
+ background-color: var(--kit-color-bg-surface);
1038
+ }
1039
+
1040
+ :where([data-kit="diagram-toolbar"] > [data-slot="group"]) {
1041
+ display: inline-flex;
1042
+ align-items: center;
1043
+ gap: var(--kit-space-1);
1044
+ }
1045
+
1046
+ :where([data-kit="diagram-toolbar"] [data-kit="divider"]) {
1047
+ block-size: var(--kit-size-20);
1048
+ align-self: center;
1049
+ }
1050
+
1051
+ :where([data-kit="diagram-palette"]) {
1052
+ display: flex;
1053
+ flex-wrap: wrap;
1054
+ gap: var(--kit-space-2);
1055
+ padding: var(--kit-space-2);
1056
+ border: var(--kit-border-width-default) solid var(--kit-color-border-default);
1057
+ border-radius: var(--kit-radius-panel);
1058
+ background-color: var(--kit-color-bg-surface);
1059
+ }
1060
+
1061
+ :where([data-kit="diagram-palette"] [draggable="true"]) {
1062
+ cursor: grab;
1063
+ }
1064
+
1065
+ /* ---------------------------------------------------------------- Notice */
1066
+
1067
+ :where([data-kit="diagram-notice"]) {
1068
+ position: absolute;
1069
+ inset-inline: 0;
1070
+ inset-block-end: var(--kit-space-4);
1071
+ z-index: var(--kit-z-toast);
1072
+ display: flex;
1073
+ justify-content: center;
1074
+ padding-inline: var(--kit-space-4);
1075
+ pointer-events: none;
1076
+ }
1077
+
1078
+ :where([data-kit="diagram-notice"] > [data-slot="message"]) {
1079
+ max-inline-size: 100%;
1080
+ padding-block: var(--kit-space-2);
1081
+ padding-inline: var(--kit-space-3);
1082
+ border: var(--kit-border-width-default) solid var(--kit-color-status-danger-border);
1083
+ border-radius: var(--kit-radius-control);
1084
+ background-color: var(--kit-color-status-danger-background);
1085
+ color: var(--kit-color-status-danger-foreground);
1086
+ box-shadow: var(--kit-shadow-toast);
1087
+ font-size: var(--kit-text-label-size);
1088
+ line-height: var(--kit-text-label-line-height);
1089
+ pointer-events: auto;
1090
+ animation: kit-diagram-notice-in var(--kit-duration-base) var(--kit-easing-enter);
1091
+ }
1092
+
1093
+ @keyframes kit-diagram-notice-in {
1094
+ from {
1095
+ opacity: 0;
1096
+ translate: 0 var(--kit-space-2);
1097
+ }
1098
+ }
1099
+
1100
+ /* --------------------------------------------------------------- Outline */
1101
+
1102
+ :where([data-kit="diagram-outline"]) {
1103
+ box-sizing: border-box;
1104
+ padding: var(--kit-space-3);
1105
+ border: var(--kit-border-width-default) solid var(--kit-color-border-default);
1106
+ border-radius: var(--kit-radius-panel);
1107
+ background-color: var(--kit-color-bg-surface);
1108
+ color: var(--kit-color-text-primary);
1109
+ font-family: var(--kit-font-family-sans);
1110
+ font-size: var(--kit-text-body-size);
1111
+ line-height: var(--kit-text-body-line-height);
1112
+ }
1113
+
1114
+ :where([data-kit="diagram-outline"] [data-slot="title"]) {
1115
+ margin-block: 0 var(--kit-space-2);
1116
+ font-size: var(--kit-text-h4-size);
1117
+ font-weight: var(--kit-text-h4-weight);
1118
+ line-height: var(--kit-text-h4-line-height);
1119
+ }
1120
+
1121
+ :where([data-kit="diagram-outline"] ul) {
1122
+ margin-block: 0;
1123
+ padding-inline: var(--kit-space-5) 0;
1124
+ }
1125
+
1126
+ :where([data-kit="diagram-outline"] [data-slot="nodes"]),
1127
+ :where([data-kit="diagram-outline"] [data-slot="paths"] ul) {
1128
+ display: grid;
1129
+ gap: var(--kit-space-3);
1130
+ }
1131
+
1132
+ :where([data-kit="diagram-outline"] [data-slot="connections"]) {
1133
+ margin-block-start: var(--kit-space-1);
1134
+ list-style: none;
1135
+ padding-inline: var(--kit-space-3) 0;
1136
+ }
1137
+
1138
+ :where([data-kit="diagram-outline"] [data-slot="paths"]) {
1139
+ margin-block-start: var(--kit-space-4);
1140
+ }
1141
+
1142
+ :where([data-kit="diagram-outline"] [data-slot="paths-title"]),
1143
+ :where([data-kit="diagram-outline"] [data-slot="contains"]) {
1144
+ margin-block: var(--kit-space-2) var(--kit-space-1);
1145
+ color: var(--kit-color-text-secondary);
1146
+ font-size: var(--kit-text-caption-size);
1147
+ font-weight: var(--kit-font-weight-semibold);
1148
+ }
1149
+
1150
+ :where([data-kit="diagram-outline"] [data-slot="item"]) {
1151
+ display: flex;
1152
+ flex-wrap: wrap;
1153
+ align-items: baseline;
1154
+ gap: var(--kit-space-2);
1155
+ }
1156
+
1157
+ :where([data-kit="diagram-outline"] [data-slot="meta"]),
1158
+ :where([data-kit="diagram-outline"] [data-slot="none"]),
1159
+ :where([data-kit="diagram-outline"] [data-slot="description"]),
1160
+ :where([data-kit="diagram-outline"] [data-slot="edge-label"]),
1161
+ :where([data-kit="diagram-outline"] [data-slot="relation"]) {
1162
+ margin-block: 0;
1163
+ color: var(--kit-color-text-secondary);
1164
+ font-size: var(--kit-text-caption-size);
1165
+ line-height: var(--kit-text-caption-line-height);
1166
+ }
1167
+
1168
+ :where([data-kit="diagram-outline"] [data-slot="link"]),
1169
+ :where([data-kit="diagram-outline"] [data-slot="disconnect"]) {
1170
+ min-block-size: var(--kit-size-target-min);
1171
+ margin: 0;
1172
+ padding-block: 0;
1173
+ padding-inline: var(--kit-space-1);
1174
+ border: 0;
1175
+ border-radius: var(--kit-radius-4);
1176
+ background: transparent;
1177
+ color: var(--kit-color-text-link);
1178
+ font: inherit;
1179
+ cursor: pointer;
1180
+ }
1181
+
1182
+ :where([data-kit="diagram-outline"] [data-slot="link"]) {
1183
+ text-decoration: underline;
1184
+ }
1185
+
1186
+ :where([data-kit="diagram-outline"] [data-slot="disconnect"]) {
1187
+ min-inline-size: var(--kit-size-target-min);
1188
+ color: var(--kit-color-text-secondary);
1189
+ }
1190
+
1191
+ :where([data-kit="diagram-outline"] [data-slot="link"]:focus-visible),
1192
+ :where([data-kit="diagram-outline"] [data-slot="disconnect"]:focus-visible) {
1193
+ outline: var(--kit-border-width-focus) solid var(--kit-color-border-focus);
1194
+ outline-offset: var(--kit-space-0-5);
1195
+ }
1196
+
1197
+ :where([data-kit="diagram-outline"] [data-slot="link"]:hover),
1198
+ :where([data-kit="diagram-outline"] [data-slot="disconnect"]:hover) {
1199
+ background-color: var(--kit-color-accent-subtle);
1200
+ }
1201
+
1202
+ /*
1203
+ * "Hidden" outline: out of sight but in the reading order. It appears when
1204
+ * keyboard focus is inside it. The 1px clip is the standard technique,
1205
+ * expressed with the hairline token.
1206
+ */
1207
+ :where([data-kit="diagram-outline"][data-reveal="focus"]:not(:focus-within)) {
1208
+ position: absolute;
1209
+ inline-size: var(--kit-border-width-default);
1210
+ block-size: var(--kit-border-width-default);
1211
+ margin: calc(var(--kit-border-width-default) * -1);
1212
+ padding: 0;
1213
+ overflow: hidden;
1214
+ clip-path: inset(50%);
1215
+ white-space: nowrap;
1216
+ border: 0;
1217
+ }
1218
+
1219
+ /* Inside a canvas it opens over the diagram, so the page does not jump. */
1220
+ :where([data-kit="diagram-canvas"] > [data-kit="diagram-outline"][data-reveal="focus"]:focus-within) {
1221
+ position: absolute;
1222
+ inset-inline: 0;
1223
+ inset-block-end: 0;
1224
+ z-index: var(--kit-z-dropdown);
1225
+ max-block-size: 70%;
1226
+ overflow: auto;
1227
+ box-shadow: var(--kit-shadow-overlay);
1228
+ }
1229
+
1230
+ /* --------------------------------------------------------------- Mermaid */
1231
+
1232
+ :where([data-kit="mermaid-diagram"]) {
1233
+ display: grid;
1234
+ gap: var(--kit-space-2);
1235
+ margin: 0;
1236
+ color: var(--kit-color-text-primary);
1237
+ font-family: var(--kit-font-family-sans);
1238
+ }
1239
+
1240
+ :where([data-kit="mermaid-diagram"] [data-slot="canvas"]) {
1241
+ overflow: auto;
1242
+ padding: var(--kit-space-3);
1243
+ border: var(--kit-border-width-default) solid var(--kit-color-border-default);
1244
+ border-radius: var(--kit-radius-panel);
1245
+ background-color: var(--kit-color-bg-surface);
1246
+ }
1247
+
1248
+ :where([data-kit="mermaid-diagram"] [data-slot="canvas"] > svg) {
1249
+ display: block;
1250
+ max-inline-size: 100%;
1251
+ margin-inline: auto;
1252
+ }
1253
+
1254
+ :where([data-kit="mermaid-diagram"] [data-slot="status"]) {
1255
+ display: flex;
1256
+ align-items: center;
1257
+ gap: var(--kit-space-2);
1258
+ padding: var(--kit-space-3);
1259
+ color: var(--kit-color-text-secondary);
1260
+ }
1261
+
1262
+ :where([data-kit="mermaid-diagram"] [data-slot="status"][role="alert"]) {
1263
+ border: var(--kit-border-width-default) solid var(--kit-color-status-danger-border);
1264
+ border-radius: var(--kit-radius-control);
1265
+ background-color: var(--kit-color-status-danger-background);
1266
+ color: var(--kit-color-status-danger-foreground);
1267
+ }
1268
+
1269
+ :where([data-kit="mermaid-diagram"] [data-slot="description"]) {
1270
+ color: var(--kit-color-text-secondary);
1271
+ font-size: var(--kit-text-caption-size);
1272
+ line-height: var(--kit-text-caption-line-height);
1273
+ }
1274
+
1275
+ :where([data-kit="mermaid-diagram"] [data-slot="source"]) {
1276
+ display: grid;
1277
+ gap: var(--kit-space-2);
1278
+ justify-items: start;
1279
+ }
1280
+
1281
+ :where([data-kit="mermaid-diagram"] [data-slot="source"] pre) {
1282
+ box-sizing: border-box;
1283
+ inline-size: 100%;
1284
+ max-block-size: calc(var(--kit-size-56) * 6);
1285
+ margin: 0;
1286
+ padding: var(--kit-space-3);
1287
+ overflow: auto;
1288
+ border: var(--kit-border-width-default) solid var(--kit-color-border-default);
1289
+ border-radius: var(--kit-radius-control);
1290
+ background-color: var(--kit-color-bg-canvas);
1291
+ font-family: var(--kit-font-family-mono);
1292
+ font-size: var(--kit-text-code-size);
1293
+ line-height: var(--kit-text-code-line-height);
1294
+ }
1295
+
1296
+ :where([data-kit="mermaid-diagram"] [data-slot="source"] pre:focus-visible) {
1297
+ outline: var(--kit-border-width-focus) solid var(--kit-color-border-focus);
1298
+ outline-offset: var(--kit-space-0-5);
1299
+ }
1300
+
1301
+ /* ---------------------------------------------------------------- Static */
1302
+
1303
+ :where(svg[data-kit="diagram-static"]) {
1304
+ display: block;
1305
+ max-inline-size: 100%;
1306
+ block-size: auto;
1307
+ color: var(--kit-color-text-primary);
1308
+ }
1309
+
1310
+ /* ----------------------------------------------------- Motion and contrast */
1311
+
1312
+ @media (prefers-reduced-motion: reduce) {
1313
+ :where([data-kit="diagram-node"]),
1314
+ :where([data-kit="diagram-handle"]),
1315
+ :where([data-kit="diagram-edge"]) {
1316
+ transition: none;
1317
+ }
1318
+
1319
+ /* The dashes stay (they carry meaning); only the movement goes. */
1320
+ :where([data-kit="diagram-edge"][data-animated]) {
1321
+ animation: none;
1322
+ }
1323
+
1324
+ :where([data-kit="diagram-notice"] > [data-slot="message"]) {
1325
+ animation: none;
1326
+ }
1327
+ }
1328
+
1329
+ @media (forced-colors: active) {
1330
+ :where([data-kit="diagram-node"]) {
1331
+ border-color: CanvasText;
1332
+ background-color: Canvas;
1333
+ color: CanvasText;
1334
+ forced-color-adjust: auto;
1335
+ }
1336
+
1337
+ :where([data-kit="diagram-node"][data-kind="decision"] > [data-slot="shape"]) {
1338
+ fill: Canvas;
1339
+ stroke: CanvasText;
1340
+ }
1341
+
1342
+ :where([data-kit="diagram-node"][data-selected]) {
1343
+ border-color: Highlight;
1344
+ outline: var(--kit-border-width-emphasis) solid Highlight;
1345
+ }
1346
+
1347
+ :where([data-kit="diagram-node"][data-kind="decision"][data-selected] > [data-slot="shape"]) {
1348
+ stroke: Highlight;
1349
+ }
1350
+
1351
+ :where([data-kit="diagram-canvas"] .react-flow__node:focus-visible > [data-kit="diagram-node"]) {
1352
+ outline-color: Highlight;
1353
+ }
1354
+
1355
+ :where([data-kit="diagram-handle"]) {
1356
+ background-color: CanvasText;
1357
+ border-color: Canvas;
1358
+ }
1359
+
1360
+ :where([data-kit="diagram-edge"]) {
1361
+ stroke: CanvasText;
1362
+ }
1363
+
1364
+ :where([data-kit="diagram-edge"][data-selected]) {
1365
+ stroke: Highlight;
1366
+ }
1367
+
1368
+ :where([data-kit="diagram-markers"] marker path) {
1369
+ fill: CanvasText;
1370
+ }
1371
+
1372
+ :where([data-kit="diagram-edge-label"]),
1373
+ :where([data-kit="diagram-toolbar"]),
1374
+ :where([data-kit="diagram-palette"]),
1375
+ :where([data-kit="diagram-outline"]),
1376
+ :where([data-kit="diagram-canvas"] > [data-slot="stage"]) {
1377
+ border-color: CanvasText;
1378
+ }
1379
+
1380
+ :where([data-kit="diagram-notice"] > [data-slot="message"]) {
1381
+ border-color: CanvasText;
1382
+ background-color: Canvas;
1383
+ color: CanvasText;
1384
+ }
1385
+
1386
+ :where([data-kit="diagram-canvas"] .react-flow__minimap-node) {
1387
+ fill: CanvasText;
1388
+ }
1389
+ }