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
@@ -141,3 +141,62 @@
141
141
  [data-theme="dark"] .mljr-pagination-item {
142
142
  background: var(--mljr-bg-secondary);
143
143
  }
144
+
145
+ /* Pagination Wrapper */
146
+ .mljr-pagination-wrapper {
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: var(--mljr-space-3);
150
+ align-items: flex-start;
151
+ }
152
+
153
+ /* Pagination Controls (Jump To + Items Per Page) */
154
+ .mljr-pagination-controls {
155
+ display: flex;
156
+ flex-wrap: wrap;
157
+ gap: var(--mljr-space-4);
158
+ align-items: center;
159
+ }
160
+
161
+ .mljr-pagination-label {
162
+ font-size: var(--mljr-text-sm);
163
+ color: var(--mljr-text-secondary);
164
+ margin-right: var(--mljr-space-2);
165
+ }
166
+
167
+ /* Items Per Page */
168
+ .mljr-pagination-per-page {
169
+ display: flex;
170
+ align-items: center;
171
+ gap: var(--mljr-space-2);
172
+ }
173
+
174
+ /* Jump To Page */
175
+ .mljr-pagination-jump {
176
+ display: flex;
177
+ align-items: center;
178
+ gap: var(--mljr-space-2);
179
+ }
180
+
181
+ .mljr-pagination-jump-input {
182
+ width: 4rem;
183
+ text-align: center;
184
+ }
185
+
186
+ /* Responsive */
187
+ @media (max-width: 640px) {
188
+ .mljr-pagination-wrapper {
189
+ width: 100%;
190
+ }
191
+
192
+ .mljr-pagination {
193
+ flex-wrap: wrap;
194
+ justify-content: center;
195
+ }
196
+
197
+ .mljr-pagination-controls {
198
+ flex-direction: column;
199
+ align-items: flex-start;
200
+ width: 100%;
201
+ }
202
+ }
@@ -0,0 +1,163 @@
1
+ /* ============================================
2
+ PdfViewer - Inline PDF document viewer
3
+ ============================================ */
4
+
5
+ .mljr-pdf {
6
+ display: flex;
7
+ flex-direction: column;
8
+ border-radius: var(--mljr-radius-md);
9
+ border: 2px solid var(--mljr-border);
10
+ overflow: hidden;
11
+ background: var(--mljr-surface-2);
12
+ box-shadow: var(--mljr-clay-shadow-sm);
13
+ }
14
+
15
+ /* Toolbar */
16
+ .mljr-pdf-toolbar {
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: space-between;
20
+ padding: 0.5rem 0.875rem;
21
+ background: var(--mljr-surface);
22
+ border-bottom: 1px solid var(--mljr-border);
23
+ gap: 0.5rem;
24
+ flex-wrap: wrap;
25
+ }
26
+
27
+ .mljr-pdf-title {
28
+ font-family: var(--mljr-font-body);
29
+ font-size: 0.8125rem;
30
+ font-weight: 600;
31
+ color: var(--mljr-text);
32
+ flex: 1;
33
+ min-width: 0;
34
+ overflow: hidden;
35
+ text-overflow: ellipsis;
36
+ white-space: nowrap;
37
+ display: flex;
38
+ align-items: center;
39
+ gap: 0.375rem;
40
+ }
41
+
42
+ .mljr-pdf-title svg {
43
+ color: var(--mljr-primary-500);
44
+ flex-shrink: 0;
45
+ }
46
+
47
+ .mljr-pdf-actions {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 0.375rem;
51
+ }
52
+
53
+ .mljr-pdf-action-btn {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 0.25rem;
57
+ padding: 0.3rem 0.625rem;
58
+ border-radius: var(--mljr-radius-sm);
59
+ border: 1px solid var(--mljr-border);
60
+ background: var(--mljr-surface);
61
+ color: var(--mljr-text-muted);
62
+ font-family: var(--mljr-font-body);
63
+ font-size: 0.75rem;
64
+ font-weight: 500;
65
+ cursor: pointer;
66
+ text-decoration: none;
67
+ transition: background 0.15s, color 0.15s;
68
+ }
69
+
70
+ .mljr-pdf-action-btn:hover {
71
+ background: var(--mljr-surface-2);
72
+ color: var(--mljr-text);
73
+ }
74
+
75
+ /* Viewer area */
76
+ .mljr-pdf-viewer {
77
+ flex: 1;
78
+ position: relative;
79
+ background: #525659;
80
+ }
81
+
82
+ .mljr-pdf-viewer embed,
83
+ .mljr-pdf-viewer iframe,
84
+ .mljr-pdf-viewer object {
85
+ display: block;
86
+ width: 100%;
87
+ height: 100%;
88
+ border: none;
89
+ }
90
+
91
+ /* Loading / error states */
92
+ .mljr-pdf-placeholder {
93
+ display: flex;
94
+ flex-direction: column;
95
+ align-items: center;
96
+ justify-content: center;
97
+ height: 100%;
98
+ gap: 0.75rem;
99
+ padding: 2rem;
100
+ color: var(--mljr-text-muted);
101
+ font-family: var(--mljr-font-body);
102
+ font-size: 0.875rem;
103
+ text-align: center;
104
+ }
105
+
106
+ .mljr-pdf-placeholder svg {
107
+ color: var(--mljr-primary-500);
108
+ opacity: 0.6;
109
+ }
110
+
111
+ .mljr-pdf-placeholder-title {
112
+ font-weight: 600;
113
+ color: var(--mljr-text);
114
+ font-size: 1rem;
115
+ }
116
+
117
+ .mljr-pdf-placeholder-hint {
118
+ font-size: 0.8125rem;
119
+ max-width: 24rem;
120
+ line-height: 1.5;
121
+ }
122
+
123
+ .mljr-pdf-download-link {
124
+ display: inline-flex;
125
+ align-items: center;
126
+ gap: 0.375rem;
127
+ padding: 0.5rem 1rem;
128
+ background: var(--mljr-primary-500);
129
+ color: white;
130
+ border-radius: var(--mljr-radius-sm);
131
+ font-weight: 600;
132
+ font-size: 0.875rem;
133
+ text-decoration: none;
134
+ transition: background 0.15s;
135
+ margin-top: 0.25rem;
136
+ }
137
+
138
+ .mljr-pdf-download-link:hover {
139
+ background: var(--mljr-primary-600);
140
+ }
141
+
142
+ /* Loading spinner */
143
+ .mljr-pdf-loading {
144
+ position: absolute;
145
+ inset: 0;
146
+ display: flex;
147
+ align-items: center;
148
+ justify-content: center;
149
+ background: #525659;
150
+ color: #ccc;
151
+ gap: 0.5rem;
152
+ flex-direction: column;
153
+ font-family: var(--mljr-font-body);
154
+ font-size: 0.875rem;
155
+ }
156
+
157
+ .mljr-pdf-loading svg {
158
+ animation: mljr-pdf-spin 1.2s linear infinite;
159
+ }
160
+
161
+ @keyframes mljr-pdf-spin {
162
+ to { transform: rotate(360deg); }
163
+ }
@@ -0,0 +1,153 @@
1
+ /* ============================================================
2
+ PIN Input Component
3
+ ============================================================ */
4
+
5
+ .mljr-pin-input {
6
+ display: flex;
7
+ flex-direction: column;
8
+ align-items: center;
9
+ gap: var(--mljr-space-4);
10
+ }
11
+
12
+ .mljr-pin-digits {
13
+ display: flex;
14
+ gap: var(--mljr-space-3);
15
+ justify-content: center;
16
+ }
17
+
18
+ .mljr-pin-digit {
19
+ width: 3rem;
20
+ height: 3.5rem;
21
+ font-size: var(--mljr-text-xl);
22
+ font-weight: 700;
23
+ text-align: center;
24
+ color: var(--mljr-text);
25
+ background: var(--mljr-bg-secondary);
26
+ border: 2px solid var(--mljr-border);
27
+ border-radius: var(--mljr-radius-lg);
28
+ box-shadow: var(--mljr-clay-inset-sm);
29
+ transition: all var(--mljr-transition-fast);
30
+ font-family: var(--mljr-font-mono);
31
+ caret-color: var(--mljr-primary-500);
32
+ /* Remove number input spinners */
33
+ -moz-appearance: textfield;
34
+ }
35
+
36
+ .mljr-pin-digit::-webkit-outer-spin-button,
37
+ .mljr-pin-digit::-webkit-inner-spin-button {
38
+ -webkit-appearance: none;
39
+ margin: 0;
40
+ }
41
+
42
+ .mljr-pin-digit:focus {
43
+ outline: none;
44
+ border-color: var(--mljr-primary-500);
45
+ box-shadow: var(--mljr-clay-shadow-sm);
46
+ transform: translateY(-2px);
47
+ }
48
+
49
+ .mljr-pin-digit:disabled {
50
+ opacity: 0.5;
51
+ cursor: not-allowed;
52
+ transform: none;
53
+ }
54
+
55
+ /* Filled state */
56
+ .mljr-pin-digit[data-filled="true"] {
57
+ border-color: var(--mljr-primary-400);
58
+ background: var(--mljr-primary-50);
59
+ }
60
+
61
+ .dark .mljr-pin-digit[data-filled="true"] {
62
+ background: color-mix(in srgb, var(--mljr-primary-500) 15%, transparent);
63
+ }
64
+
65
+ /* Error state */
66
+ .mljr-pin-input-error .mljr-pin-digit {
67
+ border-color: var(--mljr-error);
68
+ box-shadow: var(--mljr-clay-inset-sm);
69
+ animation: mljr-pin-shake 0.4s ease;
70
+ }
71
+
72
+ .mljr-pin-input-error .mljr-pin-digit:focus {
73
+ border-color: var(--mljr-error);
74
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--mljr-error) 20%, transparent);
75
+ }
76
+
77
+ /* Success state */
78
+ .mljr-pin-input-success .mljr-pin-digit {
79
+ border-color: var(--mljr-success);
80
+ }
81
+
82
+ .mljr-pin-input-success .mljr-pin-digit[data-filled="true"] {
83
+ background: color-mix(in srgb, var(--mljr-success) 10%, transparent);
84
+ border-color: var(--mljr-success);
85
+ }
86
+
87
+ /* Sizes */
88
+ .mljr-pin-digit-sm {
89
+ width: 2.5rem;
90
+ height: 3rem;
91
+ font-size: var(--mljr-text-lg);
92
+ }
93
+
94
+ .mljr-pin-digit-lg {
95
+ width: 3.75rem;
96
+ height: 4.25rem;
97
+ font-size: var(--mljr-text-2xl);
98
+ }
99
+
100
+ /* Toggle show/hide button */
101
+ .mljr-pin-toggle {
102
+ display: flex;
103
+ align-items: center;
104
+ gap: var(--mljr-space-1-5);
105
+ font-size: var(--mljr-text-sm);
106
+ color: var(--mljr-text-muted);
107
+ background: none;
108
+ border: none;
109
+ cursor: pointer;
110
+ padding: var(--mljr-space-1) var(--mljr-space-2);
111
+ border-radius: var(--mljr-radius-sm);
112
+ transition: color var(--mljr-transition-fast);
113
+ }
114
+
115
+ .mljr-pin-toggle:hover {
116
+ color: var(--mljr-primary-600);
117
+ }
118
+
119
+ /* Message under PIN */
120
+ .mljr-pin-message {
121
+ font-size: var(--mljr-text-sm);
122
+ text-align: center;
123
+ }
124
+
125
+ .mljr-pin-message-error {
126
+ color: var(--mljr-error);
127
+ }
128
+
129
+ .mljr-pin-message-success {
130
+ color: var(--mljr-success);
131
+ }
132
+
133
+ .mljr-pin-message-hint {
134
+ color: var(--mljr-text-muted);
135
+ }
136
+
137
+ /* Shake animation for error */
138
+ @keyframes mljr-pin-shake {
139
+ 0% { transform: translateX(0); }
140
+ 20% { transform: translateX(-6px); }
141
+ 40% { transform: translateX(6px); }
142
+ 60% { transform: translateX(-4px); }
143
+ 80% { transform: translateX(4px); }
144
+ 100% { transform: translateX(0); }
145
+ }
146
+
147
+ @media (max-width: 640px) {
148
+ .mljr-pin-digit {
149
+ width: 2.5rem;
150
+ height: 3rem;
151
+ font-size: var(--mljr-text-lg);
152
+ }
153
+ }
@@ -0,0 +1,82 @@
1
+ /* ============================================
2
+ Resizable Component
3
+ Two-panel layout with draggable divider
4
+ ============================================ */
5
+
6
+ .mljr-resizable {
7
+ display: flex;
8
+ width: 100%;
9
+ height: 100%;
10
+ overflow: hidden;
11
+ border-radius: var(--mljr-radius-lg);
12
+ }
13
+
14
+ .mljr-resizable-vertical {
15
+ flex-direction: column;
16
+ }
17
+
18
+ .mljr-resizable-panel {
19
+ overflow: auto;
20
+ min-width: 0;
21
+ min-height: 0;
22
+ }
23
+
24
+ /* Handle */
25
+ .mljr-resizable-handle {
26
+ flex: 0 0 auto;
27
+ position: relative;
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ background: var(--mljr-border);
32
+ transition: background 0.15s ease;
33
+ user-select: none;
34
+ touch-action: none;
35
+ z-index: 1;
36
+ }
37
+
38
+ .mljr-resizable-handle:hover,
39
+ .mljr-resizable-handle[data-dragging="true"] {
40
+ background: var(--mljr-primary-400);
41
+ }
42
+
43
+ .mljr-resizable-handle-horizontal {
44
+ width: 6px;
45
+ cursor: col-resize;
46
+ }
47
+
48
+ .mljr-resizable-handle-vertical {
49
+ height: 6px;
50
+ cursor: row-resize;
51
+ }
52
+
53
+ /* Handle grip dots */
54
+ .mljr-resizable-handle::after {
55
+ content: '';
56
+ display: block;
57
+ border-radius: var(--mljr-radius-full);
58
+ background: currentColor;
59
+ opacity: 0.4;
60
+ transition: opacity 0.15s ease;
61
+ }
62
+
63
+ .mljr-resizable-handle:hover::after,
64
+ .mljr-resizable-handle[data-dragging="true"]::after {
65
+ opacity: 0.8;
66
+ }
67
+
68
+ .mljr-resizable-handle-horizontal::after {
69
+ width: 3px;
70
+ height: 24px;
71
+ }
72
+
73
+ .mljr-resizable-handle-vertical::after {
74
+ width: 24px;
75
+ height: 3px;
76
+ }
77
+
78
+ /* Dark mode */
79
+ .dark .mljr-resizable-handle,
80
+ [data-theme="dark"] .mljr-resizable-handle {
81
+ background: var(--mljr-border);
82
+ }
@@ -0,0 +1,216 @@
1
+ /* ============================================
2
+ RichTextEditor - WYSIWYG text editor
3
+ ============================================ */
4
+
5
+ .mljr-rte {
6
+ border-radius: var(--mljr-radius-md);
7
+ border: 2px solid var(--mljr-border);
8
+ background: var(--mljr-surface);
9
+ overflow: hidden;
10
+ display: flex;
11
+ flex-direction: column;
12
+ transition: border-color 0.2s;
13
+ }
14
+
15
+ .mljr-rte:focus-within {
16
+ border-color: var(--mljr-primary-500);
17
+ }
18
+
19
+ /* ── Toolbar ── */
20
+ .mljr-rte-toolbar {
21
+ display: flex;
22
+ flex-wrap: wrap;
23
+ gap: 2px;
24
+ padding: 0.5rem 0.625rem;
25
+ background: var(--mljr-surface-2);
26
+ border-bottom: 1px solid var(--mljr-border);
27
+ align-items: center;
28
+ }
29
+
30
+ .mljr-rte-toolbar-group {
31
+ display: flex;
32
+ gap: 2px;
33
+ align-items: center;
34
+ }
35
+
36
+ .mljr-rte-toolbar-group + .mljr-rte-toolbar-group::before {
37
+ content: '';
38
+ display: block;
39
+ width: 1px;
40
+ height: 1.25rem;
41
+ background: var(--mljr-border);
42
+ margin: 0 0.25rem;
43
+ }
44
+
45
+ .mljr-rte-btn {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ width: 2rem;
50
+ height: 2rem;
51
+ border-radius: var(--mljr-radius-sm);
52
+ border: none;
53
+ background: transparent;
54
+ color: var(--mljr-text-muted);
55
+ cursor: pointer;
56
+ font-size: 0.75rem;
57
+ font-weight: 600;
58
+ font-family: var(--mljr-font-body);
59
+ transition: background 0.15s, color 0.15s, box-shadow 0.15s;
60
+ padding: 0;
61
+ flex-shrink: 0;
62
+ }
63
+
64
+ .mljr-rte-btn:hover {
65
+ background: var(--mljr-surface-3, var(--mljr-surface));
66
+ color: var(--mljr-text);
67
+ }
68
+
69
+ .mljr-rte-btn:active {
70
+ background: var(--mljr-primary-100);
71
+ box-shadow: var(--mljr-clay-inset-sm);
72
+ }
73
+
74
+ .mljr-rte-btn-active {
75
+ background: var(--mljr-primary-100);
76
+ color: var(--mljr-primary-600);
77
+ }
78
+
79
+ .dark .mljr-rte-btn-active {
80
+ background: rgba(249, 115, 22, 0.15);
81
+ color: var(--mljr-primary-400);
82
+ }
83
+
84
+ .mljr-rte-btn svg {
85
+ width: 1rem;
86
+ height: 1rem;
87
+ }
88
+
89
+ /* Heading select */
90
+ .mljr-rte-select {
91
+ height: 2rem;
92
+ padding: 0 0.5rem;
93
+ border-radius: var(--mljr-radius-sm);
94
+ border: 1px solid var(--mljr-border);
95
+ background: var(--mljr-surface);
96
+ color: var(--mljr-text);
97
+ font-size: 0.75rem;
98
+ font-family: var(--mljr-font-body);
99
+ cursor: pointer;
100
+ outline: none;
101
+ }
102
+
103
+ .mljr-rte-select:focus {
104
+ border-color: var(--mljr-primary-500);
105
+ }
106
+
107
+ /* ── Editor area ── */
108
+ .mljr-rte-content {
109
+ flex: 1;
110
+ padding: 0.875rem 1rem;
111
+ outline: none;
112
+ overflow-y: auto;
113
+ min-height: 120px;
114
+ color: var(--mljr-text);
115
+ font-family: var(--mljr-font-body);
116
+ font-size: 0.9375rem;
117
+ line-height: 1.7;
118
+ caret-color: var(--mljr-primary-500);
119
+ }
120
+
121
+ .mljr-rte-content:empty::before {
122
+ content: attr(data-placeholder);
123
+ color: var(--mljr-text-muted);
124
+ pointer-events: none;
125
+ }
126
+
127
+ /* Editable content styles */
128
+ .mljr-rte-content h1 { font-size: 1.75em; font-weight: 700; margin: 0.5em 0; }
129
+ .mljr-rte-content h2 { font-size: 1.375em; font-weight: 700; margin: 0.5em 0; }
130
+ .mljr-rte-content h3 { font-size: 1.125em; font-weight: 700; margin: 0.5em 0; }
131
+ .mljr-rte-content p { margin: 0.25em 0; }
132
+ .mljr-rte-content ul,
133
+ .mljr-rte-content ol { padding-left: 1.5em; margin: 0.25em 0; }
134
+ .mljr-rte-content ul { list-style-type: disc; }
135
+ .mljr-rte-content ol { list-style-type: decimal; }
136
+ .mljr-rte-content li { margin: 0.125em 0; }
137
+
138
+ .mljr-rte-content blockquote {
139
+ border-left: 3px solid var(--mljr-primary-400);
140
+ padding-left: 0.875rem;
141
+ margin: 0.5em 0;
142
+ color: var(--mljr-text-muted);
143
+ font-style: italic;
144
+ }
145
+
146
+ .mljr-rte-content code {
147
+ background: var(--mljr-surface-2);
148
+ border: 1px solid var(--mljr-border);
149
+ border-radius: 4px;
150
+ padding: 0.1em 0.35em;
151
+ font-family: var(--mljr-font-mono);
152
+ font-size: 0.85em;
153
+ color: var(--mljr-primary-600);
154
+ }
155
+
156
+ .mljr-rte-content pre {
157
+ background: var(--mljr-surface-2);
158
+ border: 1px solid var(--mljr-border);
159
+ border-radius: var(--mljr-radius-sm);
160
+ padding: 0.75rem 1rem;
161
+ font-family: var(--mljr-font-mono);
162
+ font-size: 0.875em;
163
+ overflow-x: auto;
164
+ margin: 0.5em 0;
165
+ }
166
+
167
+ .mljr-rte-content a {
168
+ color: var(--mljr-primary-600);
169
+ text-decoration: underline;
170
+ text-underline-offset: 2px;
171
+ }
172
+
173
+ .mljr-rte-content hr {
174
+ border: none;
175
+ border-top: 2px solid var(--mljr-border);
176
+ margin: 0.75em 0;
177
+ }
178
+
179
+ .mljr-rte-content img {
180
+ max-width: 100%;
181
+ border-radius: var(--mljr-radius-sm);
182
+ }
183
+
184
+ /* ── Footer / word count ── */
185
+ .mljr-rte-footer {
186
+ display: flex;
187
+ justify-content: flex-end;
188
+ padding: 0.25rem 0.75rem;
189
+ background: var(--mljr-surface-2);
190
+ border-top: 1px solid var(--mljr-border);
191
+ font-size: 0.7rem;
192
+ color: var(--mljr-text-muted);
193
+ font-family: var(--mljr-font-body);
194
+ gap: 1rem;
195
+ }
196
+
197
+ /* ── Sizes ── */
198
+ .mljr-rte-sm .mljr-rte-content { min-height: 80px; font-size: 0.875rem; }
199
+ .mljr-rte-lg .mljr-rte-content { min-height: 240px; }
200
+
201
+ /* ── Read-only ── */
202
+ .mljr-rte-readonly {
203
+ border-color: var(--mljr-border);
204
+ background: var(--mljr-surface-2);
205
+ }
206
+
207
+ .mljr-rte-readonly .mljr-rte-content {
208
+ cursor: default;
209
+ color: var(--mljr-text-muted);
210
+ }
211
+
212
+ /* ── Disabled ── */
213
+ .mljr-rte-disabled {
214
+ opacity: 0.5;
215
+ pointer-events: none;
216
+ }