@howssatoshi/quantumcss 1.10.1 → 1.11.1

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