@keenmate/pure-admin-core 2.3.0 → 2.3.2

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 (69) hide show
  1. package/README.md +7 -5
  2. package/dist/css/main.css +207 -181
  3. package/package.json +1 -1
  4. package/snippets/buttons.html +375 -365
  5. package/src/scss/_base-css-variables.scss +8 -0
  6. package/src/scss/_core.scss +121 -121
  7. package/src/scss/core-components/_alerts.scss +227 -227
  8. package/src/scss/core-components/_badges.scss +16 -16
  9. package/src/scss/core-components/_base.scss +125 -125
  10. package/src/scss/core-components/_buttons.scss +580 -548
  11. package/src/scss/core-components/_callouts.scss +152 -152
  12. package/src/scss/core-components/_cards.scss +488 -488
  13. package/src/scss/core-components/_checkbox-lists.scss +289 -289
  14. package/src/scss/core-components/_code.scss +141 -141
  15. package/src/scss/core-components/_command-palette.scss +509 -509
  16. package/src/scss/core-components/_comparison.scss +172 -172
  17. package/src/scss/core-components/_data-display.scss +9 -9
  18. package/src/scss/core-components/_data-viz.scss +9 -9
  19. package/src/scss/core-components/_detail-panel.scss +1 -1
  20. package/src/scss/core-components/_file-selector.scss +780 -780
  21. package/src/scss/core-components/_filter-card.scss +58 -58
  22. package/src/scss/core-components/_forms.scss +16 -16
  23. package/src/scss/core-components/_grid.scss +293 -293
  24. package/src/scss/core-components/_layout.scss +15 -15
  25. package/src/scss/core-components/_lists.scss +211 -211
  26. package/src/scss/core-components/_loaders.scss +277 -277
  27. package/src/scss/core-components/_logic-tree.scss +280 -280
  28. package/src/scss/core-components/_modals.scss +203 -203
  29. package/src/scss/core-components/_notifications.scss +320 -320
  30. package/src/scss/core-components/_pagers.scss +141 -141
  31. package/src/scss/core-components/_popconfirm.scss +170 -170
  32. package/src/scss/core-components/_profile.scss +405 -405
  33. package/src/scss/core-components/_scrollbars.scss +40 -40
  34. package/src/scss/core-components/_settings-panel.scss +141 -141
  35. package/src/scss/core-components/_statistics.scss +200 -201
  36. package/src/scss/core-components/_tables.scss +900 -900
  37. package/src/scss/core-components/_tabs.scss +504 -504
  38. package/src/scss/core-components/_timeline.scss +589 -589
  39. package/src/scss/core-components/_toasts.scss +425 -425
  40. package/src/scss/core-components/_tooltips.scss +605 -605
  41. package/src/scss/core-components/_utilities.scss +1 -1
  42. package/src/scss/core-components/_web-components-theme.scss +21 -21
  43. package/src/scss/core-components/badges/_badge-base.scss +121 -121
  44. package/src/scss/core-components/badges/_badge-group.scss +25 -25
  45. package/src/scss/core-components/badges/_composite-badge-variants.scss +396 -396
  46. package/src/scss/core-components/badges/_composite-badge.scss +70 -70
  47. package/src/scss/core-components/badges/_index.scss +10 -10
  48. package/src/scss/core-components/badges/_labels.scss +155 -155
  49. package/src/scss/core-components/forms/_checkboxes-radios.scss +205 -205
  50. package/src/scss/core-components/forms/_form-inputs.scss +136 -135
  51. package/src/scss/core-components/forms/_form-layout.scss +66 -66
  52. package/src/scss/core-components/forms/_form-states.scss +115 -115
  53. package/src/scss/core-components/forms/_index.scss +12 -12
  54. package/src/scss/core-components/forms/_input-groups.scss +154 -154
  55. package/src/scss/core-components/forms/_input-wrapper.scss +89 -89
  56. package/src/scss/core-components/forms/_query-editor.scss +313 -313
  57. package/src/scss/core-components/layout/_index.scss +11 -11
  58. package/src/scss/core-components/layout/_layout-container.scss +168 -168
  59. package/src/scss/core-components/layout/_layout-responsive.scss +99 -99
  60. package/src/scss/core-components/layout/_navbar-elements.scss +250 -250
  61. package/src/scss/core-components/layout/_navbar.scss +83 -83
  62. package/src/scss/core-components/layout/_sidebar-states.scss +237 -237
  63. package/src/scss/core-components/layout/_sidebar.scss +234 -234
  64. package/src/scss/main.scss +7 -7
  65. package/src/scss/utilities.scss +740 -740
  66. package/src/scss/variables/_base.scss +228 -228
  67. package/src/scss/variables/_components.scss +748 -748
  68. package/src/scss/variables/_layout.scss +65 -65
  69. package/src/scss/variables/_typography.scss +37 -37
@@ -1,509 +1,509 @@
1
- /* ========================================
2
- Command Palette Component
3
- macOS Spotlight-style search with context switching
4
- ======================================== */
5
- @use '../variables' as *;
6
-
7
- .pa-command-palette {
8
- position: fixed;
9
- inset: 0; // RTL: full screen works in both directions
10
- z-index: $z-index-command-palette;
11
- display: none;
12
- align-items: flex-start;
13
- justify-content: center;
14
- padding-top: $command-palette-offset-top;
15
-
16
- &--active {
17
- display: flex;
18
- }
19
-
20
- // Backdrop overlay
21
- &__backdrop {
22
- position: absolute;
23
- inset: 0; // RTL: full screen works in both directions
24
- background-color: var(--pa-command-palette-backdrop-bg);
25
- backdrop-filter: blur($command-palette-backdrop-blur);
26
- animation: fadeIn $transition-normal $easing-smooth;
27
- }
28
-
29
- // Main container
30
- &__container {
31
- position: relative;
32
- width: 100%;
33
- max-width: $command-palette-width;
34
- background-color: var(--pa-modal-content-bg);
35
- border-radius: $command-palette-border-radius;
36
- box-shadow: $command-palette-shadow;
37
- animation: slideDown $transition-normal $easing-smooth;
38
- overflow: hidden;
39
- }
40
-
41
- // Search input wrapper
42
- &__search {
43
- position: relative;
44
- border-bottom: $border-width-base solid var(--pa-border-color);
45
- padding: $spacing-sm;
46
- }
47
-
48
- // Tokens container (resolved query fragments)
49
- &__tokens {
50
- display: flex;
51
- flex-wrap: wrap;
52
- gap: $spacing-xs;
53
- align-items: center;
54
-
55
- .pa-badge {
56
- display: inline-flex;
57
- align-items: center;
58
- margin: 0;
59
-
60
- // Remove button inside badge
61
- &__remove {
62
- margin-inline-start: $spacing-xs; // RTL: flips to margin-right
63
- padding: 0 $spacing-xs;
64
- border: none;
65
- background: transparent;
66
- color: inherit;
67
- cursor: pointer;
68
- font-size: 1.2em;
69
- line-height: 1;
70
- opacity: 0.7;
71
- transition: opacity $transition-fast $easing-smooth;
72
-
73
- &:hover {
74
- opacity: 1;
75
- }
76
- }
77
- }
78
- }
79
-
80
- &__input {
81
- width: 100%;
82
- height: $command-palette-input-height;
83
- padding: $command-palette-input-padding-v $command-palette-input-padding-h;
84
- font-size: $command-palette-input-font-size;
85
- border: $border-width-base solid var(--pa-border-color);
86
- border-radius: $border-radius;
87
- background-color: var(--pa-input-bg);
88
- color: var(--pa-text-color-1);
89
- outline: none;
90
- transition: border-color $transition-fast $easing-snappy;
91
-
92
- &:focus {
93
- border-color: $input-focus-border-color;
94
- box-shadow: 0 0 0 $focus-ring-width $accent-light;
95
- }
96
-
97
- &::placeholder {
98
- color: var(--pa-text-color-2);
99
- opacity: $opacity-muted;
100
- }
101
- }
102
-
103
- // Context label (e.g., "Searching in Products")
104
- &__context {
105
- position: absolute;
106
- inset-inline-end: calc(#{$spacing-sm} + #{$command-palette-input-padding-h}); // RTL: flips to left
107
- top: 50%;
108
- transform: translateY(-50%);
109
- font-size: $font-size-xs;
110
- color: var(--pa-accent);
111
- font-weight: $font-weight-medium;
112
- padding: $spacing-xs $spacing-sm;
113
- background-color: var(--pa-accent-light);
114
- border-radius: $border-radius-sm;
115
- opacity: 0;
116
- transition: opacity $transition-fast $easing-smooth;
117
-
118
- &--visible {
119
- opacity: 1;
120
- }
121
- }
122
-
123
- // Results container
124
- &__results {
125
- max-height: $command-palette-results-max-height;
126
- overflow-y: auto;
127
- padding: $spacing-sm 0;
128
- position: relative;
129
-
130
- // Loading state - show subtle opacity overlay
131
- &--loading {
132
- &::after {
133
- content: '';
134
- position: absolute;
135
- inset: 0; // RTL: full overlay works in both directions
136
- background-color: rgba($modal-content-bg, 0.7);
137
- pointer-events: none;
138
- z-index: 1;
139
- }
140
- }
141
- }
142
-
143
- // Empty state
144
- &__empty {
145
- padding: $command-palette-empty-padding-v $command-palette-input-padding-h;
146
- text-align: center;
147
- color: var(--pa-text-color-2);
148
- font-size: $font-size-sm;
149
- }
150
-
151
- // Loader
152
- &__loader {
153
- padding: $command-palette-empty-padding-v $command-palette-input-padding-h;
154
- display: flex;
155
- align-items: center;
156
- justify-content: center;
157
- gap: $spacing-sm;
158
- color: var(--pa-text-color-2);
159
- font-size: $font-size-sm;
160
-
161
- .pa-spinner {
162
- width: $spacing-base;
163
- height: $spacing-base;
164
- }
165
- }
166
-
167
- // Result item
168
- &__item {
169
- padding: $command-palette-item-padding-v $command-palette-input-padding-h;
170
- cursor: pointer;
171
- transition: background-color $transition-fast $easing-smooth;
172
- display: flex;
173
- align-items: center;
174
- gap: $spacing-sm;
175
-
176
- &:hover {
177
- background-color: var(--pa-command-palette-item-hover-bg);
178
- }
179
-
180
- &--active {
181
- background-color: var(--pa-command-palette-item-active-bg);
182
- }
183
- }
184
-
185
- // Item icon
186
- &__item-icon {
187
- flex-shrink: 0;
188
- width: $command-palette-item-icon-size;
189
- height: $command-palette-item-icon-size;
190
- display: flex;
191
- align-items: center;
192
- justify-content: center;
193
- background-color: var(--pa-accent-light);
194
- color: var(--pa-accent);
195
- border-radius: $border-radius-sm;
196
- font-size: $font-size-sm;
197
- }
198
-
199
- // Item content
200
- &__item-content {
201
- flex: 1;
202
- min-width: 0;
203
- }
204
-
205
- &__item-title {
206
- font-size: $font-size-sm;
207
- font-weight: $font-weight-medium;
208
- color: var(--pa-text-color-1);
209
- margin: 0;
210
- white-space: nowrap;
211
- overflow: hidden;
212
- text-overflow: ellipsis;
213
-
214
- mark {
215
- background-color: var(--pa-command-palette-highlight-bg);
216
- color: var(--pa-command-palette-highlight-text);
217
- font-weight: $font-weight-semibold;
218
- padding: 0 2px;
219
- border-radius: 2px;
220
- }
221
- }
222
-
223
- &__item-meta {
224
- font-size: $font-size-xs;
225
- color: var(--pa-text-color-2);
226
- margin: 0;
227
- margin-top: 2px;
228
- white-space: nowrap;
229
- overflow: hidden;
230
- text-overflow: ellipsis;
231
- }
232
-
233
- // Item badge (e.g., category, status)
234
- &__item-badge {
235
- flex-shrink: 0;
236
- font-size: $font-size-xs;
237
- padding: 2px $spacing-xs;
238
- background-color: $secondary-light-bg;
239
- color: var(--pa-text-color-2);
240
- border-radius: $border-radius-sm;
241
- }
242
-
243
- // Footer with keyboard hints
244
- &__footer {
245
- border-top: $border-width-base solid var(--pa-border-color);
246
- padding: $spacing-sm $command-palette-input-padding-h;
247
- display: flex;
248
- gap: $spacing-base;
249
- font-size: $font-size-xs;
250
- color: var(--pa-text-color-2);
251
- }
252
-
253
- &__hint {
254
- display: flex;
255
- align-items: center;
256
- gap: $spacing-xs;
257
- }
258
-
259
- &__key {
260
- padding: 2px $spacing-xs;
261
- background-color: $secondary-light-bg;
262
- border: $border-width-base solid var(--pa-border-color);
263
- border-radius: $border-radius-sm;
264
- font-family: $body-font-family;
265
- font-weight: $font-weight-medium;
266
- font-size: $font-size-2xs;
267
- line-height: 1;
268
- }
269
-
270
- // Section headers (for grouping results)
271
- &__section {
272
- padding: $spacing-sm $command-palette-input-padding-h $spacing-xs;
273
- font-size: $font-size-xs;
274
- font-weight: $font-weight-semibold;
275
- color: var(--pa-text-color-2);
276
- text-transform: uppercase;
277
- letter-spacing: 0.5px;
278
- }
279
-
280
- // Pagination indicator
281
- &__pagination {
282
- padding: $spacing-xs $command-palette-input-padding-h;
283
- text-align: center;
284
- font-size: $font-size-xs;
285
- color: var(--pa-text-color-2);
286
- border-top: $border-width-base solid var(--pa-border-color);
287
- }
288
- }
289
-
290
- // Animations
291
- @keyframes fadeIn {
292
- from {
293
- opacity: 0;
294
- }
295
- to {
296
- opacity: 1;
297
- }
298
- }
299
-
300
- @keyframes slideDown {
301
- from {
302
- opacity: 0;
303
- transform: translateY(-20px);
304
- }
305
- to {
306
- opacity: 1;
307
- transform: translateY(0);
308
- }
309
- }
310
-
311
- // Responsive
312
- @media (max-width: $mobile-breakpoint) {
313
- .pa-command-palette {
314
- padding-top: $spacing-base;
315
-
316
- &__container {
317
- max-width: calc(100% - #{$spacing-base * 2});
318
- }
319
-
320
- &__results {
321
- max-height: 60vh;
322
- }
323
- }
324
- }
325
-
326
- /* ========================================
327
- Navbar Search Trigger
328
- Button that opens the command palette
329
- ======================================== */
330
-
331
- .pa-navbar-search {
332
- display: flex;
333
- align-items: center;
334
- gap: $spacing-sm;
335
- padding: $input-padding-v $input-padding-h;
336
- background-color: var(--pa-input-bg);
337
- border: $border-width-base solid var(--pa-border-color);
338
- border-radius: $border-radius;
339
- cursor: pointer;
340
- transition: border-color $transition-fast $easing-snappy;
341
-
342
- &:hover {
343
- border-color: $input-focus-border-color;
344
- }
345
-
346
- &:focus {
347
- outline: none;
348
- border-color: $input-focus-border-color;
349
- box-shadow: 0 0 0 $focus-ring-width $accent-light;
350
- }
351
-
352
- // Size modifiers (matching input sizes)
353
- &--xs {
354
- height: #{$base-input-size-xs-height}rem;
355
- font-size: $font-size-xs;
356
- }
357
-
358
- &--sm {
359
- height: #{$base-input-size-sm-height}rem;
360
- font-size: $font-size-xs;
361
- }
362
-
363
- &--md {
364
- height: #{$base-input-size-md-height}rem;
365
- font-size: $font-size-sm;
366
- }
367
-
368
- &--lg {
369
- height: #{$base-input-size-lg-height}rem;
370
- font-size: $font-size-base;
371
- }
372
-
373
- &--xl {
374
- height: #{$base-input-size-xl-height}rem;
375
- font-size: $font-size-lg;
376
- }
377
-
378
- &__icon {
379
- flex-shrink: 0;
380
- opacity: $opacity-muted;
381
- }
382
-
383
- &__placeholder {
384
- flex: 1;
385
- color: var(--pa-text-color-2);
386
- white-space: nowrap;
387
- overflow: hidden;
388
- text-overflow: ellipsis;
389
- }
390
-
391
- &__shortcut {
392
- display: flex;
393
- align-items: center;
394
- gap: 2px;
395
- flex-shrink: 0;
396
-
397
- kbd {
398
- display: inline-flex;
399
- align-items: center;
400
- justify-content: center;
401
- min-width: 2rem;
402
- height: 2rem;
403
- padding: 0 $spacing-xs;
404
- font-family: $body-font-family;
405
- font-size: $font-size-2xs;
406
- font-weight: $font-weight-medium;
407
- color: var(--pa-text-color-2);
408
- background-color: $secondary-light-bg;
409
- border: $border-width-base solid var(--pa-border-color);
410
- border-radius: $border-radius-sm;
411
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
412
- }
413
- }
414
- }
415
-
416
- // Responsive: hide shortcut on small screens
417
- @media (max-width: $mobile-breakpoint) {
418
- .pa-navbar-search {
419
- &__placeholder {
420
- display: none;
421
- }
422
-
423
- &__shortcut {
424
- display: none;
425
- }
426
- }
427
- }
428
-
429
- /* ========================================
430
- Shortcut Help Dialog
431
- Modal content for displaying keyboard shortcuts
432
- ======================================== */
433
-
434
- .pa-shortcut-help {
435
- display: flex;
436
- flex-direction: column;
437
- gap: $spacing-base;
438
- }
439
-
440
- .pa-shortcut-help__category {
441
- display: flex;
442
- flex-direction: column;
443
- gap: $spacing-xs;
444
- }
445
-
446
- .pa-shortcut-help__category-title {
447
- font-size: $font-size-xs;
448
- font-weight: $font-weight-semibold;
449
- text-transform: uppercase;
450
- letter-spacing: 0.5px;
451
- color: var(--pa-text-color-2);
452
- margin: 0;
453
- padding-bottom: $spacing-xs;
454
- border-bottom: $border-width-base solid var(--pa-border-color);
455
- }
456
-
457
- .pa-shortcut-help__list {
458
- display: flex;
459
- flex-direction: column;
460
- gap: $spacing-xs;
461
- }
462
-
463
- .pa-shortcut-help__item {
464
- display: flex;
465
- align-items: center;
466
- justify-content: space-between;
467
- gap: $spacing-base;
468
- padding: $spacing-xs 0;
469
- }
470
-
471
- .pa-shortcut-help__keys {
472
- display: flex;
473
- align-items: center;
474
- gap: $spacing-xs;
475
- flex-shrink: 0;
476
- }
477
-
478
- .pa-shortcut-help__key {
479
- display: inline-flex;
480
- align-items: center;
481
- justify-content: center;
482
- min-width: $spacing-lg;
483
- height: $spacing-lg;
484
- padding: 0 $spacing-xs;
485
- font-family: $body-font-family;
486
- font-size: $font-size-2xs;
487
- font-weight: $font-weight-medium;
488
- color: var(--pa-text-color-1);
489
- background-color: $secondary-light-bg;
490
- border: $border-width-base solid var(--pa-border-color);
491
- border-radius: $border-radius-sm;
492
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
493
- }
494
-
495
- .pa-shortcut-help__separator {
496
- color: var(--pa-text-color-2);
497
- font-size: $font-size-xs;
498
- }
499
-
500
- .pa-shortcut-help__description {
501
- color: var(--pa-text-color-1);
502
- font-size: $font-size-sm;
503
- }
504
-
505
- .pa-shortcut-help__empty {
506
- text-align: center;
507
- color: var(--pa-text-color-2);
508
- padding: $spacing-xl;
509
- }
1
+ /* ========================================
2
+ Command Palette Component
3
+ macOS Spotlight-style search with context switching
4
+ ======================================== */
5
+ @use '../variables' as *;
6
+
7
+ .pa-command-palette {
8
+ position: fixed;
9
+ inset: 0; // RTL: full screen works in both directions
10
+ z-index: $z-index-command-palette;
11
+ display: none;
12
+ align-items: flex-start;
13
+ justify-content: center;
14
+ padding-top: $command-palette-offset-top;
15
+
16
+ &--active {
17
+ display: flex;
18
+ }
19
+
20
+ // Backdrop overlay
21
+ &__backdrop {
22
+ position: absolute;
23
+ inset: 0; // RTL: full screen works in both directions
24
+ background-color: var(--pa-command-palette-backdrop-bg);
25
+ backdrop-filter: blur($command-palette-backdrop-blur);
26
+ animation: fadeIn $transition-normal $easing-smooth;
27
+ }
28
+
29
+ // Main container
30
+ &__container {
31
+ position: relative;
32
+ width: 100%;
33
+ max-width: $command-palette-width;
34
+ background-color: var(--pa-modal-content-bg);
35
+ border-radius: var(--pa-border-radius);
36
+ box-shadow: $command-palette-shadow;
37
+ animation: slideDown $transition-normal $easing-smooth;
38
+ overflow: hidden;
39
+ }
40
+
41
+ // Search input wrapper
42
+ &__search {
43
+ position: relative;
44
+ border-bottom: $border-width-base solid var(--pa-border-color);
45
+ padding: $spacing-sm;
46
+ }
47
+
48
+ // Tokens container (resolved query fragments)
49
+ &__tokens {
50
+ display: flex;
51
+ flex-wrap: wrap;
52
+ gap: $spacing-xs;
53
+ align-items: center;
54
+
55
+ .pa-badge {
56
+ display: inline-flex;
57
+ align-items: center;
58
+ margin: 0;
59
+
60
+ // Remove button inside badge
61
+ &__remove {
62
+ margin-inline-start: $spacing-xs; // RTL: flips to margin-right
63
+ padding: 0 $spacing-xs;
64
+ border: none;
65
+ background: transparent;
66
+ color: inherit;
67
+ cursor: pointer;
68
+ font-size: 1.2em;
69
+ line-height: 1;
70
+ opacity: 0.7;
71
+ transition: opacity $transition-fast $easing-smooth;
72
+
73
+ &:hover {
74
+ opacity: 1;
75
+ }
76
+ }
77
+ }
78
+ }
79
+
80
+ &__input {
81
+ width: 100%;
82
+ height: $command-palette-input-height;
83
+ padding: $command-palette-input-padding-v $command-palette-input-padding-h;
84
+ font-size: $command-palette-input-font-size;
85
+ border: $border-width-base solid var(--pa-border-color);
86
+ border-radius: var(--pa-border-radius);
87
+ background-color: var(--pa-input-bg);
88
+ color: var(--pa-text-color-1);
89
+ outline: none;
90
+ transition: border-color $transition-fast $easing-snappy;
91
+
92
+ &:focus {
93
+ border-color: $input-focus-border-color;
94
+ box-shadow: 0 0 0 $focus-ring-width $accent-light;
95
+ }
96
+
97
+ &::placeholder {
98
+ color: var(--pa-text-color-2);
99
+ opacity: $opacity-muted;
100
+ }
101
+ }
102
+
103
+ // Context label (e.g., "Searching in Products")
104
+ &__context {
105
+ position: absolute;
106
+ inset-inline-end: calc(#{$spacing-sm} + #{$command-palette-input-padding-h}); // RTL: flips to left
107
+ top: 50%;
108
+ transform: translateY(-50%);
109
+ font-size: $font-size-xs;
110
+ color: var(--pa-accent);
111
+ font-weight: $font-weight-medium;
112
+ padding: $spacing-xs $spacing-sm;
113
+ background-color: var(--pa-accent-light);
114
+ border-radius: var(--pa-border-radius-sm);
115
+ opacity: 0;
116
+ transition: opacity $transition-fast $easing-smooth;
117
+
118
+ &--visible {
119
+ opacity: 1;
120
+ }
121
+ }
122
+
123
+ // Results container
124
+ &__results {
125
+ max-height: $command-palette-results-max-height;
126
+ overflow-y: auto;
127
+ padding: $spacing-sm 0;
128
+ position: relative;
129
+
130
+ // Loading state - show subtle opacity overlay
131
+ &--loading {
132
+ &::after {
133
+ content: '';
134
+ position: absolute;
135
+ inset: 0; // RTL: full overlay works in both directions
136
+ background-color: rgba($modal-content-bg, 0.7);
137
+ pointer-events: none;
138
+ z-index: 1;
139
+ }
140
+ }
141
+ }
142
+
143
+ // Empty state
144
+ &__empty {
145
+ padding: $command-palette-empty-padding-v $command-palette-input-padding-h;
146
+ text-align: center;
147
+ color: var(--pa-text-color-2);
148
+ font-size: $font-size-sm;
149
+ }
150
+
151
+ // Loader
152
+ &__loader {
153
+ padding: $command-palette-empty-padding-v $command-palette-input-padding-h;
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: center;
157
+ gap: $spacing-sm;
158
+ color: var(--pa-text-color-2);
159
+ font-size: $font-size-sm;
160
+
161
+ .pa-spinner {
162
+ width: $spacing-base;
163
+ height: $spacing-base;
164
+ }
165
+ }
166
+
167
+ // Result item
168
+ &__item {
169
+ padding: $command-palette-item-padding-v $command-palette-input-padding-h;
170
+ cursor: pointer;
171
+ transition: background-color $transition-fast $easing-smooth;
172
+ display: flex;
173
+ align-items: center;
174
+ gap: $spacing-sm;
175
+
176
+ &:hover {
177
+ background-color: var(--pa-command-palette-item-hover-bg);
178
+ }
179
+
180
+ &--active {
181
+ background-color: var(--pa-command-palette-item-active-bg);
182
+ }
183
+ }
184
+
185
+ // Item icon
186
+ &__item-icon {
187
+ flex-shrink: 0;
188
+ width: $command-palette-item-icon-size;
189
+ height: $command-palette-item-icon-size;
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ background-color: var(--pa-accent-light);
194
+ color: var(--pa-accent);
195
+ border-radius: var(--pa-border-radius-sm);
196
+ font-size: $font-size-sm;
197
+ }
198
+
199
+ // Item content
200
+ &__item-content {
201
+ flex: 1;
202
+ min-width: 0;
203
+ }
204
+
205
+ &__item-title {
206
+ font-size: $font-size-sm;
207
+ font-weight: $font-weight-medium;
208
+ color: var(--pa-text-color-1);
209
+ margin: 0;
210
+ white-space: nowrap;
211
+ overflow: hidden;
212
+ text-overflow: ellipsis;
213
+
214
+ mark {
215
+ background-color: var(--pa-command-palette-highlight-bg);
216
+ color: var(--pa-command-palette-highlight-text);
217
+ font-weight: $font-weight-semibold;
218
+ padding: 0 2px;
219
+ border-radius: var(--pa-border-radius-sm);
220
+ }
221
+ }
222
+
223
+ &__item-meta {
224
+ font-size: $font-size-xs;
225
+ color: var(--pa-text-color-2);
226
+ margin: 0;
227
+ margin-top: 2px;
228
+ white-space: nowrap;
229
+ overflow: hidden;
230
+ text-overflow: ellipsis;
231
+ }
232
+
233
+ // Item badge (e.g., category, status)
234
+ &__item-badge {
235
+ flex-shrink: 0;
236
+ font-size: $font-size-xs;
237
+ padding: 2px $spacing-xs;
238
+ background-color: $secondary-light-bg;
239
+ color: var(--pa-text-color-2);
240
+ border-radius: var(--pa-border-radius-sm);
241
+ }
242
+
243
+ // Footer with keyboard hints
244
+ &__footer {
245
+ border-top: $border-width-base solid var(--pa-border-color);
246
+ padding: $spacing-sm $command-palette-input-padding-h;
247
+ display: flex;
248
+ gap: $spacing-base;
249
+ font-size: $font-size-xs;
250
+ color: var(--pa-text-color-2);
251
+ }
252
+
253
+ &__hint {
254
+ display: flex;
255
+ align-items: center;
256
+ gap: $spacing-xs;
257
+ }
258
+
259
+ &__key {
260
+ padding: 2px $spacing-xs;
261
+ background-color: $secondary-light-bg;
262
+ border: $border-width-base solid var(--pa-border-color);
263
+ border-radius: var(--pa-border-radius-sm);
264
+ font-family: $body-font-family;
265
+ font-weight: $font-weight-medium;
266
+ font-size: $font-size-2xs;
267
+ line-height: 1;
268
+ }
269
+
270
+ // Section headers (for grouping results)
271
+ &__section {
272
+ padding: $spacing-sm $command-palette-input-padding-h $spacing-xs;
273
+ font-size: $font-size-xs;
274
+ font-weight: $font-weight-semibold;
275
+ color: var(--pa-text-color-2);
276
+ text-transform: uppercase;
277
+ letter-spacing: 0.5px;
278
+ }
279
+
280
+ // Pagination indicator
281
+ &__pagination {
282
+ padding: $spacing-xs $command-palette-input-padding-h;
283
+ text-align: center;
284
+ font-size: $font-size-xs;
285
+ color: var(--pa-text-color-2);
286
+ border-top: $border-width-base solid var(--pa-border-color);
287
+ }
288
+ }
289
+
290
+ // Animations
291
+ @keyframes fadeIn {
292
+ from {
293
+ opacity: 0;
294
+ }
295
+ to {
296
+ opacity: 1;
297
+ }
298
+ }
299
+
300
+ @keyframes slideDown {
301
+ from {
302
+ opacity: 0;
303
+ transform: translateY(-20px);
304
+ }
305
+ to {
306
+ opacity: 1;
307
+ transform: translateY(0);
308
+ }
309
+ }
310
+
311
+ // Responsive
312
+ @media (max-width: $mobile-breakpoint) {
313
+ .pa-command-palette {
314
+ padding-top: $spacing-base;
315
+
316
+ &__container {
317
+ max-width: calc(100% - #{$spacing-base * 2});
318
+ }
319
+
320
+ &__results {
321
+ max-height: 60vh;
322
+ }
323
+ }
324
+ }
325
+
326
+ /* ========================================
327
+ Navbar Search Trigger
328
+ Button that opens the command palette
329
+ ======================================== */
330
+
331
+ .pa-navbar-search {
332
+ display: flex;
333
+ align-items: center;
334
+ gap: $spacing-sm;
335
+ padding: $input-padding-v $input-padding-h;
336
+ background-color: var(--pa-input-bg);
337
+ border: $border-width-base solid var(--pa-border-color);
338
+ border-radius: var(--pa-border-radius);
339
+ cursor: pointer;
340
+ transition: border-color $transition-fast $easing-snappy;
341
+
342
+ &:hover {
343
+ border-color: $input-focus-border-color;
344
+ }
345
+
346
+ &:focus {
347
+ outline: none;
348
+ border-color: $input-focus-border-color;
349
+ box-shadow: 0 0 0 $focus-ring-width $accent-light;
350
+ }
351
+
352
+ // Size modifiers (matching input sizes)
353
+ &--xs {
354
+ height: #{$base-input-size-xs-height}rem;
355
+ font-size: $font-size-xs;
356
+ }
357
+
358
+ &--sm {
359
+ height: #{$base-input-size-sm-height}rem;
360
+ font-size: $font-size-xs;
361
+ }
362
+
363
+ &--md {
364
+ height: #{$base-input-size-md-height}rem;
365
+ font-size: $font-size-sm;
366
+ }
367
+
368
+ &--lg {
369
+ height: #{$base-input-size-lg-height}rem;
370
+ font-size: $font-size-base;
371
+ }
372
+
373
+ &--xl {
374
+ height: #{$base-input-size-xl-height}rem;
375
+ font-size: $font-size-lg;
376
+ }
377
+
378
+ &__icon {
379
+ flex-shrink: 0;
380
+ opacity: $opacity-muted;
381
+ }
382
+
383
+ &__placeholder {
384
+ flex: 1;
385
+ color: var(--pa-text-color-2);
386
+ white-space: nowrap;
387
+ overflow: hidden;
388
+ text-overflow: ellipsis;
389
+ }
390
+
391
+ &__shortcut {
392
+ display: flex;
393
+ align-items: center;
394
+ gap: 2px;
395
+ flex-shrink: 0;
396
+
397
+ kbd {
398
+ display: inline-flex;
399
+ align-items: center;
400
+ justify-content: center;
401
+ min-width: 2rem;
402
+ height: 2rem;
403
+ padding: 0 $spacing-xs;
404
+ font-family: $body-font-family;
405
+ font-size: $font-size-2xs;
406
+ font-weight: $font-weight-medium;
407
+ color: var(--pa-text-color-2);
408
+ background-color: $secondary-light-bg;
409
+ border: $border-width-base solid var(--pa-border-color);
410
+ border-radius: var(--pa-border-radius-sm);
411
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
412
+ }
413
+ }
414
+ }
415
+
416
+ // Responsive: hide shortcut on small screens
417
+ @media (max-width: $mobile-breakpoint) {
418
+ .pa-navbar-search {
419
+ &__placeholder {
420
+ display: none;
421
+ }
422
+
423
+ &__shortcut {
424
+ display: none;
425
+ }
426
+ }
427
+ }
428
+
429
+ /* ========================================
430
+ Shortcut Help Dialog
431
+ Modal content for displaying keyboard shortcuts
432
+ ======================================== */
433
+
434
+ .pa-shortcut-help {
435
+ display: flex;
436
+ flex-direction: column;
437
+ gap: $spacing-base;
438
+ }
439
+
440
+ .pa-shortcut-help__category {
441
+ display: flex;
442
+ flex-direction: column;
443
+ gap: $spacing-xs;
444
+ }
445
+
446
+ .pa-shortcut-help__category-title {
447
+ font-size: $font-size-xs;
448
+ font-weight: $font-weight-semibold;
449
+ text-transform: uppercase;
450
+ letter-spacing: 0.5px;
451
+ color: var(--pa-text-color-2);
452
+ margin: 0;
453
+ padding-bottom: $spacing-xs;
454
+ border-bottom: $border-width-base solid var(--pa-border-color);
455
+ }
456
+
457
+ .pa-shortcut-help__list {
458
+ display: flex;
459
+ flex-direction: column;
460
+ gap: $spacing-xs;
461
+ }
462
+
463
+ .pa-shortcut-help__item {
464
+ display: flex;
465
+ align-items: center;
466
+ justify-content: space-between;
467
+ gap: $spacing-base;
468
+ padding: $spacing-xs 0;
469
+ }
470
+
471
+ .pa-shortcut-help__keys {
472
+ display: flex;
473
+ align-items: center;
474
+ gap: $spacing-xs;
475
+ flex-shrink: 0;
476
+ }
477
+
478
+ .pa-shortcut-help__key {
479
+ display: inline-flex;
480
+ align-items: center;
481
+ justify-content: center;
482
+ min-width: $spacing-lg;
483
+ height: $spacing-lg;
484
+ padding: 0 $spacing-xs;
485
+ font-family: $body-font-family;
486
+ font-size: $font-size-2xs;
487
+ font-weight: $font-weight-medium;
488
+ color: var(--pa-text-color-1);
489
+ background-color: $secondary-light-bg;
490
+ border: $border-width-base solid var(--pa-border-color);
491
+ border-radius: var(--pa-border-radius-sm);
492
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
493
+ }
494
+
495
+ .pa-shortcut-help__separator {
496
+ color: var(--pa-text-color-2);
497
+ font-size: $font-size-xs;
498
+ }
499
+
500
+ .pa-shortcut-help__description {
501
+ color: var(--pa-text-color-1);
502
+ font-size: $font-size-sm;
503
+ }
504
+
505
+ .pa-shortcut-help__empty {
506
+ text-align: center;
507
+ color: var(--pa-text-color-2);
508
+ padding: $spacing-xl;
509
+ }