mljr-css 1.0.14 → 1.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 (54) hide show
  1. package/dist/mljr.css +5573 -2766
  2. package/dist/mljr.min.css +2 -3
  3. package/package.json +1 -1
  4. package/src/components/alert-dialog.css +129 -0
  5. package/src/components/alert.css +41 -22
  6. package/src/components/animated-headline.css +118 -0
  7. package/src/components/audio-visualizer.css +96 -0
  8. package/src/components/autocomplete.css +143 -0
  9. package/src/components/avatar.css +66 -0
  10. package/src/components/badge.css +82 -41
  11. package/src/components/breadcrumb.css +3 -0
  12. package/src/components/button.css +80 -58
  13. package/src/components/calendar.css +169 -0
  14. package/src/components/card.css +139 -92
  15. package/src/components/chart.css +194 -0
  16. package/src/components/checkbox.css +1 -1
  17. package/src/components/chip.css +33 -18
  18. package/src/components/context-menu.css +118 -0
  19. package/src/components/cookie-banner.css +285 -0
  20. package/src/components/diff-viewer.css +199 -0
  21. package/src/components/dock.css +211 -0
  22. package/src/components/drop-zone.css +257 -0
  23. package/src/components/footer.css +51 -5
  24. package/src/components/gauge.css +63 -0
  25. package/src/components/image-compare.css +141 -0
  26. package/src/components/infinite-scroll.css +36 -0
  27. package/src/components/inview.css +118 -0
  28. package/src/components/lazy-image.css +60 -0
  29. package/src/components/legal-page.css +346 -0
  30. package/src/components/map-embed.css +92 -0
  31. package/src/components/marquee.css +112 -0
  32. package/src/components/navbar.css +357 -0
  33. package/src/components/navigation-rail.css +220 -0
  34. package/src/components/notification-center.css +306 -0
  35. package/src/components/number-input.css +134 -0
  36. package/src/components/number-ticker.css +65 -0
  37. package/src/components/pagination.css +59 -0
  38. package/src/components/pdf-viewer.css +163 -0
  39. package/src/components/pin-input.css +153 -0
  40. package/src/components/resizable.css +82 -0
  41. package/src/components/rich-text-editor.css +216 -0
  42. package/src/components/table-of-content.css +107 -0
  43. package/src/components/table.css +116 -0
  44. package/src/components/tabs.css +93 -3
  45. package/src/components/toast.css +30 -0
  46. package/src/components/tooltip.css +8 -0
  47. package/src/components/tree-view.css +270 -0
  48. package/src/components/turnstile.css +113 -0
  49. package/src/components/video-player.css +266 -0
  50. package/src/index.css +35 -1
  51. package/src/layout/footer.css +2 -2
  52. package/src/layout/navbar.css +187 -113
  53. package/src/layout/sidebar.css +27 -0
  54. package/src/themes/variables.css +146 -97
@@ -0,0 +1,220 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Navigation Rail Component
3
+ Claymorphism: Compact vertical nav with icons + labels
4
+ ============================================ */
5
+
6
+ .mljr-nav-rail {
7
+ display: flex;
8
+ flex-direction: column;
9
+ width: 72px;
10
+ min-height: 100%;
11
+ background: linear-gradient(
12
+ 180deg,
13
+ var(--mljr-bg) 0%,
14
+ var(--mljr-bg-secondary) 100%
15
+ );
16
+ box-shadow: var(--mljr-clay-shadow);
17
+ border-radius: var(--mljr-radius-xl);
18
+ border: 1px solid var(--mljr-frosted-border);
19
+ padding: var(--mljr-space-3) var(--mljr-space-2);
20
+ gap: var(--mljr-space-1);
21
+ transition: width var(--mljr-transition), all var(--mljr-transition);
22
+ overflow: hidden;
23
+ }
24
+
25
+ /* Expanded variant - shows labels next to icons */
26
+ .mljr-nav-rail-expanded {
27
+ width: 200px;
28
+ }
29
+
30
+ /* With labels below icons (default) */
31
+ .mljr-nav-rail-labeled {
32
+ width: 88px;
33
+ }
34
+
35
+ /* Nav rail header/logo area */
36
+ .mljr-nav-rail-header {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ padding: var(--mljr-space-2) var(--mljr-space-1);
41
+ margin-bottom: var(--mljr-space-2);
42
+ }
43
+
44
+ .mljr-nav-rail-expanded .mljr-nav-rail-header {
45
+ justify-content: flex-start;
46
+ padding: var(--mljr-space-2) var(--mljr-space-3);
47
+ }
48
+
49
+ /* Nav rail item */
50
+ .mljr-nav-rail-item {
51
+ display: flex;
52
+ flex-direction: column;
53
+ align-items: center;
54
+ justify-content: center;
55
+ gap: var(--mljr-space-1);
56
+ padding: var(--mljr-space-2) var(--mljr-space-1);
57
+ border-radius: var(--mljr-radius-lg);
58
+ cursor: pointer;
59
+ text-decoration: none;
60
+ color: var(--mljr-text-secondary);
61
+ background: transparent;
62
+ border: none;
63
+ width: 100%;
64
+ font-family: inherit;
65
+ transition: all var(--mljr-transition-fast);
66
+ position: relative;
67
+ white-space: nowrap;
68
+ overflow: hidden;
69
+ }
70
+
71
+ .mljr-nav-rail-item:hover {
72
+ background: linear-gradient(
73
+ 145deg,
74
+ var(--mljr-bg-secondary) 0%,
75
+ var(--mljr-bg-tertiary) 100%
76
+ );
77
+ color: var(--mljr-text);
78
+ box-shadow: var(--mljr-clay-shadow-sm);
79
+ transform: translateY(-1px);
80
+ }
81
+
82
+ .mljr-nav-rail-item-active {
83
+ background: linear-gradient(
84
+ 145deg,
85
+ var(--mljr-primary-50) 0%,
86
+ var(--mljr-primary-100) 100%
87
+ );
88
+ color: var(--mljr-primary-600);
89
+ box-shadow: var(--mljr-clay-shadow-sm);
90
+ }
91
+
92
+ .mljr-nav-rail-item-active:hover {
93
+ background: linear-gradient(
94
+ 145deg,
95
+ var(--mljr-primary-100) 0%,
96
+ var(--mljr-primary-200) 100%
97
+ );
98
+ color: var(--mljr-primary-700);
99
+ }
100
+
101
+ .dark .mljr-nav-rail-item-active {
102
+ background: linear-gradient(
103
+ 145deg,
104
+ rgba(249, 115, 22, 0.15) 0%,
105
+ rgba(249, 115, 22, 0.08) 100%
106
+ );
107
+ color: var(--mljr-primary-400);
108
+ }
109
+
110
+ /* Item icon */
111
+ .mljr-nav-rail-icon {
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ flex-shrink: 0;
116
+ width: 24px;
117
+ height: 24px;
118
+ }
119
+
120
+ /* Item label */
121
+ .mljr-nav-rail-label {
122
+ font-size: var(--mljr-text-xs);
123
+ font-weight: 500;
124
+ text-align: center;
125
+ line-height: 1;
126
+ }
127
+
128
+ /* Expanded mode - horizontal layout */
129
+ .mljr-nav-rail-expanded .mljr-nav-rail-item {
130
+ flex-direction: row;
131
+ justify-content: flex-start;
132
+ padding: var(--mljr-space-3) var(--mljr-space-3);
133
+ gap: var(--mljr-space-3);
134
+ }
135
+
136
+ .mljr-nav-rail-expanded .mljr-nav-rail-label {
137
+ font-size: var(--mljr-text-sm);
138
+ text-align: left;
139
+ }
140
+
141
+ /* Active indicator dot */
142
+ .mljr-nav-rail-item-active::before {
143
+ content: '';
144
+ position: absolute;
145
+ left: 0;
146
+ top: 50%;
147
+ transform: translateY(-50%);
148
+ width: 3px;
149
+ height: 60%;
150
+ background: var(--mljr-primary-500);
151
+ border-radius: 0 var(--mljr-radius-full) var(--mljr-radius-full) 0;
152
+ }
153
+
154
+ /* Badge support */
155
+ .mljr-nav-rail-item-badge {
156
+ position: absolute;
157
+ top: 6px;
158
+ right: 10px;
159
+ background: var(--mljr-error);
160
+ color: white;
161
+ font-size: 10px;
162
+ font-weight: 700;
163
+ min-width: 16px;
164
+ height: 16px;
165
+ border-radius: var(--mljr-radius-full);
166
+ display: flex;
167
+ align-items: center;
168
+ justify-content: center;
169
+ padding: 0 4px;
170
+ line-height: 1;
171
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
172
+ }
173
+
174
+ /* Footer area */
175
+ .mljr-nav-rail-footer {
176
+ margin-top: auto;
177
+ padding-top: var(--mljr-space-2);
178
+ border-top: 1px solid var(--mljr-border);
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: var(--mljr-space-1);
182
+ }
183
+
184
+ /* Divider */
185
+ .mljr-nav-rail-divider {
186
+ height: 1px;
187
+ background: var(--mljr-border);
188
+ margin: var(--mljr-space-2) var(--mljr-space-2);
189
+ border-radius: var(--mljr-radius-full);
190
+ }
191
+
192
+ /* Toggle button */
193
+ .mljr-nav-rail-toggle {
194
+ display: flex;
195
+ align-items: center;
196
+ justify-content: center;
197
+ width: 100%;
198
+ padding: var(--mljr-space-2);
199
+ border: none;
200
+ background: transparent;
201
+ cursor: pointer;
202
+ border-radius: var(--mljr-radius-lg);
203
+ color: var(--mljr-text-secondary);
204
+ transition: all var(--mljr-transition-fast);
205
+ font-family: inherit;
206
+ }
207
+
208
+ .mljr-nav-rail-toggle:hover {
209
+ background: var(--mljr-bg-secondary);
210
+ color: var(--mljr-text);
211
+ }
212
+
213
+ /* Dark mode */
214
+ .dark .mljr-nav-rail {
215
+ background: linear-gradient(
216
+ 180deg,
217
+ var(--mljr-bg) 0%,
218
+ var(--mljr-bg-secondary) 100%
219
+ );
220
+ }
@@ -0,0 +1,306 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Notification Center
3
+ Claymorphism: Bell icon + notification panel
4
+ ============================================ */
5
+
6
+ .mljr-notification-center {
7
+ position: relative;
8
+ display: inline-flex;
9
+ }
10
+
11
+ .mljr-notification-bell {
12
+ position: relative;
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ width: 2.5rem;
17
+ height: 2.5rem;
18
+ background: var(--mljr-bg-secondary);
19
+ border: 1.5px solid var(--mljr-border);
20
+ border-radius: var(--mljr-radius-lg);
21
+ color: var(--mljr-text);
22
+ cursor: pointer;
23
+ transition: all var(--mljr-transition-fast);
24
+ box-shadow: var(--mljr-clay-shadow-sm);
25
+ }
26
+
27
+ .mljr-notification-bell:hover {
28
+ background: var(--mljr-primary-100);
29
+ color: var(--mljr-primary-700);
30
+ border-color: var(--mljr-primary-200);
31
+ box-shadow: var(--mljr-clay-shadow);
32
+ }
33
+
34
+ .mljr-notification-bell:focus-visible {
35
+ outline: 2px solid var(--mljr-primary-500);
36
+ outline-offset: 2px;
37
+ }
38
+
39
+ .mljr-notification-badge {
40
+ position: absolute;
41
+ top: -6px;
42
+ right: -6px;
43
+ min-width: 1.125rem;
44
+ height: 1.125rem;
45
+ padding: 0 4px;
46
+ background: var(--mljr-error);
47
+ color: white;
48
+ border-radius: var(--mljr-radius-full);
49
+ font-size: 0.625rem;
50
+ font-weight: 700;
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: center;
54
+ box-shadow: 0 1px 4px rgba(239, 68, 68, 0.4);
55
+ border: 1.5px solid var(--mljr-bg);
56
+ }
57
+
58
+ /* Panel */
59
+ .mljr-notification-panel {
60
+ position: absolute;
61
+ top: calc(100% + 0.5rem);
62
+ right: 0;
63
+ z-index: var(--mljr-z-dropdown, 1000);
64
+ width: 340px;
65
+ max-width: 90vw;
66
+ background: var(--mljr-frosted-bg-strong, var(--mljr-bg));
67
+ backdrop-filter: blur(12px);
68
+ -webkit-backdrop-filter: blur(12px);
69
+ border: 1px solid var(--mljr-frosted-border, var(--mljr-border));
70
+ border-radius: var(--mljr-radius-xl);
71
+ box-shadow: var(--mljr-clay-shadow-lg);
72
+ overflow: hidden;
73
+ animation: mljr-notif-panel-in 0.15s ease-out;
74
+ }
75
+
76
+ @keyframes mljr-notif-panel-in {
77
+ from {
78
+ opacity: 0;
79
+ transform: translateY(-8px) scale(0.97);
80
+ }
81
+ to {
82
+ opacity: 1;
83
+ transform: translateY(0) scale(1);
84
+ }
85
+ }
86
+
87
+ /* Panel header */
88
+ .mljr-notification-panel-header {
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: space-between;
92
+ padding: var(--mljr-space-3) var(--mljr-space-4);
93
+ border-bottom: 1px solid var(--mljr-border);
94
+ }
95
+
96
+ .mljr-notification-panel-title {
97
+ font-size: var(--mljr-text-base);
98
+ font-weight: 700;
99
+ color: var(--mljr-text);
100
+ }
101
+
102
+ .mljr-notification-panel-actions {
103
+ display: flex;
104
+ gap: var(--mljr-space-2);
105
+ }
106
+
107
+ .mljr-notification-action-btn {
108
+ background: none;
109
+ border: none;
110
+ font-family: var(--mljr-font-sans);
111
+ font-size: var(--mljr-text-xs);
112
+ font-weight: 500;
113
+ color: var(--mljr-primary-600);
114
+ cursor: pointer;
115
+ padding: var(--mljr-space-1) var(--mljr-space-2);
116
+ border-radius: var(--mljr-radius-sm);
117
+ transition: all var(--mljr-transition-fast);
118
+ }
119
+
120
+ .mljr-notification-action-btn:hover {
121
+ background: var(--mljr-primary-50);
122
+ color: var(--mljr-primary-700);
123
+ }
124
+
125
+ /* Notification list */
126
+ .mljr-notification-list {
127
+ max-height: 380px;
128
+ overflow-y: auto;
129
+ }
130
+
131
+ .mljr-notification-list::-webkit-scrollbar {
132
+ width: 4px;
133
+ }
134
+
135
+ .mljr-notification-list::-webkit-scrollbar-track {
136
+ background: transparent;
137
+ }
138
+
139
+ .mljr-notification-list::-webkit-scrollbar-thumb {
140
+ background: var(--mljr-border-strong);
141
+ border-radius: var(--mljr-radius-full);
142
+ }
143
+
144
+ /* Notification item */
145
+ .mljr-notification-item {
146
+ display: flex;
147
+ align-items: flex-start;
148
+ gap: var(--mljr-space-3);
149
+ padding: var(--mljr-space-3) var(--mljr-space-4);
150
+ border-bottom: 1px solid var(--mljr-border);
151
+ cursor: pointer;
152
+ transition: background var(--mljr-transition-fast);
153
+ position: relative;
154
+ }
155
+
156
+ .mljr-notification-item:last-child {
157
+ border-bottom: none;
158
+ }
159
+
160
+ .mljr-notification-item:hover {
161
+ background: var(--mljr-bg-secondary);
162
+ }
163
+
164
+ .mljr-notification-item-unread {
165
+ background: rgba(249, 115, 22, 0.04);
166
+ }
167
+
168
+ .mljr-notification-item-unread::before {
169
+ content: '';
170
+ position: absolute;
171
+ left: 0.75rem;
172
+ top: 50%;
173
+ transform: translateY(-50%);
174
+ width: 6px;
175
+ height: 6px;
176
+ border-radius: var(--mljr-radius-full);
177
+ background: var(--mljr-primary-500);
178
+ }
179
+
180
+ .mljr-notification-item-unread .mljr-notification-item-body {
181
+ padding-left: 0.875rem;
182
+ }
183
+
184
+ .mljr-notification-type-icon {
185
+ flex-shrink: 0;
186
+ width: 2rem;
187
+ height: 2rem;
188
+ border-radius: var(--mljr-radius-lg);
189
+ display: flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ font-size: 0.9rem;
193
+ }
194
+
195
+ .mljr-notification-type-info .mljr-notification-type-icon {
196
+ background: rgba(59, 130, 246, 0.15);
197
+ color: var(--mljr-info, #3b82f6);
198
+ }
199
+
200
+ .mljr-notification-type-success .mljr-notification-type-icon {
201
+ background: rgba(16, 185, 129, 0.15);
202
+ color: var(--mljr-success, #10b981);
203
+ }
204
+
205
+ .mljr-notification-type-warning .mljr-notification-type-icon {
206
+ background: rgba(234, 179, 8, 0.15);
207
+ color: var(--mljr-warning, #eab308);
208
+ }
209
+
210
+ .mljr-notification-type-error .mljr-notification-type-icon {
211
+ background: rgba(239, 68, 68, 0.15);
212
+ color: var(--mljr-error, #ef4444);
213
+ }
214
+
215
+ .mljr-notification-item-body {
216
+ flex: 1;
217
+ min-width: 0;
218
+ }
219
+
220
+ .mljr-notification-item-title {
221
+ font-size: var(--mljr-text-sm);
222
+ font-weight: 600;
223
+ color: var(--mljr-text);
224
+ line-height: 1.3;
225
+ margin-bottom: 2px;
226
+ }
227
+
228
+ .mljr-notification-item-message {
229
+ font-size: var(--mljr-text-xs);
230
+ color: var(--mljr-text-muted);
231
+ line-height: 1.4;
232
+ white-space: nowrap;
233
+ overflow: hidden;
234
+ text-overflow: ellipsis;
235
+ }
236
+
237
+ .mljr-notification-item-footer {
238
+ display: flex;
239
+ align-items: center;
240
+ justify-content: space-between;
241
+ gap: var(--mljr-space-2);
242
+ margin-top: 4px;
243
+ }
244
+
245
+ .mljr-notification-item-time {
246
+ font-size: var(--mljr-text-xs);
247
+ color: var(--mljr-text-muted);
248
+ }
249
+
250
+ .mljr-notification-item-actions {
251
+ display: flex;
252
+ gap: var(--mljr-space-1);
253
+ opacity: 0;
254
+ transition: opacity var(--mljr-transition-fast);
255
+ }
256
+
257
+ .mljr-notification-item:hover .mljr-notification-item-actions {
258
+ opacity: 1;
259
+ }
260
+
261
+ .mljr-notification-item-action {
262
+ background: none;
263
+ border: none;
264
+ color: var(--mljr-text-muted);
265
+ cursor: pointer;
266
+ padding: 2px;
267
+ border-radius: var(--mljr-radius-sm);
268
+ display: flex;
269
+ font-size: var(--mljr-text-xs);
270
+ transition: color var(--mljr-transition-fast);
271
+ }
272
+
273
+ .mljr-notification-item-action:hover {
274
+ color: var(--mljr-primary-600);
275
+ }
276
+
277
+ /* Empty state */
278
+ .mljr-notification-empty {
279
+ padding: var(--mljr-space-8) var(--mljr-space-4);
280
+ text-align: center;
281
+ color: var(--mljr-text-muted);
282
+ font-size: var(--mljr-text-sm);
283
+ }
284
+
285
+ /* Dark mode */
286
+ .dark .mljr-notification-panel,
287
+ [data-theme="dark"] .mljr-notification-panel {
288
+ background: var(--mljr-bg-secondary);
289
+ border-color: var(--mljr-border);
290
+ }
291
+
292
+ .dark .mljr-notification-item-unread,
293
+ [data-theme="dark"] .mljr-notification-item-unread {
294
+ background: rgba(249, 115, 22, 0.07);
295
+ }
296
+
297
+ .dark .mljr-notification-item:hover,
298
+ [data-theme="dark"] .mljr-notification-item:hover {
299
+ background: var(--mljr-bg-tertiary);
300
+ }
301
+
302
+ .dark .mljr-notification-bell:hover,
303
+ [data-theme="dark"] .mljr-notification-bell:hover {
304
+ background: rgba(249, 115, 22, 0.15);
305
+ color: var(--mljr-primary-300);
306
+ }
@@ -0,0 +1,134 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Number Input Component
3
+ Claymorphism: Stepper numeric input
4
+ ============================================ */
5
+
6
+ .mljr-number-input {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ background: var(--mljr-bg);
10
+ border: 1.5px solid var(--mljr-border);
11
+ border-radius: var(--mljr-radius-md);
12
+ box-shadow: var(--mljr-clay-inset-sm);
13
+ overflow: hidden;
14
+ transition: border-color var(--mljr-transition-fast), box-shadow var(--mljr-transition-fast);
15
+ }
16
+
17
+ .mljr-number-input:focus-within {
18
+ border-color: var(--mljr-primary-400);
19
+ box-shadow:
20
+ var(--mljr-clay-inset-sm),
21
+ 0 0 0 3px rgba(249, 115, 22, 0.12);
22
+ }
23
+
24
+ .mljr-number-input-btn {
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ flex-shrink: 0;
29
+ width: 2.25rem;
30
+ height: 2.25rem;
31
+ background: var(--mljr-bg-secondary);
32
+ border: none;
33
+ color: var(--mljr-text);
34
+ font-size: 1.125rem;
35
+ font-weight: 600;
36
+ line-height: 1;
37
+ cursor: pointer;
38
+ transition: all var(--mljr-transition-fast);
39
+ user-select: none;
40
+ }
41
+
42
+ .mljr-number-input-btn:hover:not(:disabled) {
43
+ background: var(--mljr-primary-100);
44
+ color: var(--mljr-primary-700);
45
+ }
46
+
47
+ .mljr-number-input-btn:active:not(:disabled) {
48
+ background: var(--mljr-primary-200);
49
+ box-shadow: var(--mljr-clay-inset-sm);
50
+ }
51
+
52
+ .mljr-number-input-btn:disabled {
53
+ opacity: 0.35;
54
+ cursor: not-allowed;
55
+ }
56
+
57
+ .mljr-number-input-decrement {
58
+ border-right: 1px solid var(--mljr-border);
59
+ }
60
+
61
+ .mljr-number-input-increment {
62
+ border-left: 1px solid var(--mljr-border);
63
+ }
64
+
65
+ .mljr-number-input-field {
66
+ flex: 1;
67
+ min-width: 3rem;
68
+ padding: 0 var(--mljr-space-2);
69
+ border: none;
70
+ background: transparent;
71
+ color: var(--mljr-text);
72
+ font-family: var(--mljr-font-sans);
73
+ font-size: var(--mljr-text-sm);
74
+ font-weight: 500;
75
+ text-align: center;
76
+ outline: none;
77
+ -moz-appearance: textfield;
78
+ }
79
+
80
+ .mljr-number-input-field::-webkit-outer-spin-button,
81
+ .mljr-number-input-field::-webkit-inner-spin-button {
82
+ -webkit-appearance: none;
83
+ margin: 0;
84
+ }
85
+
86
+ /* Size variants */
87
+ .mljr-number-input-sm .mljr-number-input-btn {
88
+ width: 1.875rem;
89
+ height: 1.875rem;
90
+ font-size: 1rem;
91
+ }
92
+
93
+ .mljr-number-input-sm .mljr-number-input-field {
94
+ font-size: var(--mljr-text-xs);
95
+ min-width: 2.5rem;
96
+ }
97
+
98
+ .mljr-number-input-lg .mljr-number-input-btn {
99
+ width: 2.75rem;
100
+ height: 2.75rem;
101
+ font-size: 1.25rem;
102
+ }
103
+
104
+ .mljr-number-input-lg .mljr-number-input-field {
105
+ font-size: var(--mljr-text-base);
106
+ min-width: 3.5rem;
107
+ }
108
+
109
+ /* Disabled state */
110
+ .mljr-number-input-disabled {
111
+ opacity: 0.55;
112
+ pointer-events: none;
113
+ }
114
+
115
+ /* Readonly state */
116
+ .mljr-number-input-readonly .mljr-number-input-btn {
117
+ opacity: 0.35;
118
+ cursor: not-allowed;
119
+ pointer-events: none;
120
+ }
121
+
122
+ /* Dark mode */
123
+ .dark .mljr-number-input,
124
+ [data-theme="dark"] .mljr-number-input {
125
+ background: var(--mljr-bg);
126
+ border-color: var(--mljr-border);
127
+ box-shadow: var(--mljr-clay-inset-sm);
128
+ }
129
+
130
+ .dark .mljr-number-input-btn:hover:not(:disabled),
131
+ [data-theme="dark"] .mljr-number-input-btn:hover:not(:disabled) {
132
+ background: rgba(249, 115, 22, 0.15);
133
+ color: var(--mljr-primary-300);
134
+ }
@@ -0,0 +1,65 @@
1
+ /* ============================================
2
+ Number Ticker Component
3
+ Animated number counter for stats/dashboards
4
+ ============================================ */
5
+
6
+ .mljr-number-ticker {
7
+ display: inline-flex;
8
+ align-items: baseline;
9
+ gap: 0.125em;
10
+ font-variant-numeric: tabular-nums;
11
+ font-weight: 700;
12
+ line-height: 1;
13
+ }
14
+
15
+ .mljr-number-ticker-prefix,
16
+ .mljr-number-ticker-suffix {
17
+ font-weight: 500;
18
+ opacity: 0.75;
19
+ }
20
+
21
+ .mljr-number-ticker-value {
22
+ font-variant-numeric: tabular-nums;
23
+ }
24
+
25
+ /* Sizes */
26
+ .mljr-number-ticker-sm {
27
+ font-size: var(--mljr-text-lg);
28
+ }
29
+
30
+ .mljr-number-ticker-md {
31
+ font-size: var(--mljr-text-3xl);
32
+ }
33
+
34
+ .mljr-number-ticker-lg {
35
+ font-size: var(--mljr-text-5xl);
36
+ }
37
+
38
+ .mljr-number-ticker-xl {
39
+ font-size: var(--mljr-text-7xl);
40
+ }
41
+
42
+ /* Colors */
43
+ .mljr-number-ticker-default {
44
+ color: var(--mljr-text);
45
+ }
46
+
47
+ .mljr-number-ticker-primary {
48
+ color: var(--mljr-primary-600);
49
+ }
50
+
51
+ .mljr-number-ticker-secondary {
52
+ color: var(--mljr-secondary-600);
53
+ }
54
+
55
+ .mljr-number-ticker-success {
56
+ color: var(--mljr-success-600);
57
+ }
58
+
59
+ .mljr-number-ticker-warning {
60
+ color: var(--mljr-warning-600);
61
+ }
62
+
63
+ .mljr-number-ticker-error {
64
+ color: var(--mljr-error-600);
65
+ }