@mshuja288/aksuicore 0.2.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.
@@ -0,0 +1,732 @@
1
+ /* Base controls */
2
+ button,
3
+ .aks-button {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ border: 0;
8
+ border-radius: var(--aks-radius);
9
+ padding: 12px 16px;
10
+ background: var(--aks-brand);
11
+ color: #fff;
12
+ font: inherit;
13
+ font-weight: 600;
14
+ cursor: pointer;
15
+ box-shadow: 0 10px 18px rgba(30, 39, 53, 0.18);
16
+ transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;
17
+ }
18
+
19
+ button:hover,
20
+ .aks-button:hover {
21
+ transform: translateY(-1px);
22
+ background: #2a3546;
23
+ box-shadow: 0 14px 22px rgba(30, 39, 53, 0.22);
24
+ }
25
+
26
+ /* Keep utility / chrome buttons from picking up the primary filled look */
27
+ button.ghost:hover,
28
+ button.app-select-trigger:hover,
29
+ button.date-field-trigger:hover,
30
+ button.avatar-button:hover,
31
+ button.sort-header:hover,
32
+ button.row-action:hover,
33
+ button.date-picker-day:hover,
34
+ button.side-rail-toggle:hover,
35
+ button.side-rail-icon:hover,
36
+ button.filter-clear:hover,
37
+ button.snackbar-close:hover {
38
+ transform: none;
39
+ }
40
+
41
+ button:active,
42
+ .aks-button:active {
43
+ transform: translateY(0);
44
+ }
45
+
46
+ button:disabled,
47
+ .aks-button:disabled {
48
+ cursor: default;
49
+ transform: none;
50
+ opacity: 0.55;
51
+ }
52
+
53
+ button.secondary,
54
+ .aks-button.secondary {
55
+ background: var(--aks-accent);
56
+ color: #fff;
57
+ box-shadow: 0 10px 18px rgba(230, 126, 34, 0.24);
58
+ }
59
+
60
+ button.secondary:hover,
61
+ .aks-button.secondary:hover {
62
+ background: #d06d16;
63
+ }
64
+
65
+ button.ghost,
66
+ .aks-button.ghost {
67
+ background: transparent;
68
+ color: var(--aks-muted);
69
+ box-shadow: none;
70
+ }
71
+
72
+ button.ghost:hover,
73
+ .aks-button.ghost:hover {
74
+ background: #f4f2ef;
75
+ color: var(--aks-brand);
76
+ }
77
+
78
+ /* Solid danger only for explicit Button variant — not row-action "danger" text links */
79
+ button.aks-button.danger {
80
+ background: var(--aks-danger);
81
+ color: #fff;
82
+ }
83
+
84
+ button.aks-button.danger:hover {
85
+ background: #912018;
86
+ }
87
+
88
+ label {
89
+ display: grid;
90
+ gap: 6px;
91
+ color: var(--aks-muted);
92
+ font-size: 13px;
93
+ font-weight: 600;
94
+ }
95
+
96
+ input,
97
+ textarea,
98
+ select {
99
+ width: 100%;
100
+ min-height: 44px;
101
+ padding: 12px 14px;
102
+ border: 1px solid transparent;
103
+ border-radius: var(--aks-radius);
104
+ background: var(--aks-field);
105
+ color: var(--aks-ink);
106
+ font: inherit;
107
+ }
108
+
109
+ input:hover,
110
+ textarea:hover,
111
+ select:hover {
112
+ background: #fff;
113
+ border-color: #ddd9d3;
114
+ }
115
+
116
+ input:focus,
117
+ textarea:focus,
118
+ select:focus {
119
+ outline: none;
120
+ background: #fff;
121
+ border-color: var(--aks-accent);
122
+ box-shadow: 0 0 0 4px rgba(230, 126, 34, 0.18);
123
+ }
124
+
125
+ input[readonly],
126
+ select:disabled {
127
+ color: var(--aks-brand);
128
+ background: #f3f1ee;
129
+ }
130
+
131
+ .actions {
132
+ display: flex;
133
+ flex-wrap: wrap;
134
+ gap: 10px;
135
+ }
136
+
137
+ /* Topbar */
138
+ .topbar {
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: space-between;
142
+ gap: 16px;
143
+ padding: 12px 20px;
144
+ background: var(--aks-card);
145
+ border-bottom: 1px solid var(--aks-line);
146
+ }
147
+
148
+ .topbar-brand {
149
+ display: flex;
150
+ align-items: center;
151
+ gap: 12px;
152
+ min-width: 0;
153
+ }
154
+
155
+ .topbar-logo {
156
+ width: 40px;
157
+ height: 40px;
158
+ object-fit: contain;
159
+ }
160
+
161
+ .topbar h1 {
162
+ margin: 0;
163
+ font-size: 20px;
164
+ color: var(--aks-brand);
165
+ }
166
+
167
+ .topbar-actions {
168
+ position: relative;
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 8px;
172
+ }
173
+
174
+ button.avatar-button {
175
+ width: 40px;
176
+ height: 40px;
177
+ padding: 0;
178
+ border-radius: 50%;
179
+ background: transparent;
180
+ box-shadow: none;
181
+ }
182
+
183
+ button.avatar-button:hover {
184
+ transform: none;
185
+ background: transparent;
186
+ }
187
+
188
+ .avatar {
189
+ display: grid;
190
+ place-items: center;
191
+ width: 40px;
192
+ height: 40px;
193
+ border-radius: 50%;
194
+ background: var(--aks-brand);
195
+ color: #fff;
196
+ font-size: 15px;
197
+ font-weight: 700;
198
+ }
199
+
200
+ .avatar-menu {
201
+ position: absolute;
202
+ top: calc(100% + 8px);
203
+ right: 0;
204
+ z-index: 30;
205
+ min-width: 160px;
206
+ padding: 6px;
207
+ border: 1px solid var(--aks-line);
208
+ border-radius: var(--aks-radius);
209
+ background: #fff;
210
+ box-shadow: 0 16px 32px rgba(30, 39, 53, 0.16);
211
+ }
212
+
213
+ .avatar-name {
214
+ margin: 0;
215
+ padding: 6px 10px 4px;
216
+ color: var(--aks-brand);
217
+ font-size: 13px;
218
+ font-weight: 600;
219
+ }
220
+
221
+ .avatar-menu button,
222
+ .avatar-menu .aks-button {
223
+ width: 100%;
224
+ min-height: 34px;
225
+ padding: 6px 10px;
226
+ justify-content: flex-start;
227
+ background: transparent;
228
+ color: var(--aks-muted);
229
+ font-size: 13px;
230
+ font-weight: 600;
231
+ box-shadow: none;
232
+ text-align: left;
233
+ }
234
+
235
+ .avatar-menu button:hover,
236
+ .avatar-menu .aks-button:hover {
237
+ transform: none;
238
+ background: #f4f2ef;
239
+ color: var(--aks-brand);
240
+ }
241
+
242
+ /* Side nav */
243
+ .side-nav {
244
+ display: grid;
245
+ align-content: start;
246
+ gap: 5px;
247
+ padding: 14px 12px;
248
+ background: var(--aks-card);
249
+ border-right: 1px solid var(--aks-line);
250
+ }
251
+
252
+ .side-nav button {
253
+ width: 100%;
254
+ justify-content: flex-start;
255
+ text-align: left;
256
+ min-height: 38px;
257
+ padding: 8px 14px;
258
+ border-radius: var(--aks-radius);
259
+ background: transparent;
260
+ color: var(--aks-muted);
261
+ font-size: 14px;
262
+ font-weight: 600;
263
+ box-shadow: none;
264
+ }
265
+
266
+ .side-nav button:hover {
267
+ transform: none;
268
+ background: #f4f2ef;
269
+ color: var(--aks-brand);
270
+ box-shadow: none;
271
+ }
272
+
273
+ .side-nav button.active {
274
+ background: var(--aks-brand);
275
+ color: #fff;
276
+ }
277
+
278
+ /* Select + DateField */
279
+ .app-select,
280
+ .date-field {
281
+ position: relative;
282
+ width: 100%;
283
+ }
284
+
285
+ .app-select-mirror {
286
+ position: absolute;
287
+ width: 1px;
288
+ height: 1px;
289
+ margin: 0;
290
+ padding: 0;
291
+ border: 0;
292
+ opacity: 0;
293
+ pointer-events: none;
294
+ }
295
+
296
+ button.app-select-trigger,
297
+ button.date-field-trigger {
298
+ display: flex;
299
+ align-items: center;
300
+ justify-content: space-between;
301
+ gap: 10px;
302
+ width: 100%;
303
+ min-height: 44px;
304
+ padding: 12px 14px;
305
+ border: 1px solid transparent;
306
+ border-radius: var(--aks-radius);
307
+ background: var(--aks-field);
308
+ color: var(--aks-ink);
309
+ font: inherit;
310
+ font-weight: 400;
311
+ text-align: left;
312
+ box-shadow: none;
313
+ }
314
+
315
+ button.app-select-trigger:hover,
316
+ button.date-field-trigger:hover {
317
+ transform: none;
318
+ background: #fff;
319
+ border-color: #ddd9d3;
320
+ box-shadow: none;
321
+ }
322
+
323
+ button.app-select-trigger.open,
324
+ button.app-select-trigger:focus-visible,
325
+ button.date-field-trigger.open,
326
+ button.date-field-trigger:focus-visible {
327
+ outline: none;
328
+ background: #fff;
329
+ border-color: var(--aks-accent);
330
+ box-shadow: 0 0 0 4px rgba(230, 126, 34, 0.18);
331
+ }
332
+
333
+ button.app-select-trigger:disabled,
334
+ .date-field.read-only button.date-field-trigger,
335
+ button.date-field-trigger:disabled {
336
+ color: var(--aks-brand);
337
+ background: #f3f1ee;
338
+ cursor: default;
339
+ }
340
+
341
+ .app-select-value,
342
+ .date-field-value,
343
+ .app-select-placeholder,
344
+ .date-field-placeholder {
345
+ display: inline-flex;
346
+ align-items: center;
347
+ gap: 8px;
348
+ min-width: 0;
349
+ overflow: hidden;
350
+ text-overflow: ellipsis;
351
+ white-space: nowrap;
352
+ }
353
+
354
+ .app-select-placeholder,
355
+ .date-field-placeholder {
356
+ color: #98a2b3;
357
+ }
358
+
359
+ .app-select-chevron,
360
+ .date-field-icon {
361
+ width: 18px;
362
+ height: 18px;
363
+ flex: 0 0 auto;
364
+ color: var(--aks-muted);
365
+ }
366
+
367
+ .app-select-menu,
368
+ .date-picker {
369
+ position: fixed;
370
+ z-index: 70;
371
+ overflow: auto;
372
+ padding: 6px;
373
+ border: 1px solid var(--aks-line);
374
+ border-radius: var(--aks-radius);
375
+ background: #fff;
376
+ box-shadow:
377
+ 0 18px 40px rgba(30, 39, 53, 0.16),
378
+ 0 2px 8px rgba(30, 39, 53, 0.06);
379
+ animation: aks-snackbar-in 140ms ease-out;
380
+ }
381
+
382
+ .app-select-empty {
383
+ padding: 8px 10px;
384
+ color: var(--aks-muted);
385
+ font-size: 12px;
386
+ text-align: left;
387
+ }
388
+
389
+ button.app-select-option {
390
+ display: flex;
391
+ align-items: center;
392
+ justify-content: flex-start;
393
+ gap: 8px;
394
+ width: 100%;
395
+ min-height: 34px;
396
+ padding: 6px 10px;
397
+ border-radius: 6px;
398
+ background: transparent;
399
+ color: var(--aks-brand);
400
+ font: inherit;
401
+ font-size: 13px;
402
+ font-weight: 500;
403
+ line-height: 1.3;
404
+ text-align: left;
405
+ box-shadow: none;
406
+ }
407
+
408
+ button.app-select-option > span {
409
+ min-width: 0;
410
+ text-align: left;
411
+ }
412
+
413
+ button.app-select-option:hover {
414
+ transform: none;
415
+ background: #f4f2ef;
416
+ box-shadow: none;
417
+ }
418
+
419
+ button.app-select-option.active {
420
+ background: rgba(230, 126, 34, 0.12);
421
+ color: var(--aks-brand);
422
+ }
423
+
424
+ button.app-select-option.active:hover {
425
+ background: rgba(230, 126, 34, 0.16);
426
+ }
427
+
428
+ .app-select-dot {
429
+ width: 8px;
430
+ height: 8px;
431
+ border-radius: 50%;
432
+ flex: 0 0 auto;
433
+ background: #98a2b3;
434
+ }
435
+
436
+ .app-select-dot.ok { background: var(--aks-ok); }
437
+ .app-select-dot.warn { background: #d97706; }
438
+ .app-select-dot.danger { background: var(--aks-danger); }
439
+ .app-select-dot.accent { background: var(--aks-accent); }
440
+ .app-select-dot.neutral { background: #98a2b3; }
441
+
442
+ .app-select-check {
443
+ width: 16px;
444
+ height: 16px;
445
+ margin-left: auto;
446
+ color: var(--aks-accent);
447
+ }
448
+
449
+ .date-picker {
450
+ padding: 12px;
451
+ width: min(300px, calc(100vw - 24px));
452
+ }
453
+
454
+ .date-picker-head,
455
+ .date-picker-footer,
456
+ .date-picker-nav {
457
+ display: flex;
458
+ align-items: center;
459
+ justify-content: space-between;
460
+ gap: 8px;
461
+ }
462
+
463
+ .date-picker-head {
464
+ margin-bottom: 10px;
465
+ }
466
+
467
+ .date-picker-head strong {
468
+ color: var(--aks-brand);
469
+ font-size: 14px;
470
+ }
471
+
472
+ .date-picker-nav button.ghost {
473
+ width: 32px;
474
+ min-width: 32px;
475
+ height: 32px;
476
+ padding: 0;
477
+ font-size: 18px;
478
+ line-height: 1;
479
+ }
480
+
481
+ .date-picker-weekdays,
482
+ .date-picker-grid {
483
+ display: grid;
484
+ grid-template-columns: repeat(7, minmax(0, 1fr));
485
+ gap: 4px;
486
+ }
487
+
488
+ .date-picker-weekdays {
489
+ margin-bottom: 6px;
490
+ }
491
+
492
+ .date-picker-weekdays span {
493
+ text-align: center;
494
+ color: var(--aks-muted);
495
+ font-size: 11px;
496
+ font-weight: 700;
497
+ text-transform: uppercase;
498
+ }
499
+
500
+ button.date-picker-day {
501
+ aspect-ratio: 1;
502
+ min-width: 0;
503
+ padding: 0;
504
+ border-radius: 6px;
505
+ background: transparent;
506
+ color: var(--aks-brand);
507
+ font: inherit;
508
+ font-size: 13px;
509
+ font-weight: 500;
510
+ box-shadow: none;
511
+ }
512
+
513
+ button.date-picker-day:hover {
514
+ transform: none;
515
+ background: #f4f2ef;
516
+ box-shadow: none;
517
+ }
518
+
519
+ button.date-picker-day.outside {
520
+ color: #b0b7c3;
521
+ }
522
+
523
+ button.date-picker-day.today:not(.selected) {
524
+ box-shadow: inset 0 0 0 1px rgba(230, 126, 34, 0.55);
525
+ }
526
+
527
+ button.date-picker-day.selected,
528
+ button.date-picker-day.selected:hover {
529
+ background: var(--aks-accent);
530
+ color: #fff;
531
+ box-shadow: none;
532
+ }
533
+
534
+ .date-picker-footer {
535
+ margin-top: 10px;
536
+ padding-top: 8px;
537
+ border-top: 1px solid var(--aks-line);
538
+ }
539
+
540
+ .date-picker-footer button.ghost {
541
+ padding: 6px 10px;
542
+ color: var(--aks-accent);
543
+ font-size: 13px;
544
+ }
545
+
546
+ /* Dialog */
547
+ .dialog-backdrop {
548
+ position: fixed;
549
+ inset: 0;
550
+ z-index: 40;
551
+ display: grid;
552
+ place-items: center;
553
+ padding: 24px 16px;
554
+ background: rgba(30, 39, 53, 0.42);
555
+ }
556
+
557
+ .dialog {
558
+ width: min(480px, 100%);
559
+ display: grid;
560
+ gap: 16px;
561
+ padding: 20px;
562
+ border-radius: var(--aks-radius);
563
+ background: var(--aks-card);
564
+ box-shadow: 0 24px 60px rgba(30, 39, 53, 0.24);
565
+ }
566
+
567
+ .form-dialog {
568
+ width: min(760px, 100%);
569
+ max-height: calc(100vh - 48px);
570
+ overflow: auto;
571
+ }
572
+
573
+ .dialog-head {
574
+ display: flex;
575
+ align-items: center;
576
+ justify-content: space-between;
577
+ gap: 12px;
578
+ }
579
+
580
+ .dialog-head h2 {
581
+ margin: 0;
582
+ font-size: 18px;
583
+ color: var(--aks-brand);
584
+ }
585
+
586
+ .dialog .wide {
587
+ grid-column: 1 / -1;
588
+ }
589
+
590
+ /* Snackbar */
591
+ .snackbar-host {
592
+ position: fixed;
593
+ right: 24px;
594
+ bottom: 24px;
595
+ left: auto;
596
+ z-index: 60;
597
+ transform: none;
598
+ width: min(380px, calc(100% - 32px));
599
+ pointer-events: none;
600
+ }
601
+
602
+ .snackbar {
603
+ pointer-events: auto;
604
+ display: flex;
605
+ align-items: flex-start;
606
+ gap: 12px;
607
+ margin: 0;
608
+ padding: 12px 14px;
609
+ border-radius: var(--aks-radius);
610
+ background: #fff;
611
+ color: var(--aks-brand);
612
+ border: 1px solid var(--aks-line);
613
+ box-shadow:
614
+ 0 12px 28px rgba(30, 39, 53, 0.14),
615
+ 0 2px 8px rgba(30, 39, 53, 0.06);
616
+ animation: aks-snackbar-in 180ms ease-out;
617
+ }
618
+
619
+ .snackbar.success {
620
+ border-color: rgba(6, 118, 71, 0.22);
621
+ background: #f7fcf9;
622
+ }
623
+
624
+ .snackbar:not(.success) {
625
+ border-color: rgba(180, 35, 24, 0.22);
626
+ background: #fff8f7;
627
+ }
628
+
629
+ .snackbar p {
630
+ margin: 0;
631
+ flex: 1;
632
+ padding-top: 1px;
633
+ font-size: 14px;
634
+ font-weight: 500;
635
+ line-height: 1.4;
636
+ color: var(--aks-brand);
637
+ }
638
+
639
+ .snackbar-icon {
640
+ width: 20px;
641
+ height: 20px;
642
+ flex: 0 0 auto;
643
+ margin-top: 1px;
644
+ }
645
+
646
+ .snackbar.success .snackbar-icon {
647
+ color: var(--aks-ok);
648
+ }
649
+
650
+ .snackbar:not(.success) .snackbar-icon {
651
+ color: var(--aks-danger);
652
+ }
653
+
654
+ button.snackbar-close {
655
+ width: 28px;
656
+ height: 28px;
657
+ min-width: 28px;
658
+ padding: 0;
659
+ border-radius: 8px;
660
+ background: transparent;
661
+ color: var(--aks-muted);
662
+ box-shadow: none;
663
+ font-size: 18px;
664
+ line-height: 1;
665
+ }
666
+
667
+ button.snackbar-close:hover {
668
+ transform: none;
669
+ background: rgba(30, 39, 53, 0.06);
670
+ color: var(--aks-brand);
671
+ }
672
+
673
+ @keyframes aks-snackbar-in {
674
+ from {
675
+ opacity: 0;
676
+ transform: translateY(10px);
677
+ }
678
+ to {
679
+ opacity: 1;
680
+ transform: translateY(0);
681
+ }
682
+ }
683
+
684
+ /* Pagination */
685
+ .table-pagination {
686
+ display: flex;
687
+ flex-wrap: nowrap;
688
+ align-items: center;
689
+ justify-content: space-between;
690
+ gap: 10px;
691
+ height: var(--aks-table-header-height);
692
+ min-height: var(--aks-table-header-height);
693
+ padding: 0 12px;
694
+ border-top: 1px solid var(--aks-line);
695
+ background: #faf9f7;
696
+ overflow: hidden;
697
+ }
698
+
699
+ .page-size,
700
+ .page-buttons {
701
+ display: inline-flex;
702
+ align-items: center;
703
+ gap: 6px;
704
+ font-size: 12px;
705
+ color: var(--aks-muted);
706
+ }
707
+
708
+ .page-size .page-size-select {
709
+ width: 72px;
710
+ min-width: 72px;
711
+ }
712
+
713
+ .page-size .app-select-trigger {
714
+ min-height: 28px;
715
+ padding: 2px 8px;
716
+ font-size: 12px;
717
+ }
718
+
719
+ .page-summary,
720
+ .page-indicator {
721
+ margin: 0;
722
+ color: var(--aks-muted);
723
+ font-size: 12px;
724
+ white-space: nowrap;
725
+ }
726
+
727
+ .page-buttons .ghost {
728
+ min-height: 28px;
729
+ padding: 2px 8px;
730
+ font-size: 12px;
731
+ box-shadow: none;
732
+ }