@keenmate/pure-admin-core 1.0.0-rc01

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 (167) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/dist/css/main.css +11542 -0
  4. package/dist/fonts/Delivery/Delivery_W_Bd.woff2 +0 -0
  5. package/dist/fonts/Delivery/Delivery_W_BdIt.woff2 +0 -0
  6. package/dist/fonts/Delivery/Delivery_W_CdBlk.woff2 +0 -0
  7. package/dist/fonts/Delivery/Delivery_W_CdLt.woff2 +0 -0
  8. package/dist/fonts/Delivery/Delivery_W_It.woff2 +0 -0
  9. package/dist/fonts/Delivery/Delivery_W_Lt.woff2 +0 -0
  10. package/dist/fonts/Delivery/Delivery_W_LtIt.woff2 +0 -0
  11. package/dist/fonts/Delivery/Delivery_W_Rg.woff2 +0 -0
  12. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2 +0 -0
  13. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.1 +0 -0
  14. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8UH-qVHQ.woff2.2 +0 -0
  15. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2 +0 -0
  16. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.1 +0 -0
  17. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8VH-qVHQ.woff2.2 +0 -0
  18. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2 +0 -0
  19. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8bH-o.woff2.1 +0 -0
  20. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2 +0 -0
  21. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.1 +0 -0
  22. package/dist/fonts/google/3y976aknfjLm_3lMKjiMgmUUYBs04Y8fH-qVHQ.woff2.2 +0 -0
  23. package/dist/fonts/google/6aez4K2oVqwIvtE2H68T.woff2 +0 -0
  24. package/dist/fonts/google/6aez4K2oVqwIvtU2Hw.woff2 +0 -0
  25. package/dist/fonts/google/6aez4K2oVqwIvtY2H68T.woff2 +0 -0
  26. package/dist/fonts/google/6aez4K2oVqwIvtg2H68T.woff2 +0 -0
  27. package/dist/fonts/google/6aez4K2oVqwIvto2H68T.woff2 +0 -0
  28. package/dist/fonts/google/6aez4K2oVqwIvts2H68T.woff2 +0 -0
  29. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nejog.woff2 +0 -0
  30. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nijogp5.woff2 +0 -0
  31. package/dist/fonts/google/7Auup_AqnyWWAxW2Wk3swUz56MS91Eww8SX21nmjogp5.woff2 +0 -0
  32. package/dist/fonts/google/PN_xRfK9oXHga0XdZ8g_vT0.woff2 +0 -0
  33. package/dist/fonts/google/PN_xRfK9oXHga0XdZsg_.woff2 +0 -0
  34. package/dist/fonts/google/PN_xRfK9oXHga0XdaMg_vT0.woff2 +0 -0
  35. package/dist/fonts/google/TK3tWkYFABsmjsphPho.woff2 +0 -0
  36. package/dist/fonts/google/TK3tWkYFABsmjspuPho7vA.woff2 +0 -0
  37. package/dist/fonts/google/TK3tWkYFABsmjspvPho7vA.woff2 +0 -0
  38. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjTYJwQj.woff2 +0 -0
  39. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjXYJwQj.woff2 +0 -0
  40. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6Vj_YJwQj.woff2 +0 -0
  41. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjbYJwQj.woff2 +0 -0
  42. package/dist/fonts/google/dg45_pLmvrkcOkBnKsOzXyGWTBcmg-X6VjvYJw.woff2 +0 -0
  43. package/dist/fonts/google/fonts-tracklist.txt +48 -0
  44. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbBjM4.woff2 +0 -0
  45. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbOjM7sfA.woff2 +0 -0
  46. package/dist/fonts/google/vEFO2_JTCgwQ5ejvMV0O96D01E8J0tJXHKbPjM7sfA.woff2 +0 -0
  47. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfLtrftV.woff2 +0 -0
  48. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfXtrftV.woff2 +0 -0
  49. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfbtrQ.woff2 +0 -0
  50. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfjtrftV.woff2 +0 -0
  51. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfntrftV.woff2 +0 -0
  52. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfrtrftV.woff2 +0 -0
  53. package/dist/fonts/google/wEOhEADFm8hSaQTFG18FErVhsC9x-tarUfvtrftV.woff2 +0 -0
  54. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_B-bnBeA.woff2 +0 -0
  55. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_C-bk.woff2 +0 -0
  56. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_G-bnBeA.woff2 +0 -0
  57. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_M-bnBeA.woff2 +0 -0
  58. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_N-bnBeA.woff2 +0 -0
  59. package/dist/fonts/google/xn7_YHE41ni1AdIRqAuZuw1Bx9mbZk79FN_P-bnBeA.woff2 +0 -0
  60. package/package.json +60 -0
  61. package/snippets/alerts.html +281 -0
  62. package/snippets/badges.html +212 -0
  63. package/snippets/buttons.html +287 -0
  64. package/snippets/cards.html +393 -0
  65. package/snippets/checkbox-lists.html +490 -0
  66. package/snippets/code.html +225 -0
  67. package/snippets/command-palette.html +210 -0
  68. package/snippets/comparison.html +428 -0
  69. package/snippets/customization.html +142 -0
  70. package/snippets/forms.html +477 -0
  71. package/snippets/grid.html +338 -0
  72. package/snippets/layout.html +598 -0
  73. package/snippets/lists.html +232 -0
  74. package/snippets/loaders.html +183 -0
  75. package/snippets/manifest.json +388 -0
  76. package/snippets/modal-dialogs.html +411 -0
  77. package/snippets/modals.html +310 -0
  78. package/snippets/popconfirm.html +253 -0
  79. package/snippets/profile.html +264 -0
  80. package/snippets/tables.html +317 -0
  81. package/snippets/tabs.html +930 -0
  82. package/snippets/timeline.html +364 -0
  83. package/snippets/toasts.html +154 -0
  84. package/snippets/tooltips.html +411 -0
  85. package/snippets/typography.html +101 -0
  86. package/snippets/utilities.html +595 -0
  87. package/snippets/virtual-scroll.html +322 -0
  88. package/snippets/web-daterangepicker.html +634 -0
  89. package/snippets/web-multiselect.html +362 -0
  90. package/src/scss/.claude/settings.local.json +11 -0
  91. package/src/scss/_base-css-variables.scss +348 -0
  92. package/src/scss/_core.scss +99 -0
  93. package/src/scss/_fonts.scss +67 -0
  94. package/src/scss/_purecss-grid-responsive.scss +138 -0
  95. package/src/scss/_purecss-grid.scss +58 -0
  96. package/src/scss/_variables.scss +14 -0
  97. package/src/scss/core-components/_alerts.scss +212 -0
  98. package/src/scss/core-components/_badges.scss +16 -0
  99. package/src/scss/core-components/_base.scss +124 -0
  100. package/src/scss/core-components/_buttons.scss +473 -0
  101. package/src/scss/core-components/_cards.scss +285 -0
  102. package/src/scss/core-components/_checkbox-lists.scss +289 -0
  103. package/src/scss/core-components/_code.scss +141 -0
  104. package/src/scss/core-components/_command-palette.scss +518 -0
  105. package/src/scss/core-components/_comparison.scss +172 -0
  106. package/src/scss/core-components/_file-selector.scss +780 -0
  107. package/src/scss/core-components/_forms.scss +16 -0
  108. package/src/scss/core-components/_grid.scss +264 -0
  109. package/src/scss/core-components/_layout.scss +15 -0
  110. package/src/scss/core-components/_lists.scss +211 -0
  111. package/src/scss/core-components/_loaders.scss +277 -0
  112. package/src/scss/core-components/_logic-tree.scss +280 -0
  113. package/src/scss/core-components/_modals.scss +209 -0
  114. package/src/scss/core-components/_notifications.scss +253 -0
  115. package/src/scss/core-components/_pagers.scss +141 -0
  116. package/src/scss/core-components/_popconfirm.scss +170 -0
  117. package/src/scss/core-components/_profile.scss +281 -0
  118. package/src/scss/core-components/_settings-panel.scss +128 -0
  119. package/src/scss/core-components/_statistics.scss +200 -0
  120. package/src/scss/core-components/_tables.scss +555 -0
  121. package/src/scss/core-components/_tabs.scss +438 -0
  122. package/src/scss/core-components/_timeline.scss +589 -0
  123. package/src/scss/core-components/_toasts.scss +281 -0
  124. package/src/scss/core-components/_tooltips.scss +503 -0
  125. package/src/scss/core-components/_utilities.scss +241 -0
  126. package/src/scss/core-components/_web-components-theme.scss +294 -0
  127. package/src/scss/core-components/badges/_badge-base.scss +131 -0
  128. package/src/scss/core-components/badges/_badge-group.scss +25 -0
  129. package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -0
  130. package/src/scss/core-components/badges/_composite-badge.scss +70 -0
  131. package/src/scss/core-components/badges/_index.scss +10 -0
  132. package/src/scss/core-components/badges/_labels.scss +155 -0
  133. package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -0
  134. package/src/scss/core-components/forms/_form-inputs.scss +100 -0
  135. package/src/scss/core-components/forms/_form-layout.scss +66 -0
  136. package/src/scss/core-components/forms/_form-states.scss +89 -0
  137. package/src/scss/core-components/forms/_index.scss +12 -0
  138. package/src/scss/core-components/forms/_input-groups.scss +149 -0
  139. package/src/scss/core-components/forms/_input-wrapper.scss +89 -0
  140. package/src/scss/core-components/forms/_query-editor.scss +313 -0
  141. package/src/scss/core-components/layout/_index.scss +11 -0
  142. package/src/scss/core-components/layout/_layout-container.scss +105 -0
  143. package/src/scss/core-components/layout/_layout-responsive.scss +100 -0
  144. package/src/scss/core-components/layout/_navbar-elements.scss +238 -0
  145. package/src/scss/core-components/layout/_navbar.scss +71 -0
  146. package/src/scss/core-components/layout/_sidebar-states.scss +228 -0
  147. package/src/scss/core-components/layout/_sidebar.scss +177 -0
  148. package/src/scss/main.scss +7 -0
  149. package/src/scss/themes/_dark-base.scss +207 -0
  150. package/src/scss/themes/audi-light.scss +311 -0
  151. package/src/scss/themes/audi.scss +288 -0
  152. package/src/scss/themes/corporate.scss +203 -0
  153. package/src/scss/themes/dark-blue.scss +152 -0
  154. package/src/scss/themes/dark-green.scss +156 -0
  155. package/src/scss/themes/dark-red.scss +160 -0
  156. package/src/scss/themes/dark.scss +145 -0
  157. package/src/scss/themes/express.scss +281 -0
  158. package/src/scss/themes/minimal.scss +121 -0
  159. package/src/scss/utilities.scss +481 -0
  160. package/src/scss/variables/_base.scss +81 -0
  161. package/src/scss/variables/_colors.scss +148 -0
  162. package/src/scss/variables/_components.scss +509 -0
  163. package/src/scss/variables/_index.scss +13 -0
  164. package/src/scss/variables/_layout.scss +65 -0
  165. package/src/scss/variables/_spacing.scss +66 -0
  166. package/src/scss/variables/_system.scss +80 -0
  167. package/src/scss/variables/_typography.scss +37 -0
@@ -0,0 +1,277 @@
1
+ /* ========================================
2
+ Loader Components
3
+ Spinners, dots, bars, pulse, ring, wave loaders and animations
4
+ ======================================== */
5
+ @use '../variables' as *;
6
+
7
+ // Spinner animation
8
+ @keyframes pa-spin {
9
+ 0% {
10
+ transform: rotate(0deg);
11
+ }
12
+ 100% {
13
+ transform: rotate(360deg);
14
+ }
15
+ }
16
+
17
+ // Standalone Spinners
18
+ .pa-spinner {
19
+ display: inline-block;
20
+ width: $spinner-size;
21
+ height: $spinner-size;
22
+ border: $spinner-border-width solid transparent;
23
+ border-top: $spinner-border-width solid currentColor;
24
+ border-radius: 50%;
25
+ animation: pa-spin $animation-spin-duration linear infinite;
26
+
27
+ // Size variants
28
+ &--xs {
29
+ width: $loader-dot-size;
30
+ height: $loader-dot-size;
31
+ }
32
+
33
+ // Color variants
34
+ &--primary {
35
+ border-top-color: $btn-primary-bg;
36
+ }
37
+
38
+ &--secondary {
39
+ border-top-color: $btn-secondary-bg;
40
+ }
41
+
42
+ &--success {
43
+ border-top-color: $btn-success-bg;
44
+ }
45
+
46
+ &--danger {
47
+ border-top-color: $btn-danger-bg;
48
+ }
49
+
50
+ &--warning {
51
+ border-top-color: $btn-warning-bg;
52
+ }
53
+
54
+ &--info {
55
+ border-top-color: $btn-info-bg;
56
+ }
57
+ }
58
+
59
+ // Dots Loader
60
+ .pa-loader-dots {
61
+ display: inline-flex;
62
+ gap: $spacing-sm;
63
+ align-items: center;
64
+
65
+ span {
66
+ width: $loader-dot-size;
67
+ height: $loader-dot-size;
68
+ border-radius: 50%;
69
+ background-color: currentColor;
70
+ animation: pa-bounce 1.4s infinite ease-in-out both;
71
+
72
+ &:nth-child(1) {
73
+ animation-delay: $loader-dots-delay-1;
74
+ }
75
+
76
+ &:nth-child(2) {
77
+ animation-delay: $loader-dots-delay-2;
78
+ }
79
+ }
80
+
81
+ &--lg span {
82
+ width: $loader-dot-size;
83
+ height: $loader-dot-size;
84
+ }
85
+ }
86
+
87
+ @keyframes pa-bounce {
88
+ 0%, 80%, 100% {
89
+ transform: scale(0);
90
+ opacity: $opacity-muted;
91
+ }
92
+ 40% {
93
+ transform: scale(1);
94
+ opacity: 1;
95
+ }
96
+ }
97
+
98
+ // Bars Loader
99
+ .pa-loader-bars {
100
+ display: inline-flex;
101
+ gap: $spacing-xs;
102
+ align-items: center;
103
+ height: $loader-bar-height;
104
+
105
+ span {
106
+ width: $loader-bar-width;
107
+ height: 100%;
108
+ background-color: currentColor;
109
+ animation: pa-stretch 1.2s infinite ease-in-out;
110
+
111
+ &:nth-child(1) {
112
+ animation-delay: $loader-bars-delay-1;
113
+ }
114
+
115
+ &:nth-child(2) {
116
+ animation-delay: $loader-bars-delay-2;
117
+ }
118
+
119
+ &:nth-child(3) {
120
+ animation-delay: $loader-bars-delay-3;
121
+ }
122
+
123
+ &:nth-child(4) {
124
+ animation-delay: $loader-bars-delay-4;
125
+ }
126
+
127
+ &:nth-child(5) {
128
+ animation-delay: $loader-bars-delay-5;
129
+ }
130
+ }
131
+
132
+ &--lg {
133
+ height: $spinner-size;
134
+
135
+ span {
136
+ width: $loader-bar-width;
137
+ }
138
+ }
139
+ }
140
+
141
+ @keyframes pa-stretch {
142
+ 0%, 40%, 100% {
143
+ transform: scaleY(0.4);
144
+ }
145
+ 20% {
146
+ transform: scaleY(1);
147
+ }
148
+ }
149
+
150
+ // Pulse Loader
151
+ .pa-loader-pulse {
152
+ display: inline-block;
153
+ width: $spinner-size;
154
+ height: $spinner-size;
155
+ border-radius: 50%;
156
+ background-color: currentColor;
157
+ animation: pa-pulse $loader-pulse-duration infinite $loader-pulse-easing;
158
+
159
+ &--lg {
160
+ width: $stat-icon-size;
161
+ height: $stat-icon-size;
162
+ }
163
+ }
164
+
165
+ @keyframes pa-pulse {
166
+ 0%, 100% {
167
+ opacity: 1;
168
+ transform: scale(0);
169
+ }
170
+ 50% {
171
+ opacity: $opacity-muted;
172
+ transform: scale(1);
173
+ }
174
+ }
175
+
176
+ // Ring Loader
177
+ .pa-loader-ring {
178
+ display: inline-block;
179
+ width: $spinner-size;
180
+ height: $spinner-size;
181
+ position: relative;
182
+
183
+ &::after {
184
+ content: '';
185
+ display: block;
186
+ width: 100%;
187
+ height: 100%;
188
+ border-radius: 50%;
189
+ border: $loader-border-width solid currentColor;
190
+ border-color: currentColor transparent currentColor transparent;
191
+ animation: pa-spin 1.2s linear infinite;
192
+ }
193
+
194
+ &--lg {
195
+ width: $stat-icon-size;
196
+ height: $stat-icon-size;
197
+
198
+ &::after {
199
+ border-width: $loader-border-width;
200
+ }
201
+ }
202
+ }
203
+
204
+ // Wave Loader
205
+ .pa-loader-wave {
206
+ display: inline-flex;
207
+ gap: $badge-padding-v;
208
+ align-items: center;
209
+ height: $loader-bar-height;
210
+
211
+ span {
212
+ width: $loader-bar-width;
213
+ height: 100%;
214
+ background-color: currentColor;
215
+ animation: pa-wave 1.2s infinite ease-in-out;
216
+
217
+ &:nth-child(1) {
218
+ animation-delay: $loader-bars-delay-1;
219
+ }
220
+
221
+ &:nth-child(2) {
222
+ animation-delay: $loader-bars-delay-2;
223
+ }
224
+
225
+ &:nth-child(3) {
226
+ animation-delay: $loader-bars-delay-3;
227
+ }
228
+
229
+ &:nth-child(4) {
230
+ animation-delay: $loader-bars-delay-4;
231
+ }
232
+
233
+ &:nth-child(5) {
234
+ animation-delay: $loader-bars-delay-5;
235
+ }
236
+ }
237
+
238
+ &--lg {
239
+ height: $spinner-size;
240
+
241
+ span {
242
+ width: $loader-bar-width;
243
+ }
244
+ }
245
+ }
246
+
247
+ @keyframes pa-wave {
248
+ 0%, 40%, 100% {
249
+ transform: scaleY(0.4);
250
+ }
251
+ 20% {
252
+ transform: scaleY(1);
253
+ }
254
+ }
255
+
256
+ // Loader utilities
257
+ .pa-loader-overlay {
258
+ position: absolute;
259
+ top: 0;
260
+ left: 0;
261
+ right: 0;
262
+ bottom: 0;
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ background-color: var(--pa-loader-overlay-bg);
267
+ z-index: $z-index-loader;
268
+ }
269
+
270
+ .pa-loader-center {
271
+ display: flex;
272
+ flex-direction: column;
273
+ align-items: center;
274
+ justify-content: center;
275
+ text-align: center;
276
+ }
277
+
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Logic Tree Renderer - Scratch-style visual query representation
3
+ * Renders nested blocks showing logical flow and precedence
4
+ */
5
+ @use '../variables' as *;
6
+
7
+ .pa-logic-tree {
8
+ padding: $spacing-base;
9
+ background: #f9fafb;
10
+ border-radius: $border-radius;
11
+ min-height: 6.4rem;
12
+ font-family: $body-font-family;
13
+
14
+ // Empty state
15
+ &__empty {
16
+ text-align: center;
17
+ color: var(--pa-text-secondary);
18
+ padding: $spacing-xl;
19
+ font-style: italic;
20
+ }
21
+
22
+ // Empty branch (incomplete query)
23
+ &__empty-branch {
24
+ color: var(--pa-text-secondary);
25
+ font-style: italic;
26
+ padding: $spacing-sm $spacing-md;
27
+ background: #f9fafb;
28
+ border: 1.6px dashed #d1d5db;
29
+ border-radius: $border-radius-sm;
30
+ text-align: center;
31
+ }
32
+
33
+ // Node wrapper
34
+ &__node {
35
+ margin-bottom: $spacing-sm;
36
+
37
+ &:last-child {
38
+ margin-bottom: 0;
39
+ }
40
+ }
41
+
42
+ // Block (condition, logical, group)
43
+ &__block {
44
+ background: #fff;
45
+ border: 3.2px solid var(--pa-border-color);
46
+ border-radius: $border-radius;
47
+ padding: $spacing-sm;
48
+ position: relative;
49
+ transition: box-shadow 0.32s $easing-smooth;
50
+
51
+ &:hover {
52
+ box-shadow: $shadow-sm;
53
+ }
54
+
55
+ // Condition block (field operator value)
56
+ &--condition {
57
+ background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%);
58
+ border-color: var(--pa-primary-bg);
59
+ border-left-width: 6.4px;
60
+ }
61
+
62
+ // Logical operator blocks
63
+ &--logical {
64
+ padding: $spacing-md;
65
+ background: #fff;
66
+ }
67
+
68
+ &--and {
69
+ border-color: $warning-bg;
70
+ background: linear-gradient(135deg, #fff8e1 0%, #ffffff 100%);
71
+ }
72
+
73
+ &--or {
74
+ border-color: $info-bg;
75
+ background: linear-gradient(135deg, #e3f2fd 0%, #ffffff 100%);
76
+ }
77
+
78
+ // Group block (parentheses)
79
+ &--group {
80
+ border-color: $secondary-bg;
81
+ border-style: dashed;
82
+ background: linear-gradient(135deg, #f3f4f6 0%, #ffffff 100%);
83
+ }
84
+ }
85
+
86
+ // Block content for conditions
87
+ &__block-content {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: $spacing-sm;
91
+ flex-wrap: wrap;
92
+ }
93
+
94
+ // Tree structure container
95
+ &__tree-structure {
96
+ position: relative;
97
+ padding-left: 3.2rem;
98
+ }
99
+
100
+ // Tree branch (left or right operand)
101
+ &__tree-branch {
102
+ position: relative;
103
+ padding-left: 2.4rem;
104
+
105
+ // Vertical line connector
106
+ &::before {
107
+ content: '';
108
+ position: absolute;
109
+ left: 0;
110
+ top: 0;
111
+ bottom: 50%;
112
+ width: 3.2px;
113
+ background: #94a3b8;
114
+ }
115
+
116
+ // Horizontal line connector
117
+ &::after {
118
+ content: '';
119
+ position: absolute;
120
+ left: 0;
121
+ top: 1.6rem;
122
+ width: 1.6rem;
123
+ height: 3.2px;
124
+ background: #94a3b8;
125
+ }
126
+
127
+ // Left branch - extends vertical line down
128
+ &--left {
129
+ margin-bottom: 0.8rem;
130
+
131
+ &::before {
132
+ bottom: 0;
133
+ }
134
+ }
135
+
136
+ // Right branch - no bottom extension
137
+ &--right {
138
+ margin-top: 0.8rem;
139
+ }
140
+ }
141
+
142
+ // Operator node in tree
143
+ &__tree-operator {
144
+ position: relative;
145
+ padding-left: 2.4rem;
146
+ margin: 0.8rem 0;
147
+
148
+ // Vertical line through operator
149
+ &::before {
150
+ content: '';
151
+ position: absolute;
152
+ left: 0;
153
+ top: -0.8rem;
154
+ bottom: -0.8rem;
155
+ width: 3.2px;
156
+ background: #94a3b8;
157
+ }
158
+
159
+ // Horizontal line to operator
160
+ &::after {
161
+ content: '';
162
+ position: absolute;
163
+ left: 0;
164
+ top: 50%;
165
+ transform: translateY(-50%);
166
+ width: 1.6rem;
167
+ height: 3.2px;
168
+ background: #94a3b8;
169
+ }
170
+
171
+ .pa-logic-tree__token--logical {
172
+ display: inline-block;
173
+ background: #fff3e0;
174
+ color: #e65100;
175
+ border: 3.2px solid #ff9800;
176
+ padding: 0.4rem 1.2rem;
177
+ border-radius: $border-radius;
178
+ font-weight: $font-weight-bold;
179
+ text-transform: uppercase;
180
+ letter-spacing: 0.05em;
181
+ box-shadow: 0 1.6px 4.8px rgba(0, 0, 0, 0.1);
182
+ }
183
+ }
184
+
185
+ // Group label
186
+ &__group-label {
187
+ font-weight: $font-weight-medium;
188
+ font-size: $font-size-sm;
189
+ color: var(--pa-text-secondary);
190
+ margin-bottom: $spacing-sm;
191
+ padding-bottom: $spacing-sm;
192
+ border-bottom: 1.6px dashed $border-color;
193
+ }
194
+
195
+ // Group content (indented)
196
+ &__group-content {
197
+ padding-left: $spacing-md;
198
+ }
199
+
200
+ // Token representation (colored badges)
201
+ &__token {
202
+ display: inline-block;
203
+ padding: 0.4rem 0.8rem;
204
+ border-radius: $border-radius-sm;
205
+ font-size: $font-size-xs;
206
+ font-weight: $font-weight-medium;
207
+ font-family: $font-stack-mono;
208
+ white-space: nowrap;
209
+
210
+ // Field token (blue)
211
+ &--field {
212
+ background: #e3f2fd;
213
+ color: #1565c0;
214
+ border: 1.6px solid #bbdefb;
215
+ }
216
+
217
+ // Operator token (gray)
218
+ &--operator {
219
+ background: #f5f5f5;
220
+ color: #616161;
221
+ border: 1.6px solid #e0e0e0;
222
+ }
223
+
224
+ // Value token (green)
225
+ &--value {
226
+ background: #e8f5e9;
227
+ color: #2e7d32;
228
+ border: 1.6px solid #c8e6c9;
229
+ }
230
+
231
+ // Logical token (orange/blue)
232
+ &--logical {
233
+ background: #fff3e0;
234
+ color: #e65100;
235
+ border: 1.6px solid #ffe0b2;
236
+ font-weight: $font-weight-bold;
237
+ text-transform: uppercase;
238
+ letter-spacing: 0.05em;
239
+ }
240
+
241
+ // Paren token (purple)
242
+ &--paren {
243
+ background: #f3e5f5;
244
+ color: #7b1fa2;
245
+ border: 1.6px solid #e1bee7;
246
+ }
247
+ }
248
+
249
+ // Animation for tree building
250
+ &--animated {
251
+ .pa-logic-tree__node {
252
+ animation: slideIn 0.48s $easing-smooth;
253
+ }
254
+
255
+ .pa-logic-tree__block {
256
+ animation: fadeIn 0.64s $easing-smooth;
257
+ }
258
+ }
259
+ }
260
+
261
+ // Animations
262
+ @keyframes slideIn {
263
+ from {
264
+ opacity: 0;
265
+ transform: translateX(-16px);
266
+ }
267
+ to {
268
+ opacity: 1;
269
+ transform: translateX(0);
270
+ }
271
+ }
272
+
273
+ @keyframes fadeIn {
274
+ from {
275
+ opacity: 0;
276
+ }
277
+ to {
278
+ opacity: 1;
279
+ }
280
+ }