@howssatoshi/quantumcss 1.10.1 → 1.11.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 (43) hide show
  1. package/README.md +11 -10
  2. package/dist/quantum.min.css +2 -2
  3. package/examples/admin-panel.html +317 -600
  4. package/examples/analytics-dashboard.html +130 -288
  5. package/examples/blog.css +297 -0
  6. package/examples/blog.html +216 -0
  7. package/examples/chat-messaging.html +11 -27
  8. package/examples/email-client.css +582 -0
  9. package/examples/email-client.html +432 -0
  10. package/examples/gaming-portal.css +352 -0
  11. package/examples/gaming-portal.html +239 -0
  12. package/examples/index.html +342 -232
  13. package/examples/kitchen-sink.html +284 -94
  14. package/examples/music-streaming.html +32 -91
  15. package/examples/{news-template.html → news.html} +35 -11
  16. package/examples/{portfolio-resume.html → portfolio.html} +56 -26
  17. package/examples/shopping.html +812 -0
  18. package/examples/starlight.html +7 -6
  19. package/examples/task.md +12 -0
  20. package/examples/travel.html +514 -0
  21. package/examples/video-streaming.html +303 -92
  22. package/package.json +9 -3
  23. package/src/cli.js +5 -5
  24. package/src/defaults.js +18 -16
  25. package/src/starlight.js +20 -15
  26. package/src/styles/quantum-base.css +4 -0
  27. package/src/styles/quantum-components.css +1879 -134
  28. package/src/styles/quantum-icons.css +345 -0
  29. package/src/styles/starlight.css +2606 -1186
  30. package/dist/quantum.css +0 -2374
  31. package/examples/blog-template.html +0 -288
  32. package/examples/email-template.html +0 -712
  33. package/examples/gaming-template.html +0 -471
  34. package/examples/gradient-test.html +0 -129
  35. package/examples/shopping/images/headset.jpg +0 -0
  36. package/examples/shopping/images/sneakers.jpg +0 -0
  37. package/examples/shopping/images/windbreaker.jpg +0 -0
  38. package/examples/shopping/index.html +0 -525
  39. package/examples/theme-test.html +0 -159
  40. package/examples/travel/index.html +0 -432
  41. package/examples/verify_fixes.html +0 -52
  42. package/examples/verify_presets.html +0 -32
  43. /package/examples/{shopping/nova-shop.css → nova-shop.css} +0 -0
@@ -38,7 +38,7 @@
38
38
 
39
39
  .btn-secondary {
40
40
  background-color: rgb(255 255 255 / 8%);
41
- color: #ffffff !important;
41
+ color: var(--q-text-primary) !important;
42
42
  border: 0;
43
43
  backdrop-filter: blur(12px);
44
44
  -webkit-backdrop-filter: blur(12px);
@@ -117,7 +117,6 @@ html[data-theme="light"] .card {
117
117
 
118
118
  .card:hover {
119
119
  box-shadow: var(--q-shadow-lg);
120
- transform: translateY(-2px);
121
120
  }
122
121
 
123
122
  .card-premium {
@@ -234,7 +233,12 @@ html[data-theme="light"] .input:disabled {
234
233
  }
235
234
 
236
235
  /* Badge Component */
237
- .badge {
236
+ .badge,
237
+ .badge-primary,
238
+ .badge-secondary,
239
+ .badge-success,
240
+ .badge-warning,
241
+ .badge-error {
238
242
  display: inline-flex;
239
243
  align-items: center;
240
244
  padding: 0.25rem 0.75rem;
@@ -410,6 +414,8 @@ html[data-theme="light"] .skeleton {
410
414
  var(--q-skeleton-shimmer) 50%,
411
415
  var(--q-skeleton-bg) 75%
412
416
  );
417
+ background-size: 200% 100%;
418
+ animation: shimmer 2s infinite linear;
413
419
  }
414
420
 
415
421
 
@@ -488,7 +494,7 @@ html[data-theme="light"] .dropdown-content {
488
494
  }
489
495
 
490
496
  .dropdown-item:hover {
491
- background-color: #f3f4f6;
497
+ background-color: var(--q-color-primary);
492
498
  color: #1e293b;
493
499
  }
494
500
 
@@ -497,10 +503,324 @@ html[data-theme="light"] .dropdown-item {
497
503
  }
498
504
 
499
505
  html[data-theme="light"] .dropdown-item:hover {
500
- background-color: #f3f4f6;
506
+ background-color: var(--q-color-starlight-blue);
501
507
  color: #1e293b;
502
508
  }
503
509
 
510
+ /* ============================================================================
511
+ MENU COMPONENT
512
+ Navigation and user menus
513
+ ============================================================================ */
514
+
515
+ /* Base menu */
516
+ .menu {
517
+ display: flex;
518
+ flex-direction: column;
519
+ list-style: none;
520
+ margin: 0;
521
+ padding: 0;
522
+ }
523
+
524
+ /* Horizontal menu */
525
+ .menu-horizontal {
526
+ flex-direction: row;
527
+ align-items: center;
528
+ gap: var(--q-space-2);
529
+ }
530
+
531
+ /* Menu item */
532
+ .menu-item {
533
+ position: relative;
534
+ }
535
+
536
+ .menu-link {
537
+ display: flex;
538
+ align-items: center;
539
+ gap: var(--q-space-2);
540
+ padding: var(--q-space-2) var(--q-space-3);
541
+ color: var(--q-text-secondary);
542
+ text-decoration: none;
543
+ font-weight: 500;
544
+ border-radius: var(--q-radius-md);
545
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
546
+ cursor: pointer;
547
+ }
548
+
549
+ .menu-link:hover {
550
+ color: var(--q-text-primary);
551
+ background-color: var(--q-glass-bg);
552
+ }
553
+
554
+ .menu-link.active {
555
+ color: var(--q-color-primary);
556
+ background-color: color-mix(in srgb, var(--q-color-primary), transparent 90%);
557
+ }
558
+
559
+ /* Menu icon */
560
+ .menu-icon {
561
+ width: 20px;
562
+ height: 20px;
563
+ flex-shrink: 0;
564
+ }
565
+
566
+ /* Menu badge */
567
+ .menu-badge {
568
+ margin-left: auto;
569
+ padding: 2px 8px;
570
+ font-size: 0.75rem;
571
+ font-weight: 600;
572
+ background-color: var(--q-color-primary);
573
+ color: white;
574
+ border-radius: 9999px;
575
+ }
576
+
577
+ /* Dropdown menu */
578
+ .menu-dropdown {
579
+ position: absolute;
580
+ top: 100%;
581
+ left: 0;
582
+ min-width: 200px;
583
+ background-color: var(--q-card-bg);
584
+ border: 1px solid var(--q-card-border);
585
+ border-radius: var(--q-radius-lg);
586
+ box-shadow: var(--q-shadow-lg);
587
+ padding: var(--q-space-2);
588
+ opacity: 0;
589
+ visibility: hidden;
590
+ transform: translateY(-8px);
591
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
592
+ z-index: 50;
593
+ }
594
+
595
+ .menu-item:hover .menu-dropdown,
596
+ .menu-item.active .menu-dropdown {
597
+ opacity: 1;
598
+ visibility: visible;
599
+ transform: translateY(0);
600
+ }
601
+
602
+ .menu-dropdown .menu-link {
603
+ padding: var(--q-space-2) var(--q-space-3);
604
+ border-radius: var(--q-radius-md);
605
+ }
606
+
607
+ .menu-dropdown .menu-link:hover {
608
+ background-color: var(--q-glass-bg);
609
+ }
610
+
611
+ /* Mobile menu */
612
+ .menu-mobile {
613
+ position: fixed;
614
+ top: 0;
615
+ left: 0;
616
+ width: 100%;
617
+ height: 100%;
618
+ background-color: var(--q-bg-primary);
619
+ padding: var(--q-space-6);
620
+ z-index: 100;
621
+ transform: translateX(-100%);
622
+ transition: transform var(--q-duration-300) var(--q-ease-in-out);
623
+ }
624
+
625
+ .menu-mobile.open {
626
+ transform: translateX(0);
627
+ }
628
+
629
+ .menu-mobile .menu {
630
+ gap: var(--q-space-2);
631
+ }
632
+
633
+ .menu-mobile .menu-link {
634
+ padding: var(--q-space-4);
635
+ font-size: 1.125rem;
636
+ }
637
+
638
+ /* Menu divider */
639
+ .menu-divider {
640
+ height: 1px;
641
+ background-color: var(--q-glass-border);
642
+ margin: var(--q-space-2) 0;
643
+ }
644
+
645
+ /* User menu */
646
+ .user-menu {
647
+ display: flex;
648
+ align-items: center;
649
+ gap: var(--q-space-3);
650
+ }
651
+
652
+ /* Light mode */
653
+ html[data-theme="light"] .menu-link:hover {
654
+ background-color: #f1f5f9;
655
+ }
656
+
657
+ html[data-theme="light"] .menu-link.active {
658
+ background-color: #eff6ff;
659
+ }
660
+
661
+ html[data-theme="light"] .menu-dropdown {
662
+ background-color: white;
663
+ border-color: #e2e8f0;
664
+ }
665
+
666
+ html[data-theme="light"] .menu-divider {
667
+ background-color: #e2e8f0;
668
+ }
669
+
670
+ /* ============================================================================
671
+ TOAST COMPONENT
672
+ Notification toasts
673
+ ============================================================================ */
674
+
675
+ /* Toast container */
676
+ .toast-container {
677
+ position: fixed;
678
+ bottom: var(--q-space-6);
679
+ right: var(--q-space-6);
680
+ display: flex;
681
+ flex-direction: column;
682
+ gap: var(--q-space-3);
683
+ z-index: 1000;
684
+ max-width: 400px;
685
+ }
686
+
687
+ .toast-container-top-right {
688
+ top: var(--q-space-6);
689
+ bottom: auto;
690
+ }
691
+
692
+ .toast-container-top-left {
693
+ top: var(--q-space-6);
694
+ left: var(--q-space-6);
695
+ right: auto;
696
+ }
697
+
698
+ .toast-container-bottom-left {
699
+ bottom: var(--q-space-6);
700
+ left: var(--q-space-6);
701
+ right: auto;
702
+ }
703
+
704
+ /* Toast */
705
+ .toast {
706
+ display: flex;
707
+ align-items: flex-start;
708
+ gap: var(--q-space-3);
709
+ padding: var(--q-space-4);
710
+ background-color: var(--q-card-bg);
711
+ border: 1px solid var(--q-card-border);
712
+ border-radius: var(--q-radius-lg);
713
+ box-shadow: var(--q-shadow-lg);
714
+ color: var(--q-text-primary);
715
+ animation: toast-slide-in 0.3s var(--q-ease-out);
716
+ }
717
+
718
+ @keyframes toast-slide-in {
719
+ from {
720
+ opacity: 0;
721
+ transform: translateX(100%);
722
+ }
723
+ to {
724
+ opacity: 1;
725
+ transform: translateX(0);
726
+ }
727
+ }
728
+
729
+ .toast.removing {
730
+ animation: toast-slide-out 0.3s var(--q-ease-in) forwards;
731
+ }
732
+
733
+ @keyframes toast-slide-out {
734
+ from {
735
+ opacity: 1;
736
+ transform: translateX(0);
737
+ }
738
+ to {
739
+ opacity: 0;
740
+ transform: translateX(100%);
741
+ }
742
+ }
743
+
744
+ /* Toast icon */
745
+ .toast-icon {
746
+ width: 20px;
747
+ height: 20px;
748
+ flex-shrink: 0;
749
+ }
750
+
751
+ .toast-success .toast-icon {
752
+ color: #10b981;
753
+ }
754
+
755
+ .toast-error .toast-icon {
756
+ color: #ef4444;
757
+ }
758
+
759
+ .toast-warning .toast-icon {
760
+ color: #f59e0b;
761
+ }
762
+
763
+ .toast-info .toast-icon {
764
+ color: #3b82f6;
765
+ }
766
+
767
+ /* Toast content */
768
+ .toast-content {
769
+ flex: 1;
770
+ min-width: 0;
771
+ }
772
+
773
+ .toast-title {
774
+ font-weight: 600;
775
+ font-size: 0.875rem;
776
+ margin-bottom: 2px;
777
+ }
778
+
779
+ .toast-message {
780
+ font-size: 0.875rem;
781
+ color: var(--q-text-secondary);
782
+ line-height: 1.4;
783
+ }
784
+
785
+ /* Toast close button */
786
+ .toast-close {
787
+ padding: 4px;
788
+ background: none;
789
+ border: none;
790
+ color: var(--q-text-muted);
791
+ cursor: pointer;
792
+ border-radius: var(--q-radius-sm);
793
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
794
+ }
795
+
796
+ .toast-close:hover {
797
+ color: var(--q-text-primary);
798
+ background-color: var(--q-glass-bg);
799
+ }
800
+
801
+ /* Toast variants */
802
+ .toast-success {
803
+ border-left: 3px solid #10b981;
804
+ }
805
+
806
+ .toast-error {
807
+ border-left: 3px solid #ef4444;
808
+ }
809
+
810
+ .toast-warning {
811
+ border-left: 3px solid #f59e0b;
812
+ }
813
+
814
+ .toast-info {
815
+ border-left: 3px solid #3b82f6;
816
+ }
817
+
818
+ /* Light mode */
819
+ html[data-theme="light"] .toast {
820
+ background-color: white;
821
+ border-color: #e2e8f0;
822
+ }
823
+
504
824
  /* Accordion Component */
505
825
  .accordion-item {
506
826
  border: 1px solid var(--q-card-border);
@@ -640,66 +960,411 @@ html[data-theme="light"] .tab-button.active {
640
960
  transition: width var(--q-duration-300) var(--q-ease-in-out);
641
961
  }
642
962
 
643
- /* Toggle Switch */
644
- .toggle {
645
- position: relative;
646
- display: inline-block;
647
- width: 3rem;
648
- height: 1.5rem;
649
- }
963
+ /* ============================================================================
964
+ CHIP COMPONENT
965
+ ============================================================================ */
650
966
 
651
- .toggle-input {
652
- opacity: 0;
653
- width: 0;
654
- height: 0;
967
+ .chip {
968
+ display: inline-flex;
969
+ align-items: center;
970
+ gap: var(--q-space-2);
971
+ padding: 0.6rem 1.25rem;
972
+ font-size: 0.875rem;
973
+ font-weight: 500;
974
+ white-space: nowrap;
975
+ border-radius: 9999px;
976
+ background-color: var(--q-card-bg);
977
+ border: 1px solid var(--q-card-border);
978
+ color: var(--q-text-secondary);
979
+ transition: all 0.2s;
980
+ cursor: pointer;
655
981
  }
656
982
 
657
- .toggle-slider {
658
- position: absolute;
659
- cursor: pointer;
660
- inset: 0;
661
- background-color: #cbd5e1;
662
- transition: background-color var(--q-duration-150) var(--q-ease-in-out);
663
- border-radius: var(--q-radius-full);
983
+ .chip:hover {
984
+ background-color: rgba(0, 212, 255, 0.1);
985
+ border-color: rgba(0, 212, 255, 0.3);
986
+ color: var(--q-color-starlight-blue);
664
987
  }
665
988
 
666
- .toggle-slider::before {
667
- position: absolute;
668
- content: "";
669
- height: 1.25rem;
670
- width: 1.25rem;
671
- left: 0.125rem;
672
- bottom: 0.125rem;
673
- background-color: white;
674
- transition: transform var(--q-duration-150) var(--q-ease-in-out);
675
- border-radius: 50%;
989
+ .chip.active {
990
+ background-color: rgba(0, 212, 255, 0.1);
991
+ border-color: rgba(0, 212, 255, 0.3);
992
+ color: var(--q-color-starlight-blue);
676
993
  }
677
994
 
678
- .toggle-input:checked + .toggle-slider {
679
- background-color: var(--q-color-primary);
995
+ /* Chip variants */
996
+ .chip-primary {
997
+ background-color: rgba(0, 212, 255, 0.1);
998
+ border-color: rgba(0, 212, 255, 0.3);
999
+ color: var(--q-color-starlight-blue);
680
1000
  }
681
1001
 
682
- .toggle-input:checked + .toggle-slider::before {
683
- transform: translateX(1.5rem);
1002
+ .chip-primary:hover,
1003
+ .chip-primary.active {
1004
+ background-color: var(--q-color-starlight-blue);
1005
+ color: white;
684
1006
  }
685
1007
 
686
- /* Animation Utilities */
687
- .animate-pulse {
688
- animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1008
+ .chip-success {
1009
+ background-color: rgba(16, 185, 129, 0.1);
1010
+ border-color: #10b981;
1011
+ color: #10b981;
689
1012
  }
690
1013
 
691
- @keyframes pulse {
692
- 0%, 100% { opacity: 1; }
693
- 50% { opacity: 0.5; }
1014
+ .chip-success:hover,
1015
+ .chip-success.active {
1016
+ background-color: #10b981;
1017
+ color: white;
694
1018
  }
695
1019
 
696
- .animate-bounce {
697
- animation: bounce 1s infinite;
1020
+ .chip-warning {
1021
+ background-color: rgba(245, 158, 11, 0.1);
1022
+ border-color: #f59e0b;
1023
+ color: #f59e0b;
698
1024
  }
699
1025
 
700
- @keyframes bounce {
701
- 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8, 0, 1, 1); }
702
- 50% { transform: none; animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
1026
+ .chip-warning:hover,
1027
+ .chip-warning.active {
1028
+ background-color: #f59e0b;
1029
+ color: white;
1030
+ }
1031
+
1032
+ .chip-error {
1033
+ background-color: rgba(239, 68, 68, 0.1);
1034
+ border-color: #ef4444;
1035
+ color: #ef4444;
1036
+ }
1037
+
1038
+ .chip-error:hover,
1039
+ .chip-error.active {
1040
+ background-color: #ef4444;
1041
+ color: white;
1042
+ }
1043
+
1044
+ /* Chip with icon */
1045
+ .chip-icon {
1046
+ width: 16px;
1047
+ height: 16px;
1048
+ flex-shrink: 0;
1049
+ }
1050
+
1051
+ /* Chip close button */
1052
+ .chip-close {
1053
+ display: flex;
1054
+ align-items: center;
1055
+ justify-content: center;
1056
+ width: 16px;
1057
+ height: 16px;
1058
+ padding: 0;
1059
+ background: none;
1060
+ border: none;
1061
+ color: inherit;
1062
+ opacity: 0.6;
1063
+ cursor: pointer;
1064
+ border-radius: 50%;
1065
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
1066
+ }
1067
+
1068
+ .chip-close:hover {
1069
+ opacity: 1;
1070
+ background-color: rgba(0, 0, 0, 0.1);
1071
+ }
1072
+
1073
+ /* Chip sizes */
1074
+ .chip-sm {
1075
+ padding: 2px var(--q-space-2);
1076
+ font-size: 0.75rem;
1077
+ }
1078
+
1079
+ .chip-lg {
1080
+ padding: var(--q-space-2) var(--q-space-4);
1081
+ font-size: 1rem;
1082
+ }
1083
+
1084
+ /* Light mode */
1085
+ html[data-theme="light"] .chip {
1086
+ background-color: #f1f5f9;
1087
+ border-color: #e2e8f0;
1088
+ color: #1e293b;
1089
+ }
1090
+
1091
+ html[data-theme="light"] .chip:hover {
1092
+ background-color: #e2e8f0;
1093
+ }
1094
+
1095
+ /* ============================================================================
1096
+ DATE PICKER COMPONENT
1097
+ ============================================================================ */
1098
+
1099
+ .date-picker {
1100
+ display: inline-block;
1101
+ position: relative;
1102
+ }
1103
+
1104
+ /* Date picker input */
1105
+ .date-picker-input {
1106
+ padding: var(--q-space-2) var(--q-space-3);
1107
+ padding-right: var(--q-space-10);
1108
+ background-color: var(--q-glass-bg);
1109
+ border: 1px solid var(--q-glass-border);
1110
+ border-radius: var(--q-radius-md);
1111
+ color: var(--q-text-primary);
1112
+ font-size: 0.875rem;
1113
+ cursor: pointer;
1114
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
1115
+ min-width: 160px;
1116
+ }
1117
+
1118
+ .date-picker-input:focus {
1119
+ outline: none;
1120
+ border-color: var(--q-color-primary);
1121
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--q-color-primary), transparent 30%);
1122
+ }
1123
+
1124
+ .date-picker-input::placeholder {
1125
+ color: var(--q-text-muted);
1126
+ }
1127
+
1128
+ /* Date picker dropdown/calendar */
1129
+ .date-picker-dropdown {
1130
+ position: absolute;
1131
+ top: 100%;
1132
+ left: 0;
1133
+ margin-top: var(--q-space-2);
1134
+ background-color: var(--q-card-bg);
1135
+ border: 1px solid var(--q-card-border);
1136
+ border-radius: var(--q-radius-lg);
1137
+ box-shadow: var(--q-shadow-lg);
1138
+ padding: var(--q-space-4);
1139
+ z-index: 50;
1140
+ opacity: 0;
1141
+ visibility: hidden;
1142
+ transform: translateY(-8px);
1143
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
1144
+ min-width: 280px;
1145
+ }
1146
+
1147
+ .date-picker.active .date-picker-dropdown {
1148
+ opacity: 1;
1149
+ visibility: visible;
1150
+ transform: translateY(0);
1151
+ }
1152
+
1153
+ /* Date picker header */
1154
+ .date-picker-header {
1155
+ display: flex;
1156
+ align-items: center;
1157
+ justify-content: space-between;
1158
+ margin-bottom: var(--q-space-3);
1159
+ }
1160
+
1161
+ .date-picker-title {
1162
+ font-weight: 600;
1163
+ color: var(--q-text-primary);
1164
+ }
1165
+
1166
+ .date-picker-nav {
1167
+ display: flex;
1168
+ gap: var(--q-space-1);
1169
+ }
1170
+
1171
+ .date-picker-nav-btn {
1172
+ padding: var(--q-space-1);
1173
+ background: none;
1174
+ border: none;
1175
+ color: var(--q-text-muted);
1176
+ cursor: pointer;
1177
+ border-radius: var(--q-radius-sm);
1178
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
1179
+ }
1180
+
1181
+ .date-picker-nav-btn:hover {
1182
+ color: var(--q-text-primary);
1183
+ background-color: var(--q-glass-bg);
1184
+ }
1185
+
1186
+ /* Date picker grid */
1187
+ .date-picker-grid {
1188
+ display: grid;
1189
+ grid-template-columns: repeat(7, 1fr);
1190
+ gap: 2px;
1191
+ }
1192
+
1193
+ /* Day labels */
1194
+ .date-picker-weekday {
1195
+ text-align: center;
1196
+ font-size: 0.75rem;
1197
+ font-weight: 600;
1198
+ color: var(--q-text-muted);
1199
+ padding: var(--q-space-2);
1200
+ text-transform: uppercase;
1201
+ }
1202
+
1203
+ /* Day */
1204
+ .date-picker-day {
1205
+ text-align: center;
1206
+ padding: var(--q-space-2);
1207
+ font-size: 0.875rem;
1208
+ color: var(--q-text-secondary);
1209
+ cursor: pointer;
1210
+ border-radius: var(--q-radius-md);
1211
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
1212
+ }
1213
+
1214
+ .date-picker-day:hover {
1215
+ background-color: var(--q-glass-bg);
1216
+ color: var(--q-text-primary);
1217
+ }
1218
+
1219
+ .date-picker-day.selected {
1220
+ background-color: var(--q-color-primary);
1221
+ color: white;
1222
+ }
1223
+
1224
+ .date-picker-day.today {
1225
+ font-weight: 600;
1226
+ color: var(--q-color-primary);
1227
+ }
1228
+
1229
+ .date-picker-day.disabled {
1230
+ opacity: 0.3;
1231
+ cursor: not-allowed;
1232
+ }
1233
+
1234
+ .date-picker-day.disabled:hover {
1235
+ background: none;
1236
+ color: var(--q-text-secondary);
1237
+ }
1238
+
1239
+ .date-picker-day.other-month {
1240
+ color: var(--q-text-muted);
1241
+ opacity: 0.5;
1242
+ }
1243
+
1244
+ /* Date picker footer */
1245
+ .date-picker-footer {
1246
+ display: flex;
1247
+ justify-content: flex-end;
1248
+ gap: var(--q-space-2);
1249
+ margin-top: var(--q-space-3);
1250
+ padding-top: var(--q-space-3);
1251
+ border-top: 1px solid var(--q-glass-border);
1252
+ }
1253
+
1254
+ /* Range date picker */
1255
+ .date-picker-range .date-picker-day.in-range {
1256
+ background-color: color-mix(in srgb, var(--q-color-primary), transparent 20%);
1257
+ }
1258
+
1259
+ .date-picker-range .date-picker-day.start-range,
1260
+ .date-picker-range .date-picker-day.end-range {
1261
+ background-color: var(--q-color-primary);
1262
+ color: white;
1263
+ }
1264
+
1265
+ /* Time picker */
1266
+ .time-picker {
1267
+ display: flex;
1268
+ align-items: center;
1269
+ gap: var(--q-space-2);
1270
+ }
1271
+
1272
+ .time-picker-input {
1273
+ width: 60px;
1274
+ padding: var(--q-space-2);
1275
+ text-align: center;
1276
+ background-color: var(--q-glass-bg);
1277
+ border: 1px solid var(--q-glass-border);
1278
+ border-radius: var(--q-radius-md);
1279
+ color: var(--q-text-primary);
1280
+ font-size: 0.875rem;
1281
+ }
1282
+
1283
+ .time-picker-separator {
1284
+ font-weight: 600;
1285
+ color: var(--q-text-muted);
1286
+ }
1287
+
1288
+ /* Light mode */
1289
+ html[data-theme="light"] .date-picker-input {
1290
+ background-color: white;
1291
+ border-color: #e2e8f0;
1292
+ }
1293
+
1294
+ html[data-theme="light"] .date-picker-dropdown {
1295
+ background-color: white;
1296
+ border-color: #e2e8f0;
1297
+ }
1298
+
1299
+ html[data-theme="light"] .date-picker-day:hover {
1300
+ background-color: #f1f5f9;
1301
+ }
1302
+
1303
+ html[data-theme="light"] .time-picker-input {
1304
+ background-color: white;
1305
+ border-color: #e2e8f0;
1306
+ }
1307
+
1308
+ /* Toggle Switch */
1309
+ .toggle {
1310
+ position: relative;
1311
+ display: inline-block;
1312
+ width: 3rem;
1313
+ height: 1.5rem;
1314
+ }
1315
+
1316
+ .toggle-input {
1317
+ opacity: 0;
1318
+ width: 0;
1319
+ height: 0;
1320
+ }
1321
+
1322
+ .toggle-slider {
1323
+ position: absolute;
1324
+ cursor: pointer;
1325
+ inset: 0;
1326
+ background-color: #cbd5e1;
1327
+ transition: background-color var(--q-duration-150) var(--q-ease-in-out);
1328
+ border-radius: var(--q-radius-full);
1329
+ }
1330
+
1331
+ .toggle-slider::before {
1332
+ position: absolute;
1333
+ content: "";
1334
+ height: 1.25rem;
1335
+ width: 1.25rem;
1336
+ left: 0.125rem;
1337
+ bottom: 0.125rem;
1338
+ background-color: white;
1339
+ transition: transform var(--q-duration-150) var(--q-ease-in-out);
1340
+ border-radius: 50%;
1341
+ }
1342
+
1343
+ .toggle-input:checked + .toggle-slider {
1344
+ background-color: var(--q-color-primary);
1345
+ }
1346
+
1347
+ .toggle-input:checked + .toggle-slider::before {
1348
+ transform: translateX(1.5rem);
1349
+ }
1350
+
1351
+ /* Animation Utilities */
1352
+ .animate-pulse {
1353
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1354
+ }
1355
+
1356
+ @keyframes pulse {
1357
+ 0%, 100% { opacity: 1; }
1358
+ 50% { opacity: 0.5; }
1359
+ }
1360
+
1361
+ .animate-bounce {
1362
+ animation: bounce 1s infinite;
1363
+ }
1364
+
1365
+ @keyframes bounce {
1366
+ 0%, 100% { transform: translateY(-25%); animation-timing-function: cubic-bezier(0.8, 0, 1, 1); }
1367
+ 50% { transform: none; animation-timing-function: cubic-bezier(0, 0, 0.2, 1); }
703
1368
  }
704
1369
 
705
1370
  .animate-fade-in {
@@ -796,6 +1461,296 @@ html[data-theme="light"] .table tbody tr:hover {
796
1461
  background-color: #f1f5f9;
797
1462
  }
798
1463
 
1464
+ /* Premium Table Component */
1465
+ .table-premium-container {
1466
+ background: var(--q-card-bg);
1467
+ border: 1px solid var(--q-card-border);
1468
+ border-radius: var(--q-radius-xl);
1469
+ overflow: hidden;
1470
+ box-shadow: var(--q-shadow-md);
1471
+ }
1472
+
1473
+ .table-premium-header {
1474
+ display: flex;
1475
+ justify-content: space-between;
1476
+ align-items: center;
1477
+ padding: var(--q-space-5) var(--q-space-6);
1478
+ border-bottom: 1px solid var(--q-card-border);
1479
+ background: rgba(255, 255, 255, 0.01);
1480
+ }
1481
+
1482
+ .table-premium-title {
1483
+ font-size: 1.125rem;
1484
+ font-weight: 600;
1485
+ color: var(--q-text-primary);
1486
+ }
1487
+
1488
+ .table-premium-filters {
1489
+ display: flex;
1490
+ gap: var(--q-space-3);
1491
+ }
1492
+
1493
+ .table-premium {
1494
+ width: 100%;
1495
+ border-collapse: collapse;
1496
+ }
1497
+
1498
+ .table-premium th {
1499
+ text-align: left;
1500
+ padding: var(--q-space-4) var(--q-space-6);
1501
+ font-size: 0.75rem;
1502
+ font-weight: 700;
1503
+ text-transform: uppercase;
1504
+ letter-spacing: 0.05em;
1505
+ color: var(--q-text-muted);
1506
+ border-bottom: 1px solid var(--q-card-border);
1507
+ background: rgba(255, 255, 255, 0.02);
1508
+ }
1509
+
1510
+ .table-premium td {
1511
+ padding: var(--q-space-4) var(--q-space-6);
1512
+ font-size: 0.875rem;
1513
+ color: var(--q-text-secondary);
1514
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
1515
+ }
1516
+
1517
+ .table-premium tbody tr:hover td {
1518
+ background: rgba(255, 255, 255, 0.02);
1519
+ }
1520
+
1521
+ .table-premium tbody tr:last-child td {
1522
+ border-bottom: none;
1523
+ }
1524
+
1525
+ .table-premium-footer {
1526
+ display: flex;
1527
+ justify-content: space-between;
1528
+ align-items: center;
1529
+ padding: var(--q-space-4) var(--q-space-6);
1530
+ border-top: 1px solid var(--q-card-border);
1531
+ background: rgba(255, 255, 255, 0.02);
1532
+ }
1533
+
1534
+ .table-premium-info {
1535
+ font-size: 0.875rem;
1536
+ color: var(--q-text-muted);
1537
+ }
1538
+
1539
+ /* Light Mode Overrides for Premium Table */
1540
+ html[data-theme="light"] .table-premium-container {
1541
+ background: var(--q-light-card-bg);
1542
+ border-color: var(--q-light-card-border);
1543
+ }
1544
+
1545
+ html[data-theme="light"] .table-premium-header {
1546
+ background: #fcfcfd;
1547
+ border-bottom-color: var(--q-light-card-border);
1548
+ }
1549
+
1550
+ html[data-theme="light"] .table-premium th {
1551
+ background: #f8fafc;
1552
+ border-bottom-color: var(--q-light-card-border);
1553
+ color: #64748b;
1554
+ }
1555
+
1556
+ html[data-theme="light"] .table-premium td {
1557
+ border-bottom-color: #f1f5f9;
1558
+ color: #334155;
1559
+ }
1560
+
1561
+ html[data-theme="light"] .table-premium tbody tr:hover td {
1562
+ background: #f8fafc;
1563
+ }
1564
+
1565
+ html[data-theme="light"] .table-premium-footer {
1566
+ background: #f8fafc;
1567
+ border-top-color: var(--q-light-card-border);
1568
+ }
1569
+
1570
+ /* ============================================================================
1571
+ LIST COMPONENT
1572
+ ============================================================================ */
1573
+
1574
+ /* Base list container */
1575
+ .list {
1576
+ display: flex;
1577
+ flex-direction: column;
1578
+ gap: var(--q-space-1);
1579
+ }
1580
+
1581
+ /* Scrollable list container */
1582
+ .list-scroll {
1583
+ display: flex;
1584
+ flex-direction: column;
1585
+ gap: var(--q-space-1);
1586
+ overflow-y: auto;
1587
+ -webkit-overflow-scrolling: touch;
1588
+ max-height: 400px;
1589
+ padding: var(--q-space-2);
1590
+ }
1591
+
1592
+ .list-scroll::-webkit-scrollbar {
1593
+ width: 6px;
1594
+ }
1595
+
1596
+ .list-scroll::-webkit-scrollbar-track {
1597
+ background: transparent;
1598
+ }
1599
+
1600
+ .list-scroll::-webkit-scrollbar-thumb {
1601
+ background: var(--q-color-secondary);
1602
+ border-radius: 3px;
1603
+ opacity: 0.5;
1604
+ }
1605
+
1606
+ .list-scroll::-webkit-scrollbar-thumb:hover {
1607
+ background: var(--q-color-primary);
1608
+ }
1609
+
1610
+ /* List item */
1611
+ .list-item {
1612
+ display: flex;
1613
+ align-items: center;
1614
+ gap: var(--q-space-3);
1615
+ padding: var(--q-space-3) var(--q-space-4);
1616
+ border-radius: var(--q-radius-md);
1617
+ cursor: pointer;
1618
+ transition: all var(--q-duration-150) var(--q-ease-in-out);
1619
+ color: var(--q-text-primary);
1620
+ }
1621
+
1622
+ .list-item:hover {
1623
+ background-color: var(--q-glass-bg);
1624
+ }
1625
+
1626
+ .list-item.active {
1627
+ background-color: color-mix(in srgb, var(--q-color-primary), transparent 90%);
1628
+ color: var(--q-color-primary);
1629
+ }
1630
+
1631
+ /* List item with avatar */
1632
+ .list-item-avatar {
1633
+ width: 40px;
1634
+ height: 40px;
1635
+ border-radius: 50%;
1636
+ object-fit: cover;
1637
+ flex-shrink: 0;
1638
+ }
1639
+
1640
+ /* List item content */
1641
+ .list-item-content {
1642
+ flex: 1;
1643
+ min-width: 0;
1644
+ }
1645
+
1646
+ .list-item-title {
1647
+ font-size: var(--q-space-4);
1648
+ font-weight: 500;
1649
+ color: var(--q-text-primary);
1650
+ white-space: nowrap;
1651
+ overflow: hidden;
1652
+ text-overflow: ellipsis;
1653
+ }
1654
+
1655
+ .list-item-subtitle {
1656
+ font-size: var(--q-space-3);
1657
+ color: var(--q-text-secondary);
1658
+ white-space: nowrap;
1659
+ overflow: hidden;
1660
+ text-overflow: ellipsis;
1661
+ }
1662
+
1663
+ .list-item-meta {
1664
+ font-size: var(--q-space-3);
1665
+ color: var(--q-text-muted);
1666
+ flex-shrink: 0;
1667
+ }
1668
+
1669
+ /* List item with icon */
1670
+ .list-item-icon {
1671
+ width: 20px;
1672
+ height: 20px;
1673
+ flex-shrink: 0;
1674
+ color: var(--q-text-muted);
1675
+ }
1676
+
1677
+ .list-item:hover .list-item-icon {
1678
+ color: var(--q-text-primary);
1679
+ }
1680
+
1681
+ /* List header */
1682
+ .list-header {
1683
+ display: flex;
1684
+ align-items: center;
1685
+ gap: var(--q-space-3);
1686
+ padding: var(--q-space-2) var(--q-space-4);
1687
+ font-size: var(--q-space-3);
1688
+ font-weight: 600;
1689
+ text-transform: uppercase;
1690
+ letter-spacing: 0.05em;
1691
+ color: var(--q-text-muted);
1692
+ border-bottom: 1px solid var(--q-glass-border);
1693
+ }
1694
+
1695
+ /* List divider */
1696
+ .list-divider {
1697
+ height: 1px;
1698
+ background-color: var(--q-glass-border);
1699
+ margin: var(--q-space-2) 0;
1700
+ }
1701
+
1702
+ /* List actions */
1703
+ .list-item-actions {
1704
+ display: flex;
1705
+ gap: var(--q-space-2);
1706
+ opacity: 0;
1707
+ transition: opacity var(--q-duration-150) var(--q-ease-in-out);
1708
+ }
1709
+
1710
+ .list-item:hover .list-item-actions {
1711
+ opacity: 1;
1712
+ }
1713
+
1714
+ /* Unread list item */
1715
+ .list-item-unread .list-item-title,
1716
+ .list-item-unread .list-item-subtitle {
1717
+ font-weight: 600;
1718
+ color: var(--q-text-primary);
1719
+ }
1720
+
1721
+ /* Compact list */
1722
+ .list-compact .list-item {
1723
+ padding: var(--q-space-2) var(--q-space-3);
1724
+ }
1725
+
1726
+ /* List with borders */
1727
+ .list-bordered {
1728
+ border: 1px solid var(--q-glass-border);
1729
+ border-radius: var(--q-radius-lg);
1730
+ padding: var(--q-space-2);
1731
+ }
1732
+
1733
+ /* Grid list (for cards/media items) */
1734
+ .list-grid {
1735
+ display: grid;
1736
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1737
+ gap: var(--q-space-4);
1738
+ padding: var(--q-space-4);
1739
+ }
1740
+
1741
+ /* Light mode overrides */
1742
+ html[data-theme="light"] .list-item:hover {
1743
+ background-color: #f1f5f9;
1744
+ }
1745
+
1746
+ html[data-theme="light"] .list-item.active {
1747
+ background-color: #eff6ff;
1748
+ }
1749
+
1750
+ html[data-theme="light"] .list-divider {
1751
+ background-color: #e2e8f0;
1752
+ }
1753
+
799
1754
  /* Overflow Utility */
800
1755
  .overflow-x-auto {
801
1756
  overflow-x: auto;
@@ -815,7 +1770,7 @@ html[data-theme="light"] .table tbody tr:hover {
815
1770
  display: grid;
816
1771
  grid-template-columns: 260px minmax(0, 1fr);
817
1772
  height: 100vh;
818
- background: var(--q-bg-primary, #08081a);
1773
+ background: var(--q-bg-primary);
819
1774
  overflow: hidden;
820
1775
  max-width: 100vw;
821
1776
  }
@@ -845,25 +1800,31 @@ html[data-theme="light"] .table tbody tr:hover {
845
1800
  overflow-x: hidden;
846
1801
  }
847
1802
 
848
- /* Top navigation bar */
1803
+ /* Top Header Bar */
849
1804
  .top-nav {
850
1805
  display: flex;
851
1806
  justify-content: space-between;
852
1807
  align-items: center;
853
- margin-bottom: 2rem;
854
1808
  padding: 1rem 1.5rem;
855
1809
  background: rgba(255, 255, 255, 0.03);
1810
+ backdrop-filter: blur(12px);
1811
+ -webkit-backdrop-filter: blur(12px);
856
1812
  border: 1px solid rgba(255, 255, 255, 0.08);
857
1813
  border-radius: 1rem;
1814
+ margin-bottom: 2rem;
858
1815
  }
859
1816
 
860
- /* Top navigation actions container */
861
1817
  .top-nav-actions {
862
1818
  display: flex;
863
1819
  align-items: center;
864
1820
  gap: 0.75rem;
865
1821
  }
866
1822
 
1823
+ html[data-theme="light"] .top-nav {
1824
+ background: var(--q-light-card-bg, #ffffff);
1825
+ border-color: var(--q-light-card-border, #e2e8f0);
1826
+ }
1827
+
867
1828
  /* Page header with actions */
868
1829
  .page-header {
869
1830
  display: flex;
@@ -872,15 +1833,34 @@ html[data-theme="light"] .table tbody tr:hover {
872
1833
  margin-bottom: 2rem;
873
1834
  }
874
1835
 
875
- /* Light mode overrides for layout */
876
- html[data-theme="light"] .sidebar {
877
- background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
878
- border-right-color: #e2e8f0;
1836
+ .page-title {
1837
+ font-size: 1.875rem;
1838
+ font-weight: 700;
1839
+ color: var(--q-text-primary, #f1f5f9);
1840
+ margin: 0 0 0.25rem 0;
1841
+ line-height: 1.2;
879
1842
  }
880
1843
 
881
- html[data-theme="light"] .top-nav {
882
- background: #ffffff;
883
- border-color: #e2e8f0;
1844
+ .page-subtitle {
1845
+ font-size: 0.875rem;
1846
+ color: var(--q-text-muted, #64748b);
1847
+ margin: 0;
1848
+ }
1849
+
1850
+ .page-actions {
1851
+ display: flex;
1852
+ align-items: center;
1853
+ gap: 0.75rem;
1854
+ }
1855
+
1856
+ html[data-theme="light"] .page-title {
1857
+ color: #0f172a;
1858
+ }
1859
+
1860
+ /* Light mode overrides for layout */
1861
+ html[data-theme="light"] .sidebar {
1862
+ background: linear-gradient(180deg, var(--q-light-card-bg) 0%, var(--q-light-bg) 100%);
1863
+ border-right-color: var(--q-light-card-border);
884
1864
  }
885
1865
 
886
1866
  /* Responsive layout adjustments */
@@ -913,6 +1893,61 @@ html[data-theme="light"] .top-nav {
913
1893
  }
914
1894
  }
915
1895
 
1896
+ /* ============================================================================
1897
+ BREADCRUMBS
1898
+ Navigation trails for complex applications
1899
+ ============================================================================ */
1900
+
1901
+ .breadcrumb {
1902
+ display: flex;
1903
+ align-items: center;
1904
+ gap: var(--q-space-2, 0.5rem);
1905
+ font-size: 0.875rem;
1906
+ color: var(--q-text-muted, #64748b);
1907
+ list-style: none;
1908
+ padding: 0;
1909
+ margin: 0;
1910
+ }
1911
+
1912
+ .breadcrumb-item {
1913
+ display: flex;
1914
+ align-items: center;
1915
+ gap: var(--q-space-2, 0.5rem);
1916
+ }
1917
+
1918
+ .breadcrumb-link {
1919
+ color: var(--q-text-secondary, #94a3b8);
1920
+ text-decoration: none;
1921
+ transition: color var(--q-duration-150, 0.2s);
1922
+ }
1923
+
1924
+ .breadcrumb-link:hover {
1925
+ color: var(--q-color-primary, #00d4ff);
1926
+ }
1927
+
1928
+ .breadcrumb-separator {
1929
+ color: var(--q-text-muted, #64748b);
1930
+ opacity: 0.6;
1931
+ }
1932
+
1933
+ .breadcrumb-current {
1934
+ color: var(--q-text-primary, #f1f5f9);
1935
+ font-weight: 500;
1936
+ }
1937
+
1938
+ /* Light mode overrides for breadcrumbs */
1939
+ html[data-theme="light"] .breadcrumb-link {
1940
+ color: #64748b;
1941
+ }
1942
+
1943
+ html[data-theme="light"] .breadcrumb-link:hover {
1944
+ color: #2563eb;
1945
+ }
1946
+
1947
+ html[data-theme="light"] .breadcrumb-current {
1948
+ color: #0f172a;
1949
+ }
1950
+
916
1951
  /* ============================================================================
917
1952
  NAVIGATION PATTERNS
918
1953
  Sidebar navigation items and sections
@@ -951,6 +1986,7 @@ html[data-theme="light"] .top-nav {
951
1986
  background: transparent;
952
1987
  width: 100%;
953
1988
  text-align: left;
1989
+ position: relative;
954
1990
  }
955
1991
 
956
1992
  .nav-item:hover {
@@ -963,13 +1999,23 @@ html[data-theme="light"] .top-nav {
963
1999
  color: var(--q-color-starlight, #00d4ff);
964
2000
  }
965
2001
 
966
- /* Constrain nav item icons - prevent oversized icons */
967
- .nav-item svg {
2002
+ .nav-item.active::before {
2003
+ content: '';
2004
+ position: absolute;
2005
+ left: -1.5rem; /* Align with sidebar edge */
2006
+ top: 50%;
2007
+ transform: translateY(-50%);
2008
+ width: 3px;
2009
+ height: 20px;
2010
+ background: var(--q-color-starlight, #00d4ff);
2011
+ border-radius: 0 2px 2px 0;
2012
+ }
2013
+
2014
+ /* Constrain nav item icons */
2015
+ .nav-item i, .nav-item .q-icon, .nav-item svg {
968
2016
  width: 1.125rem;
969
2017
  height: 1.125rem;
970
- max-width: 1.125rem;
971
- max-height: 1.125rem;
972
- flex-shrink: 0;
2018
+ font-size: 1.125rem;
973
2019
  }
974
2020
 
975
2021
  /* Sidebar scrollbar styling to prevent layout shift */
@@ -1011,6 +2057,88 @@ html[data-theme="light"] .nav-section-title {
1011
2057
  color: #64748b;
1012
2058
  }
1013
2059
 
2060
+ /* ============================================================================
2061
+ QUICK ACTIONS
2062
+ Prominent action cards for dashboard navigation
2063
+ ============================================================================ */
2064
+
2065
+ .quick-action-grid {
2066
+ display: grid;
2067
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
2068
+ gap: 1.5rem;
2069
+ }
2070
+
2071
+ .quick-action-card {
2072
+ background: rgba(255, 255, 255, 0.03);
2073
+ border: 1px solid rgba(255, 255, 255, 0.08);
2074
+ border-radius: 1rem;
2075
+ padding: 1.5rem;
2076
+ cursor: pointer;
2077
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2078
+ text-align: center;
2079
+ display: flex;
2080
+ flex-direction: column;
2081
+ align-items: center;
2082
+ gap: 0.75rem;
2083
+ }
2084
+
2085
+ .quick-action-card:hover {
2086
+ background: rgba(255, 255, 255, 0.05);
2087
+ transform: translateY(-4px);
2088
+ border-color: var(--q-color-primary, #00d4ff);
2089
+ box-shadow: 0 12px 24px -12px rgba(0, 0, 0, 0.5);
2090
+ }
2091
+
2092
+ .quick-action-icon {
2093
+ width: 48px;
2094
+ height: 48px;
2095
+ border-radius: 0.75rem;
2096
+ display: flex;
2097
+ align-items: center;
2098
+ justify-content: center;
2099
+ background: rgba(255, 255, 255, 0.05);
2100
+ color: var(--q-color-primary, #00d4ff);
2101
+ transition: all 0.3s ease;
2102
+ }
2103
+
2104
+ .quick-action-icon i, .quick-action-icon .q-icon, .quick-action-icon svg {
2105
+ width: 1.75rem;
2106
+ height: 1.75rem;
2107
+ font-size: 1.75rem;
2108
+ }
2109
+
2110
+ .quick-action-card:hover .quick-action-icon {
2111
+ background: var(--q-color-primary, #00d4ff);
2112
+ color: white;
2113
+ transform: scale(1.1);
2114
+ }
2115
+
2116
+ .quick-action-title {
2117
+ font-size: 1rem;
2118
+ font-weight: 600;
2119
+ color: var(--q-text-primary, #f1f5f9);
2120
+ }
2121
+
2122
+ .quick-action-desc {
2123
+ font-size: 0.8125rem;
2124
+ color: var(--q-text-muted, #64748b);
2125
+ line-height: 1.4;
2126
+ }
2127
+
2128
+ /* Light mode overrides for quick actions */
2129
+ html[data-theme="light"] .quick-action-card {
2130
+ background: #ffffff;
2131
+ border-color: #e2e8f0;
2132
+ }
2133
+
2134
+ html[data-theme="light"] .quick-action-card:hover {
2135
+ background: #f8fafc;
2136
+ }
2137
+
2138
+ html[data-theme="light"] .quick-action-icon {
2139
+ background: #f1f5f9;
2140
+ }
2141
+
1014
2142
  /* ============================================================================
1015
2143
  STAT CARDS
1016
2144
  Dashboard metric cards with icons and values
@@ -1019,7 +2147,7 @@ html[data-theme="light"] .nav-section-title {
1019
2147
  /* Stats grid layout */
1020
2148
  .stats-grid {
1021
2149
  display: grid;
1022
- grid-template-columns: repeat(4, 1fr);
2150
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
1023
2151
  gap: 1.5rem;
1024
2152
  margin-bottom: 2rem;
1025
2153
  }
@@ -1056,6 +2184,12 @@ html[data-theme="light"] .nav-section-title {
1056
2184
  justify-content: center;
1057
2185
  }
1058
2186
 
2187
+ .stat-icon i, .stat-icon .q-icon, .stat-icon svg {
2188
+ width: 1.5rem;
2189
+ height: 1.5rem;
2190
+ font-size: 1.5rem;
2191
+ }
2192
+
1059
2193
  /* Icon color variants */
1060
2194
  .stat-icon-blue {
1061
2195
  background: rgba(59, 130, 246, 0.15);
@@ -1107,6 +2241,12 @@ html[data-theme="light"] .nav-section-title {
1107
2241
  border-radius: 0.375rem;
1108
2242
  }
1109
2243
 
2244
+ .stat-trend i, .stat-trend .q-icon, .stat-trend svg {
2245
+ width: 0.75rem;
2246
+ height: 0.75rem;
2247
+ font-size: 0.75rem;
2248
+ }
2249
+
1110
2250
  .stat-trend-up {
1111
2251
  background: rgba(16, 185, 129, 0.15);
1112
2252
  color: #34d399;
@@ -1117,10 +2257,77 @@ html[data-theme="light"] .nav-section-title {
1117
2257
  color: #f87171;
1118
2258
  }
1119
2259
 
2260
+ /* ============================================================================
2261
+ ACTIVITY FEED
2262
+ Timeline of recent events and updates
2263
+ ============================================================================ */
2264
+
2265
+ .activity-list {
2266
+ display: flex;
2267
+ flex-direction: column;
2268
+ }
2269
+
2270
+ .activity-item {
2271
+ display: flex;
2272
+ align-items: flex-start;
2273
+ gap: 1rem;
2274
+ padding: 1rem 0;
2275
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
2276
+ }
2277
+
2278
+ .activity-item:last-child {
2279
+ border-bottom: none;
2280
+ }
2281
+
2282
+ .activity-icon {
2283
+ width: 36px;
2284
+ height: 36px;
2285
+ border-radius: 50%;
2286
+ display: flex;
2287
+ align-items: center;
2288
+ justify-content: center;
2289
+ flex-shrink: 0;
2290
+ }
2291
+
2292
+ .activity-icon i, .activity-icon .q-icon, .activity-icon svg {
2293
+ width: 1rem;
2294
+ height: 1rem;
2295
+ font-size: 1rem;
2296
+ }
2297
+
2298
+ .activity-content {
2299
+ flex: 1;
2300
+ }
2301
+
2302
+ .activity-text {
2303
+ font-size: 0.875rem;
2304
+ color: var(--q-text-primary, #f1f5f9);
2305
+ margin-bottom: 0.25rem;
2306
+ }
2307
+
2308
+ .activity-text span {
2309
+ color: var(--q-color-starlight, #00d4ff);
2310
+ font-weight: 500;
2311
+ }
2312
+
2313
+ .activity-time {
2314
+ font-size: 0.75rem;
2315
+ color: var(--q-text-muted, #64748b);
2316
+ }
2317
+
2318
+ /* Light mode overrides for activity feed */
2319
+ html[data-theme="light"] .activity-item {
2320
+ border-bottom-color: #f1f5f9;
2321
+ }
2322
+
2323
+ html[data-theme="light"] .activity-text {
2324
+ color: #0f172a;
2325
+ }
2326
+
1120
2327
  /* Light mode overrides for stat cards */
1121
2328
  html[data-theme="light"] .stat-card {
1122
- background: #ffffff;
1123
- border-color: #e2e8f0;
2329
+ background: var(--q-light-card-bg);
2330
+ border-color: var(--q-light-card-border);
1124
2331
  }
1125
2332
 
1126
2333
  html[data-theme="light"] .stat-card:hover {
@@ -1147,19 +2354,6 @@ html[data-theme="light"] .stat-icon-red {
1147
2354
  background: rgba(239, 68, 68, 0.1);
1148
2355
  }
1149
2356
 
1150
- /* Responsive stats grid */
1151
- @media (max-width: 1280px) {
1152
- .stats-grid {
1153
- grid-template-columns: repeat(2, 1fr);
1154
- }
1155
- }
1156
-
1157
- @media (max-width: 768px) {
1158
- .stats-grid {
1159
- grid-template-columns: 1fr;
1160
- }
1161
- }
1162
-
1163
2357
  /* ============================================================================
1164
2358
  ICON BUTTONS
1165
2359
  Square and circular icon buttons
@@ -1181,6 +2375,12 @@ html[data-theme="light"] .stat-icon-red {
1181
2375
  position: relative;
1182
2376
  }
1183
2377
 
2378
+ .icon-btn i, .icon-btn .q-icon {
2379
+ width: 1.25rem;
2380
+ height: 1.25rem;
2381
+ font-size: 1.25rem;
2382
+ }
2383
+
1184
2384
  .icon-btn:hover {
1185
2385
  background: rgba(255, 255, 255, 0.08);
1186
2386
  color: var(--q-text-primary, #f1f5f9);
@@ -1198,6 +2398,12 @@ html[data-theme="light"] .stat-icon-red {
1198
2398
  border-radius: 0.5rem;
1199
2399
  }
1200
2400
 
2401
+ .icon-btn-sm i, .icon-btn-sm .q-icon {
2402
+ width: 1rem;
2403
+ height: 1rem;
2404
+ font-size: 1rem;
2405
+ }
2406
+
1201
2407
  /* Large icon button */
1202
2408
  .icon-btn-lg {
1203
2409
  width: 48px;
@@ -1205,6 +2411,12 @@ html[data-theme="light"] .stat-icon-red {
1205
2411
  border-radius: 0.75rem;
1206
2412
  }
1207
2413
 
2414
+ .icon-btn-lg i, .icon-btn-lg .q-icon {
2415
+ width: 1.5rem;
2416
+ height: 1.5rem;
2417
+ font-size: 1.5rem;
2418
+ }
2419
+
1208
2420
  /* Action buttons container */
1209
2421
  .action-buttons {
1210
2422
  display: flex;
@@ -1226,11 +2438,24 @@ html[data-theme="light"] .stat-icon-red {
1226
2438
  transition: all 0.2s ease;
1227
2439
  }
1228
2440
 
2441
+ .action-btn i, .action-btn .q-icon {
2442
+ width: 1rem;
2443
+ height: 1rem;
2444
+ font-size: 1rem;
2445
+ }
2446
+
1229
2447
  .action-btn:hover {
1230
2448
  background: rgba(255, 255, 255, 0.08);
1231
2449
  color: var(--q-text-primary, #f1f5f9);
1232
2450
  }
1233
2451
 
2452
+ /* ICON SIZING UTILITIES */
2453
+ .icon-xs { width: 0.75rem !important; height: 0.75rem !important; font-size: 0.75rem !important; }
2454
+ .icon-sm { width: 1rem !important; height: 1rem !important; font-size: 1rem !important; }
2455
+ .icon-md { width: 1.25rem !important; height: 1.25rem !important; font-size: 1.25rem !important; }
2456
+ .icon-lg { width: 1.5rem !important; height: 1.5rem !important; font-size: 1.5rem !important; }
2457
+ .icon-xl { width: 2rem !important; height: 2rem !important; font-size: 2rem !important; }
2458
+
1234
2459
  /* Delete action button */
1235
2460
  .action-btn-delete:hover {
1236
2461
  background: rgba(239, 68, 68, 0.15);
@@ -1287,18 +2512,6 @@ html[data-theme="light"] .action-btn:hover {
1287
2512
  }
1288
2513
 
1289
2514
  /* Sun/moon icon visibility */
1290
- .sun-icon {
1291
- display: none;
1292
- }
1293
-
1294
- html[data-theme="light"] .sun-icon {
1295
- display: inline;
1296
- }
1297
-
1298
- html[data-theme="light"] .moon-icon {
1299
- display: none;
1300
- }
1301
-
1302
2515
  /* Light mode overrides for theme toggle */
1303
2516
  html[data-theme="light"] .theme-btn {
1304
2517
  background: #f1f5f9;
@@ -1404,52 +2617,46 @@ html[data-theme="light"] .user-email {
1404
2617
  .status-badge {
1405
2618
  display: inline-flex;
1406
2619
  align-items: center;
1407
- gap: 0.375rem;
1408
- padding: 0.375rem 0.875rem;
1409
- border-radius: 9999px;
2620
+ justify-content: center;
2621
+ padding: 0.3rem 0.75rem;
2622
+ border-radius: 0.375rem;
1410
2623
  font-size: 0.75rem;
1411
2624
  font-weight: 500;
1412
2625
  }
1413
2626
 
1414
- .status-badge::before {
1415
- content: '';
1416
- width: 6px;
1417
- height: 6px;
1418
- border-radius: 50%;
1419
- }
1420
-
1421
2627
  /* Status variants */
1422
2628
  .status-active {
1423
- background: rgba(16, 185, 129, 0.15);
2629
+ background: rgba(52, 211, 153, 0.12);
1424
2630
  color: #34d399;
1425
2631
  }
1426
2632
 
1427
- .status-active::before {
1428
- background: #34d399;
1429
- }
1430
-
1431
2633
  .status-pending {
1432
- background: rgba(245, 158, 11, 0.15);
2634
+ background: rgba(251, 191, 36, 0.12);
1433
2635
  color: #fbbf24;
1434
2636
  }
1435
2637
 
1436
- .status-pending::before {
1437
- background: #fbbf24;
1438
- }
1439
-
1440
2638
  .status-inactive {
1441
- background: rgba(239, 68, 68, 0.15);
2639
+ background: rgba(248, 113, 113, 0.12);
1442
2640
  color: #f87171;
1443
2641
  }
1444
2642
 
1445
- .status-inactive::before {
1446
- background: #f87171;
2643
+ /* Simplified status for tables */
2644
+ .status-cell {
2645
+ display: flex;
2646
+ align-items: center;
2647
+ gap: 0.5rem;
1447
2648
  }
1448
2649
 
2650
+ .status-active-dot { background-color: #34d399; }
2651
+ .status-pending-dot { background-color: #fbbf24; }
2652
+ .status-inactive-dot { background-color: #f87171; }
2653
+
1449
2654
  /* Role badge */
1450
2655
  .role-badge {
1451
2656
  display: inline-flex;
1452
- padding: 0.25rem 0.75rem;
2657
+ align-items: center;
2658
+ justify-content: center;
2659
+ padding: 0.3rem 0.75rem;
1453
2660
  border-radius: 0.375rem;
1454
2661
  font-size: 0.75rem;
1455
2662
  font-weight: 500;
@@ -1486,7 +2693,8 @@ html[data-theme="light"] .user-email {
1486
2693
  .label {
1487
2694
  display: inline-flex;
1488
2695
  align-items: center;
1489
- padding: 0.25rem 0.75rem;
2696
+ justify-content: center;
2697
+ padding: 0.3rem 0.75rem;
1490
2698
  border-radius: 9999px;
1491
2699
  font-size: 0.75rem;
1492
2700
  font-weight: 500;
@@ -1510,17 +2718,17 @@ html[data-theme="light"] .user-email {
1510
2718
 
1511
2719
  /* Light mode overrides for badges */
1512
2720
  html[data-theme="light"] .status-active {
1513
- background: rgba(16, 185, 129, 0.1);
2721
+ background: rgba(5, 150, 105, 0.1);
1514
2722
  color: #059669;
1515
2723
  }
1516
2724
 
1517
2725
  html[data-theme="light"] .status-pending {
1518
- background: rgba(245, 158, 11, 0.1);
2726
+ background: rgba(217, 119, 6, 0.1);
1519
2727
  color: #d97706;
1520
2728
  }
1521
2729
 
1522
2730
  html[data-theme="light"] .status-inactive {
1523
- background: rgba(239, 68, 68, 0.1);
2731
+ background: rgba(220, 38, 38, 0.1);
1524
2732
  color: #dc2626;
1525
2733
  }
1526
2734
 
@@ -1609,22 +2817,64 @@ html[data-theme="light"] .filter-select {
1609
2817
  height: 10px;
1610
2818
  background: #10b981;
1611
2819
  border-radius: 50%;
1612
- border: 2px solid var(--q-bg-primary, #08081a);
2820
+ border: 2px solid var(--q-bg-primary);
2821
+ }
2822
+
2823
+ /* Away status indicator */
2824
+ .away-indicator {
2825
+ background: #f59e0b;
2826
+ }
2827
+
2828
+ /* Busy status indicator */
2829
+ .busy-indicator {
2830
+ background: #ef4444;
2831
+ }
2832
+
2833
+ /* Offline status indicator */
2834
+ .offline-indicator {
2835
+ background: #64748b;
2836
+ }
2837
+
2838
+ /* Generic dot component */
2839
+ .dot {
2840
+ width: 8px;
2841
+ height: 8px;
2842
+ border-radius: 50%;
2843
+ display: inline-block;
2844
+ flex-shrink: 0;
2845
+ background-color: var(--q-text-muted, #64748b);
2846
+ }
2847
+
2848
+ .blue-dot { background-color: #3b82f6; box-shadow: 0 0 10px rgba(59, 130, 246, 0.4); }
2849
+ .green-dot { background-color: #10b981; box-shadow: 0 0 10px rgba(16, 185, 129, 0.4); }
2850
+ .red-dot { background-color: #ef4444; box-shadow: 0 0 10px rgba(239, 68, 68, 0.4); }
2851
+
2852
+ /* Status dot variants */
2853
+ .status-dot {
2854
+ width: 8px;
2855
+ height: 8px;
2856
+ border-radius: 50%;
2857
+ display: inline-block;
2858
+ background: var(--q-text-muted, #64748b);
1613
2859
  }
1614
2860
 
1615
- /* Away status indicator */
1616
- .away-indicator {
1617
- background: #f59e0b;
2861
+ .status-dot-online {
2862
+ background-color: #10b981;
2863
+ box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);
1618
2864
  }
1619
2865
 
1620
- /* Busy status indicator */
1621
- .busy-indicator {
1622
- background: #ef4444;
2866
+ .status-dot-offline {
2867
+ background-color: #64748b;
1623
2868
  }
1624
2869
 
1625
- /* Offline status indicator */
1626
- .offline-indicator {
1627
- background: #64748b;
2870
+ .status-dot-away {
2871
+ background-color: #f59e0b;
2872
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.1);
2873
+ }
2874
+
2875
+ .status-dot-busy {
2876
+ background-color: #ef4444;
2877
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
1628
2878
  }
1629
2879
 
1630
2880
  /* Notification dot */
@@ -1636,7 +2886,7 @@ html[data-theme="light"] .filter-select {
1636
2886
  height: 8px;
1637
2887
  background: #ef4444;
1638
2888
  border-radius: 50%;
1639
- border: 2px solid var(--q-bg-primary, #08081a);
2889
+ border: 2px solid var(--q-bg-primary);
1640
2890
  }
1641
2891
 
1642
2892
  /* Notification badge with number */
@@ -1655,14 +2905,14 @@ html[data-theme="light"] .filter-select {
1655
2905
  display: flex;
1656
2906
  align-items: center;
1657
2907
  justify-content: center;
1658
- border: 2px solid var(--q-bg-primary, #08081a);
2908
+ border: 2px solid var(--q-bg-primary);
1659
2909
  }
1660
2910
 
1661
2911
  /* Light mode overrides for indicators */
1662
2912
  html[data-theme="light"] .online-indicator,
1663
2913
  html[data-theme="light"] .notification-dot,
1664
2914
  html[data-theme="light"] .notification-badge {
1665
- border-color: #ffffff;
2915
+ border-color: var(--q-light-card-bg);
1666
2916
  }
1667
2917
 
1668
2918
  /* ============================================================================
@@ -1723,4 +2973,499 @@ html[data-theme="light"] .page-btn.active {
1723
2973
  background: rgba(59, 130, 246, 0.1);
1724
2974
  border-color: rgba(59, 130, 246, 0.3);
1725
2975
  color: #2563eb;
1726
- }
2976
+ }
2977
+ /* ==========================================================================
2978
+ STARLIGHT BRANDED COMPONENTS
2979
+ (Migrated from email-client.css)
2980
+ ========================================================================== */
2981
+
2982
+ /* User / Avatar Components */
2983
+ user-cell { display: flex; align-items: center; gap: 0.75rem; flex: 1; min-width: 0; }
2984
+ user-avatar {
2985
+ width: 2.5rem; height: 2.5rem; border-radius: 50%;
2986
+ background: var(--q-color-border-strong, #1e293b); color: #f1f5f9;
2987
+ display: flex; align-items: center; justify-content: center; font-weight: 600; flex-shrink: 0;
2988
+ }
2989
+ user-avatar.sm { width: 2.25rem; height: 2.25rem; font-size: 0.875rem; }
2990
+ user-avatar.lg { width: 3rem; height: 3rem; font-size: 1.125rem; }
2991
+ html[data-theme="light"] user-avatar { background: #e2e8f0; color: #64748b; }
2992
+
2993
+ user-info { display: flex; flex-direction: column; min-width: 0; }
2994
+ user-name { font-size: 0.875rem; font-weight: 600; }
2995
+ user-email { font-size: 0.75rem; color: #64748b; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
2996
+ html[data-theme="light"] user-name { color: #0f172a; }
2997
+
2998
+ /* Branded Labels */
2999
+ email-label { padding: 0.25rem 0.5rem; border-radius: 0.375rem; font-size: 0.75rem; font-weight: 600; }
3000
+ email-label.work { background: rgba(59, 130, 246, 0.1); color: #60a5fa; }
3001
+ email-label.personal { background: rgba(34, 197, 94, 0.1); color: #4ade80; }
3002
+ email-label.important { background: rgba(239, 68, 68, 0.1); color: #f87171; }
3003
+
3004
+ /* Branded Attachment Cards */
3005
+ attachment-card {
3006
+ display: flex; align-items: center; gap: 0.75rem; padding: 0.75rem; border-radius: 0.75rem; background: rgba(255, 255, 255, 0.05); cursor: pointer; transition: background 0.2s ease; min-width: 240px;
3007
+ }
3008
+ attachment-card:hover { background: rgba(255, 255, 255, 0.1); }
3009
+ html[data-theme="light"] attachment-card { background: #ffffff; border: 1px solid #e2e8f0; }
3010
+
3011
+ file-icon { width: 2.5rem; height: 2.5rem; border-radius: 0.5rem; display: flex; align-items: center; justify-content: center; }
3012
+ file-icon.pdf { background-color: rgba(239, 68, 68, 0.2); color: #f87171; }
3013
+ file-icon.excel { background-color: rgba(34, 197, 94, 0.2); color: #4ade80; }
3014
+
3015
+ file-info { display: flex; flex-direction: column; }
3016
+ file-name { font-size: 0.875rem; font-weight: 500; }
3017
+ file-size { font-size: 0.75rem; color: #64748b; }
3018
+
3019
+ /* ============================================================================
3020
+ CSS-ONLY HORIZONTAL NAVIGATION
3021
+ Glassmorphic header with dropdown and mobile drawer
3022
+ ============================================================================ */
3023
+
3024
+ /* Mobile toggle checkbox - hidden but functional */
3025
+ .nav-toggle { display: none; }
3026
+
3027
+ /* Nav Header */
3028
+ .nav-header {
3029
+ position: sticky;
3030
+ top: 0;
3031
+ z-index: 100;
3032
+ height: 64px;
3033
+ display: flex;
3034
+ align-items: center;
3035
+ padding: 0 2rem;
3036
+ gap: 2rem;
3037
+ background: rgba(15, 23, 42, 0.8);
3038
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
3039
+ backdrop-filter: blur(16px);
3040
+ -webkit-backdrop-filter: blur(16px);
3041
+ }
3042
+
3043
+ html[data-theme="light"] .nav-header {
3044
+ background: rgba(255, 255, 255, 0.9);
3045
+ border-bottom-color: rgba(0, 0, 0, 0.08);
3046
+ }
3047
+
3048
+ /* Brand */
3049
+ .nav-brand {
3050
+ font-size: 1.5rem;
3051
+ font-weight: 800;
3052
+ text-decoration: none;
3053
+ letter-spacing: -.03em;
3054
+ color: var(--q-text-primary, #f1f5f9);
3055
+ }
3056
+
3057
+ /* Logo */
3058
+ .nav-logo {
3059
+ flex-shrink: 0;
3060
+ display: flex;
3061
+ align-items: center;
3062
+ gap: .6rem;
3063
+ text-decoration: none;
3064
+ font-weight: 700;
3065
+ font-size: 1.1rem;
3066
+ letter-spacing: -.02em;
3067
+ color: var(--q-text-primary, #f1f5f9);
3068
+ }
3069
+
3070
+ html[data-theme="light"] .nav-logo {
3071
+ color: var(--q-light-text, #1e293b);
3072
+ }
3073
+
3074
+ /* Starlight logo mark - circular gradient icon */
3075
+ .nav-logo-mark,
3076
+ .nav-logo > i {
3077
+ width: 34px;
3078
+ height: 34px;
3079
+ border-radius: 50%;
3080
+ display: grid;
3081
+ place-items: center;
3082
+ flex-shrink: 0;
3083
+ animation: pulse 2s ease-in-out infinite;
3084
+ }
3085
+
3086
+ .nav-logo-mark {
3087
+ background: linear-gradient(135deg, var(--q-color-starlight-peach), var(--q-color-starlight-blue));
3088
+ }
3089
+
3090
+ .nav-logo > i {
3091
+ background: linear-gradient(135deg, var(--q-color-starlight-peach), var(--q-color-starlight-blue));
3092
+ display: flex;
3093
+ align-items: center;
3094
+ justify-content: center;
3095
+ }
3096
+
3097
+ html[data-theme="light"] .nav-logo > i {
3098
+ background: linear-gradient(135deg, var(--q-color-starlight-blue), var(--q-color-starlight-peach));
3099
+ }
3100
+
3101
+ html[data-theme="light"] .nav-logo-mark {
3102
+ background: linear-gradient(135deg, var(--q-color-starlight-blue), var(--q-color-starlight-peach));
3103
+ }
3104
+
3105
+ html[data-theme="light"] .nav-logo > i {
3106
+ background: linear-gradient(135deg, var(--q-color-starlight-blue), var(--q-color-starlight-peach));
3107
+ }
3108
+
3109
+ /* Desktop nav links */
3110
+ .nav-links {
3111
+ flex: 1;
3112
+ display: flex;
3113
+ align-items: center;
3114
+ gap: .25rem;
3115
+ }
3116
+
3117
+ .nav-links > a,
3118
+ .nav-dropdown summary {
3119
+ display: flex;
3120
+ align-items: center;
3121
+ gap: .35rem;
3122
+ padding: .45rem .85rem;
3123
+ border-radius: .625rem;
3124
+ font-size: .875rem;
3125
+ font-weight: 600;
3126
+ letter-spacing: .01em;
3127
+ color: var(--q-text-secondary, rgba(255,255,255,0.6));
3128
+ text-decoration: none;
3129
+ cursor: pointer;
3130
+ transition: color .15s, background .15s;
3131
+ white-space: nowrap;
3132
+ list-style: none;
3133
+ user-select: none;
3134
+ }
3135
+
3136
+ .nav-links > a:hover,
3137
+ .nav-dropdown summary:hover {
3138
+ color: var(--q-text-primary, #f1f5f9);
3139
+ background: rgba(255, 255, 255, 0.08);
3140
+ }
3141
+
3142
+ html[data-theme="light"] .nav-links > a:hover,
3143
+ html[data-theme="light"] .nav-dropdown summary:hover {
3144
+ color: var(--q-light-text, #1e293b);
3145
+ background: rgba(0, 0, 0, 0.05);
3146
+ }
3147
+
3148
+ html[data-theme="light"] .nav-links > a,
3149
+ html[data-theme="light"] .nav-dropdown summary {
3150
+ color: var(--q-text-muted, #64748b);
3151
+ }
3152
+
3153
+ html[data-theme="light"] .nav-links > a:hover,
3154
+ html[data-theme="light"] .nav-dropdown summary:hover {
3155
+ color: var(--q-light-text, #1e293b);
3156
+ background: rgba(0, 0, 0, 0.05);
3157
+ }
3158
+
3159
+ /* Dropdown chevron */
3160
+ .nav-dropdown summary::after {
3161
+ content: '';
3162
+ display: inline-block;
3163
+ width: 14px;
3164
+ height: 14px;
3165
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14' fill='none'%3E%3Cpath d='M3 5l4 4 4-4' stroke='%23676a7c' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat;
3166
+ transition: transform .2s;
3167
+ flex-shrink: 0;
3168
+ }
3169
+
3170
+ .nav-dropdown[open] > summary::after {
3171
+ transform: rotate(180deg);
3172
+ }
3173
+
3174
+ .nav-dropdown[open] > summary {
3175
+ color: var(--q-text-primary, #f1f5f9);
3176
+ background: rgba(255, 255, 255, 0.08);
3177
+ }
3178
+
3179
+ html[data-theme="light"] .nav-dropdown[open] > summary {
3180
+ color: var(--q-light-text, #1e293b);
3181
+ }
3182
+
3183
+ /* Hide native marker */
3184
+ .nav-dropdown summary::-webkit-details-marker,
3185
+ .nav-dropdown summary::marker { display: none; }
3186
+
3187
+ /* Dropdown container */
3188
+ .nav-dropdown {
3189
+ position: relative;
3190
+ }
3191
+
3192
+ /* Dropdown panel */
3193
+ .nav-dropdown-panel {
3194
+ position: absolute;
3195
+ top: calc(100% + .5rem);
3196
+ left: 0;
3197
+ min-width: 180px;
3198
+ isolation: isolate;
3199
+ background-color: rgb(15,15,25);
3200
+ border: 1px solid rgba(255, 255, 255, 0.1);
3201
+ border-radius: .625rem;
3202
+ padding: .4rem;
3203
+ display: flex;
3204
+ flex-direction: column;
3205
+ gap: .15rem;
3206
+ box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5);
3207
+ animation: dropIn .18s ease;
3208
+ z-index: 50;
3209
+ }
3210
+
3211
+ html[data-theme="light"] .nav-dropdown-panel {
3212
+ background: rgba(255, 255, 255, 0.98);
3213
+ border-color: rgba(0, 0, 0, 0.08);
3214
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
3215
+ }
3216
+
3217
+ @keyframes dropIn {
3218
+ from { opacity: 0; transform: translateY(-6px) scale(.98); }
3219
+ to { opacity: 1; transform: translateY(0) scale(1); }
3220
+ }
3221
+
3222
+ .nav-dropdown-panel a {
3223
+ display: flex;
3224
+ align-items: center;
3225
+ gap: .5rem;
3226
+ padding: .5rem .75rem;
3227
+ border-radius: 7px;
3228
+ font-size: .85rem;
3229
+ font-weight: 500;
3230
+ color: var(--q-text-secondary, rgba(255,255,255,0.6));
3231
+ text-decoration: none;
3232
+ transition: color .12s, background .12s;
3233
+ }
3234
+
3235
+ html[data-theme="light"] .nav-dropdown-panel a {
3236
+ color: var(--q-text-muted, #64748b);
3237
+ }
3238
+
3239
+ .nav-dropdown-panel a:hover {
3240
+ color: var(--q-text-primary, #f1f5f9);
3241
+ background: rgba(255, 255, 255, 0.08);
3242
+ }
3243
+
3244
+ html[data-theme="light"] .nav-dropdown-panel a:hover {
3245
+ color: var(--q-light-text, #1e293b);
3246
+ background: rgba(0, 0, 0, 0.05);
3247
+ }
3248
+
3249
+ .nav-dropdown-panel a::before {
3250
+ content: '';
3251
+ display: inline-block;
3252
+ width: 6px;
3253
+ height: 6px;
3254
+ border-radius: 50%;
3255
+ background: rgba(255, 255, 255, 0.2);
3256
+ flex-shrink: 0;
3257
+ transition: background .12s;
3258
+ }
3259
+
3260
+ html[data-theme="light"] .nav-dropdown-panel a::before {
3261
+ background: rgba(0, 0, 0, 0.15);
3262
+ }
3263
+
3264
+ .nav-dropdown-panel a:hover::before {
3265
+ background: var(--q-color-starlight-blue);
3266
+ }
3267
+
3268
+ /* Profile avatar */
3269
+ .nav-profile {
3270
+ flex-shrink: 0;
3271
+ margin-left: auto;
3272
+ width: 38px;
3273
+ height: 38px;
3274
+ border-radius: 50%;
3275
+ overflow: hidden;
3276
+ display: flex;
3277
+ align-items: center;
3278
+ justify-content: center;
3279
+ background: linear-gradient(135deg, var(--q-color-starlight-blue), var(--q-color-starlight-peach));
3280
+ text-decoration: none;
3281
+ font-weight: 700;
3282
+ font-size: .8rem;
3283
+ color: var(--q-color-starlight-deep, #0f172a);
3284
+ }
3285
+
3286
+ html[data-theme="light"] .nav-profile {
3287
+ background: linear-gradient(135deg, var(--q-color-starlight-peach), var(--q-color-starlight-blue));
3288
+ color: var(--q-light-text, #1e293b);
3289
+ }
3290
+
3291
+ /* Hamburger button */
3292
+ .nav-hamburger {
3293
+ display: none;
3294
+ cursor: pointer;
3295
+ width: 38px;
3296
+ height: 38px;
3297
+ border-radius: .625rem;
3298
+ border: 1px solid rgba(255, 255, 255, 0.1);
3299
+ background-color: hsla(0,0%,100%,.05);
3300
+ align-items: center;
3301
+ justify-content: center;
3302
+ flex-shrink: 0;
3303
+ margin-left: auto;
3304
+ }
3305
+
3306
+ html[data-theme="light"] .nav-hamburger {
3307
+ background: rgba(255, 255, 255, 0.9);
3308
+ border-color: rgba(0, 0, 0, 0.1);
3309
+ }
3310
+
3311
+ .nav-hamburger:hover {
3312
+ background: rgba(255, 255, 255, 0.08);
3313
+ }
3314
+
3315
+ html[data-theme="light"] .nav-hamburger:hover {
3316
+ background: rgba(0, 0, 0, 0.05);
3317
+ }
3318
+
3319
+ /* Hamburger icon */
3320
+ .nav-hamburger-icon {
3321
+ display: flex;
3322
+ flex-direction: column;
3323
+ gap: 4px;
3324
+ }
3325
+
3326
+ .nav-hamburger-icon span {
3327
+ display: block;
3328
+ width: 18px;
3329
+ height: 1.5px;
3330
+ background: var(--q-text-muted, rgba(255,255,255,0.5));
3331
+ border-radius: 2px;
3332
+ transition: transform .2s, opacity .2s, background .15s;
3333
+ }
3334
+
3335
+ html[data-theme="light"] .nav-hamburger-icon span {
3336
+ background: var(--q-text-muted, #64748b);
3337
+ }
3338
+
3339
+ .nav-hamburger:hover .nav-hamburger-icon span {
3340
+ background: var(--q-text-primary, #f1f5f9);
3341
+ }
3342
+
3343
+ html[data-theme="light"] .nav-hamburger:hover .nav-hamburger-icon span {
3344
+ background: var(--q-light-text, #1e293b);
3345
+ }
3346
+
3347
+ /* Animate hamburger to X when checked */
3348
+ .nav-toggle:checked ~ .nav-header .nav-hamburger-icon span:nth-child(1) {
3349
+ transform: translateY(5.5px) rotate(45deg);
3350
+ }
3351
+
3352
+ .nav-toggle:checked ~ .nav-header .nav-hamburger-icon span:nth-child(2) {
3353
+ opacity: 0;
3354
+ }
3355
+
3356
+ .nav-toggle:checked ~ .nav-header .nav-hamburger-icon span:nth-child(3) {
3357
+ transform: translateY(-5.5px) rotate(-45deg);
3358
+ }
3359
+
3360
+ /* Mobile drawer */
3361
+ .nav-drawer {
3362
+ display: none;
3363
+ position: sticky;
3364
+ top: 64px;
3365
+ z-index: 99;
3366
+ overflow: hidden;
3367
+ max-height: 0;
3368
+ transition: max-height .3s ease;
3369
+ background-color: hsla(0,0%,100%,.05);
3370
+ backdrop-filter: blur(16px);
3371
+ -webkit-backdrop-filter: blur(16px);
3372
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
3373
+ }
3374
+
3375
+ html[data-theme="light"] .nav-drawer {
3376
+ background: rgba(255, 255, 255, 0.98);
3377
+ border-bottom-color: rgba(0, 0, 0, 0.08);
3378
+ }
3379
+
3380
+ .nav-toggle:checked ~ .nav-drawer {
3381
+ max-height: 400px;
3382
+ }
3383
+
3384
+ .nav-drawer-inner {
3385
+ padding: 1rem;
3386
+ display: flex;
3387
+ flex-direction: column;
3388
+ gap: .25rem;
3389
+ }
3390
+
3391
+ .nav-drawer-inner a {
3392
+ display: block;
3393
+ padding: .65rem .85rem;
3394
+ border-radius: .625rem;
3395
+ font-size: .9rem;
3396
+ font-weight: 600;
3397
+ color: var(--q-text-secondary, rgba(255,255,255,0.6));
3398
+ text-decoration: none;
3399
+ transition: color .12s, background .12s;
3400
+ }
3401
+
3402
+ html[data-theme="light"] .nav-drawer-inner a {
3403
+ color: var(--q-text-muted, #64748b);
3404
+ }
3405
+
3406
+ .nav-drawer-inner a:hover {
3407
+ color: var(--q-text-primary, #f1f5f9);
3408
+ background: rgba(255, 255, 255, 0.08);
3409
+ }
3410
+
3411
+ html[data-theme="light"] .nav-drawer-inner a:hover {
3412
+ color: var(--q-light-text, #1e293b);
3413
+ background: rgba(0, 0, 0, 0.05);
3414
+ }
3415
+
3416
+ .nav-drawer-section-label {
3417
+ font-size: .7rem;
3418
+ letter-spacing: .08em;
3419
+ text-transform: uppercase;
3420
+ color: var(--q-text-muted, rgba(255,255,255,0.4));
3421
+ padding: .4rem .85rem .2rem;
3422
+ }
3423
+
3424
+ /* Mobile responsive */
3425
+ @media (max-width: 640px) {
3426
+ .nav-header .nav-links,
3427
+ .nav-header .nav-profile {
3428
+ display: none;
3429
+ }
3430
+
3431
+ .nav-hamburger {
3432
+ display: flex;
3433
+ margin-left: 0;
3434
+ }
3435
+
3436
+ .nav-drawer {
3437
+ display: block;
3438
+ }
3439
+
3440
+ .nav-header {
3441
+ display: flex;
3442
+ gap: 0.5rem;
3443
+ }
3444
+
3445
+ .nav-logo,
3446
+ .nav-brand {
3447
+ order: 2;
3448
+ }
3449
+
3450
+ .nav-hamburger {
3451
+ order: 1;
3452
+ }
3453
+
3454
+ .theme-toggle,
3455
+ .nav-header > .flex.items-center {
3456
+ order: 3;
3457
+ margin-left: auto;
3458
+ }
3459
+
3460
+ .nav-header > .flex.items-center {
3461
+ flex-direction: row !important;
3462
+ }
3463
+
3464
+ .nav-header > .flex.items-center .theme-toggle {
3465
+ order: 1;
3466
+ }
3467
+
3468
+ .nav-header > .flex.items-center > .btn-starlight {
3469
+ order: 2;
3470
+ }
3471
+ }