PyDecisionGraph 0.3.2.post1__cp315-cp315-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. decision_graph/__infra__.pxd +1 -0
  2. decision_graph/__init__.pxd +1 -0
  3. decision_graph/__init__.py +39 -0
  4. decision_graph/decision_tree/__init__.pxd +2 -0
  5. decision_graph/decision_tree/__init__.py +85 -0
  6. decision_graph/decision_tree/bake/__infra__.pxd +502 -0
  7. decision_graph/decision_tree/bake/__init__.pxd +502 -0
  8. decision_graph/decision_tree/bake/__init__.py +29 -0
  9. decision_graph/decision_tree/bake/c_action.cp315-win_amd64.pyd +0 -0
  10. decision_graph/decision_tree/bake/c_action.h +324 -0
  11. decision_graph/decision_tree/bake/c_action.pxd +54 -0
  12. decision_graph/decision_tree/bake/c_action.pyi +126 -0
  13. decision_graph/decision_tree/bake/c_action.pyx +65 -0
  14. decision_graph/decision_tree/bake/c_allocator_protocol.cp315-win_amd64.pyd +0 -0
  15. decision_graph/decision_tree/bake/c_allocator_protocol.pxd +24 -0
  16. decision_graph/decision_tree/bake/c_allocator_protocol.pyi +61 -0
  17. decision_graph/decision_tree/bake/c_allocator_protocol.pyx +109 -0
  18. decision_graph/decision_tree/bake/c_bake.cp315-win_amd64.pyd +0 -0
  19. decision_graph/decision_tree/bake/c_bake.h +629 -0
  20. decision_graph/decision_tree/bake/c_bake.pxd +52 -0
  21. decision_graph/decision_tree/bake/c_bake.pyi +151 -0
  22. decision_graph/decision_tree/bake/c_bake.pyx +142 -0
  23. decision_graph/decision_tree/bake/c_collections.cp315-win_amd64.pyd +0 -0
  24. decision_graph/decision_tree/bake/c_collections.h +692 -0
  25. decision_graph/decision_tree/bake/c_collections.pxd +52 -0
  26. decision_graph/decision_tree/bake/c_collections.pyi +193 -0
  27. decision_graph/decision_tree/bake/c_collections.pyx +161 -0
  28. decision_graph/decision_tree/bake/c_const.cp315-win_amd64.pyd +0 -0
  29. decision_graph/decision_tree/bake/c_const.h +395 -0
  30. decision_graph/decision_tree/bake/c_const.pxd +56 -0
  31. decision_graph/decision_tree/bake/c_const.pyi +305 -0
  32. decision_graph/decision_tree/bake/c_const.pyx +278 -0
  33. decision_graph/decision_tree/bake/c_edge.cp315-win_amd64.pyd +0 -0
  34. decision_graph/decision_tree/bake/c_edge.h +511 -0
  35. decision_graph/decision_tree/bake/c_edge.pxd +117 -0
  36. decision_graph/decision_tree/bake/c_edge.pyi +192 -0
  37. decision_graph/decision_tree/bake/c_edge.pyx +270 -0
  38. decision_graph/decision_tree/bake/c_eval.h +848 -0
  39. decision_graph/decision_tree/bake/c_eval.pxd +40 -0
  40. decision_graph/decision_tree/bake/c_expr.cp315-win_amd64.pyd +0 -0
  41. decision_graph/decision_tree/bake/c_expr.h +1900 -0
  42. decision_graph/decision_tree/bake/c_expr.pxd +129 -0
  43. decision_graph/decision_tree/bake/c_expr.pyi +280 -0
  44. decision_graph/decision_tree/bake/c_expr.pyx +272 -0
  45. decision_graph/decision_tree/bake/c_hierarchy.cp315-win_amd64.pyd +0 -0
  46. decision_graph/decision_tree/bake/c_hierarchy.h +731 -0
  47. decision_graph/decision_tree/bake/c_hierarchy.pxd +71 -0
  48. decision_graph/decision_tree/bake/c_hierarchy.pyi +409 -0
  49. decision_graph/decision_tree/bake/c_hierarchy.pyx +277 -0
  50. decision_graph/decision_tree/bake/c_logic_group.cp315-win_amd64.pyd +0 -0
  51. decision_graph/decision_tree/bake/c_logic_group.h +1226 -0
  52. decision_graph/decision_tree/bake/c_logic_group.pxd +162 -0
  53. decision_graph/decision_tree/bake/c_logic_group.pyi +264 -0
  54. decision_graph/decision_tree/bake/c_logic_group.pyx +308 -0
  55. decision_graph/decision_tree/bake/c_node.cp315-win_amd64.pyd +0 -0
  56. decision_graph/decision_tree/bake/c_node.h +2660 -0
  57. decision_graph/decision_tree/bake/c_node.pxd +381 -0
  58. decision_graph/decision_tree/bake/c_node.pyi +438 -0
  59. decision_graph/decision_tree/bake/c_node.pyx +639 -0
  60. decision_graph/decision_tree/bake/c_reconstruct.cp315-win_amd64.pyd +0 -0
  61. decision_graph/decision_tree/bake/c_reconstruct.pxd +63 -0
  62. decision_graph/decision_tree/bake/c_reconstruct.pyi +60 -0
  63. decision_graph/decision_tree/bake/c_reconstruct.pyx +252 -0
  64. decision_graph/decision_tree/bake/c_var.cp315-win_amd64.pyd +0 -0
  65. decision_graph/decision_tree/bake/c_var.h +2054 -0
  66. decision_graph/decision_tree/bake/c_var.pxd +205 -0
  67. decision_graph/decision_tree/bake/c_var.pyi +271 -0
  68. decision_graph/decision_tree/bake/c_var.pyx +228 -0
  69. decision_graph/decision_tree/capi/__infra__.pxd +33 -0
  70. decision_graph/decision_tree/capi/__init__.pxd +33 -0
  71. decision_graph/decision_tree/capi/__init__.py +57 -0
  72. decision_graph/decision_tree/capi/c_abc.cp315-win_amd64.pyd +0 -0
  73. decision_graph/decision_tree/capi/c_abc.pxd +246 -0
  74. decision_graph/decision_tree/capi/c_abc.pyi +770 -0
  75. decision_graph/decision_tree/capi/c_abc.pyx +1532 -0
  76. decision_graph/decision_tree/capi/c_collection.cp315-win_amd64.pyd +0 -0
  77. decision_graph/decision_tree/capi/c_collection.pxd +22 -0
  78. decision_graph/decision_tree/capi/c_collection.pyi +245 -0
  79. decision_graph/decision_tree/capi/c_collection.pyx +138 -0
  80. decision_graph/decision_tree/capi/c_node.cp315-win_amd64.pyd +0 -0
  81. decision_graph/decision_tree/capi/c_node.pxd +95 -0
  82. decision_graph/decision_tree/capi/c_node.pyi +492 -0
  83. decision_graph/decision_tree/capi/c_node.pyx +551 -0
  84. decision_graph/decision_tree/exc.py +189 -0
  85. decision_graph/decision_tree/native/__init__.py +57 -0
  86. decision_graph/decision_tree/native/abc.py +1167 -0
  87. decision_graph/decision_tree/native/collection.py +134 -0
  88. decision_graph/decision_tree/native/node.py +521 -0
  89. decision_graph/includes/decision_graph/decision_tree/bake/c_action.c +16320 -0
  90. decision_graph/includes/decision_graph/decision_tree/bake/c_action.h +324 -0
  91. decision_graph/includes/decision_graph/decision_tree/bake/c_allocator_protocol.c +12473 -0
  92. decision_graph/includes/decision_graph/decision_tree/bake/c_bake.c +16485 -0
  93. decision_graph/includes/decision_graph/decision_tree/bake/c_bake.h +629 -0
  94. decision_graph/includes/decision_graph/decision_tree/bake/c_collections.c +17381 -0
  95. decision_graph/includes/decision_graph/decision_tree/bake/c_collections.h +692 -0
  96. decision_graph/includes/decision_graph/decision_tree/bake/c_const.c +20815 -0
  97. decision_graph/includes/decision_graph/decision_tree/bake/c_const.h +395 -0
  98. decision_graph/includes/decision_graph/decision_tree/bake/c_edge.c +20696 -0
  99. decision_graph/includes/decision_graph/decision_tree/bake/c_edge.h +511 -0
  100. decision_graph/includes/decision_graph/decision_tree/bake/c_eval.h +848 -0
  101. decision_graph/includes/decision_graph/decision_tree/bake/c_expr.c +22065 -0
  102. decision_graph/includes/decision_graph/decision_tree/bake/c_expr.h +1900 -0
  103. decision_graph/includes/decision_graph/decision_tree/bake/c_hierarchy.c +23267 -0
  104. decision_graph/includes/decision_graph/decision_tree/bake/c_hierarchy.h +731 -0
  105. decision_graph/includes/decision_graph/decision_tree/bake/c_logic_group.c +22434 -0
  106. decision_graph/includes/decision_graph/decision_tree/bake/c_logic_group.h +1226 -0
  107. decision_graph/includes/decision_graph/decision_tree/bake/c_node.c +28385 -0
  108. decision_graph/includes/decision_graph/decision_tree/bake/c_node.h +2660 -0
  109. decision_graph/includes/decision_graph/decision_tree/bake/c_reconstruct.c +15955 -0
  110. decision_graph/includes/decision_graph/decision_tree/bake/c_var.c +16881 -0
  111. decision_graph/includes/decision_graph/decision_tree/bake/c_var.h +2054 -0
  112. decision_graph/includes/decision_graph/decision_tree/capi/c_abc.c +59196 -0
  113. decision_graph/includes/decision_graph/decision_tree/capi/c_collection.c +19967 -0
  114. decision_graph/includes/decision_graph/decision_tree/capi/c_node.c +39229 -0
  115. decision_graph/logic_group/__init__.py +25 -0
  116. decision_graph/logic_group/base.py +100 -0
  117. decision_graph/logic_group/pending_request.py +384 -0
  118. decision_graph/webui/__init__.py +24 -0
  119. decision_graph/webui/bake/__init__.py +65 -0
  120. decision_graph/webui/bake/app.py +488 -0
  121. decision_graph/webui/bake/static/d3.v7.min.js +2 -0
  122. decision_graph/webui/bake/static/script.js +1440 -0
  123. decision_graph/webui/bake/static/style.css +920 -0
  124. decision_graph/webui/bake/templates/index.html +183 -0
  125. decision_graph/webui/bake/templates/offline.html +184 -0
  126. decision_graph/webui/capi/__init__.py +54 -0
  127. decision_graph/webui/capi/app.py +366 -0
  128. decision_graph/webui/capi/main.py +53 -0
  129. decision_graph/webui/capi/static/d3.v7.min.js +2 -0
  130. decision_graph/webui/capi/static/script.js +1026 -0
  131. decision_graph/webui/capi/static/style.css +656 -0
  132. decision_graph/webui/capi/templates/index.html +93 -0
  133. decision_graph/webui/capi/templates/offline.html +94 -0
  134. decision_graph/webui/native/__init__.py +54 -0
  135. decision_graph/webui/native/app.py +366 -0
  136. decision_graph/webui/native/main.py +53 -0
  137. decision_graph/webui/native/static/d3.v7.min.js +2 -0
  138. decision_graph/webui/native/static/script.js +1026 -0
  139. decision_graph/webui/native/static/style.css +656 -0
  140. decision_graph/webui/native/templates/index.html +93 -0
  141. decision_graph/webui/native/templates/offline.html +94 -0
  142. pydecisiongraph-0.3.2.post1.dist-info/METADATA +136 -0
  143. pydecisiongraph-0.3.2.post1.dist-info/RECORD +148 -0
  144. pydecisiongraph-0.3.2.post1.dist-info/WHEEL +5 -0
  145. pydecisiongraph-0.3.2.post1.dist-info/licenses/LICENSE +373 -0
  146. pydecisiongraph-0.3.2.post1.dist-info/top_level.txt +2 -0
  147. tests/bake_c_evaluator.cp315-win_amd64.pyd +0 -0
  148. tests/bake_eval_probe.cp315-win_amd64.pyd +0 -0
@@ -0,0 +1,656 @@
1
+ /* ===== Dracula & Alucard Palettes ===== */
2
+ :root {
3
+ /* Alucard (Light Mode) */
4
+ --alucard-background: hsl( 48, 100%, 96%);
5
+ --alucard-currentline: hsl( 49, 18%, 36%);
6
+ --alucard-selection: hsl(240, 18%, 84%);
7
+ --alucard-foreground: hsl( 0, 0%, 12%);
8
+ --alucard-comment: hsl( 49, 18%, 36%);
9
+ --alucard-red: hsl( 6, 66%, 48%);
10
+ --alucard-orange: hsl( 24, 78%, 36%);
11
+ --alucard-yellow: hsl( 48, 73%, 30%);
12
+ --alucard-green: hsl(114, 84%, 24%);
13
+ --alucard-cyan: hsl(198, 96%, 30%);
14
+ --alucard-purple: hsl(252, 54%, 54%);
15
+ --alucard-pink: hsl(336, 78%, 36%);
16
+
17
+ /* Alucard Brights (for accents) */
18
+ --alucard-bright-background: hsl(220, 20%, 97%);
19
+ --alucard-bright-currentline: hsl( 49, 9%, 62%);
20
+ --alucard-bright-selection: hsl(227, 18%, 90%);
21
+ --alucard-bright-foreground: hsl(228, 15%, 34%);
22
+ --alucard-bright-comment: hsl(224, 12%, 68%);
23
+ --alucard-bright-red: hsl( 0, 75%, 65%);
24
+ --alucard-bright-orange: hsl( 17, 100%, 74%);
25
+ --alucard-bright-yellow: hsl( 46, 83%, 70%);
26
+ --alucard-bright-green: hsl(120, 73%, 75%);
27
+ --alucard-bright-cyan: hsl(195, 53%, 79%);
28
+ --alucard-bright-blue: hsl(214, 41%, 78%);
29
+ --alucard-bright-purple: hsl(262, 38%, 66%);
30
+ --alucard-bright-pink: hsl(312, 58%, 71%);
31
+
32
+ /* Dracula (Dark Mode) */
33
+ --dracula-background: hsl(231, 15%, 18%);
34
+ --dracula-currentline: hsl(225, 27%, 51%);
35
+ --dracula-selection: hsl(232, 14%, 31%);
36
+ --dracula-foreground: hsl( 60, 30%, 96%);
37
+ --dracula-comment: hsl(225, 27%, 51%);
38
+ --dracula-red: hsl( 0, 78%, 72%);
39
+ --dracula-orange: hsl( 31, 100%, 71%);
40
+ --dracula-yellow: hsl( 65, 92%, 76%);
41
+ --dracula-green: hsl(135, 94%, 65%);
42
+ --dracula-cyan: hsl(191, 97%, 77%);
43
+ --dracula-purple: hsl(265, 89%, 78%);
44
+ --dracula-pink: hsl(326, 100%, 74%);
45
+
46
+ /* Dracula Dulls (for accents) */
47
+ --dracula-dull-background: hsl(231, 15%, 26%);
48
+ --dracula-dull-currentline: hsl(225, 26%, 25%);
49
+ --dracula-dull-selection: hsl(232, 14%, 23%);
50
+ --dracula-dull-foreground: hsl( 60, 30%, 27%);
51
+ --dracula-dull-comment: hsl(225, 26%, 25%);
52
+ --dracula-dull-red: hsl( 0, 100%, 40%);
53
+ --dracula-dull-orange: hsl( 31, 100%, 40%);
54
+ --dracula-dull-yellow: hsl( 65, 92%, 42%);
55
+ --dracula-dull-green: hsl(135, 94%, 42%);
56
+ --dracula-dull-cyan: hsl(191, 96%, 42%);
57
+ --dracula-dull-blue: hsl(214, 76%, 57%);
58
+ --dracula-dull-purple: hsl(265, 89%, 39%);
59
+ --dracula-dull-pink: hsl(326, 100%, 39%);
60
+
61
+ /* ===== Default Theme: Alucard (Light) ===== */
62
+ --bg: #FFFFFF;
63
+ --panel-bg: var(--alucard-bright-background);
64
+ --text-color: var(--alucard-foreground);
65
+ --header-bg: var(--dracula-currentline);
66
+ --header-text: #FFFFFF;
67
+ --tabs-bg: var(--alucard-bright-background);
68
+ --tab-active-bg: var(--alucard-cyan);
69
+ --tab-active-text: #FFFFFF;
70
+ --muted-border: #CCCCCC;
71
+ --link-text: var(--alucard-foreground);
72
+ --control-bg: #EEEEEE;
73
+ --link-bg: rgba(255, 255, 255, 0.9);
74
+ --link-stroke: rgba(0, 0, 0, 0.3);
75
+
76
+ /* Node Colors – Alucard */
77
+ --logicnode-fill: var(--alucard-bright-cyan);
78
+ --logicnode-stroke: var(--alucard-cyan);
79
+ --actionnode-fill: var(--alucard-bright-selection);
80
+ --noaction-fill: var(--alucard-bright-comment);
81
+ --longaction-fill: var(--alucard-bright-green);
82
+ --shortaction-fill: var(--alucard-bright-red);
83
+ --cancelaction-fill: var(--alucard-bright-orange);
84
+ --clearaction-fill: var(--alucard-bright-red);
85
+ --rootlogicnode-fill: #63CB91;
86
+ --breakpointnode-fill: var(--alucard-bright-red);
87
+ --defaultnode-fill: var(--alucard-bright-cyan);
88
+ --node-text: #000000;
89
+ --link-default: var(--alucard-bright-comment);
90
+
91
+ /* Switches – Alucard */
92
+ --switch-off-bg: var(--alucard-bright-comment);
93
+ --switch-on-bg: hsl(213, 70%, 53%);
94
+ --switch-knob-bg: #FFFFFF;
95
+ }
96
+
97
+ /* ===== Dark Theme: Dracula ===== */
98
+ .dark-mode {
99
+ /* UI Base */
100
+ --bg: var(--dracula-dull-background);
101
+ --panel-bg: var(--dracula-background);
102
+ --text-color: #FFFFFF;
103
+ --header-bg: var(--dracula-currentline);
104
+ --header-text: #FFFFFF;
105
+ --tabs-bg: var(--dracula-background);
106
+ --tab-active-bg: var(--dracula-selection);
107
+ --tab-active-text: var(--dracula-foreground);
108
+ --muted-border: var(--dracula-dull-background);
109
+ --link-text: var(--dracula-foreground);
110
+ --control-bg: var(--dracula-dull-selection);
111
+ --link-bg: rgba(40, 42, 54, 0.85);
112
+ --link-stroke: rgba(255, 255, 255, 0.15);
113
+
114
+ /* Node Colors – Dracula (base fills + bright strokes) */
115
+ --logicnode-fill: var(--dracula-dull-cyan);
116
+ --logicnode-stroke: var(--dracula-cyan);
117
+ --actionnode-fill: var(--dracula-dull-selection);
118
+ --noaction-fill: var(--dracula-dull-comment);
119
+ --longaction-fill: var(--dracula-dull-green);
120
+ --shortaction-fill: var(--dracula-dull-red);
121
+ --cancelaction-fill: var(--dracula-dull-orange);
122
+ --clearaction-fill: var(--dracula-dull-red);
123
+ --rootlogicnode-fill: var(--dracula-dull-purple);
124
+ --breakpointnode-fill: var(--dracula-dull-pink);
125
+ --defaultnode-fill: var(--dracula-dull-cyan);
126
+ --node-text: #FFFFFF;
127
+ --link-default: #BBBBBB;
128
+
129
+ /* Switches – Dracula */
130
+ --switch-off-bg: var(--dracula-comment);
131
+ --switch-on-bg: var(--dracula-green);
132
+ --switch-knob-bg: var(--dracula-background);
133
+ }
134
+
135
+ body {
136
+ display: flex;
137
+ flex-direction: column;
138
+ height: 100vh;
139
+ margin: 0;
140
+ padding: 0;
141
+ font-family: Arial, sans-serif;
142
+ background-color: var(--bg);
143
+ color: var(--text-color);
144
+ overflow: hidden;
145
+ }
146
+
147
+ #header {
148
+ flex: 0 0 auto;
149
+ background-color: var(--header-bg);
150
+ color: var(--header-text);
151
+ padding: 10px 20px;
152
+ }
153
+
154
+ #main {
155
+ flex: 1 1 auto;
156
+ display: flex;
157
+ width: 100%;
158
+ min-height: 0;
159
+ }
160
+
161
+ #content {
162
+ flex: 1 1 auto;
163
+ display: flex;
164
+ flex-direction: column;
165
+ min-width: 0;
166
+ min-height: 0;
167
+ height: 100%;
168
+ }
169
+
170
+ #logic-group-tabs {
171
+ width: 220px;
172
+ min-width: 160px;
173
+ max-width: 320px;
174
+ background-color: var(--tabs-bg);
175
+ border-right: 1px solid var(--muted-border);
176
+ display: flex;
177
+ flex-direction: column;
178
+ gap: 6px;
179
+ padding: 12px;
180
+ overflow-y: auto;
181
+ }
182
+
183
+ .tab-button {
184
+ padding: 6px 12px;
185
+ border: 1px solid var(--muted-border);
186
+ background: transparent;
187
+ color: var(--text-color);
188
+ cursor: pointer;
189
+ border-radius: 4px;
190
+ }
191
+
192
+ #logic-group-tabs .tab-button {
193
+ display: block;
194
+ width: 100%;
195
+ text-align: left;
196
+ padding: 10px 12px;
197
+ }
198
+
199
+ .tab-button.active {
200
+ background: var(--tab-active-bg);
201
+ color: var(--tab-active-text);
202
+ border-color: var(--tab-active-bg);
203
+ }
204
+
205
+ #controls-bar {
206
+ display: flex;
207
+ align-items: center;
208
+ flex-wrap: wrap;
209
+ justify-content: space-between;
210
+ padding: 8px 12px;
211
+ gap: 12px;
212
+ border-bottom: 1px solid var(--muted-border);
213
+ background-color: var(--panel-bg);
214
+ align-content: flex-start; /* ensure wrapped lines stack from the top */
215
+ width: 100%;
216
+ box-sizing: border-box;
217
+ }
218
+
219
+ #controls-bar .right-controls {
220
+ margin-left: auto;
221
+ display: flex;
222
+ gap: 8px;
223
+ align-items: center;
224
+ }
225
+
226
+ .control-button {
227
+ padding: 0 20px;
228
+ margin: 0;
229
+ display: flex;
230
+ align-items: center;
231
+ gap: 8px;
232
+ border: 1px solid var(--muted-border);
233
+ background: transparent;
234
+ color: var(--text-color);
235
+ cursor: pointer;
236
+ }
237
+
238
+ /* Apply same styles on hover as when the .hover class is present */
239
+ .control-button:hover {
240
+ background: var(--tab-active-bg);
241
+ color: var(--tab-active-text);
242
+ border-color: var(--tab-active-bg);
243
+ }
244
+
245
+ #tree-container {
246
+ flex: 1 1 auto;
247
+ min-width: 0;
248
+ min-height: 0;
249
+ height: 100%;
250
+ }
251
+
252
+ #tree-container > svg {
253
+ width: 100%;
254
+ height: 100%;
255
+ display: block;
256
+ }
257
+
258
+ .node {
259
+ cursor: pointer;
260
+ }
261
+
262
+ .node.LogicNode .node-rect {
263
+ fill: var(--logicnode-fill);
264
+ stroke: var(--logicnode-stroke);
265
+ stroke-width: 1.5px;
266
+ }
267
+
268
+ .node.ActionNode .node-rect {
269
+ fill: var(--actionnode-fill);
270
+ }
271
+
272
+ .node.NoAction .node-rect {
273
+ fill: var(--noaction-fill);
274
+ }
275
+
276
+ .node.LongAction .node-rect {
277
+ fill: var(--longaction-fill);
278
+ }
279
+
280
+ .node.ShortAction .node-rect {
281
+ fill: var(--shortaction-fill);
282
+ }
283
+
284
+ .node.CancelAction .node-rect {
285
+ fill: var(--cancelaction-fill);
286
+ }
287
+
288
+ .node.ClearAction .node-rect {
289
+ fill: var(--clearaction-fill);
290
+ }
291
+
292
+ .node.RootLogicNode .node-rect {
293
+ fill: var(--rootlogicnode-fill);
294
+ }
295
+
296
+ .node.BreakpointNode .node-rect {
297
+ fill: var(--breakpointnode-fill);
298
+ }
299
+
300
+ .node .node-rect {
301
+ fill: var(--defaultnode-fill);
302
+ }
303
+
304
+ .node-rect-inactive {
305
+ fill-opacity: 0.3;
306
+ stroke-opacity: 0.4;
307
+ }
308
+
309
+ .node-text-inactive {
310
+ fill-opacity: 0.4;
311
+ }
312
+
313
+ .node-text {
314
+ fill: var(--node-text);
315
+ }
316
+
317
+ .link {
318
+ fill: none;
319
+ stroke: var(--link-default);
320
+ stroke-width: 1.5px;
321
+ }
322
+
323
+ .link.virtual_parent {
324
+ stroke: #ff0000;
325
+ stroke-dasharray: 5, 5;
326
+ }
327
+
328
+ .link-condition {
329
+ font-size: 10px;
330
+ text-anchor: middle;
331
+ dominant-baseline: middle;
332
+ pointer-events: none;
333
+ fill: var(--link-text);
334
+ }
335
+
336
+ .link-condition-bg {
337
+ fill: var(--link-bg);
338
+ stroke: var(--link-stroke);
339
+ stroke-width: 0.6;
340
+ opacity: 1;
341
+ }
342
+
343
+ .link-condition-group.true .link-condition-bg {
344
+ fill: rgba(0, 255, 0, 0.5);
345
+ }
346
+
347
+ .link-condition-group.false .link-condition-bg {
348
+ fill: rgba(255, 0, 0, 0.5);
349
+ }
350
+
351
+ .link-condition-group.unconditional .link-condition-bg {
352
+ fill: rgba(0, 0, 255, 0.5);
353
+ }
354
+
355
+ .link-condition-group.else .link-condition-bg {
356
+ fill: rgba(255, 255, 0, 0.5);
357
+ }
358
+
359
+ .link-inactive {
360
+ stroke-opacity: 0.3 !important;
361
+ }
362
+
363
+ .link-condition-bg-inactive {
364
+ opacity: 0.2 !important;
365
+ }
366
+
367
+ .link-condition-text-inactive {
368
+ fill-opacity: 0.3 !important;
369
+ }
370
+
371
+ #highlight-control {
372
+ padding: 0 20px;
373
+ margin: 0;
374
+ display: flex;
375
+ align-items: center;
376
+ gap: 8px;
377
+ background-color: var(--control-bg);
378
+ color: var(--text-color);
379
+ }
380
+
381
+ #highlight-control label {
382
+ cursor: pointer;
383
+ display: flex;
384
+ align-items: center;
385
+ gap: 6px;
386
+ }
387
+
388
+ #highlight-toggle {
389
+ opacity: 0;
390
+ position: absolute;
391
+ width: 0;
392
+ height: 0;
393
+ }
394
+
395
+ .highlight-switch-slider {
396
+ position: relative;
397
+ display: inline-block;
398
+ width: 36px;
399
+ height: 20px;
400
+ }
401
+
402
+ .highlight-switch-slider::before {
403
+ content: "";
404
+ position: absolute;
405
+ top: 0;
406
+ left: 0;
407
+ right: 0;
408
+ bottom: 0;
409
+ background-color: var(--switch-off-bg);
410
+ border-radius: 10px;
411
+ transition: background-color 0.2s;
412
+ }
413
+
414
+ .highlight-switch-slider::after {
415
+ content: "";
416
+ position: absolute;
417
+ top: 2px;
418
+ left: 2px;
419
+ width: 16px;
420
+ height: 16px;
421
+ background-color: var(--switch-knob-bg);
422
+ border-radius: 50%;
423
+ transition: transform 0.2s;
424
+ }
425
+
426
+ #highlight-toggle:checked + .highlight-switch-slider::before {
427
+ background-color: var(--switch-on-bg);
428
+ }
429
+
430
+ #highlight-toggle:checked + .highlight-switch-slider::after {
431
+ transform: translateX(16px);
432
+ }
433
+
434
+ #watch-control {
435
+ padding: 0 20px;
436
+ margin: 0;
437
+ display: flex;
438
+ align-items: center;
439
+ gap: 8px;
440
+ background-color: var(--control-bg);
441
+ color: var(--text-color);
442
+ }
443
+
444
+ #watch-control label {
445
+ cursor: pointer;
446
+ display: flex;
447
+ align-items: center;
448
+ gap: 6px;
449
+ }
450
+
451
+ #watch-toggle {
452
+ opacity: 0;
453
+ position: absolute;
454
+ width: 0;
455
+ height: 0;
456
+ }
457
+
458
+ .watch-switch-slider {
459
+ position: relative;
460
+ display: inline-block;
461
+ width: 36px;
462
+ height: 20px;
463
+ }
464
+
465
+ .watch-switch-slider::before {
466
+ content: "";
467
+ position: absolute;
468
+ top: 0;
469
+ left: 0;
470
+ right: 0;
471
+ bottom: 0;
472
+ background-color: var(--switch-off-bg);
473
+ border-radius: 10px;
474
+ transition: background-color 0.2s;
475
+ }
476
+
477
+ .watch-switch-slider::after {
478
+ content: "";
479
+ position: absolute;
480
+ top: 2px;
481
+ left: 2px;
482
+ width: 16px;
483
+ height: 16px;
484
+ background-color: var(--switch-knob-bg);
485
+ border-radius: 50%;
486
+ transition: transform 0.2s;
487
+ }
488
+
489
+ #watch-toggle:checked + .watch-switch-slider::before {
490
+ background-color: var(--switch-on-bg);
491
+ }
492
+
493
+ #watch-toggle:checked + .watch-switch-slider::after {
494
+ transform: translateX(16px);
495
+ }
496
+
497
+ #from-clipboard-control {
498
+ padding: 0 20px;
499
+ margin: 0;
500
+ display: flex;
501
+ align-items: center;
502
+ gap: 8px;
503
+ background-color: var(--control-bg);
504
+ color: var(--text-color);
505
+ }
506
+
507
+ .from-clipboard-input {
508
+ min-width: 220px;
509
+ padding: 6px 8px;
510
+ border-radius: 6px;
511
+ border: 1px solid var(--muted-border);
512
+ background: var(--panel-bg);
513
+ color: var(--text-color);
514
+ outline: none;
515
+ transition: box-shadow 0.12s ease, border-color 0.12s ease;
516
+ font-size: 0.95em;
517
+ }
518
+
519
+ .from-clipboard-input::placeholder {
520
+ color: rgba(0, 0, 0, 0.45);
521
+ }
522
+
523
+ .dark-mode .from-clipboard-input::placeholder {
524
+ color: rgba(255, 255, 255, 0.45);
525
+ }
526
+
527
+ .from-clipboard-input:focus {
528
+ border-color: var(--tab-active-bg);
529
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.04);
530
+ }
531
+
532
+ /* ensure controls don't overflow on small screens */
533
+ @media (max-width: 700px) {
534
+ .from-clipboard-input {
535
+ min-width: 120px;
536
+ }
537
+ }
538
+
539
+ #node-info {
540
+ position: fixed;
541
+ top: 10px;
542
+ right: 10px;
543
+ width: fit-content;
544
+ max-width: 1000px;
545
+ background-color: var(--panel-bg);
546
+ border: 1px solid var(--muted-border);
547
+ border-radius: 10px;
548
+ padding: 0;
549
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.30);
550
+ z-index: 1000;
551
+ font-size: 1em;
552
+ display: flex;
553
+ flex-direction: column;
554
+ gap: 0;
555
+ align-items: stretch;
556
+ box-sizing: border-box;
557
+ cursor: grab;
558
+ }
559
+
560
+ .node-info-header {
561
+ display: flex;
562
+ flex-direction: row;
563
+ align-items: center;
564
+ justify-content: space-between;
565
+ padding: 10px 20px 8px 20px;
566
+ background-color: rgba(0, 0, 0, 0.07);
567
+ border-top-left-radius: 10px;
568
+ border-top-right-radius: 10px;
569
+ }
570
+
571
+ .node-info-header h3 {
572
+ margin: 0;
573
+ font-size: 1.2em;
574
+ font-weight: 800;
575
+ color: var(--node-text);
576
+ }
577
+
578
+ #node-info-pin {
579
+ background: none;
580
+ border: none;
581
+ font-size: 1.5em;
582
+ cursor: pointer;
583
+ margin-left: 1em;
584
+ transition: color 0.2s, filter 0.2s;
585
+ color: #888;
586
+ filter: grayscale(60%);
587
+ }
588
+
589
+ #node-info-pin.active {
590
+ color: #e67e22;
591
+ filter: none;
592
+ }
593
+
594
+ .node-info-body {
595
+ background-color: var(--panel-bg);
596
+ border-bottom-left-radius: 10px;
597
+ border-bottom-right-radius: 10px;
598
+ padding: 18px 20px 20px 20px;
599
+ }
600
+
601
+ .node-info-table {
602
+ width: 100%;
603
+ border-collapse: separate;
604
+ border-spacing: 0 0.5em;
605
+ }
606
+
607
+ .node-info-label {
608
+ width: fit-content;
609
+ text-align: left;
610
+ color: var(--node-text);
611
+ font-weight: 300;
612
+ padding-right: 1em;
613
+ }
614
+
615
+ .node-info-value {
616
+ width: max-content;
617
+ text-align: right;
618
+ color: var(--node-text);
619
+ font-weight: 600;
620
+ font-size: 1.1em;
621
+ word-break: break-word;
622
+ overflow-wrap: anywhere;
623
+ }
624
+
625
+ .node-info-value.autogen-true {
626
+ color: #E74C3C;
627
+ }
628
+
629
+ .node-info-value.autogen-false {
630
+ color: #27AE60;
631
+ }
632
+
633
+ body, #header, #logic-group-tabs, #tree-container, #from-clipboard-control, #highlight-control, #watch-control, .tab-button, .tab-button.active,
634
+ .node-text, .link-condition, .link-condition-bg, .link {
635
+ transition: background-color 320ms ease, color 320ms ease, fill 320ms ease, stroke 320ms ease, opacity 320ms ease, border-color 320ms ease;
636
+ }
637
+
638
+ @media (max-width: 800px) {
639
+ #logic-group-tabs {
640
+ width: 140px;
641
+ }
642
+
643
+ #controls-bar {
644
+ padding: 6px;
645
+ }
646
+ }
647
+
648
+ #from-clipboard-control, #highlight-control, #watch-control, .control-button {
649
+ height: 40px;
650
+ border-radius: 8px;
651
+ }
652
+
653
+ .from-clipboard-btn {
654
+ height: 32px;
655
+ padding: 6px 10px;
656
+ }