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,504 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Input Component
3
+ Claymorphism: Soft, pressed-in fields
4
+ ============================================ */
5
+
6
+ /* Shared input container base */
7
+ .mljr-input-container,
8
+ .mljr-textarea-container,
9
+ .mljr-select-container,
10
+ .mljr-search,
11
+ .mljr-number-input {
12
+ position: relative;
13
+ display: block;
14
+ width: 100%;
15
+ }
16
+
17
+ /* Shared input/textarea base styles */
18
+ .mljr-input,
19
+ .mljr-textarea {
20
+ display: block;
21
+ width: 100%;
22
+ padding: var(--mljr-space-3) var(--mljr-space-4);
23
+ font-size: var(--mljr-text-sm);
24
+ line-height: var(--mljr-leading-normal);
25
+ color: var(--mljr-text);
26
+ background-color: var(--mljr-bg);
27
+ border: none;
28
+ border-radius: var(--mljr-radius-md);
29
+ box-shadow: var(--mljr-clay-inset);
30
+ transition: box-shadow var(--mljr-transition-fast), background-color var(--mljr-transition-fast);
31
+ }
32
+
33
+ .mljr-input::placeholder,
34
+ .mljr-textarea::placeholder {
35
+ color: var(--mljr-text-muted);
36
+ }
37
+
38
+ .mljr-input:hover,
39
+ .mljr-textarea:hover {
40
+ background-color: var(--mljr-bg-secondary);
41
+ }
42
+
43
+ .mljr-input:focus,
44
+ .mljr-textarea:focus {
45
+ outline: none;
46
+ background-color: var(--mljr-bg);
47
+ box-shadow:
48
+ var(--mljr-clay-inset-sm),
49
+ 0 0 0 3px var(--mljr-primary-200);
50
+ }
51
+
52
+ .mljr-input:disabled,
53
+ .mljr-textarea:disabled {
54
+ background-color: var(--mljr-bg-tertiary);
55
+ opacity: 0.6;
56
+ cursor: not-allowed;
57
+ }
58
+
59
+ .mljr-input:read-only {
60
+ background-color: var(--mljr-bg-secondary);
61
+ }
62
+
63
+ .mljr-textarea {
64
+ min-height: 80px;
65
+ resize: vertical;
66
+ }
67
+
68
+ /* Input Sizes */
69
+ .mljr-input-sm {
70
+ padding: var(--mljr-space-2) var(--mljr-space-3);
71
+ font-size: var(--mljr-text-xs);
72
+ border-radius: var(--mljr-radius-sm);
73
+ }
74
+
75
+ .mljr-input-lg {
76
+ padding: var(--mljr-space-4) var(--mljr-space-5);
77
+ font-size: var(--mljr-text-base);
78
+ border-radius: var(--mljr-radius-lg);
79
+ }
80
+
81
+ /* Input States - error */
82
+ .mljr-input-error,
83
+ .mljr-input-container-error .mljr-input {
84
+ box-shadow:
85
+ var(--mljr-clay-inset),
86
+ inset 0 0 0 2px var(--mljr-error-light);
87
+ }
88
+
89
+ .mljr-input-error:focus,
90
+ .mljr-input-container-error .mljr-input:focus {
91
+ box-shadow:
92
+ var(--mljr-clay-inset-sm),
93
+ 0 0 0 3px rgba(239, 68, 68, 0.2);
94
+ }
95
+
96
+ /* Input States - success */
97
+ .mljr-input-success,
98
+ .mljr-input-container-success .mljr-input {
99
+ box-shadow:
100
+ var(--mljr-clay-inset),
101
+ inset 0 0 0 2px var(--mljr-success-light);
102
+ }
103
+
104
+ .mljr-input-success:focus,
105
+ .mljr-input-container-success .mljr-input:focus {
106
+ box-shadow:
107
+ var(--mljr-clay-inset-sm),
108
+ 0 0 0 3px rgba(16, 185, 129, 0.2);
109
+ }
110
+
111
+ /* Input with Icon */
112
+ .mljr-input-wrapper {
113
+ position: relative;
114
+ display: flex;
115
+ align-items: center;
116
+ }
117
+
118
+ .mljr-input-icon-left {
119
+ position: absolute;
120
+ left: var(--mljr-space-4);
121
+ pointer-events: none;
122
+ color: var(--mljr-text-muted);
123
+ z-index: 1;
124
+ }
125
+
126
+ .mljr-input-icon-right {
127
+ position: absolute;
128
+ right: var(--mljr-space-4);
129
+ pointer-events: none;
130
+ color: var(--mljr-text-muted);
131
+ z-index: 1;
132
+ }
133
+
134
+ .mljr-input-wrapper .mljr-input-icon-left + .mljr-input {
135
+ padding-left: var(--mljr-space-10);
136
+ }
137
+
138
+ .mljr-input-wrapper .mljr-input:has(+ .mljr-input-icon-right),
139
+ .mljr-input--icon-right {
140
+ padding-right: var(--mljr-space-10);
141
+ }
142
+
143
+ /* Form Group */
144
+ .mljr-form-group {
145
+ margin-bottom: var(--mljr-space-4);
146
+ }
147
+
148
+ /* Label */
149
+ .mljr-label {
150
+ display: block;
151
+ margin-bottom: var(--mljr-space-2);
152
+ font-size: var(--mljr-text-sm);
153
+ font-weight: 500;
154
+ color: var(--mljr-text);
155
+ }
156
+
157
+ .mljr-label-required::after {
158
+ content: " *";
159
+ color: var(--mljr-error);
160
+ }
161
+
162
+ /* Helper Text */
163
+ .mljr-input-helper {
164
+ margin-top: var(--mljr-space-1);
165
+ font-size: var(--mljr-text-xs);
166
+ color: var(--mljr-text-muted);
167
+ }
168
+
169
+ .mljr-input-error-text {
170
+ margin-top: var(--mljr-space-1);
171
+ font-size: var(--mljr-text-xs);
172
+ color: var(--mljr-error);
173
+ }
174
+
175
+ /* ============================================
176
+ Range Slider - Soft rounded style
177
+ ============================================ */
178
+
179
+ .mljr-range {
180
+ -webkit-appearance: none;
181
+ appearance: none;
182
+ width: 100%;
183
+ height: 8px;
184
+ background: var(--mljr-bg-tertiary);
185
+ border-radius: var(--mljr-radius-full);
186
+ outline: none;
187
+ cursor: pointer;
188
+ box-shadow: var(--mljr-clay-inset-sm);
189
+ }
190
+
191
+ .mljr-range::-webkit-slider-thumb {
192
+ -webkit-appearance: none;
193
+ appearance: none;
194
+ width: 1.5rem;
195
+ height: 1.5rem;
196
+ background: var(--mljr-gradient-primary);
197
+ border-radius: var(--mljr-radius-full);
198
+ cursor: pointer;
199
+ border: none;
200
+ box-shadow: var(--mljr-clay-shadow-sm);
201
+ transition: all var(--mljr-transition-fast);
202
+ }
203
+
204
+ .mljr-range::-moz-range-thumb {
205
+ width: 1.5rem;
206
+ height: 1.5rem;
207
+ background: var(--mljr-gradient-primary);
208
+ border-radius: var(--mljr-radius-full);
209
+ cursor: pointer;
210
+ border: none;
211
+ box-shadow: var(--mljr-clay-shadow-sm);
212
+ transition: all var(--mljr-transition-fast);
213
+ }
214
+
215
+ .mljr-range::-webkit-slider-thumb:hover {
216
+ transform: scale(1.1);
217
+ box-shadow: var(--mljr-clay-shadow);
218
+ }
219
+
220
+ .mljr-range::-moz-range-thumb:hover {
221
+ transform: scale(1.1);
222
+ box-shadow: var(--mljr-clay-shadow);
223
+ }
224
+
225
+ .mljr-range:focus::-webkit-slider-thumb {
226
+ box-shadow: var(--mljr-clay-shadow), 0 0 0 4px var(--mljr-primary-200);
227
+ }
228
+
229
+ .mljr-range:focus::-moz-range-thumb {
230
+ box-shadow: var(--mljr-clay-shadow), 0 0 0 4px var(--mljr-primary-200);
231
+ }
232
+
233
+ /* Range with progress fill */
234
+ .mljr-range-filled {
235
+ background: linear-gradient(to right, var(--mljr-primary-400) 0%, var(--mljr-primary-400) var(--mljr-range-value, 50%), var(--mljr-bg-tertiary) var(--mljr-range-value, 50%));
236
+ }
237
+
238
+ /* Secondary range */
239
+ .mljr-range-secondary::-webkit-slider-thumb {
240
+ background: var(--mljr-gradient-secondary);
241
+ }
242
+
243
+ .mljr-range-secondary::-moz-range-thumb {
244
+ background: var(--mljr-gradient-secondary);
245
+ }
246
+
247
+ /* ============================================
248
+ Number Input with Spinner
249
+ ============================================ */
250
+
251
+ .mljr-number-input {
252
+ display: flex;
253
+ align-items: stretch;
254
+ border-radius: var(--mljr-radius-md);
255
+ overflow: hidden;
256
+ box-shadow: var(--mljr-clay-shadow-sm);
257
+ }
258
+
259
+ .mljr-number-input .mljr-input {
260
+ text-align: center;
261
+ box-shadow: none;
262
+ border-radius: 0;
263
+ -moz-appearance: textfield;
264
+ }
265
+
266
+ .mljr-number-input .mljr-input::-webkit-inner-spin-button,
267
+ .mljr-number-input .mljr-input::-webkit-outer-spin-button {
268
+ -webkit-appearance: none;
269
+ margin: 0;
270
+ }
271
+
272
+ .mljr-number-btn {
273
+ display: flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ width: 2.5rem;
277
+ background: var(--mljr-bg-secondary);
278
+ border: none;
279
+ cursor: pointer;
280
+ color: var(--mljr-text);
281
+ transition: all var(--mljr-transition-fast);
282
+ }
283
+
284
+ .mljr-number-btn:hover {
285
+ background: var(--mljr-primary-100);
286
+ color: var(--mljr-primary-600);
287
+ }
288
+
289
+ .mljr-number-btn:active {
290
+ background: var(--mljr-primary-200);
291
+ }
292
+
293
+ .mljr-number-btn-decrement {
294
+ border-radius: var(--mljr-radius-md) 0 0 var(--mljr-radius-md);
295
+ }
296
+
297
+ .mljr-number-btn-increment {
298
+ border-radius: 0 var(--mljr-radius-md) var(--mljr-radius-md) 0;
299
+ }
300
+
301
+ /* ============================================
302
+ Search Input
303
+ ============================================ */
304
+
305
+ .mljr-search {
306
+ box-shadow: var(--mljr-clay-inset);
307
+ border-radius: var(--mljr-radius-full);
308
+ background: var(--mljr-bg);
309
+ }
310
+
311
+ .mljr-search:focus-within {
312
+ box-shadow:
313
+ var(--mljr-clay-inset-sm),
314
+ 0 0 0 3px var(--mljr-primary-200);
315
+ }
316
+
317
+ .mljr-search-input {
318
+ width: 100%;
319
+ padding: var(--mljr-space-3) var(--mljr-space-12);
320
+ background: transparent;
321
+ border: none;
322
+ border-radius: var(--mljr-radius-full);
323
+ }
324
+
325
+ .mljr-search-input:focus {
326
+ outline: none;
327
+ }
328
+
329
+ .mljr-search-icon {
330
+ position: absolute;
331
+ left: var(--mljr-space-4);
332
+ top: 50%;
333
+ transform: translateY(-50%);
334
+ color: var(--mljr-text-muted);
335
+ z-index: 2;
336
+ pointer-events: none;
337
+ }
338
+
339
+ .mljr-search-clear {
340
+ position: absolute;
341
+ right: var(--mljr-space-3);
342
+ top: 50%;
343
+ transform: translateY(-50%);
344
+ width: 1.75rem;
345
+ height: 1.75rem;
346
+ display: flex;
347
+ align-items: center;
348
+ justify-content: center;
349
+ background: var(--mljr-bg-secondary);
350
+ border: none;
351
+ border-radius: var(--mljr-radius-full);
352
+ color: var(--mljr-text-muted);
353
+ cursor: pointer;
354
+ z-index: 2;
355
+ transition: all var(--mljr-transition-fast);
356
+ }
357
+
358
+ .mljr-search-clear:hover {
359
+ background: var(--mljr-bg-tertiary);
360
+ color: var(--mljr-text);
361
+ }
362
+
363
+ /* ============================================
364
+ Color Picker
365
+ ============================================ */
366
+
367
+ .mljr-color-picker {
368
+ display: flex;
369
+ align-items: center;
370
+ gap: var(--mljr-space-3);
371
+ }
372
+
373
+ .mljr-color-input {
374
+ -webkit-appearance: none;
375
+ appearance: none;
376
+ width: 3rem;
377
+ height: 3rem;
378
+ padding: 0;
379
+ background: transparent;
380
+ border: none;
381
+ cursor: pointer;
382
+ border-radius: var(--mljr-radius-md);
383
+ box-shadow: var(--mljr-clay-shadow-sm);
384
+ }
385
+
386
+ .mljr-color-input::-webkit-color-swatch-wrapper {
387
+ padding: 0;
388
+ }
389
+
390
+ .mljr-color-input::-webkit-color-swatch {
391
+ border: none;
392
+ border-radius: var(--mljr-radius-md);
393
+ }
394
+
395
+ .mljr-color-input::-moz-color-swatch {
396
+ border: none;
397
+ border-radius: var(--mljr-radius-md);
398
+ }
399
+
400
+ .mljr-color-preview {
401
+ width: 3rem;
402
+ height: 3rem;
403
+ border-radius: var(--mljr-radius-md);
404
+ background: var(--mljr-color-value, var(--mljr-primary-500));
405
+ box-shadow: var(--mljr-clay-shadow-sm);
406
+ }
407
+
408
+ /* ============================================
409
+ File Input
410
+ ============================================ */
411
+
412
+ .mljr-file-input {
413
+ position: relative;
414
+ display: inline-flex;
415
+ cursor: pointer;
416
+ }
417
+
418
+ .mljr-file-input input[type="file"] {
419
+ position: absolute;
420
+ width: 100%;
421
+ height: 100%;
422
+ opacity: 0;
423
+ cursor: pointer;
424
+ }
425
+
426
+ .mljr-file-input-label {
427
+ display: inline-flex;
428
+ align-items: center;
429
+ gap: var(--mljr-space-2);
430
+ padding: var(--mljr-space-3) var(--mljr-space-5);
431
+ font-size: var(--mljr-text-sm);
432
+ font-weight: 500;
433
+ color: var(--mljr-text);
434
+ background: var(--mljr-bg);
435
+ border-radius: var(--mljr-radius-lg);
436
+ box-shadow: var(--mljr-clay-btn);
437
+ transition: all var(--mljr-transition-fast);
438
+ }
439
+
440
+ .mljr-file-input:hover .mljr-file-input-label {
441
+ transform: translateY(-2px);
442
+ box-shadow: var(--mljr-clay-shadow);
443
+ }
444
+
445
+ .mljr-file-input:active .mljr-file-input-label {
446
+ transform: translateY(0);
447
+ box-shadow: var(--mljr-clay-btn-pressed);
448
+ }
449
+
450
+ /* Drop zone */
451
+ .mljr-drop-zone {
452
+ display: flex;
453
+ flex-direction: column;
454
+ align-items: center;
455
+ justify-content: center;
456
+ gap: var(--mljr-space-3);
457
+ padding: var(--mljr-space-10);
458
+ text-align: center;
459
+ cursor: pointer;
460
+ border-radius: var(--mljr-radius-xl);
461
+ border: 2px dashed var(--mljr-border-strong);
462
+ background: var(--mljr-bg-secondary);
463
+ transition: all var(--mljr-transition-fast);
464
+ }
465
+
466
+ .mljr-drop-zone:hover,
467
+ .mljr-drop-zone.dragging {
468
+ border-color: var(--mljr-primary-400);
469
+ background: var(--mljr-primary-50);
470
+ }
471
+
472
+ .mljr-drop-zone-icon {
473
+ width: 3rem;
474
+ height: 3rem;
475
+ color: var(--mljr-text-muted);
476
+ }
477
+
478
+ .mljr-drop-zone-text {
479
+ font-size: var(--mljr-text-sm);
480
+ color: var(--mljr-text-secondary);
481
+ }
482
+
483
+ .mljr-drop-zone-hint {
484
+ font-size: var(--mljr-text-xs);
485
+ color: var(--mljr-text-muted);
486
+ }
487
+
488
+ /* Dark mode */
489
+ .dark .mljr-input,
490
+ .dark .mljr-textarea,
491
+ [data-theme="dark"] .mljr-input,
492
+ [data-theme="dark"] .mljr-textarea {
493
+ background-color: var(--mljr-bg-secondary);
494
+ box-shadow: var(--mljr-clay-inset);
495
+ }
496
+
497
+ .dark .mljr-input:focus,
498
+ .dark .mljr-textarea:focus,
499
+ [data-theme="dark"] .mljr-input:focus,
500
+ [data-theme="dark"] .mljr-textarea:focus {
501
+ box-shadow:
502
+ var(--mljr-clay-inset-sm),
503
+ 0 0 0 3px rgba(249, 115, 22, 0.2);
504
+ }
@@ -0,0 +1,179 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Modal Component
3
+ Claymorphism: Frosted glass modals
4
+ ============================================ */
5
+
6
+ /* Modal Backdrop */
7
+ .mljr-modal-backdrop {
8
+ position: fixed;
9
+ inset: 0;
10
+ z-index: var(--mljr-z-modal-backdrop);
11
+ background: rgba(0, 0, 0, 0.4);
12
+ backdrop-filter: blur(4px);
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ padding: var(--mljr-space-4);
17
+ }
18
+
19
+ .mljr-modal-backdrop[data-state="open"] { animation: mljr-fade-in var(--mljr-transition); }
20
+ .mljr-modal-backdrop[data-state="closed"] { animation: mljr-fade-out var(--mljr-transition); }
21
+
22
+ /* Modal Container */
23
+ .mljr-modal {
24
+ position: relative;
25
+ z-index: var(--mljr-z-modal);
26
+ width: 100%;
27
+ max-width: 32rem;
28
+ max-height: calc(100vh - var(--mljr-space-8));
29
+ background-color: rgba(255, 255, 255, 0.85);
30
+ backdrop-filter: blur(20px);
31
+ border-radius: var(--mljr-radius-2xl);
32
+ box-shadow: var(--mljr-clay-shadow-xl);
33
+ border: 1px solid rgba(255, 255, 255, 0.6);
34
+ display: flex;
35
+ flex-direction: column;
36
+ overflow: hidden;
37
+ }
38
+
39
+ .mljr-modal[data-state="open"] { animation: mljr-scale-in var(--mljr-transition); }
40
+ .mljr-modal[data-state="closed"] { animation: mljr-scale-out var(--mljr-transition); }
41
+
42
+ /* Modal Sizes */
43
+ .mljr-modal-sm { max-width: 24rem; }
44
+ .mljr-modal-lg { max-width: 48rem; }
45
+ .mljr-modal-xl { max-width: 64rem; }
46
+ .mljr-modal-full {
47
+ max-width: calc(100vw - var(--mljr-space-8));
48
+ max-height: calc(100vh - var(--mljr-space-8));
49
+ }
50
+
51
+ /* Modal Header */
52
+ .mljr-modal-header {
53
+ display: flex;
54
+ align-items: flex-start;
55
+ justify-content: space-between;
56
+ gap: var(--mljr-space-4);
57
+ padding: var(--mljr-space-6);
58
+ border-bottom: 1px solid var(--mljr-border);
59
+ }
60
+
61
+ .mljr-modal-title {
62
+ font-family: var(--mljr-font-display);
63
+ font-size: var(--mljr-text-xl);
64
+ font-weight: 600;
65
+ color: var(--mljr-text);
66
+ }
67
+
68
+ .mljr-modal-description {
69
+ margin-top: var(--mljr-space-1);
70
+ font-size: var(--mljr-text-sm);
71
+ color: var(--mljr-text-secondary);
72
+ }
73
+
74
+ .mljr-modal-close {
75
+ flex-shrink: 0;
76
+ display: flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ width: 2.5rem;
80
+ height: 2.5rem;
81
+ padding: 0;
82
+ background: var(--mljr-bg-secondary);
83
+ border: none;
84
+ border-radius: var(--mljr-radius-full);
85
+ color: var(--mljr-text-muted);
86
+ cursor: pointer;
87
+ transition: all var(--mljr-transition-fast);
88
+ box-shadow: var(--mljr-clay-shadow-sm);
89
+ }
90
+
91
+ .mljr-modal-close:hover {
92
+ background-color: var(--mljr-bg-tertiary);
93
+ color: var(--mljr-text);
94
+ transform: scale(1.05);
95
+ }
96
+
97
+ .mljr-modal-close:active {
98
+ box-shadow: var(--mljr-clay-inset-sm);
99
+ transform: scale(1);
100
+ }
101
+
102
+ .mljr-modal-close:focus-visible {
103
+ outline: 3px solid var(--mljr-primary-300);
104
+ outline-offset: 2px;
105
+ }
106
+
107
+ /* Modal Body */
108
+ .mljr-modal-body {
109
+ flex: 1;
110
+ padding: var(--mljr-space-6);
111
+ overflow-y: auto;
112
+ }
113
+
114
+ /* Modal Footer */
115
+ .mljr-modal-footer {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: flex-end;
119
+ gap: var(--mljr-space-3);
120
+ padding: var(--mljr-space-4) var(--mljr-space-6);
121
+ border-top: 1px solid var(--mljr-border);
122
+ background-color: rgba(255, 251, 247, 0.5);
123
+ }
124
+
125
+ .mljr-modal-footer-between { justify-content: space-between; }
126
+
127
+ /* Animations */
128
+ @keyframes mljr-fade-in { from { opacity: 0; } to { opacity: 1; } }
129
+ @keyframes mljr-fade-out { from { opacity: 1; } to { opacity: 0; } }
130
+ @keyframes mljr-scale-in { from { opacity: 0; transform: scale(0.95) translateY(10px); } to { opacity: 1; transform: scale(1) translateY(0); } }
131
+ @keyframes mljr-scale-out { from { opacity: 1; transform: scale(1) translateY(0); } to { opacity: 0; transform: scale(0.95) translateY(10px); } }
132
+
133
+ /* Drawer variant */
134
+ .mljr-modal-drawer {
135
+ position: fixed;
136
+ top: 0;
137
+ right: 0;
138
+ bottom: 0;
139
+ max-width: 24rem;
140
+ max-height: 100vh;
141
+ border-radius: var(--mljr-radius-2xl) 0 0 var(--mljr-radius-2xl);
142
+ border-left: 1px solid var(--mljr-border);
143
+ }
144
+
145
+ .mljr-modal-drawer[data-state="open"] { animation: mljr-slide-in-right var(--mljr-transition); }
146
+ .mljr-modal-drawer[data-state="closed"] { animation: mljr-slide-out-right var(--mljr-transition); }
147
+
148
+ .mljr-modal-drawer-left {
149
+ right: auto;
150
+ left: 0;
151
+ border-radius: 0 var(--mljr-radius-2xl) var(--mljr-radius-2xl) 0;
152
+ border-left: none;
153
+ border-right: 1px solid var(--mljr-border);
154
+ }
155
+
156
+ .mljr-modal-drawer-left[data-state="open"] { animation: mljr-slide-in-left var(--mljr-transition); }
157
+ .mljr-modal-drawer-left[data-state="closed"] { animation: mljr-slide-out-left var(--mljr-transition); }
158
+
159
+ @keyframes mljr-slide-in-right { from { transform: translateX(100%); } to { transform: translateX(0); } }
160
+ @keyframes mljr-slide-out-right { from { transform: translateX(0); } to { transform: translateX(100%); } }
161
+ @keyframes mljr-slide-in-left { from { transform: translateX(-100%); } to { transform: translateX(0); } }
162
+ @keyframes mljr-slide-out-left { from { transform: translateX(0); } to { transform: translateX(-100%); } }
163
+
164
+ /* Dark mode */
165
+ .dark .mljr-modal,
166
+ [data-theme="dark"] .mljr-modal {
167
+ background-color: rgba(41, 37, 36, 0.9);
168
+ border-color: rgba(68, 64, 60, 0.5);
169
+ }
170
+
171
+ .dark .mljr-modal-footer,
172
+ [data-theme="dark"] .mljr-modal-footer {
173
+ background-color: rgba(28, 25, 23, 0.5);
174
+ }
175
+
176
+ .dark .mljr-modal-close,
177
+ [data-theme="dark"] .mljr-modal-close {
178
+ background: var(--mljr-bg-tertiary);
179
+ }