mljr-css 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +299 -0
  2. package/dist/mljr.css +12214 -0
  3. package/dist/mljr.min.css +3 -0
  4. package/dist/plugin.cjs +139 -0
  5. package/dist/plugin.d.cts +73 -0
  6. package/dist/plugin.d.ts +73 -0
  7. package/dist/plugin.js +102 -0
  8. package/package.json +60 -0
  9. package/src/base/reset.css +210 -0
  10. package/src/base/typography.css +286 -0
  11. package/src/components/accordion.css +210 -0
  12. package/src/components/alert.css +231 -0
  13. package/src/components/avatar.css +222 -0
  14. package/src/components/badge.css +315 -0
  15. package/src/components/breadcrumb.css +100 -0
  16. package/src/components/button.css +383 -0
  17. package/src/components/card.css +319 -0
  18. package/src/components/carousel.css +179 -0
  19. package/src/components/checkbox.css +303 -0
  20. package/src/components/chip.css +207 -0
  21. package/src/components/divider.css +248 -0
  22. package/src/components/drawer.css +242 -0
  23. package/src/components/dropdown.css +246 -0
  24. package/src/components/empty-state.css +216 -0
  25. package/src/components/file-upload.css +262 -0
  26. package/src/components/footer.css +231 -0
  27. package/src/components/input.css +504 -0
  28. package/src/components/modal.css +179 -0
  29. package/src/components/pagination.css +143 -0
  30. package/src/components/password.css +449 -0
  31. package/src/components/popover.css +175 -0
  32. package/src/components/progress.css +165 -0
  33. package/src/components/radio.css +200 -0
  34. package/src/components/select.css +165 -0
  35. package/src/components/sidebar.css +236 -0
  36. package/src/components/skeleton.css +161 -0
  37. package/src/components/spinner.css +259 -0
  38. package/src/components/stepper.css +257 -0
  39. package/src/components/table.css +184 -0
  40. package/src/components/tabs.css +219 -0
  41. package/src/components/textarea.css +164 -0
  42. package/src/components/toast.css +294 -0
  43. package/src/components/tooltip.css +99 -0
  44. package/src/index.css +54 -0
  45. package/src/layout/container.css +181 -0
  46. package/src/layout/footer.css +319 -0
  47. package/src/layout/header.css +223 -0
  48. package/src/layout/navbar.css +461 -0
  49. package/src/layout/navigation.css +328 -0
  50. package/src/layout/sidebar.css +334 -0
  51. package/src/plugin.ts +130 -0
  52. package/src/themes/variables.css +345 -0
  53. package/src/utilities/utilities.css +598 -0
@@ -0,0 +1,175 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Popover Component
3
+ Claymorphism: Soft frosted glass popovers
4
+ ============================================ */
5
+
6
+ .mljr-popover {
7
+ position: relative;
8
+ display: inline-block;
9
+ }
10
+
11
+ .mljr-popover-trigger {
12
+ cursor: pointer;
13
+ }
14
+
15
+ .mljr-popover-content {
16
+ position: absolute;
17
+ z-index: var(--mljr-z-popover);
18
+ min-width: 14rem;
19
+ max-width: 20rem;
20
+ padding: var(--mljr-space-4);
21
+ background: var(--mljr-frosted-bg-strong);
22
+ backdrop-filter: blur(12px);
23
+ font-family: var(--mljr-font-sans);
24
+ font-size: var(--mljr-text-sm);
25
+ visibility: hidden;
26
+ opacity: 0;
27
+ transform: translateY(-4px);
28
+ transition: all var(--mljr-transition-fast);
29
+ border-radius: var(--mljr-radius-xl);
30
+ box-shadow: var(--mljr-clay-shadow-lg);
31
+ border: 1px solid var(--mljr-frosted-border-strong);
32
+ }
33
+
34
+ /* Open state - show on explicit open class */
35
+ .mljr-popover.mljr-popover-open .mljr-popover-content {
36
+ visibility: visible;
37
+ opacity: 1;
38
+ transform: translateY(0);
39
+ }
40
+
41
+ /* Hover/focus triggers - only for non-click popovers */
42
+ .mljr-popover:not(.mljr-popover-click):hover .mljr-popover-content,
43
+ .mljr-popover:not(.mljr-popover-click):focus-within .mljr-popover-content {
44
+ visibility: visible;
45
+ opacity: 1;
46
+ transform: translateY(0);
47
+ }
48
+
49
+ /* Position variants */
50
+ .mljr-popover-top .mljr-popover-content {
51
+ bottom: 100%;
52
+ left: 50%;
53
+ transform: translateX(-50%) translateY(-8px);
54
+ margin-bottom: var(--mljr-space-2);
55
+ }
56
+
57
+ .mljr-popover-top.mljr-popover-open .mljr-popover-content,
58
+ .mljr-popover-top:not(.mljr-popover-click):hover .mljr-popover-content,
59
+ .mljr-popover-top:not(.mljr-popover-click):focus-within .mljr-popover-content {
60
+ transform: translateX(-50%) translateY(0);
61
+ }
62
+
63
+ .mljr-popover-bottom .mljr-popover-content {
64
+ top: 100%;
65
+ left: 50%;
66
+ transform: translateX(-50%) translateY(8px);
67
+ margin-top: var(--mljr-space-2);
68
+ }
69
+
70
+ .mljr-popover-bottom.mljr-popover-open .mljr-popover-content,
71
+ .mljr-popover-bottom:not(.mljr-popover-click):hover .mljr-popover-content,
72
+ .mljr-popover-bottom:not(.mljr-popover-click):focus-within .mljr-popover-content {
73
+ transform: translateX(-50%) translateY(0);
74
+ }
75
+
76
+ .mljr-popover-left .mljr-popover-content {
77
+ right: 100%;
78
+ top: 50%;
79
+ transform: translateY(-50%) translateX(-8px);
80
+ margin-right: var(--mljr-space-2);
81
+ }
82
+
83
+ .mljr-popover-left.mljr-popover-open .mljr-popover-content,
84
+ .mljr-popover-left:not(.mljr-popover-click):hover .mljr-popover-content,
85
+ .mljr-popover-left:not(.mljr-popover-click):focus-within .mljr-popover-content {
86
+ transform: translateY(-50%) translateX(0);
87
+ }
88
+
89
+ .mljr-popover-right .mljr-popover-content {
90
+ left: 100%;
91
+ top: 50%;
92
+ transform: translateY(-50%) translateX(8px);
93
+ margin-left: var(--mljr-space-2);
94
+ }
95
+
96
+ .mljr-popover-right.mljr-popover-open .mljr-popover-content,
97
+ .mljr-popover-right:not(.mljr-popover-click):hover .mljr-popover-content,
98
+ .mljr-popover-right:not(.mljr-popover-click):focus-within .mljr-popover-content {
99
+ transform: translateY(-50%) translateX(0);
100
+ }
101
+
102
+ /* Popover header */
103
+ .mljr-popover-header {
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: space-between;
107
+ gap: var(--mljr-space-2);
108
+ margin-bottom: var(--mljr-space-3);
109
+ padding-bottom: var(--mljr-space-3);
110
+ border-bottom: 1px solid var(--mljr-border);
111
+ }
112
+
113
+ .mljr-popover-title {
114
+ font-weight: 600;
115
+ font-size: var(--mljr-text-sm);
116
+ color: var(--mljr-text);
117
+ }
118
+
119
+ .mljr-popover-close {
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ width: 1.75rem;
124
+ height: 1.75rem;
125
+ padding: 0;
126
+ background: var(--mljr-bg-secondary);
127
+ border: none;
128
+ border-radius: var(--mljr-radius-full);
129
+ color: var(--mljr-text-muted);
130
+ cursor: pointer;
131
+ transition: all var(--mljr-transition-fast);
132
+ box-shadow: var(--mljr-clay-shadow-sm);
133
+ }
134
+
135
+ .mljr-popover-close:hover {
136
+ color: var(--mljr-text);
137
+ background: var(--mljr-bg-tertiary);
138
+ }
139
+
140
+ /* Popover body */
141
+ .mljr-popover-body {
142
+ color: var(--mljr-text-secondary);
143
+ line-height: var(--mljr-leading-normal);
144
+ }
145
+
146
+ /* Popover footer */
147
+ .mljr-popover-footer {
148
+ display: flex;
149
+ align-items: center;
150
+ justify-content: flex-end;
151
+ gap: var(--mljr-space-2);
152
+ margin-top: var(--mljr-space-3);
153
+ padding-top: var(--mljr-space-3);
154
+ border-top: 1px solid var(--mljr-border);
155
+ }
156
+
157
+ /* Size variants */
158
+ .mljr-popover-sm .mljr-popover-content {
159
+ min-width: 10rem;
160
+ max-width: 14rem;
161
+ padding: var(--mljr-space-3);
162
+ font-size: var(--mljr-text-xs);
163
+ }
164
+
165
+ .mljr-popover-lg .mljr-popover-content {
166
+ min-width: 20rem;
167
+ max-width: 28rem;
168
+ padding: var(--mljr-space-5);
169
+ }
170
+
171
+ /* Dark mode - shadow adjustments */
172
+ .dark .mljr-popover-content,
173
+ [data-theme="dark"] .mljr-popover-content {
174
+ box-shadow: var(--mljr-clay-shadow-lg);
175
+ }
@@ -0,0 +1,165 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Progress Component
3
+ Claymorphism: Soft rounded progress bars
4
+ ============================================ */
5
+
6
+ .mljr-progress {
7
+ position: relative;
8
+ width: 100%;
9
+ height: 0.75rem;
10
+ border-radius: var(--mljr-radius-full);
11
+ background-color: var(--mljr-bg-tertiary);
12
+ overflow: hidden;
13
+ box-shadow: var(--mljr-clay-inset-sm);
14
+ }
15
+
16
+ .mljr-progress-bar {
17
+ height: 100%;
18
+ border-radius: var(--mljr-radius-full);
19
+ background: var(--mljr-gradient-primary);
20
+ transition: width var(--mljr-transition-slow);
21
+ box-shadow:
22
+ 2px 2px 4px rgba(249, 115, 22, 0.2),
23
+ -2px -2px 4px rgba(255, 255, 255, 0.5);
24
+ }
25
+
26
+ /* Wrapper for labeled progress */
27
+ .mljr-progress-wrapper {
28
+ position: relative;
29
+ width: 100%;
30
+ }
31
+
32
+ /* Color Variants */
33
+ .mljr-progress-secondary .mljr-progress-bar {
34
+ background: var(--mljr-gradient-secondary);
35
+ box-shadow:
36
+ 2px 2px 4px rgba(20, 184, 166, 0.2),
37
+ -2px -2px 4px rgba(255, 255, 255, 0.5);
38
+ }
39
+
40
+ .mljr-progress-accent .mljr-progress-bar {
41
+ background: var(--mljr-gradient-accent);
42
+ box-shadow:
43
+ 2px 2px 4px rgba(168, 85, 247, 0.2),
44
+ -2px -2px 4px rgba(255, 255, 255, 0.5);
45
+ }
46
+
47
+ .mljr-progress-success .mljr-progress-bar {
48
+ background: linear-gradient(135deg, var(--mljr-success-light) 0%, var(--mljr-success) 100%);
49
+ box-shadow:
50
+ 2px 2px 4px rgba(16, 185, 129, 0.2),
51
+ -2px -2px 4px rgba(255, 255, 255, 0.5);
52
+ }
53
+
54
+ .mljr-progress-warning .mljr-progress-bar {
55
+ background: linear-gradient(135deg, var(--mljr-warning-light) 0%, var(--mljr-warning) 100%);
56
+ box-shadow:
57
+ 2px 2px 4px rgba(234, 179, 8, 0.2),
58
+ -2px -2px 4px rgba(255, 255, 255, 0.5);
59
+ }
60
+
61
+ .mljr-progress-error .mljr-progress-bar {
62
+ background: linear-gradient(135deg, var(--mljr-error-light) 0%, var(--mljr-error) 100%);
63
+ box-shadow:
64
+ 2px 2px 4px rgba(239, 68, 68, 0.2),
65
+ -2px -2px 4px rgba(255, 255, 255, 0.5);
66
+ }
67
+
68
+ /* Sizes */
69
+ .mljr-progress-sm {
70
+ height: 0.5rem;
71
+ }
72
+
73
+ .mljr-progress-md {
74
+ height: 0.75rem;
75
+ }
76
+
77
+ .mljr-progress-lg {
78
+ height: 1rem;
79
+ }
80
+
81
+ .mljr-progress-xl {
82
+ height: 1.5rem;
83
+ }
84
+
85
+ /* Indeterminate state */
86
+ .mljr-progress-indeterminate .mljr-progress-bar {
87
+ width: 30% !important;
88
+ animation: mljr-progress-indeterminate 1.5s ease-in-out infinite;
89
+ }
90
+
91
+ @keyframes mljr-progress-indeterminate {
92
+ 0% {
93
+ transform: translateX(-100%);
94
+ }
95
+ 100% {
96
+ transform: translateX(400%);
97
+ }
98
+ }
99
+
100
+ /* Striped animation */
101
+ .mljr-progress-striped .mljr-progress-bar {
102
+ background-image: linear-gradient(
103
+ 45deg,
104
+ rgba(255, 255, 255, 0.15) 25%,
105
+ transparent 25%,
106
+ transparent 50%,
107
+ rgba(255, 255, 255, 0.15) 50%,
108
+ rgba(255, 255, 255, 0.15) 75%,
109
+ transparent 75%,
110
+ transparent
111
+ );
112
+ background-size: 1rem 1rem;
113
+ }
114
+
115
+ .mljr-progress-striped-animated .mljr-progress-bar {
116
+ animation: mljr-progress-stripes 1s linear infinite;
117
+ }
118
+
119
+ @keyframes mljr-progress-stripes {
120
+ 0% { background-position: 1rem 0; }
121
+ 100% { background-position: 0 0; }
122
+ }
123
+
124
+ /* With label */
125
+ .mljr-progress-labeled {
126
+ display: flex;
127
+ align-items: center;
128
+ gap: var(--mljr-space-3);
129
+ }
130
+
131
+ .mljr-progress-labeled .mljr-progress-wrapper {
132
+ flex: 1;
133
+ }
134
+
135
+ .mljr-progress-label {
136
+ font-family: var(--mljr-font-sans);
137
+ font-size: var(--mljr-text-sm);
138
+ font-weight: 500;
139
+ color: var(--mljr-text-secondary);
140
+ min-width: 3rem;
141
+ text-align: right;
142
+ }
143
+
144
+ /* Dark mode */
145
+ .dark .mljr-progress,
146
+ [data-theme="dark"] .mljr-progress {
147
+ background-color: var(--mljr-bg-tertiary);
148
+ box-shadow: var(--mljr-clay-inset-sm);
149
+ }
150
+
151
+ .dark .mljr-progress .mljr-progress-bar,
152
+ [data-theme="dark"] .mljr-progress .mljr-progress-bar {
153
+ box-shadow:
154
+ 2px 2px 4px rgba(0, 0, 0, 0.3),
155
+ -2px -2px 4px rgba(68, 64, 60, 0.1),
156
+ 0 0 8px rgba(249, 115, 22, 0.2);
157
+ }
158
+
159
+ .dark .mljr-progress-secondary .mljr-progress-bar,
160
+ [data-theme="dark"] .mljr-progress-secondary .mljr-progress-bar {
161
+ box-shadow:
162
+ 2px 2px 4px rgba(0, 0, 0, 0.3),
163
+ -2px -2px 4px rgba(68, 64, 60, 0.1),
164
+ 0 0 8px rgba(20, 184, 166, 0.2);
165
+ }
@@ -0,0 +1,200 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Radio Button Component
3
+ Claymorphism: Soft rounded radio buttons
4
+ ============================================ */
5
+
6
+ .mljr-radio-group {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: var(--mljr-space-3);
10
+ }
11
+
12
+ .mljr-radio-group-horizontal {
13
+ flex-direction: row;
14
+ flex-wrap: wrap;
15
+ }
16
+
17
+ .mljr-radio {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ gap: var(--mljr-space-2);
21
+ cursor: pointer;
22
+ font-size: var(--mljr-text-sm);
23
+ color: var(--mljr-text);
24
+ user-select: none;
25
+ }
26
+
27
+ .mljr-radio-input {
28
+ position: relative;
29
+ width: 1.25rem;
30
+ height: 1.25rem;
31
+ margin: 0;
32
+ appearance: none;
33
+ background: var(--mljr-bg);
34
+ border: none;
35
+ border-radius: var(--mljr-radius-full);
36
+ box-shadow: var(--mljr-clay-inset-sm);
37
+ cursor: pointer;
38
+ transition: all var(--mljr-transition-fast);
39
+ }
40
+
41
+ .mljr-radio-input::after {
42
+ content: '';
43
+ position: absolute;
44
+ top: 50%;
45
+ left: 50%;
46
+ width: 0.5rem;
47
+ height: 0.5rem;
48
+ background: var(--mljr-primary-500);
49
+ border-radius: var(--mljr-radius-full);
50
+ transform: translate(-50%, -50%) scale(0);
51
+ transition: transform var(--mljr-transition-fast);
52
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
53
+ }
54
+
55
+ .mljr-radio-input:checked {
56
+ box-shadow: var(--mljr-clay-inset-xs);
57
+ }
58
+
59
+ .mljr-radio-input:checked::after {
60
+ transform: translate(-50%, -50%) scale(1);
61
+ }
62
+
63
+ .mljr-radio-input:hover:not(:checked):not(:disabled) {
64
+ background: var(--mljr-bg-secondary);
65
+ }
66
+
67
+ .mljr-radio-input:focus {
68
+ outline: none;
69
+ box-shadow:
70
+ var(--mljr-clay-inset-xs),
71
+ 0 0 0 3px var(--mljr-primary-200);
72
+ }
73
+
74
+ .mljr-radio-input:disabled {
75
+ opacity: 0.5;
76
+ cursor: not-allowed;
77
+ }
78
+
79
+ .mljr-radio-input:disabled + .mljr-radio-label {
80
+ opacity: 0.5;
81
+ cursor: not-allowed;
82
+ }
83
+
84
+ .mljr-radio-label {
85
+ cursor: pointer;
86
+ }
87
+
88
+ /* Secondary Color */
89
+ .mljr-radio-secondary .mljr-radio-input::after {
90
+ background: var(--mljr-secondary-500);
91
+ }
92
+
93
+ .mljr-radio-secondary .mljr-radio-input:focus {
94
+ box-shadow:
95
+ var(--mljr-clay-inset-xs),
96
+ 0 0 0 3px var(--mljr-secondary-200);
97
+ }
98
+
99
+ /* Accent Color */
100
+ .mljr-radio-accent .mljr-radio-input::after {
101
+ background: var(--mljr-accent-500);
102
+ }
103
+
104
+ .mljr-radio-accent .mljr-radio-input:focus {
105
+ box-shadow:
106
+ var(--mljr-clay-inset-xs),
107
+ 0 0 3px var(--mljr-accent-200);
108
+ }
109
+
110
+ /* Sizes */
111
+ .mljr-radio-sm .mljr-radio-input {
112
+ width: 1rem;
113
+ height: 1rem;
114
+ }
115
+
116
+ .mljr-radio-sm .mljr-radio-input::after {
117
+ width: 0.375rem;
118
+ height: 0.375rem;
119
+ }
120
+
121
+ .mljr-radio-sm {
122
+ font-size: var(--mljr-text-xs);
123
+ }
124
+
125
+ .mljr-radio-lg .mljr-radio-input {
126
+ width: 1.5rem;
127
+ height: 1.5rem;
128
+ }
129
+
130
+ .mljr-radio-lg .mljr-radio-input::after {
131
+ width: 0.625rem;
132
+ height: 0.625rem;
133
+ }
134
+
135
+ .mljr-radio-lg {
136
+ font-size: var(--mljr-text-base);
137
+ }
138
+
139
+ /* Card Style Radio */
140
+ .mljr-radio-card {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: var(--mljr-space-3);
144
+ padding: var(--mljr-space-4);
145
+ background: var(--mljr-bg);
146
+ border-radius: var(--mljr-radius-lg);
147
+ box-shadow: var(--mljr-clay-shadow-sm);
148
+ transition: all var(--mljr-transition-fast);
149
+ cursor: pointer;
150
+ }
151
+
152
+ .mljr-radio-card:hover {
153
+ transform: translateY(-2px);
154
+ box-shadow: var(--mljr-clay-shadow);
155
+ }
156
+
157
+ .mljr-radio-card:has(.mljr-radio-input:checked) {
158
+ box-shadow:
159
+ var(--mljr-clay-shadow-sm),
160
+ inset 0 0 0 2px var(--mljr-primary-300);
161
+ }
162
+
163
+ .mljr-radio-card:has(.mljr-radio-input:disabled) {
164
+ opacity: 0.5;
165
+ cursor: not-allowed;
166
+ transform: none;
167
+ }
168
+
169
+ .mljr-radio-card-content {
170
+ flex: 1;
171
+ }
172
+
173
+ .mljr-radio-card-title {
174
+ font-weight: 600;
175
+ color: var(--mljr-text);
176
+ margin-bottom: var(--mljr-space-1);
177
+ }
178
+
179
+ .mljr-radio-card-description {
180
+ font-size: var(--mljr-text-sm);
181
+ color: var(--mljr-text-secondary);
182
+ }
183
+
184
+ /* Dark Mode */
185
+ .dark .mljr-radio-input,
186
+ [data-theme="dark"] .mljr-radio-input {
187
+ background: var(--mljr-bg-secondary);
188
+ }
189
+
190
+ .dark .mljr-radio-input:focus,
191
+ [data-theme="dark"] .mljr-radio-input:focus {
192
+ box-shadow:
193
+ var(--mljr-clay-inset-xs),
194
+ 0 0 0 3px rgba(249, 115, 22, 0.2);
195
+ }
196
+
197
+ .dark .mljr-radio-card,
198
+ [data-theme="dark"] .mljr-radio-card {
199
+ background: var(--mljr-bg-secondary);
200
+ }
@@ -0,0 +1,165 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Select Component
3
+ Claymorphism: Soft rounded select inputs
4
+ Note: Container base styles are in input.css
5
+ ============================================ */
6
+
7
+ /* When using a container, the container provides the shadow */
8
+ .mljr-select-container {
9
+ position: relative;
10
+ display: block;
11
+ width: 100%;
12
+ border-radius: var(--mljr-radius-md);
13
+ box-shadow: var(--mljr-clay-inset);
14
+ background: var(--mljr-bg);
15
+ transition: all var(--mljr-transition-fast);
16
+ }
17
+
18
+ .mljr-select-container:hover {
19
+ background: var(--mljr-bg-secondary);
20
+ }
21
+
22
+ .mljr-select-container:focus-within {
23
+ box-shadow:
24
+ var(--mljr-clay-inset-sm),
25
+ 0 0 0 3px var(--mljr-primary-200);
26
+ }
27
+
28
+ .mljr-select-container .mljr-select {
29
+ background-color: transparent;
30
+ box-shadow: none;
31
+ border-radius: var(--mljr-radius-md);
32
+ }
33
+
34
+ .mljr-select-container .mljr-select:hover {
35
+ background-color: transparent;
36
+ }
37
+
38
+ .mljr-select-container .mljr-select:focus {
39
+ box-shadow: none;
40
+ background-color: transparent;
41
+ }
42
+
43
+ .mljr-select {
44
+ display: block;
45
+ width: 100%;
46
+ padding: var(--mljr-space-3) var(--mljr-space-10) var(--mljr-space-3) var(--mljr-space-4);
47
+ font-size: var(--mljr-text-sm);
48
+ line-height: var(--mljr-leading-normal);
49
+ color: var(--mljr-text);
50
+ background-color: var(--mljr-bg);
51
+ 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='%2378716c' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
52
+ background-position: right var(--mljr-space-3) center;
53
+ background-repeat: no-repeat;
54
+ background-size: 1.5em 1.5em;
55
+ border: none;
56
+ border-radius: var(--mljr-radius-md);
57
+ appearance: none;
58
+ cursor: pointer;
59
+ box-shadow: var(--mljr-clay-inset);
60
+ transition: box-shadow var(--mljr-transition-fast), background-color var(--mljr-transition-fast);
61
+ }
62
+
63
+ .mljr-select:hover {
64
+ background-color: var(--mljr-bg-secondary);
65
+ }
66
+
67
+ .mljr-select:focus {
68
+ outline: none;
69
+ background-color: var(--mljr-bg);
70
+ box-shadow:
71
+ var(--mljr-clay-inset-sm),
72
+ 0 0 0 3px var(--mljr-primary-200);
73
+ }
74
+
75
+ .mljr-select:disabled {
76
+ background-color: var(--mljr-bg-tertiary);
77
+ opacity: 0.6;
78
+ cursor: not-allowed;
79
+ }
80
+
81
+ /* Select Sizes */
82
+ .mljr-select-sm {
83
+ padding: var(--mljr-space-2) var(--mljr-space-8) var(--mljr-space-2) var(--mljr-space-3);
84
+ font-size: var(--mljr-text-xs);
85
+ border-radius: var(--mljr-radius-sm);
86
+ }
87
+
88
+ .mljr-select-lg {
89
+ padding: var(--mljr-space-4) var(--mljr-space-12) var(--mljr-space-4) var(--mljr-space-5);
90
+ font-size: var(--mljr-text-base);
91
+ border-radius: var(--mljr-radius-lg);
92
+ }
93
+
94
+ /* Select States */
95
+ .mljr-select-error {
96
+ box-shadow:
97
+ var(--mljr-clay-inset),
98
+ inset 0 0 0 2px var(--mljr-error-light);
99
+ }
100
+
101
+ .mljr-select-error:focus {
102
+ box-shadow:
103
+ var(--mljr-clay-inset-sm),
104
+ 0 0 0 3px rgba(239, 68, 68, 0.2);
105
+ }
106
+
107
+ .mljr-select-success {
108
+ box-shadow:
109
+ var(--mljr-clay-inset),
110
+ inset 0 0 0 2px var(--mljr-success-light);
111
+ }
112
+
113
+ .mljr-select-success:focus {
114
+ box-shadow:
115
+ var(--mljr-clay-inset-sm),
116
+ 0 0 0 3px rgba(16, 185, 129, 0.2);
117
+ }
118
+
119
+ /* Multi Select (native) */
120
+ .mljr-select[multiple] {
121
+ padding: var(--mljr-space-2);
122
+ background-image: none;
123
+ height: auto;
124
+ }
125
+
126
+ .mljr-select[multiple] option {
127
+ padding: var(--mljr-space-2) var(--mljr-space-3);
128
+ border-radius: var(--mljr-radius-sm);
129
+ }
130
+
131
+ /* Option styling (limited browser support) */
132
+ .mljr-select option {
133
+ padding: var(--mljr-space-2) var(--mljr-space-3);
134
+ background-color: var(--mljr-bg);
135
+ color: var(--mljr-text);
136
+ font-family: var(--mljr-font-sans);
137
+ }
138
+
139
+ .mljr-select option:hover,
140
+ .mljr-select option:focus,
141
+ .mljr-select option:checked {
142
+ background: var(--mljr-gradient-primary);
143
+ color: white;
144
+ }
145
+
146
+ .mljr-select optgroup {
147
+ font-weight: 600;
148
+ font-family: var(--mljr-font-sans);
149
+ color: var(--mljr-text-muted);
150
+ background-color: var(--mljr-bg-secondary);
151
+ }
152
+
153
+ /* Dark mode adjustment for select arrow */
154
+ .dark .mljr-select,
155
+ [data-theme="dark"] .mljr-select {
156
+ background-color: var(--mljr-bg-secondary);
157
+ 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='%23a8a29e' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
158
+ }
159
+
160
+ .dark .mljr-select:focus,
161
+ [data-theme="dark"] .mljr-select:focus {
162
+ box-shadow:
163
+ var(--mljr-clay-inset-sm),
164
+ 0 0 0 3px rgba(249, 115, 22, 0.2);
165
+ }