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,216 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Empty State Component
3
+ Claymorphism: Soft centered empty state display
4
+ ============================================ */
5
+
6
+ .mljr-empty-state {
7
+ display: flex;
8
+ flex-direction: column;
9
+ align-items: center;
10
+ justify-content: center;
11
+ text-align: center;
12
+ padding: var(--mljr-space-12) var(--mljr-space-6);
13
+ }
14
+
15
+ /* Sizes */
16
+ .mljr-empty-state-sm {
17
+ padding: var(--mljr-space-8) var(--mljr-space-4);
18
+ }
19
+
20
+ .mljr-empty-state-lg {
21
+ padding: var(--mljr-space-16) var(--mljr-space-8);
22
+ }
23
+
24
+ /* Icon Container */
25
+ .mljr-empty-state-icon {
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ width: 5rem;
30
+ height: 5rem;
31
+ margin-bottom: var(--mljr-space-4);
32
+ background: var(--mljr-bg-secondary);
33
+ border-radius: var(--mljr-radius-full);
34
+ box-shadow: var(--mljr-clay-shadow-sm);
35
+ color: var(--mljr-text-muted);
36
+ }
37
+
38
+ .mljr-empty-state-sm .mljr-empty-state-icon {
39
+ width: 3.5rem;
40
+ height: 3.5rem;
41
+ margin-bottom: var(--mljr-space-3);
42
+ }
43
+
44
+ .mljr-empty-state-lg .mljr-empty-state-icon {
45
+ width: 6.5rem;
46
+ height: 6.5rem;
47
+ margin-bottom: var(--mljr-space-6);
48
+ }
49
+
50
+ .mljr-empty-state-icon svg {
51
+ width: 2.5rem;
52
+ height: 2.5rem;
53
+ }
54
+
55
+ .mljr-empty-state-sm .mljr-empty-state-icon svg {
56
+ width: 1.75rem;
57
+ height: 1.75rem;
58
+ }
59
+
60
+ .mljr-empty-state-lg .mljr-empty-state-icon svg {
61
+ width: 3rem;
62
+ height: 3rem;
63
+ }
64
+
65
+ /* Illustration */
66
+ .mljr-empty-state-illustration {
67
+ width: 200px;
68
+ height: auto;
69
+ margin-bottom: var(--mljr-space-6);
70
+ }
71
+
72
+ .mljr-empty-state-sm .mljr-empty-state-illustration {
73
+ width: 120px;
74
+ }
75
+
76
+ .mljr-empty-state-lg .mljr-empty-state-illustration {
77
+ width: 280px;
78
+ }
79
+
80
+ /* Title */
81
+ .mljr-empty-state-title {
82
+ font-size: var(--mljr-text-xl);
83
+ font-weight: 600;
84
+ color: var(--mljr-text);
85
+ margin: 0 0 var(--mljr-space-2);
86
+ }
87
+
88
+ .mljr-empty-state-sm .mljr-empty-state-title {
89
+ font-size: var(--mljr-text-lg);
90
+ }
91
+
92
+ .mljr-empty-state-lg .mljr-empty-state-title {
93
+ font-size: var(--mljr-text-2xl);
94
+ }
95
+
96
+ /* Description */
97
+ .mljr-empty-state-description {
98
+ font-size: var(--mljr-text-base);
99
+ color: var(--mljr-text-secondary);
100
+ max-width: 400px;
101
+ margin: 0 0 var(--mljr-space-6);
102
+ line-height: var(--mljr-leading-relaxed);
103
+ }
104
+
105
+ .mljr-empty-state-sm .mljr-empty-state-description {
106
+ font-size: var(--mljr-text-sm);
107
+ margin-bottom: var(--mljr-space-4);
108
+ }
109
+
110
+ .mljr-empty-state-lg .mljr-empty-state-description {
111
+ font-size: var(--mljr-text-lg);
112
+ max-width: 500px;
113
+ }
114
+
115
+ /* Actions */
116
+ .mljr-empty-state-actions {
117
+ display: flex;
118
+ flex-wrap: wrap;
119
+ justify-content: center;
120
+ gap: var(--mljr-space-3);
121
+ }
122
+
123
+ /* Compact Mode */
124
+ .mljr-empty-state-compact {
125
+ flex-direction: row;
126
+ text-align: left;
127
+ padding: var(--mljr-space-6);
128
+ gap: var(--mljr-space-4);
129
+ }
130
+
131
+ .mljr-empty-state-compact .mljr-empty-state-icon {
132
+ margin-bottom: 0;
133
+ flex-shrink: 0;
134
+ }
135
+
136
+ .mljr-empty-state-compact .mljr-empty-state-content {
137
+ flex: 1;
138
+ }
139
+
140
+ .mljr-empty-state-compact .mljr-empty-state-title {
141
+ margin-bottom: var(--mljr-space-1);
142
+ }
143
+
144
+ .mljr-empty-state-compact .mljr-empty-state-description {
145
+ margin-bottom: var(--mljr-space-3);
146
+ max-width: none;
147
+ }
148
+
149
+ .mljr-empty-state-compact .mljr-empty-state-actions {
150
+ justify-content: flex-start;
151
+ }
152
+
153
+ /* Variants */
154
+ .mljr-empty-state-primary .mljr-empty-state-icon {
155
+ background: var(--mljr-primary-100);
156
+ color: var(--mljr-primary-600);
157
+ box-shadow:
158
+ 3px 3px 6px rgba(249, 115, 22, 0.15),
159
+ -2px -2px 4px rgba(255, 255, 255, 0.8);
160
+ }
161
+
162
+ .mljr-empty-state-secondary .mljr-empty-state-icon {
163
+ background: var(--mljr-secondary-100);
164
+ color: var(--mljr-secondary-600);
165
+ }
166
+
167
+ .mljr-empty-state-success .mljr-empty-state-icon {
168
+ background: rgba(16, 185, 129, 0.15);
169
+ color: var(--mljr-success);
170
+ }
171
+
172
+ .mljr-empty-state-warning .mljr-empty-state-icon {
173
+ background: rgba(245, 158, 11, 0.15);
174
+ color: var(--mljr-warning);
175
+ }
176
+
177
+ .mljr-empty-state-error .mljr-empty-state-icon {
178
+ background: rgba(239, 68, 68, 0.15);
179
+ color: var(--mljr-error);
180
+ }
181
+
182
+ /* In Card */
183
+ .mljr-empty-state-card {
184
+ background: var(--mljr-bg);
185
+ border-radius: var(--mljr-radius-xl);
186
+ box-shadow: var(--mljr-clay-shadow-sm);
187
+ }
188
+
189
+ /* Border Style */
190
+ .mljr-empty-state-bordered {
191
+ border: 2px dashed var(--mljr-border-strong);
192
+ border-radius: var(--mljr-radius-xl);
193
+ }
194
+
195
+ /* Dark Mode */
196
+ .dark .mljr-empty-state-icon,
197
+ [data-theme="dark"] .mljr-empty-state-icon {
198
+ background: var(--mljr-bg-tertiary);
199
+ box-shadow: var(--mljr-clay-shadow-sm);
200
+ }
201
+
202
+ .dark .mljr-empty-state-primary .mljr-empty-state-icon,
203
+ [data-theme="dark"] .mljr-empty-state-primary .mljr-empty-state-icon {
204
+ background: rgba(249, 115, 22, 0.2);
205
+ color: var(--mljr-primary-300);
206
+ }
207
+
208
+ .dark .mljr-empty-state-card,
209
+ [data-theme="dark"] .mljr-empty-state-card {
210
+ background: var(--mljr-bg-secondary);
211
+ }
212
+
213
+ .dark .mljr-empty-state-bordered,
214
+ [data-theme="dark"] .mljr-empty-state-bordered {
215
+ border-color: var(--mljr-border);
216
+ }
@@ -0,0 +1,262 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - File Upload Component
3
+ Claymorphism: Soft drop zone with shadows
4
+ ============================================ */
5
+
6
+ .mljr-file-upload {
7
+ position: relative;
8
+ display: block;
9
+ width: 100%;
10
+ }
11
+
12
+ .mljr-file-upload-zone {
13
+ display: flex;
14
+ flex-direction: column;
15
+ align-items: center;
16
+ justify-content: center;
17
+ gap: var(--mljr-space-3);
18
+ padding: var(--mljr-space-10);
19
+ text-align: center;
20
+ cursor: pointer;
21
+ border-radius: var(--mljr-radius-xl);
22
+ border: 2px dashed var(--mljr-border-strong);
23
+ background: var(--mljr-bg-secondary);
24
+ transition: all var(--mljr-transition-fast);
25
+ }
26
+
27
+ .mljr-file-upload-zone:hover {
28
+ border-color: var(--mljr-primary-400);
29
+ background: var(--mljr-primary-50);
30
+ transform: translateY(-2px);
31
+ box-shadow: var(--mljr-clay-shadow-sm);
32
+ }
33
+
34
+ .mljr-file-upload-zone-dragging,
35
+ .mljr-file-upload-zone[data-dragging="true"] {
36
+ border-color: var(--mljr-primary-500);
37
+ background: var(--mljr-primary-100);
38
+ box-shadow: var(--mljr-clay-shadow);
39
+ transform: scale(1.02);
40
+ }
41
+
42
+ .mljr-file-upload-zone-disabled {
43
+ opacity: 0.5;
44
+ cursor: not-allowed;
45
+ }
46
+
47
+ .mljr-file-upload-zone-disabled:hover {
48
+ border-color: var(--mljr-border-strong);
49
+ background: var(--mljr-bg-secondary);
50
+ transform: none;
51
+ box-shadow: none;
52
+ }
53
+
54
+ .mljr-file-upload-input {
55
+ position: absolute;
56
+ width: 100%;
57
+ height: 100%;
58
+ top: 0;
59
+ left: 0;
60
+ opacity: 0;
61
+ cursor: pointer;
62
+ }
63
+
64
+ .mljr-file-upload-zone-disabled .mljr-file-upload-input {
65
+ cursor: not-allowed;
66
+ }
67
+
68
+ .mljr-file-upload-icon {
69
+ width: 3rem;
70
+ height: 3rem;
71
+ color: var(--mljr-text-muted);
72
+ transition: all var(--mljr-transition-fast);
73
+ }
74
+
75
+ .mljr-file-upload-zone:hover .mljr-file-upload-icon {
76
+ color: var(--mljr-primary-500);
77
+ transform: scale(1.1);
78
+ }
79
+
80
+ .mljr-file-upload-text {
81
+ font-size: var(--mljr-text-base);
82
+ font-weight: 500;
83
+ color: var(--mljr-text);
84
+ }
85
+
86
+ .mljr-file-upload-hint {
87
+ font-size: var(--mljr-text-sm);
88
+ color: var(--mljr-text-muted);
89
+ }
90
+
91
+ .mljr-file-upload-button {
92
+ margin-top: var(--mljr-space-2);
93
+ }
94
+
95
+ /* File List */
96
+ .mljr-file-list {
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: var(--mljr-space-2);
100
+ margin-top: var(--mljr-space-4);
101
+ }
102
+
103
+ .mljr-file-item {
104
+ display: flex;
105
+ align-items: center;
106
+ gap: var(--mljr-space-3);
107
+ padding: var(--mljr-space-3) var(--mljr-space-4);
108
+ background: var(--mljr-bg);
109
+ border-radius: var(--mljr-radius-md);
110
+ box-shadow: var(--mljr-clay-shadow-sm);
111
+ transition: all var(--mljr-transition-fast);
112
+ }
113
+
114
+ .mljr-file-item:hover {
115
+ box-shadow: var(--mljr-clay-shadow);
116
+ }
117
+
118
+ .mljr-file-item-icon {
119
+ width: 2.5rem;
120
+ height: 2.5rem;
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: center;
124
+ background: var(--mljr-primary-100);
125
+ border-radius: var(--mljr-radius-md);
126
+ color: var(--mljr-primary-600);
127
+ flex-shrink: 0;
128
+ }
129
+
130
+ .mljr-file-item-info {
131
+ flex: 1;
132
+ min-width: 0;
133
+ }
134
+
135
+ .mljr-file-item-name {
136
+ font-size: var(--mljr-text-sm);
137
+ font-weight: 500;
138
+ color: var(--mljr-text);
139
+ white-space: nowrap;
140
+ overflow: hidden;
141
+ text-overflow: ellipsis;
142
+ }
143
+
144
+ .mljr-file-item-size {
145
+ font-size: var(--mljr-text-xs);
146
+ color: var(--mljr-text-muted);
147
+ }
148
+
149
+ .mljr-file-item-progress {
150
+ width: 100%;
151
+ height: 4px;
152
+ background: var(--mljr-bg-tertiary);
153
+ border-radius: var(--mljr-radius-full);
154
+ margin-top: var(--mljr-space-1);
155
+ overflow: hidden;
156
+ }
157
+
158
+ .mljr-file-item-progress-bar {
159
+ height: 100%;
160
+ background: var(--mljr-gradient-primary);
161
+ border-radius: var(--mljr-radius-full);
162
+ transition: width var(--mljr-transition-slow);
163
+ }
164
+
165
+ .mljr-file-item-remove {
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ width: 2rem;
170
+ height: 2rem;
171
+ padding: 0;
172
+ background: transparent;
173
+ border: none;
174
+ border-radius: var(--mljr-radius-sm);
175
+ color: var(--mljr-text-muted);
176
+ cursor: pointer;
177
+ transition: all var(--mljr-transition-fast);
178
+ flex-shrink: 0;
179
+ }
180
+
181
+ .mljr-file-item-remove:hover {
182
+ background: var(--mljr-error-light);
183
+ color: var(--mljr-error);
184
+ }
185
+
186
+ .mljr-file-item-error {
187
+ box-shadow:
188
+ var(--mljr-clay-shadow-sm),
189
+ inset 0 0 0 1px var(--mljr-error-light);
190
+ }
191
+
192
+ .mljr-file-item-error .mljr-file-item-icon {
193
+ background: var(--mljr-error-light);
194
+ color: var(--mljr-error);
195
+ }
196
+
197
+ .mljr-file-item-error-text {
198
+ font-size: var(--mljr-text-xs);
199
+ color: var(--mljr-error);
200
+ margin-top: var(--mljr-space-1);
201
+ }
202
+
203
+ /* Image Preview */
204
+ .mljr-file-upload-preview {
205
+ display: grid;
206
+ grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
207
+ gap: var(--mljr-space-3);
208
+ margin-top: var(--mljr-space-4);
209
+ }
210
+
211
+ .mljr-file-upload-preview-item {
212
+ position: relative;
213
+ aspect-ratio: 1;
214
+ border-radius: var(--mljr-radius-lg);
215
+ overflow: hidden;
216
+ box-shadow: var(--mljr-clay-shadow-sm);
217
+ }
218
+
219
+ .mljr-file-upload-preview-item img {
220
+ width: 100%;
221
+ height: 100%;
222
+ object-fit: cover;
223
+ }
224
+
225
+ .mljr-file-upload-preview-remove {
226
+ position: absolute;
227
+ top: var(--mljr-space-1);
228
+ right: var(--mljr-space-1);
229
+ width: 1.5rem;
230
+ height: 1.5rem;
231
+ display: flex;
232
+ align-items: center;
233
+ justify-content: center;
234
+ background: rgba(0, 0, 0, 0.5);
235
+ border: none;
236
+ border-radius: var(--mljr-radius-full);
237
+ color: white;
238
+ cursor: pointer;
239
+ transition: all var(--mljr-transition-fast);
240
+ }
241
+
242
+ .mljr-file-upload-preview-remove:hover {
243
+ background: var(--mljr-error);
244
+ }
245
+
246
+ /* Dark Mode */
247
+ .dark .mljr-file-upload-zone,
248
+ [data-theme="dark"] .mljr-file-upload-zone {
249
+ background: var(--mljr-bg-secondary);
250
+ border-color: var(--mljr-border);
251
+ }
252
+
253
+ .dark .mljr-file-upload-zone:hover,
254
+ [data-theme="dark"] .mljr-file-upload-zone:hover {
255
+ background: rgba(249, 115, 22, 0.1);
256
+ border-color: var(--mljr-primary-400);
257
+ }
258
+
259
+ .dark .mljr-file-item,
260
+ [data-theme="dark"] .mljr-file-item {
261
+ background: var(--mljr-bg-secondary);
262
+ }
@@ -0,0 +1,231 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Footer Component
3
+ Claymorphism: Soft elevated footer
4
+ ============================================ */
5
+
6
+ .mljr-footer {
7
+ background: var(--mljr-bg-secondary);
8
+ border-top: 1px solid var(--mljr-border);
9
+ box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.05);
10
+ position: relative;
11
+ }
12
+
13
+ .mljr-footer::before {
14
+ content: '';
15
+ position: absolute;
16
+ top: -8px;
17
+ left: 0;
18
+ right: 0;
19
+ height: 8px;
20
+ background: linear-gradient(to bottom, rgba(0,0,0,0.02), transparent);
21
+ pointer-events: none;
22
+ }
23
+
24
+ .mljr-footer-container {
25
+ max-width: 1200px;
26
+ margin: 0 auto;
27
+ padding: var(--mljr-space-12) var(--mljr-space-6);
28
+ }
29
+
30
+ /* Grid Layout */
31
+ .mljr-footer-grid {
32
+ display: grid;
33
+ grid-template-columns: 2fr repeat(3, 1fr);
34
+ gap: var(--mljr-space-8);
35
+ margin-bottom: var(--mljr-space-10);
36
+ }
37
+
38
+ @media (max-width: 768px) {
39
+ .mljr-footer-grid {
40
+ grid-template-columns: 1fr 1fr;
41
+ gap: var(--mljr-space-6);
42
+ }
43
+ }
44
+
45
+ @media (max-width: 480px) {
46
+ .mljr-footer-grid {
47
+ grid-template-columns: 1fr;
48
+ }
49
+ }
50
+
51
+ /* Brand Section */
52
+ .mljr-footer-brand {
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: var(--mljr-space-4);
56
+ }
57
+
58
+ .mljr-footer-logo {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: var(--mljr-space-2);
62
+ font-size: var(--mljr-text-xl);
63
+ font-weight: 700;
64
+ color: var(--mljr-text);
65
+ text-decoration: none;
66
+ }
67
+
68
+ .mljr-footer-description {
69
+ font-size: var(--mljr-text-sm);
70
+ color: var(--mljr-text-secondary);
71
+ line-height: var(--mljr-leading-relaxed);
72
+ max-width: 300px;
73
+ }
74
+
75
+ .mljr-footer-social {
76
+ display: flex;
77
+ gap: var(--mljr-space-3);
78
+ margin-top: var(--mljr-space-2);
79
+ }
80
+
81
+ .mljr-footer-social-link {
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: center;
85
+ width: 2.5rem;
86
+ height: 2.5rem;
87
+ background: var(--mljr-bg);
88
+ border-radius: var(--mljr-radius-lg);
89
+ box-shadow: var(--mljr-clay-shadow-sm);
90
+ color: var(--mljr-text-muted);
91
+ transition: all var(--mljr-transition-fast);
92
+ }
93
+
94
+ .mljr-footer-social-link:hover {
95
+ transform: translateY(-2px);
96
+ box-shadow: var(--mljr-clay-shadow);
97
+ color: var(--mljr-primary-500);
98
+ }
99
+
100
+ .mljr-footer-social-link:active {
101
+ transform: translateY(0);
102
+ box-shadow: var(--mljr-clay-btn-pressed);
103
+ }
104
+
105
+ /* Sections */
106
+ .mljr-footer-section {
107
+ display: flex;
108
+ flex-direction: column;
109
+ gap: var(--mljr-space-4);
110
+ }
111
+
112
+ .mljr-footer-title {
113
+ font-size: var(--mljr-text-sm);
114
+ font-weight: 600;
115
+ text-transform: uppercase;
116
+ letter-spacing: 0.05em;
117
+ color: var(--mljr-text);
118
+ }
119
+
120
+ .mljr-footer-links {
121
+ display: flex;
122
+ flex-direction: column;
123
+ gap: var(--mljr-space-2);
124
+ }
125
+
126
+ .mljr-footer-link {
127
+ font-size: var(--mljr-text-sm);
128
+ color: var(--mljr-text-secondary);
129
+ text-decoration: none;
130
+ transition: color var(--mljr-transition-fast);
131
+ display: inline-flex;
132
+ align-items: center;
133
+ gap: var(--mljr-space-1);
134
+ }
135
+
136
+ .mljr-footer-link:hover {
137
+ color: var(--mljr-primary-500);
138
+ }
139
+
140
+ /* Bottom Bar */
141
+ .mljr-footer-bottom {
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: space-between;
145
+ padding-top: var(--mljr-space-6);
146
+ border-top: 1px solid var(--mljr-border);
147
+ gap: var(--mljr-space-4);
148
+ }
149
+
150
+ @media (max-width: 640px) {
151
+ .mljr-footer-bottom {
152
+ flex-direction: column;
153
+ text-align: center;
154
+ }
155
+ }
156
+
157
+ .mljr-footer-copyright {
158
+ font-size: var(--mljr-text-sm);
159
+ color: var(--mljr-text-muted);
160
+ }
161
+
162
+ .mljr-footer-legal {
163
+ display: flex;
164
+ gap: var(--mljr-space-6);
165
+ }
166
+
167
+ .mljr-footer-legal-link {
168
+ font-size: var(--mljr-text-sm);
169
+ color: var(--mljr-text-muted);
170
+ text-decoration: none;
171
+ transition: color var(--mljr-transition-fast);
172
+ }
173
+
174
+ .mljr-footer-legal-link:hover {
175
+ color: var(--mljr-text-secondary);
176
+ }
177
+
178
+ /* Compact Variant */
179
+ .mljr-footer-compact .mljr-footer-container {
180
+ padding: var(--mljr-space-6);
181
+ }
182
+
183
+ .mljr-footer-compact .mljr-footer-grid {
184
+ display: none;
185
+ }
186
+
187
+ /* Simple Centered Variant */
188
+ .mljr-footer-centered .mljr-footer-container {
189
+ display: flex;
190
+ flex-direction: column;
191
+ align-items: center;
192
+ text-align: center;
193
+ }
194
+
195
+ .mljr-footer-centered .mljr-footer-grid {
196
+ grid-template-columns: 1fr;
197
+ text-align: center;
198
+ width: 100%;
199
+ }
200
+
201
+ .mljr-footer-centered .mljr-footer-brand {
202
+ align-items: center;
203
+ }
204
+
205
+ .mljr-footer-centered .mljr-footer-description {
206
+ max-width: 500px;
207
+ }
208
+
209
+ /* Dark Mode */
210
+ .dark .mljr-footer,
211
+ [data-theme="dark"] .mljr-footer {
212
+ background: var(--mljr-bg-secondary);
213
+ border-color: var(--mljr-border);
214
+ box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.2);
215
+ }
216
+
217
+ .dark .mljr-footer::before,
218
+ [data-theme="dark"] .mljr-footer::before {
219
+ background: linear-gradient(to bottom, rgba(255,255,255,0.02), transparent);
220
+ }
221
+
222
+ .dark .mljr-footer-social-link,
223
+ [data-theme="dark"] .mljr-footer-social-link {
224
+ background: var(--mljr-bg-tertiary);
225
+ box-shadow: var(--mljr-clay-shadow-sm);
226
+ }
227
+
228
+ .dark .mljr-footer-bottom,
229
+ [data-theme="dark"] .mljr-footer-bottom {
230
+ border-color: var(--mljr-border);
231
+ }