@metropolle/design-system 1.0.0-beta.1 → 1.0.0-beta.2025.10.1.1541.d0d0b36

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 (36) hide show
  1. package/README.md +1 -0
  2. package/dist/css/compat/back.css +466 -0
  3. package/dist/css/components.css +999 -3
  4. package/dist/css/mermaid.css +163 -0
  5. package/dist/css/tokens.css +53 -0
  6. package/dist/react/components/react/Modal/ConfirmDialog.d.ts +17 -0
  7. package/dist/react/components/react/Modal/ConfirmDialog.d.ts.map +1 -0
  8. package/dist/react/components/react/Modal/Modal.d.ts +12 -0
  9. package/dist/react/components/react/Modal/Modal.d.ts.map +1 -0
  10. package/dist/react/components/react/Modal/ModalBody.d.ts +9 -0
  11. package/dist/react/components/react/Modal/ModalBody.d.ts.map +1 -0
  12. package/dist/react/components/react/Modal/ModalFooter.d.ts +8 -0
  13. package/dist/react/components/react/Modal/ModalFooter.d.ts.map +1 -0
  14. package/dist/react/components/react/Modal/ModalHeader.d.ts +11 -0
  15. package/dist/react/components/react/Modal/ModalHeader.d.ts.map +1 -0
  16. package/dist/react/components/react/Modal/index.d.ts +6 -0
  17. package/dist/react/components/react/Modal/index.d.ts.map +1 -0
  18. package/dist/react/components/react/Select/Select.d.ts +20 -0
  19. package/dist/react/components/react/Select/Select.d.ts.map +1 -0
  20. package/dist/react/components/react/Select/index.d.ts +2 -0
  21. package/dist/react/components/react/Select/index.d.ts.map +1 -0
  22. package/dist/react/components/react/ThemeToggle/ThemeToggle.d.ts +28 -0
  23. package/dist/react/components/react/ThemeToggle/ThemeToggle.d.ts.map +1 -0
  24. package/dist/react/components/react/ThemeToggle/index.d.ts +3 -0
  25. package/dist/react/components/react/ThemeToggle/index.d.ts.map +1 -0
  26. package/dist/react/components/react/Typography/Typography.d.ts.map +1 -1
  27. package/dist/react/components/react/index.d.ts +9 -0
  28. package/dist/react/components/react/index.d.ts.map +1 -1
  29. package/dist/react/index.d.ts +17 -0
  30. package/dist/react/index.esm.js +224 -4
  31. package/dist/react/index.esm.js.map +1 -1
  32. package/dist/react/index.js +229 -2
  33. package/dist/react/index.js.map +1 -1
  34. package/dist/tokens/index.d.ts +19 -24
  35. package/dist/tokens/index.js +55 -2
  36. package/package.json +24 -14
@@ -42,6 +42,178 @@
42
42
  width: 100%;
43
43
  }
44
44
 
45
+ /* =========================
46
+ Modal Styles
47
+ ========================= */
48
+
49
+ /* Modal overlay styles */
50
+ .mds-modal-overlay,
51
+ .modal-overlay {
52
+ position: fixed !important;
53
+ top: 0 !important;
54
+ left: 0 !important;
55
+ right: 0 !important;
56
+ bottom: 0 !important;
57
+ background-color: transparent !important;
58
+ backdrop-filter: blur(4px) !important;
59
+ z-index: 9999 !important;
60
+ display: flex !important;
61
+ align-items: center !important;
62
+ justify-content: center !important;
63
+ }
64
+
65
+ /* Modal card styles - Liquid Glass Effect */
66
+ .mds-modal-overlay .mds-modal-card,
67
+ .modal-overlay .mds-modal-card {
68
+ background: rgba(255, 255, 255, 0.3) !important;
69
+ backdrop-filter: blur(20px) !important;
70
+ -webkit-backdrop-filter: blur(20px) !important;
71
+ border: 1px solid rgba(255, 255, 255, 0.4) !important;
72
+ box-shadow:
73
+ 0 8px 32px rgba(0, 0, 0, 0.2) !important,
74
+ 0 0 0 1px rgba(255, 255, 255, 0.2) !important,
75
+ inset 0 1px 0 rgba(255, 255, 255, 0.4) !important;
76
+ color: var(--text-primary) !important;
77
+ min-width: 320px !important;
78
+ max-width: 600px !important;
79
+ width: 90vw !important;
80
+ border-radius: 16px !important;
81
+ position: relative !important;
82
+ overflow: hidden !important;
83
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
84
+ transform: translate(0, 0) !important;
85
+ }
86
+
87
+ /* Inner glow effect */
88
+ .mds-modal-overlay .mds-modal-card::before,
89
+ .modal-overlay .mds-modal-card::before {
90
+ content: '' !important;
91
+ position: absolute !important;
92
+ top: 0 !important;
93
+ left: 0 !important;
94
+ right: 0 !important;
95
+ bottom: 0 !important;
96
+ background: linear-gradient(
97
+ 135deg,
98
+ rgba(255, 255, 255, 0.1) 0%,
99
+ rgba(255, 255, 255, 0.05) 50%,
100
+ rgba(255, 255, 255, 0.02) 100%
101
+ ) !important;
102
+ border-radius: 16px !important;
103
+ pointer-events: none !important;
104
+ z-index: -1 !important;
105
+ }
106
+
107
+ /* Border glow */
108
+ .mds-modal-overlay .mds-modal-card::after,
109
+ .modal-overlay .mds-modal-card::after {
110
+ content: '' !important;
111
+ position: absolute !important;
112
+ top: -1px !important;
113
+ left: -1px !important;
114
+ right: -1px !important;
115
+ bottom: -1px !important;
116
+ background: linear-gradient(
117
+ 45deg,
118
+ rgba(255, 255, 255, 0.3),
119
+ rgba(255, 255, 255, 0.1),
120
+ rgba(255, 255, 255, 0.05),
121
+ rgba(255, 255, 255, 0.1),
122
+ rgba(255, 255, 255, 0.3)
123
+ ) !important;
124
+ border-radius: 16px !important;
125
+ z-index: -2 !important;
126
+ opacity: 0.6 !important;
127
+ animation: mdsLiquidBorder 3s ease-in-out infinite !important;
128
+ }
129
+
130
+ @keyframes mdsLiquidBorder {
131
+ 0%, 100% { opacity: 0.6; transform: scale(1); }
132
+ 50% { opacity: 0.8; transform: scale(1.02); }
133
+ }
134
+
135
+ /* No hover lift or color change */
136
+ .mds-modal-overlay .mds-modal-card,
137
+ .mds-modal-overlay .mds-modal-card:hover,
138
+ .modal-overlay .mds-modal-card,
139
+ .modal-overlay .mds-modal-card:hover {
140
+ transform: none !important;
141
+ }
142
+ .mds-modal-overlay .mds-modal-card:hover::after,
143
+ .modal-overlay .mds-modal-card:hover::after {
144
+ opacity: 0.6 !important;
145
+ animation-duration: 3s !important;
146
+ }
147
+
148
+ /* Light theme */
149
+ html[data-theme="light"] .mds-modal-overlay .mds-modal-card,
150
+ html[data-theme="light"] .modal-overlay .mds-modal-card {
151
+ background: rgba(255, 255, 255, 0.35) !important;
152
+ border: 1px solid rgba(255, 255, 255, 0.5) !important;
153
+ box-shadow:
154
+ 0 8px 32px rgba(0, 0, 0, 0.15) !important,
155
+ 0 0 0 1px rgba(255, 255, 255, 0.3) !important,
156
+ inset 0 1px 0 rgba(255, 255, 255, 0.5) !important;
157
+ }
158
+
159
+ /* Dark theme */
160
+ html[data-theme="dark"] .mds-modal-overlay .mds-modal-card,
161
+ html:not([data-theme]) .mds-modal-overlay .mds-modal-card,
162
+ html[data-theme="dark"] .modal-overlay .mds-modal-card,
163
+ html:not([data-theme]) .modal-overlay .mds-modal-card {
164
+ background: rgba(30, 41, 59, 0.5) !important;
165
+ border: 1px solid rgba(255, 255, 255, 0.35) !important;
166
+ box-shadow:
167
+ 0 8px 32px rgba(0, 0, 0, 0.5) !important,
168
+ 0 0 0 1px rgba(255, 255, 255, 0.25) !important,
169
+ inset 0 1px 0 rgba(255, 255, 255, 0.3) !important;
170
+ }
171
+
172
+ /* Header close button sizing + alignment */
173
+ .mds-modal-header > button[aria-label="Fechar"] {
174
+ /* Size and reset */
175
+ font-size: 1rem !important;
176
+ line-height: 1 !important;
177
+ transition: none !important;
178
+ padding: 0 !important;
179
+ background: transparent !important;
180
+ border: none !important;
181
+ /* Colors from DS tokens with robust fallback */
182
+ color: var(--mds-color-text-secondary, var(--text-secondary, rgba(0,0,0,0.65))) !important;
183
+ /* Absolute centering like the left icon */
184
+ position: absolute !important;
185
+ right: 16px !important;
186
+ top: 50% !important;
187
+ transform: translateY(-50%) !important;
188
+ width: 32px !important;
189
+ height: 32px !important;
190
+ display: inline-flex !important;
191
+ align-items: center !important;
192
+ justify-content: center !important;
193
+ }
194
+ .mds-modal-header > button[aria-label="Fechar"]:hover,
195
+ .mds-modal-header > button[aria-label="Fechar"]:focus,
196
+ .mds-modal-header > button[aria-label="Fechar"]:focus-visible {
197
+ /* Keep centered on interactive states and avoid lifts/shadows */
198
+ position: absolute !important;
199
+ right: 16px !important;
200
+ top: 50% !important;
201
+ transform: translateY(-50%) !important;
202
+ box-shadow: none !important;
203
+ transition: none !important;
204
+ color: var(--mds-color-text-primary, var(--text-primary, #111827)) !important;
205
+ }
206
+
207
+ /* Responsive modal */
208
+ @media (max-width: 768px) {
209
+ .mds-modal-overlay .mds-modal-card,
210
+ .modal-overlay .mds-modal-card {
211
+ min-width: 90vw !important;
212
+ max-width: 95vw !important;
213
+ margin: 20px !important;
214
+ }
215
+ }
216
+
45
217
  /* Button Sizes */
46
218
  .mds-button--sm {
47
219
  padding: var(--mds-spacing-sm) var(--mds-spacing-md);
@@ -275,8 +447,17 @@
275
447
  font-size: var(--mds-typography-fontSize-4xl);
276
448
  line-height: var(--mds-typography-lineHeight-tight);
277
449
  letter-spacing: var(--mds-typography-letterSpacing-brand);
278
- font-weight: var(--mds-typography-fontWeight-normal);
450
+ font-weight: var(--mds-typography-fontWeight-bold);
451
+ color: var(--mds-color-text-primary);
452
+ }
453
+
454
+ /* Logo brand class for consistent branding */
455
+ .logo-brand {
456
+ font-size: var(--mds-typography-fontSize-4xl);
279
457
  color: var(--mds-color-text-primary);
458
+ letter-spacing: var(--mds-typography-letterSpacing-brand);
459
+ font-weight: var(--mds-typography-fontWeight-bold);
460
+ font-family: var(--mds-typography-fontFamily-brand);
280
461
  }
281
462
 
282
463
  /* Brand Logo Responsive */
@@ -285,7 +466,8 @@
285
466
  .mds-brand-logo,
286
467
  .mds-brand-logo--sm,
287
468
  .mds-brand-logo--md,
288
- .mds-brand-logo--lg {
469
+ .mds-brand-logo--lg,
470
+ .logo-brand {
289
471
  font-size: 1.8rem;
290
472
  letter-spacing: var(--mds-typography-letterSpacing-tight);
291
473
  }
@@ -317,7 +499,821 @@
317
499
  outline-offset: 2px;
318
500
  }
319
501
 
502
+ /* Dashboard Components */
503
+
504
+ /* Dashboard Action Controls */
505
+ .mds-dashboard-controls {
506
+ display: flex;
507
+ align-items: center;
508
+ gap: var(--mds-spacing-md);
509
+ }
510
+
511
+ /* Period Filter Dropdown */
512
+ .mds-period-filter {
513
+ position: relative;
514
+ display: inline-block;
515
+ }
516
+
517
+ .mds-period-filter__select {
518
+ padding: var(--mds-spacing-sm) var(--mds-spacing-md);
519
+ font-weight: var(--mds-typography-fontWeight-medium);
520
+ font-size: var(--mds-typography-fontSize-sm);
521
+ font-family: var(--mds-typography-fontFamily-brand);
522
+ border-radius: var(--mds-spacing-borderRadius-md);
523
+ cursor: pointer;
524
+ outline: none;
525
+ -webkit-appearance: none;
526
+ -moz-appearance: none;
527
+ appearance: none;
528
+ background-repeat: no-repeat;
529
+ background-size: 16px;
530
+ padding-right: 2rem;
531
+ min-width: 140px;
532
+ transition: var(--mds-effects-transition-normal);
533
+
534
+ /* Theme-specific styles are applied via CSS custom properties */
535
+ background-color: var(--mds-dashboard-control-bg);
536
+ color: var(--mds-dashboard-control-color);
537
+ border: 1px solid var(--mds-dashboard-control-border);
538
+ background-image: var(--mds-dashboard-control-dropdown-icon);
539
+ background-position: right 8px center;
540
+ box-shadow: var(--mds-dashboard-control-shadow);
541
+ }
542
+
543
+ .mds-period-filter__select:hover:not(:disabled) {
544
+ background-color: var(--mds-dashboard-control-bg-hover);
545
+ box-shadow: var(--mds-dashboard-control-shadow-hover);
546
+ }
547
+
548
+ .mds-period-filter__select:disabled {
549
+ opacity: var(--mds-effects-opacity-disabled);
550
+ cursor: not-allowed;
551
+ }
552
+
553
+ /* Dropdown Options Styling - High specificity to override compat rules */
554
+ select.mds-period-filter__select option {
555
+ background-color: var(--mds-dashboard-control-option-bg) !important;
556
+ color: var(--mds-dashboard-control-option-color) !important;
557
+ padding: var(--mds-spacing-xs) var(--mds-spacing-sm) !important;
558
+ -webkit-appearance: none !important;
559
+ }
560
+
561
+ select.mds-period-filter__select option:hover,
562
+ select.mds-period-filter__select option:focus,
563
+ select.mds-period-filter__select option:checked {
564
+ background-color: var(--mds-dashboard-control-option-bg-hover) !important;
565
+ color: var(--mds-dashboard-control-option-color-hover) !important;
566
+ }
567
+
568
+ /* Enhanced contrast for webkit-based browsers */
569
+ select.mds-period-filter__select option:focus,
570
+ select.mds-period-filter__select option:active,
571
+ select.mds-period-filter__select option[selected] {
572
+ background-color: var(--mds-dashboard-control-option-bg-hover) !important;
573
+ color: var(--mds-dashboard-control-option-color-hover) !important;
574
+ font-weight: 500 !important;
575
+ }
576
+
577
+ /* Additional styling for browsers that support it */
578
+ .mds-period-filter__select::-webkit-scrollbar {
579
+ width: 8px;
580
+ }
581
+
582
+ .mds-period-filter__select::-webkit-scrollbar-track {
583
+ background: var(--mds-dashboard-control-option-bg);
584
+ }
585
+
586
+ .mds-period-filter__select::-webkit-scrollbar-thumb {
587
+ background: var(--mds-dashboard-control-border);
588
+ border-radius: 4px;
589
+ }
590
+
591
+ .mds-period-filter__select::-webkit-scrollbar-thumb:hover {
592
+ background: var(--mds-dashboard-control-border-disabled);
593
+ }
594
+
595
+ /* =========================
596
+ Generic Dropdown/Select Component
597
+ ========================= */
598
+
599
+ /* Generic dropdown container */
600
+ .mds-dropdown {
601
+ position: relative;
602
+ display: inline-block;
603
+ }
604
+
605
+ /* Generic themed select - inherits dashboard control styling */
606
+ .mds-select-themed {
607
+ padding: var(--mds-spacing-sm) var(--mds-spacing-md) !important;
608
+ font-weight: var(--mds-typography-fontWeight-medium) !important;
609
+ font-size: var(--mds-typography-fontSize-sm) !important;
610
+ font-family: var(--mds-typography-fontFamily-brand) !important;
611
+ border-radius: var(--mds-spacing-borderRadius-md) !important;
612
+ cursor: pointer !important;
613
+ outline: none !important;
614
+ -webkit-appearance: none !important;
615
+ -moz-appearance: none !important;
616
+ appearance: none !important;
617
+ background-repeat: no-repeat !important;
618
+ background-size: 16px !important;
619
+ padding-right: 2rem !important;
620
+ transition: var(--mds-effects-transition-normal) !important;
621
+
622
+ /* Theme-specific styles are applied via CSS custom properties */
623
+ background-color: var(--mds-dashboard-control-bg) !important;
624
+ color: var(--mds-dashboard-control-color) !important;
625
+ border: 1px solid var(--mds-dashboard-control-border) !important;
626
+ background-image: var(--mds-dashboard-control-dropdown-icon) !important;
627
+ background-position: right 8px center !important;
628
+ box-shadow: var(--mds-dashboard-control-shadow) !important;
629
+ }
630
+
631
+ .mds-select-themed:hover:not(:disabled) {
632
+ background-color: var(--mds-dashboard-control-bg-hover) !important;
633
+ box-shadow: var(--mds-dashboard-control-shadow-hover) !important;
634
+ }
635
+
636
+ .mds-select-themed:disabled {
637
+ opacity: var(--mds-effects-opacity-disabled) !important;
638
+ cursor: not-allowed !important;
639
+ }
640
+
641
+ /* Dropdown Options Styling - High specificity to override compat rules */
642
+ select.mds-select-themed option {
643
+ background-color: var(--mds-dashboard-control-option-bg) !important;
644
+ color: var(--mds-dashboard-control-option-color) !important;
645
+ padding: var(--mds-spacing-xs) var(--mds-spacing-sm) !important;
646
+ -webkit-appearance: none !important;
647
+ }
648
+
649
+ select.mds-select-themed option:hover,
650
+ select.mds-select-themed option:focus,
651
+ select.mds-select-themed option:checked {
652
+ background-color: var(--mds-dashboard-control-option-bg-hover) !important;
653
+ color: var(--mds-dashboard-control-option-color-hover) !important;
654
+ }
655
+
656
+ /* Enhanced contrast for webkit-based browsers */
657
+ select.mds-select-themed option:focus,
658
+ select.mds-select-themed option:active,
659
+ select.mds-select-themed option[selected] {
660
+ background-color: var(--mds-dashboard-control-option-bg-hover) !important;
661
+ color: var(--mds-dashboard-control-option-color-hover) !important;
662
+ font-weight: 500 !important;
663
+ }
664
+
665
+ /* Maximum specificity for geo dropdowns to ensure they always work */
666
+ html .mds-dropdown select.mds-select-themed option {
667
+ background-color: var(--mds-dashboard-control-option-bg) !important;
668
+ color: var(--mds-dashboard-control-option-color) !important;
669
+ }
670
+
671
+ html .mds-dropdown select.mds-select-themed option:hover,
672
+ html .mds-dropdown select.mds-select-themed option:focus,
673
+ html .mds-dropdown select.mds-select-themed option:checked {
674
+ background-color: var(--mds-dashboard-control-option-bg-hover) !important;
675
+ color: var(--mds-dashboard-control-option-color-hover) !important;
676
+ }
677
+
678
+ /* Absolute specificity to override any browser or other CSS */
679
+ html body .mds-dropdown select.mds-select-themed option,
680
+ html body div .mds-dropdown select.mds-select-themed option {
681
+ background-color: var(--mds-dashboard-control-option-bg) !important;
682
+ color: var(--mds-dashboard-control-option-color) !important;
683
+ padding: var(--mds-spacing-xs) var(--mds-spacing-sm) !important;
684
+ font-size: var(--mds-typography-fontSize-sm) !important;
685
+ font-family: var(--mds-typography-fontFamily-brand) !important;
686
+ }
687
+
688
+ html body .mds-dropdown select.mds-select-themed option:hover,
689
+ html body .mds-dropdown select.mds-select-themed option:focus,
690
+ html body .mds-dropdown select.mds-select-themed option:checked,
691
+ html body div .mds-dropdown select.mds-select-themed option:hover,
692
+ html body div .mds-dropdown select.mds-select-themed option:focus,
693
+ html body div .mds-dropdown select.mds-select-themed option:checked {
694
+ background-color: var(--mds-dashboard-control-option-bg-hover) !important;
695
+ color: var(--mds-dashboard-control-option-color-hover) !important;
696
+ font-weight: 500 !important;
697
+ }
698
+
699
+ /* Ultimate specificity safeguard for geo dropdowns */
700
+ html body div.mds-dropdown select.mds-select-themed {
701
+ background-color: var(--mds-dashboard-control-bg) !important;
702
+ color: var(--mds-dashboard-control-color) !important;
703
+ border: 1px solid var(--mds-dashboard-control-border) !important;
704
+ background-image: var(--mds-dashboard-control-dropdown-icon) !important;
705
+ background-position: right 8px center !important;
706
+ background-repeat: no-repeat !important;
707
+ background-size: 16px !important;
708
+ padding-right: 2rem !important;
709
+ }
710
+
711
+ /* Additional styling for browsers that support it */
712
+ .mds-select-themed::-webkit-scrollbar {
713
+ width: 8px;
714
+ }
715
+
716
+ .mds-select-themed::-webkit-scrollbar-track {
717
+ background: var(--mds-dashboard-control-option-bg);
718
+ }
719
+
720
+ .mds-select-themed::-webkit-scrollbar-thumb {
721
+ background: var(--mds-dashboard-control-border);
722
+ border-radius: 4px;
723
+ }
724
+
725
+ .mds-select-themed::-webkit-scrollbar-thumb:hover {
726
+ background: var(--mds-dashboard-control-border-disabled);
727
+ }
728
+
729
+ /* Compatibility alias - maps period filter to generic themed select */
730
+ .mds-period-filter__select {
731
+ /* Copy all styles from .mds-select-themed for full compatibility */
732
+ padding: var(--mds-spacing-sm) var(--mds-spacing-md);
733
+ font-weight: var(--mds-typography-fontWeight-medium);
734
+ font-size: var(--mds-typography-fontSize-sm);
735
+ font-family: var(--mds-typography-fontFamily-brand);
736
+ border-radius: var(--mds-spacing-borderRadius-md);
737
+ cursor: pointer;
738
+ outline: none;
739
+ -webkit-appearance: none;
740
+ -moz-appearance: none;
741
+ appearance: none;
742
+ background-repeat: no-repeat;
743
+ background-size: 16px;
744
+ padding-right: 2rem;
745
+ min-width: 140px;
746
+ transition: var(--mds-effects-transition-normal);
747
+
748
+ /* Theme-specific styles are applied via CSS custom properties */
749
+ background-color: var(--mds-dashboard-control-bg);
750
+ color: var(--mds-dashboard-control-color);
751
+ border: 1px solid var(--mds-dashboard-control-border);
752
+ background-image: var(--mds-dashboard-control-dropdown-icon);
753
+ background-position: right 8px center;
754
+ box-shadow: var(--mds-dashboard-control-shadow);
755
+ }
756
+
757
+ .mds-period-filter__select:hover:not(:disabled) {
758
+ background-color: var(--mds-dashboard-control-bg-hover);
759
+ box-shadow: var(--mds-dashboard-control-shadow-hover);
760
+ }
761
+
762
+ .mds-period-filter__select:disabled {
763
+ opacity: var(--mds-effects-opacity-disabled);
764
+ cursor: not-allowed;
765
+ }
766
+
767
+ /* Dashboard Refresh Button */
768
+ .mds-dashboard-refresh {
769
+ padding: var(--mds-spacing-sm) var(--mds-spacing-md);
770
+ font-weight: var(--mds-typography-fontWeight-medium);
771
+ font-size: var(--mds-typography-fontSize-sm);
772
+ font-family: var(--mds-typography-fontFamily-brand);
773
+ border-radius: var(--mds-spacing-borderRadius-md);
774
+ cursor: pointer;
775
+ outline: none;
776
+ border: 1px solid var(--mds-dashboard-control-border);
777
+ transition: var(--mds-effects-transition-normal);
778
+ min-width: 140px;
779
+ width: 140px;
780
+
781
+ /* Theme-specific styles */
782
+ background-color: var(--mds-dashboard-control-bg);
783
+ color: var(--mds-dashboard-control-color);
784
+ box-shadow: var(--mds-dashboard-control-shadow);
785
+ }
786
+
787
+ .mds-dashboard-refresh:hover:not(:disabled) {
788
+ background-color: var(--mds-dashboard-control-bg-hover);
789
+ transform: translateY(-2px);
790
+ box-shadow: var(--mds-dashboard-control-shadow-hover);
791
+ }
792
+
793
+ .mds-dashboard-refresh:disabled {
794
+ opacity: var(--mds-effects-opacity-disabled);
795
+ cursor: not-allowed;
796
+ background-color: transparent !important;
797
+ border: 2px solid var(--mds-dashboard-control-border-disabled);
798
+ transform: none !important;
799
+ box-shadow: none !important;
800
+ }
801
+
802
+ /* Theme Support - Default (Dark Theme) */
803
+ :root {
804
+ /* Dashboard Control Variables - Dark Theme (default) */
805
+ --mds-dashboard-control-bg: rgba(0, 0, 0, 0.35);
806
+ --mds-dashboard-control-bg-hover: rgba(0, 0, 0, 0.5);
807
+ --mds-dashboard-control-color: #ffffff;
808
+ --mds-dashboard-control-border: rgba(255, 255, 255, 0.18);
809
+ --mds-dashboard-control-border-disabled: rgba(255, 255, 255, 0.3);
810
+ --mds-dashboard-control-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
811
+ --mds-dashboard-control-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.4);
812
+ --mds-dashboard-control-dropdown-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
813
+
814
+ /* Dropdown Options - Dark Theme */
815
+ --mds-dashboard-control-option-bg: #2a2a2a;
816
+ --mds-dashboard-control-option-color: #ffffff;
817
+ --mds-dashboard-control-option-bg-hover: #505050;
818
+ --mds-dashboard-control-option-color-hover: #ffffff;
819
+
820
+ /* Login specific variables - Dark Theme */
821
+ --mds-login-bg: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #2a2a2a 100%);
822
+ --mds-input-bg: rgba(255, 255, 255, 0.1);
823
+ --mds-input-focus-border: #aaaaaa;
824
+ --mds-input-focus-bg: rgba(255, 255, 255, 0.15);
825
+ --mds-input-focus-shadow: 0 4px 12px rgba(170, 170, 170, 0.2);
826
+ --mds-error-bg: rgba(200, 200, 200, 0.15);
827
+ --mds-error-border: rgba(200, 200, 200, 0.3);
828
+ }
829
+
830
+ /* Theme Toggle (square, themed) */
831
+ .mds-theme-toggle {
832
+ position: relative;
833
+ display: inline-flex;
834
+ align-items: center;
835
+ justify-content: center;
836
+ width: var(--mds-theme-toggle-size, 2.5rem);
837
+ height: var(--mds-theme-toggle-size, 2.5rem);
838
+ min-width: var(--mds-theme-toggle-size, 2.5rem);
839
+ padding: 0;
840
+ border-radius: var(--mds-spacing-borderRadius-md);
841
+ border: 1px solid var(--mds-dashboard-control-border);
842
+ background-color: var(--mds-dashboard-control-bg);
843
+ color: var(--mds-dashboard-control-color);
844
+ box-shadow: var(--mds-dashboard-control-shadow);
845
+ cursor: pointer;
846
+ outline: none;
847
+ transition: var(--mds-effects-transition-normal);
848
+ }
849
+
850
+ /* Force dark background in dark theme */
851
+ .mds-theme-toggle[data-theme="dark"] {
852
+ background-color: rgba(0, 0, 0, 0.35) !important;
853
+ border: 1px solid rgba(255, 255, 255, 0.18) !important;
854
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3) !important;
855
+ }
856
+
857
+ .mds-theme-toggle:hover:not(:disabled) {
858
+ background-color: var(--mds-dashboard-control-bg-hover);
859
+ box-shadow: var(--mds-dashboard-control-shadow-hover);
860
+ }
861
+
862
+ /* Force dark hover in dark theme */
863
+ .mds-theme-toggle[data-theme="dark"]:hover:not(:disabled) {
864
+ background-color: rgba(0, 0, 0, 0.5) !important;
865
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4) !important;
866
+ }
867
+
868
+ .mds-theme-toggle:disabled {
869
+ opacity: var(--mds-effects-opacity-disabled);
870
+ cursor: not-allowed;
871
+ background-color: transparent !important;
872
+ border: 2px solid var(--mds-dashboard-control-border-disabled);
873
+ box-shadow: none !important;
874
+ }
875
+
876
+ .mds-theme-toggle--sm { --mds-theme-toggle-size: 2rem; }
877
+ .mds-theme-toggle--md { --mds-theme-toggle-size: 2.5rem; }
878
+ .mds-theme-toggle--lg { --mds-theme-toggle-size: 3rem; }
879
+
880
+ /* Monochromatic theme toggle icons via CSS pseudo-elements */
881
+ .mds-theme-toggle[data-theme="light"]::before {
882
+ content: '';
883
+ position: absolute;
884
+ left: 50%;
885
+ top: 50%;
886
+ transform: translate(-50%, -50%);
887
+ width: 20px;
888
+ height: 20px;
889
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'%3E%3Cpath d='M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z' fill='%23000000'/%3E%3C/svg%3E");
890
+ background-size: contain;
891
+ background-repeat: no-repeat;
892
+ background-position: center;
893
+ }
894
+
895
+ .mds-theme-toggle[data-theme="dark"]::before {
896
+ content: '';
897
+ position: absolute;
898
+ left: 50%;
899
+ top: 50%;
900
+ transform: translate(-50%, -50%);
901
+ width: 20px;
902
+ height: 20px;
903
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none'%3E%3Ccircle cx='12' cy='12' r='4' fill='%23ffffff'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41' stroke='%23ffffff' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
904
+ background-size: contain;
905
+ background-repeat: no-repeat;
906
+ background-position: center;
907
+ }
908
+
909
+ /* Light Theme Support */
910
+ [data-theme="light"] {
911
+ --mds-dashboard-control-bg: rgba(0, 0, 0, 0.1);
912
+ --mds-dashboard-control-bg-hover: rgba(0, 0, 0, 0.15);
913
+ --mds-dashboard-control-color: #1a1a1a;
914
+ --mds-dashboard-control-border: rgba(0, 0, 0, 0.1);
915
+ --mds-dashboard-control-border-disabled: rgba(0, 0, 0, 0.3);
916
+ --mds-dashboard-control-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
917
+ --mds-dashboard-control-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.15);
918
+ --mds-dashboard-control-dropdown-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23374151' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
919
+
920
+ /* Dropdown Options - Light Theme */
921
+ --mds-dashboard-control-option-bg: #ffffff;
922
+ --mds-dashboard-control-option-color: #1a1a1a;
923
+ --mds-dashboard-control-option-bg-hover: #f0f7ff;
924
+ --mds-dashboard-control-option-color-hover: #1a1a1a;
925
+
926
+ /* Login specific variables - Light Theme */
927
+ --mds-login-bg: linear-gradient(135deg, #f5f5f5 0%, #e8e8e8 50%, #dcdcdc 100%);
928
+ --mds-input-bg: rgba(255, 255, 255, 0.8);
929
+ --mds-input-focus-border: #666666;
930
+ --mds-input-focus-bg: rgba(255, 255, 255, 1);
931
+ --mds-input-focus-shadow: 0 4px 12px rgba(102, 102, 102, 0.15);
932
+ --mds-error-bg: rgba(150, 150, 150, 0.1);
933
+ --mds-error-border: rgba(150, 150, 150, 0.3);
934
+ }
935
+
936
+ /* Form Input Styles */
937
+ .mds-input {
938
+ position: relative;
939
+ display: block;
940
+ width: 100%;
941
+ padding: var(--mds-spacing-md) var(--mds-spacing-md);
942
+ font-family: var(--mds-typography-fontFamily-brand);
943
+ font-size: var(--mds-typography-fontSize-base);
944
+ font-weight: var(--mds-typography-fontWeight-normal);
945
+ line-height: var(--mds-typography-lineHeight-normal);
946
+ color: var(--mds-color-text-primary);
947
+ background-color: var(--mds-color-background-primary);
948
+ border: 2px solid var(--mds-color-border-medium);
949
+ border-radius: var(--mds-spacing-borderRadius-md);
950
+ outline: none;
951
+ transition: var(--mds-effects-transition-normal);
952
+ }
953
+
954
+ .mds-input:focus {
955
+ border-color: var(--mds-color-brand-primary);
956
+ box-shadow: 0 0 0 3px rgba(0, 111, 238, 0.1);
957
+ }
958
+
959
+ .mds-input:disabled {
960
+ opacity: var(--mds-effects-opacity-disabled);
961
+ cursor: not-allowed;
962
+ background-color: var(--mds-color-background-secondary);
963
+ }
964
+
965
+ .mds-input--error {
966
+ border-color: #dc2626;
967
+ background-color: #fef2f2;
968
+ }
969
+
970
+ .mds-input--error:focus {
971
+ border-color: #dc2626;
972
+ box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.1);
973
+ }
974
+
975
+ /* Textarea specific styles */
976
+ .mds-textarea {
977
+ resize: vertical;
978
+ min-height: 80px;
979
+ }
980
+
981
+ /* Select specific styles */
982
+ .mds-select {
983
+ -webkit-appearance: none;
984
+ -moz-appearance: none;
985
+ appearance: none;
986
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%23374151' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
987
+ background-position: right var(--mds-spacing-md) center;
988
+ background-repeat: no-repeat;
989
+ background-size: 16px;
990
+ padding-right: calc(var(--mds-spacing-md) + 24px);
991
+ }
992
+
993
+ .mds-select:disabled {
994
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%239CA3AF' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3e%3c/svg%3e");
995
+ }
996
+
997
+ /* Label styles */
998
+ .mds-label {
999
+ display: block;
1000
+ font-family: var(--mds-typography-fontFamily-brand);
1001
+ font-size: var(--mds-typography-fontSize-sm);
1002
+ font-weight: var(--mds-typography-fontWeight-medium);
1003
+ color: var(--mds-color-text-primary);
1004
+ margin-bottom: var(--mds-spacing-xs);
1005
+ }
1006
+
1007
+ .mds-label--required::after {
1008
+ content: " *";
1009
+ color: #dc2626;
1010
+ }
1011
+
1012
+ /* Field group */
1013
+ .mds-field {
1014
+ margin-bottom: var(--mds-spacing-lg);
1015
+ }
1016
+
1017
+ .mds-field-error {
1018
+ display: block;
1019
+ font-family: var(--mds-typography-fontFamily-brand);
1020
+ font-size: var(--mds-typography-fontSize-sm);
1021
+ color: #dc2626;
1022
+ margin-top: var(--mds-spacing-xs);
1023
+ }
1024
+
1025
+ .mds-field-help {
1026
+ display: block;
1027
+ font-family: var(--mds-typography-fontFamily-brand);
1028
+ font-size: var(--mds-typography-fontSize-sm);
1029
+ color: var(--mds-color-text-secondary);
1030
+ margin-top: var(--mds-spacing-xs);
1031
+ }
1032
+
1033
+ /* Dashboard Layout Utilities */
1034
+ .mds-dashboard-grid {
1035
+ display: grid;
1036
+ gap: var(--mds-spacing-xl);
1037
+ }
1038
+
1039
+ .mds-dashboard-stats-grid {
1040
+ display: grid;
1041
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1042
+ gap: var(--mds-spacing-lg);
1043
+ }
1044
+
1045
+ .mds-dashboard-charts-grid {
1046
+ display: grid;
1047
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
1048
+ gap: var(--mds-spacing-lg);
1049
+ }
1050
+
1051
+ /* Dashboard Content Sections */
1052
+ .mds-dashboard-section {
1053
+ display: flex;
1054
+ flex-direction: column;
1055
+ gap: var(--mds-spacing-xl);
1056
+ }
1057
+
1058
+ /* ========================================
1059
+ Layout Utility Classes - @back optimization
1060
+ ======================================== */
1061
+
1062
+ /* Flexbox utilities */
1063
+ .mds-flex {
1064
+ display: flex;
1065
+ }
1066
+
1067
+ .mds-flex-col {
1068
+ display: flex;
1069
+ flex-direction: column;
1070
+ }
1071
+
1072
+ .mds-flex-center {
1073
+ display: flex;
1074
+ align-items: center;
1075
+ justify-content: center;
1076
+ }
1077
+
1078
+ .mds-flex-between {
1079
+ display: flex;
1080
+ align-items: center;
1081
+ justify-content: space-between;
1082
+ }
1083
+
1084
+ .mds-flex-start {
1085
+ display: flex;
1086
+ align-items: flex-start;
1087
+ justify-content: flex-start;
1088
+ }
1089
+
1090
+ .mds-flex-end {
1091
+ display: flex;
1092
+ align-items: center;
1093
+ justify-content: flex-end;
1094
+ }
1095
+
1096
+ /* Spacing utilities */
1097
+ .mds-gap-xs { gap: var(--mds-spacing-xs); }
1098
+ .mds-gap-sm { gap: var(--mds-spacing-sm); }
1099
+ .mds-gap-md { gap: var(--mds-spacing-md); }
1100
+ .mds-gap-lg { gap: var(--mds-spacing-lg); }
1101
+ .mds-gap-xl { gap: var(--mds-spacing-xl); }
1102
+
1103
+ /* Padding utilities */
1104
+ .mds-p-xs { padding: var(--mds-spacing-xs); }
1105
+ .mds-p-sm { padding: var(--mds-spacing-sm); }
1106
+ .mds-p-md { padding: var(--mds-spacing-md); }
1107
+ .mds-p-lg { padding: var(--mds-spacing-lg); }
1108
+ .mds-p-xl { padding: var(--mds-spacing-xl); }
1109
+
1110
+ /* Margin utilities */
1111
+ .mds-m-xs { margin: var(--mds-spacing-xs); }
1112
+ .mds-m-sm { margin: var(--mds-spacing-sm); }
1113
+ .mds-m-md { margin: var(--mds-spacing-md); }
1114
+ .mds-m-lg { margin: var(--mds-spacing-lg); }
1115
+ .mds-m-xl { margin: var(--mds-spacing-xl); }
1116
+
1117
+ /* Margin bottom utilities */
1118
+ .mds-mb-xs { margin-bottom: var(--mds-spacing-xs); }
1119
+ .mds-mb-sm { margin-bottom: var(--mds-spacing-sm); }
1120
+ .mds-mb-md { margin-bottom: var(--mds-spacing-md); }
1121
+ .mds-mb-lg { margin-bottom: var(--mds-spacing-lg); }
1122
+ .mds-mb-xl { margin-bottom: var(--mds-spacing-xl); }
1123
+
1124
+ /* ========================================
1125
+ Dashboard Layout Classes - @back optimization
1126
+ ======================================== */
1127
+
1128
+ /* Dashboard container */
1129
+ .mds-dashboard-container {
1130
+ display: flex;
1131
+ min-height: 100vh;
1132
+ font-family: var(--mds-typography-fontFamily-brand);
1133
+ transition: all 0.3s ease;
1134
+ background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #2a2a2a 100%);
1135
+ background-attachment: fixed;
1136
+ background-repeat: no-repeat;
1137
+ background-size: 100% 100%;
1138
+ color: #ffffff;
1139
+ }
1140
+
1141
+ /* Light theme dashboard container */
1142
+ html[data-theme="light"] .mds-dashboard-container {
1143
+ background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 50%, #cbd5e1 100%);
1144
+ color: #1a1a1a;
1145
+ }
1146
+
1147
+ /* Dashboard main content */
1148
+ .mds-dashboard-main {
1149
+ flex: 1;
1150
+ margin-left: 260px;
1151
+ margin-top: 60px;
1152
+ display: flex;
1153
+ flex-direction: column;
1154
+ min-height: calc(100vh - 60px);
1155
+ }
1156
+
1157
+ /* Page header */
1158
+ .mds-page-header {
1159
+ padding: var(--mds-spacing-lg) var(--mds-spacing-xl) var(--mds-spacing-md) var(--mds-spacing-xl);
1160
+ backdrop-filter: blur(10px);
1161
+ -webkit-backdrop-filter: blur(10px);
1162
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
1163
+ }
1164
+
1165
+ /* Dark theme page header */
1166
+ html[data-theme="dark"] .mds-page-header {
1167
+ background-color: rgba(30, 41, 59, 0.4);
1168
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1169
+ }
1170
+
1171
+ /* Light theme page header */
1172
+ html[data-theme="light"] .mds-page-header {
1173
+ background-color: rgba(255, 255, 255, 0.7);
1174
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
1175
+ }
1176
+
1177
+ /* Page title */
1178
+ .mds-page-title {
1179
+ margin: 0 0 var(--mds-spacing-xs) 0;
1180
+ font-size: var(--mds-typography-fontSize-xl);
1181
+ font-weight: var(--mds-typography-fontWeight-semibold);
1182
+ color: var(--mds-colors-color-text-primary);
1183
+ }
1184
+
1185
+ /* Page description */
1186
+ .mds-page-description {
1187
+ margin: 0;
1188
+ font-size: var(--mds-typography-fontSize-sm);
1189
+ color: var(--mds-colors-color-text-secondary);
1190
+ line-height: var(--mds-typography-lineHeight-normal);
1191
+ }
1192
+
1193
+ /* Main content area */
1194
+ .mds-main-content {
1195
+ flex: 1;
1196
+ padding: var(--mds-spacing-xl);
1197
+ overflow-y: auto;
1198
+ position: relative;
1199
+ }
1200
+
1201
+ /* ========================================
1202
+ Navbar Classes - @back optimization
1203
+ ======================================== */
1204
+
1205
+ /* Fixed navbar */
1206
+ .mds-navbar {
1207
+ position: fixed;
1208
+ top: 0;
1209
+ left: 0;
1210
+ right: 0;
1211
+ height: 60px;
1212
+ z-index: 1000;
1213
+ backdrop-filter: blur(10px);
1214
+ -webkit-backdrop-filter: blur(10px);
1215
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
1216
+ transition: all 0.3s ease;
1217
+ font-family: var(--mds-typography-fontFamily-brand);
1218
+ }
1219
+
1220
+ /* Dark theme navbar */
1221
+ html[data-theme="dark"] .mds-navbar {
1222
+ background-color: rgba(30, 41, 59, 0.95);
1223
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
1224
+ }
1225
+
1226
+ /* Light theme navbar */
1227
+ html[data-theme="light"] .mds-navbar {
1228
+ background-color: rgba(255, 255, 255, 0.95);
1229
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
1230
+ }
1231
+
1232
+ /* Navbar content container */
1233
+ .mds-navbar-content {
1234
+ display: flex;
1235
+ align-items: center;
1236
+ justify-content: space-between;
1237
+ height: 100%;
1238
+ max-width: 100%;
1239
+ }
1240
+
1241
+ /* Navbar brand section */
1242
+ .mds-navbar-brand {
1243
+ display: flex;
1244
+ align-items: center;
1245
+ gap: var(--mds-spacing-md);
1246
+ }
1247
+
1248
+ /* Navbar actions section */
1249
+ .mds-navbar-actions {
1250
+ display: flex;
1251
+ align-items: center;
1252
+ gap: var(--mds-spacing-md);
1253
+ }
1254
+
1255
+ /* User info in navbar */
1256
+ .mds-navbar-user {
1257
+ font-size: var(--mds-typography-fontSize-sm);
1258
+ color: var(--mds-colors-color-text-secondary);
1259
+ margin-right: var(--mds-spacing-sm);
1260
+ }
1261
+
1262
+ /* Sidebar-width brand section */
1263
+ .mds-navbar-brand-section {
1264
+ width: 260px;
1265
+ display: flex;
1266
+ align-items: center;
1267
+ justify-content: center;
1268
+ }
1269
+
1270
+ /* Center user info section */
1271
+ .mds-navbar-center {
1272
+ flex: 1;
1273
+ display: flex;
1274
+ justify-content: center;
1275
+ }
1276
+
1277
+ /* User info badge */
1278
+ .mds-navbar-user-badge {
1279
+ display: flex;
1280
+ align-items: center;
1281
+ gap: var(--mds-spacing-sm);
1282
+ font-size: var(--mds-typography-fontSize-sm);
1283
+ padding: var(--mds-spacing-sm) var(--mds-spacing-md);
1284
+ border-radius: 20px;
1285
+ border: 1px solid;
1286
+ font-weight: var(--mds-typography-fontWeight-medium);
1287
+ }
1288
+
1289
+ /* Dark theme user badge */
1290
+ html[data-theme="dark"] .mds-navbar-user-badge {
1291
+ color: #888;
1292
+ background-color: rgba(255, 255, 255, 0.05);
1293
+ border-color: rgba(255, 255, 255, 0.1);
1294
+ }
1295
+
1296
+ /* Light theme user badge */
1297
+ html[data-theme="light"] .mds-navbar-user-badge {
1298
+ color: #666;
1299
+ background-color: rgba(0, 0, 0, 0.03);
1300
+ border-color: rgba(0, 0, 0, 0.1);
1301
+ }
1302
+
1303
+ /* User badge elements */
1304
+ .mds-navbar-user-badge .user-name {
1305
+ font-weight: var(--mds-typography-fontWeight-medium);
1306
+ }
1307
+
1308
+ .mds-navbar-user-badge .user-separator {
1309
+ opacity: 0.7;
1310
+ }
1311
+
1312
+ .mds-navbar-user-badge .user-email {
1313
+ opacity: 0.8;
1314
+ }
1315
+
320
1316
  /* Dark mode support (future) */
321
1317
  @media (prefers-color-scheme: dark) {
322
1318
  /* Enhanced styles for dark mode when implemented */
323
- }
1319
+ }