@vanduo-oss/vd3-flowchart 1.2.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,729 @@
1
+ :root {
2
+ --vd-flowchart-surface: var(--vd-bg-primary, #fcfbf7);
3
+ --vd-flowchart-panel: color-mix(in srgb, var(--vd-bg-primary, #fcfbf7) 90%, var(--vd-bg-secondary, #f4efe2));
4
+ --vd-flowchart-panel-alt: color-mix(in srgb, var(--vd-bg-secondary, #f4efe2) 82%, var(--vd-bg-primary, #fcfbf7));
5
+ --vd-flowchart-border: color-mix(in srgb, var(--vd-border-color, #d5ccba) 78%, var(--vd-bg-primary, #fcfbf7));
6
+ --vd-flowchart-accent: var(--vd-color-primary, #245f52);
7
+ --vd-flowchart-accent-soft: color-mix(in srgb, var(--vd-color-primary, #245f52) 16%, transparent);
8
+ --vd-flowchart-text: var(--vd-text-primary, #1f2720);
9
+ --vd-flowchart-muted: var(--vd-text-muted, #67746a);
10
+ --vd-flowchart-node-fill: color-mix(in srgb, var(--vd-bg-primary, #fcfbf7) 95%, var(--vd-bg-secondary, #f4efe2));
11
+ --vd-flowchart-node-stroke: color-mix(in srgb, var(--vd-border-color, #d5ccba) 86%, var(--vd-bg-primary, #fcfbf7));
12
+ /* Selected/hover node + edge state. Set these (and --vd-flowchart-node-fill)
13
+ directly to retheme without `!important`; the surface blend above is only
14
+ the default and is fully overridable. */
15
+ --vd-flowchart-node-fill-selected: color-mix(in srgb, var(--vd-flowchart-accent) 86%, var(--vd-bg-primary, #fcfbf7));
16
+ --vd-flowchart-node-stroke-selected: var(--vd-flowchart-accent);
17
+ --vd-flowchart-edge-stroke: color-mix(in srgb, var(--vd-flowchart-accent) 70%, var(--vd-flowchart-text));
18
+ --vd-flowchart-edge-stroke-selected: var(--vd-flowchart-accent);
19
+ --vd-flowchart-edge-label: var(--vd-flowchart-muted);
20
+ /* Surfaces follow the active palette instead of mixing toward fixed light tones. */
21
+ --vd-flowchart-shell-bg:
22
+ radial-gradient(circle at top left, color-mix(in srgb, var(--vd-flowchart-accent) 10%, transparent), transparent 38%),
23
+ linear-gradient(180deg, color-mix(in srgb, var(--vd-flowchart-surface) 92%, var(--vd-bg-secondary, #f4efe2)), var(--vd-flowchart-surface));
24
+ --vd-flowchart-canvas-bg: transparent;
25
+ --vd-flowchart-toolbar-bg: color-mix(in srgb, var(--vd-flowchart-panel) 92%, transparent);
26
+ --vd-flowchart-panel-bg: color-mix(in srgb, var(--vd-flowchart-panel-alt) 88%, transparent);
27
+ /* Font for SVG text + UI chrome (SVG <text> does not inherit reliably). */
28
+ --vd-flowchart-font: inherit;
29
+ }
30
+
31
+ .vd-flowchart-host {
32
+ /* A definite height (not just min-height) so the editor's internal grid can
33
+ size its body row deterministically. Consumers that set a larger min-height
34
+ or height still win — the used height is the larger of the two and stays
35
+ definite, which keeps the canvas from resizing when the inspector fills in.
36
+ min-height: 0 lets height: 100% shrink below 560px in short parents
37
+ (docs fullscreen) without clipping the shell's bottom border. */
38
+ box-sizing: border-box;
39
+ height: 560px;
40
+ min-height: 0;
41
+ font-family: var(--vd-flowchart-font);
42
+ }
43
+
44
+ .vd-flowchart-shell {
45
+ box-sizing: border-box;
46
+ display: grid;
47
+ grid-template-rows: auto minmax(0, 1fr);
48
+ height: 100%;
49
+ /* Fill the host only — a fixed min-height here overflowed short containers
50
+ and clipped the bottom outline off-screen. */
51
+ min-height: 0;
52
+ border: 1px solid var(--vd-flowchart-border);
53
+ border-radius: 8px;
54
+ background: var(--vd-flowchart-shell-bg);
55
+ color: var(--vd-flowchart-text);
56
+ overflow: hidden;
57
+ }
58
+
59
+ .vd-flowchart-toolbar {
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: space-between;
63
+ gap: 0.75rem;
64
+ padding: 0.75rem 0.9rem;
65
+ border-bottom: 1px solid var(--vd-flowchart-border);
66
+ background: var(--vd-flowchart-toolbar-bg);
67
+ backdrop-filter: blur(16px);
68
+ }
69
+
70
+ .vd-flowchart-toolbar-group {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: 0.5rem;
74
+ flex-wrap: wrap;
75
+ }
76
+
77
+ .vd-flowchart-toolbar-label {
78
+ font-size: 0.8rem;
79
+ color: var(--vd-flowchart-muted);
80
+ letter-spacing: 0;
81
+ }
82
+
83
+ .vd-flowchart-body {
84
+ display: grid;
85
+ grid-template-columns: 88px minmax(0, 1fr) 300px;
86
+ min-height: 0;
87
+ }
88
+
89
+ .vd-flowchart-panel {
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: 0.9rem;
93
+ padding: 0.95rem;
94
+ background: var(--vd-flowchart-panel-bg);
95
+ /* Scroll the panel's own content instead of growing the shell (and with it
96
+ the canvas) when a selection populates the inspector. */
97
+ min-height: 0;
98
+ overflow-y: auto;
99
+ }
100
+
101
+ .vd-flowchart-panel--palette {
102
+ border-right: 1px solid var(--vd-flowchart-border);
103
+ }
104
+
105
+ .vd-flowchart-panel--inspector {
106
+ border-left: 1px solid var(--vd-flowchart-border);
107
+ }
108
+
109
+ .vd-flowchart-panel-title {
110
+ margin: 0;
111
+ font-size: 0.85rem;
112
+ font-weight: 700;
113
+ text-transform: uppercase;
114
+ color: var(--vd-flowchart-muted);
115
+ }
116
+
117
+ .vd-flowchart-palette {
118
+ display: grid;
119
+ grid-template-columns: 1fr;
120
+ gap: 0.35rem;
121
+ }
122
+
123
+ .vd-flowchart-btn,
124
+ .vd-flowchart-palette-btn,
125
+ .vd-flowchart-field input,
126
+ .vd-flowchart-field select,
127
+ .vd-flowchart-field textarea,
128
+ .vd-flowchart-json textarea {
129
+ font: inherit;
130
+ }
131
+
132
+ .vd-flowchart-btn,
133
+ .vd-flowchart-palette-btn,
134
+ .vd-flowchart-json-btn {
135
+ appearance: none;
136
+ border: 1px solid var(--vd-flowchart-border);
137
+ border-radius: 7px;
138
+ /* Use background-color (not the `background` shorthand) so host `select`
139
+ rules cannot leave a chevron background-image tiling after dark-mode
140
+ theme overrides re-set only the image. */
141
+ background-color: color-mix(in srgb, var(--vd-flowchart-panel) 90%, var(--vd-bg-primary, #fcfbf7));
142
+ background-image: none;
143
+ background-repeat: no-repeat;
144
+ color: var(--vd-flowchart-text);
145
+ cursor: pointer;
146
+ transition: transform 140ms ease, border-color 140ms ease, background-color 140ms ease, box-shadow 140ms ease;
147
+ }
148
+
149
+ .vd-flowchart-btn,
150
+ .vd-flowchart-json-btn {
151
+ min-height: 2.1rem;
152
+ padding: 0.45rem 0.75rem;
153
+ }
154
+
155
+ /* Draw-style square icon buttons for toolbar actions. */
156
+ .vd-flowchart-icon-btn {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ width: 2.1rem;
161
+ height: 2.1rem;
162
+ min-height: 2.1rem;
163
+ padding: 0;
164
+ color: var(--vd-flowchart-text);
165
+ background-color: transparent;
166
+ border-color: transparent;
167
+ }
168
+
169
+ .vd-flowchart-icon-btn:hover {
170
+ background-color: color-mix(in srgb, var(--vd-flowchart-accent) 12%, transparent);
171
+ border-color: transparent;
172
+ transform: none;
173
+ }
174
+
175
+ .vd-flowchart-icon-btn:focus-visible {
176
+ outline: 2px solid var(--vd-flowchart-accent);
177
+ outline-offset: 1px;
178
+ }
179
+
180
+ .vd-flowchart-icon {
181
+ width: 20px;
182
+ height: 20px;
183
+ display: block;
184
+ flex: none;
185
+ filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.28));
186
+ }
187
+
188
+ /* Host design systems style every `select` (vd3: width 100% + chevron SVG).
189
+ Own the arrange control: compact width, single no-repeat caret, active value. */
190
+ .vd-flowchart-host select.vd-flowchart-btn,
191
+ .vd-flowchart-host .vd-flowchart-arrange,
192
+ .vd-flowchart-shell select.vd-flowchart-btn,
193
+ .vd-flowchart-shell .vd-flowchart-arrange {
194
+ width: auto;
195
+ min-width: 6.5rem;
196
+ max-width: 9rem;
197
+ padding: 0.4rem 1.85rem 0.4rem 0.7rem;
198
+ font-weight: 600;
199
+ background-color: color-mix(in srgb, var(--vd-flowchart-panel) 90%, var(--vd-bg-primary, #fcfbf7));
200
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%2367746a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
201
+ background-repeat: no-repeat;
202
+ background-position: right 0.55rem center;
203
+ background-size: 12px 12px;
204
+ box-shadow: none;
205
+ appearance: none;
206
+ -webkit-appearance: none;
207
+ }
208
+
209
+ .vd-flowchart-host .vd-flowchart-field select,
210
+ .vd-flowchart-shell .vd-flowchart-field select {
211
+ width: 100%;
212
+ max-width: none;
213
+ min-width: 0;
214
+ padding: 0.55rem 0.65rem;
215
+ background-image: none;
216
+ background-repeat: no-repeat;
217
+ background-position: initial;
218
+ background-size: auto;
219
+ appearance: none;
220
+ -webkit-appearance: none;
221
+ }
222
+
223
+ [data-theme='dark'] .vd-flowchart-host .vd-flowchart-arrange,
224
+ [data-theme='dark'] .vd-flowchart-shell .vd-flowchart-arrange {
225
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
226
+ background-repeat: no-repeat;
227
+ background-position: right 0.55rem center;
228
+ background-size: 12px 12px;
229
+ }
230
+
231
+ .vd-flowchart-palette-btn {
232
+ display: flex;
233
+ flex-direction: column;
234
+ align-items: center;
235
+ justify-content: center;
236
+ gap: 0.2rem;
237
+ min-height: 3.6rem;
238
+ padding: 0.4rem 0.25rem;
239
+ text-align: center;
240
+ font-size: 0.68rem;
241
+ font-weight: 600;
242
+ letter-spacing: 0.01em;
243
+ background-color: transparent;
244
+ border-color: transparent;
245
+ color: var(--vd-flowchart-text);
246
+ }
247
+
248
+ .vd-flowchart-palette-btn:hover {
249
+ background-color: color-mix(in srgb, var(--vd-flowchart-accent) 12%, transparent);
250
+ border-color: transparent;
251
+ transform: none;
252
+ }
253
+
254
+ .vd-flowchart-palette-btn.is-active,
255
+ .vd-flowchart-palette-btn[aria-pressed='true'] {
256
+ background-color: color-mix(in srgb, var(--vd-flowchart-accent) 18%, transparent);
257
+ border-color: color-mix(in srgb, var(--vd-flowchart-accent) 55%, var(--vd-flowchart-border));
258
+ color: var(--vd-flowchart-accent);
259
+ box-shadow: none;
260
+ }
261
+
262
+ .vd-flowchart-palette-preview {
263
+ display: block;
264
+ width: 2.4rem;
265
+ max-width: 100%;
266
+ height: 1.7rem;
267
+ overflow: visible;
268
+ filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.22));
269
+ }
270
+
271
+ .vd-flowchart-palette-shape {
272
+ fill: var(--vd-flowchart-node-fill);
273
+ stroke: var(--vd-flowchart-text);
274
+ stroke-width: 2.25;
275
+ }
276
+
277
+ .vd-flowchart-palette-shape--textbox {
278
+ stroke-dasharray: 5 4;
279
+ }
280
+
281
+ .vd-flowchart-palette-shape--junction {
282
+ fill: var(--vd-flowchart-accent);
283
+ stroke: color-mix(in srgb, var(--vd-flowchart-accent) 50%, var(--vd-flowchart-text));
284
+ }
285
+
286
+ .vd-flowchart-palette-lines {
287
+ fill: none;
288
+ stroke: var(--vd-flowchart-text);
289
+ stroke-width: 2;
290
+ stroke-linecap: round;
291
+ }
292
+
293
+ .vd-flowchart-palette-arrow {
294
+ fill: none;
295
+ stroke: var(--vd-flowchart-text);
296
+ stroke-width: 3;
297
+ stroke-linecap: round;
298
+ }
299
+
300
+ .vd-flowchart-palette-arrowhead {
301
+ fill: var(--vd-flowchart-text);
302
+ }
303
+
304
+ .vd-flowchart-palette-junction-lines {
305
+ fill: none;
306
+ stroke: color-mix(in srgb, var(--vd-flowchart-accent) 42%, var(--vd-flowchart-muted));
307
+ stroke-width: 2;
308
+ stroke-linecap: round;
309
+ }
310
+
311
+ .vd-flowchart-palette-label-mark {
312
+ fill: var(--vd-flowchart-text);
313
+ font-family: var(--vd-flowchart-font);
314
+ font-size: 18px;
315
+ font-weight: 700;
316
+ }
317
+
318
+ .vd-flowchart-palette-label {
319
+ display: block;
320
+ line-height: 1.1;
321
+ max-width: 100%;
322
+ overflow: hidden;
323
+ text-overflow: ellipsis;
324
+ white-space: nowrap;
325
+ }
326
+
327
+ .vd-flowchart-palette-btn.is-active .vd-flowchart-palette-shape,
328
+ .vd-flowchart-palette-btn[aria-pressed='true'] .vd-flowchart-palette-shape,
329
+ .vd-flowchart-palette-btn.is-active .vd-flowchart-palette-arrow,
330
+ .vd-flowchart-palette-btn[aria-pressed='true'] .vd-flowchart-palette-arrow,
331
+ .vd-flowchart-palette-btn.is-active .vd-flowchart-palette-lines,
332
+ .vd-flowchart-palette-btn[aria-pressed='true'] .vd-flowchart-palette-lines {
333
+ stroke: var(--vd-flowchart-accent);
334
+ }
335
+
336
+ .vd-flowchart-palette-btn.is-active .vd-flowchart-palette-arrowhead,
337
+ .vd-flowchart-palette-btn[aria-pressed='true'] .vd-flowchart-palette-arrowhead,
338
+ .vd-flowchart-palette-btn.is-active .vd-flowchart-palette-label-mark,
339
+ .vd-flowchart-palette-btn[aria-pressed='true'] .vd-flowchart-palette-label-mark {
340
+ fill: var(--vd-flowchart-accent);
341
+ }
342
+
343
+ .vd-flowchart-btn:hover,
344
+ .vd-flowchart-json-btn:hover {
345
+ border-color: color-mix(in srgb, var(--vd-flowchart-accent) 42%, var(--vd-flowchart-border));
346
+ transform: translateY(-1px);
347
+ }
348
+
349
+ .vd-flowchart-btn:focus-visible,
350
+ .vd-flowchart-palette-btn:focus-visible,
351
+ .vd-flowchart-json-btn:focus-visible,
352
+ .vd-flowchart-field input:focus-visible,
353
+ .vd-flowchart-field select:focus-visible,
354
+ .vd-flowchart-field textarea:focus-visible,
355
+ .vd-flowchart-json textarea:focus-visible,
356
+ .vd-flowchart-canvas:focus-visible {
357
+ outline: 2px solid color-mix(in srgb, var(--vd-flowchart-accent) 72%, transparent);
358
+ outline-offset: 2px;
359
+ }
360
+
361
+ .vd-flowchart-btn:disabled,
362
+ .vd-flowchart-json-btn:disabled {
363
+ cursor: not-allowed;
364
+ opacity: 0.5;
365
+ transform: none;
366
+ }
367
+
368
+ .vd-flowchart-canvas {
369
+ position: relative;
370
+ min-width: 0;
371
+ min-height: 0;
372
+ background: var(--vd-flowchart-canvas-bg);
373
+ }
374
+
375
+ .vd-flowchart-svg {
376
+ display: block;
377
+ width: 100%;
378
+ height: 100%;
379
+ min-height: 0;
380
+ touch-action: none;
381
+ }
382
+
383
+ .vd-flowchart-grid {
384
+ pointer-events: none;
385
+ }
386
+
387
+ .vd-flowchart-edge-path,
388
+ .vd-flowchart-edge-selection,
389
+ .vd-flowchart-edge-hit,
390
+ .vd-flowchart-preview-path {
391
+ fill: none;
392
+ }
393
+
394
+ .vd-flowchart-edge-selection {
395
+ stroke: color-mix(in srgb, var(--vd-flowchart-accent) 28%, transparent);
396
+ stroke-linecap: round;
397
+ stroke-linejoin: round;
398
+ pointer-events: none;
399
+ }
400
+
401
+ .vd-flowchart-edge-path {
402
+ stroke: var(--vd-flowchart-edge-stroke);
403
+ stroke-linecap: round;
404
+ stroke-linejoin: round;
405
+ }
406
+
407
+ .vd-flowchart-edge.is-selected .vd-flowchart-edge-path {
408
+ stroke: var(--vd-flowchart-edge-stroke-selected);
409
+ }
410
+
411
+ .vd-flowchart-edge-hit {
412
+ stroke: transparent;
413
+ cursor: pointer;
414
+ }
415
+
416
+ .vd-flowchart-preview-path {
417
+ stroke: color-mix(in srgb, var(--vd-flowchart-accent) 55%, transparent);
418
+ stroke-dasharray: 8 7;
419
+ stroke-linecap: round;
420
+ stroke-linejoin: round;
421
+ }
422
+
423
+ .vd-flowchart-edge-label {
424
+ font-family: var(--vd-flowchart-font);
425
+ font-size: 12px;
426
+ fill: var(--vd-flowchart-edge-label);
427
+ paint-order: stroke;
428
+ stroke: color-mix(in srgb, var(--vd-flowchart-surface) 94%, transparent);
429
+ stroke-width: 5px;
430
+ stroke-linejoin: round;
431
+ }
432
+
433
+ .vd-flowchart-node {
434
+ cursor: grab;
435
+ }
436
+
437
+ .vd-flowchart-node.is-dragging,
438
+ .vd-flowchart-node.is-resizing {
439
+ cursor: grabbing;
440
+ }
441
+
442
+ .vd-flowchart-node-shape {
443
+ fill: var(--vd-flowchart-node-fill);
444
+ stroke: var(--vd-flowchart-node-stroke);
445
+ stroke-width: 1.5;
446
+ transition: stroke 120ms ease, filter 120ms ease, fill 120ms ease;
447
+ }
448
+
449
+ .vd-flowchart-node-shape--textbox {
450
+ stroke-dasharray: 8 5;
451
+ }
452
+
453
+ .vd-flowchart-node-shape--label {
454
+ fill: transparent;
455
+ stroke: transparent;
456
+ }
457
+
458
+ .vd-flowchart-node-shape--junction {
459
+ fill: var(--vd-flowchart-accent);
460
+ stroke: color-mix(in srgb, var(--vd-flowchart-accent) 72%, var(--vd-flowchart-text));
461
+ stroke-width: 1.25;
462
+ }
463
+
464
+ .vd-flowchart-node.is-selected .vd-flowchart-node-shape,
465
+ .vd-flowchart-node:hover .vd-flowchart-node-shape {
466
+ stroke: var(--vd-flowchart-node-stroke-selected);
467
+ filter: drop-shadow(0 10px 18px color-mix(in srgb, var(--vd-flowchart-accent) 12%, transparent));
468
+ }
469
+
470
+ .vd-flowchart-node:hover .vd-flowchart-node-shape--junction,
471
+ .vd-flowchart-node.is-selected .vd-flowchart-node-shape--junction {
472
+ fill: var(--vd-flowchart-node-fill-selected);
473
+ }
474
+
475
+ .vd-flowchart-node-text {
476
+ fill: var(--vd-flowchart-text);
477
+ font-family: var(--vd-flowchart-font);
478
+ font-size: 14px;
479
+ font-weight: 600;
480
+ pointer-events: none;
481
+ dominant-baseline: middle;
482
+ text-anchor: middle;
483
+ }
484
+
485
+ .vd-flowchart-node-text--textbox {
486
+ font-size: 13px;
487
+ font-weight: 500;
488
+ dominant-baseline: auto;
489
+ text-anchor: start;
490
+ }
491
+
492
+ .vd-flowchart-node-text--label {
493
+ font-size: 18px;
494
+ font-weight: 700;
495
+ }
496
+
497
+ .vd-flowchart-port-group {
498
+ pointer-events: none;
499
+ }
500
+
501
+ .vd-flowchart-port-hit {
502
+ fill: transparent;
503
+ }
504
+
505
+ .vd-flowchart-port {
506
+ opacity: 0;
507
+ fill: color-mix(in srgb, var(--vd-flowchart-panel) 88%, var(--vd-bg-primary, #fcfbf7));
508
+ stroke: var(--vd-flowchart-accent);
509
+ stroke-width: 2;
510
+ vector-effect: non-scaling-stroke;
511
+ transition: opacity 120ms ease, transform 120ms ease, fill 120ms ease;
512
+ }
513
+
514
+ .vd-flowchart-port-group.is-visible {
515
+ pointer-events: auto;
516
+ cursor: crosshair;
517
+ }
518
+
519
+ .vd-flowchart-port-group.is-visible .vd-flowchart-port {
520
+ opacity: 1;
521
+ }
522
+
523
+ .vd-flowchart-port-group.is-visible:hover .vd-flowchart-port {
524
+ transform: scale(1.08);
525
+ fill: color-mix(in srgb, var(--vd-flowchart-accent) 12%, var(--vd-bg-primary, #fcfbf7));
526
+ }
527
+
528
+ .vd-flowchart-canvas.is-connecting .vd-flowchart-node:hover .vd-flowchart-node-shape {
529
+ stroke: var(--vd-flowchart-node-stroke);
530
+ filter: none;
531
+ }
532
+
533
+ .vd-flowchart-canvas.is-connecting .vd-flowchart-port-group.is-visible .vd-flowchart-port,
534
+ .vd-flowchart-canvas.is-arrow-tool .vd-flowchart-port-group.is-visible .vd-flowchart-port {
535
+ opacity: 1;
536
+ }
537
+
538
+ .vd-flowchart-canvas.is-connecting .vd-flowchart-port-group.is-visible:hover .vd-flowchart-port,
539
+ .vd-flowchart-canvas.is-arrow-tool .vd-flowchart-port-group.is-visible:hover .vd-flowchart-port {
540
+ transform: none;
541
+ }
542
+
543
+ .vd-flowchart-edge-endpoint-hit {
544
+ fill: transparent;
545
+ cursor: crosshair;
546
+ }
547
+
548
+ .vd-flowchart-edge-endpoint {
549
+ fill: color-mix(in srgb, var(--vd-flowchart-panel) 88%, var(--vd-bg-primary, #fcfbf7));
550
+ stroke: var(--vd-flowchart-accent);
551
+ stroke-width: 2;
552
+ cursor: crosshair;
553
+ vector-effect: non-scaling-stroke;
554
+ pointer-events: none;
555
+ }
556
+
557
+ .vd-flowchart-edge.is-reconnecting .vd-flowchart-edge-path {
558
+ stroke-dasharray: 6 4;
559
+ }
560
+
561
+ .vd-flowchart-node.is-editing .vd-flowchart-node-text {
562
+ opacity: 0;
563
+ }
564
+
565
+ .vd-flowchart-resize-zone {
566
+ fill: transparent;
567
+ pointer-events: all;
568
+ }
569
+
570
+ .vd-flowchart-resize-handle {
571
+ fill: color-mix(in srgb, var(--vd-flowchart-panel) 92%, var(--vd-bg-primary, #fcfbf7));
572
+ stroke: var(--vd-flowchart-accent);
573
+ stroke-width: 1.5;
574
+ vector-effect: non-scaling-stroke;
575
+ pointer-events: all;
576
+ }
577
+
578
+ .vd-flowchart-text-editor {
579
+ position: absolute;
580
+ z-index: 5;
581
+ box-sizing: border-box;
582
+ min-width: 0;
583
+ min-height: 0;
584
+ border: 1px solid color-mix(in srgb, var(--vd-flowchart-accent) 78%, var(--vd-flowchart-border));
585
+ border-radius: 8px;
586
+ background: color-mix(in srgb, var(--vd-flowchart-panel) 92%, var(--vd-bg-primary, #fcfbf7));
587
+ color: var(--vd-flowchart-text);
588
+ box-shadow: 0 12px 26px color-mix(in srgb, var(--vd-flowchart-accent) 16%, transparent);
589
+ font: inherit;
590
+ font-weight: 600;
591
+ outline: none;
592
+ overflow: hidden;
593
+ resize: none;
594
+ text-align: center;
595
+ }
596
+
597
+ .vd-flowchart-text-editor--textbox {
598
+ border-style: dashed;
599
+ font-weight: 500;
600
+ text-align: left;
601
+ }
602
+
603
+ .vd-flowchart-text-editor--label {
604
+ border-color: transparent;
605
+ background: color-mix(in srgb, var(--vd-flowchart-panel) 82%, transparent);
606
+ font-weight: 700;
607
+ }
608
+
609
+ .vd-flowchart-selection-meta {
610
+ font-size: 0.86rem;
611
+ color: var(--vd-flowchart-muted);
612
+ }
613
+
614
+ .vd-flowchart-selection-empty {
615
+ margin: 0;
616
+ font-size: 0.92rem;
617
+ color: var(--vd-flowchart-muted);
618
+ }
619
+
620
+ .vd-flowchart-fields {
621
+ display: flex;
622
+ flex-direction: column;
623
+ gap: 0.75rem;
624
+ }
625
+
626
+ .vd-flowchart-field-grid {
627
+ display: grid;
628
+ grid-template-columns: repeat(2, minmax(0, 1fr));
629
+ gap: 0.7rem;
630
+ }
631
+
632
+ .vd-flowchart-field {
633
+ display: flex;
634
+ flex-direction: column;
635
+ gap: 0.35rem;
636
+ }
637
+
638
+ .vd-flowchart-field label {
639
+ font-size: 0.78rem;
640
+ color: var(--vd-flowchart-muted);
641
+ }
642
+
643
+ .vd-flowchart-field input,
644
+ .vd-flowchart-field select,
645
+ .vd-flowchart-field textarea,
646
+ .vd-flowchart-json textarea {
647
+ border: 1px solid var(--vd-flowchart-border);
648
+ border-radius: 6px;
649
+ background-color: color-mix(in srgb, var(--vd-flowchart-panel) 94%, var(--vd-bg-primary, #fcfbf7));
650
+ background-image: none;
651
+ background-repeat: no-repeat;
652
+ color: var(--vd-flowchart-text);
653
+ padding: 0.55rem 0.65rem;
654
+ }
655
+
656
+ .vd-flowchart-field select {
657
+ width: 100%;
658
+ appearance: none;
659
+ cursor: pointer;
660
+ }
661
+
662
+ .vd-flowchart-field textarea,
663
+ .vd-flowchart-json textarea {
664
+ resize: vertical;
665
+ min-height: 5.5rem;
666
+ }
667
+
668
+ .vd-flowchart-delete {
669
+ width: 100%;
670
+ }
671
+
672
+ .vd-flowchart-json {
673
+ display: flex;
674
+ flex-direction: column;
675
+ gap: 0.65rem;
676
+ min-height: 0;
677
+ }
678
+
679
+ .vd-flowchart-json-actions {
680
+ display: flex;
681
+ gap: 0.55rem;
682
+ }
683
+
684
+ .vd-flowchart-json textarea {
685
+ min-height: 13rem;
686
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
687
+ font-size: 0.78rem;
688
+ line-height: 1.45;
689
+ }
690
+
691
+ .vd-flowchart-readonly .vd-flowchart-panel--palette,
692
+ .vd-flowchart-readonly .vd-flowchart-panel--inspector {
693
+ display: none;
694
+ }
695
+
696
+ .vd-flowchart-readonly .vd-flowchart-body {
697
+ grid-template-columns: minmax(0, 1fr);
698
+ }
699
+
700
+ @media (max-width: 1180px) {
701
+ .vd-flowchart-body {
702
+ grid-template-columns: 88px minmax(0, 1fr);
703
+ /* Cap the stacked inspector so it scrolls rather than stealing canvas
704
+ height (which would make the canvas jump on selection). */
705
+ grid-template-rows: minmax(0, 1fr) minmax(0, 16rem);
706
+ }
707
+
708
+ .vd-flowchart-panel--inspector {
709
+ grid-column: 1 / -1;
710
+ border-left: 0;
711
+ border-top: 1px solid var(--vd-flowchart-border);
712
+ }
713
+ }
714
+
715
+ @media (max-width: 840px) {
716
+ .vd-flowchart-body {
717
+ grid-template-columns: 1fr;
718
+ grid-template-rows: auto minmax(280px, 1fr) minmax(0, 16rem);
719
+ }
720
+
721
+ .vd-flowchart-panel--palette {
722
+ border-right: 0;
723
+ border-bottom: 1px solid var(--vd-flowchart-border);
724
+ }
725
+
726
+ .vd-flowchart-palette {
727
+ grid-template-columns: repeat(4, minmax(0, 1fr));
728
+ }
729
+ }