@goplasmatic/datalogic-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1987 @@
1
+ /* this gets exported as style.css and can be used for the default theming */
2
+ /* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */
3
+ .react-flow {
4
+ direction: ltr;
5
+
6
+ --xy-edge-stroke-default: #b1b1b7;
7
+ --xy-edge-stroke-width-default: 1;
8
+ --xy-edge-stroke-selected-default: #555;
9
+
10
+ --xy-connectionline-stroke-default: #b1b1b7;
11
+ --xy-connectionline-stroke-width-default: 1;
12
+
13
+ --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);
14
+
15
+ --xy-minimap-background-color-default: #fff;
16
+ --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);
17
+ --xy-minimap-mask-stroke-color-default: transparent;
18
+ --xy-minimap-mask-stroke-width-default: 1;
19
+ --xy-minimap-node-background-color-default: #e2e2e2;
20
+ --xy-minimap-node-stroke-color-default: transparent;
21
+ --xy-minimap-node-stroke-width-default: 2;
22
+
23
+ --xy-background-color-default: transparent;
24
+ --xy-background-pattern-dots-color-default: #91919a;
25
+ --xy-background-pattern-lines-color-default: #eee;
26
+ --xy-background-pattern-cross-color-default: #e2e2e2;
27
+ background-color: var(--xy-background-color, var(--xy-background-color-default));
28
+ --xy-node-color-default: inherit;
29
+ --xy-node-border-default: 1px solid #1a192b;
30
+ --xy-node-background-color-default: #fff;
31
+ --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
32
+ --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
33
+ --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;
34
+ --xy-node-border-radius-default: 3px;
35
+
36
+ --xy-handle-background-color-default: #1a192b;
37
+ --xy-handle-border-color-default: #fff;
38
+
39
+ --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);
40
+ --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);
41
+
42
+ --xy-controls-button-background-color-default: #fefefe;
43
+ --xy-controls-button-background-color-hover-default: #f4f4f4;
44
+ --xy-controls-button-color-default: inherit;
45
+ --xy-controls-button-color-hover-default: inherit;
46
+ --xy-controls-button-border-color-default: #eee;
47
+ --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
48
+
49
+ --xy-edge-label-background-color-default: #ffffff;
50
+ --xy-edge-label-color-default: inherit;
51
+ --xy-resize-background-color-default: #3367d9;
52
+ }
53
+ .react-flow.dark {
54
+ --xy-edge-stroke-default: #3e3e3e;
55
+ --xy-edge-stroke-width-default: 1;
56
+ --xy-edge-stroke-selected-default: #727272;
57
+
58
+ --xy-connectionline-stroke-default: #b1b1b7;
59
+ --xy-connectionline-stroke-width-default: 1;
60
+
61
+ --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);
62
+
63
+ --xy-minimap-background-color-default: #141414;
64
+ --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);
65
+ --xy-minimap-mask-stroke-color-default: transparent;
66
+ --xy-minimap-mask-stroke-width-default: 1;
67
+ --xy-minimap-node-background-color-default: #2b2b2b;
68
+ --xy-minimap-node-stroke-color-default: transparent;
69
+ --xy-minimap-node-stroke-width-default: 2;
70
+
71
+ --xy-background-color-default: #141414;
72
+ --xy-background-pattern-dots-color-default: #777;
73
+ --xy-background-pattern-lines-color-default: #777;
74
+ --xy-background-pattern-cross-color-default: #777;
75
+ --xy-node-color-default: #f8f8f8;
76
+ --xy-node-border-default: 1px solid #3c3c3c;
77
+ --xy-node-background-color-default: #1e1e1e;
78
+ --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
79
+ --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);
80
+ --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;
81
+
82
+ --xy-handle-background-color-default: #bebebe;
83
+ --xy-handle-border-color-default: #1e1e1e;
84
+
85
+ --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);
86
+ --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);
87
+
88
+ --xy-controls-button-background-color-default: #2b2b2b;
89
+ --xy-controls-button-background-color-hover-default: #3e3e3e;
90
+ --xy-controls-button-color-default: #f8f8f8;
91
+ --xy-controls-button-color-hover-default: #fff;
92
+ --xy-controls-button-border-color-default: #5b5b5b;
93
+ --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
94
+
95
+ --xy-edge-label-background-color-default: #141414;
96
+ --xy-edge-label-color-default: #f8f8f8;
97
+ }
98
+ .react-flow__background {
99
+ background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));
100
+ pointer-events: none;
101
+ z-index: -1;
102
+ }
103
+ .react-flow__container {
104
+ position: absolute;
105
+ width: 100%;
106
+ height: 100%;
107
+ top: 0;
108
+ left: 0;
109
+ }
110
+ .react-flow__pane {
111
+ z-index: 1;
112
+ }
113
+ .react-flow__pane.draggable {
114
+ cursor: grab;
115
+ }
116
+ .react-flow__pane.dragging {
117
+ cursor: grabbing;
118
+ }
119
+ .react-flow__pane.selection {
120
+ cursor: pointer;
121
+ }
122
+ .react-flow__viewport {
123
+ transform-origin: 0 0;
124
+ z-index: 2;
125
+ pointer-events: none;
126
+ }
127
+ .react-flow__renderer {
128
+ z-index: 4;
129
+ }
130
+ .react-flow__selection {
131
+ z-index: 6;
132
+ }
133
+ .react-flow__nodesselection-rect:focus,
134
+ .react-flow__nodesselection-rect:focus-visible {
135
+ outline: none;
136
+ }
137
+ .react-flow__edge-path {
138
+ stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
139
+ stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));
140
+ fill: none;
141
+ }
142
+ .react-flow__connection-path {
143
+ stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));
144
+ stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));
145
+ fill: none;
146
+ }
147
+ .react-flow .react-flow__edges {
148
+ position: absolute;
149
+ }
150
+ .react-flow .react-flow__edges svg {
151
+ overflow: visible;
152
+ position: absolute;
153
+ pointer-events: none;
154
+ }
155
+ .react-flow__edge {
156
+ pointer-events: visibleStroke;
157
+ }
158
+ .react-flow__edge.selectable {
159
+ cursor: pointer;
160
+ }
161
+ .react-flow__edge.animated path {
162
+ stroke-dasharray: 5;
163
+ animation: dashdraw 0.5s linear infinite;
164
+ }
165
+ .react-flow__edge.animated path.react-flow__edge-interaction {
166
+ stroke-dasharray: none;
167
+ animation: none;
168
+ }
169
+ .react-flow__edge.inactive {
170
+ pointer-events: none;
171
+ }
172
+ .react-flow__edge.selected,
173
+ .react-flow__edge:focus,
174
+ .react-flow__edge:focus-visible {
175
+ outline: none;
176
+ }
177
+ .react-flow__edge.selected .react-flow__edge-path,
178
+ .react-flow__edge.selectable:focus .react-flow__edge-path,
179
+ .react-flow__edge.selectable:focus-visible .react-flow__edge-path {
180
+ stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));
181
+ }
182
+ .react-flow__edge-textwrapper {
183
+ pointer-events: all;
184
+ }
185
+ .react-flow__edge .react-flow__edge-text {
186
+ pointer-events: none;
187
+ -webkit-user-select: none;
188
+ -moz-user-select: none;
189
+ user-select: none;
190
+ }
191
+ /* Arrowhead marker styles - use CSS custom properties as default */
192
+ .react-flow__arrowhead polyline {
193
+ stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
194
+ }
195
+ .react-flow__arrowhead polyline.arrowclosed {
196
+ fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
197
+ }
198
+ .react-flow__connection {
199
+ pointer-events: none;
200
+ }
201
+ .react-flow__connection .animated {
202
+ stroke-dasharray: 5;
203
+ animation: dashdraw 0.5s linear infinite;
204
+ }
205
+ svg.react-flow__connectionline {
206
+ z-index: 1001;
207
+ overflow: visible;
208
+ position: absolute;
209
+ }
210
+ .react-flow__nodes {
211
+ pointer-events: none;
212
+ transform-origin: 0 0;
213
+ }
214
+ .react-flow__node {
215
+ position: absolute;
216
+ -webkit-user-select: none;
217
+ -moz-user-select: none;
218
+ user-select: none;
219
+ pointer-events: all;
220
+ transform-origin: 0 0;
221
+ box-sizing: border-box;
222
+ cursor: default;
223
+ }
224
+ .react-flow__node.selectable {
225
+ cursor: pointer;
226
+ }
227
+ .react-flow__node.draggable {
228
+ cursor: grab;
229
+ pointer-events: all;
230
+ }
231
+ .react-flow__node.draggable.dragging {
232
+ cursor: grabbing;
233
+ }
234
+ .react-flow__nodesselection {
235
+ z-index: 3;
236
+ transform-origin: left top;
237
+ pointer-events: none;
238
+ }
239
+ .react-flow__nodesselection-rect {
240
+ position: absolute;
241
+ pointer-events: all;
242
+ cursor: grab;
243
+ }
244
+ .react-flow__handle {
245
+ position: absolute;
246
+ pointer-events: none;
247
+ min-width: 5px;
248
+ min-height: 5px;
249
+ width: 6px;
250
+ height: 6px;
251
+ background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));
252
+ border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));
253
+ border-radius: 100%;
254
+ }
255
+ .react-flow__handle.connectingfrom {
256
+ pointer-events: all;
257
+ }
258
+ .react-flow__handle.connectionindicator {
259
+ pointer-events: all;
260
+ cursor: crosshair;
261
+ }
262
+ .react-flow__handle-bottom {
263
+ top: auto;
264
+ left: 50%;
265
+ bottom: 0;
266
+ transform: translate(-50%, 50%);
267
+ }
268
+ .react-flow__handle-top {
269
+ top: 0;
270
+ left: 50%;
271
+ transform: translate(-50%, -50%);
272
+ }
273
+ .react-flow__handle-left {
274
+ top: 50%;
275
+ left: 0;
276
+ transform: translate(-50%, -50%);
277
+ }
278
+ .react-flow__handle-right {
279
+ top: 50%;
280
+ right: 0;
281
+ transform: translate(50%, -50%);
282
+ }
283
+ .react-flow__edgeupdater {
284
+ cursor: move;
285
+ pointer-events: all;
286
+ }
287
+ .react-flow__pane.selection .react-flow__panel {
288
+ pointer-events: none;
289
+ }
290
+ .react-flow__panel {
291
+ position: absolute;
292
+ z-index: 5;
293
+ margin: 15px;
294
+ }
295
+ .react-flow__panel.top {
296
+ top: 0;
297
+ }
298
+ .react-flow__panel.bottom {
299
+ bottom: 0;
300
+ }
301
+ .react-flow__panel.top.center, .react-flow__panel.bottom.center {
302
+ left: 50%;
303
+ transform: translateX(-15px) translateX(-50%);
304
+ }
305
+ .react-flow__panel.left {
306
+ left: 0;
307
+ }
308
+ .react-flow__panel.right {
309
+ right: 0;
310
+ }
311
+ .react-flow__panel.left.center, .react-flow__panel.right.center {
312
+ top: 50%;
313
+ transform: translateY(-15px) translateY(-50%);
314
+ }
315
+ .react-flow__attribution {
316
+ font-size: 10px;
317
+ background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));
318
+ padding: 2px 3px;
319
+ margin: 0;
320
+ }
321
+ .react-flow__attribution a {
322
+ text-decoration: none;
323
+ color: #999;
324
+ }
325
+ @keyframes dashdraw {
326
+ from {
327
+ stroke-dashoffset: 10;
328
+ }
329
+ }
330
+ .react-flow__edgelabel-renderer {
331
+ position: absolute;
332
+ width: 100%;
333
+ height: 100%;
334
+ pointer-events: none;
335
+ -webkit-user-select: none;
336
+ -moz-user-select: none;
337
+ user-select: none;
338
+ left: 0;
339
+ top: 0;
340
+ }
341
+ .react-flow__viewport-portal {
342
+ position: absolute;
343
+ width: 100%;
344
+ height: 100%;
345
+ left: 0;
346
+ top: 0;
347
+ -webkit-user-select: none;
348
+ -moz-user-select: none;
349
+ user-select: none;
350
+ }
351
+ .react-flow__minimap {
352
+ background: var(
353
+ --xy-minimap-background-color-props,
354
+ var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))
355
+ );
356
+ }
357
+ .react-flow__minimap-svg {
358
+ display: block;
359
+ }
360
+ .react-flow__minimap-mask {
361
+ fill: var(
362
+ --xy-minimap-mask-background-color-props,
363
+ var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))
364
+ );
365
+ stroke: var(
366
+ --xy-minimap-mask-stroke-color-props,
367
+ var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))
368
+ );
369
+ stroke-width: var(
370
+ --xy-minimap-mask-stroke-width-props,
371
+ var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))
372
+ );
373
+ }
374
+ .react-flow__minimap-node {
375
+ fill: var(
376
+ --xy-minimap-node-background-color-props,
377
+ var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))
378
+ );
379
+ stroke: var(
380
+ --xy-minimap-node-stroke-color-props,
381
+ var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))
382
+ );
383
+ stroke-width: var(
384
+ --xy-minimap-node-stroke-width-props,
385
+ var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))
386
+ );
387
+ }
388
+ .react-flow__background-pattern.dots {
389
+ fill: var(
390
+ --xy-background-pattern-color-props,
391
+ var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))
392
+ );
393
+ }
394
+ .react-flow__background-pattern.lines {
395
+ stroke: var(
396
+ --xy-background-pattern-color-props,
397
+ var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))
398
+ );
399
+ }
400
+ .react-flow__background-pattern.cross {
401
+ stroke: var(
402
+ --xy-background-pattern-color-props,
403
+ var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))
404
+ );
405
+ }
406
+ .react-flow__controls {
407
+ display: flex;
408
+ flex-direction: column;
409
+ box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));
410
+ }
411
+ .react-flow__controls.horizontal {
412
+ flex-direction: row;
413
+ }
414
+ .react-flow__controls-button {
415
+ display: flex;
416
+ justify-content: center;
417
+ align-items: center;
418
+ height: 26px;
419
+ width: 26px;
420
+ padding: 4px;
421
+ border: none;
422
+ background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));
423
+ border-bottom: 1px solid
424
+ var(
425
+ --xy-controls-button-border-color-props,
426
+ var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))
427
+ );
428
+ color: var(
429
+ --xy-controls-button-color-props,
430
+ var(--xy-controls-button-color, var(--xy-controls-button-color-default))
431
+ );
432
+ cursor: pointer;
433
+ -webkit-user-select: none;
434
+ -moz-user-select: none;
435
+ user-select: none;
436
+ }
437
+ .react-flow__controls-button svg {
438
+ width: 100%;
439
+ max-width: 12px;
440
+ max-height: 12px;
441
+ fill: currentColor;
442
+ }
443
+ .react-flow__edge.updating .react-flow__edge-path {
444
+ stroke: #777;
445
+ }
446
+ .react-flow__edge-text {
447
+ font-size: 10px;
448
+ }
449
+ .react-flow__node.selectable:focus,
450
+ .react-flow__node.selectable:focus-visible {
451
+ outline: none;
452
+ }
453
+ .react-flow__node-input,
454
+ .react-flow__node-default,
455
+ .react-flow__node-output,
456
+ .react-flow__node-group {
457
+ padding: 10px;
458
+ border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));
459
+ width: 150px;
460
+ font-size: 12px;
461
+ color: var(--xy-node-color, var(--xy-node-color-default));
462
+ text-align: center;
463
+ border: var(--xy-node-border, var(--xy-node-border-default));
464
+ background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));
465
+ }
466
+ .react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {
467
+ box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));
468
+ }
469
+ .react-flow__node-input.selectable.selected,
470
+ .react-flow__node-input.selectable:focus,
471
+ .react-flow__node-input.selectable:focus-visible,
472
+ .react-flow__node-default.selectable.selected,
473
+ .react-flow__node-default.selectable:focus,
474
+ .react-flow__node-default.selectable:focus-visible,
475
+ .react-flow__node-output.selectable.selected,
476
+ .react-flow__node-output.selectable:focus,
477
+ .react-flow__node-output.selectable:focus-visible,
478
+ .react-flow__node-group.selectable.selected,
479
+ .react-flow__node-group.selectable:focus,
480
+ .react-flow__node-group.selectable:focus-visible {
481
+ box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));
482
+ }
483
+ .react-flow__node-group {
484
+ background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));
485
+ }
486
+ .react-flow__nodesselection-rect,
487
+ .react-flow__selection {
488
+ background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));
489
+ border: var(--xy-selection-border, var(--xy-selection-border-default));
490
+ }
491
+ .react-flow__nodesselection-rect:focus,
492
+ .react-flow__nodesselection-rect:focus-visible,
493
+ .react-flow__selection:focus,
494
+ .react-flow__selection:focus-visible {
495
+ outline: none;
496
+ }
497
+ .react-flow__controls-button:hover {
498
+ background: var(
499
+ --xy-controls-button-background-color-hover-props,
500
+ var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))
501
+ );
502
+ color: var(
503
+ --xy-controls-button-color-hover-props,
504
+ var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))
505
+ );
506
+ }
507
+ .react-flow__controls-button:disabled {
508
+ pointer-events: none;
509
+ }
510
+ .react-flow__controls-button:disabled svg {
511
+ fill-opacity: 0.4;
512
+ }
513
+ .react-flow__controls-button:last-child {
514
+ border-bottom: none;
515
+ }
516
+ .react-flow__controls.horizontal .react-flow__controls-button {
517
+ border-bottom: none;
518
+ border-right: 1px solid
519
+ var(
520
+ --xy-controls-button-border-color-props,
521
+ var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))
522
+ );
523
+ }
524
+ .react-flow__controls.horizontal .react-flow__controls-button:last-child {
525
+ border-right: none;
526
+ }
527
+ .react-flow__resize-control {
528
+ position: absolute;
529
+ }
530
+ .react-flow__resize-control.left,
531
+ .react-flow__resize-control.right {
532
+ cursor: ew-resize;
533
+ }
534
+ .react-flow__resize-control.top,
535
+ .react-flow__resize-control.bottom {
536
+ cursor: ns-resize;
537
+ }
538
+ .react-flow__resize-control.top.left,
539
+ .react-flow__resize-control.bottom.right {
540
+ cursor: nwse-resize;
541
+ }
542
+ .react-flow__resize-control.bottom.left,
543
+ .react-flow__resize-control.top.right {
544
+ cursor: nesw-resize;
545
+ }
546
+ /* handle styles */
547
+ .react-flow__resize-control.handle {
548
+ width: 5px;
549
+ height: 5px;
550
+ border: 1px solid #fff;
551
+ border-radius: 1px;
552
+ background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
553
+ translate: -50% -50%;
554
+ }
555
+ .react-flow__resize-control.handle.left {
556
+ left: 0;
557
+ top: 50%;
558
+ }
559
+ .react-flow__resize-control.handle.right {
560
+ left: 100%;
561
+ top: 50%;
562
+ }
563
+ .react-flow__resize-control.handle.top {
564
+ left: 50%;
565
+ top: 0;
566
+ }
567
+ .react-flow__resize-control.handle.bottom {
568
+ left: 50%;
569
+ top: 100%;
570
+ }
571
+ .react-flow__resize-control.handle.top.left {
572
+ left: 0;
573
+ }
574
+ .react-flow__resize-control.handle.bottom.left {
575
+ left: 0;
576
+ }
577
+ .react-flow__resize-control.handle.top.right {
578
+ left: 100%;
579
+ }
580
+ .react-flow__resize-control.handle.bottom.right {
581
+ left: 100%;
582
+ }
583
+ /* line styles */
584
+ .react-flow__resize-control.line {
585
+ border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
586
+ border-width: 0;
587
+ border-style: solid;
588
+ }
589
+ .react-flow__resize-control.line.left,
590
+ .react-flow__resize-control.line.right {
591
+ width: 1px;
592
+ transform: translate(-50%, 0);
593
+ top: 0;
594
+ height: 100%;
595
+ }
596
+ .react-flow__resize-control.line.left {
597
+ left: 0;
598
+ border-left-width: 1px;
599
+ }
600
+ .react-flow__resize-control.line.right {
601
+ left: 100%;
602
+ border-right-width: 1px;
603
+ }
604
+ .react-flow__resize-control.line.top,
605
+ .react-flow__resize-control.line.bottom {
606
+ height: 1px;
607
+ transform: translate(0, -50%);
608
+ left: 0;
609
+ width: 100%;
610
+ }
611
+ .react-flow__resize-control.line.top {
612
+ top: 0;
613
+ border-top-width: 1px;
614
+ }
615
+ .react-flow__resize-control.line.bottom {
616
+ border-bottom-width: 1px;
617
+ top: 100%;
618
+ }
619
+ .react-flow__edge-textbg {
620
+ fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));
621
+ }
622
+ .react-flow__edge-text {
623
+ fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
624
+ }
625
+ .debugger-controls {
626
+ position: absolute;
627
+ top: 12px;
628
+ left: 50%;
629
+ transform: translateX(-50%);
630
+ z-index: 100;
631
+ pointer-events: auto;
632
+ }
633
+
634
+ .debugger-controls-inner {
635
+ display: flex;
636
+ align-items: center;
637
+ gap: 16px;
638
+ padding: 8px 16px;
639
+ background: var(--bg-secondary);
640
+ border: 1px solid var(--border-primary);
641
+ border-radius: 8px;
642
+ box-shadow: 0 4px 12px var(--node-shadow);
643
+ backdrop-filter: blur(8px);
644
+ }
645
+
646
+ /* Bug icon indicator */
647
+ .debugger-icon {
648
+ display: flex;
649
+ align-items: center;
650
+ justify-content: center;
651
+ color: var(--accent-amber);
652
+ }
653
+
654
+ /* Navigation buttons */
655
+ .debugger-buttons {
656
+ display: flex;
657
+ align-items: center;
658
+ gap: 4px;
659
+ }
660
+
661
+ .debugger-btn {
662
+ display: flex;
663
+ align-items: center;
664
+ justify-content: center;
665
+ width: 32px;
666
+ height: 32px;
667
+ padding: 0;
668
+ border: none;
669
+ border-radius: 6px;
670
+ background: var(--bg-hover);
671
+ color: var(--text-secondary);
672
+ cursor: pointer;
673
+ transition: background-color 0.15s, color 0.15s, transform 0.1s;
674
+ }
675
+
676
+ .debugger-btn:hover:not(:disabled) {
677
+ background: var(--bg-tertiary);
678
+ color: var(--text-primary);
679
+ }
680
+
681
+ .debugger-btn:active:not(:disabled) {
682
+ transform: scale(0.95);
683
+ }
684
+
685
+ .debugger-btn:disabled {
686
+ opacity: 0.4;
687
+ cursor: not-allowed;
688
+ }
689
+
690
+ .debugger-btn-primary {
691
+ width: 36px;
692
+ height: 36px;
693
+ background: var(--accent-blue);
694
+ color: white;
695
+ }
696
+
697
+ .debugger-btn-primary:hover:not(:disabled) {
698
+ background: var(--accent-blue-hover);
699
+ color: white;
700
+ }
701
+
702
+ /* Step counter */
703
+ .debugger-step-counter {
704
+ display: flex;
705
+ align-items: baseline;
706
+ gap: 2px;
707
+ font-family: 'SF Mono', 'Consolas', monospace;
708
+ font-size: 13px;
709
+ min-width: 60px;
710
+ justify-content: center;
711
+ }
712
+
713
+ .step-current {
714
+ color: var(--text-primary);
715
+ font-weight: 600;
716
+ }
717
+
718
+ .step-separator {
719
+ color: var(--text-muted);
720
+ margin: 0 2px;
721
+ }
722
+
723
+ .step-total {
724
+ color: var(--text-secondary);
725
+ }
726
+
727
+ /* Speed control */
728
+ .debugger-speed {
729
+ display: flex;
730
+ align-items: center;
731
+ gap: 8px;
732
+ }
733
+
734
+ .speed-label {
735
+ font-size: 12px;
736
+ color: var(--text-tertiary);
737
+ white-space: nowrap;
738
+ }
739
+
740
+ .speed-slider {
741
+ width: 80px;
742
+ height: 4px;
743
+ -webkit-appearance: none;
744
+ appearance: none;
745
+ background: var(--bg-tertiary);
746
+ border-radius: 2px;
747
+ cursor: pointer;
748
+ }
749
+
750
+ .speed-slider::-webkit-slider-thumb {
751
+ -webkit-appearance: none;
752
+ appearance: none;
753
+ width: 14px;
754
+ height: 14px;
755
+ background: var(--accent-blue);
756
+ border-radius: 50%;
757
+ cursor: pointer;
758
+ transition: transform 0.1s;
759
+ }
760
+
761
+ .speed-slider::-webkit-slider-thumb:hover {
762
+ transform: scale(1.15);
763
+ }
764
+
765
+ .speed-slider::-moz-range-thumb {
766
+ width: 14px;
767
+ height: 14px;
768
+ background: var(--accent-blue);
769
+ border-radius: 50%;
770
+ border: none;
771
+ cursor: pointer;
772
+ }
773
+
774
+ /* Dark mode adjustments */
775
+ [data-theme="dark"] .debugger-controls-inner {
776
+ background: rgba(31, 41, 55, 0.95);
777
+ border-color: var(--border-light);
778
+ }
779
+
780
+ [data-theme="dark"] .debugger-btn {
781
+ background: rgba(55, 65, 81, 0.8);
782
+ }
783
+
784
+ [data-theme="dark"] .debugger-btn:hover:not(:disabled) {
785
+ background: rgba(75, 85, 99, 0.9);
786
+ }
787
+
788
+ [data-theme="dark"] .speed-slider {
789
+ background: rgba(75, 85, 99, 0.8);
790
+ }
791
+ /* Base node styles - shared across all node types */
792
+ .logic-node {
793
+ border-radius: 8px;
794
+ border: 2px solid;
795
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
796
+ font-size: 13px;
797
+ /* Width is set via inline style from layout calculations */
798
+ width: 100%;
799
+ box-sizing: border-box;
800
+ box-shadow: 0 2px 6px var(--node-shadow);
801
+ transition: box-shadow 0.2s, transform 0.1s;
802
+ }
803
+
804
+ .logic-node:hover {
805
+ box-shadow: 0 4px 12px var(--node-shadow-hover);
806
+ }
807
+
808
+ .logic-node.selected {
809
+ box-shadow: 0 0 0 2px var(--accent-blue), 0 4px 12px var(--node-shadow-hover);
810
+ }
811
+
812
+ /* Legacy class support - these now use .logic-node */
813
+ .operator-node,
814
+ .variable-node,
815
+ .literal-node {
816
+ border-radius: 8px;
817
+ border: 2px solid;
818
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
819
+ font-size: 13px;
820
+ /* Width is set via inline style from layout calculations */
821
+ width: 100%;
822
+ box-sizing: border-box;
823
+ box-shadow: 0 2px 6px var(--node-shadow);
824
+ transition: box-shadow 0.2s, transform 0.1s;
825
+ }
826
+
827
+ .operator-node:hover,
828
+ .variable-node:hover,
829
+ .literal-node:hover {
830
+ box-shadow: 0 4px 12px var(--node-shadow-hover);
831
+ }
832
+
833
+ .operator-node.selected,
834
+ .variable-node.selected,
835
+ .literal-node.selected {
836
+ box-shadow: 0 0 0 2px var(--accent-blue), 0 4px 12px var(--node-shadow-hover);
837
+ }
838
+
839
+ /* Operator Node */
840
+ .operator-node {
841
+ background: var(--node-bg) !important;
842
+ }
843
+
844
+ .operator-node-header {
845
+ padding: 6px 12px;
846
+ border-radius: 6px 6px 0 0;
847
+ color: white;
848
+ font-weight: 600;
849
+ text-align: center;
850
+ }
851
+
852
+ .operator-label {
853
+ font-size: 16px;
854
+ letter-spacing: 0.5px;
855
+ }
856
+
857
+ /* Header content with collapse toggle */
858
+ .operator-header-content {
859
+ display: flex;
860
+ align-items: center;
861
+ justify-content: space-between;
862
+ width: 100%;
863
+ }
864
+
865
+ .operator-header-content .operator-label {
866
+ flex: 1;
867
+ text-align: center;
868
+ }
869
+
870
+ .collapse-toggle {
871
+ background: transparent;
872
+ border: none;
873
+ color: white;
874
+ font-size: 10px;
875
+ cursor: pointer;
876
+ padding: 2px 6px;
877
+ opacity: 0.8;
878
+ transition: opacity 0.2s;
879
+ flex-shrink: 0;
880
+ }
881
+
882
+ .collapse-toggle:hover {
883
+ opacity: 1;
884
+ }
885
+
886
+ /* Cell collapse toggle (for vertical cell nodes) */
887
+ .cell-collapse-toggle {
888
+ background: transparent;
889
+ border: none;
890
+ color: var(--text-tertiary);
891
+ font-size: 10px;
892
+ cursor: pointer;
893
+ padding: 2px 4px;
894
+ opacity: 0.7;
895
+ transition: opacity 0.2s;
896
+ flex-shrink: 0;
897
+ margin-left: auto;
898
+ }
899
+
900
+ .cell-collapse-toggle:hover {
901
+ opacity: 1;
902
+ color: var(--text-primary);
903
+ }
904
+
905
+ /* Collapsed summary in vertical cell row */
906
+ .collapsed-summary {
907
+ display: flex;
908
+ align-items: center;
909
+ gap: 4px;
910
+ background: var(--bg-hover);
911
+ padding: 2px 6px;
912
+ border-radius: 3px;
913
+ flex: 1;
914
+ }
915
+
916
+ .collapsed-summary .arg-icon {
917
+ font-size: 11px;
918
+ }
919
+
920
+ .collapsed-summary .arg-label {
921
+ font-size: 11px;
922
+ color: var(--text-secondary);
923
+ }
924
+
925
+ /* Expression text for collapsed nodes */
926
+ .expression-text {
927
+ font-family: 'SF Mono', 'Consolas', monospace;
928
+ font-size: 12px;
929
+ color: var(--text-primary);
930
+ padding: 4px 8px;
931
+ background: var(--bg-tertiary);
932
+ border-radius: 4px;
933
+ word-break: break-word;
934
+ line-height: 1.4;
935
+ }
936
+
937
+ /* Inline expression for unary operators with simple args */
938
+ .expression-text.inline-expression {
939
+ font-size: 13px;
940
+ font-weight: 500;
941
+ }
942
+
943
+ .collapsed-body {
944
+ padding: 8px;
945
+ }
946
+
947
+ /* Argument summaries for collapsed view */
948
+ .arg-summaries {
949
+ display: flex;
950
+ flex-direction: column;
951
+ gap: 4px;
952
+ width: 100%;
953
+ }
954
+
955
+ .arg-summary-row {
956
+ display: flex;
957
+ align-items: center;
958
+ gap: 6px;
959
+ padding: 2px 4px;
960
+ font-size: 12px;
961
+ background: var(--bg-tertiary);
962
+ border-radius: 3px;
963
+ }
964
+
965
+ .arg-icon {
966
+ flex-shrink: 0;
967
+ font-size: 12px;
968
+ }
969
+
970
+ .arg-label {
971
+ font-family: 'SF Mono', 'Consolas', monospace;
972
+ color: var(--text-primary);
973
+ white-space: nowrap;
974
+ overflow: hidden;
975
+ text-overflow: ellipsis;
976
+ }
977
+
978
+ /* Collapsed operator node */
979
+ .operator-node.collapsed {
980
+ min-height: auto;
981
+ }
982
+
983
+ .operator-node.collapsed .operator-node-body {
984
+ padding: 8px;
985
+ }
986
+
987
+ .operator-node-body {
988
+ padding: 8px 12px;
989
+ display: flex;
990
+ justify-content: space-between;
991
+ align-items: center;
992
+ gap: 8px;
993
+ }
994
+
995
+ .operator-category {
996
+ font-size: 11px;
997
+ color: var(--text-tertiary);
998
+ text-transform: uppercase;
999
+ letter-spacing: 0.5px;
1000
+ }
1001
+
1002
+ .operator-children-count {
1003
+ font-size: 11px;
1004
+ color: var(--text-muted);
1005
+ }
1006
+
1007
+ /* Variable Node */
1008
+ .variable-node {
1009
+ background: var(--node-bg) !important;
1010
+ padding: 8px 12px;
1011
+ position: relative;
1012
+ }
1013
+
1014
+ .variable-node-content {
1015
+ display: flex;
1016
+ align-items: center;
1017
+ gap: 8px;
1018
+ }
1019
+
1020
+ .variable-operator {
1021
+ font-weight: 700;
1022
+ font-size: 12px;
1023
+ }
1024
+
1025
+ .variable-path {
1026
+ font-family: 'SF Mono', 'Consolas', monospace;
1027
+ font-size: 13px;
1028
+ color: var(--text-primary);
1029
+ }
1030
+
1031
+ .variable-default {
1032
+ margin-top: 6px;
1033
+ padding-top: 6px;
1034
+ border-top: 1px solid var(--border-light);
1035
+ font-size: 11px;
1036
+ display: flex;
1037
+ gap: 4px;
1038
+ }
1039
+
1040
+ .variable-default-label {
1041
+ color: var(--text-muted);
1042
+ }
1043
+
1044
+ .variable-default-value {
1045
+ font-family: 'SF Mono', 'Consolas', monospace;
1046
+ color: var(--text-tertiary);
1047
+ }
1048
+
1049
+ /* Literal Node */
1050
+ .literal-node {
1051
+ background: var(--node-bg) !important;
1052
+ padding: 8px 12px;
1053
+ position: relative;
1054
+ }
1055
+
1056
+ .literal-node-content {
1057
+ display: flex;
1058
+ align-items: center;
1059
+ gap: 8px;
1060
+ }
1061
+
1062
+ .literal-type-icon {
1063
+ font-weight: 700;
1064
+ font-size: 14px;
1065
+ width: 18px;
1066
+ text-align: center;
1067
+ }
1068
+
1069
+ .literal-value {
1070
+ font-family: 'SF Mono', 'Consolas', monospace;
1071
+ font-size: 13px;
1072
+ color: var(--text-primary);
1073
+ word-break: break-all;
1074
+ }
1075
+
1076
+ /* ReactFlow Handle styles */
1077
+ .react-flow__handle {
1078
+ width: 10px;
1079
+ height: 10px;
1080
+ border: 2px solid white;
1081
+ }
1082
+
1083
+ [data-theme="dark"] .react-flow__handle {
1084
+ border-color: var(--bg-primary);
1085
+ }
1086
+
1087
+ .react-flow__handle-top {
1088
+ top: -6px;
1089
+ }
1090
+
1091
+ .react-flow__handle-bottom {
1092
+ bottom: -6px;
1093
+ }
1094
+
1095
+ .react-flow__handle-right {
1096
+ right: -6px;
1097
+ }
1098
+
1099
+ .react-flow__handle-left {
1100
+ left: -6px;
1101
+ top: 50% !important;
1102
+ transform: translateY(-50%) !important;
1103
+ }
1104
+
1105
+ /* Ensure left handles are centered on simple nodes */
1106
+ .literal-node .react-flow__handle-left,
1107
+ .variable-node .react-flow__handle-left {
1108
+ top: 50% !important;
1109
+ transform: translateY(-50%) !important;
1110
+ }
1111
+
1112
+ /* Decision Node */
1113
+ .decision-node {
1114
+ background: var(--node-bg) !important;
1115
+ border-radius: 8px;
1116
+ border: 2px solid;
1117
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
1118
+ font-size: 13px;
1119
+ /* Width is set via inline style from layout calculations */
1120
+ width: 100%;
1121
+ box-sizing: border-box;
1122
+ box-shadow: 0 2px 6px var(--node-shadow);
1123
+ transition: box-shadow 0.2s, transform 0.1s;
1124
+ position: relative;
1125
+ }
1126
+
1127
+ .decision-node:hover {
1128
+ box-shadow: 0 4px 12px var(--node-shadow-hover);
1129
+ }
1130
+
1131
+ .decision-node.selected {
1132
+ box-shadow: 0 0 0 2px var(--accent-blue), 0 4px 12px var(--node-shadow-hover);
1133
+ }
1134
+
1135
+ .decision-node-header {
1136
+ padding: 6px 12px;
1137
+ border-radius: 6px 6px 0 0;
1138
+ color: white;
1139
+ font-weight: 600;
1140
+ display: flex;
1141
+ align-items: center;
1142
+ gap: 8px;
1143
+ }
1144
+
1145
+ .decision-node-title {
1146
+ font-size: 16px;
1147
+ letter-spacing: 0.5px;
1148
+ }
1149
+
1150
+ .decision-node-body {
1151
+ padding: 0;
1152
+ }
1153
+
1154
+ /* Decision rows - each row is 32px height */
1155
+ .decision-row {
1156
+ display: flex;
1157
+ align-items: center;
1158
+ padding: 0 12px;
1159
+ height: 32px;
1160
+ gap: 6px;
1161
+ border-bottom: 1px solid var(--border-light);
1162
+ position: relative;
1163
+ }
1164
+
1165
+ .decision-row:last-child {
1166
+ border-bottom: none;
1167
+ }
1168
+
1169
+ .decision-row-branch {
1170
+ padding-left: 20px;
1171
+ }
1172
+
1173
+ .decision-row-label {
1174
+ font-size: 13px;
1175
+ font-weight: 600;
1176
+ text-transform: lowercase;
1177
+ display: flex;
1178
+ align-items: center;
1179
+ gap: 4px;
1180
+ color: var(--text-tertiary);
1181
+ flex-shrink: 0;
1182
+ }
1183
+
1184
+ .decision-row-content {
1185
+ flex: 1;
1186
+ font-family: 'SF Mono', 'Consolas', monospace;
1187
+ font-size: 12px;
1188
+ color: var(--text-primary);
1189
+ background: var(--bg-tertiary);
1190
+ padding: 4px 8px;
1191
+ border-radius: 4px;
1192
+ word-break: break-word;
1193
+ line-height: 1.3;
1194
+ overflow: hidden;
1195
+ text-overflow: ellipsis;
1196
+ white-space: nowrap;
1197
+ }
1198
+
1199
+ /* Decision node handles are positioned at node level via inline styles */
1200
+
1201
+ /* Decision node input handle */
1202
+ .decision-node .react-flow__handle[data-handleid="left"] {
1203
+ left: -6px;
1204
+ top: 50%;
1205
+ }
1206
+
1207
+ /* Edge styles */
1208
+ .react-flow__edge-path {
1209
+ stroke-width: 2;
1210
+ }
1211
+
1212
+ /* Custom edge styles for decision branches */
1213
+ .react-flow__edge.yes-edge .react-flow__edge-path {
1214
+ stroke: #22C55E;
1215
+ }
1216
+
1217
+ .react-flow__edge.no-edge .react-flow__edge-path {
1218
+ stroke: #EF4444;
1219
+ }
1220
+
1221
+ /* Vertical Cell Node */
1222
+ .vertical-cell-node {
1223
+ background: var(--node-bg) !important;
1224
+ border-radius: 8px;
1225
+ border: 2px solid;
1226
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
1227
+ font-size: 13px;
1228
+ /* Width is set via inline style from layout calculations */
1229
+ width: 100%;
1230
+ box-sizing: border-box;
1231
+ box-shadow: 0 2px 6px var(--node-shadow);
1232
+ transition: box-shadow 0.2s, transform 0.1s;
1233
+ }
1234
+
1235
+ .vertical-cell-node:hover {
1236
+ box-shadow: 0 4px 12px var(--node-shadow-hover);
1237
+ }
1238
+
1239
+ .vertical-cell-node.selected {
1240
+ box-shadow: 0 0 0 2px var(--accent-blue), 0 4px 12px var(--node-shadow-hover);
1241
+ }
1242
+
1243
+ .vertical-cell-header {
1244
+ padding: 4px 10px;
1245
+ border-radius: 6px 6px 0 0;
1246
+ color: white;
1247
+ display: flex;
1248
+ align-items: center;
1249
+ gap: 8px;
1250
+ }
1251
+
1252
+ .vertical-cell-header .vertical-cell-label {
1253
+ flex: 1;
1254
+ }
1255
+
1256
+ .vertical-cell-header .collapse-toggle {
1257
+ margin-left: auto;
1258
+ }
1259
+
1260
+ .vertical-cell-icon {
1261
+ font-size: 16px;
1262
+ }
1263
+
1264
+ .vertical-cell-label {
1265
+ font-weight: 600;
1266
+ font-size: 16px;
1267
+ letter-spacing: 0.5px;
1268
+ }
1269
+
1270
+ .vertical-cell-body {
1271
+ padding: 4px 0;
1272
+ }
1273
+
1274
+ .vertical-cell-row {
1275
+ padding: 6px 12px;
1276
+ border-bottom: 1px solid var(--border-light);
1277
+ display: flex;
1278
+ align-items: center;
1279
+ gap: 8px;
1280
+ position: relative;
1281
+ }
1282
+
1283
+ /* Handle positioned inside cell row */
1284
+ .vertical-cell-row .cell-handle {
1285
+ position: absolute;
1286
+ right: -5px;
1287
+ top: 50%;
1288
+ transform: translateY(-50%);
1289
+ }
1290
+
1291
+ /* Condition handle - upper position for if/then cells */
1292
+ .vertical-cell-row .cell-handle.condition-handle {
1293
+ top: 30%;
1294
+ }
1295
+
1296
+ /* Then/Yes handle - lower position for if/then cells */
1297
+ .vertical-cell-row .cell-handle.then-handle {
1298
+ top: 70%;
1299
+ }
1300
+
1301
+ .vertical-cell-row:last-child {
1302
+ border-bottom: none;
1303
+ }
1304
+
1305
+ .vertical-cell-row-then {
1306
+ padding-left: 24px;
1307
+ }
1308
+
1309
+ .vertical-cell-row-icon {
1310
+ font-size: 14px;
1311
+ flex-shrink: 0;
1312
+ }
1313
+
1314
+ .vertical-cell-row-label {
1315
+ font-size: 12px;
1316
+ font-weight: 600;
1317
+ color: var(--text-tertiary);
1318
+ flex-shrink: 0;
1319
+ }
1320
+
1321
+ .vertical-cell-inline {
1322
+ font-family: 'SF Mono', 'Consolas', monospace;
1323
+ font-size: 12px;
1324
+ color: var(--text-primary);
1325
+ word-break: break-word;
1326
+ }
1327
+
1328
+ /* Branch expression text in vertical cells */
1329
+ .branch-expression {
1330
+ flex: 1;
1331
+ background: var(--bg-tertiary);
1332
+ padding: 2px 6px;
1333
+ border-radius: 3px;
1334
+ border-left: 2px solid #94a3b8;
1335
+ }
1336
+
1337
+ [data-theme="dark"] .branch-expression {
1338
+ background: var(--bg-hover);
1339
+ border-left-color: #64748b;
1340
+ }
1341
+
1342
+ /* Header right section for result badge and collapse toggle */
1343
+ .header-right {
1344
+ display: flex;
1345
+ align-items: center;
1346
+ gap: 4px;
1347
+ margin-left: auto;
1348
+ }
1349
+
1350
+ /* Result Badge Styles */
1351
+ .result-badge {
1352
+ display: inline-flex;
1353
+ align-items: center;
1354
+ gap: 4px;
1355
+ padding: 2px 8px;
1356
+ border-radius: 4px;
1357
+ font-size: 11px;
1358
+ font-family: 'SF Mono', 'Consolas', monospace;
1359
+ font-weight: 500;
1360
+ max-width: 120px;
1361
+ overflow: hidden;
1362
+ position: relative;
1363
+ cursor: default;
1364
+ }
1365
+
1366
+ .result-badge.compact {
1367
+ padding: 1px 6px;
1368
+ font-size: 10px;
1369
+ max-width: 80px;
1370
+ }
1371
+
1372
+ .result-badge .result-text {
1373
+ white-space: nowrap;
1374
+ overflow: hidden;
1375
+ text-overflow: ellipsis;
1376
+ }
1377
+
1378
+ /* Result popover for complex values */
1379
+ .result-popover {
1380
+ position: absolute;
1381
+ top: 100%;
1382
+ right: 0;
1383
+ margin-top: 4px;
1384
+ background: var(--debug-popover-bg);
1385
+ color: var(--debug-popover-text);
1386
+ border-radius: 6px;
1387
+ padding: 8px 12px;
1388
+ font-size: 11px;
1389
+ z-index: 1000;
1390
+ box-shadow: 0 4px 12px var(--debug-popover-shadow);
1391
+ min-width: 150px;
1392
+ max-width: 300px;
1393
+ max-height: 200px;
1394
+ overflow: auto;
1395
+ }
1396
+
1397
+ .result-popover pre {
1398
+ margin: 0;
1399
+ white-space: pre-wrap;
1400
+ word-break: break-word;
1401
+ font-family: 'SF Mono', 'Consolas', monospace;
1402
+ }
1403
+
1404
+ .result-popover.error {
1405
+ background: var(--debug-popover-error-bg);
1406
+ color: var(--debug-value-false);
1407
+ }
1408
+
1409
+ .result-badge.truthy {
1410
+ background: var(--success-bg);
1411
+ color: var(--success-text);
1412
+ border: 1px solid var(--success-border);
1413
+ }
1414
+
1415
+ .result-badge.falsy {
1416
+ background: var(--error-bg);
1417
+ color: var(--error-text);
1418
+ border: 1px solid var(--error-border);
1419
+ }
1420
+
1421
+ .result-badge.boolean.truthy {
1422
+ background: var(--success-bg);
1423
+ color: var(--success-text);
1424
+ }
1425
+
1426
+ .result-badge.boolean.falsy {
1427
+ background: var(--error-bg);
1428
+ color: var(--error-text);
1429
+ }
1430
+
1431
+ .result-badge.number {
1432
+ background: var(--accent-blue-light);
1433
+ color: var(--accent-blue);
1434
+ border: 1px solid var(--accent-blue);
1435
+ }
1436
+
1437
+ .result-badge.string {
1438
+ background: var(--warning-bg);
1439
+ color: var(--warning-text);
1440
+ border: 1px solid var(--warning-border);
1441
+ }
1442
+
1443
+ .result-badge.null,
1444
+ .result-badge.undefined {
1445
+ background: var(--bg-tertiary);
1446
+ color: var(--text-muted);
1447
+ border: 1px solid var(--border-primary);
1448
+ }
1449
+
1450
+ .result-badge.array,
1451
+ .result-badge.object {
1452
+ background: #e0e7ff;
1453
+ color: #4f46e5;
1454
+ border: 1px solid #c7d2fe;
1455
+ }
1456
+
1457
+ [data-theme="dark"] .result-badge.array,
1458
+ [data-theme="dark"] .result-badge.object {
1459
+ background: #312e81;
1460
+ color: #a5b4fc;
1461
+ border-color: #4338ca;
1462
+ }
1463
+
1464
+ .result-badge.error {
1465
+ background: var(--error-bg);
1466
+ color: var(--error-text);
1467
+ border: 1px solid var(--error-border);
1468
+ }
1469
+
1470
+ .result-badge .result-icon {
1471
+ display: inline-flex;
1472
+ align-items: center;
1473
+ justify-content: center;
1474
+ width: 12px;
1475
+ height: 12px;
1476
+ background: var(--error-text);
1477
+ color: white;
1478
+ border-radius: 50%;
1479
+ font-size: 9px;
1480
+ font-weight: bold;
1481
+ flex-shrink: 0;
1482
+ }
1483
+
1484
+ /* Result badge container in nodes */
1485
+ .node-result-container {
1486
+ padding: 4px 8px;
1487
+ border-top: 1px solid var(--border-light);
1488
+ display: flex;
1489
+ align-items: center;
1490
+ justify-content: flex-end;
1491
+ }
1492
+
1493
+ /* Variable and Literal result positioning */
1494
+ .variable-result,
1495
+ .literal-result {
1496
+ margin-left: auto;
1497
+ flex-shrink: 0;
1498
+ }
1499
+
1500
+ /* Expression Syntax Highlighting */
1501
+ .expr-operator {
1502
+ color: #cf222e;
1503
+ font-weight: 600;
1504
+ }
1505
+
1506
+ .expr-keyword {
1507
+ color: #8250df;
1508
+ font-weight: 600;
1509
+ }
1510
+
1511
+ .expr-comparison {
1512
+ color: #0550ae;
1513
+ font-weight: 500;
1514
+ }
1515
+
1516
+ .expr-arithmetic {
1517
+ color: #0550ae;
1518
+ }
1519
+
1520
+ .expr-unary {
1521
+ color: #cf222e;
1522
+ font-weight: 500;
1523
+ }
1524
+
1525
+ .expr-function {
1526
+ color: #8250df;
1527
+ }
1528
+
1529
+ .expr-string {
1530
+ color: #0a3069;
1531
+ }
1532
+
1533
+ .expr-number {
1534
+ color: #0550ae;
1535
+ }
1536
+
1537
+ .expr-boolean {
1538
+ color: #cf222e;
1539
+ }
1540
+
1541
+ .expr-null {
1542
+ color: #6e7781;
1543
+ font-style: italic;
1544
+ }
1545
+
1546
+ .expr-variable {
1547
+ color: #953800;
1548
+ }
1549
+
1550
+ .expr-bracket {
1551
+ color: #24292f;
1552
+ }
1553
+
1554
+ .expr-punctuation {
1555
+ color: #24292f;
1556
+ }
1557
+
1558
+ /* Dark mode expression syntax */
1559
+ [data-theme="dark"] .expr-operator {
1560
+ color: #ff7b72;
1561
+ }
1562
+
1563
+ [data-theme="dark"] .expr-keyword {
1564
+ color: #d2a8ff;
1565
+ }
1566
+
1567
+ [data-theme="dark"] .expr-comparison {
1568
+ color: #79c0ff;
1569
+ }
1570
+
1571
+ [data-theme="dark"] .expr-arithmetic {
1572
+ color: #79c0ff;
1573
+ }
1574
+
1575
+ [data-theme="dark"] .expr-unary {
1576
+ color: #ff7b72;
1577
+ }
1578
+
1579
+ [data-theme="dark"] .expr-function {
1580
+ color: #d2a8ff;
1581
+ }
1582
+
1583
+ [data-theme="dark"] .expr-string {
1584
+ color: #a5d6ff;
1585
+ }
1586
+
1587
+ [data-theme="dark"] .expr-number {
1588
+ color: #79c0ff;
1589
+ }
1590
+
1591
+ [data-theme="dark"] .expr-boolean {
1592
+ color: #ff7b72;
1593
+ }
1594
+
1595
+ [data-theme="dark"] .expr-null {
1596
+ color: #8b949e;
1597
+ }
1598
+
1599
+ [data-theme="dark"] .expr-variable {
1600
+ color: #ffa657;
1601
+ }
1602
+
1603
+ [data-theme="dark"] .expr-bracket {
1604
+ color: #c9d1d9;
1605
+ }
1606
+
1607
+ [data-theme="dark"] .expr-punctuation {
1608
+ color: #c9d1d9;
1609
+ }
1610
+
1611
+ /* ============================================
1612
+ Debugger State Styles
1613
+ ============================================ */
1614
+
1615
+ /* CSS Variables for debug colors */
1616
+ :root {
1617
+ --debug-current-color: #F59E0B;
1618
+ --debug-current-glow: rgba(245, 158, 11, 0.4);
1619
+ --debug-executed-color: #10B981;
1620
+ --debug-executed-border: rgba(16, 185, 129, 0.6);
1621
+ --debug-pending-opacity: 0.5;
1622
+ }
1623
+
1624
+ [data-theme="dark"] {
1625
+ --debug-current-glow: rgba(245, 158, 11, 0.5);
1626
+ --debug-executed-border: rgba(16, 185, 129, 0.8);
1627
+ }
1628
+
1629
+ /* Current step - pulsing highlight */
1630
+ .logic-node.debug-current,
1631
+ .operator-node.debug-current,
1632
+ .variable-node.debug-current,
1633
+ .literal-node.debug-current,
1634
+ .vertical-cell-node.debug-current,
1635
+ .decision-node.debug-current {
1636
+ box-shadow: 0 0 0 3px var(--debug-current-color),
1637
+ 0 0 20px var(--debug-current-glow) !important;
1638
+ animation: debug-pulse 1.5s ease-in-out infinite;
1639
+ }
1640
+
1641
+ /* Ensure debug-current node wrapper is above all other nodes */
1642
+ .react-flow__node:has(.debug-current) {
1643
+ z-index: 1000 !important;
1644
+ }
1645
+
1646
+ @keyframes debug-pulse {
1647
+ 0%, 100% {
1648
+ box-shadow: 0 0 0 3px var(--debug-current-color),
1649
+ 0 0 15px var(--debug-current-glow);
1650
+ }
1651
+ 50% {
1652
+ box-shadow: 0 0 0 5px var(--debug-current-color),
1653
+ 0 0 25px var(--debug-current-glow);
1654
+ }
1655
+ }
1656
+
1657
+ /* Executed nodes - path trail with green border */
1658
+ .logic-node.debug-executed,
1659
+ .operator-node.debug-executed,
1660
+ .variable-node.debug-executed,
1661
+ .literal-node.debug-executed,
1662
+ .vertical-cell-node.debug-executed,
1663
+ .decision-node.debug-executed {
1664
+ border-color: var(--debug-executed-color) !important;
1665
+ box-shadow: 0 0 0 1px var(--debug-executed-border);
1666
+ }
1667
+
1668
+ /* Pending nodes - slightly faded */
1669
+ .logic-node.debug-pending,
1670
+ .operator-node.debug-pending,
1671
+ .variable-node.debug-pending,
1672
+ .literal-node.debug-pending,
1673
+ .vertical-cell-node.debug-pending,
1674
+ .decision-node.debug-pending {
1675
+ opacity: var(--debug-pending-opacity);
1676
+ }
1677
+
1678
+ /* On path - ancestors of current node (but not current itself) */
1679
+ .logic-node.debug-on-path,
1680
+ .operator-node.debug-on-path,
1681
+ .variable-node.debug-on-path,
1682
+ .literal-node.debug-on-path,
1683
+ .vertical-cell-node.debug-on-path,
1684
+ .decision-node.debug-on-path {
1685
+ border-color: var(--debug-current-color) !important;
1686
+ box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.3);
1687
+ }
1688
+
1689
+ /* ============================================
1690
+ Debug Info Bubble Styles
1691
+ ============================================ */
1692
+
1693
+ .debug-info-bubble {
1694
+ position: absolute;
1695
+ background: var(--debug-popover-bg);
1696
+ color: var(--debug-popover-text);
1697
+ border-radius: 8px;
1698
+ padding: 10px 12px;
1699
+ font-size: 11px;
1700
+ z-index: 9999;
1701
+ box-shadow: 0 4px 16px var(--debug-popover-shadow);
1702
+ min-width: 180px;
1703
+ max-width: 280px;
1704
+ pointer-events: auto;
1705
+ }
1706
+
1707
+ .debug-info-bubble.debug-info-top {
1708
+ bottom: 100%;
1709
+ left: 50%;
1710
+ transform: translateX(-50%);
1711
+ margin-bottom: 8px;
1712
+ }
1713
+
1714
+ .debug-info-bubble.debug-info-right {
1715
+ left: 100%;
1716
+ top: 50%;
1717
+ transform: translateY(-50%);
1718
+ margin-left: 8px;
1719
+ }
1720
+
1721
+ .debug-info-bubble.debug-info-bottom {
1722
+ top: 100%;
1723
+ left: 50%;
1724
+ transform: translateX(-50%);
1725
+ margin-top: 8px;
1726
+ }
1727
+
1728
+ /* Arrow indicator - pointer-events: none to not block interactions */
1729
+ .debug-info-bubble.debug-info-top::after {
1730
+ content: '';
1731
+ position: absolute;
1732
+ top: 100%;
1733
+ left: 50%;
1734
+ transform: translateX(-50%);
1735
+ border: 6px solid transparent;
1736
+ border-top-color: var(--debug-popover-bg);
1737
+ pointer-events: none;
1738
+ }
1739
+
1740
+ .debug-info-bubble.debug-info-right::after {
1741
+ content: '';
1742
+ position: absolute;
1743
+ right: 100%;
1744
+ top: 50%;
1745
+ transform: translateY(-50%);
1746
+ border: 6px solid transparent;
1747
+ border-right-color: var(--debug-popover-bg);
1748
+ pointer-events: none;
1749
+ }
1750
+
1751
+ .debug-info-bubble.debug-info-bottom::after {
1752
+ content: '';
1753
+ position: absolute;
1754
+ bottom: 100%;
1755
+ left: 50%;
1756
+ transform: translateX(-50%);
1757
+ border: 6px solid transparent;
1758
+ border-bottom-color: var(--debug-popover-bg);
1759
+ pointer-events: none;
1760
+ }
1761
+
1762
+ .debug-info-bubble.error {
1763
+ background: var(--debug-popover-error-bg);
1764
+ }
1765
+
1766
+ .debug-info-bubble.error::after {
1767
+ border-top-color: var(--debug-popover-error-bg);
1768
+ }
1769
+
1770
+ .debug-info-iteration {
1771
+ font-size: 10px;
1772
+ font-weight: 600;
1773
+ color: var(--debug-iteration-color);
1774
+ margin-bottom: 8px;
1775
+ padding-bottom: 6px;
1776
+ border-bottom: 1px solid var(--debug-border-color);
1777
+ }
1778
+
1779
+ .debug-info-section {
1780
+ margin-bottom: 8px;
1781
+ }
1782
+
1783
+ .debug-info-section:last-child {
1784
+ margin-bottom: 0;
1785
+ }
1786
+
1787
+ .debug-info-label {
1788
+ display: block;
1789
+ font-size: 10px;
1790
+ font-weight: 600;
1791
+ color: var(--debug-label-color);
1792
+ text-transform: uppercase;
1793
+ letter-spacing: 0.5px;
1794
+ margin-bottom: 4px;
1795
+ }
1796
+
1797
+ .debug-info-value {
1798
+ margin: 0;
1799
+ padding: 4px 6px;
1800
+ background: var(--debug-popover-value-bg);
1801
+ border-radius: 4px;
1802
+ font-family: 'SF Mono', 'Consolas', monospace;
1803
+ font-size: 10px;
1804
+ white-space: pre-wrap;
1805
+ word-break: break-word;
1806
+ max-height: 100px;
1807
+ overflow: auto;
1808
+ }
1809
+
1810
+ /* Custom scrollbar styling */
1811
+ .debug-info-value::-webkit-scrollbar {
1812
+ width: 6px;
1813
+ height: 6px;
1814
+ }
1815
+
1816
+ .debug-info-value::-webkit-scrollbar-track {
1817
+ background: var(--debug-popover-value-bg);
1818
+ border-radius: 3px;
1819
+ }
1820
+
1821
+ .debug-info-value::-webkit-scrollbar-thumb {
1822
+ background: var(--debug-label-color);
1823
+ border-radius: 3px;
1824
+ opacity: 0.5;
1825
+ }
1826
+
1827
+ .debug-info-value::-webkit-scrollbar-thumb:hover {
1828
+ opacity: 0.7;
1829
+ }
1830
+
1831
+ .debug-info-error {
1832
+ color: var(--debug-value-false);
1833
+ }
1834
+
1835
+ .debug-info-result {
1836
+ display: flex;
1837
+ flex-direction: column;
1838
+ gap: 4px;
1839
+ }
1840
+
1841
+ /* Color-coded value classes (no type badges) */
1842
+ .debug-value-boolean-true {
1843
+ color: var(--debug-value-true);
1844
+ }
1845
+
1846
+ .debug-value-boolean-false {
1847
+ color: var(--debug-value-false);
1848
+ }
1849
+
1850
+ .debug-value-number {
1851
+ color: var(--debug-value-number);
1852
+ }
1853
+
1854
+ .debug-value-string {
1855
+ color: var(--debug-value-string);
1856
+ }
1857
+
1858
+ .debug-value-array,
1859
+ .debug-value-object {
1860
+ color: var(--debug-value-array);
1861
+ }
1862
+
1863
+ .debug-value-null,
1864
+ .debug-value-undefined {
1865
+ color: var(--debug-value-null);
1866
+ }
1867
+
1868
+ .debug-info-simple-value {
1869
+ font-family: 'SF Mono', 'Consolas', monospace;
1870
+ font-size: 12px;
1871
+ font-weight: 500;
1872
+ }
1873
+
1874
+ /* JSON Syntax Highlighting */
1875
+ .json-syntax-key {
1876
+ color: var(--syntax-key);
1877
+ }
1878
+
1879
+ .json-syntax-string {
1880
+ color: var(--debug-value-string);
1881
+ }
1882
+
1883
+ .json-syntax-number {
1884
+ color: var(--debug-value-number);
1885
+ }
1886
+
1887
+ .json-syntax-boolean-true {
1888
+ color: var(--debug-value-true);
1889
+ }
1890
+
1891
+ .json-syntax-boolean-false {
1892
+ color: var(--debug-value-false);
1893
+ }
1894
+
1895
+ .json-syntax-null {
1896
+ color: var(--debug-value-null);
1897
+ }
1898
+
1899
+ .json-syntax-punctuation {
1900
+ color: var(--syntax-punctuation);
1901
+ }
1902
+ .logic-editor {
1903
+ width: 100%;
1904
+ height: 100%;
1905
+ position: relative;
1906
+ background: var(--bg-tertiary);
1907
+ border-radius: 8px;
1908
+ overflow: hidden;
1909
+ }
1910
+
1911
+ .logic-editor .react-flow {
1912
+ width: 100%;
1913
+ height: 100%;
1914
+ }
1915
+
1916
+ .logic-editor-empty {
1917
+ position: absolute;
1918
+ top: 50%;
1919
+ left: 50%;
1920
+ transform: translate(-50%, -50%);
1921
+ text-align: center;
1922
+ color: var(--text-tertiary);
1923
+ pointer-events: none;
1924
+ }
1925
+
1926
+ .logic-editor-empty p {
1927
+ margin: 0;
1928
+ font-size: 16px;
1929
+ }
1930
+
1931
+ .logic-editor-empty-hint {
1932
+ margin-top: 8px !important;
1933
+ font-size: 13px !important;
1934
+ color: var(--text-muted);
1935
+ }
1936
+
1937
+ /* ReactFlow overrides */
1938
+ .logic-editor .react-flow__controls {
1939
+ box-shadow: 0 2px 8px var(--node-shadow);
1940
+ border-radius: 8px;
1941
+ overflow: hidden;
1942
+ }
1943
+
1944
+ .logic-editor .react-flow__controls-button {
1945
+ background: var(--bg-secondary);
1946
+ border: none;
1947
+ border-bottom: 1px solid var(--border-light);
1948
+ color: var(--text-secondary);
1949
+ fill: var(--text-secondary);
1950
+ }
1951
+
1952
+ .logic-editor .react-flow__controls-button:hover {
1953
+ background: var(--bg-hover);
1954
+ }
1955
+
1956
+ .logic-editor .react-flow__controls-button:last-child {
1957
+ border-bottom: none;
1958
+ }
1959
+
1960
+ .logic-editor .react-flow__controls-button svg {
1961
+ fill: var(--text-secondary);
1962
+ }
1963
+
1964
+ .logic-editor .react-flow__edge-path {
1965
+ stroke: #b1b1b7;
1966
+ stroke-width: 2;
1967
+ }
1968
+
1969
+ .logic-editor .react-flow__edge.selected .react-flow__edge-path {
1970
+ stroke: var(--accent-blue);
1971
+ stroke-width: 3;
1972
+ }
1973
+
1974
+ /* Dark mode edge colors */
1975
+ [data-theme="dark"] .logic-editor .react-flow__edge-path {
1976
+ stroke: #6b7280;
1977
+ }
1978
+
1979
+ /* Background pattern for dark mode */
1980
+ [data-theme="dark"] .logic-editor .react-flow__background {
1981
+ background: var(--bg-tertiary);
1982
+ }
1983
+
1984
+ /* Attribution removal - only if you have a paid license */
1985
+ .logic-editor .react-flow__attribution {
1986
+ display: none;
1987
+ }