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,222 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Avatar Component
3
+ Claymorphism: Soft square default shape
4
+ ============================================ */
5
+
6
+ .mljr-avatar {
7
+ position: relative;
8
+ display: inline-flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ width: 3rem;
12
+ height: 3rem;
13
+ /* Soft square: rounded corners (30% radius) */
14
+ border-radius: 30%;
15
+ background-color: var(--mljr-bg-secondary);
16
+ font-family: var(--mljr-font-sans);
17
+ font-weight: 500;
18
+ font-size: var(--mljr-text-sm);
19
+ color: var(--mljr-primary-600);
20
+ overflow: hidden;
21
+ flex-shrink: 0;
22
+ box-shadow: var(--mljr-clay-shadow-sm);
23
+ border: 2px solid rgba(255, 255, 255, 0.6);
24
+ }
25
+
26
+ .mljr-avatar img {
27
+ width: 100%;
28
+ height: 100%;
29
+ object-fit: cover;
30
+ }
31
+
32
+ .mljr-avatar-initials {
33
+ text-transform: uppercase;
34
+ user-select: none;
35
+ }
36
+
37
+ /* Sizes */
38
+ .mljr-avatar-xs {
39
+ width: 1.75rem;
40
+ height: 1.75rem;
41
+ font-size: var(--mljr-text-xs);
42
+ }
43
+
44
+ .mljr-avatar-sm {
45
+ width: 2.25rem;
46
+ height: 2.25rem;
47
+ font-size: var(--mljr-text-xs);
48
+ }
49
+
50
+ .mljr-avatar-md {
51
+ width: 3rem;
52
+ height: 3rem;
53
+ font-size: var(--mljr-text-sm);
54
+ }
55
+
56
+ .mljr-avatar-lg {
57
+ width: 4rem;
58
+ height: 4rem;
59
+ font-size: var(--mljr-text-lg);
60
+ }
61
+
62
+ .mljr-avatar-xl {
63
+ width: 5.5rem;
64
+ height: 5.5rem;
65
+ font-size: var(--mljr-text-xl);
66
+ }
67
+
68
+ .mljr-avatar-2xl {
69
+ width: 7rem;
70
+ height: 7rem;
71
+ font-size: var(--mljr-text-2xl);
72
+ }
73
+
74
+ /* Status indicator - soft pulsing dot */
75
+ .mljr-avatar-status {
76
+ position: absolute;
77
+ bottom: 0;
78
+ right: 0;
79
+ width: 0.75rem;
80
+ height: 0.75rem;
81
+ border-radius: var(--mljr-radius-full);
82
+ border: 2px solid var(--mljr-bg);
83
+ z-index: 1;
84
+ }
85
+
86
+ .mljr-avatar-status-online {
87
+ background-color: var(--mljr-success);
88
+ animation: mljr-avatar-status-pulse 2s ease-in-out infinite;
89
+ }
90
+
91
+ .mljr-avatar-status-offline {
92
+ background-color: var(--mljr-gray-400);
93
+ }
94
+
95
+ .mljr-avatar-status-busy {
96
+ background-color: var(--mljr-error);
97
+ }
98
+
99
+ .mljr-avatar-status-away {
100
+ background-color: var(--mljr-warning);
101
+ }
102
+
103
+ /* mljr-status-pulse animation - distinct from utilities.css version */
104
+ @keyframes mljr-avatar-status-pulse {
105
+ 0%, 100% {
106
+ opacity: 1;
107
+ box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4);
108
+ }
109
+ 50% {
110
+ opacity: 0.85;
111
+ box-shadow: 0 0 0 4px rgba(16, 185, 129, 0);
112
+ }
113
+ }
114
+
115
+ /* Size adjustments for status */
116
+ .mljr-avatar-xs .mljr-avatar-status {
117
+ width: 0.5rem;
118
+ height: 0.5rem;
119
+ border-width: 1.5px;
120
+ }
121
+
122
+ .mljr-avatar-sm .mljr-avatar-status {
123
+ width: 0.625rem;
124
+ height: 0.625rem;
125
+ }
126
+
127
+ .mljr-avatar-lg .mljr-avatar-status,
128
+ .mljr-avatar-xl .mljr-avatar-status,
129
+ .mljr-avatar-2xl .mljr-avatar-status {
130
+ width: 1rem;
131
+ height: 1rem;
132
+ border-width: 3px;
133
+ }
134
+
135
+ /* Ring styles - soft glow effect */
136
+ .mljr-avatar-ring {
137
+ box-shadow:
138
+ var(--mljr-clay-shadow-sm),
139
+ 0 0 0 3px var(--mljr-bg),
140
+ 0 0 0 5px var(--mljr-primary-300);
141
+ }
142
+
143
+ .mljr-avatar-ring-secondary {
144
+ box-shadow:
145
+ var(--mljr-clay-shadow-sm),
146
+ 0 0 0 3px var(--mljr-bg),
147
+ 0 0 0 5px var(--mljr-secondary-300);
148
+ }
149
+
150
+ .mljr-avatar-ring-accent {
151
+ box-shadow:
152
+ var(--mljr-clay-shadow-sm),
153
+ 0 0 0 3px var(--mljr-bg),
154
+ 0 0 0 5px var(--mljr-accent-300);
155
+ }
156
+
157
+ /* Avatar group */
158
+ .mljr-avatar-group {
159
+ display: flex;
160
+ flex-direction: row-reverse;
161
+ }
162
+
163
+ .mljr-avatar-group .mljr-avatar {
164
+ margin-left: -0.75rem;
165
+ box-shadow: var(--mljr-clay-shadow-sm), -2px 0 4px rgba(0, 0, 0, 0.1);
166
+ }
167
+
168
+ .mljr-avatar-group .mljr-avatar:last-child {
169
+ margin-left: 0;
170
+ }
171
+
172
+ /* Placeholder icon */
173
+ .mljr-avatar-placeholder {
174
+ display: flex;
175
+ align-items: center;
176
+ justify-content: center;
177
+ }
178
+
179
+ .mljr-avatar-placeholder svg {
180
+ width: 50%;
181
+ height: 50%;
182
+ color: var(--mljr-primary-400);
183
+ }
184
+
185
+ /* Color variants */
186
+ .mljr-avatar-primary {
187
+ background: var(--mljr-primary-100);
188
+ color: var(--mljr-primary-600);
189
+ }
190
+
191
+ .mljr-avatar-secondary {
192
+ background: var(--mljr-secondary-100);
193
+ color: var(--mljr-secondary-600);
194
+ }
195
+
196
+ .mljr-avatar-accent {
197
+ background: var(--mljr-accent-100);
198
+ color: var(--mljr-accent-600);
199
+ }
200
+
201
+ /* Square variant (soft square is now default) */
202
+ .mljr-avatar-square {
203
+ border-radius: 30%;
204
+ }
205
+
206
+ /* Circle variant */
207
+ .mljr-avatar-circle {
208
+ border-radius: 50%;
209
+ }
210
+
211
+ /* Dark mode */
212
+ .dark .mljr-avatar,
213
+ [data-theme="dark"] .mljr-avatar {
214
+ background-color: var(--mljr-bg-tertiary);
215
+ border-color: rgba(68, 64, 60, 0.5);
216
+ box-shadow: var(--mljr-clay-shadow-sm);
217
+ }
218
+
219
+ .dark .mljr-avatar-status,
220
+ [data-theme="dark"] .mljr-avatar-status {
221
+ border-color: var(--mljr-bg);
222
+ }
@@ -0,0 +1,315 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Badge Component
3
+ Claymorphism: Soft pill shapes with shadows
4
+ ============================================ */
5
+
6
+ .mljr-badge {
7
+ display: inline-flex;
8
+ align-items: center;
9
+ gap: var(--mljr-space-1);
10
+ padding: var(--mljr-space-1) var(--mljr-space-3);
11
+ font-size: var(--mljr-text-xs);
12
+ font-weight: 500;
13
+ line-height: var(--mljr-leading-normal);
14
+ border-radius: var(--mljr-radius-full);
15
+ white-space: nowrap;
16
+ box-shadow: var(--mljr-clay-shadow-sm);
17
+ transition: all var(--mljr-transition-fast);
18
+ }
19
+
20
+ /* Default Badge */
21
+ .mljr-badge-default {
22
+ background-color: var(--mljr-bg-secondary);
23
+ color: var(--mljr-text);
24
+ }
25
+
26
+ /* Primary Badge (Orange) */
27
+ .mljr-badge-primary {
28
+ background-color: var(--mljr-primary-100);
29
+ color: var(--mljr-primary-700);
30
+ box-shadow:
31
+ 3px 3px 6px rgba(249, 115, 22, 0.15),
32
+ -2px -2px 5px rgba(255, 255, 255, 0.8);
33
+ }
34
+
35
+ .dark .mljr-badge-primary,
36
+ [data-theme="dark"] .mljr-badge-primary {
37
+ background-color: rgba(249, 115, 22, 0.2);
38
+ color: var(--mljr-primary-300);
39
+ box-shadow:
40
+ 3px 3px 6px rgba(0, 0, 0, 0.25),
41
+ -2px -2px 5px rgba(68, 64, 60, 0.1),
42
+ 0 0 8px rgba(249, 115, 22, 0.12);
43
+ }
44
+
45
+ /* Secondary Badge (Teal) */
46
+ .mljr-badge-secondary {
47
+ background-color: var(--mljr-secondary-100);
48
+ color: var(--mljr-secondary-700);
49
+ box-shadow:
50
+ 3px 3px 6px rgba(20, 184, 166, 0.15),
51
+ -2px -2px 5px rgba(255, 255, 255, 0.8);
52
+ }
53
+
54
+ .dark .mljr-badge-secondary,
55
+ [data-theme="dark"] .mljr-badge-secondary {
56
+ background-color: rgba(20, 184, 166, 0.2);
57
+ color: var(--mljr-secondary-300);
58
+ box-shadow:
59
+ 3px 3px 6px rgba(0, 0, 0, 0.25),
60
+ -2px -2px 5px rgba(68, 64, 60, 0.1),
61
+ 0 0 8px rgba(20, 184, 166, 0.12);
62
+ }
63
+
64
+ /* Success Badge */
65
+ .mljr-badge-success {
66
+ background-color: rgba(16, 185, 129, 0.15);
67
+ color: var(--mljr-success-dark);
68
+ box-shadow:
69
+ 3px 3px 6px rgba(16, 185, 129, 0.12),
70
+ -2px -2px 5px rgba(255, 255, 255, 0.8);
71
+ }
72
+
73
+ .dark .mljr-badge-success,
74
+ [data-theme="dark"] .mljr-badge-success {
75
+ background-color: rgba(16, 185, 129, 0.2);
76
+ color: var(--mljr-success-light);
77
+ box-shadow:
78
+ 3px 3px 6px rgba(0, 0, 0, 0.25),
79
+ -2px -2px 5px rgba(68, 64, 60, 0.1),
80
+ 0 0 8px rgba(16, 185, 129, 0.12);
81
+ }
82
+
83
+ /* Warning Badge */
84
+ .mljr-badge-warning {
85
+ background-color: rgba(234, 179, 8, 0.15);
86
+ color: var(--mljr-warning-dark);
87
+ box-shadow:
88
+ 3px 3px 6px rgba(234, 179, 8, 0.12),
89
+ -2px -2px 5px rgba(255, 255, 255, 0.8);
90
+ }
91
+
92
+ .dark .mljr-badge-warning,
93
+ [data-theme="dark"] .mljr-badge-warning {
94
+ background-color: rgba(234, 179, 8, 0.2);
95
+ color: var(--mljr-warning-light);
96
+ box-shadow:
97
+ 3px 3px 6px rgba(0, 0, 0, 0.25),
98
+ -2px -2px 5px rgba(68, 64, 60, 0.1),
99
+ 0 0 8px rgba(234, 179, 8, 0.12);
100
+ }
101
+
102
+ /* Error Badge */
103
+ .mljr-badge-error {
104
+ background-color: rgba(239, 68, 68, 0.15);
105
+ color: var(--mljr-error-dark);
106
+ box-shadow:
107
+ 3px 3px 6px rgba(239, 68, 68, 0.12),
108
+ -2px -2px 5px rgba(255, 255, 255, 0.8);
109
+ }
110
+
111
+ .dark .mljr-badge-error,
112
+ [data-theme="dark"] .mljr-badge-error {
113
+ background-color: rgba(239, 68, 68, 0.2);
114
+ color: var(--mljr-error-light);
115
+ box-shadow:
116
+ 3px 3px 6px rgba(0, 0, 0, 0.25),
117
+ -2px -2px 5px rgba(68, 64, 60, 0.1),
118
+ 0 0 8px rgba(239, 68, 68, 0.12);
119
+ }
120
+
121
+ /* Info Badge */
122
+ .mljr-badge-info {
123
+ background-color: rgba(59, 130, 246, 0.15);
124
+ color: var(--mljr-info-dark);
125
+ box-shadow:
126
+ 3px 3px 6px rgba(59, 130, 246, 0.12),
127
+ -2px -2px 5px rgba(255, 255, 255, 0.8);
128
+ }
129
+
130
+ .dark .mljr-badge-info,
131
+ [data-theme="dark"] .mljr-badge-info {
132
+ background-color: rgba(59, 130, 246, 0.2);
133
+ color: var(--mljr-info-light);
134
+ box-shadow:
135
+ 3px 3px 6px rgba(0, 0, 0, 0.25),
136
+ -2px -2px 5px rgba(68, 64, 60, 0.1),
137
+ 0 0 8px rgba(59, 130, 246, 0.12);
138
+ }
139
+
140
+ /* Solid Variants */
141
+ .mljr-badge-primary-solid {
142
+ background: var(--mljr-gradient-primary);
143
+ color: white;
144
+ box-shadow:
145
+ 3px 3px 6px rgba(249, 115, 22, 0.25),
146
+ -3px -3px 6px rgba(255, 255, 255, 0.8);
147
+ }
148
+
149
+ .mljr-badge-secondary-solid {
150
+ background: var(--mljr-gradient-secondary);
151
+ color: white;
152
+ box-shadow:
153
+ 3px 3px 6px rgba(20, 184, 166, 0.25),
154
+ -3px -3px 6px rgba(255, 255, 255, 0.8);
155
+ }
156
+
157
+ .mljr-badge-success-solid {
158
+ background: linear-gradient(135deg, var(--mljr-success-light) 0%, var(--mljr-success) 100%);
159
+ color: white;
160
+ box-shadow:
161
+ 3px 3px 6px rgba(16, 185, 129, 0.25),
162
+ -3px -3px 6px rgba(255, 255, 255, 0.8);
163
+ }
164
+
165
+ .mljr-badge-warning-solid {
166
+ background: linear-gradient(135deg, var(--mljr-warning-light) 0%, var(--mljr-warning) 100%);
167
+ color: var(--mljr-gray-900);
168
+ box-shadow:
169
+ 3px 3px 6px rgba(234, 179, 8, 0.25),
170
+ -3px -3px 6px rgba(255, 255, 255, 0.8);
171
+ }
172
+
173
+ .mljr-badge-error-solid {
174
+ background: linear-gradient(135deg, var(--mljr-error-light) 0%, var(--mljr-error) 100%);
175
+ color: white;
176
+ box-shadow:
177
+ 3px 3px 6px rgba(239, 68, 68, 0.25),
178
+ -3px -3px 6px rgba(255, 255, 255, 0.8);
179
+ }
180
+
181
+ .mljr-badge-info-solid {
182
+ background: linear-gradient(135deg, var(--mljr-info-light) 0%, var(--mljr-info) 100%);
183
+ color: white;
184
+ box-shadow:
185
+ 3px 3px 6px rgba(59, 130, 246, 0.25),
186
+ -3px -3px 6px rgba(255, 255, 255, 0.8);
187
+ }
188
+
189
+ /* Dark mode for solid badges */
190
+ .dark .mljr-badge-primary-solid,
191
+ [data-theme="dark"] .mljr-badge-primary-solid {
192
+ box-shadow:
193
+ 3px 3px 6px rgba(0, 0, 0, 0.35),
194
+ -3px -3px 6px rgba(68, 64, 60, 0.1),
195
+ 0 0 10px rgba(249, 115, 22, 0.2);
196
+ }
197
+
198
+ .dark .mljr-badge-secondary-solid,
199
+ [data-theme="dark"] .mljr-badge-secondary-solid {
200
+ box-shadow:
201
+ 3px 3px 6px rgba(0, 0, 0, 0.35),
202
+ -3px -3px 6px rgba(68, 64, 60, 0.1),
203
+ 0 0 10px rgba(20, 184, 166, 0.2);
204
+ }
205
+
206
+ .dark .mljr-badge-success-solid,
207
+ [data-theme="dark"] .mljr-badge-success-solid {
208
+ box-shadow:
209
+ 3px 3px 6px rgba(0, 0, 0, 0.35),
210
+ -3px -3px 6px rgba(68, 64, 60, 0.1),
211
+ 0 0 10px rgba(16, 185, 129, 0.2);
212
+ }
213
+
214
+ .dark .mljr-badge-warning-solid,
215
+ [data-theme="dark"] .mljr-badge-warning-solid {
216
+ box-shadow:
217
+ 3px 3px 6px rgba(0, 0, 0, 0.35),
218
+ -3px -3px 6px rgba(68, 64, 60, 0.1),
219
+ 0 0 10px rgba(234, 179, 8, 0.2);
220
+ }
221
+
222
+ .dark .mljr-badge-error-solid,
223
+ [data-theme="dark"] .mljr-badge-error-solid {
224
+ box-shadow:
225
+ 3px 3px 6px rgba(0, 0, 0, 0.35),
226
+ -3px -3px 6px rgba(68, 64, 60, 0.1),
227
+ 0 0 10px rgba(239, 68, 68, 0.2);
228
+ }
229
+
230
+ .dark .mljr-badge-info-solid,
231
+ [data-theme="dark"] .mljr-badge-info-solid {
232
+ box-shadow:
233
+ 3px 3px 6px rgba(0, 0, 0, 0.35),
234
+ -3px -3px 6px rgba(68, 64, 60, 0.1),
235
+ 0 0 10px rgba(59, 130, 246, 0.2);
236
+ }
237
+
238
+ /* Outline Variants */
239
+ .mljr-badge-outline {
240
+ background-color: transparent;
241
+ color: var(--mljr-text);
242
+ border: 1.5px solid var(--mljr-border-strong);
243
+ box-shadow: var(--mljr-clay-shadow-sm);
244
+ }
245
+
246
+ .mljr-badge-outline-primary {
247
+ background-color: transparent;
248
+ color: var(--mljr-primary-600);
249
+ border: 1.5px solid var(--mljr-primary-300);
250
+ box-shadow: var(--mljr-clay-shadow-sm);
251
+ }
252
+
253
+ .mljr-badge-outline-secondary {
254
+ background-color: transparent;
255
+ color: var(--mljr-secondary-600);
256
+ border: 1.5px solid var(--mljr-secondary-300);
257
+ box-shadow: var(--mljr-clay-shadow-sm);
258
+ }
259
+
260
+ /* Badge Sizes */
261
+ .mljr-badge-sm {
262
+ padding: 0 var(--mljr-space-2);
263
+ font-size: 0.625rem;
264
+ }
265
+
266
+ .mljr-badge-lg {
267
+ padding: var(--mljr-space-1) var(--mljr-space-4);
268
+ font-size: var(--mljr-text-sm);
269
+ }
270
+
271
+ /* Badge with Dot */
272
+ .mljr-badge-dot {
273
+ padding-left: var(--mljr-space-2);
274
+ }
275
+
276
+ .mljr-badge-dot::before {
277
+ content: "";
278
+ width: 0.5rem;
279
+ height: 0.5rem;
280
+ border-radius: var(--mljr-radius-full);
281
+ background-color: currentColor;
282
+ box-shadow: 0 0 4px currentColor;
283
+ }
284
+
285
+ /* Removable Badge */
286
+ .mljr-badge-removable {
287
+ padding-right: var(--mljr-space-1);
288
+ }
289
+
290
+ .mljr-badge-remove {
291
+ display: inline-flex;
292
+ align-items: center;
293
+ justify-content: center;
294
+ width: 1rem;
295
+ height: 1rem;
296
+ padding: 0;
297
+ margin-left: var(--mljr-space-1);
298
+ background: none;
299
+ border: none;
300
+ border-radius: var(--mljr-radius-full);
301
+ opacity: 0.7;
302
+ cursor: pointer;
303
+ transition: opacity var(--mljr-transition-fast), background-color var(--mljr-transition-fast);
304
+ }
305
+
306
+ .mljr-badge-remove:hover {
307
+ opacity: 1;
308
+ background-color: rgba(0, 0, 0, 0.1);
309
+ }
310
+
311
+ /* Dark mode */
312
+ .dark .mljr-badge,
313
+ [data-theme="dark"] .mljr-badge {
314
+ box-shadow: var(--mljr-clay-shadow-sm);
315
+ }
@@ -0,0 +1,100 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Breadcrumb Component
3
+ Claymorphism: Soft rounded navigation
4
+ ============================================ */
5
+
6
+ .mljr-breadcrumb {
7
+ display: flex;
8
+ align-items: center;
9
+ flex-wrap: wrap;
10
+ gap: var(--mljr-space-1);
11
+ font-size: var(--mljr-text-sm);
12
+ font-family: var(--mljr-font-sans);
13
+ }
14
+
15
+ .mljr-breadcrumb-item {
16
+ display: inline-flex;
17
+ align-items: center;
18
+ gap: var(--mljr-space-1);
19
+ color: var(--mljr-text-muted);
20
+ }
21
+
22
+ .mljr-breadcrumb-link {
23
+ color: var(--mljr-text-secondary);
24
+ text-decoration: none;
25
+ padding: var(--mljr-space-1) var(--mljr-space-3);
26
+ border-radius: var(--mljr-radius-sm);
27
+ transition: all var(--mljr-transition-fast);
28
+ }
29
+
30
+ .mljr-breadcrumb-link:hover {
31
+ color: var(--mljr-primary-600);
32
+ background: var(--mljr-bg-secondary);
33
+ box-shadow: var(--mljr-clay-shadow-sm);
34
+ transform: translateY(-1px);
35
+ }
36
+
37
+ .mljr-breadcrumb-link:focus-visible {
38
+ outline: 3px solid var(--mljr-primary-300);
39
+ outline-offset: 2px;
40
+ }
41
+
42
+ /* Current/Active item */
43
+ .mljr-breadcrumb-item-active .mljr-breadcrumb-link,
44
+ .mljr-breadcrumb-link[aria-current="page"] {
45
+ color: var(--mljr-primary-600);
46
+ font-weight: 500;
47
+ background: var(--mljr-bg-secondary);
48
+ box-shadow: var(--mljr-clay-shadow-sm);
49
+ }
50
+
51
+ /* Separator */
52
+ .mljr-breadcrumb-separator {
53
+ color: var(--mljr-text-muted);
54
+ margin: 0 var(--mljr-space-1);
55
+ user-select: none;
56
+ font-size: 0.875em;
57
+ }
58
+
59
+ /* Contained variant - soft panel background */
60
+ .mljr-breadcrumb-contained {
61
+ background: var(--mljr-bg);
62
+ padding: var(--mljr-space-2) var(--mljr-space-4);
63
+ border-radius: var(--mljr-radius-lg);
64
+ box-shadow: var(--mljr-clay-shadow-sm);
65
+ border: 1px solid var(--mljr-border);
66
+ }
67
+
68
+ .mljr-breadcrumb-contained .mljr-breadcrumb-link:hover {
69
+ background: var(--mljr-bg-tertiary);
70
+ }
71
+
72
+ /* Size variants */
73
+ .mljr-breadcrumb-sm {
74
+ font-size: var(--mljr-text-xs);
75
+ gap: var(--mljr-space-1);
76
+ }
77
+
78
+ .mljr-breadcrumb-sm .mljr-breadcrumb-link {
79
+ padding: var(--mljr-space-1) var(--mljr-space-2);
80
+ }
81
+
82
+ .mljr-breadcrumb-lg {
83
+ font-size: var(--mljr-text-base);
84
+ }
85
+
86
+ .mljr-breadcrumb-lg .mljr-breadcrumb-link {
87
+ padding: var(--mljr-space-2) var(--mljr-space-4);
88
+ }
89
+
90
+ /* Dark mode */
91
+ .dark .mljr-breadcrumb-contained,
92
+ [data-theme="dark"] .mljr-breadcrumb-contained {
93
+ background: var(--mljr-bg-secondary);
94
+ border-color: var(--mljr-border);
95
+ }
96
+
97
+ .dark .mljr-breadcrumb-link:hover,
98
+ [data-theme="dark"] .mljr-breadcrumb-link:hover {
99
+ background: var(--mljr-bg-tertiary);
100
+ }