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,141 @@
1
+ /* =====================================================
2
+ ImageCompare - Before/After slider component
3
+ ===================================================== */
4
+
5
+ .mljr-img-compare {
6
+ position: relative;
7
+ overflow: hidden;
8
+ cursor: ew-resize;
9
+ user-select: none;
10
+ border-radius: var(--mljr-radius-md);
11
+ box-shadow: var(--mljr-clay-shadow);
12
+ line-height: 0;
13
+ }
14
+
15
+ .mljr-img-compare-before,
16
+ .mljr-img-compare-after {
17
+ position: absolute;
18
+ inset: 0;
19
+ overflow: hidden;
20
+ }
21
+
22
+ .mljr-img-compare-before img,
23
+ .mljr-img-compare-after img {
24
+ display: block;
25
+ width: 100%;
26
+ height: 100%;
27
+ object-fit: cover;
28
+ pointer-events: none;
29
+ user-select: none;
30
+ }
31
+
32
+ /* After panel clips to the right of the handle */
33
+ .mljr-img-compare-after {
34
+ clip-path: inset(0 0 0 var(--mljr-compare-pos, 50%));
35
+ }
36
+
37
+ /* Placeholder image fills the container */
38
+ .mljr-img-compare > img {
39
+ display: block;
40
+ width: 100%;
41
+ height: auto;
42
+ visibility: hidden;
43
+ }
44
+
45
+ /* Handle / Divider */
46
+ .mljr-img-compare-handle {
47
+ position: absolute;
48
+ top: 0;
49
+ bottom: 0;
50
+ left: var(--mljr-compare-pos, 50%);
51
+ transform: translateX(-50%);
52
+ width: 3px;
53
+ background: white;
54
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);
55
+ z-index: 10;
56
+ pointer-events: none;
57
+ }
58
+
59
+ .mljr-img-compare-knob {
60
+ position: absolute;
61
+ top: 50%;
62
+ left: 50%;
63
+ transform: translate(-50%, -50%);
64
+ width: 44px;
65
+ height: 44px;
66
+ background: white;
67
+ border-radius: var(--mljr-radius-full);
68
+ box-shadow: var(--mljr-clay-shadow);
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ gap: 0.25rem;
73
+ color: var(--mljr-primary-500);
74
+ pointer-events: none;
75
+ z-index: 11;
76
+ }
77
+
78
+ /* Labels */
79
+ .mljr-img-compare-label {
80
+ position: absolute;
81
+ bottom: 0.75rem;
82
+ padding: 0.25rem 0.75rem;
83
+ border-radius: var(--mljr-radius-md);
84
+ font-size: var(--mljr-text-xs);
85
+ font-weight: 600;
86
+ color: white;
87
+ background: rgba(0, 0, 0, 0.5);
88
+ backdrop-filter: blur(4px);
89
+ pointer-events: none;
90
+ z-index: 10;
91
+ }
92
+
93
+ .mljr-img-compare-label-before {
94
+ left: 0.75rem;
95
+ }
96
+
97
+ .mljr-img-compare-label-after {
98
+ right: 0.75rem;
99
+ }
100
+
101
+ /* Vertical mode */
102
+ .mljr-img-compare-vertical {
103
+ cursor: ns-resize;
104
+ }
105
+
106
+ .mljr-img-compare-vertical .mljr-img-compare-after {
107
+ clip-path: inset(var(--mljr-compare-pos, 50%) 0 0 0);
108
+ }
109
+
110
+ .mljr-img-compare-vertical .mljr-img-compare-handle {
111
+ top: var(--mljr-compare-pos, 50%);
112
+ bottom: auto;
113
+ left: 0;
114
+ right: 0;
115
+ width: 100%;
116
+ height: 3px;
117
+ transform: translateY(-50%);
118
+ }
119
+
120
+ .mljr-img-compare-vertical .mljr-img-compare-knob {
121
+ top: 50%;
122
+ left: 50%;
123
+ }
124
+
125
+ .mljr-img-compare-vertical .mljr-img-compare-label-before {
126
+ top: 0.75rem;
127
+ left: 0.75rem;
128
+ bottom: auto;
129
+ }
130
+
131
+ .mljr-img-compare-vertical .mljr-img-compare-label-after {
132
+ bottom: 0.75rem;
133
+ right: auto;
134
+ left: 0.75rem;
135
+ }
136
+
137
+ /* Dark mode */
138
+ .dark .mljr-img-compare,
139
+ [data-theme="dark"] .mljr-img-compare {
140
+ box-shadow: var(--mljr-clay-shadow);
141
+ }
@@ -0,0 +1,36 @@
1
+ /* ============================================
2
+ InfiniteScroll - Scroll-triggered load more
3
+ ============================================ */
4
+
5
+ .mljr-infinite-scroll {
6
+ position: relative;
7
+ }
8
+
9
+ /* Invisible 1-px element used as IntersectionObserver sentinel */
10
+ .mljr-infinite-scroll-sentinel {
11
+ height: 1px;
12
+ visibility: hidden;
13
+ pointer-events: none;
14
+ }
15
+
16
+ /* Default loading indicator */
17
+ .mljr-infinite-scroll-loading {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ gap: var(--mljr-space-3);
22
+ padding: var(--mljr-space-6) var(--mljr-space-4);
23
+ color: var(--mljr-text-muted);
24
+ font-size: var(--mljr-text-sm);
25
+ }
26
+
27
+ /* End-of-list message */
28
+ .mljr-infinite-scroll-end {
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ padding: var(--mljr-space-6) var(--mljr-space-4);
33
+ color: var(--mljr-text-muted);
34
+ font-size: var(--mljr-text-sm);
35
+ border-top: 1px solid var(--mljr-border);
36
+ }
@@ -0,0 +1,118 @@
1
+ /* ============================================
2
+ InView - Scroll-triggered visibility & animations
3
+ ============================================ */
4
+
5
+ .mljr-inview {
6
+ /* Base container, no default styles */
7
+ }
8
+
9
+ /* --- Fade --- */
10
+ .mljr-inview-fade {
11
+ opacity: 0;
12
+ transition:
13
+ opacity var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out;
14
+ }
15
+
16
+ .mljr-inview-fade.mljr-inview-visible {
17
+ opacity: 1;
18
+ }
19
+
20
+ /* --- Slide Up (enters from below) --- */
21
+ .mljr-inview-slide-up {
22
+ opacity: 0;
23
+ transform: translateY(32px);
24
+ transition:
25
+ opacity var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out,
26
+ transform var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out;
27
+ }
28
+
29
+ .mljr-inview-slide-up.mljr-inview-visible {
30
+ opacity: 1;
31
+ transform: translateY(0);
32
+ }
33
+
34
+ /* --- Slide Down (enters from above) --- */
35
+ .mljr-inview-slide-down {
36
+ opacity: 0;
37
+ transform: translateY(-32px);
38
+ transition:
39
+ opacity var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out,
40
+ transform var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out;
41
+ }
42
+
43
+ .mljr-inview-slide-down.mljr-inview-visible {
44
+ opacity: 1;
45
+ transform: translateY(0);
46
+ }
47
+
48
+ /* --- Slide Left (enters from the right) --- */
49
+ .mljr-inview-slide-left {
50
+ opacity: 0;
51
+ transform: translateX(32px);
52
+ transition:
53
+ opacity var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out,
54
+ transform var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out;
55
+ }
56
+
57
+ .mljr-inview-slide-left.mljr-inview-visible {
58
+ opacity: 1;
59
+ transform: translateX(0);
60
+ }
61
+
62
+ /* --- Slide Right (enters from the left) --- */
63
+ .mljr-inview-slide-right {
64
+ opacity: 0;
65
+ transform: translateX(-32px);
66
+ transition:
67
+ opacity var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out,
68
+ transform var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out;
69
+ }
70
+
71
+ .mljr-inview-slide-right.mljr-inview-visible {
72
+ opacity: 1;
73
+ transform: translateX(0);
74
+ }
75
+
76
+ /* --- Scale --- */
77
+ .mljr-inview-scale {
78
+ opacity: 0;
79
+ transform: scale(0.88);
80
+ transition:
81
+ opacity var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out,
82
+ transform var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out;
83
+ }
84
+
85
+ .mljr-inview-scale.mljr-inview-visible {
86
+ opacity: 1;
87
+ transform: scale(1);
88
+ }
89
+
90
+ /* --- Flip --- */
91
+ .mljr-inview-flip {
92
+ opacity: 0;
93
+ transform: perspective(600px) rotateX(30deg);
94
+ transform-origin: top center;
95
+ transition:
96
+ opacity var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out,
97
+ transform var(--mljr-inview-duration, 600ms) var(--mljr-inview-delay, 0ms) ease-out;
98
+ }
99
+
100
+ .mljr-inview-flip.mljr-inview-visible {
101
+ opacity: 1;
102
+ transform: perspective(600px) rotateX(0deg);
103
+ }
104
+
105
+ /* --- Respect reduced motion --- */
106
+ @media (prefers-reduced-motion: reduce) {
107
+ .mljr-inview-fade,
108
+ .mljr-inview-slide-up,
109
+ .mljr-inview-slide-down,
110
+ .mljr-inview-slide-left,
111
+ .mljr-inview-slide-right,
112
+ .mljr-inview-scale,
113
+ .mljr-inview-flip {
114
+ opacity: 1;
115
+ transform: none;
116
+ transition: none;
117
+ }
118
+ }
@@ -0,0 +1,60 @@
1
+ /* ============================================
2
+ LazyImage - Intersection-observer lazy loading
3
+ ============================================ */
4
+
5
+ .mljr-lazy-img {
6
+ position: relative;
7
+ overflow: hidden;
8
+ display: block;
9
+ background-color: var(--mljr-surface-2);
10
+ border-radius: var(--mljr-radius-sm);
11
+ }
12
+
13
+ /* Shimmer skeleton shown before image enters viewport */
14
+ .mljr-lazy-img-skeleton {
15
+ width: 100%;
16
+ min-height: 120px;
17
+ background: linear-gradient(
18
+ 90deg,
19
+ var(--mljr-surface-2) 25%,
20
+ var(--mljr-surface-3, color-mix(in srgb, var(--mljr-surface-2) 60%, white)) 50%,
21
+ var(--mljr-surface-2) 75%
22
+ );
23
+ background-size: 200% 100%;
24
+ animation: mljr-lazy-shimmer 1.5s infinite;
25
+ }
26
+
27
+ @keyframes mljr-lazy-shimmer {
28
+ 0% { background-position: 200% 0; }
29
+ 100% { background-position: -200% 0; }
30
+ }
31
+
32
+ /* Blurred low-res placeholder */
33
+ .mljr-lazy-img-placeholder {
34
+ position: absolute;
35
+ inset: 0;
36
+ width: 100%;
37
+ height: 100%;
38
+ object-fit: cover;
39
+ filter: blur(8px);
40
+ transform: scale(1.05);
41
+ }
42
+
43
+ /* Real image — fades in once loaded */
44
+ .mljr-lazy-img-actual {
45
+ display: block;
46
+ width: 100%;
47
+ height: auto;
48
+ opacity: 0;
49
+ transition: opacity 500ms ease-out;
50
+ }
51
+
52
+ .mljr-lazy-img-actual.mljr-lazy-img-loaded {
53
+ opacity: 1;
54
+ }
55
+
56
+ /* Aspect ratio helpers */
57
+ .mljr-lazy-img-16-9 { aspect-ratio: 16 / 9; }
58
+ .mljr-lazy-img-4-3 { aspect-ratio: 4 / 3; }
59
+ .mljr-lazy-img-1-1 { aspect-ratio: 1; }
60
+ .mljr-lazy-img-cover { object-fit: cover; width: 100%; height: 100%; }
@@ -0,0 +1,346 @@
1
+ /* ============================================
2
+ Legal Pages — Impressum, Datenschutz, About
3
+ ============================================ */
4
+
5
+ .mljr-legal {
6
+ max-width: 800px;
7
+ margin: 0 auto;
8
+ padding: var(--mljr-space-8) var(--mljr-space-4);
9
+ }
10
+
11
+ .mljr-legal__header {
12
+ margin-bottom: var(--mljr-space-8);
13
+ }
14
+
15
+ .mljr-legal__title {
16
+ font-size: var(--mljr-text-3xl);
17
+ font-weight: 800;
18
+ color: var(--mljr-text);
19
+ margin: 0 0 var(--mljr-space-2) 0;
20
+ }
21
+
22
+ .mljr-legal__meta {
23
+ font-size: var(--mljr-text-sm);
24
+ color: var(--mljr-text-muted);
25
+ display: flex;
26
+ align-items: center;
27
+ gap: var(--mljr-space-4);
28
+ flex-wrap: wrap;
29
+ }
30
+
31
+ .mljr-legal__print-btn {
32
+ background: none;
33
+ border: none;
34
+ cursor: pointer;
35
+ font-size: var(--mljr-text-sm);
36
+ color: var(--mljr-primary-600);
37
+ padding: 0;
38
+ text-decoration: underline;
39
+ text-underline-offset: 3px;
40
+ }
41
+ .mljr-legal__print-btn:hover {
42
+ color: var(--mljr-primary-700);
43
+ }
44
+
45
+ /* --- Section card --- */
46
+ .mljr-legal__section {
47
+ background: var(--mljr-surface);
48
+ border: 1px solid var(--mljr-border);
49
+ border-radius: var(--mljr-radius-lg);
50
+ padding: var(--mljr-space-6);
51
+ margin-bottom: var(--mljr-space-4);
52
+ box-shadow: var(--mljr-clay-shadow-sm);
53
+ }
54
+
55
+ .mljr-legal__section-title {
56
+ font-size: var(--mljr-text-lg);
57
+ font-weight: 700;
58
+ color: var(--mljr-text);
59
+ margin: 0 0 var(--mljr-space-4) 0;
60
+ padding-bottom: var(--mljr-space-2);
61
+ border-bottom: 2px solid var(--mljr-primary-200);
62
+ display: flex;
63
+ align-items: center;
64
+ gap: var(--mljr-space-2);
65
+ }
66
+
67
+ .mljr-legal__section-title svg {
68
+ color: var(--mljr-primary-500);
69
+ flex-shrink: 0;
70
+ }
71
+
72
+ /* --- Data rows (label: value) --- */
73
+ .mljr-legal__row {
74
+ display: grid;
75
+ grid-template-columns: 180px 1fr;
76
+ gap: var(--mljr-space-2) var(--mljr-space-4);
77
+ align-items: start;
78
+ padding: var(--mljr-space-2) 0;
79
+ border-bottom: 1px solid var(--mljr-border);
80
+ }
81
+
82
+ .mljr-legal__row:last-child {
83
+ border-bottom: none;
84
+ }
85
+
86
+ .mljr-legal__label {
87
+ font-size: var(--mljr-text-sm);
88
+ font-weight: 600;
89
+ color: var(--mljr-text-muted);
90
+ }
91
+
92
+ .mljr-legal__value {
93
+ font-size: var(--mljr-text-sm);
94
+ color: var(--mljr-text);
95
+ word-break: break-word;
96
+ }
97
+
98
+ .mljr-legal__value a {
99
+ color: var(--mljr-primary-600);
100
+ text-decoration: underline;
101
+ text-underline-offset: 3px;
102
+ }
103
+ .mljr-legal__value a:hover {
104
+ color: var(--mljr-primary-700);
105
+ }
106
+
107
+ /* --- Body text (paragraphs, lists) --- */
108
+ .mljr-legal__body {
109
+ font-size: var(--mljr-text-sm);
110
+ color: var(--mljr-text);
111
+ line-height: 1.7;
112
+ }
113
+
114
+ .mljr-legal__body p {
115
+ margin: 0 0 var(--mljr-space-3) 0;
116
+ }
117
+
118
+ .mljr-legal__body ul,
119
+ .mljr-legal__body ol {
120
+ margin: 0 0 var(--mljr-space-3) var(--mljr-space-5);
121
+ padding: 0;
122
+ }
123
+
124
+ .mljr-legal__body li {
125
+ margin-bottom: var(--mljr-space-1);
126
+ }
127
+
128
+ .mljr-legal__body h3 {
129
+ font-size: var(--mljr-text-base);
130
+ font-weight: 700;
131
+ color: var(--mljr-text);
132
+ margin: var(--mljr-space-4) 0 var(--mljr-space-2) 0;
133
+ }
134
+
135
+ /* --- Highlight box (e.g. rights notice) --- */
136
+ .mljr-legal__highlight {
137
+ background: color-mix(in srgb, var(--mljr-primary-500) 8%, transparent);
138
+ border-left: 3px solid var(--mljr-primary-500);
139
+ border-radius: 0 var(--mljr-radius-sm) var(--mljr-radius-sm) 0;
140
+ padding: var(--mljr-space-3) var(--mljr-space-4);
141
+ margin: var(--mljr-space-3) 0;
142
+ font-size: var(--mljr-text-sm);
143
+ color: var(--mljr-text);
144
+ }
145
+
146
+ /* --- About page --- */
147
+ .mljr-about {
148
+ max-width: 900px;
149
+ margin: 0 auto;
150
+ padding: var(--mljr-space-8) var(--mljr-space-4);
151
+ }
152
+
153
+ .mljr-about__hero {
154
+ text-align: center;
155
+ padding: var(--mljr-space-12) 0;
156
+ margin-bottom: var(--mljr-space-8);
157
+ }
158
+
159
+ .mljr-about__tagline {
160
+ font-size: var(--mljr-text-xl);
161
+ color: var(--mljr-text-muted);
162
+ margin: var(--mljr-space-2) 0 0 0;
163
+ }
164
+
165
+ .mljr-about__description {
166
+ font-size: var(--mljr-text-lg);
167
+ color: var(--mljr-text-muted);
168
+ margin: var(--mljr-space-4) auto 0;
169
+ max-width: 600px;
170
+ line-height: 1.7;
171
+ }
172
+
173
+ /* Stats row */
174
+ .mljr-about__stats {
175
+ display: grid;
176
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
177
+ gap: var(--mljr-space-4);
178
+ margin-bottom: var(--mljr-space-8);
179
+ }
180
+
181
+ .mljr-about__stat {
182
+ background: var(--mljr-surface);
183
+ border: 1px solid var(--mljr-border);
184
+ border-radius: var(--mljr-radius-lg);
185
+ padding: var(--mljr-space-6);
186
+ text-align: center;
187
+ box-shadow: var(--mljr-clay-shadow-sm);
188
+ }
189
+
190
+ .mljr-about__stat-value {
191
+ font-size: var(--mljr-text-3xl);
192
+ font-weight: 800;
193
+ color: var(--mljr-primary-600);
194
+ line-height: 1;
195
+ margin-bottom: var(--mljr-space-1);
196
+ }
197
+
198
+ .mljr-about__stat-label {
199
+ font-size: var(--mljr-text-sm);
200
+ color: var(--mljr-text-muted);
201
+ }
202
+
203
+ /* Mission section */
204
+ .mljr-about__mission {
205
+ background: var(--mljr-surface);
206
+ border: 1px solid var(--mljr-border);
207
+ border-radius: var(--mljr-radius-lg);
208
+ padding: var(--mljr-space-8);
209
+ margin-bottom: var(--mljr-space-8);
210
+ box-shadow: var(--mljr-clay-shadow-sm);
211
+ text-align: center;
212
+ }
213
+
214
+ .mljr-about__mission-title {
215
+ font-size: var(--mljr-text-xl);
216
+ font-weight: 700;
217
+ color: var(--mljr-text);
218
+ margin: 0 0 var(--mljr-space-3) 0;
219
+ }
220
+
221
+ .mljr-about__mission-text {
222
+ font-size: var(--mljr-text-base);
223
+ color: var(--mljr-text-muted);
224
+ line-height: 1.7;
225
+ margin: 0 auto;
226
+ max-width: 600px;
227
+ }
228
+
229
+ /* Values grid */
230
+ .mljr-about__values-title,
231
+ .mljr-about__team-title {
232
+ font-size: var(--mljr-text-2xl);
233
+ font-weight: 700;
234
+ color: var(--mljr-text);
235
+ margin: 0 0 var(--mljr-space-5) 0;
236
+ }
237
+
238
+ .mljr-about__values {
239
+ display: grid;
240
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
241
+ gap: var(--mljr-space-4);
242
+ margin-bottom: var(--mljr-space-8);
243
+ }
244
+
245
+ .mljr-about__value-card {
246
+ background: var(--mljr-surface);
247
+ border: 1px solid var(--mljr-border);
248
+ border-radius: var(--mljr-radius-lg);
249
+ padding: var(--mljr-space-5);
250
+ box-shadow: var(--mljr-clay-shadow-sm);
251
+ }
252
+
253
+ .mljr-about__value-icon {
254
+ font-size: 1.75rem;
255
+ margin-bottom: var(--mljr-space-2);
256
+ }
257
+
258
+ .mljr-about__value-name {
259
+ font-size: var(--mljr-text-base);
260
+ font-weight: 700;
261
+ color: var(--mljr-text);
262
+ margin: 0 0 var(--mljr-space-1) 0;
263
+ }
264
+
265
+ .mljr-about__value-desc {
266
+ font-size: var(--mljr-text-sm);
267
+ color: var(--mljr-text-muted);
268
+ line-height: 1.5;
269
+ margin: 0;
270
+ }
271
+
272
+ /* Team grid */
273
+ .mljr-about__team {
274
+ display: grid;
275
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
276
+ gap: var(--mljr-space-4);
277
+ margin-bottom: var(--mljr-space-8);
278
+ }
279
+
280
+ .mljr-about__team-card {
281
+ background: var(--mljr-surface);
282
+ border: 1px solid var(--mljr-border);
283
+ border-radius: var(--mljr-radius-lg);
284
+ padding: var(--mljr-space-5);
285
+ text-align: center;
286
+ box-shadow: var(--mljr-clay-shadow-sm);
287
+ }
288
+
289
+ .mljr-about__team-avatar {
290
+ width: 72px;
291
+ height: 72px;
292
+ border-radius: var(--mljr-radius-full);
293
+ object-fit: cover;
294
+ margin: 0 auto var(--mljr-space-3);
295
+ display: block;
296
+ background: var(--mljr-surface-alt);
297
+ }
298
+
299
+ .mljr-about__team-avatar--placeholder {
300
+ display: flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ font-size: var(--mljr-text-2xl);
304
+ font-weight: 700;
305
+ color: var(--mljr-primary-600);
306
+ background: color-mix(in srgb, var(--mljr-primary-500) 15%, transparent);
307
+ }
308
+
309
+ .mljr-about__team-name {
310
+ font-size: var(--mljr-text-sm);
311
+ font-weight: 700;
312
+ color: var(--mljr-text);
313
+ margin: 0 0 var(--mljr-space-1) 0;
314
+ }
315
+
316
+ .mljr-about__team-role {
317
+ font-size: var(--mljr-text-xs);
318
+ color: var(--mljr-text-muted);
319
+ margin: 0;
320
+ }
321
+
322
+ /* --- Print styles --- */
323
+ @media print {
324
+ .mljr-legal__print-btn,
325
+ .mljr-cookie-fab {
326
+ display: none !important;
327
+ }
328
+
329
+ .mljr-legal__section {
330
+ box-shadow: none;
331
+ border: 1px solid #ccc;
332
+ break-inside: avoid;
333
+ }
334
+ }
335
+
336
+ /* --- Responsive --- */
337
+ @media (max-width: 600px) {
338
+ .mljr-legal__row {
339
+ grid-template-columns: 1fr;
340
+ gap: var(--mljr-space-1);
341
+ }
342
+
343
+ .mljr-legal__label {
344
+ font-weight: 700;
345
+ }
346
+ }