@goplasmatic/dataflow-ui 2.1.4 → 2.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4945 +1,3 @@
1
- /*
2
- * DataLogic UI - Scoped Theme Variables
3
- *
4
- * All variables are scoped to .logic-editor to avoid leaking into consumer apps.
5
- * The library component applies this class to its root element.
6
- */
7
-
8
- .logic-editor {
9
- /* Light theme (default) */
10
- --bg-primary: #f5f5f5;
11
- --bg-secondary: #ffffff;
12
- --bg-tertiary: #fafafa;
13
- --bg-hover: #f0f0f0;
14
- --bg-active: #e8e8e8;
15
-
16
- --text-primary: #333333;
17
- --text-secondary: #555555;
18
- --text-tertiary: #666666;
19
- --text-muted: #999999;
20
- --text-placeholder: #aaaaaa;
21
-
22
- --border-primary: #e0e0e0;
23
- --border-secondary: #dddddd;
24
- --border-light: #eeeeee;
25
-
26
- --accent-blue: #3b82f6;
27
- --accent-blue-light: #dbeafe;
28
-
29
- --accent-amber: #f59e0b;
30
- --accent-amber-light: #fef3c7;
31
-
32
- /* Status colors */
33
- --success-bg: #d1fae5;
34
- --success-text: #059669;
35
- --success-border: #a7f3d0;
36
-
37
- --error-bg: #fee2e2;
38
- --error-bg-light: #fef2f2;
39
- --error-bg-lighter: #fff5f5;
40
- --error-text: #dc2626;
41
- --error-border: #fecaca;
42
-
43
- --warning-bg: #fef3c7;
44
- --warning-text: #d97706;
45
- --warning-border: #fde68a;
46
-
47
- /* Syntax highlighting */
48
- --syntax-key: #0550ae;
49
- --syntax-string: #0a3069;
50
- --syntax-number: #0550ae;
51
- --syntax-boolean: #cf222e;
52
- --syntax-null: #6e7781;
53
- --syntax-bracket: #24292f;
54
- --syntax-punctuation: #24292f;
55
-
56
- /* Node colors - these stay consistent */
57
- --node-bg: #ffffff;
58
- --node-shadow: rgba(0, 0, 0, 0.1);
59
- --node-shadow-hover: rgba(0, 0, 0, 0.15);
60
-
61
- /* Code background */
62
- --code-bg: #f8f9fa;
63
-
64
- /* Debug popover colors */
65
- --debug-popover-bg: #ffffff;
66
- --debug-popover-text: #1f2937;
67
- --debug-popover-error-bg: #fef2f2;
68
- --debug-popover-shadow: rgba(0, 0, 0, 0.15);
69
- --debug-popover-value-bg: rgba(0, 0, 0, 0.05);
70
- --debug-iteration-color: #b45309;
71
- --debug-label-color: #6b7280;
72
- --debug-border-color: rgba(0, 0, 0, 0.1);
73
-
74
- /* Debug value type colors */
75
- --debug-value-true: #059669;
76
- --debug-value-false: #dc2626;
77
- --debug-value-number: #2563eb;
78
- --debug-value-string: #059669;
79
- --debug-value-array: #7c3aed;
80
- --debug-value-null: #6b7280;
81
-
82
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
83
- line-height: 1.5;
84
- font-weight: 400;
85
- color: var(--text-primary);
86
- font-synthesis: none;
87
- text-rendering: optimizeLegibility;
88
- -webkit-font-smoothing: antialiased;
89
- -moz-osx-font-smoothing: grayscale;
90
- }
91
-
92
- .logic-editor *,
93
- .logic-editor *::before,
94
- .logic-editor *::after {
95
- box-sizing: border-box;
96
- }
97
-
98
- .logic-editor button {
99
- font-family: inherit;
100
- }
101
-
102
- .logic-editor[data-theme="dark"] {
103
- --bg-primary: #1a1a1a;
104
- --bg-secondary: #242424;
105
- --bg-tertiary: #2a2a2a;
106
- --bg-hover: #333333;
107
- --bg-active: #404040;
108
-
109
- --text-primary: #e5e5e5;
110
- --text-secondary: #cccccc;
111
- --text-tertiary: #b3b3b3;
112
- --text-muted: #888888;
113
- --text-placeholder: #666666;
114
-
115
- --border-primary: #404040;
116
- --border-secondary: #4a4a4a;
117
- --border-light: #333333;
118
-
119
- --accent-blue: #60a5fa;
120
- --accent-blue-light: #1e3a5f;
121
-
122
- --accent-amber: #fbbf24;
123
- --accent-amber-light: #451a03;
124
-
125
- /* Status colors - darker variants */
126
- --success-bg: #064e3b;
127
- --success-text: #6ee7b7;
128
- --success-border: #065f46;
129
-
130
- --error-bg: #450a0a;
131
- --error-bg-light: #3f0a0a;
132
- --error-bg-lighter: #350a0a;
133
- --error-text: #fca5a5;
134
- --error-border: #7f1d1d;
135
-
136
- --warning-bg: #451a03;
137
- --warning-text: #fcd34d;
138
- --warning-border: #78350f;
139
-
140
- /* Syntax highlighting - dark theme */
141
- --syntax-key: #79c0ff;
142
- --syntax-string: #a5d6ff;
143
- --syntax-number: #79c0ff;
144
- --syntax-boolean: #ff7b72;
145
- --syntax-null: #8b949e;
146
- --syntax-bracket: #c9d1d9;
147
- --syntax-punctuation: #c9d1d9;
148
-
149
- /* Node colors */
150
- --node-bg: #2d2d2d;
151
- --node-shadow: rgba(0, 0, 0, 0.3);
152
- --node-shadow-hover: rgba(0, 0, 0, 0.4);
153
-
154
- /* Code background */
155
- --code-bg: #1f1f1f;
156
-
157
- /* Debug popover colors */
158
- --debug-popover-bg: #1f2937;
159
- --debug-popover-text: #f3f4f6;
160
- --debug-popover-error-bg: #7f1d1d;
161
- --debug-popover-shadow: rgba(0, 0, 0, 0.4);
162
- --debug-popover-value-bg: rgba(0, 0, 0, 0.2);
163
- --debug-iteration-color: #fbbf24;
164
- --debug-label-color: #9ca3af;
165
- --debug-border-color: rgba(255, 255, 255, 0.1);
166
-
167
- /* Debug value type colors */
168
- --debug-value-true: #86efac;
169
- --debug-value-false: #fca5a5;
170
- --debug-value-number: #93c5fd;
171
- --debug-value-string: #86efac;
172
- --debug-value-array: #d8b4fe;
173
- --debug-value-null: #9ca3af;
174
- }
175
- /*
176
- * ReactFlow base styles - bundled locally so they're included in the library's styles.css
177
- * Source: @xyflow/react/dist/style.css
178
- * This avoids requiring consumers to separately import ReactFlow CSS.
179
- */
180
-
181
- /* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */
182
- .react-flow {
183
- direction: ltr;
184
-
185
- --xy-edge-stroke-default: #b1b1b7;
186
- --xy-edge-stroke-width-default: 1;
187
- --xy-edge-stroke-selected-default: #555;
188
-
189
- --xy-connectionline-stroke-default: #b1b1b7;
190
- --xy-connectionline-stroke-width-default: 1;
191
-
192
- --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);
193
-
194
- --xy-minimap-background-color-default: #fff;
195
- --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);
196
- --xy-minimap-mask-stroke-color-default: transparent;
197
- --xy-minimap-mask-stroke-width-default: 1;
198
- --xy-minimap-node-background-color-default: #e2e2e2;
199
- --xy-minimap-node-stroke-color-default: transparent;
200
- --xy-minimap-node-stroke-width-default: 2;
201
-
202
- --xy-background-color-default: transparent;
203
- --xy-background-pattern-dots-color-default: #91919a;
204
- --xy-background-pattern-lines-color-default: #eee;
205
- --xy-background-pattern-cross-color-default: #e2e2e2;
206
- background-color: var(--xy-background-color, var(--xy-background-color-default));
207
- --xy-node-color-default: inherit;
208
- --xy-node-border-default: 1px solid #1a192b;
209
- --xy-node-background-color-default: #fff;
210
- --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
211
- --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
212
- --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;
213
- --xy-node-border-radius-default: 3px;
214
-
215
- --xy-handle-background-color-default: #1a192b;
216
- --xy-handle-border-color-default: #fff;
217
-
218
- --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);
219
- --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);
220
-
221
- --xy-controls-button-background-color-default: #fefefe;
222
- --xy-controls-button-background-color-hover-default: #f4f4f4;
223
- --xy-controls-button-color-default: inherit;
224
- --xy-controls-button-color-hover-default: inherit;
225
- --xy-controls-button-border-color-default: #eee;
226
- --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
227
-
228
- --xy-edge-label-background-color-default: #ffffff;
229
- --xy-edge-label-color-default: inherit;
230
- --xy-resize-background-color-default: #3367d9;
231
- }
232
- .react-flow.dark {
233
- --xy-edge-stroke-default: #3e3e3e;
234
- --xy-edge-stroke-width-default: 1;
235
- --xy-edge-stroke-selected-default: #727272;
236
-
237
- --xy-connectionline-stroke-default: #b1b1b7;
238
- --xy-connectionline-stroke-width-default: 1;
239
-
240
- --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);
241
-
242
- --xy-minimap-background-color-default: #141414;
243
- --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);
244
- --xy-minimap-mask-stroke-color-default: transparent;
245
- --xy-minimap-mask-stroke-width-default: 1;
246
- --xy-minimap-node-background-color-default: #2b2b2b;
247
- --xy-minimap-node-stroke-color-default: transparent;
248
- --xy-minimap-node-stroke-width-default: 2;
249
-
250
- --xy-background-color-default: #141414;
251
- --xy-background-pattern-dots-color-default: #777;
252
- --xy-background-pattern-lines-color-default: #777;
253
- --xy-background-pattern-cross-color-default: #777;
254
- --xy-node-color-default: #f8f8f8;
255
- --xy-node-border-default: 1px solid #3c3c3c;
256
- --xy-node-background-color-default: #1e1e1e;
257
- --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
258
- --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);
259
- --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;
260
-
261
- --xy-handle-background-color-default: #bebebe;
262
- --xy-handle-border-color-default: #1e1e1e;
263
-
264
- --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);
265
- --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);
266
-
267
- --xy-controls-button-background-color-default: #2b2b2b;
268
- --xy-controls-button-background-color-hover-default: #3e3e3e;
269
- --xy-controls-button-color-default: #f8f8f8;
270
- --xy-controls-button-color-hover-default: #fff;
271
- --xy-controls-button-border-color-default: #5b5b5b;
272
- --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
273
-
274
- --xy-edge-label-background-color-default: #141414;
275
- --xy-edge-label-color-default: #f8f8f8;
276
- }
277
- .react-flow__background {
278
- background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));
279
- pointer-events: none;
280
- z-index: -1;
281
- }
282
- .react-flow__container {
283
- position: absolute;
284
- width: 100%;
285
- height: 100%;
286
- top: 0;
287
- left: 0;
288
- }
289
- .react-flow__pane {
290
- z-index: 1;
291
- }
292
- .react-flow__pane.draggable {
293
- cursor: grab;
294
- }
295
- .react-flow__pane.dragging {
296
- cursor: grabbing;
297
- }
298
- .react-flow__pane.selection {
299
- cursor: pointer;
300
- }
301
- .react-flow__viewport {
302
- transform-origin: 0 0;
303
- z-index: 2;
304
- pointer-events: none;
305
- }
306
- .react-flow__renderer {
307
- z-index: 4;
308
- }
309
- .react-flow__selection {
310
- z-index: 6;
311
- }
312
- .react-flow__nodesselection-rect:focus,
313
- .react-flow__nodesselection-rect:focus-visible {
314
- outline: none;
315
- }
316
- .react-flow__edge-path {
317
- stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
318
- stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));
319
- fill: none;
320
- }
321
- .react-flow__connection-path {
322
- stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));
323
- stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));
324
- fill: none;
325
- }
326
- .react-flow .react-flow__edges {
327
- position: absolute;
328
- }
329
- .react-flow .react-flow__edges svg {
330
- overflow: visible;
331
- position: absolute;
332
- pointer-events: none;
333
- }
334
- .react-flow__edge {
335
- pointer-events: visibleStroke;
336
- }
337
- .react-flow__edge.selectable {
338
- cursor: pointer;
339
- }
340
- .react-flow__edge.animated path {
341
- stroke-dasharray: 5;
342
- animation: dashdraw 0.5s linear infinite;
343
- }
344
- .react-flow__edge.animated path.react-flow__edge-interaction {
345
- stroke-dasharray: none;
346
- animation: none;
347
- }
348
- .react-flow__edge.inactive {
349
- pointer-events: none;
350
- }
351
- .react-flow__edge.selected,
352
- .react-flow__edge:focus,
353
- .react-flow__edge:focus-visible {
354
- outline: none;
355
- }
356
- .react-flow__edge.selected .react-flow__edge-path,
357
- .react-flow__edge.selectable:focus .react-flow__edge-path,
358
- .react-flow__edge.selectable:focus-visible .react-flow__edge-path {
359
- stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));
360
- }
361
- .react-flow__edge-textwrapper {
362
- pointer-events: all;
363
- }
364
- .react-flow__edge .react-flow__edge-text {
365
- pointer-events: none;
366
- -webkit-user-select: none;
367
- -moz-user-select: none;
368
- user-select: none;
369
- }
370
- /* Arrowhead marker styles - use CSS custom properties as default */
371
- .react-flow__arrowhead polyline {
372
- stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
373
- }
374
- .react-flow__arrowhead polyline.arrowclosed {
375
- fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
376
- }
377
- .react-flow__connection {
378
- pointer-events: none;
379
- }
380
- .react-flow__connection .animated {
381
- stroke-dasharray: 5;
382
- animation: dashdraw 0.5s linear infinite;
383
- }
384
- svg.react-flow__connectionline {
385
- z-index: 1001;
386
- overflow: visible;
387
- position: absolute;
388
- }
389
- .react-flow__nodes {
390
- pointer-events: none;
391
- transform-origin: 0 0;
392
- }
393
- .react-flow__node {
394
- position: absolute;
395
- -webkit-user-select: none;
396
- -moz-user-select: none;
397
- user-select: none;
398
- pointer-events: all;
399
- transform-origin: 0 0;
400
- box-sizing: border-box;
401
- cursor: default;
402
- }
403
- .react-flow__node.selectable {
404
- cursor: pointer;
405
- }
406
- .react-flow__node.draggable {
407
- cursor: grab;
408
- pointer-events: all;
409
- }
410
- .react-flow__node.draggable.dragging {
411
- cursor: grabbing;
412
- }
413
- .react-flow__nodesselection {
414
- z-index: 3;
415
- transform-origin: left top;
416
- pointer-events: none;
417
- }
418
- .react-flow__nodesselection-rect {
419
- position: absolute;
420
- pointer-events: all;
421
- cursor: grab;
422
- }
423
- .react-flow__handle {
424
- position: absolute;
425
- pointer-events: none;
426
- min-width: 5px;
427
- min-height: 5px;
428
- width: 6px;
429
- height: 6px;
430
- background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));
431
- border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));
432
- border-radius: 100%;
433
- }
434
- .react-flow__handle.connectingfrom {
435
- pointer-events: all;
436
- }
437
- .react-flow__handle.connectionindicator {
438
- pointer-events: all;
439
- cursor: crosshair;
440
- }
441
- .react-flow__handle-bottom {
442
- top: auto;
443
- left: 50%;
444
- bottom: 0;
445
- transform: translate(-50%, 50%);
446
- }
447
- .react-flow__handle-top {
448
- top: 0;
449
- left: 50%;
450
- transform: translate(-50%, -50%);
451
- }
452
- .react-flow__handle-left {
453
- top: 50%;
454
- left: 0;
455
- transform: translate(-50%, -50%);
456
- }
457
- .react-flow__handle-right {
458
- top: 50%;
459
- right: 0;
460
- transform: translate(50%, -50%);
461
- }
462
- .react-flow__edgeupdater {
463
- cursor: move;
464
- pointer-events: all;
465
- }
466
- .react-flow__pane.selection .react-flow__panel {
467
- pointer-events: none;
468
- }
469
- .react-flow__panel {
470
- position: absolute;
471
- z-index: 5;
472
- margin: 15px;
473
- }
474
- .react-flow__panel.top {
475
- top: 0;
476
- }
477
- .react-flow__panel.bottom {
478
- bottom: 0;
479
- }
480
- .react-flow__panel.top.center, .react-flow__panel.bottom.center {
481
- left: 50%;
482
- transform: translateX(-15px) translateX(-50%);
483
- }
484
- .react-flow__panel.left {
485
- left: 0;
486
- }
487
- .react-flow__panel.right {
488
- right: 0;
489
- }
490
- .react-flow__panel.left.center, .react-flow__panel.right.center {
491
- top: 50%;
492
- transform: translateY(-15px) translateY(-50%);
493
- }
494
- .react-flow__attribution {
495
- font-size: 10px;
496
- background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));
497
- padding: 2px 3px;
498
- margin: 0;
499
- }
500
- .react-flow__attribution a {
501
- text-decoration: none;
502
- color: #999;
503
- }
504
- @keyframes dashdraw {
505
- from {
506
- stroke-dashoffset: 10;
507
- }
508
- }
509
- .react-flow__edgelabel-renderer {
510
- position: absolute;
511
- width: 100%;
512
- height: 100%;
513
- pointer-events: none;
514
- -webkit-user-select: none;
515
- -moz-user-select: none;
516
- user-select: none;
517
- left: 0;
518
- top: 0;
519
- }
520
- .react-flow__viewport-portal {
521
- position: absolute;
522
- width: 100%;
523
- height: 100%;
524
- left: 0;
525
- top: 0;
526
- -webkit-user-select: none;
527
- -moz-user-select: none;
528
- user-select: none;
529
- }
530
- .react-flow__minimap {
531
- background: var(
532
- --xy-minimap-background-color-props,
533
- var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))
534
- );
535
- }
536
- .react-flow__minimap-svg {
537
- display: block;
538
- }
539
- .react-flow__minimap-mask {
540
- fill: var(
541
- --xy-minimap-mask-background-color-props,
542
- var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))
543
- );
544
- stroke: var(
545
- --xy-minimap-mask-stroke-color-props,
546
- var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))
547
- );
548
- stroke-width: var(
549
- --xy-minimap-mask-stroke-width-props,
550
- var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))
551
- );
552
- }
553
- .react-flow__minimap-node {
554
- fill: var(
555
- --xy-minimap-node-background-color-props,
556
- var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))
557
- );
558
- stroke: var(
559
- --xy-minimap-node-stroke-color-props,
560
- var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))
561
- );
562
- stroke-width: var(
563
- --xy-minimap-node-stroke-width-props,
564
- var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))
565
- );
566
- }
567
- .react-flow__background-pattern.dots {
568
- fill: var(
569
- --xy-background-pattern-color-props,
570
- var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))
571
- );
572
- }
573
- .react-flow__background-pattern.lines {
574
- stroke: var(
575
- --xy-background-pattern-color-props,
576
- var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))
577
- );
578
- }
579
- .react-flow__background-pattern.cross {
580
- stroke: var(
581
- --xy-background-pattern-color-props,
582
- var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))
583
- );
584
- }
585
- .react-flow__controls {
586
- display: flex;
587
- flex-direction: column;
588
- box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));
589
- }
590
- .react-flow__controls.horizontal {
591
- flex-direction: row;
592
- }
593
- .react-flow__controls-button {
594
- display: flex;
595
- justify-content: center;
596
- align-items: center;
597
- height: 26px;
598
- width: 26px;
599
- padding: 4px;
600
- border: none;
601
- background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));
602
- border-bottom: 1px solid
603
- var(
604
- --xy-controls-button-border-color-props,
605
- var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))
606
- );
607
- color: var(
608
- --xy-controls-button-color-props,
609
- var(--xy-controls-button-color, var(--xy-controls-button-color-default))
610
- );
611
- cursor: pointer;
612
- -webkit-user-select: none;
613
- -moz-user-select: none;
614
- user-select: none;
615
- }
616
- .react-flow__controls-button svg {
617
- width: 100%;
618
- max-width: 12px;
619
- max-height: 12px;
620
- fill: currentColor;
621
- }
622
- .react-flow__edge.updating .react-flow__edge-path {
623
- stroke: #777;
624
- }
625
- .react-flow__edge-text {
626
- font-size: 10px;
627
- }
628
- .react-flow__node.selectable:focus,
629
- .react-flow__node.selectable:focus-visible {
630
- outline: none;
631
- }
632
- .react-flow__node-input,
633
- .react-flow__node-default,
634
- .react-flow__node-output,
635
- .react-flow__node-group {
636
- padding: 10px;
637
- border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));
638
- width: 150px;
639
- font-size: 12px;
640
- color: var(--xy-node-color, var(--xy-node-color-default));
641
- text-align: center;
642
- border: var(--xy-node-border, var(--xy-node-border-default));
643
- background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));
644
- }
645
- .react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {
646
- box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));
647
- }
648
- .react-flow__node-input.selectable.selected,
649
- .react-flow__node-input.selectable:focus,
650
- .react-flow__node-input.selectable:focus-visible,
651
- .react-flow__node-default.selectable.selected,
652
- .react-flow__node-default.selectable:focus,
653
- .react-flow__node-default.selectable:focus-visible,
654
- .react-flow__node-output.selectable.selected,
655
- .react-flow__node-output.selectable:focus,
656
- .react-flow__node-output.selectable:focus-visible,
657
- .react-flow__node-group.selectable.selected,
658
- .react-flow__node-group.selectable:focus,
659
- .react-flow__node-group.selectable:focus-visible {
660
- box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));
661
- }
662
- .react-flow__node-group {
663
- background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));
664
- }
665
- .react-flow__nodesselection-rect,
666
- .react-flow__selection {
667
- background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));
668
- border: var(--xy-selection-border, var(--xy-selection-border-default));
669
- }
670
- .react-flow__nodesselection-rect:focus,
671
- .react-flow__nodesselection-rect:focus-visible,
672
- .react-flow__selection:focus,
673
- .react-flow__selection:focus-visible {
674
- outline: none;
675
- }
676
- .react-flow__controls-button:hover {
677
- background: var(
678
- --xy-controls-button-background-color-hover-props,
679
- var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))
680
- );
681
- color: var(
682
- --xy-controls-button-color-hover-props,
683
- var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))
684
- );
685
- }
686
- .react-flow__controls-button:disabled {
687
- pointer-events: none;
688
- }
689
- .react-flow__controls-button:disabled svg {
690
- fill-opacity: 0.4;
691
- }
692
- .react-flow__controls-button:last-child {
693
- border-bottom: none;
694
- }
695
- .react-flow__controls.horizontal .react-flow__controls-button {
696
- border-bottom: none;
697
- border-right: 1px solid
698
- var(
699
- --xy-controls-button-border-color-props,
700
- var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))
701
- );
702
- }
703
- .react-flow__controls.horizontal .react-flow__controls-button:last-child {
704
- border-right: none;
705
- }
706
- .react-flow__resize-control {
707
- position: absolute;
708
- }
709
- .react-flow__resize-control.left,
710
- .react-flow__resize-control.right {
711
- cursor: ew-resize;
712
- }
713
- .react-flow__resize-control.top,
714
- .react-flow__resize-control.bottom {
715
- cursor: ns-resize;
716
- }
717
- .react-flow__resize-control.top.left,
718
- .react-flow__resize-control.bottom.right {
719
- cursor: nwse-resize;
720
- }
721
- .react-flow__resize-control.bottom.left,
722
- .react-flow__resize-control.top.right {
723
- cursor: nesw-resize;
724
- }
725
- /* handle styles */
726
- .react-flow__resize-control.handle {
727
- width: 5px;
728
- height: 5px;
729
- border: 1px solid #fff;
730
- border-radius: 1px;
731
- background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
732
- translate: -50% -50%;
733
- }
734
- .react-flow__resize-control.handle.left {
735
- left: 0;
736
- top: 50%;
737
- }
738
- .react-flow__resize-control.handle.right {
739
- left: 100%;
740
- top: 50%;
741
- }
742
- .react-flow__resize-control.handle.top {
743
- left: 50%;
744
- top: 0;
745
- }
746
- .react-flow__resize-control.handle.bottom {
747
- left: 50%;
748
- top: 100%;
749
- }
750
- .react-flow__resize-control.handle.top.left {
751
- left: 0;
752
- }
753
- .react-flow__resize-control.handle.bottom.left {
754
- left: 0;
755
- }
756
- .react-flow__resize-control.handle.top.right {
757
- left: 100%;
758
- }
759
- .react-flow__resize-control.handle.bottom.right {
760
- left: 100%;
761
- }
762
- /* line styles */
763
- .react-flow__resize-control.line {
764
- border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
765
- border-width: 0;
766
- border-style: solid;
767
- }
768
- .react-flow__resize-control.line.left,
769
- .react-flow__resize-control.line.right {
770
- width: 1px;
771
- transform: translate(-50%, 0);
772
- top: 0;
773
- height: 100%;
774
- }
775
- .react-flow__resize-control.line.left {
776
- left: 0;
777
- border-left-width: 1px;
778
- }
779
- .react-flow__resize-control.line.right {
780
- left: 100%;
781
- border-right-width: 1px;
782
- }
783
- .react-flow__resize-control.line.top,
784
- .react-flow__resize-control.line.bottom {
785
- height: 1px;
786
- transform: translate(0, -50%);
787
- left: 0;
788
- width: 100%;
789
- }
790
- .react-flow__resize-control.line.top {
791
- top: 0;
792
- border-top-width: 1px;
793
- }
794
- .react-flow__resize-control.line.bottom {
795
- border-bottom-width: 1px;
796
- top: 100%;
797
- }
798
- .react-flow__edge-textbg {
799
- fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));
800
- }
801
- .react-flow__edge-text {
802
- fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
803
- }
804
- /**
805
- * Edge Component Styles
806
- *
807
- * Styles for edge-related components.
808
- */
809
-
810
- /* ============================================================================
811
- Operator Picker Popup (may be used by other components)
812
- ============================================================================ */
813
-
814
- .dl-edge-operator-picker {
815
- position: absolute;
816
- top: 100%;
817
- left: 50%;
818
- transform: translateX(-50%);
819
- width: 260px;
820
- max-height: 360px;
821
- margin-top: 8px;
822
- background: var(--bg-primary, #ffffff);
823
- border: 1px solid var(--border-color, #e0e0e0);
824
- border-radius: 8px;
825
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
826
- overflow: hidden;
827
- z-index: 1000;
828
- }
829
-
830
- .logic-editor[data-theme="dark"] .dl-edge-operator-picker {
831
- background: var(--bg-secondary, #1e1e1e);
832
- border-color: var(--border-color, #3e3e3e);
833
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
834
- }
835
-
836
- /* Header */
837
- .dl-edge-picker-header {
838
- display: flex;
839
- align-items: center;
840
- justify-content: space-between;
841
- padding: 10px 12px;
842
- border-bottom: 1px solid var(--border-color, #e0e0e0);
843
- }
844
-
845
- .logic-editor[data-theme="dark"] .dl-edge-picker-header {
846
- border-color: var(--border-color, #3e3e3e);
847
- }
848
-
849
- .dl-edge-picker-title {
850
- font-size: 13px;
851
- font-weight: 600;
852
- color: var(--text-primary, #1a1a1a);
853
- }
854
-
855
- .logic-editor[data-theme="dark"] .dl-edge-picker-title {
856
- color: var(--text-primary, #e0e0e0);
857
- }
858
-
859
- .dl-edge-picker-close {
860
- display: flex;
861
- align-items: center;
862
- justify-content: center;
863
- width: 24px;
864
- height: 24px;
865
- padding: 0;
866
- background: transparent;
867
- border: none;
868
- border-radius: 4px;
869
- color: var(--text-tertiary, #888);
870
- cursor: pointer;
871
- transition: background 0.15s, color 0.15s;
872
- }
873
-
874
- .dl-edge-picker-close:hover {
875
- background: var(--bg-hover, #f0f0f0);
876
- color: var(--text-primary, #1a1a1a);
877
- }
878
-
879
- .logic-editor[data-theme="dark"] .dl-edge-picker-close:hover {
880
- background: var(--bg-hover, #3e3e3e);
881
- color: var(--text-primary, #e0e0e0);
882
- }
883
-
884
- /* Search */
885
- .dl-edge-picker-search {
886
- display: flex;
887
- align-items: center;
888
- gap: 8px;
889
- padding: 8px 12px;
890
- border-bottom: 1px solid var(--border-color, #e0e0e0);
891
- }
892
-
893
- .logic-editor[data-theme="dark"] .dl-edge-picker-search {
894
- border-color: var(--border-color, #3e3e3e);
895
- }
896
-
897
- .dl-edge-picker-search-icon {
898
- color: var(--text-tertiary, #888);
899
- flex-shrink: 0;
900
- }
901
-
902
- .dl-edge-picker-search-input {
903
- flex: 1;
904
- padding: 4px 0;
905
- font-size: 13px;
906
- color: var(--text-primary, #1a1a1a);
907
- background: transparent;
908
- border: none;
909
- outline: none;
910
- }
911
-
912
- .dl-edge-picker-search-input::placeholder {
913
- color: var(--text-tertiary, #888);
914
- }
915
-
916
- .logic-editor[data-theme="dark"] .dl-edge-picker-search-input {
917
- color: var(--text-primary, #e0e0e0);
918
- }
919
-
920
- /* Quick Add */
921
- .dl-edge-picker-quick {
922
- display: flex;
923
- gap: 8px;
924
- padding: 8px 12px;
925
- border-bottom: 1px solid var(--border-color, #e0e0e0);
926
- }
927
-
928
- .logic-editor[data-theme="dark"] .dl-edge-picker-quick {
929
- border-color: var(--border-color, #3e3e3e);
930
- }
931
-
932
- .dl-edge-picker-quick-btn {
933
- display: flex;
934
- align-items: center;
935
- gap: 6px;
936
- flex: 1;
937
- padding: 6px 10px;
938
- font-size: 12px;
939
- color: var(--text-secondary, #666);
940
- background: var(--bg-tertiary, #f8f9fa);
941
- border: 1px solid var(--border-color, #e0e0e0);
942
- border-radius: 4px;
943
- cursor: pointer;
944
- transition: background 0.15s, border-color 0.15s;
945
- }
946
-
947
- .dl-edge-picker-quick-btn:hover {
948
- background: var(--bg-hover, #f0f0f0);
949
- border-color: var(--color-primary, #2563eb);
950
- color: var(--color-primary, #2563eb);
951
- }
952
-
953
- .logic-editor[data-theme="dark"] .dl-edge-picker-quick-btn {
954
- background: var(--bg-tertiary, #252525);
955
- border-color: var(--border-color, #3e3e3e);
956
- color: var(--text-secondary, #aaa);
957
- }
958
-
959
- .logic-editor[data-theme="dark"] .dl-edge-picker-quick-btn:hover {
960
- background: var(--bg-hover, #3e3e3e);
961
- border-color: var(--color-primary, #60a5fa);
962
- color: var(--color-primary, #60a5fa);
963
- }
964
-
965
- /* Content */
966
- .dl-edge-picker-content {
967
- max-height: 220px;
968
- overflow-y: auto;
969
- }
970
-
971
- /* Categories */
972
- .dl-edge-picker-categories {
973
- display: flex;
974
- flex-direction: column;
975
- }
976
-
977
- .dl-edge-picker-category {
978
- display: flex;
979
- align-items: center;
980
- justify-content: space-between;
981
- padding: 10px 12px;
982
- font-size: 13px;
983
- color: var(--text-primary, #1a1a1a);
984
- background: transparent;
985
- border: none;
986
- border-left: 3px solid transparent;
987
- cursor: pointer;
988
- text-align: left;
989
- transition: background 0.15s;
990
- }
991
-
992
- .dl-edge-picker-category:hover {
993
- background: var(--bg-hover, #f0f0f0);
994
- }
995
-
996
- .logic-editor[data-theme="dark"] .dl-edge-picker-category {
997
- color: var(--text-primary, #e0e0e0);
998
- }
999
-
1000
- .logic-editor[data-theme="dark"] .dl-edge-picker-category:hover {
1001
- background: var(--bg-hover, #3e3e3e);
1002
- }
1003
-
1004
- .dl-edge-picker-category-name {
1005
- font-weight: 500;
1006
- }
1007
-
1008
- .dl-edge-picker-category-count {
1009
- font-size: 11px;
1010
- color: var(--text-tertiary, #888);
1011
- background: var(--bg-tertiary, #f0f0f0);
1012
- padding: 2px 6px;
1013
- border-radius: 10px;
1014
- }
1015
-
1016
- .logic-editor[data-theme="dark"] .dl-edge-picker-category-count {
1017
- background: var(--bg-tertiary, #2e2e2e);
1018
- }
1019
-
1020
- /* Operators */
1021
- .dl-edge-picker-operators {
1022
- display: flex;
1023
- flex-direction: column;
1024
- }
1025
-
1026
- .dl-edge-picker-back {
1027
- padding: 8px 12px;
1028
- font-size: 12px;
1029
- color: var(--color-primary, #2563eb);
1030
- background: transparent;
1031
- border: none;
1032
- border-bottom: 1px solid var(--border-color, #e0e0e0);
1033
- cursor: pointer;
1034
- text-align: left;
1035
- transition: background 0.15s;
1036
- }
1037
-
1038
- .dl-edge-picker-back:hover {
1039
- background: var(--bg-hover, #f0f0f0);
1040
- }
1041
-
1042
- .logic-editor[data-theme="dark"] .dl-edge-picker-back {
1043
- color: var(--color-primary, #60a5fa);
1044
- border-color: var(--border-color, #3e3e3e);
1045
- }
1046
-
1047
- .logic-editor[data-theme="dark"] .dl-edge-picker-back:hover {
1048
- background: var(--bg-hover, #3e3e3e);
1049
- }
1050
-
1051
- .dl-edge-picker-operator {
1052
- display: flex;
1053
- align-items: center;
1054
- gap: 10px;
1055
- padding: 8px 12px;
1056
- font-size: 13px;
1057
- color: var(--text-primary, #1a1a1a);
1058
- background: transparent;
1059
- border: none;
1060
- cursor: pointer;
1061
- text-align: left;
1062
- transition: background 0.15s;
1063
- }
1064
-
1065
- .dl-edge-picker-operator:hover {
1066
- background: var(--bg-hover, #f0f0f0);
1067
- }
1068
-
1069
- .logic-editor[data-theme="dark"] .dl-edge-picker-operator {
1070
- color: var(--text-primary, #e0e0e0);
1071
- }
1072
-
1073
- .logic-editor[data-theme="dark"] .dl-edge-picker-operator:hover {
1074
- background: var(--bg-hover, #3e3e3e);
1075
- }
1076
-
1077
- .dl-edge-picker-operator-name {
1078
- font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
1079
- font-weight: 600;
1080
- min-width: 50px;
1081
- }
1082
-
1083
- .dl-edge-picker-operator-label {
1084
- font-size: 12px;
1085
- color: var(--text-secondary, #666);
1086
- }
1087
-
1088
- .logic-editor[data-theme="dark"] .dl-edge-picker-operator-label {
1089
- color: var(--text-secondary, #aaa);
1090
- }
1091
-
1092
- .dl-edge-picker-empty {
1093
- padding: 20px 12px;
1094
- font-size: 13px;
1095
- color: var(--text-tertiary, #888);
1096
- text-align: center;
1097
- }
1098
- /* Inline variant (used in toolbar) */
1099
- .dl-debugger-controls--inline {
1100
- display: flex;
1101
- align-items: center;
1102
- flex-shrink: 0;
1103
- }
1104
-
1105
- .dl-debugger-controls--inline .dl-debugger-controls-inner {
1106
- display: flex;
1107
- align-items: center;
1108
- gap: 12px;
1109
- padding: 0;
1110
- background: none;
1111
- border: none;
1112
- border-radius: 0;
1113
- box-shadow: none;
1114
- backdrop-filter: none;
1115
- flex-shrink: 0;
1116
- }
1117
-
1118
- /* Floating overlay variant (legacy, used inside ReactFlow) */
1119
- .dl-debugger-controls--floating {
1120
- position: absolute;
1121
- top: 12px;
1122
- left: 50%;
1123
- transform: translateX(-50%);
1124
- z-index: 100;
1125
- pointer-events: auto;
1126
- }
1127
-
1128
- .dl-debugger-controls--floating .dl-debugger-controls-inner {
1129
- display: flex;
1130
- align-items: center;
1131
- gap: 16px;
1132
- padding: 8px 16px;
1133
- background: var(--bg-secondary);
1134
- border: 1px solid var(--border-primary);
1135
- border-radius: 8px;
1136
- box-shadow: 0 4px 12px var(--node-shadow);
1137
- backdrop-filter: blur(8px);
1138
- }
1139
-
1140
- /* Bug icon indicator */
1141
- .dl-debugger-icon {
1142
- display: flex;
1143
- align-items: center;
1144
- justify-content: center;
1145
- color: var(--accent-amber);
1146
- }
1147
-
1148
- /* Navigation buttons */
1149
- .dl-debugger-buttons {
1150
- display: flex;
1151
- align-items: center;
1152
- gap: 4px;
1153
- flex-shrink: 0;
1154
- }
1155
-
1156
- .dl-debugger-btn {
1157
- display: flex;
1158
- align-items: center;
1159
- justify-content: center;
1160
- width: 32px;
1161
- height: 32px;
1162
- padding: 0;
1163
- border: none;
1164
- border-radius: 6px;
1165
- background: var(--bg-hover);
1166
- color: var(--text-secondary);
1167
- cursor: pointer;
1168
- transition: background-color 0.15s, color 0.15s, transform 0.1s;
1169
- }
1170
-
1171
- .dl-debugger-btn:hover:not(:disabled) {
1172
- background: var(--bg-tertiary);
1173
- color: var(--text-primary);
1174
- }
1175
-
1176
- .dl-debugger-btn:active:not(:disabled) {
1177
- transform: scale(0.95);
1178
- }
1179
-
1180
- .dl-debugger-btn:disabled {
1181
- opacity: 0.4;
1182
- cursor: not-allowed;
1183
- }
1184
-
1185
- .dl-debugger-btn-primary {
1186
- width: 36px;
1187
- height: 36px;
1188
- background: var(--accent-blue);
1189
- color: white;
1190
- }
1191
-
1192
- .dl-debugger-btn-primary:hover:not(:disabled) {
1193
- background: var(--accent-blue-hover);
1194
- color: white;
1195
- }
1196
-
1197
- /* Step counter */
1198
- .dl-debugger-step-counter {
1199
- display: flex;
1200
- align-items: baseline;
1201
- gap: 2px;
1202
- font-family: 'SF Mono', 'Consolas', monospace;
1203
- font-size: 13px;
1204
- min-width: 60px;
1205
- justify-content: center;
1206
- flex-shrink: 0;
1207
- }
1208
-
1209
- .dl-step-current {
1210
- color: var(--text-primary);
1211
- font-weight: 600;
1212
- }
1213
-
1214
- .dl-step-separator {
1215
- color: var(--text-muted);
1216
- margin: 0 2px;
1217
- }
1218
-
1219
- .dl-step-total {
1220
- color: var(--text-secondary);
1221
- }
1222
-
1223
- /* Speed control */
1224
- .dl-debugger-speed {
1225
- display: flex;
1226
- align-items: center;
1227
- gap: 8px;
1228
- flex-shrink: 0;
1229
- }
1230
-
1231
- .dl-speed-label {
1232
- font-size: 12px;
1233
- color: var(--text-tertiary);
1234
- white-space: nowrap;
1235
- }
1236
-
1237
- .dl-speed-slider {
1238
- width: 80px;
1239
- height: 4px;
1240
- -webkit-appearance: none;
1241
- appearance: none;
1242
- background: var(--bg-tertiary);
1243
- border-radius: 2px;
1244
- cursor: pointer;
1245
- }
1246
-
1247
- .dl-speed-slider::-webkit-slider-thumb {
1248
- -webkit-appearance: none;
1249
- appearance: none;
1250
- width: 14px;
1251
- height: 14px;
1252
- background: var(--accent-blue);
1253
- border-radius: 50%;
1254
- cursor: pointer;
1255
- transition: transform 0.1s;
1256
- }
1257
-
1258
- .dl-speed-slider::-webkit-slider-thumb:hover {
1259
- transform: scale(1.15);
1260
- }
1261
-
1262
- .dl-speed-slider::-moz-range-thumb {
1263
- width: 14px;
1264
- height: 14px;
1265
- background: var(--accent-blue);
1266
- border-radius: 50%;
1267
- border: none;
1268
- cursor: pointer;
1269
- }
1270
-
1271
- /* Dark mode adjustments */
1272
- .logic-editor[data-theme="dark"] .dl-debugger-controls--floating .dl-debugger-controls-inner {
1273
- background: rgba(31, 41, 55, 0.95);
1274
- border-color: var(--border-light);
1275
- }
1276
-
1277
- .logic-editor[data-theme="dark"] .dl-debugger-btn {
1278
- background: rgba(55, 65, 81, 0.8);
1279
- }
1280
-
1281
- .logic-editor[data-theme="dark"] .dl-debugger-btn:hover:not(:disabled) {
1282
- background: rgba(75, 85, 99, 0.9);
1283
- }
1284
-
1285
- .logic-editor[data-theme="dark"] .dl-speed-slider {
1286
- background: rgba(75, 85, 99, 0.8);
1287
- }
1288
-
1289
- /* Mobile adjustments */
1290
- @media (max-width: 1024px) {
1291
- .dl-debugger-controls--inline .dl-debugger-controls-inner {
1292
- gap: 8px;
1293
- }
1294
-
1295
- .dl-debugger-btn {
1296
- width: 36px;
1297
- height: 36px;
1298
- }
1299
-
1300
- .dl-debugger-btn-primary {
1301
- width: 40px;
1302
- height: 40px;
1303
- }
1304
-
1305
- .dl-debugger-step-counter {
1306
- min-width: 50px;
1307
- font-size: 12px;
1308
- }
1309
-
1310
- .dl-speed-slider {
1311
- width: 60px;
1312
- }
1313
- }
1314
- /* ==========================================================================
1315
- Properties Panel Styles
1316
- ========================================================================== */
1317
-
1318
- /* Floating properties panel - overlays on top of the diagram */
1319
- .properties-panel {
1320
- display: flex;
1321
- flex-direction: column;
1322
- position: absolute;
1323
- top: 8px;
1324
- right: 8px;
1325
- bottom: 8px;
1326
- width: 280px;
1327
- z-index: 50;
1328
- background: var(--bg-secondary, #ffffff);
1329
- border: 1px solid var(--border-color, #e0e0e0);
1330
- border-radius: 8px;
1331
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.06);
1332
- overflow: hidden;
1333
- }
1334
-
1335
- /* Dark mode */
1336
- .logic-editor[data-theme="dark"] .properties-panel {
1337
- background: var(--bg-secondary, #1e1e1e);
1338
- border-color: var(--border-color, #3e3e3e);
1339
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35), 0 2px 4px rgba(0, 0, 0, 0.2);
1340
- }
1341
-
1342
- .properties-panel-content {
1343
- display: flex;
1344
- flex-direction: column;
1345
- height: 100%;
1346
- overflow-y: auto;
1347
- }
1348
-
1349
- /* ==========================================================================
1350
- Header
1351
- ========================================================================== */
1352
-
1353
- .properties-panel-header {
1354
- display: flex;
1355
- align-items: flex-start;
1356
- justify-content: space-between;
1357
- gap: 12px;
1358
- padding: 16px;
1359
- border-bottom: 1px solid var(--border-light, #f0f0f0);
1360
- background: var(--bg-tertiary, #f8f9fa);
1361
- }
1362
-
1363
- .logic-editor[data-theme="dark"] .properties-panel-header {
1364
- border-bottom-color: var(--border-color, #3e3e3e);
1365
- background: var(--bg-tertiary, #252525);
1366
- }
1367
-
1368
- .properties-panel-header-info {
1369
- flex: 1;
1370
- min-width: 0;
1371
- }
1372
-
1373
- .properties-panel-title {
1374
- margin: 0;
1375
- font-size: 16px;
1376
- font-weight: 600;
1377
- color: var(--text-primary, #1a1a1a);
1378
- }
1379
-
1380
- .logic-editor[data-theme="dark"] .properties-panel-title {
1381
- color: var(--text-primary, #e0e0e0);
1382
- }
1383
-
1384
- .properties-panel-category {
1385
- display: block;
1386
- margin-top: 4px;
1387
- font-size: 12px;
1388
- color: var(--text-tertiary, #999);
1389
- }
1390
-
1391
- .properties-panel-close {
1392
- display: flex;
1393
- align-items: center;
1394
- justify-content: center;
1395
- width: 28px;
1396
- height: 28px;
1397
- padding: 0;
1398
- background: transparent;
1399
- border: none;
1400
- border-radius: 6px;
1401
- color: var(--text-tertiary, #999);
1402
- cursor: pointer;
1403
- transition: background 0.15s, color 0.15s;
1404
- }
1405
-
1406
- .properties-panel-close:hover {
1407
- background: var(--bg-hover, #e8e8e8);
1408
- color: var(--text-primary, #1a1a1a);
1409
- }
1410
-
1411
- .logic-editor[data-theme="dark"] .properties-panel-close:hover {
1412
- background: var(--bg-hover, #3e3e3e);
1413
- color: var(--text-primary, #e0e0e0);
1414
- }
1415
-
1416
- /* ==========================================================================
1417
- Sections
1418
- ========================================================================== */
1419
-
1420
- .properties-panel-section {
1421
- padding: 16px;
1422
- border-bottom: 1px solid var(--border-light, #f0f0f0);
1423
- }
1424
-
1425
- .logic-editor[data-theme="dark"] .properties-panel-section {
1426
- border-bottom-color: var(--border-color, #3e3e3e);
1427
- }
1428
-
1429
- .properties-panel-section-header {
1430
- display: flex;
1431
- align-items: center;
1432
- gap: 6px;
1433
- margin-bottom: 12px;
1434
- font-size: 11px;
1435
- font-weight: 600;
1436
- color: var(--text-tertiary, #999);
1437
- text-transform: uppercase;
1438
- letter-spacing: 0.5px;
1439
- }
1440
-
1441
- .properties-panel-section-icon {
1442
- font-size: 14px;
1443
- }
1444
-
1445
- /* Collapsible section */
1446
- .properties-panel-section--collapsible {
1447
- padding: 0;
1448
- }
1449
-
1450
- .properties-panel-section-toggle {
1451
- display: flex;
1452
- align-items: center;
1453
- gap: 6px;
1454
- width: 100%;
1455
- padding: 12px 16px;
1456
- font-size: 11px;
1457
- font-weight: 600;
1458
- color: var(--text-tertiary, #999);
1459
- text-transform: uppercase;
1460
- letter-spacing: 0.5px;
1461
- background: transparent;
1462
- border: none;
1463
- cursor: pointer;
1464
- transition: background 0.15s, color 0.15s;
1465
- }
1466
-
1467
- .properties-panel-section-toggle:hover {
1468
- background: var(--bg-hover, #f5f5f5);
1469
- color: var(--text-secondary, #666);
1470
- }
1471
-
1472
- .logic-editor[data-theme="dark"] .properties-panel-section-toggle:hover {
1473
- background: var(--bg-hover, #3e3e3e);
1474
- color: var(--text-secondary, #aaa);
1475
- }
1476
-
1477
- .properties-panel-section-toggle svg {
1478
- flex-shrink: 0;
1479
- }
1480
-
1481
- .properties-panel-section-content {
1482
- padding: 0 16px 16px;
1483
- }
1484
-
1485
- /* ==========================================================================
1486
- Help Section
1487
- ========================================================================== */
1488
-
1489
- .help-section {
1490
- display: flex;
1491
- flex-direction: column;
1492
- gap: 12px;
1493
- }
1494
-
1495
- .help-summary {
1496
- margin: 0;
1497
- font-size: 13px;
1498
- color: var(--text-secondary, #666);
1499
- line-height: 1.5;
1500
- }
1501
-
1502
- .logic-editor[data-theme="dark"] .help-summary {
1503
- color: var(--text-secondary, #aaa);
1504
- }
1505
-
1506
- .help-badges {
1507
- display: flex;
1508
- flex-wrap: wrap;
1509
- gap: 8px;
1510
- }
1511
-
1512
- .help-badge {
1513
- display: inline-flex;
1514
- align-items: center;
1515
- gap: 4px;
1516
- padding: 4px 8px;
1517
- font-size: 11px;
1518
- border-radius: 4px;
1519
- }
1520
-
1521
- .help-badge code {
1522
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
1523
- }
1524
-
1525
- .help-badge-arity {
1526
- background: var(--dl-info-bg, #eff6ff);
1527
- color: var(--dl-info, #3b82f6);
1528
- }
1529
-
1530
- .logic-editor[data-theme="dark"] .help-badge-arity {
1531
- background: rgba(59, 130, 246, 0.15);
1532
- color: #60a5fa;
1533
- }
1534
-
1535
- .help-badge-return {
1536
- background: var(--dl-success-bg, #f0fdf4);
1537
- color: var(--dl-success, #22c55e);
1538
- }
1539
-
1540
- .logic-editor[data-theme="dark"] .help-badge-return {
1541
- background: rgba(34, 197, 94, 0.15);
1542
- color: #4ade80;
1543
- }
1544
-
1545
- .help-examples-toggle {
1546
- display: flex;
1547
- align-items: center;
1548
- gap: 6px;
1549
- padding: 6px 0;
1550
- font-size: 12px;
1551
- color: var(--dl-primary, #3b82f6);
1552
- background: transparent;
1553
- border: none;
1554
- cursor: pointer;
1555
- transition: color 0.15s;
1556
- }
1557
-
1558
- .help-examples-toggle:hover {
1559
- color: var(--dl-primary-dark, #2563eb);
1560
- }
1561
-
1562
- .logic-editor[data-theme="dark"] .help-examples-toggle {
1563
- color: #60a5fa;
1564
- }
1565
-
1566
- .logic-editor[data-theme="dark"] .help-examples-toggle:hover {
1567
- color: #93c5fd;
1568
- }
1569
-
1570
- .help-examples {
1571
- display: flex;
1572
- flex-direction: column;
1573
- gap: 12px;
1574
- }
1575
-
1576
- .help-example {
1577
- padding: 10px;
1578
- background: var(--dl-bg-subtle, #f8f9fa);
1579
- border: 1px solid var(--dl-border-light, #f0f0f0);
1580
- border-radius: 6px;
1581
- }
1582
-
1583
- .logic-editor[data-theme="dark"] .help-example {
1584
- background: #1e1e1e;
1585
- border-color: #3e3e3e;
1586
- }
1587
-
1588
- .help-example-header {
1589
- display: flex;
1590
- align-items: center;
1591
- justify-content: space-between;
1592
- margin-bottom: 8px;
1593
- }
1594
-
1595
- .help-example-title {
1596
- font-size: 12px;
1597
- font-weight: 500;
1598
- color: var(--dl-text-secondary, #666);
1599
- }
1600
-
1601
- .logic-editor[data-theme="dark"] .help-example-title {
1602
- color: #aaa;
1603
- }
1604
-
1605
- .help-example-copy {
1606
- display: flex;
1607
- align-items: center;
1608
- justify-content: center;
1609
- width: 24px;
1610
- height: 24px;
1611
- padding: 0;
1612
- background: transparent;
1613
- border: none;
1614
- border-radius: 4px;
1615
- color: var(--dl-text-tertiary, #999);
1616
- cursor: pointer;
1617
- transition: background 0.15s, color 0.15s;
1618
- }
1619
-
1620
- .help-example-copy:hover {
1621
- background: var(--dl-bg-hover, #e8e8e8);
1622
- color: var(--dl-text-primary, #1a1a1a);
1623
- }
1624
-
1625
- .logic-editor[data-theme="dark"] .help-example-copy {
1626
- color: #888;
1627
- }
1628
-
1629
- .logic-editor[data-theme="dark"] .help-example-copy:hover {
1630
- background: #3e3e3e;
1631
- color: #e0e0e0;
1632
- }
1633
-
1634
- .help-example-code {
1635
- margin: 0;
1636
- padding: 8px;
1637
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
1638
- font-size: 11px;
1639
- line-height: 1.5;
1640
- background: var(--dl-bg-code, #fff);
1641
- border: 1px solid var(--dl-border-light, #f0f0f0);
1642
- border-radius: 4px;
1643
- overflow-x: auto;
1644
- color: var(--text-primary, #1a1a1a);
1645
- }
1646
-
1647
- .logic-editor[data-theme="dark"] .help-example-code {
1648
- background: #121212;
1649
- border-color: #3e3e3e;
1650
- color: #e0e0e0;
1651
- }
1652
-
1653
- .help-example-code code {
1654
- font-family: inherit;
1655
- }
1656
-
1657
- .help-example-data,
1658
- .help-example-result,
1659
- .help-example-error {
1660
- display: flex;
1661
- align-items: baseline;
1662
- gap: 6px;
1663
- margin-top: 6px;
1664
- font-size: 11px;
1665
- }
1666
-
1667
- .help-example-label {
1668
- color: var(--dl-text-tertiary, #999);
1669
- flex-shrink: 0;
1670
- }
1671
-
1672
- .help-example-data code,
1673
- .help-example-result code {
1674
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
1675
- color: var(--dl-text-primary, #1a1a1a);
1676
- }
1677
-
1678
- .logic-editor[data-theme="dark"] .help-example-data code,
1679
- .logic-editor[data-theme="dark"] .help-example-result code {
1680
- color: #e0e0e0;
1681
- }
1682
-
1683
- .help-example-error code {
1684
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
1685
- color: var(--dl-error, #ef4444);
1686
- }
1687
-
1688
- .logic-editor[data-theme="dark"] .help-example-error code {
1689
- color: #f87171;
1690
- }
1691
-
1692
- .help-example-note {
1693
- margin-top: 6px;
1694
- font-size: 11px;
1695
- font-style: italic;
1696
- color: var(--dl-text-tertiary, #999);
1697
- }
1698
-
1699
- .help-notes {
1700
- padding-top: 8px;
1701
- border-top: 1px solid var(--dl-border-light, #f0f0f0);
1702
- }
1703
-
1704
- .logic-editor[data-theme="dark"] .help-notes {
1705
- border-top-color: #3e3e3e;
1706
- }
1707
-
1708
- .help-notes-title {
1709
- font-size: 11px;
1710
- font-weight: 600;
1711
- color: var(--dl-text-tertiary, #999);
1712
- text-transform: uppercase;
1713
- letter-spacing: 0.5px;
1714
- margin-bottom: 6px;
1715
- }
1716
-
1717
- .help-notes-list {
1718
- margin: 0;
1719
- padding-left: 16px;
1720
- font-size: 12px;
1721
- color: var(--dl-text-secondary, #666);
1722
- line-height: 1.6;
1723
- }
1724
-
1725
- .logic-editor[data-theme="dark"] .help-notes-list {
1726
- color: #aaa;
1727
- }
1728
-
1729
-
1730
- /* ==========================================================================
1731
- Footer
1732
- ========================================================================== */
1733
-
1734
- .properties-panel-footer {
1735
- margin-top: auto;
1736
- padding: 16px;
1737
- border-top: 1px solid var(--border-light, #f0f0f0);
1738
- }
1739
-
1740
- .logic-editor[data-theme="dark"] .properties-panel-footer {
1741
- border-top-color: var(--border-color, #3e3e3e);
1742
- }
1743
-
1744
- .properties-panel-delete {
1745
- width: 100%;
1746
- padding: 10px 16px;
1747
- font-size: 13px;
1748
- font-weight: 500;
1749
- color: #ef4444;
1750
- background: #fef2f2;
1751
- border: 1px solid #fecaca;
1752
- border-radius: 6px;
1753
- cursor: pointer;
1754
- transition: background 0.15s, border-color 0.15s;
1755
- }
1756
-
1757
- .logic-editor[data-theme="dark"] .properties-panel-delete {
1758
- background: #451a1a;
1759
- border-color: #7f1d1d;
1760
- }
1761
-
1762
- .properties-panel-delete:hover {
1763
- background: #fee2e2;
1764
- border-color: #ef4444;
1765
- }
1766
-
1767
- .logic-editor[data-theme="dark"] .properties-panel-delete:hover {
1768
- background: #5c2424;
1769
- }
1770
-
1771
- /* ==========================================================================
1772
- Empty State
1773
- ========================================================================== */
1774
-
1775
- .properties-panel-empty {
1776
- display: flex;
1777
- flex-direction: column;
1778
- align-items: center;
1779
- padding: 32px 16px;
1780
- text-align: center;
1781
- }
1782
-
1783
- .properties-panel-empty-title {
1784
- margin: 0 0 8px;
1785
- font-size: 14px;
1786
- font-weight: 500;
1787
- color: var(--text-secondary, #666);
1788
- }
1789
-
1790
- .properties-panel-empty-hint {
1791
- margin: 0;
1792
- font-size: 12px;
1793
- color: var(--text-tertiary, #999);
1794
- line-height: 1.5;
1795
- }
1796
-
1797
- .properties-panel-empty-divider {
1798
- width: 100%;
1799
- height: 1px;
1800
- margin: 24px 0;
1801
- background: var(--border-light, #f0f0f0);
1802
- }
1803
-
1804
- .logic-editor[data-theme="dark"] .properties-panel-empty-divider {
1805
- background: var(--border-color, #3e3e3e);
1806
- }
1807
-
1808
- .properties-panel-quick-add-title {
1809
- margin: 0 0 12px;
1810
- font-size: 12px;
1811
- font-weight: 500;
1812
- color: var(--text-secondary, #666);
1813
- }
1814
-
1815
- .properties-panel-quick-add {
1816
- display: flex;
1817
- flex-direction: column;
1818
- gap: 8px;
1819
- width: 100%;
1820
- }
1821
-
1822
- .properties-panel-quick-add-btn {
1823
- display: flex;
1824
- align-items: center;
1825
- gap: 10px;
1826
- width: 100%;
1827
- padding: 10px 14px;
1828
- font-size: 13px;
1829
- color: var(--text-primary, #1a1a1a);
1830
- background: var(--bg-tertiary, #f8f9fa);
1831
- border: 1px solid var(--border-color, #e0e0e0);
1832
- border-radius: 6px;
1833
- cursor: pointer;
1834
- transition: background 0.15s, border-color 0.15s;
1835
- }
1836
-
1837
- .logic-editor[data-theme="dark"] .properties-panel-quick-add-btn {
1838
- color: var(--text-primary, #e0e0e0);
1839
- background: var(--bg-tertiary, #252525);
1840
- border-color: var(--border-color, #3e3e3e);
1841
- }
1842
-
1843
- .properties-panel-quick-add-btn:hover {
1844
- background: var(--bg-hover, #f0f0f0);
1845
- border-color: var(--border-color, #d0d0d0);
1846
- }
1847
-
1848
- .logic-editor[data-theme="dark"] .properties-panel-quick-add-btn:hover {
1849
- background: var(--bg-hover, #3e3e3e);
1850
- }
1851
-
1852
- .properties-panel-quick-add-btn svg {
1853
- color: var(--text-tertiary, #999);
1854
- }
1855
-
1856
- /* ============================================================================
1857
- Arguments Section
1858
- ============================================================================ */
1859
-
1860
- .arguments-list {
1861
- display: flex;
1862
- flex-direction: column;
1863
- gap: 6px;
1864
- margin-bottom: 12px;
1865
- }
1866
-
1867
- .argument-item {
1868
- display: flex;
1869
- align-items: center;
1870
- gap: 8px;
1871
- padding: 6px 8px;
1872
- background: var(--bg-tertiary, #f8f9fa);
1873
- border: 1px solid var(--border-color, #e0e0e0);
1874
- border-radius: 6px;
1875
- }
1876
-
1877
- .logic-editor[data-theme="dark"] .argument-item {
1878
- background: var(--bg-tertiary, #252525);
1879
- border-color: var(--border-color, #3e3e3e);
1880
- }
1881
-
1882
- .argument-index {
1883
- display: flex;
1884
- align-items: center;
1885
- justify-content: center;
1886
- width: 20px;
1887
- height: 20px;
1888
- font-size: 11px;
1889
- font-weight: 600;
1890
- color: var(--text-tertiary, #888);
1891
- background: var(--bg-secondary, #f0f0f0);
1892
- border-radius: 4px;
1893
- flex-shrink: 0;
1894
- }
1895
-
1896
- .logic-editor[data-theme="dark"] .argument-index {
1897
- background: var(--bg-secondary, #1e1e1e);
1898
- color: var(--text-tertiary, #888);
1899
- }
1900
-
1901
- .argument-value {
1902
- flex: 1;
1903
- padding: 4px 8px;
1904
- font-size: 12px;
1905
- font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
1906
- color: var(--text-primary, #1a1a1a);
1907
- background: transparent;
1908
- border: none;
1909
- border-radius: 4px;
1910
- cursor: pointer;
1911
- text-align: left;
1912
- overflow: hidden;
1913
- text-overflow: ellipsis;
1914
- white-space: nowrap;
1915
- }
1916
-
1917
- .argument-value:hover {
1918
- background: var(--bg-hover, #e8e8e8);
1919
- }
1920
-
1921
- .logic-editor[data-theme="dark"] .argument-value {
1922
- color: var(--text-primary, #e0e0e0);
1923
- }
1924
-
1925
- .logic-editor[data-theme="dark"] .argument-value:hover {
1926
- background: var(--bg-hover, #3e3e3e);
1927
- }
1928
-
1929
- .argument-remove {
1930
- display: flex;
1931
- align-items: center;
1932
- justify-content: center;
1933
- width: 24px;
1934
- height: 24px;
1935
- padding: 0;
1936
- color: var(--text-tertiary, #888);
1937
- background: transparent;
1938
- border: none;
1939
- border-radius: 4px;
1940
- cursor: pointer;
1941
- flex-shrink: 0;
1942
- transition: color 0.15s, background 0.15s;
1943
- }
1944
-
1945
- .argument-remove:hover {
1946
- color: var(--color-error, #dc3545);
1947
- background: var(--bg-hover, #e8e8e8);
1948
- }
1949
-
1950
- .logic-editor[data-theme="dark"] .argument-remove:hover {
1951
- background: var(--bg-hover, #3e3e3e);
1952
- }
1953
-
1954
- .arguments-empty {
1955
- padding: 12px;
1956
- font-size: 12px;
1957
- color: var(--text-tertiary, #888);
1958
- text-align: center;
1959
- background: var(--bg-tertiary, #f8f9fa);
1960
- border: 1px dashed var(--border-color, #e0e0e0);
1961
- border-radius: 6px;
1962
- }
1963
-
1964
- .logic-editor[data-theme="dark"] .arguments-empty {
1965
- background: var(--bg-tertiary, #252525);
1966
- border-color: var(--border-color, #3e3e3e);
1967
- }
1968
-
1969
- .arguments-add-btn {
1970
- display: flex;
1971
- align-items: center;
1972
- justify-content: center;
1973
- gap: 6px;
1974
- width: 100%;
1975
- padding: 8px 12px;
1976
- font-size: 12px;
1977
- font-weight: 500;
1978
- color: var(--color-primary, #2563eb);
1979
- background: transparent;
1980
- border: 1px dashed var(--color-primary, #2563eb);
1981
- border-radius: 6px;
1982
- cursor: pointer;
1983
- transition: background 0.15s, border-style 0.15s;
1984
- }
1985
-
1986
- .arguments-add-btn:hover {
1987
- background: var(--color-primary-light, rgba(37, 99, 235, 0.08));
1988
- border-style: solid;
1989
- }
1990
-
1991
- .logic-editor[data-theme="dark"] .arguments-add-btn {
1992
- color: var(--color-primary, #60a5fa);
1993
- border-color: var(--color-primary, #60a5fa);
1994
- }
1995
-
1996
- .logic-editor[data-theme="dark"] .arguments-add-btn:hover {
1997
- background: var(--color-primary-light, rgba(96, 165, 250, 0.1));
1998
- }
1999
-
2000
- .arguments-hint {
2001
- margin-top: 8px;
2002
- padding: 6px 8px;
2003
- font-size: 11px;
2004
- color: var(--text-tertiary, #888);
2005
- background: var(--bg-tertiary, #f8f9fa);
2006
- border-radius: 4px;
2007
- }
2008
-
2009
- .logic-editor[data-theme="dark"] .arguments-hint {
2010
- background: var(--bg-tertiary, #252525);
2011
- }
2012
-
2013
- /* Inline literal inputs */
2014
- .argument-literal-input {
2015
- flex: 1;
2016
- min-width: 0;
2017
- }
2018
-
2019
- .argument-input {
2020
- width: 100%;
2021
- padding: 6px 8px;
2022
- font-size: 12px;
2023
- font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
2024
- color: var(--text-primary, #1a1a1a);
2025
- background: var(--bg-primary, #ffffff);
2026
- border: 1px solid var(--border-color, #d0d0d0);
2027
- border-radius: 4px;
2028
- outline: none;
2029
- transition: border-color 0.15s, box-shadow 0.15s;
2030
- }
2031
-
2032
- .argument-input:focus {
2033
- border-color: var(--color-primary, #2563eb);
2034
- box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);
2035
- }
2036
-
2037
- .argument-input:hover:not(:focus) {
2038
- border-color: var(--border-color-dark, #c0c0c0);
2039
- }
2040
-
2041
- .logic-editor[data-theme="dark"] .argument-input {
2042
- color: var(--text-primary, #e0e0e0);
2043
- background: var(--bg-primary, #121212);
2044
- border-color: var(--border-color, #4e4e4e);
2045
- }
2046
-
2047
- .logic-editor[data-theme="dark"] .argument-input:focus {
2048
- border-color: var(--color-primary, #60a5fa);
2049
- box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.2);
2050
- }
2051
-
2052
- .logic-editor[data-theme="dark"] .argument-input:hover:not(:focus) {
2053
- border-color: var(--border-color-dark, #5e5e5e);
2054
- }
2055
-
2056
- /* Number input specific */
2057
- .argument-input--number {
2058
- -moz-appearance: textfield;
2059
- }
2060
-
2061
- .argument-input--number::-webkit-outer-spin-button,
2062
- .argument-input--number::-webkit-inner-spin-button {
2063
- -webkit-appearance: none;
2064
- margin: 0;
2065
- }
2066
-
2067
- /* String input specific */
2068
- .argument-input--string::placeholder {
2069
- color: var(--text-muted, #aaa);
2070
- font-style: italic;
2071
- }
2072
-
2073
- /* Boolean and null select */
2074
- .argument-input--boolean,
2075
- .argument-input--null {
2076
- cursor: pointer;
2077
- /* Remove all native select styling */
2078
- -webkit-appearance: none;
2079
- -moz-appearance: none;
2080
- appearance: none;
2081
- /* Custom dropdown arrow - use shorthand to override base class */
2082
- background: var(--bg-primary, #ffffff) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 8px center / 12px;
2083
- padding-right: 28px;
2084
- }
2085
-
2086
- /* Remove IE dropdown arrow */
2087
- .argument-input--boolean::-ms-expand,
2088
- .argument-input--null::-ms-expand {
2089
- display: none;
2090
- }
2091
-
2092
- .logic-editor[data-theme="dark"] .argument-input--boolean,
2093
- .logic-editor[data-theme="dark"] .argument-input--null {
2094
- background: var(--bg-primary, #121212) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23aaa' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 8px center / 12px;
2095
- }
2096
-
2097
- /* Complex value link button */
2098
- .argument-value--complex {
2099
- display: flex;
2100
- align-items: center;
2101
- gap: 6px;
2102
- flex: 1;
2103
- padding: 6px 8px;
2104
- font-size: 12px;
2105
- font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
2106
- color: var(--color-primary, #2563eb);
2107
- background: var(--bg-primary, #ffffff);
2108
- border: 1px solid var(--border-color, #d0d0d0);
2109
- border-radius: 4px;
2110
- cursor: pointer;
2111
- text-align: left;
2112
- overflow: hidden;
2113
- text-overflow: ellipsis;
2114
- white-space: nowrap;
2115
- transition: background 0.15s, border-color 0.15s;
2116
- }
2117
-
2118
- .argument-value--complex:hover {
2119
- background: var(--bg-hover, #f5f5f5);
2120
- border-color: var(--color-primary, #2563eb);
2121
- }
2122
-
2123
- .argument-value--complex svg {
2124
- flex-shrink: 0;
2125
- opacity: 0.6;
2126
- }
2127
-
2128
- .logic-editor[data-theme="dark"] .argument-value--complex {
2129
- color: var(--color-primary, #60a5fa);
2130
- background: var(--bg-primary, #121212);
2131
- border-color: var(--border-color, #4e4e4e);
2132
- }
2133
-
2134
- .logic-editor[data-theme="dark"] .argument-value--complex:hover {
2135
- background: var(--bg-hover, #2a2a2a);
2136
- border-color: var(--color-primary, #60a5fa);
2137
- }
2138
-
2139
- /* Readonly literal display */
2140
- .argument-input--readonly {
2141
- display: block;
2142
- width: 100%;
2143
- padding: 6px 8px;
2144
- font-size: 12px;
2145
- font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
2146
- color: var(--text-secondary, #666);
2147
- background: var(--bg-tertiary, #f5f5f5);
2148
- border: 1px solid var(--border-color, #e0e0e0);
2149
- border-radius: 4px;
2150
- }
2151
-
2152
- .logic-editor[data-theme="dark"] .argument-input--readonly {
2153
- color: var(--text-secondary, #aaa);
2154
- background: var(--bg-tertiary, #252525);
2155
- border-color: var(--border-color, #3e3e3e);
2156
- }
2157
-
2158
- /* ==========================================================================
2159
- Operator List (Empty State with Full Operator Selection)
2160
- ========================================================================== */
2161
-
2162
- .properties-panel-search {
2163
- position: relative;
2164
- padding: 12px 16px;
2165
- border-bottom: 1px solid var(--border-light, #f0f0f0);
2166
- }
2167
-
2168
- .logic-editor[data-theme="dark"] .properties-panel-search {
2169
- border-bottom-color: var(--border-color, #3e3e3e);
2170
- }
2171
-
2172
- .properties-panel-search-icon {
2173
- position: absolute;
2174
- left: 28px;
2175
- top: 50%;
2176
- transform: translateY(-50%);
2177
- color: var(--text-tertiary, #999);
2178
- pointer-events: none;
2179
- }
2180
-
2181
- .properties-panel-search-input {
2182
- width: 100%;
2183
- padding: 8px 12px 8px 32px;
2184
- font-size: 13px;
2185
- color: var(--text-primary, #1a1a1a);
2186
- background: var(--bg-tertiary, #f8f9fa);
2187
- border: 1px solid var(--border-color, #e0e0e0);
2188
- border-radius: 6px;
2189
- outline: none;
2190
- transition: border-color 0.15s, box-shadow 0.15s;
2191
- }
2192
-
2193
- .properties-panel-search-input:focus {
2194
- border-color: var(--color-primary, #2563eb);
2195
- box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.1);
2196
- }
2197
-
2198
- .properties-panel-search-input::placeholder {
2199
- color: var(--text-tertiary, #999);
2200
- }
2201
-
2202
- .logic-editor[data-theme="dark"] .properties-panel-search-input {
2203
- color: var(--text-primary, #e0e0e0);
2204
- background: var(--bg-tertiary, #252525);
2205
- border-color: var(--border-color, #3e3e3e);
2206
- }
2207
-
2208
- .logic-editor[data-theme="dark"] .properties-panel-search-input:focus {
2209
- border-color: var(--color-primary, #60a5fa);
2210
- box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.15);
2211
- }
2212
-
2213
- .properties-panel-operators-list {
2214
- flex: 1;
2215
- overflow-y: auto;
2216
- padding: 8px 0;
2217
- }
2218
-
2219
- /* Category styling - reset the block display from header category */
2220
- .properties-panel-operators-list .properties-panel-category {
2221
- display: block;
2222
- margin-top: 0;
2223
- font-size: inherit;
2224
- color: inherit;
2225
- }
2226
-
2227
- .properties-panel-category-header {
2228
- display: flex;
2229
- align-items: center;
2230
- gap: 8px;
2231
- width: 100%;
2232
- padding: 8px 16px;
2233
- font-size: 12px;
2234
- font-weight: 600;
2235
- color: var(--text-secondary, #666);
2236
- background: transparent;
2237
- border: none;
2238
- cursor: pointer;
2239
- transition: background 0.15s;
2240
- }
2241
-
2242
- .properties-panel-category-header:hover {
2243
- background: var(--bg-hover, #f5f5f5);
2244
- }
2245
-
2246
- .logic-editor[data-theme="dark"] .properties-panel-category-header:hover {
2247
- background: var(--bg-hover, #3e3e3e);
2248
- }
2249
-
2250
- .properties-panel-category-header svg {
2251
- flex-shrink: 0;
2252
- color: var(--text-tertiary, #999);
2253
- }
2254
-
2255
- .properties-panel-category-dot {
2256
- width: 8px;
2257
- height: 8px;
2258
- border-radius: 50%;
2259
- flex-shrink: 0;
2260
- }
2261
-
2262
- .properties-panel-category-label {
2263
- flex: 1;
2264
- text-align: left;
2265
- }
2266
-
2267
- .properties-panel-category-count {
2268
- font-size: 11px;
2269
- font-weight: 400;
2270
- color: var(--text-tertiary, #999);
2271
- padding: 2px 6px;
2272
- background: var(--bg-tertiary, #f0f0f0);
2273
- border-radius: 10px;
2274
- }
2275
-
2276
- .logic-editor[data-theme="dark"] .properties-panel-category-count {
2277
- background: var(--bg-tertiary, #2e2e2e);
2278
- }
2279
-
2280
- .properties-panel-category-items {
2281
- padding: 4px 8px 8px 24px;
2282
- }
2283
-
2284
- .properties-panel-operator-item {
2285
- display: flex;
2286
- align-items: center;
2287
- justify-content: space-between;
2288
- gap: 8px;
2289
- width: 100%;
2290
- padding: 6px 12px;
2291
- font-size: 12px;
2292
- color: var(--text-primary, #1a1a1a);
2293
- background: transparent;
2294
- border: none;
2295
- border-radius: 4px;
2296
- cursor: pointer;
2297
- transition: background 0.15s;
2298
- }
2299
-
2300
- .properties-panel-operator-item:hover {
2301
- background: var(--bg-hover, #f0f0f0);
2302
- }
2303
-
2304
- .logic-editor[data-theme="dark"] .properties-panel-operator-item {
2305
- color: var(--text-primary, #e0e0e0);
2306
- }
2307
-
2308
- .logic-editor[data-theme="dark"] .properties-panel-operator-item:hover {
2309
- background: var(--bg-hover, #3e3e3e);
2310
- }
2311
-
2312
- .properties-panel-operator-name {
2313
- flex: 1;
2314
- text-align: left;
2315
- font-weight: 500;
2316
- }
2317
-
2318
- .properties-panel-operator-symbol {
2319
- font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
2320
- font-size: 11px;
2321
- color: var(--text-tertiary, #999);
2322
- padding: 2px 6px;
2323
- background: var(--bg-tertiary, #f5f5f5);
2324
- border-radius: 4px;
2325
- }
2326
-
2327
- .logic-editor[data-theme="dark"] .properties-panel-operator-symbol {
2328
- background: var(--bg-tertiary, #2e2e2e);
2329
- }
2330
-
2331
- /* ==========================================================================
2332
- Mobile Bottom Sheet
2333
- ========================================================================== */
2334
-
2335
- @media (max-width: 1024px) {
2336
- .properties-panel {
2337
- position: fixed;
2338
- top: auto;
2339
- left: 0;
2340
- right: 0;
2341
- bottom: 52px; /* above mobile nav tab bar */
2342
- width: 100%;
2343
- height: 45%;
2344
- max-height: 340px;
2345
- border-radius: 12px 12px 0 0;
2346
- border: none;
2347
- border-top: 1px solid var(--border-color, #e0e0e0);
2348
- box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.1);
2349
- z-index: 200;
2350
- }
2351
-
2352
- .logic-editor[data-theme="dark"] .properties-panel {
2353
- box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.35);
2354
- }
2355
-
2356
- .properties-panel-close {
2357
- width: 44px;
2358
- height: 44px;
2359
- }
2360
-
2361
- .properties-panel-section-toggle {
2362
- min-height: 44px;
2363
- }
2364
-
2365
- .properties-panel-operator-item {
2366
- min-height: 44px;
2367
- padding: 8px 12px;
2368
- }
2369
-
2370
- .properties-panel-category-header {
2371
- min-height: 44px;
2372
- }
2373
-
2374
- .properties-panel-quick-add-btn {
2375
- min-height: 44px;
2376
- }
2377
-
2378
- .properties-panel-delete {
2379
- min-height: 44px;
2380
- }
2381
-
2382
- .arguments-add-btn {
2383
- min-height: 44px;
2384
- }
2385
-
2386
- .argument-remove {
2387
- width: 44px;
2388
- height: 44px;
2389
- }
2390
- }
2391
-
2392
- /* Landscape mobile: panel on the right side instead of bottom sheet */
2393
- @media (max-width: 1024px) and (orientation: landscape) {
2394
- .properties-panel {
2395
- position: fixed;
2396
- top: 44px; /* below the header */
2397
- left: auto;
2398
- right: 0;
2399
- bottom: 40px; /* above landscape mobile nav tab bar (40px in landscape) */
2400
- width: 280px;
2401
- height: auto;
2402
- max-height: none;
2403
- border-radius: 0;
2404
- border: none;
2405
- border-left: 1px solid var(--border-color, #e0e0e0);
2406
- border-top: none;
2407
- box-shadow: -4px 0 16px rgba(0, 0, 0, 0.1);
2408
- }
2409
-
2410
- .logic-editor[data-theme="dark"] .properties-panel {
2411
- box-shadow: -4px 0 16px rgba(0, 0, 0, 0.35);
2412
- }
2413
- }
2414
- /* ==========================================================================
2415
- Panel Input Styles
2416
- ========================================================================== */
2417
-
2418
- /* Field Container */
2419
- .panel-field {
2420
- display: flex;
2421
- flex-direction: column;
2422
- gap: 6px;
2423
- margin-bottom: 12px;
2424
- }
2425
-
2426
- .panel-field-label {
2427
- font-size: 12px;
2428
- font-weight: 500;
2429
- color: var(--dl-text-secondary, #666);
2430
- }
2431
-
2432
- .panel-field-required {
2433
- color: var(--dl-error, #ef4444);
2434
- margin-left: 2px;
2435
- }
2436
-
2437
- .panel-field-help {
2438
- font-size: 11px;
2439
- color: var(--dl-text-tertiary, #999);
2440
- line-height: 1.4;
2441
- }
2442
-
2443
- /* ==========================================================================
2444
- Base Input Styles
2445
- ========================================================================== */
2446
-
2447
- .panel-input {
2448
- width: 100%;
2449
- padding: 8px 10px;
2450
- font-size: 13px;
2451
- font-family: inherit;
2452
- color: var(--dl-text-primary, #1a1a1a);
2453
- background: var(--dl-bg-input, #fff);
2454
- border: 1px solid var(--dl-border, #e0e0e0);
2455
- border-radius: 6px;
2456
- outline: none;
2457
- transition: border-color 0.15s, box-shadow 0.15s;
2458
- box-sizing: border-box;
2459
- }
2460
-
2461
- .panel-input:focus {
2462
- border-color: var(--dl-primary, #3b82f6);
2463
- box-shadow: 0 0 0 3px var(--dl-primary-alpha, rgba(59, 130, 246, 0.15));
2464
- }
2465
-
2466
- .panel-input:disabled {
2467
- background: var(--dl-bg-disabled, #f5f5f5);
2468
- color: var(--dl-text-disabled, #aaa);
2469
- cursor: not-allowed;
2470
- }
2471
-
2472
- .panel-input::placeholder {
2473
- color: var(--dl-text-placeholder, #bbb);
2474
- }
2475
-
2476
- .panel-input-error {
2477
- border-color: var(--dl-error, #ef4444);
2478
- }
2479
-
2480
- .panel-input-error:focus {
2481
- box-shadow: 0 0 0 3px var(--dl-error-alpha, rgba(239, 68, 68, 0.15));
2482
- }
2483
-
2484
- .panel-input-error-message {
2485
- font-size: 11px;
2486
- color: var(--dl-error, #ef4444);
2487
- margin-top: 4px;
2488
- }
2489
-
2490
- .panel-input-unsupported {
2491
- padding: 8px;
2492
- font-size: 12px;
2493
- color: var(--dl-warning, #f59e0b);
2494
- background: var(--dl-warning-bg, #fffbeb);
2495
- border-radius: 4px;
2496
- }
2497
-
2498
- /* ==========================================================================
2499
- Text Area
2500
- ========================================================================== */
2501
-
2502
- .panel-input-textarea {
2503
- resize: vertical;
2504
- min-height: 60px;
2505
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2506
- }
2507
-
2508
- /* ==========================================================================
2509
- Number Input
2510
- ========================================================================== */
2511
-
2512
- .panel-input-number {
2513
- -moz-appearance: textfield;
2514
- }
2515
-
2516
- .panel-input-number::-webkit-outer-spin-button,
2517
- .panel-input-number::-webkit-inner-spin-button {
2518
- -webkit-appearance: none;
2519
- margin: 0;
2520
- }
2521
-
2522
- /* ==========================================================================
2523
- Boolean Input (Toggle)
2524
- ========================================================================== */
2525
-
2526
- .panel-input-boolean {
2527
- display: inline-flex;
2528
- align-items: center;
2529
- cursor: pointer;
2530
- }
2531
-
2532
- .panel-input-checkbox {
2533
- position: absolute;
2534
- opacity: 0;
2535
- width: 0;
2536
- height: 0;
2537
- }
2538
-
2539
- .panel-input-toggle {
2540
- position: relative;
2541
- width: 36px;
2542
- height: 20px;
2543
- background: var(--dl-bg-toggle-off, #d1d5db);
2544
- border-radius: 10px;
2545
- transition: background 0.2s;
2546
- }
2547
-
2548
- .panel-input-toggle::after {
2549
- content: '';
2550
- position: absolute;
2551
- top: 2px;
2552
- left: 2px;
2553
- width: 16px;
2554
- height: 16px;
2555
- background: white;
2556
- border-radius: 50%;
2557
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
2558
- transition: transform 0.2s;
2559
- }
2560
-
2561
- .panel-input-checkbox:checked + .panel-input-toggle {
2562
- background: var(--dl-primary, #3b82f6);
2563
- }
2564
-
2565
- .panel-input-checkbox:checked + .panel-input-toggle::after {
2566
- transform: translateX(16px);
2567
- }
2568
-
2569
- .panel-input-checkbox:focus + .panel-input-toggle {
2570
- box-shadow: 0 0 0 3px var(--dl-primary-alpha, rgba(59, 130, 246, 0.15));
2571
- }
2572
-
2573
- .panel-input-checkbox:disabled + .panel-input-toggle {
2574
- opacity: 0.5;
2575
- cursor: not-allowed;
2576
- }
2577
-
2578
- /* ==========================================================================
2579
- Select Input
2580
- ========================================================================== */
2581
-
2582
- .panel-input-select-wrapper {
2583
- position: relative;
2584
- display: flex;
2585
- align-items: center;
2586
- }
2587
-
2588
- .panel-input-select {
2589
- appearance: none;
2590
- padding-right: 28px;
2591
- cursor: pointer;
2592
- }
2593
-
2594
- .panel-input-select:disabled {
2595
- cursor: not-allowed;
2596
- }
2597
-
2598
- .panel-input-select-arrow {
2599
- position: absolute;
2600
- right: 10px;
2601
- font-size: 10px;
2602
- color: var(--dl-text-tertiary, #999);
2603
- pointer-events: none;
2604
- }
2605
-
2606
- /* ==========================================================================
2607
- Path Input
2608
- ========================================================================== */
2609
-
2610
- .panel-input-path-wrapper {
2611
- display: flex;
2612
- align-items: center;
2613
- background: var(--dl-bg-input, #fff);
2614
- border: 1px solid var(--dl-border, #e0e0e0);
2615
- border-radius: 6px;
2616
- overflow: hidden;
2617
- transition: border-color 0.15s, box-shadow 0.15s;
2618
- }
2619
-
2620
- .panel-input-path-wrapper:focus-within {
2621
- border-color: var(--dl-primary, #3b82f6);
2622
- box-shadow: 0 0 0 3px var(--dl-primary-alpha, rgba(59, 130, 246, 0.15));
2623
- }
2624
-
2625
- .panel-input-path-prefix {
2626
- padding: 8px 0 8px 10px;
2627
- font-size: 13px;
2628
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2629
- color: var(--dl-text-tertiary, #999);
2630
- user-select: none;
2631
- }
2632
-
2633
- .panel-input-path {
2634
- border: none;
2635
- padding-left: 4px;
2636
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2637
- }
2638
-
2639
- .panel-input-path:focus {
2640
- box-shadow: none;
2641
- }
2642
-
2643
- /* ==========================================================================
2644
- Path Array Input
2645
- ========================================================================== */
2646
-
2647
- .panel-input-path-array {
2648
- display: flex;
2649
- flex-direction: column;
2650
- gap: 6px;
2651
- }
2652
-
2653
- .panel-input-path-segment {
2654
- display: flex;
2655
- align-items: center;
2656
- gap: 4px;
2657
- }
2658
-
2659
- .panel-input-segment {
2660
- flex: 1;
2661
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2662
- }
2663
-
2664
- .panel-input-segment-remove {
2665
- display: flex;
2666
- align-items: center;
2667
- justify-content: center;
2668
- width: 24px;
2669
- height: 24px;
2670
- padding: 0;
2671
- background: transparent;
2672
- border: none;
2673
- border-radius: 4px;
2674
- color: var(--dl-text-tertiary, #999);
2675
- cursor: pointer;
2676
- transition: background 0.15s, color 0.15s;
2677
- }
2678
-
2679
- .panel-input-segment-remove:hover {
2680
- background: var(--dl-error-bg, #fef2f2);
2681
- color: var(--dl-error, #ef4444);
2682
- }
2683
-
2684
- .panel-input-segment-remove:disabled {
2685
- opacity: 0.5;
2686
- cursor: not-allowed;
2687
- }
2688
-
2689
- .panel-input-add-segment {
2690
- display: flex;
2691
- align-items: center;
2692
- gap: 6px;
2693
- padding: 6px 10px;
2694
- font-size: 12px;
2695
- color: var(--dl-primary, #3b82f6);
2696
- background: transparent;
2697
- border: 1px dashed var(--dl-border, #e0e0e0);
2698
- border-radius: 6px;
2699
- cursor: pointer;
2700
- transition: background 0.15s, border-color 0.15s;
2701
- }
2702
-
2703
- .panel-input-add-segment:hover {
2704
- background: var(--dl-primary-bg, #eff6ff);
2705
- border-color: var(--dl-primary, #3b82f6);
2706
- }
2707
-
2708
- .panel-input-add-segment:disabled {
2709
- opacity: 0.5;
2710
- cursor: not-allowed;
2711
- }
2712
-
2713
- .panel-input-path-preview {
2714
- font-size: 11px;
2715
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2716
- color: var(--dl-text-tertiary, #999);
2717
- padding: 4px 0;
2718
- }
2719
-
2720
- /* ==========================================================================
2721
- Expression Input
2722
- ========================================================================== */
2723
-
2724
- .panel-input-expression {
2725
- padding: 10px 12px;
2726
- background: var(--dl-bg-subtle, #f8f9fa);
2727
- border: 1px dashed var(--dl-border, #e0e0e0);
2728
- border-radius: 6px;
2729
- }
2730
-
2731
- .panel-input-expression.disabled {
2732
- opacity: 0.6;
2733
- }
2734
-
2735
- .panel-input-expression-content {
2736
- display: flex;
2737
- align-items: center;
2738
- gap: 8px;
2739
- font-size: 13px;
2740
- }
2741
-
2742
- .panel-input-expression-icon {
2743
- color: var(--dl-primary, #3b82f6);
2744
- flex-shrink: 0;
2745
- }
2746
-
2747
- .panel-input-expression-summary {
2748
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2749
- color: var(--dl-text-primary, #1a1a1a);
2750
- overflow: hidden;
2751
- text-overflow: ellipsis;
2752
- white-space: nowrap;
2753
- }
2754
-
2755
- .panel-input-expression-empty {
2756
- color: var(--dl-text-placeholder, #bbb);
2757
- font-style: italic;
2758
- }
2759
-
2760
- .panel-input-expression-hint {
2761
- font-size: 10px;
2762
- color: var(--dl-text-tertiary, #999);
2763
- margin-top: 6px;
2764
- }
2765
-
2766
- /* ==========================================================================
2767
- JSON Input
2768
- ========================================================================== */
2769
-
2770
- .panel-input-json-wrapper {
2771
- display: flex;
2772
- flex-direction: column;
2773
- }
2774
-
2775
- .panel-input-json {
2776
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2777
- font-size: 12px;
2778
- line-height: 1.5;
2779
- resize: vertical;
2780
- min-height: 80px;
2781
- }
2782
-
2783
- /* ==========================================================================
2784
- Panel Renderer
2785
- ========================================================================== */
2786
-
2787
- .panel-renderer {
2788
- display: flex;
2789
- flex-direction: column;
2790
- gap: 16px;
2791
- }
2792
-
2793
- /* ==========================================================================
2794
- Section Styles
2795
- ========================================================================== */
2796
-
2797
- .panel-section {
2798
- display: flex;
2799
- flex-direction: column;
2800
- }
2801
-
2802
- .panel-section-header {
2803
- display: flex;
2804
- align-items: center;
2805
- gap: 6px;
2806
- padding: 8px 0;
2807
- font-size: 12px;
2808
- font-weight: 600;
2809
- color: var(--dl-text-secondary, #666);
2810
- text-transform: uppercase;
2811
- letter-spacing: 0.5px;
2812
- border-bottom: 1px solid var(--dl-border-light, #f0f0f0);
2813
- margin-bottom: 12px;
2814
- }
2815
-
2816
- .panel-section-header.collapsible {
2817
- cursor: pointer;
2818
- user-select: none;
2819
- transition: color 0.15s;
2820
- }
2821
-
2822
- .panel-section-header.collapsible:hover {
2823
- color: var(--dl-text-primary, #1a1a1a);
2824
- }
2825
-
2826
- .panel-section-header.collapsible:focus {
2827
- outline: none;
2828
- color: var(--dl-primary, #3b82f6);
2829
- }
2830
-
2831
- .panel-section-toggle {
2832
- display: flex;
2833
- align-items: center;
2834
- justify-content: center;
2835
- color: var(--dl-text-tertiary, #999);
2836
- }
2837
-
2838
- .panel-section-title {
2839
- flex: 1;
2840
- }
2841
-
2842
- .panel-section-content {
2843
- display: flex;
2844
- flex-direction: column;
2845
- }
2846
-
2847
- /* ==========================================================================
2848
- Panel Hints
2849
- ========================================================================== */
2850
-
2851
- .panel-hint {
2852
- display: flex;
2853
- gap: 10px;
2854
- padding: 12px;
2855
- background: var(--dl-bg-subtle, #f8f9fa);
2856
- border-radius: 8px;
2857
- border: 1px solid var(--dl-border-light, #f0f0f0);
2858
- }
2859
-
2860
- .panel-hint-icon {
2861
- font-size: 16px;
2862
- flex-shrink: 0;
2863
- }
2864
-
2865
- .panel-hint-content {
2866
- flex: 1;
2867
- min-width: 0;
2868
- }
2869
-
2870
- .panel-hint-title {
2871
- font-size: 12px;
2872
- font-weight: 600;
2873
- color: var(--dl-text-secondary, #666);
2874
- margin-bottom: 4px;
2875
- }
2876
-
2877
- .panel-hint-description {
2878
- font-size: 12px;
2879
- color: var(--dl-text-tertiary, #999);
2880
- line-height: 1.4;
2881
- }
2882
-
2883
- .panel-hint-description code {
2884
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2885
- font-size: 11px;
2886
- background: var(--dl-bg-code, #e8e8e8);
2887
- padding: 1px 4px;
2888
- border-radius: 3px;
2889
- }
2890
-
2891
- /* Chainable hint */
2892
- .panel-hint-chainable {
2893
- background: var(--dl-info-bg, #eff6ff);
2894
- border-color: var(--dl-info-border, #bfdbfe);
2895
- }
2896
-
2897
- /* Context variables hint */
2898
- .panel-hint-context {
2899
- background: var(--dl-success-bg, #f0fdf4);
2900
- border-color: var(--dl-success-border, #bbf7d0);
2901
- }
2902
-
2903
- .panel-context-list {
2904
- list-style: none;
2905
- margin: 0;
2906
- padding: 0;
2907
- display: flex;
2908
- flex-direction: column;
2909
- gap: 8px;
2910
- }
2911
-
2912
- .panel-context-item {
2913
- display: flex;
2914
- flex-direction: column;
2915
- gap: 2px;
2916
- }
2917
-
2918
- .panel-context-example {
2919
- font-family: var(--dl-font-mono, 'SF Mono', 'Monaco', 'Inconsolata', monospace);
2920
- font-size: 11px;
2921
- background: var(--dl-bg-code, rgba(0, 0, 0, 0.06));
2922
- padding: 2px 6px;
2923
- border-radius: 4px;
2924
- color: var(--dl-text-primary, #1a1a1a);
2925
- display: inline-block;
2926
- width: fit-content;
2927
- }
2928
-
2929
- .panel-context-label {
2930
- font-size: 12px;
2931
- font-weight: 500;
2932
- color: var(--dl-text-secondary, #666);
2933
- }
2934
-
2935
- .panel-context-description {
2936
- font-size: 11px;
2937
- color: var(--dl-text-tertiary, #999);
2938
- }
2939
- /* ============================================
2940
- CSS Variables - Debug Colors
2941
- ============================================ */
2942
-
2943
- .logic-editor {
2944
- --debug-current-color: #F59E0B;
2945
- --debug-current-glow: rgba(245, 158, 11, 0.4);
2946
- --debug-executed-color: #10B981;
2947
- --debug-executed-border: rgba(16, 185, 129, 0.6);
2948
- --debug-pending-opacity: 0.5;
2949
- --debug-error-color: #EF4444;
2950
- --debug-error-glow: rgba(239, 68, 68, 0.4);
2951
- --debug-error-border: rgba(239, 68, 68, 0.6);
2952
- }
2953
-
2954
- .logic-editor[data-theme="dark"] {
2955
- --debug-current-glow: rgba(245, 158, 11, 0.5);
2956
- --debug-executed-border: rgba(16, 185, 129, 0.8);
2957
- --debug-error-glow: rgba(239, 68, 68, 0.5);
2958
- --debug-error-border: rgba(239, 68, 68, 0.8);
2959
- }
2960
-
2961
- /* ============================================
2962
- .dl-node — Shared Visual Base
2963
- ============================================ */
2964
-
2965
- .dl-node {
2966
- border-radius: 8px;
2967
- border: 2px solid;
2968
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
2969
- font-size: 13px;
2970
- width: 100%;
2971
- box-sizing: border-box;
2972
- box-shadow: 0 2px 6px var(--node-shadow);
2973
- transition: box-shadow 0.2s, transform 0.1s;
2974
- background: var(--node-bg) !important;
2975
- position: relative;
2976
- }
2977
-
2978
- .dl-node:hover {
2979
- box-shadow: 0 4px 12px var(--node-shadow-hover);
2980
- }
2981
-
2982
- .dl-node.selected {
2983
- box-shadow: 0 0 0 2px var(--accent-blue), 0 4px 12px var(--node-shadow-hover);
2984
- }
2985
-
2986
- /* ============================================
2987
- .dl-node Debug States
2988
- States ONLY change: border-color, box-shadow, opacity, animation
2989
- ============================================ */
2990
-
2991
- /* Disable transitions on debug-active nodes to prevent animation-to-static handoff glitches */
2992
- .dl-node[class*="debug-"] {
2993
- transition: none !important;
2994
- }
2995
-
2996
- /* Contain overflow on all debug-state nodes except current (which needs the bubble visible) */
2997
- .dl-node[class*="debug-"]:not(.debug-current) {
2998
- overflow: hidden;
2999
- }
3000
-
3001
- /* Current step - pulsing highlight */
3002
- .dl-node.debug-current {
3003
- box-shadow: 0 0 0 3px var(--debug-current-color),
3004
- 0 0 20px var(--debug-current-glow) !important;
3005
- animation: debug-pulse 1.5s ease-in-out infinite;
3006
- }
3007
-
3008
- /* Ensure debug-current node wrapper is above all other nodes */
3009
- .react-flow__node:has(.debug-current) {
3010
- z-index: 1000 !important;
3011
- }
3012
-
3013
- @keyframes debug-pulse {
3014
- 0%, 100% {
3015
- box-shadow: 0 0 0 3px var(--debug-current-color),
3016
- 0 0 15px var(--debug-current-glow);
3017
- }
3018
- 50% {
3019
- box-shadow: 0 0 0 5px var(--debug-current-color),
3020
- 0 0 25px var(--debug-current-glow);
3021
- }
3022
- }
3023
-
3024
- /* Executed nodes - path trail with green border */
3025
- .dl-node.debug-executed {
3026
- border-color: var(--debug-executed-color) !important;
3027
- box-shadow: 0 0 0 1px var(--debug-executed-border);
3028
- }
3029
-
3030
- /* Pending nodes - slightly faded */
3031
- .dl-node.debug-pending {
3032
- opacity: var(--debug-pending-opacity);
3033
- }
3034
-
3035
- /* On path - ancestors of current node (but not current itself) */
3036
- .dl-node.debug-on-path {
3037
- border-color: var(--debug-current-color) !important;
3038
- box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.3);
3039
- }
3040
-
3041
- /* Error nodes - red border */
3042
- .dl-node.debug-error {
3043
- border-color: var(--debug-error-color) !important;
3044
- box-shadow: 0 0 0 1px var(--debug-error-border),
3045
- 0 2px 6px var(--node-shadow);
3046
- }
3047
-
3048
- /* Error + current: red pulsing glow */
3049
- .dl-node.debug-error.debug-current {
3050
- box-shadow: 0 0 0 3px var(--debug-error-color),
3051
- 0 0 15px var(--debug-error-glow) !important;
3052
- animation: debug-error-pulse 1.5s ease-in-out infinite;
3053
- }
3054
-
3055
- @keyframes debug-error-pulse {
3056
- 0%, 100% { box-shadow: 0 0 0 3px var(--debug-error-color), 0 0 15px var(--debug-error-glow); }
3057
- 50% { box-shadow: 0 0 0 5px var(--debug-error-color), 0 0 25px var(--debug-error-glow); }
3058
- }
3059
-
3060
- /* ============================================
3061
- Vertical Cell Node — Layout
3062
- ============================================ */
3063
-
3064
- .vertical-cell-header {
3065
- padding: 4px 10px;
3066
- border-radius: 6px 6px 0 0;
3067
- color: white;
3068
- display: flex;
3069
- align-items: center;
3070
- gap: 8px;
3071
- }
3072
-
3073
- .vertical-cell-header .vertical-cell-label {
3074
- flex: 1;
3075
- }
3076
-
3077
- .vertical-cell-header .collapse-toggle {
3078
- margin-left: auto;
3079
- }
3080
-
3081
- .vertical-cell-icon {
3082
- font-size: 16px;
3083
- }
3084
-
3085
- .vertical-cell-label {
3086
- font-weight: 600;
3087
- font-size: 16px;
3088
- letter-spacing: 0.5px;
3089
- white-space: nowrap;
3090
- }
3091
-
3092
- .vertical-cell-body {
3093
- padding: 4px 0;
3094
- }
3095
-
3096
- .vertical-cell-row {
3097
- padding: 6px 12px;
3098
- border-bottom: 1px solid var(--border-light);
3099
- display: flex;
3100
- align-items: center;
3101
- gap: 8px;
3102
- position: relative;
3103
- }
3104
-
3105
- /* Handle positioned inside cell row */
3106
- .vertical-cell-row .cell-handle {
3107
- position: absolute;
3108
- right: -5px;
3109
- top: 50%;
3110
- transform: translateY(-50%);
3111
- }
3112
-
3113
- /* Condition handle - upper position for if/then cells */
3114
- .vertical-cell-row .cell-handle.condition-handle {
3115
- top: 30%;
3116
- }
3117
-
3118
- /* Then/Yes handle - lower position for if/then cells */
3119
- .vertical-cell-row .cell-handle.then-handle {
3120
- top: 70%;
3121
- }
3122
-
3123
- .vertical-cell-row:last-child {
3124
- border-bottom: none;
3125
- }
3126
-
3127
- .vertical-cell-row-then {
3128
- padding-left: 24px;
3129
- }
3130
-
3131
- .vertical-cell-row-icon {
3132
- font-size: 14px;
3133
- flex-shrink: 0;
3134
- }
3135
-
3136
- .vertical-cell-row-label {
3137
- font-size: 12px;
3138
- font-weight: 600;
3139
- color: var(--text-tertiary);
3140
- flex-shrink: 0;
3141
- }
3142
-
3143
- .vertical-cell-inline {
3144
- font-family: 'SF Mono', 'Consolas', monospace;
3145
- font-size: 12px;
3146
- color: var(--text-primary);
3147
- word-break: break-word;
3148
- min-width: 0;
3149
- overflow: hidden;
3150
- }
3151
-
3152
- /* Branch expression text in vertical cells */
3153
- .branch-expression {
3154
- flex: 1;
3155
- min-width: 0;
3156
- overflow: hidden;
3157
- white-space: nowrap;
3158
- text-overflow: ellipsis;
3159
- background: var(--bg-tertiary);
3160
- padding: 2px 6px;
3161
- border-radius: 3px;
3162
- border-left: 2px solid #94a3b8;
3163
- }
3164
-
3165
- .logic-editor[data-theme="dark"] .branch-expression {
3166
- background: var(--bg-hover);
3167
- border-left-color: #64748b;
3168
- }
3169
-
3170
- /* Header right section for result badge and collapse toggle */
3171
- .header-right {
3172
- display: flex;
3173
- align-items: center;
3174
- gap: 4px;
3175
- margin-left: auto;
3176
- }
3177
-
3178
- /* Collapse toggle */
3179
- .collapse-toggle {
3180
- background: transparent;
3181
- border: none;
3182
- color: white;
3183
- font-size: 10px;
3184
- cursor: pointer;
3185
- padding: 2px 6px;
3186
- opacity: 0.8;
3187
- transition: opacity 0.2s;
3188
- flex-shrink: 0;
3189
- }
3190
-
3191
- .collapse-toggle:hover {
3192
- opacity: 1;
3193
- }
3194
-
3195
- /* Expression text for collapsed nodes */
3196
- .expression-text {
3197
- font-family: 'SF Mono', 'Consolas', monospace;
3198
- font-size: 12px;
3199
- color: var(--text-primary);
3200
- padding: 4px 8px;
3201
- background: var(--bg-tertiary);
3202
- border-radius: 4px;
3203
- word-break: break-word;
3204
- line-height: 1.4;
3205
- }
3206
-
3207
- /* Inline expression for unary operators with simple args */
3208
- .expression-text.inline-expression {
3209
- font-size: 13px;
3210
- font-weight: 500;
3211
- }
3212
-
3213
- .collapsed-body {
3214
- padding: 8px;
3215
- }
3216
-
3217
- /* Argument summaries for collapsed view */
3218
- .arg-summaries {
3219
- display: flex;
3220
- flex-direction: column;
3221
- gap: 4px;
3222
- width: 100%;
3223
- }
3224
-
3225
- .arg-summary-row {
3226
- display: flex;
3227
- align-items: center;
3228
- gap: 6px;
3229
- padding: 2px 4px;
3230
- font-size: 12px;
3231
- background: var(--bg-tertiary);
3232
- border-radius: 3px;
3233
- }
3234
-
3235
- .arg-icon {
3236
- flex-shrink: 0;
3237
- font-size: 12px;
3238
- }
3239
-
3240
- .arg-label {
3241
- font-family: 'SF Mono', 'Consolas', monospace;
3242
- color: var(--text-primary);
3243
- white-space: nowrap;
3244
- overflow: hidden;
3245
- text-overflow: ellipsis;
3246
- }
3247
-
3248
- /* ============================================
3249
- Literal Node — Layout
3250
- ============================================ */
3251
-
3252
- .literal-node {
3253
- padding: 8px 12px;
3254
- }
3255
-
3256
- .literal-node-content {
3257
- display: flex;
3258
- align-items: center;
3259
- gap: 8px;
3260
- }
3261
-
3262
- .literal-type-icon {
3263
- font-weight: 700;
3264
- font-size: 14px;
3265
- width: 18px;
3266
- text-align: center;
3267
- }
3268
-
3269
- .literal-value {
3270
- font-family: 'SF Mono', 'Consolas', monospace;
3271
- font-size: 13px;
3272
- color: var(--text-primary);
3273
- word-break: break-all;
3274
- }
3275
-
3276
- /* ============================================
3277
- Structure Node — Layout
3278
- ============================================ */
3279
-
3280
- .structure-node {
3281
- width: fit-content;
3282
- min-width: 150px;
3283
- max-width: 350px;
3284
- }
3285
-
3286
- .structure-node-header {
3287
- padding: 6px 12px;
3288
- border-radius: 6px 6px 0 0;
3289
- color: white;
3290
- display: flex;
3291
- align-items: center;
3292
- gap: 8px;
3293
- height: 32px;
3294
- box-sizing: border-box;
3295
- }
3296
-
3297
- .structure-node-icon {
3298
- font-size: 14px;
3299
- display: flex;
3300
- align-items: center;
3301
- }
3302
-
3303
- .structure-node-label {
3304
- font-weight: 600;
3305
- font-size: 14px;
3306
- letter-spacing: 0.5px;
3307
- flex: 1;
3308
- }
3309
-
3310
- .structure-node-body {
3311
- padding: 8px 12px;
3312
- padding-right: 24px;
3313
- font-family: 'SF Mono', 'Consolas', monospace;
3314
- font-size: 12px;
3315
- white-space: pre;
3316
- line-height: 18px;
3317
- overflow-x: auto;
3318
- max-width: 100%;
3319
- }
3320
-
3321
- .structure-node.collapsed .structure-node-body {
3322
- white-space: normal;
3323
- }
3324
-
3325
- /* Expression marker - clickable link to expression node */
3326
- .structure-expression-marker {
3327
- display: inline-flex;
3328
- align-items: center;
3329
- background: var(--accent-blue-light);
3330
- color: var(--accent-blue);
3331
- padding: 1px 6px;
3332
- border-radius: 3px;
3333
- font-size: 11px;
3334
- font-weight: 500;
3335
- position: relative;
3336
- }
3337
-
3338
- .structure-expression-marker:hover {
3339
- background: var(--accent-blue);
3340
- color: white;
3341
- }
3342
-
3343
- .structure-expression-label {
3344
- margin-right: 4px;
3345
- }
3346
-
3347
- .structure-expression-handle {
3348
- width: 8px !important;
3349
- height: 8px !important;
3350
- border: 2px solid white !important;
3351
- min-width: 8px;
3352
- min-height: 8px;
3353
- }
3354
-
3355
- .logic-editor[data-theme="dark"] .structure-expression-handle {
3356
- border-color: var(--bg-primary) !important;
3357
- }
3358
-
3359
- /* Branch handles positioned at node level */
3360
- .structure-branch-handle {
3361
- width: 10px !important;
3362
- height: 10px !important;
3363
- border: 2px solid white !important;
3364
- min-width: 10px;
3365
- min-height: 10px;
3366
- position: absolute !important;
3367
- transform: translateY(-50%) !important;
3368
- }
3369
-
3370
- .logic-editor[data-theme="dark"] .structure-branch-handle {
3371
- border-color: var(--bg-primary) !important;
3372
- }
3373
-
3374
- /* ============================================
3375
- ReactFlow Handle Styles
3376
- ============================================ */
3377
-
3378
- .react-flow__handle {
3379
- width: 10px;
3380
- height: 10px;
3381
- border: 2px solid white;
3382
- }
3383
-
3384
- .logic-editor[data-theme="dark"] .react-flow__handle {
3385
- border-color: var(--bg-primary);
3386
- }
3387
-
3388
- .react-flow__handle-top {
3389
- top: -6px;
3390
- }
3391
-
3392
- .react-flow__handle-bottom {
3393
- bottom: -6px;
3394
- }
3395
-
3396
- .react-flow__handle-right {
3397
- right: -6px;
3398
- }
3399
-
3400
- .react-flow__handle-left {
3401
- left: -6px;
3402
- top: 50% !important;
3403
- transform: translateY(-50%) !important;
3404
- }
3405
-
3406
- /* Ensure left handles are centered on simple nodes */
3407
- .literal-node .react-flow__handle-left {
3408
- top: 50% !important;
3409
- transform: translateY(-50%) !important;
3410
- }
3411
-
3412
- /* Edge styles */
3413
- .react-flow__edge-path {
3414
- stroke-width: 2;
3415
- }
3416
-
3417
- /* Custom edge styles for decision branches */
3418
- .react-flow__edge.yes-edge .react-flow__edge-path {
3419
- stroke: #22C55E;
3420
- }
3421
-
3422
- .react-flow__edge.no-edge .react-flow__edge-path {
3423
- stroke: #EF4444;
3424
- }
3425
-
3426
- /* ============================================
3427
- Result Badge Styles
3428
- ============================================ */
3429
-
3430
- .result-badge {
3431
- display: inline-flex;
3432
- align-items: center;
3433
- gap: 4px;
3434
- padding: 2px 8px;
3435
- border-radius: 4px;
3436
- font-size: 11px;
3437
- font-family: 'SF Mono', 'Consolas', monospace;
3438
- font-weight: 500;
3439
- max-width: 120px;
3440
- overflow: hidden;
3441
- position: relative;
3442
- cursor: default;
3443
- }
3444
-
3445
- .result-badge.compact {
3446
- padding: 1px 6px;
3447
- font-size: 10px;
3448
- max-width: 80px;
3449
- }
3450
-
3451
- .result-badge .result-text {
3452
- white-space: nowrap;
3453
- overflow: hidden;
3454
- text-overflow: ellipsis;
3455
- }
3456
-
3457
- /* Result popover for complex values */
3458
- .result-popover {
3459
- position: absolute;
3460
- top: 100%;
3461
- right: 0;
3462
- margin-top: 4px;
3463
- background: var(--debug-popover-bg);
3464
- color: var(--debug-popover-text);
3465
- border-radius: 6px;
3466
- padding: 8px 12px;
3467
- font-size: 11px;
3468
- z-index: 1000;
3469
- box-shadow: 0 4px 12px var(--debug-popover-shadow);
3470
- min-width: 150px;
3471
- max-width: 300px;
3472
- max-height: 200px;
3473
- overflow: auto;
3474
- }
3475
-
3476
- .result-popover pre {
3477
- margin: 0;
3478
- white-space: pre-wrap;
3479
- word-break: break-word;
3480
- font-family: 'SF Mono', 'Consolas', monospace;
3481
- }
3482
-
3483
- .result-popover.error {
3484
- background: var(--debug-popover-error-bg);
3485
- color: var(--debug-value-false);
3486
- }
3487
-
3488
- .result-badge.truthy {
3489
- background: var(--success-bg);
3490
- color: var(--success-text);
3491
- border: 1px solid var(--success-border);
3492
- }
3493
-
3494
- .result-badge.falsy {
3495
- background: var(--error-bg);
3496
- color: var(--error-text);
3497
- border: 1px solid var(--error-border);
3498
- }
3499
-
3500
- .result-badge.boolean.truthy {
3501
- background: var(--success-bg);
3502
- color: var(--success-text);
3503
- }
3504
-
3505
- .result-badge.boolean.falsy {
3506
- background: var(--error-bg);
3507
- color: var(--error-text);
3508
- }
3509
-
3510
- .result-badge.number {
3511
- background: var(--accent-blue-light);
3512
- color: var(--accent-blue);
3513
- border: 1px solid var(--accent-blue);
3514
- }
3515
-
3516
- .result-badge.string {
3517
- background: var(--warning-bg);
3518
- color: var(--warning-text);
3519
- border: 1px solid var(--warning-border);
3520
- }
3521
-
3522
- .result-badge.null,
3523
- .result-badge.undefined {
3524
- background: var(--bg-tertiary);
3525
- color: var(--text-muted);
3526
- border: 1px solid var(--border-primary);
3527
- }
3528
-
3529
- .result-badge.array,
3530
- .result-badge.object {
3531
- background: #e0e7ff;
3532
- color: #4f46e5;
3533
- border: 1px solid #c7d2fe;
3534
- }
3535
-
3536
- .logic-editor[data-theme="dark"] .result-badge.array,
3537
- .logic-editor[data-theme="dark"] .result-badge.object {
3538
- background: #312e81;
3539
- color: #a5b4fc;
3540
- border-color: #4338ca;
3541
- }
3542
-
3543
- .result-badge.error {
3544
- background: var(--error-bg);
3545
- color: var(--error-text);
3546
- border: 1px solid var(--error-border);
3547
- }
3548
-
3549
- .result-badge .result-icon {
3550
- display: inline-flex;
3551
- align-items: center;
3552
- justify-content: center;
3553
- width: 12px;
3554
- height: 12px;
3555
- background: var(--error-text);
3556
- color: white;
3557
- border-radius: 50%;
3558
- font-size: 9px;
3559
- font-weight: bold;
3560
- flex-shrink: 0;
3561
- }
3562
-
3563
- /* Result badge container in nodes */
3564
- .node-result-container {
3565
- padding: 4px 8px;
3566
- border-top: 1px solid var(--border-light);
3567
- display: flex;
3568
- align-items: center;
3569
- justify-content: flex-end;
3570
- }
3571
-
3572
- /* Variable and Literal result positioning */
3573
- .variable-result,
3574
- .literal-result {
3575
- margin-left: auto;
3576
- flex-shrink: 0;
3577
- }
3578
-
3579
- /* ============================================
3580
- Expression Syntax Highlighting
3581
- ============================================ */
3582
-
3583
- .expr-operator {
3584
- color: #cf222e;
3585
- font-weight: 600;
3586
- }
3587
-
3588
- .expr-keyword {
3589
- color: #8250df;
3590
- font-weight: 600;
3591
- }
3592
-
3593
- .expr-comparison {
3594
- color: #0550ae;
3595
- font-weight: 500;
3596
- }
3597
-
3598
- .expr-arithmetic {
3599
- color: #0550ae;
3600
- }
3601
-
3602
- .expr-unary {
3603
- color: #cf222e;
3604
- font-weight: 500;
3605
- }
3606
-
3607
- .expr-function {
3608
- color: #8250df;
3609
- }
3610
-
3611
- .expr-string {
3612
- color: #0a3069;
3613
- }
3614
-
3615
- .expr-number {
3616
- color: #0550ae;
3617
- }
3618
-
3619
- .expr-boolean {
3620
- color: #cf222e;
3621
- }
3622
-
3623
- .expr-null {
3624
- color: #6e7781;
3625
- font-style: italic;
3626
- }
3627
-
3628
- .expr-variable {
3629
- color: #953800;
3630
- }
3631
-
3632
- .expr-bracket {
3633
- color: #24292f;
3634
- }
3635
-
3636
- .expr-punctuation {
3637
- color: #24292f;
3638
- }
3639
-
3640
- /* Dark mode expression syntax */
3641
- .logic-editor[data-theme="dark"] .expr-operator {
3642
- color: #ff7b72;
3643
- }
3644
-
3645
- .logic-editor[data-theme="dark"] .expr-keyword {
3646
- color: #d2a8ff;
3647
- }
3648
-
3649
- .logic-editor[data-theme="dark"] .expr-comparison {
3650
- color: #79c0ff;
3651
- }
3652
-
3653
- .logic-editor[data-theme="dark"] .expr-arithmetic {
3654
- color: #79c0ff;
3655
- }
3656
-
3657
- .logic-editor[data-theme="dark"] .expr-unary {
3658
- color: #ff7b72;
3659
- }
3660
-
3661
- .logic-editor[data-theme="dark"] .expr-function {
3662
- color: #d2a8ff;
3663
- }
3664
-
3665
- .logic-editor[data-theme="dark"] .expr-string {
3666
- color: #a5d6ff;
3667
- }
3668
-
3669
- .logic-editor[data-theme="dark"] .expr-number {
3670
- color: #79c0ff;
3671
- }
3672
-
3673
- .logic-editor[data-theme="dark"] .expr-boolean {
3674
- color: #ff7b72;
3675
- }
3676
-
3677
- .logic-editor[data-theme="dark"] .expr-null {
3678
- color: #8b949e;
3679
- }
3680
-
3681
- .logic-editor[data-theme="dark"] .expr-variable {
3682
- color: #ffa657;
3683
- }
3684
-
3685
- .logic-editor[data-theme="dark"] .expr-bracket {
3686
- color: #c9d1d9;
3687
- }
3688
-
3689
- .logic-editor[data-theme="dark"] .expr-punctuation {
3690
- color: #c9d1d9;
3691
- }
3692
-
3693
- /* ============================================
3694
- Debug Info Bubble Styles
3695
- ============================================ */
3696
-
3697
- .debug-info-bubble {
3698
- position: absolute;
3699
- background: var(--debug-popover-bg);
3700
- color: var(--debug-popover-text);
3701
- border-radius: 8px;
3702
- padding: 10px 12px;
3703
- font-size: 11px;
3704
- z-index: 9999;
3705
- box-shadow: 0 4px 16px var(--debug-popover-shadow);
3706
- min-width: 180px;
3707
- max-width: 280px;
3708
- pointer-events: auto;
3709
- }
3710
-
3711
- .debug-info-bubble.debug-info-top {
3712
- bottom: 100%;
3713
- left: 50%;
3714
- transform: translateX(-50%);
3715
- margin-bottom: 8px;
3716
- }
3717
-
3718
- .debug-info-bubble.debug-info-right {
3719
- left: 100%;
3720
- top: 50%;
3721
- transform: translateY(-50%);
3722
- margin-left: 8px;
3723
- }
3724
-
3725
- .debug-info-bubble.debug-info-bottom {
3726
- top: 100%;
3727
- left: 50%;
3728
- transform: translateX(-50%);
3729
- margin-top: 8px;
3730
- }
3731
-
3732
- /* Arrow indicator */
3733
- .debug-info-bubble.debug-info-top::after {
3734
- content: '';
3735
- position: absolute;
3736
- top: 100%;
3737
- left: 50%;
3738
- transform: translateX(-50%);
3739
- border: 6px solid transparent;
3740
- border-top-color: var(--debug-popover-bg);
3741
- pointer-events: none;
3742
- }
3743
-
3744
- .debug-info-bubble.debug-info-right::after {
3745
- content: '';
3746
- position: absolute;
3747
- right: 100%;
3748
- top: 50%;
3749
- transform: translateY(-50%);
3750
- border: 6px solid transparent;
3751
- border-right-color: var(--debug-popover-bg);
3752
- pointer-events: none;
3753
- }
3754
-
3755
- .debug-info-bubble.debug-info-bottom::after {
3756
- content: '';
3757
- position: absolute;
3758
- bottom: 100%;
3759
- left: 50%;
3760
- transform: translateX(-50%);
3761
- border: 6px solid transparent;
3762
- border-bottom-color: var(--debug-popover-bg);
3763
- pointer-events: none;
3764
- }
3765
-
3766
- .debug-info-bubble.error {
3767
- background: var(--debug-popover-error-bg);
3768
- border: 1px solid var(--debug-error-color);
3769
- }
3770
-
3771
- .debug-info-bubble.error.debug-info-top::after {
3772
- border-top-color: var(--debug-popover-error-bg);
3773
- }
3774
-
3775
- .debug-info-bubble.error.debug-info-right::after {
3776
- border-right-color: var(--debug-popover-error-bg);
3777
- }
3778
-
3779
- .debug-info-bubble.error.debug-info-bottom::after {
3780
- border-bottom-color: var(--debug-popover-error-bg);
3781
- }
3782
-
3783
- .debug-info-bubble.error .debug-info-label {
3784
- color: var(--debug-error-color);
3785
- }
3786
-
3787
- .debug-info-bubble.error .debug-info-value.debug-info-error {
3788
- background: rgba(239, 68, 68, 0.1);
3789
- border: 1px solid rgba(239, 68, 68, 0.2);
3790
- }
3791
-
3792
- .debug-info-iteration {
3793
- font-size: 10px;
3794
- font-weight: 600;
3795
- color: var(--debug-iteration-color);
3796
- margin-bottom: 8px;
3797
- padding-bottom: 6px;
3798
- border-bottom: 1px solid var(--debug-border-color);
3799
- }
3800
-
3801
- .debug-info-section {
3802
- margin-bottom: 8px;
3803
- }
3804
-
3805
- .debug-info-section:last-child {
3806
- margin-bottom: 0;
3807
- }
3808
-
3809
- .debug-info-label {
3810
- display: block;
3811
- font-size: 10px;
3812
- font-weight: 600;
3813
- color: var(--debug-label-color);
3814
- text-transform: uppercase;
3815
- letter-spacing: 0.5px;
3816
- margin-bottom: 4px;
3817
- }
3818
-
3819
- .debug-info-value {
3820
- margin: 0;
3821
- padding: 4px 6px;
3822
- background: var(--debug-popover-value-bg);
3823
- border-radius: 4px;
3824
- font-family: 'SF Mono', 'Consolas', monospace;
3825
- font-size: 10px;
3826
- white-space: pre-wrap;
3827
- word-break: break-word;
3828
- max-height: 100px;
3829
- overflow: auto;
3830
- }
3831
-
3832
- /* Custom scrollbar styling */
3833
- .debug-info-value::-webkit-scrollbar {
3834
- width: 6px;
3835
- height: 6px;
3836
- }
3837
-
3838
- .debug-info-value::-webkit-scrollbar-track {
3839
- background: var(--debug-popover-value-bg);
3840
- border-radius: 3px;
3841
- }
3842
-
3843
- .debug-info-value::-webkit-scrollbar-thumb {
3844
- background: var(--debug-label-color);
3845
- border-radius: 3px;
3846
- opacity: 0.5;
3847
- }
3848
-
3849
- .debug-info-value::-webkit-scrollbar-thumb:hover {
3850
- opacity: 0.7;
3851
- }
3852
-
3853
- .debug-info-error {
3854
- color: var(--debug-value-false);
3855
- }
3856
-
3857
- .debug-info-result {
3858
- display: flex;
3859
- flex-direction: column;
3860
- gap: 4px;
3861
- }
3862
-
3863
- /* Color-coded value classes */
3864
- .debug-value-boolean-true {
3865
- color: var(--debug-value-true);
3866
- }
3867
-
3868
- .debug-value-boolean-false {
3869
- color: var(--debug-value-false);
3870
- }
3871
-
3872
- .debug-value-number {
3873
- color: var(--debug-value-number);
3874
- }
3875
-
3876
- .debug-value-string {
3877
- color: var(--debug-value-string);
3878
- }
3879
-
3880
- .debug-value-array,
3881
- .debug-value-object {
3882
- color: var(--debug-value-array);
3883
- }
3884
-
3885
- .debug-value-null,
3886
- .debug-value-undefined {
3887
- color: var(--debug-value-null);
3888
- }
3889
-
3890
- .debug-info-simple-value {
3891
- font-family: 'SF Mono', 'Consolas', monospace;
3892
- font-size: 12px;
3893
- font-weight: 500;
3894
- }
3895
-
3896
- /* JSON Syntax Highlighting */
3897
- .json-syntax-key {
3898
- color: var(--syntax-key);
3899
- }
3900
-
3901
- .json-syntax-string {
3902
- color: var(--debug-value-string);
3903
- }
3904
-
3905
- .json-syntax-number {
3906
- color: var(--debug-value-number);
3907
- }
3908
-
3909
- .json-syntax-boolean-true {
3910
- color: var(--debug-value-true);
3911
- }
3912
-
3913
- .json-syntax-boolean-false {
3914
- color: var(--debug-value-false);
3915
- }
3916
-
3917
- .json-syntax-null {
3918
- color: var(--debug-value-null);
3919
- }
3920
-
3921
- .json-syntax-punctuation {
3922
- color: var(--syntax-punctuation);
3923
- }
3924
- .logic-editor {
3925
- width: 100%;
3926
- height: 100%;
3927
- position: relative;
3928
- background: var(--bg-tertiary);
3929
- border-radius: 8px;
3930
- overflow: hidden;
3931
- display: flex;
3932
- flex-direction: column;
3933
- }
3934
-
3935
- /* Body: contains main canvas (full size) + floating properties panel */
3936
- .logic-editor-body {
3937
- flex: 1;
3938
- min-height: 0;
3939
- position: relative;
3940
- }
3941
-
3942
- .logic-editor-main {
3943
- width: 100%;
3944
- height: 100%;
3945
- }
3946
-
3947
- /* ============================================================================
3948
- Toolbar
3949
- ============================================================================ */
3950
-
3951
- .logic-editor-toolbar {
3952
- display: flex;
3953
- align-items: center;
3954
- height: 44px;
3955
- padding: 0 16px;
3956
- border-bottom: 1px solid var(--border-light, #e8e8e8);
3957
- background: var(--bg-secondary, #ffffff);
3958
- flex-shrink: 0;
3959
- gap: 10px;
3960
- overflow-x: auto;
3961
- -webkit-overflow-scrolling: touch;
3962
- scrollbar-width: none;
3963
- }
3964
-
3965
- .logic-editor-toolbar::-webkit-scrollbar {
3966
- display: none;
3967
- }
3968
-
3969
- .logic-editor[data-theme="dark"] .logic-editor-toolbar {
3970
- background: var(--bg-secondary, #1e1e1e);
3971
- border-bottom-color: var(--border-color, #3e3e3e);
3972
- }
3973
-
3974
- .logic-editor-toolbar-spacer {
3975
- flex: 1;
3976
- }
3977
-
3978
- .logic-editor-toolbar .dl-preserve-structure-toggle {
3979
- display: flex;
3980
- align-items: center;
3981
- gap: 6px;
3982
- font-size: 12px;
3983
- color: var(--text-secondary, #666);
3984
- cursor: pointer;
3985
- user-select: none;
3986
- white-space: nowrap;
3987
- flex-shrink: 0;
3988
- }
3989
-
3990
- .logic-editor-toolbar .dl-preserve-structure-toggle input[type="checkbox"] {
3991
- margin: 0;
3992
- cursor: pointer;
3993
- }
3994
-
3995
- /* Shared toolbar button style (undo/redo, etc.) */
3996
- .dl-toolbar-btn {
3997
- display: flex;
3998
- align-items: center;
3999
- justify-content: center;
4000
- width: 28px;
4001
- height: 28px;
4002
- padding: 0;
4003
- background: transparent;
4004
- border: none;
4005
- border-radius: 5px;
4006
- color: var(--text-secondary, #666);
4007
- cursor: pointer;
4008
- transition: background 0.15s, color 0.15s;
4009
- flex-shrink: 0;
4010
- }
4011
-
4012
- .dl-toolbar-btn:hover:not(:disabled) {
4013
- background: var(--bg-hover, #f0f0f0);
4014
- color: var(--text-primary, #1a1a1a);
4015
- }
4016
-
4017
- .dl-toolbar-btn:disabled {
4018
- opacity: 0.35;
4019
- cursor: not-allowed;
4020
- }
4021
-
4022
- .logic-editor[data-theme="dark"] .dl-toolbar-btn {
4023
- color: var(--text-secondary, #aaa);
4024
- }
4025
-
4026
- .logic-editor[data-theme="dark"] .dl-toolbar-btn:hover:not(:disabled) {
4027
- background: var(--bg-hover, #3e3e3e);
4028
- color: var(--text-primary, #e0e0e0);
4029
- }
4030
-
4031
-
4032
- .logic-editor .react-flow {
4033
- width: 100%;
4034
- height: 100%;
4035
- }
4036
-
4037
- .logic-editor-empty {
4038
- position: absolute;
4039
- top: 50%;
4040
- left: 50%;
4041
- transform: translate(-50%, -50%);
4042
- text-align: center;
4043
- color: var(--text-tertiary);
4044
- pointer-events: none;
4045
- }
4046
-
4047
- .logic-editor-empty p {
4048
- margin: 0;
4049
- font-size: 16px;
4050
- }
4051
-
4052
- .logic-editor-empty-hint {
4053
- margin-top: 8px !important;
4054
- font-size: 13px !important;
4055
- color: var(--text-muted);
4056
- }
4057
-
4058
- /* ReactFlow overrides */
4059
- .logic-editor .react-flow__controls {
4060
- box-shadow: 0 2px 8px var(--node-shadow);
4061
- border-radius: 8px;
4062
- overflow: hidden;
4063
- }
4064
-
4065
- .logic-editor .react-flow__controls-button {
4066
- background: var(--bg-secondary);
4067
- border: none;
4068
- border-bottom: 1px solid var(--border-light);
4069
- color: var(--text-secondary);
4070
- fill: var(--text-secondary);
4071
- }
4072
-
4073
- .logic-editor .react-flow__controls-button:hover {
4074
- background: var(--bg-hover);
4075
- }
4076
-
4077
- .logic-editor .react-flow__controls-button:last-child {
4078
- border-bottom: none;
4079
- }
4080
-
4081
- .logic-editor .react-flow__controls-button svg {
4082
- fill: var(--text-secondary);
4083
- }
4084
-
4085
- .logic-editor .react-flow__edge-path {
4086
- stroke: #b1b1b7;
4087
- stroke-width: 2;
4088
- }
4089
-
4090
- .logic-editor .react-flow__edge.selected .react-flow__edge-path {
4091
- stroke: var(--accent-blue);
4092
- stroke-width: 3;
4093
- }
4094
-
4095
- /* Dark mode edge colors */
4096
- .logic-editor[data-theme="dark"] .logic-editor .react-flow__edge-path {
4097
- stroke: #6b7280;
4098
- }
4099
-
4100
- /* Background pattern for dark mode */
4101
- .logic-editor[data-theme="dark"] .logic-editor .react-flow__background {
4102
- background: var(--bg-tertiary);
4103
- }
4104
-
4105
- /* Attribution removal - only if you have a paid license */
4106
- .logic-editor .react-flow__attribution {
4107
- display: none;
4108
- }
4109
-
4110
- /* Mobile toolbar adjustments */
4111
- @media (max-width: 1024px) {
4112
- .logic-editor-toolbar {
4113
- padding: 0 8px;
4114
- gap: 6px;
4115
- }
4116
-
4117
- .logic-editor-toolbar-spacer {
4118
- flex: 0 0 4px;
4119
- }
4120
-
4121
- .dl-toolbar-btn {
4122
- width: 40px;
4123
- height: 40px;
4124
- }
4125
-
4126
- .dl-preserve-structure-toggle span {
4127
- font-size: 11px;
4128
- }
4129
-
4130
- .dl-context-menu-item {
4131
- min-height: 44px;
4132
- padding: 10px 12px;
4133
- }
4134
- }
4135
-
4136
- /* (Undo/Redo now uses .dl-toolbar-btn inline in toolbar) */
4137
-
4138
- /* ============================================================================
4139
- Add Argument Button (shared by OperatorNode and VerticalCellNode)
4140
- ============================================================================ */
4141
-
4142
- .dl-add-arg-button {
4143
- display: flex;
4144
- align-items: center;
4145
- justify-content: center;
4146
- gap: 4px;
4147
- padding: 4px 8px;
4148
- margin: 4px 8px 8px;
4149
- border: 1.5px dashed var(--color-primary, #2563eb);
4150
- border-radius: 4px;
4151
- background: transparent;
4152
- color: var(--color-primary, #2563eb);
4153
- font-size: 11px;
4154
- font-family: inherit;
4155
- cursor: pointer;
4156
- opacity: 0.85;
4157
- transition: all 0.15s ease;
4158
- }
4159
-
4160
- .dl-add-arg-button:hover {
4161
- background: var(--color-primary, #2563eb);
4162
- color: white;
4163
- border-style: solid;
4164
- opacity: 1;
4165
- }
4166
-
4167
- .dl-add-arg-button-label {
4168
- font-weight: 500;
4169
- white-space: nowrap;
4170
- }
4171
-
4172
- /* Vertical cell variant - full width */
4173
- .dl-add-arg-button--vertical {
4174
- width: calc(100% - 16px);
4175
- }
4176
-
4177
- /* Dark mode */
4178
- .logic-editor[data-theme="dark"] .dl-add-arg-button {
4179
- border-color: var(--color-primary, #60a5fa);
4180
- color: var(--color-primary, #60a5fa);
4181
- }
4182
-
4183
- .logic-editor[data-theme="dark"] .dl-add-arg-button:hover {
4184
- background: var(--color-primary, #60a5fa);
4185
- color: var(--bg-primary, #121212);
4186
- }
4187
-
4188
- /* ============================================================================
4189
- Context Menu
4190
- ============================================================================ */
4191
-
4192
- .dl-context-menu {
4193
- position: fixed;
4194
- z-index: 1000;
4195
- min-width: 180px;
4196
- max-width: 280px;
4197
- background: var(--bg-primary, #ffffff);
4198
- border: 1px solid var(--border-color, #e0e0e0);
4199
- border-radius: 8px;
4200
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12), 0 2px 4px rgba(0, 0, 0, 0.08);
4201
- padding: 4px 0;
4202
- font-size: 13px;
4203
- outline: none;
4204
- }
4205
-
4206
- .logic-editor[data-theme="dark"] .dl-context-menu {
4207
- background: var(--bg-secondary, #1e1e1e);
4208
- border-color: var(--border-color, #3e3e3e);
4209
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4), 0 2px 4px rgba(0, 0, 0, 0.2);
4210
- }
4211
-
4212
- .dl-context-menu-item {
4213
- display: flex;
4214
- align-items: center;
4215
- gap: 8px;
4216
- width: 100%;
4217
- padding: 8px 12px;
4218
- background: none;
4219
- border: none;
4220
- color: var(--text-primary, #1a1a1a);
4221
- font-size: 13px;
4222
- font-family: inherit;
4223
- text-align: left;
4224
- cursor: pointer;
4225
- transition: background 0.1s;
4226
- }
4227
-
4228
- .dl-context-menu-item:hover,
4229
- .dl-context-menu-item:focus {
4230
- background: var(--bg-hover, #f0f0f0);
4231
- outline: none;
4232
- }
4233
-
4234
- .dl-context-menu-item:disabled {
4235
- color: var(--text-muted, #999);
4236
- cursor: not-allowed;
4237
- }
4238
-
4239
- .dl-context-menu-item:disabled:hover {
4240
- background: none;
4241
- }
4242
-
4243
- .logic-editor[data-theme="dark"] .dl-context-menu-item {
4244
- color: var(--text-primary, #e0e0e0);
4245
- }
4246
-
4247
- .logic-editor[data-theme="dark"] .dl-context-menu-item:hover,
4248
- .logic-editor[data-theme="dark"] .dl-context-menu-item:focus {
4249
- background: var(--bg-hover, #3e3e3e);
4250
- }
4251
-
4252
- .dl-context-menu-item-icon {
4253
- display: flex;
4254
- align-items: center;
4255
- justify-content: center;
4256
- width: 16px;
4257
- height: 16px;
4258
- flex-shrink: 0;
4259
- color: var(--text-secondary, #666);
4260
- }
4261
-
4262
- .logic-editor[data-theme="dark"] .dl-context-menu-item-icon {
4263
- color: var(--text-secondary, #aaa);
4264
- }
4265
-
4266
- .dl-context-menu-item-label {
4267
- flex: 1;
4268
- }
4269
-
4270
- .dl-context-menu-item-shortcut {
4271
- font-size: 11px;
4272
- color: var(--text-muted, #999);
4273
- margin-left: auto;
4274
- padding-left: 16px;
4275
- }
4276
-
4277
- .dl-context-menu-item-arrow {
4278
- color: var(--text-muted, #999);
4279
- margin-left: auto;
4280
- }
4281
-
4282
- .dl-context-menu-divider {
4283
- height: 1px;
4284
- background: var(--border-light, #e8e8e8);
4285
- margin: 4px 8px;
4286
- }
4287
-
4288
- .logic-editor[data-theme="dark"] .dl-context-menu-divider {
4289
- background: var(--border-color, #3e3e3e);
4290
- }
4291
-
4292
- .dl-context-menu-submenu {
4293
- position: relative;
4294
- }
4295
-
4296
- .dl-context-menu-submenu-content {
4297
- position: absolute;
4298
- left: 100%;
4299
- top: -4px;
4300
- margin-left: 2px;
4301
- }
4302
-
4303
- /* Danger variant for destructive actions */
4304
- .dl-context-menu-item--danger {
4305
- color: var(--color-error, #dc2626);
4306
- }
4307
-
4308
- .dl-context-menu-item--danger .dl-context-menu-item-icon {
4309
- color: var(--color-error, #dc2626);
4310
- }
4311
-
4312
- .dl-context-menu-item--danger:hover:not(:disabled) {
4313
- background: rgba(220, 38, 38, 0.1);
4314
- }
4315
-
4316
- .logic-editor[data-theme="dark"] .dl-context-menu-item--danger:hover:not(:disabled) {
4317
- background: rgba(239, 68, 68, 0.15);
4318
- }
4319
- /*$vite$:1*//* this gets exported as style.css and can be used for the default theming */
4320
- /* these are the necessary styles for React/Svelte Flow, they get used by base.css and style.css */
4321
- .react-flow {
4322
- direction: ltr;
4323
-
4324
- --xy-edge-stroke-default: #b1b1b7;
4325
- --xy-edge-stroke-width-default: 1;
4326
- --xy-edge-stroke-selected-default: #555;
4327
-
4328
- --xy-connectionline-stroke-default: #b1b1b7;
4329
- --xy-connectionline-stroke-width-default: 1;
4330
-
4331
- --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);
4332
-
4333
- --xy-minimap-background-color-default: #fff;
4334
- --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);
4335
- --xy-minimap-mask-stroke-color-default: transparent;
4336
- --xy-minimap-mask-stroke-width-default: 1;
4337
- --xy-minimap-node-background-color-default: #e2e2e2;
4338
- --xy-minimap-node-stroke-color-default: transparent;
4339
- --xy-minimap-node-stroke-width-default: 2;
4340
-
4341
- --xy-background-color-default: transparent;
4342
- --xy-background-pattern-dots-color-default: #91919a;
4343
- --xy-background-pattern-lines-color-default: #eee;
4344
- --xy-background-pattern-cross-color-default: #e2e2e2;
4345
- background-color: var(--xy-background-color, var(--xy-background-color-default));
4346
- --xy-node-color-default: inherit;
4347
- --xy-node-border-default: 1px solid #1a192b;
4348
- --xy-node-background-color-default: #fff;
4349
- --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
4350
- --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
4351
- --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;
4352
- --xy-node-border-radius-default: 3px;
4353
-
4354
- --xy-handle-background-color-default: #1a192b;
4355
- --xy-handle-border-color-default: #fff;
4356
-
4357
- --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);
4358
- --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);
4359
-
4360
- --xy-controls-button-background-color-default: #fefefe;
4361
- --xy-controls-button-background-color-hover-default: #f4f4f4;
4362
- --xy-controls-button-color-default: inherit;
4363
- --xy-controls-button-color-hover-default: inherit;
4364
- --xy-controls-button-border-color-default: #eee;
4365
- --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
4366
-
4367
- --xy-edge-label-background-color-default: #ffffff;
4368
- --xy-edge-label-color-default: inherit;
4369
- --xy-resize-background-color-default: #3367d9;
4370
- }
4371
- .react-flow.dark {
4372
- --xy-edge-stroke-default: #3e3e3e;
4373
- --xy-edge-stroke-width-default: 1;
4374
- --xy-edge-stroke-selected-default: #727272;
4375
-
4376
- --xy-connectionline-stroke-default: #b1b1b7;
4377
- --xy-connectionline-stroke-width-default: 1;
4378
-
4379
- --xy-attribution-background-color-default: rgba(150, 150, 150, 0.25);
4380
-
4381
- --xy-minimap-background-color-default: #141414;
4382
- --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);
4383
- --xy-minimap-mask-stroke-color-default: transparent;
4384
- --xy-minimap-mask-stroke-width-default: 1;
4385
- --xy-minimap-node-background-color-default: #2b2b2b;
4386
- --xy-minimap-node-stroke-color-default: transparent;
4387
- --xy-minimap-node-stroke-width-default: 2;
4388
-
4389
- --xy-background-color-default: #141414;
4390
- --xy-background-pattern-dots-color-default: #777;
4391
- --xy-background-pattern-lines-color-default: #777;
4392
- --xy-background-pattern-cross-color-default: #777;
4393
- --xy-node-color-default: #f8f8f8;
4394
- --xy-node-border-default: 1px solid #3c3c3c;
4395
- --xy-node-background-color-default: #1e1e1e;
4396
- --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
4397
- --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);
4398
- --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;
4399
-
4400
- --xy-handle-background-color-default: #bebebe;
4401
- --xy-handle-border-color-default: #1e1e1e;
4402
-
4403
- --xy-selection-background-color-default: rgba(200, 200, 220, 0.08);
4404
- --xy-selection-border-default: 1px dotted rgba(200, 200, 220, 0.8);
4405
-
4406
- --xy-controls-button-background-color-default: #2b2b2b;
4407
- --xy-controls-button-background-color-hover-default: #3e3e3e;
4408
- --xy-controls-button-color-default: #f8f8f8;
4409
- --xy-controls-button-color-hover-default: #fff;
4410
- --xy-controls-button-border-color-default: #5b5b5b;
4411
- --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
4412
-
4413
- --xy-edge-label-background-color-default: #141414;
4414
- --xy-edge-label-color-default: #f8f8f8;
4415
- }
4416
- .react-flow__background {
4417
- background-color: var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));
4418
- pointer-events: none;
4419
- z-index: -1;
4420
- }
4421
- .react-flow__container {
4422
- position: absolute;
4423
- width: 100%;
4424
- height: 100%;
4425
- top: 0;
4426
- left: 0;
4427
- }
4428
- .react-flow__pane {
4429
- z-index: 1;
4430
- }
4431
- .react-flow__pane.draggable {
4432
- cursor: grab;
4433
- }
4434
- .react-flow__pane.dragging {
4435
- cursor: grabbing;
4436
- }
4437
- .react-flow__pane.selection {
4438
- cursor: pointer;
4439
- }
4440
- .react-flow__viewport {
4441
- transform-origin: 0 0;
4442
- z-index: 2;
4443
- pointer-events: none;
4444
- }
4445
- .react-flow__renderer {
4446
- z-index: 4;
4447
- }
4448
- .react-flow__selection {
4449
- z-index: 6;
4450
- }
4451
- .react-flow__nodesselection-rect:focus,
4452
- .react-flow__nodesselection-rect:focus-visible {
4453
- outline: none;
4454
- }
4455
- .react-flow__edge-path {
4456
- stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
4457
- stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));
4458
- fill: none;
4459
- }
4460
- .react-flow__connection-path {
4461
- stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));
4462
- stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));
4463
- fill: none;
4464
- }
4465
- .react-flow .react-flow__edges {
4466
- position: absolute;
4467
- }
4468
- .react-flow .react-flow__edges svg {
4469
- overflow: visible;
4470
- position: absolute;
4471
- pointer-events: none;
4472
- }
4473
- .react-flow__edge {
4474
- pointer-events: visibleStroke;
4475
- }
4476
- .react-flow__edge.selectable {
4477
- cursor: pointer;
4478
- }
4479
- .react-flow__edge.animated path {
4480
- stroke-dasharray: 5;
4481
- animation: dashdraw 0.5s linear infinite;
4482
- }
4483
- .react-flow__edge.animated path.react-flow__edge-interaction {
4484
- stroke-dasharray: none;
4485
- animation: none;
4486
- }
4487
- .react-flow__edge.inactive {
4488
- pointer-events: none;
4489
- }
4490
- .react-flow__edge.selected,
4491
- .react-flow__edge:focus,
4492
- .react-flow__edge:focus-visible {
4493
- outline: none;
4494
- }
4495
- .react-flow__edge.selected .react-flow__edge-path,
4496
- .react-flow__edge.selectable:focus .react-flow__edge-path,
4497
- .react-flow__edge.selectable:focus-visible .react-flow__edge-path {
4498
- stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));
4499
- }
4500
- .react-flow__edge-textwrapper {
4501
- pointer-events: all;
4502
- }
4503
- .react-flow__edge .react-flow__edge-text {
4504
- pointer-events: none;
4505
- -webkit-user-select: none;
4506
- -moz-user-select: none;
4507
- user-select: none;
4508
- }
4509
- /* Arrowhead marker styles - use CSS custom properties as default */
4510
- .react-flow__arrowhead polyline {
4511
- stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
4512
- }
4513
- .react-flow__arrowhead polyline.arrowclosed {
4514
- fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
4515
- }
4516
- .react-flow__connection {
4517
- pointer-events: none;
4518
- }
4519
- .react-flow__connection .animated {
4520
- stroke-dasharray: 5;
4521
- animation: dashdraw 0.5s linear infinite;
4522
- }
4523
- svg.react-flow__connectionline {
4524
- z-index: 1001;
4525
- overflow: visible;
4526
- position: absolute;
4527
- }
4528
- .react-flow__nodes {
4529
- pointer-events: none;
4530
- transform-origin: 0 0;
4531
- }
4532
- .react-flow__node {
4533
- position: absolute;
4534
- -webkit-user-select: none;
4535
- -moz-user-select: none;
4536
- user-select: none;
4537
- pointer-events: all;
4538
- transform-origin: 0 0;
4539
- box-sizing: border-box;
4540
- cursor: default;
4541
- }
4542
- .react-flow__node.selectable {
4543
- cursor: pointer;
4544
- }
4545
- .react-flow__node.draggable {
4546
- cursor: grab;
4547
- pointer-events: all;
4548
- }
4549
- .react-flow__node.draggable.dragging {
4550
- cursor: grabbing;
4551
- }
4552
- .react-flow__nodesselection {
4553
- z-index: 3;
4554
- transform-origin: left top;
4555
- pointer-events: none;
4556
- }
4557
- .react-flow__nodesselection-rect {
4558
- position: absolute;
4559
- pointer-events: all;
4560
- cursor: grab;
4561
- }
4562
- .react-flow__handle {
4563
- position: absolute;
4564
- pointer-events: none;
4565
- min-width: 5px;
4566
- min-height: 5px;
4567
- width: 6px;
4568
- height: 6px;
4569
- background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));
4570
- border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));
4571
- border-radius: 100%;
4572
- }
4573
- .react-flow__handle.connectingfrom {
4574
- pointer-events: all;
4575
- }
4576
- .react-flow__handle.connectionindicator {
4577
- pointer-events: all;
4578
- cursor: crosshair;
4579
- }
4580
- .react-flow__handle-bottom {
4581
- top: auto;
4582
- left: 50%;
4583
- bottom: 0;
4584
- transform: translate(-50%, 50%);
4585
- }
4586
- .react-flow__handle-top {
4587
- top: 0;
4588
- left: 50%;
4589
- transform: translate(-50%, -50%);
4590
- }
4591
- .react-flow__handle-left {
4592
- top: 50%;
4593
- left: 0;
4594
- transform: translate(-50%, -50%);
4595
- }
4596
- .react-flow__handle-right {
4597
- top: 50%;
4598
- right: 0;
4599
- transform: translate(50%, -50%);
4600
- }
4601
- .react-flow__edgeupdater {
4602
- cursor: move;
4603
- pointer-events: all;
4604
- }
4605
- .react-flow__pane.selection .react-flow__panel {
4606
- pointer-events: none;
4607
- }
4608
- .react-flow__panel {
4609
- position: absolute;
4610
- z-index: 5;
4611
- margin: 15px;
4612
- }
4613
- .react-flow__panel.top {
4614
- top: 0;
4615
- }
4616
- .react-flow__panel.bottom {
4617
- bottom: 0;
4618
- }
4619
- .react-flow__panel.top.center, .react-flow__panel.bottom.center {
4620
- left: 50%;
4621
- transform: translateX(-15px) translateX(-50%);
4622
- }
4623
- .react-flow__panel.left {
4624
- left: 0;
4625
- }
4626
- .react-flow__panel.right {
4627
- right: 0;
4628
- }
4629
- .react-flow__panel.left.center, .react-flow__panel.right.center {
4630
- top: 50%;
4631
- transform: translateY(-15px) translateY(-50%);
4632
- }
4633
- .react-flow__attribution {
4634
- font-size: 10px;
4635
- background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));
4636
- padding: 2px 3px;
4637
- margin: 0;
4638
- }
4639
- .react-flow__attribution a {
4640
- text-decoration: none;
4641
- color: #999;
4642
- }
4643
- @keyframes dashdraw {
4644
- from {
4645
- stroke-dashoffset: 10;
4646
- }
4647
- }
4648
- .react-flow__edgelabel-renderer {
4649
- position: absolute;
4650
- width: 100%;
4651
- height: 100%;
4652
- pointer-events: none;
4653
- -webkit-user-select: none;
4654
- -moz-user-select: none;
4655
- user-select: none;
4656
- left: 0;
4657
- top: 0;
4658
- }
4659
- .react-flow__viewport-portal {
4660
- position: absolute;
4661
- width: 100%;
4662
- height: 100%;
4663
- left: 0;
4664
- top: 0;
4665
- -webkit-user-select: none;
4666
- -moz-user-select: none;
4667
- user-select: none;
4668
- }
4669
- .react-flow__minimap {
4670
- background: var(
4671
- --xy-minimap-background-color-props,
4672
- var(--xy-minimap-background-color, var(--xy-minimap-background-color-default))
4673
- );
4674
- }
4675
- .react-flow__minimap-svg {
4676
- display: block;
4677
- }
4678
- .react-flow__minimap-mask {
4679
- fill: var(
4680
- --xy-minimap-mask-background-color-props,
4681
- var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default))
4682
- );
4683
- stroke: var(
4684
- --xy-minimap-mask-stroke-color-props,
4685
- var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default))
4686
- );
4687
- stroke-width: var(
4688
- --xy-minimap-mask-stroke-width-props,
4689
- var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default))
4690
- );
4691
- }
4692
- .react-flow__minimap-node {
4693
- fill: var(
4694
- --xy-minimap-node-background-color-props,
4695
- var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default))
4696
- );
4697
- stroke: var(
4698
- --xy-minimap-node-stroke-color-props,
4699
- var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default))
4700
- );
4701
- stroke-width: var(
4702
- --xy-minimap-node-stroke-width-props,
4703
- var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default))
4704
- );
4705
- }
4706
- .react-flow__background-pattern.dots {
4707
- fill: var(
4708
- --xy-background-pattern-color-props,
4709
- var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default))
4710
- );
4711
- }
4712
- .react-flow__background-pattern.lines {
4713
- stroke: var(
4714
- --xy-background-pattern-color-props,
4715
- var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default))
4716
- );
4717
- }
4718
- .react-flow__background-pattern.cross {
4719
- stroke: var(
4720
- --xy-background-pattern-color-props,
4721
- var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default))
4722
- );
4723
- }
4724
- .react-flow__controls {
4725
- display: flex;
4726
- flex-direction: column;
4727
- box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));
4728
- }
4729
- .react-flow__controls.horizontal {
4730
- flex-direction: row;
4731
- }
4732
- .react-flow__controls-button {
4733
- display: flex;
4734
- justify-content: center;
4735
- align-items: center;
4736
- height: 26px;
4737
- width: 26px;
4738
- padding: 4px;
4739
- border: none;
4740
- background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));
4741
- border-bottom: 1px solid
4742
- var(
4743
- --xy-controls-button-border-color-props,
4744
- var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))
4745
- );
4746
- color: var(
4747
- --xy-controls-button-color-props,
4748
- var(--xy-controls-button-color, var(--xy-controls-button-color-default))
4749
- );
4750
- cursor: pointer;
4751
- -webkit-user-select: none;
4752
- -moz-user-select: none;
4753
- user-select: none;
4754
- }
4755
- .react-flow__controls-button svg {
4756
- width: 100%;
4757
- max-width: 12px;
4758
- max-height: 12px;
4759
- fill: currentColor;
4760
- }
4761
- .react-flow__edge.updating .react-flow__edge-path {
4762
- stroke: #777;
4763
- }
4764
- .react-flow__edge-text {
4765
- font-size: 10px;
4766
- }
4767
- .react-flow__node.selectable:focus,
4768
- .react-flow__node.selectable:focus-visible {
4769
- outline: none;
4770
- }
4771
- .react-flow__node-input,
4772
- .react-flow__node-default,
4773
- .react-flow__node-output,
4774
- .react-flow__node-group {
4775
- padding: 10px;
4776
- border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));
4777
- width: 150px;
4778
- font-size: 12px;
4779
- color: var(--xy-node-color, var(--xy-node-color-default));
4780
- text-align: center;
4781
- border: var(--xy-node-border, var(--xy-node-border-default));
4782
- background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));
4783
- }
4784
- .react-flow__node-input.selectable:hover, .react-flow__node-default.selectable:hover, .react-flow__node-output.selectable:hover, .react-flow__node-group.selectable:hover {
4785
- box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));
4786
- }
4787
- .react-flow__node-input.selectable.selected,
4788
- .react-flow__node-input.selectable:focus,
4789
- .react-flow__node-input.selectable:focus-visible,
4790
- .react-flow__node-default.selectable.selected,
4791
- .react-flow__node-default.selectable:focus,
4792
- .react-flow__node-default.selectable:focus-visible,
4793
- .react-flow__node-output.selectable.selected,
4794
- .react-flow__node-output.selectable:focus,
4795
- .react-flow__node-output.selectable:focus-visible,
4796
- .react-flow__node-group.selectable.selected,
4797
- .react-flow__node-group.selectable:focus,
4798
- .react-flow__node-group.selectable:focus-visible {
4799
- box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));
4800
- }
4801
- .react-flow__node-group {
4802
- background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));
4803
- }
4804
- .react-flow__nodesselection-rect,
4805
- .react-flow__selection {
4806
- background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));
4807
- border: var(--xy-selection-border, var(--xy-selection-border-default));
4808
- }
4809
- .react-flow__nodesselection-rect:focus,
4810
- .react-flow__nodesselection-rect:focus-visible,
4811
- .react-flow__selection:focus,
4812
- .react-flow__selection:focus-visible {
4813
- outline: none;
4814
- }
4815
- .react-flow__controls-button:hover {
4816
- background: var(
4817
- --xy-controls-button-background-color-hover-props,
4818
- var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default))
4819
- );
4820
- color: var(
4821
- --xy-controls-button-color-hover-props,
4822
- var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default))
4823
- );
4824
- }
4825
- .react-flow__controls-button:disabled {
4826
- pointer-events: none;
4827
- }
4828
- .react-flow__controls-button:disabled svg {
4829
- fill-opacity: 0.4;
4830
- }
4831
- .react-flow__controls-button:last-child {
4832
- border-bottom: none;
4833
- }
4834
- .react-flow__controls.horizontal .react-flow__controls-button {
4835
- border-bottom: none;
4836
- border-right: 1px solid
4837
- var(
4838
- --xy-controls-button-border-color-props,
4839
- var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default))
4840
- );
4841
- }
4842
- .react-flow__controls.horizontal .react-flow__controls-button:last-child {
4843
- border-right: none;
4844
- }
4845
- .react-flow__resize-control {
4846
- position: absolute;
4847
- }
4848
- .react-flow__resize-control.left,
4849
- .react-flow__resize-control.right {
4850
- cursor: ew-resize;
4851
- }
4852
- .react-flow__resize-control.top,
4853
- .react-flow__resize-control.bottom {
4854
- cursor: ns-resize;
4855
- }
4856
- .react-flow__resize-control.top.left,
4857
- .react-flow__resize-control.bottom.right {
4858
- cursor: nwse-resize;
4859
- }
4860
- .react-flow__resize-control.bottom.left,
4861
- .react-flow__resize-control.top.right {
4862
- cursor: nesw-resize;
4863
- }
4864
- /* handle styles */
4865
- .react-flow__resize-control.handle {
4866
- width: 5px;
4867
- height: 5px;
4868
- border: 1px solid #fff;
4869
- border-radius: 1px;
4870
- background-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
4871
- translate: -50% -50%;
4872
- }
4873
- .react-flow__resize-control.handle.left {
4874
- left: 0;
4875
- top: 50%;
4876
- }
4877
- .react-flow__resize-control.handle.right {
4878
- left: 100%;
4879
- top: 50%;
4880
- }
4881
- .react-flow__resize-control.handle.top {
4882
- left: 50%;
4883
- top: 0;
4884
- }
4885
- .react-flow__resize-control.handle.bottom {
4886
- left: 50%;
4887
- top: 100%;
4888
- }
4889
- .react-flow__resize-control.handle.top.left {
4890
- left: 0;
4891
- }
4892
- .react-flow__resize-control.handle.bottom.left {
4893
- left: 0;
4894
- }
4895
- .react-flow__resize-control.handle.top.right {
4896
- left: 100%;
4897
- }
4898
- .react-flow__resize-control.handle.bottom.right {
4899
- left: 100%;
4900
- }
4901
- /* line styles */
4902
- .react-flow__resize-control.line {
4903
- border-color: var(--xy-resize-background-color, var(--xy-resize-background-color-default));
4904
- border-width: 0;
4905
- border-style: solid;
4906
- }
4907
- .react-flow__resize-control.line.left,
4908
- .react-flow__resize-control.line.right {
4909
- width: 1px;
4910
- transform: translate(-50%, 0);
4911
- top: 0;
4912
- height: 100%;
4913
- }
4914
- .react-flow__resize-control.line.left {
4915
- left: 0;
4916
- border-left-width: 1px;
4917
- }
4918
- .react-flow__resize-control.line.right {
4919
- left: 100%;
4920
- border-right-width: 1px;
4921
- }
4922
- .react-flow__resize-control.line.top,
4923
- .react-flow__resize-control.line.bottom {
4924
- height: 1px;
4925
- transform: translate(0, -50%);
4926
- left: 0;
4927
- width: 100%;
4928
- }
4929
- .react-flow__resize-control.line.top {
4930
- top: 0;
4931
- border-top-width: 1px;
4932
- }
4933
- .react-flow__resize-control.line.bottom {
4934
- border-bottom-width: 1px;
4935
- top: 100%;
4936
- }
4937
- .react-flow__edge-textbg {
4938
- fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));
4939
- }
4940
- .react-flow__edge-text {
4941
- fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
4942
- }
4943
1
  /* ============================================
4944
2
  Dataflow Visualizer Styles
4945
3
  ============================================ */