@keenmate/pure-admin-core 1.0.0 → 1.1.0

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