@remyxjs/core 1.0.0-beta

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 (105) hide show
  1. package/README.md +2454 -0
  2. package/dist/convertCsv-B8RVtdcs.cjs +2 -0
  3. package/dist/convertCsv-B8RVtdcs.cjs.map +1 -0
  4. package/dist/convertCsv-CKzZjzLJ.js +2 -0
  5. package/dist/convertCsv-CKzZjzLJ.js.map +1 -0
  6. package/dist/convertDocx-4q89XLLv.cjs +2 -0
  7. package/dist/convertDocx-4q89XLLv.cjs.map +1 -0
  8. package/dist/convertDocx-Dmx88twM.js +2 -0
  9. package/dist/convertDocx-Dmx88twM.js.map +1 -0
  10. package/dist/convertHtml-CtYVhiTh.js +2 -0
  11. package/dist/convertHtml-CtYVhiTh.js.map +1 -0
  12. package/dist/convertHtml-DbHrdrD3.cjs +2 -0
  13. package/dist/convertHtml-DbHrdrD3.cjs.map +1 -0
  14. package/dist/convertMarkdown-Di239Gtn.js +2 -0
  15. package/dist/convertMarkdown-Di239Gtn.js.map +1 -0
  16. package/dist/convertMarkdown-eJ9Nkoid.cjs +2 -0
  17. package/dist/convertMarkdown-eJ9Nkoid.cjs.map +1 -0
  18. package/dist/convertPdf-CFA1eNNH.js +2 -0
  19. package/dist/convertPdf-CFA1eNNH.js.map +1 -0
  20. package/dist/convertPdf-CSLmTrB8.cjs +2 -0
  21. package/dist/convertPdf-CSLmTrB8.cjs.map +1 -0
  22. package/dist/convertRtf-08CoScGD.js +2 -0
  23. package/dist/convertRtf-08CoScGD.js.map +1 -0
  24. package/dist/convertRtf-BfiBLMig.cjs +2 -0
  25. package/dist/convertRtf-BfiBLMig.cjs.map +1 -0
  26. package/dist/convertText-BpgzHRuh.cjs +2 -0
  27. package/dist/convertText-BpgzHRuh.cjs.map +1 -0
  28. package/dist/convertText-sa7PxKTe.js +2 -0
  29. package/dist/convertText-sa7PxKTe.js.map +1 -0
  30. package/dist/index-4syk9eEO.js +2 -0
  31. package/dist/index-4syk9eEO.js.map +1 -0
  32. package/dist/index-B25zSs0W.js +2 -0
  33. package/dist/index-B25zSs0W.js.map +1 -0
  34. package/dist/index-B7VT6ZLa.cjs +2 -0
  35. package/dist/index-B7VT6ZLa.cjs.map +1 -0
  36. package/dist/index-BCpytFKJ.js +2 -0
  37. package/dist/index-BCpytFKJ.js.map +1 -0
  38. package/dist/index-BNKANY5i.cjs +2 -0
  39. package/dist/index-BNKANY5i.cjs.map +1 -0
  40. package/dist/index-B_g_579T.cjs +2 -0
  41. package/dist/index-B_g_579T.cjs.map +1 -0
  42. package/dist/index-BvwyeoMb.js +3 -0
  43. package/dist/index-BvwyeoMb.js.map +1 -0
  44. package/dist/index-Bw7mlUQo.js +2 -0
  45. package/dist/index-Bw7mlUQo.js.map +1 -0
  46. package/dist/index-Byatzd-A.js +2 -0
  47. package/dist/index-Byatzd-A.js.map +1 -0
  48. package/dist/index-C0z9eZLm.cjs +2 -0
  49. package/dist/index-C0z9eZLm.cjs.map +1 -0
  50. package/dist/index-C88XPqjX.js +2 -0
  51. package/dist/index-C88XPqjX.js.map +1 -0
  52. package/dist/index-CI6FPF49.cjs +2 -0
  53. package/dist/index-CI6FPF49.cjs.map +1 -0
  54. package/dist/index-CLZF5_GB.cjs +2 -0
  55. package/dist/index-CLZF5_GB.cjs.map +1 -0
  56. package/dist/index-CXSwYlG4.cjs +2 -0
  57. package/dist/index-CXSwYlG4.cjs.map +1 -0
  58. package/dist/index-Ch9gotLk.js +2 -0
  59. package/dist/index-Ch9gotLk.js.map +1 -0
  60. package/dist/index-CifDpN1Y.js +2 -0
  61. package/dist/index-CifDpN1Y.js.map +1 -0
  62. package/dist/index-D5o8VpWJ.cjs +2 -0
  63. package/dist/index-D5o8VpWJ.cjs.map +1 -0
  64. package/dist/index-DKT1bABL.js +2 -0
  65. package/dist/index-DKT1bABL.js.map +1 -0
  66. package/dist/index-DWcn72PW.js +2 -0
  67. package/dist/index-DWcn72PW.js.map +1 -0
  68. package/dist/index-DjCGzPEv.cjs +2 -0
  69. package/dist/index-DjCGzPEv.cjs.map +1 -0
  70. package/dist/index-Dq0Jr1Ae.js +2 -0
  71. package/dist/index-Dq0Jr1Ae.js.map +1 -0
  72. package/dist/index-Dw0MVypb.cjs +2 -0
  73. package/dist/index-Dw0MVypb.cjs.map +1 -0
  74. package/dist/index-FEo3LShh.cjs +2 -0
  75. package/dist/index-FEo3LShh.cjs.map +1 -0
  76. package/dist/index-O1hzAUzi.cjs +2 -0
  77. package/dist/index-O1hzAUzi.cjs.map +1 -0
  78. package/dist/index-T1ZyLzeF.cjs +2 -0
  79. package/dist/index-T1ZyLzeF.cjs.map +1 -0
  80. package/dist/index-iRikoCdK.cjs +2 -0
  81. package/dist/index-iRikoCdK.cjs.map +1 -0
  82. package/dist/index-l6Yddj6x.js +2 -0
  83. package/dist/index-l6Yddj6x.js.map +1 -0
  84. package/dist/index-rD8LZENp.js +2 -0
  85. package/dist/index-rD8LZENp.js.map +1 -0
  86. package/dist/remyx-core.cjs +2 -0
  87. package/dist/remyx-core.cjs.map +1 -0
  88. package/dist/remyx-core.css +1 -0
  89. package/dist/remyx-core.js +2 -0
  90. package/dist/remyx-core.js.map +1 -0
  91. package/dist/themes/callouts.css +79 -0
  92. package/dist/themes/collaboration.css +117 -0
  93. package/dist/themes/comments.css +198 -0
  94. package/dist/themes/dark.css +109 -0
  95. package/dist/themes/forest.css +109 -0
  96. package/dist/themes/light.css +4 -0
  97. package/dist/themes/links.css +115 -0
  98. package/dist/themes/math-toc-analytics.css +129 -0
  99. package/dist/themes/ocean.css +109 -0
  100. package/dist/themes/rose.css +109 -0
  101. package/dist/themes/spellcheck.css +173 -0
  102. package/dist/themes/sunset.css +109 -0
  103. package/dist/themes/templates.css +87 -0
  104. package/dist/themes/variables.css +3222 -0
  105. package/package.json +80 -0
@@ -0,0 +1,3222 @@
1
+ /* ====== Remyx Editor - Base Styles & Design System ====== */
2
+
3
+ .rmx-editor {
4
+ /* ---- Layout Containment ---- */
5
+ contain: layout style;
6
+
7
+ /* ---- Color Palette ---- */
8
+ --rmx-bg: #ffffff;
9
+ --rmx-text: #1e293b;
10
+ --rmx-text-secondary: #64748b;
11
+ --rmx-border: #e2e8f0;
12
+ --rmx-border-subtle: #f1f5f9;
13
+
14
+ /* ---- Toolbar ---- */
15
+ --rmx-toolbar-bg: #ffffff;
16
+ --rmx-toolbar-border: #e2e8f0;
17
+ --rmx-toolbar-button-hover: #f1f5f9;
18
+ --rmx-toolbar-button-active: #e0e7ff;
19
+ --rmx-toolbar-icon: #64748b;
20
+ --rmx-toolbar-icon-active: #4f46e5;
21
+
22
+ /* ---- Accent / Primary ---- */
23
+ --rmx-primary: #6366f1;
24
+ --rmx-primary-hover: #4f46e5;
25
+ --rmx-primary-light: #e0e7ff;
26
+ --rmx-focus-ring: #6366f1;
27
+ --rmx-selection: #c7d2fe;
28
+
29
+ /* ---- Feedback ---- */
30
+ --rmx-danger: #ef4444;
31
+ --rmx-danger-light: rgba(239, 68, 68, 0.08);
32
+
33
+ /* ---- UI ---- */
34
+ --rmx-placeholder: #94a3b8;
35
+ --rmx-modal-bg: #ffffff;
36
+ --rmx-modal-overlay: rgba(15, 23, 42, 0.45);
37
+ --rmx-statusbar-bg: #f8fafc;
38
+ --rmx-statusbar-text: #94a3b8;
39
+
40
+ /* ---- Shadows ---- */
41
+ --rmx-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05);
42
+ --rmx-shadow-md: 0 4px 16px rgba(15, 23, 42, 0.08), 0 1px 3px rgba(15, 23, 42, 0.06);
43
+ --rmx-shadow-lg: 0 12px 40px rgba(15, 23, 42, 0.12), 0 4px 12px rgba(15, 23, 42, 0.06);
44
+ --rmx-shadow-float: 0 8px 30px rgba(15, 23, 42, 0.10), 0 2px 8px rgba(15, 23, 42, 0.06);
45
+
46
+ /* ---- Typography ---- */
47
+ --rmx-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
48
+ --rmx-font-size: 13px;
49
+ --rmx-content-font-size: 16px;
50
+ --rmx-content-line-height: 1.7;
51
+
52
+ /* ---- Spacing & Shape ---- */
53
+ --rmx-radius: 8px;
54
+ --rmx-radius-sm: 6px;
55
+ --rmx-radius-inner: 6px;
56
+ --rmx-spacing-xs: 4px;
57
+ --rmx-spacing-sm: 8px;
58
+ --rmx-spacing-md: 12px;
59
+
60
+ /* ---- Autosave ---- */
61
+ --rmx-save-saved: #22c55e;
62
+ --rmx-save-saving: #f59e0b;
63
+ --rmx-save-unsaved: #94a3b8;
64
+ --rmx-save-error: #ef4444;
65
+ --rmx-recovery-bg: #fef3c7;
66
+ --rmx-recovery-text: #92400e;
67
+ --rmx-recovery-border: #fcd34d;
68
+
69
+ /* ---- Content Overrides (Item 12) ---- */
70
+ --rmx-pre-bg: #f8fafc;
71
+ --rmx-code-bg: rgba(99, 102, 241, 0.08);
72
+ --rmx-blockquote-bg: linear-gradient(135deg, rgba(99, 102, 241, 0.04), rgba(99, 102, 241, 0.02));
73
+ --rmx-table-th-bg: #f8fafc;
74
+ --rmx-find-highlight-bg: #fef3c7;
75
+ --rmx-find-highlight-text: #92400e;
76
+ --rmx-find-current-bg: #f97316;
77
+ --rmx-find-current-text: #ffffff;
78
+ --rmx-link-decoration: rgba(99, 102, 241, 0.35);
79
+ --rmx-code-editor-bg: #ffffff;
80
+ --rmx-code-gutter-bg: #f8fafc;
81
+ --rmx-code-gutter-border: #e2e8f0;
82
+ --rmx-code-caret: #1e293b;
83
+
84
+ /* ---- Transitions ---- */
85
+ --rmx-transition-fast: 0.12s ease;
86
+ --rmx-transition-normal: 0.18s ease;
87
+
88
+ /* ---- Root element styles ---- */
89
+ font-family: var(--rmx-font-family);
90
+ font-size: var(--rmx-font-size);
91
+ color: var(--rmx-text);
92
+ border: 1px solid var(--rmx-border);
93
+ border-radius: var(--rmx-radius);
94
+ display: flex;
95
+ flex-direction: column;
96
+ background: var(--rmx-bg);
97
+ box-sizing: border-box;
98
+ position: relative;
99
+ overflow: hidden;
100
+ box-shadow: var(--rmx-shadow-sm);
101
+ -webkit-font-smoothing: antialiased;
102
+ -moz-osx-font-smoothing: grayscale;
103
+ }
104
+
105
+ .rmx-editor *, .rmx-editor *::before, .rmx-editor *::after {
106
+ box-sizing: inherit;
107
+ }
108
+
109
+ /* ====== Skip Navigation Link ====== */
110
+ .rmx-skip-link {
111
+ position: absolute;
112
+ left: -9999px;
113
+ top: auto;
114
+ width: 1px;
115
+ height: 1px;
116
+ overflow: hidden;
117
+ z-index: 100001;
118
+ padding: 8px 16px;
119
+ background: var(--rmx-primary);
120
+ color: #fff;
121
+ font-size: 14px;
122
+ font-weight: 500;
123
+ text-decoration: none;
124
+ border-radius: 0 0 var(--rmx-radius-sm) var(--rmx-radius-sm);
125
+ white-space: nowrap;
126
+ }
127
+
128
+ .rmx-skip-link:focus {
129
+ position: absolute;
130
+ left: 8px;
131
+ top: 0;
132
+ width: auto;
133
+ height: auto;
134
+ overflow: visible;
135
+ outline: 2px solid var(--rmx-focus-ring);
136
+ outline-offset: 2px;
137
+ }
138
+
139
+ /* ====== Fullscreen ====== */
140
+ .rmx-editor.rmx-fullscreen {
141
+ position: fixed;
142
+ inset: 0;
143
+ z-index: 99999;
144
+ border-radius: 0;
145
+ border: none;
146
+ box-shadow: none;
147
+ }
148
+
149
+ .rmx-editor.rmx-fullscreen .rmx-editor-body {
150
+ flex: 1;
151
+ display: flex;
152
+ flex-direction: column;
153
+ min-height: 0;
154
+ }
155
+
156
+ .rmx-editor.rmx-fullscreen .rmx-edit-area {
157
+ flex: 1;
158
+ display: flex;
159
+ flex-direction: column;
160
+ overflow: visible;
161
+ }
162
+
163
+ .rmx-editor.rmx-fullscreen .rmx-content {
164
+ flex: 1;
165
+ min-height: 0 !important;
166
+ max-height: none !important;
167
+ height: auto !important;
168
+ overflow-y: auto;
169
+ }
170
+
171
+ /* ====== Menu Bar ====== */
172
+ .rmx-menubar {
173
+ display: flex;
174
+ align-items: center;
175
+ background: var(--rmx-toolbar-bg);
176
+ border-bottom: 1px solid var(--rmx-toolbar-border);
177
+ padding: 0 4px;
178
+ flex-shrink: 0;
179
+ position: relative;
180
+ z-index: 21;
181
+ }
182
+
183
+ .rmx-menubar-dropdown {
184
+ position: relative;
185
+ }
186
+
187
+ .rmx-menubar-trigger {
188
+ display: inline-flex;
189
+ align-items: center;
190
+ padding: 6px 10px;
191
+ border: none;
192
+ border-radius: var(--rmx-radius-inner);
193
+ background: transparent;
194
+ color: var(--rmx-text);
195
+ cursor: pointer;
196
+ font-size: var(--rmx-font-size);
197
+ font-family: var(--rmx-font-family);
198
+ line-height: 1;
199
+ white-space: nowrap;
200
+ transition: background var(--rmx-transition-fast);
201
+ margin: 2px 0;
202
+ }
203
+
204
+ .rmx-menubar-trigger:hover,
205
+ .rmx-menubar-trigger.rmx-open {
206
+ background: var(--rmx-toolbar-button-hover);
207
+ }
208
+
209
+ .rmx-menubar-menu {
210
+ position: absolute;
211
+ top: 100%;
212
+ left: 0;
213
+ margin-top: 2px;
214
+ min-width: 200px;
215
+ max-height: 400px;
216
+ overflow-y: auto;
217
+ background: var(--rmx-modal-bg);
218
+ border: 1px solid var(--rmx-border);
219
+ border-radius: var(--rmx-radius);
220
+ box-shadow: var(--rmx-shadow-md);
221
+ z-index: 10000;
222
+ padding: 4px;
223
+ animation: rmx-fade-in 0.1s ease;
224
+ }
225
+
226
+ .rmx-menubar-item {
227
+ display: flex;
228
+ align-items: center;
229
+ width: 100%;
230
+ padding: 6px 8px;
231
+ border: none;
232
+ border-radius: var(--rmx-radius-inner);
233
+ background: transparent;
234
+ color: var(--rmx-text);
235
+ cursor: pointer;
236
+ text-align: left;
237
+ font-size: var(--rmx-font-size);
238
+ font-family: var(--rmx-font-family);
239
+ gap: 8px;
240
+ transition: background var(--rmx-transition-fast);
241
+ line-height: 1.4;
242
+ }
243
+
244
+ .rmx-menubar-item:hover {
245
+ background: var(--rmx-toolbar-button-hover);
246
+ }
247
+
248
+ .rmx-menubar-item.rmx-active {
249
+ color: var(--rmx-toolbar-icon-active);
250
+ }
251
+
252
+ .rmx-menubar-item-icon {
253
+ display: inline-flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ width: 18px;
257
+ height: 18px;
258
+ flex-shrink: 0;
259
+ color: var(--rmx-toolbar-icon);
260
+ }
261
+
262
+ .rmx-menubar-item.rmx-active .rmx-menubar-item-icon {
263
+ color: var(--rmx-toolbar-icon-active);
264
+ }
265
+
266
+ .rmx-menubar-item-label {
267
+ flex: 1;
268
+ white-space: nowrap;
269
+ }
270
+
271
+ .rmx-menubar-shortcut {
272
+ margin-left: auto;
273
+ padding-left: 24px;
274
+ font-size: 0.85em;
275
+ color: var(--rmx-text-secondary);
276
+ white-space: nowrap;
277
+ }
278
+
279
+ .rmx-menubar-separator {
280
+ height: 1px;
281
+ background: var(--rmx-border);
282
+ margin: 4px 0;
283
+ opacity: 0.6;
284
+ }
285
+
286
+ .rmx-menubar-submenu-wrapper {
287
+ position: relative;
288
+ }
289
+
290
+ .rmx-menubar-submenu-trigger {
291
+ display: flex;
292
+ align-items: center;
293
+ }
294
+
295
+ .rmx-menubar-submenu-arrow {
296
+ margin-left: auto;
297
+ padding-left: 8px;
298
+ display: inline-flex;
299
+ align-items: center;
300
+ color: var(--rmx-text-secondary);
301
+ }
302
+
303
+ .rmx-menubar-submenu {
304
+ position: absolute;
305
+ left: 100%;
306
+ top: -4px;
307
+ margin-left: 2px;
308
+ }
309
+
310
+ /* ====== Toolbar ====== */
311
+ .rmx-toolbar {
312
+ background: var(--rmx-toolbar-bg);
313
+ border-bottom: 1px solid var(--rmx-toolbar-border);
314
+ padding: 6px 10px;
315
+ flex-shrink: 0;
316
+ position: relative;
317
+ z-index: 20;
318
+ }
319
+
320
+ .rmx-toolbar-inner {
321
+ display: flex;
322
+ align-items: center;
323
+ flex-wrap: nowrap;
324
+ overflow: hidden;
325
+ gap: 1px;
326
+ }
327
+
328
+ /* ---- Toolbar Button ---- */
329
+ /* Per-item scoped variables (--rmx-tb-*) override globals when set via inline style */
330
+ .rmx-toolbar-btn {
331
+ display: inline-flex;
332
+ align-items: center;
333
+ justify-content: center;
334
+ min-width: var(--rmx-tb-size, 32px);
335
+ height: var(--rmx-tb-size, 32px);
336
+ padding: var(--rmx-tb-padding, 4px 6px);
337
+ border: var(--rmx-tb-border, 1px solid transparent);
338
+ border-radius: var(--rmx-tb-radius, var(--rmx-radius-inner));
339
+ background: var(--rmx-tb-bg, transparent);
340
+ color: var(--rmx-tb-color, var(--rmx-toolbar-icon));
341
+ opacity: var(--rmx-tb-opacity, 1);
342
+ cursor: pointer;
343
+ transition: background var(--rmx-transition-fast),
344
+ color var(--rmx-transition-fast),
345
+ border-color var(--rmx-transition-fast),
346
+ box-shadow var(--rmx-transition-fast);
347
+ font-size: var(--rmx-font-size);
348
+ line-height: 1;
349
+ white-space: nowrap;
350
+ }
351
+
352
+ .rmx-toolbar-btn:hover {
353
+ background: var(--rmx-tb-hover-bg, var(--rmx-toolbar-button-hover));
354
+ color: var(--rmx-tb-hover-color, var(--rmx-text));
355
+ }
356
+
357
+ .rmx-toolbar-btn.rmx-active {
358
+ background: var(--rmx-tb-active-bg, var(--rmx-toolbar-button-active));
359
+ color: var(--rmx-tb-active-color, var(--rmx-toolbar-icon-active));
360
+ }
361
+
362
+ /* #23 Focus-visible for toolbar buttons */
363
+ .rmx-toolbar-btn:focus-visible {
364
+ outline: 2px solid var(--rmx-focus-ring, #2563eb);
365
+ outline-offset: -2px;
366
+ border-radius: 4px;
367
+ }
368
+
369
+ .rmx-toolbar-btn:disabled, .rmx-toolbar-btn.rmx-disabled {
370
+ opacity: 0.35;
371
+ cursor: not-allowed;
372
+ }
373
+
374
+ .rmx-toolbar-separator {
375
+ width: var(--rmx-tb-sep-width, 1px);
376
+ height: var(--rmx-tb-sep-height, 18px);
377
+ background: var(--rmx-tb-sep-color, var(--rmx-border));
378
+ margin: var(--rmx-tb-sep-margin, 0 6px);
379
+ flex-shrink: 0;
380
+ opacity: 0.6;
381
+ }
382
+
383
+ /* ====== Toolbar Dropdown ====== */
384
+ .rmx-toolbar-dropdown {
385
+ position: relative;
386
+ display: inline-flex;
387
+ }
388
+
389
+ .rmx-toolbar-dropdown-btn {
390
+ display: inline-flex;
391
+ align-items: center;
392
+ gap: 4px;
393
+ padding: 4px 8px;
394
+ min-width: auto;
395
+ }
396
+
397
+ .rmx-toolbar-dropdown-label {
398
+ max-width: 100px;
399
+ overflow: hidden;
400
+ text-overflow: ellipsis;
401
+ white-space: nowrap;
402
+ font-size: var(--rmx-font-size);
403
+ }
404
+
405
+ .rmx-toolbar-dropdown-menu {
406
+ position: absolute;
407
+ top: 100%;
408
+ left: 0;
409
+ margin-top: 4px;
410
+ min-width: 140px;
411
+ max-height: 300px;
412
+ overflow-y: auto;
413
+ background: var(--rmx-modal-bg);
414
+ border: 1px solid var(--rmx-border);
415
+ border-radius: var(--rmx-radius);
416
+ box-shadow: var(--rmx-shadow-md);
417
+ z-index: 10000;
418
+ padding: 4px;
419
+ animation: rmx-fade-in 0.1s ease;
420
+ }
421
+
422
+ .rmx-toolbar-dropdown-item {
423
+ display: block;
424
+ width: 100%;
425
+ padding: 7px 12px;
426
+ border: none;
427
+ border-radius: var(--rmx-radius-inner);
428
+ background: transparent;
429
+ color: var(--rmx-text);
430
+ cursor: pointer;
431
+ text-align: left;
432
+ font-size: var(--rmx-font-size);
433
+ transition: background var(--rmx-transition-fast);
434
+ }
435
+
436
+ .rmx-toolbar-dropdown-item:hover {
437
+ background: var(--rmx-toolbar-button-hover);
438
+ }
439
+
440
+ .rmx-toolbar-dropdown-btn:focus-visible,
441
+ .rmx-toolbar-dropdown-item:focus-visible {
442
+ outline: 2px solid var(--rmx-focus-ring, #2563eb);
443
+ outline-offset: -2px;
444
+ border-radius: 4px;
445
+ }
446
+
447
+ .rmx-toolbar-dropdown-item.rmx-active {
448
+ background: var(--rmx-toolbar-button-active);
449
+ color: var(--rmx-toolbar-icon-active);
450
+ font-weight: 500;
451
+ }
452
+
453
+ /* ====== Color Picker ====== */
454
+ .rmx-toolbar-colorpicker {
455
+ position: relative;
456
+ display: inline-flex;
457
+ }
458
+
459
+ .rmx-color-palette {
460
+ position: absolute;
461
+ top: 100%;
462
+ left: 0;
463
+ margin-top: 4px;
464
+ background: var(--rmx-modal-bg);
465
+ border: 1px solid var(--rmx-border);
466
+ border-radius: var(--rmx-radius);
467
+ box-shadow: var(--rmx-shadow-md);
468
+ z-index: 10000;
469
+ padding: 10px;
470
+ animation: rmx-fade-in 0.1s ease;
471
+ }
472
+
473
+ .rmx-color-grid {
474
+ display: grid;
475
+ grid-template-columns: repeat(10, 1fr);
476
+ gap: 3px;
477
+ margin-bottom: 10px;
478
+ }
479
+
480
+ .rmx-color-swatch {
481
+ width: 22px;
482
+ height: 22px;
483
+ border: 1px solid rgba(0, 0, 0, 0.1);
484
+ border-radius: 4px;
485
+ cursor: pointer;
486
+ padding: 0;
487
+ transition: transform var(--rmx-transition-fast), box-shadow var(--rmx-transition-fast);
488
+ }
489
+
490
+ .rmx-color-swatch:hover {
491
+ transform: scale(1.15);
492
+ z-index: 1;
493
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
494
+ }
495
+
496
+ .rmx-color-swatch:focus-visible {
497
+ outline: 2px solid var(--rmx-focus-ring, #2563eb);
498
+ outline-offset: -2px;
499
+ border-radius: 4px;
500
+ }
501
+
502
+ .rmx-color-swatch.rmx-active {
503
+ outline: 2px solid var(--rmx-focus-ring);
504
+ outline-offset: 1px;
505
+ }
506
+
507
+ .rmx-color-custom {
508
+ padding-top: 8px;
509
+ border-top: 1px solid var(--rmx-border-subtle);
510
+ display: flex;
511
+ align-items: center;
512
+ gap: 8px;
513
+ font-size: 12px;
514
+ color: var(--rmx-text-secondary);
515
+ }
516
+
517
+ .rmx-color-custom input[type="color"] {
518
+ width: 28px;
519
+ height: 24px;
520
+ padding: 0;
521
+ border: 1px solid var(--rmx-border);
522
+ border-radius: 4px;
523
+ cursor: pointer;
524
+ }
525
+
526
+ /* ====== Edit Area ====== */
527
+ .rmx-edit-area {
528
+ flex: 1;
529
+ position: relative;
530
+ overflow: hidden;
531
+ z-index: 1;
532
+ }
533
+
534
+ .rmx-content {
535
+ padding: 20px 24px;
536
+ outline: none;
537
+ font-size: var(--rmx-content-font-size);
538
+ line-height: var(--rmx-content-line-height);
539
+ color: var(--rmx-text);
540
+ overflow-y: auto;
541
+ word-wrap: break-word;
542
+ overflow-wrap: break-word;
543
+ }
544
+
545
+ /* Placeholder */
546
+ .rmx-content.rmx-empty::before {
547
+ content: attr(data-placeholder);
548
+ color: var(--rmx-placeholder);
549
+ pointer-events: none;
550
+ position: absolute;
551
+ font-style: normal;
552
+ opacity: 0.7;
553
+ }
554
+
555
+ /* Drag over indicator */
556
+ .rmx-content.rmx-drag-over {
557
+ background-color: rgba(99, 102, 241, 0.04);
558
+ outline: 2px dashed var(--rmx-primary);
559
+ outline-offset: -2px;
560
+ }
561
+
562
+ /* ====== Drag & Drop ====== */
563
+
564
+ /* Drop indicator line — shows where content will land */
565
+ .rmx-drop-indicator {
566
+ position: absolute;
567
+ left: 12px;
568
+ right: 12px;
569
+ height: 2px;
570
+ background: var(--rmx-primary);
571
+ border-radius: 1px;
572
+ pointer-events: none;
573
+ z-index: 50;
574
+ transition: top 0.08s ease;
575
+ }
576
+
577
+ .rmx-drop-indicator::before,
578
+ .rmx-drop-indicator::after {
579
+ content: '';
580
+ position: absolute;
581
+ top: -3px;
582
+ width: 8px;
583
+ height: 8px;
584
+ background: var(--rmx-primary);
585
+ border-radius: 50%;
586
+ }
587
+
588
+ .rmx-drop-indicator::before {
589
+ left: -4px;
590
+ }
591
+
592
+ .rmx-drop-indicator::after {
593
+ right: -4px;
594
+ }
595
+
596
+ /* Block being dragged — dimmed source */
597
+ .rmx-content .rmx-block-dragging {
598
+ opacity: 0.3;
599
+ transition: opacity 0.15s ease;
600
+ }
601
+
602
+ /* Ghost preview shown during drag */
603
+ .rmx-drag-ghost {
604
+ background: var(--rmx-bg, #ffffff);
605
+ border: 1px solid var(--rmx-primary);
606
+ border-radius: var(--rmx-radius-sm, 6px);
607
+ box-shadow: var(--rmx-shadow-md);
608
+ padding: 8px 14px;
609
+ max-width: 400px;
610
+ max-height: 80px;
611
+ overflow: hidden;
612
+ opacity: 0.92;
613
+ font-size: var(--rmx-content-font-size, 16px);
614
+ line-height: var(--rmx-content-line-height, 1.7);
615
+ }
616
+
617
+ /* Drop zone overlay — full editor overlay for external drags */
618
+ .rmx-drop-zone-overlay {
619
+ position: absolute;
620
+ inset: 0;
621
+ display: flex;
622
+ flex-direction: column;
623
+ align-items: center;
624
+ justify-content: center;
625
+ gap: 8px;
626
+ background: rgba(99, 102, 241, 0.06);
627
+ border: 2px dashed var(--rmx-primary);
628
+ border-radius: var(--rmx-radius-sm, 6px);
629
+ z-index: 40;
630
+ pointer-events: none;
631
+ animation: rmx-fade-in 0.15s ease;
632
+ }
633
+
634
+ .rmx-drop-zone-icon {
635
+ width: 40px;
636
+ height: 40px;
637
+ color: var(--rmx-primary);
638
+ opacity: 0.7;
639
+ }
640
+
641
+ .rmx-drop-zone-text {
642
+ font-size: 14px;
643
+ font-weight: 500;
644
+ color: var(--rmx-primary);
645
+ opacity: 0.8;
646
+ }
647
+
648
+ .rmx-drop-zone-hint {
649
+ font-size: 12px;
650
+ color: var(--rmx-text-secondary);
651
+ opacity: 0.7;
652
+ }
653
+
654
+ /* Block drag handle — grip icon on hover */
655
+ .rmx-block-drag-handle {
656
+ position: absolute;
657
+ display: flex;
658
+ align-items: center;
659
+ justify-content: center;
660
+ width: 20px;
661
+ height: 24px;
662
+ cursor: grab;
663
+ color: var(--rmx-text-secondary);
664
+ opacity: 0;
665
+ border-radius: 4px;
666
+ transition: opacity var(--rmx-transition-fast), background var(--rmx-transition-fast), color var(--rmx-transition-fast);
667
+ z-index: 30;
668
+ user-select: none;
669
+ -webkit-user-select: none;
670
+ }
671
+
672
+ .rmx-block-drag-handle:hover {
673
+ opacity: 1 !important;
674
+ background: var(--rmx-toolbar-button-hover);
675
+ color: var(--rmx-text);
676
+ }
677
+
678
+ .rmx-block-drag-handle:active {
679
+ cursor: grabbing;
680
+ background: var(--rmx-toolbar-button-active);
681
+ color: var(--rmx-toolbar-icon-active);
682
+ }
683
+
684
+ /* Show handle when hovering near it */
685
+ .rmx-block-drag-handle.rmx-visible {
686
+ opacity: 0.5;
687
+ }
688
+
689
+ /* ====== Content Styles ====== */
690
+ .rmx-content p {
691
+ margin: 0 0 0.75em 0;
692
+ }
693
+
694
+ .rmx-content h1, .rmx-content h2, .rmx-content h3,
695
+ .rmx-content h4, .rmx-content h5, .rmx-content h6 {
696
+ margin: 1.2em 0 0.5em 0;
697
+ font-weight: 650;
698
+ line-height: 1.3;
699
+ color: var(--rmx-text);
700
+ letter-spacing: -0.01em;
701
+ }
702
+
703
+ .rmx-content h1 { font-size: 2em; }
704
+ .rmx-content h2 { font-size: 1.55em; }
705
+ .rmx-content h3 { font-size: 1.25em; }
706
+ .rmx-content h4 { font-size: 1.1em; }
707
+ .rmx-content h5 { font-size: 1em; }
708
+ .rmx-content h6 { font-size: 0.9em; color: var(--rmx-text-secondary); }
709
+
710
+ .rmx-content a {
711
+ color: var(--rmx-primary);
712
+ text-decoration: underline;
713
+ text-decoration-color: rgba(99, 102, 241, 0.35);
714
+ text-underline-offset: 2px;
715
+ cursor: pointer;
716
+ transition: text-decoration-color var(--rmx-transition-fast), color var(--rmx-transition-fast);
717
+ }
718
+
719
+ .rmx-content a:hover {
720
+ color: var(--rmx-primary-hover);
721
+ text-decoration-color: var(--rmx-primary-hover);
722
+ }
723
+
724
+ .rmx-content blockquote {
725
+ margin: 1em 0;
726
+ padding: 10px 20px;
727
+ border-left: 3px solid var(--rmx-primary);
728
+ background: linear-gradient(135deg, rgba(99, 102, 241, 0.04), rgba(99, 102, 241, 0.02));
729
+ border-radius: 0 var(--rmx-radius-inner) var(--rmx-radius-inner) 0;
730
+ color: var(--rmx-text);
731
+ }
732
+
733
+ .rmx-content pre {
734
+ margin: 1em 0;
735
+ padding: 14px 18px;
736
+ background: #f8fafc;
737
+ border: 1px solid var(--rmx-border-subtle);
738
+ border-radius: var(--rmx-radius-inner);
739
+ overflow-x: auto;
740
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
741
+ font-size: 0.875em;
742
+ line-height: 1.6;
743
+ }
744
+
745
+ .rmx-content code {
746
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
747
+ font-size: 0.875em;
748
+ background: rgba(99, 102, 241, 0.06);
749
+ padding: 2px 5px;
750
+ border-radius: 3px;
751
+ }
752
+
753
+ .rmx-content pre code {
754
+ background: none;
755
+ padding: 0;
756
+ border-radius: 0;
757
+ }
758
+
759
+ /* ── Code Block Syntax Highlighting ── */
760
+ .rmx-content pre[data-language] {
761
+ position: relative;
762
+ }
763
+
764
+ .rmx-content pre .rmx-code-lang-label {
765
+ position: absolute;
766
+ top: 6px;
767
+ right: 10px;
768
+ font-size: 0.7em;
769
+ text-transform: uppercase;
770
+ letter-spacing: 0.05em;
771
+ color: var(--rmx-text-secondary, #94a3b8);
772
+ opacity: 0.6;
773
+ pointer-events: none;
774
+ user-select: none;
775
+ }
776
+
777
+ /* ── Line Numbers ── */
778
+ .rmx-content pre.rmx-has-line-numbers {
779
+ padding-left: 0;
780
+ }
781
+
782
+ .rmx-content pre .rmx-line-numbers {
783
+ display: inline-flex;
784
+ flex-direction: column;
785
+ text-align: right;
786
+ padding: 1em 0.75em 1em 1em;
787
+ margin-right: 1em;
788
+ border-right: 1px solid var(--rmx-border-subtle, #e2e8f0);
789
+ color: var(--rmx-text-secondary, #94a3b8);
790
+ opacity: 0.5;
791
+ user-select: none;
792
+ pointer-events: none;
793
+ min-width: 2em;
794
+ font-size: inherit;
795
+ line-height: inherit;
796
+ vertical-align: top;
797
+ }
798
+
799
+ .rmx-content pre .rmx-line-numbers .rmx-line-number {
800
+ display: block;
801
+ }
802
+
803
+ /* ── Copy-to-Clipboard Button ── */
804
+ .rmx-content pre {
805
+ position: relative;
806
+ }
807
+
808
+ .rmx-content pre .rmx-code-copy-btn {
809
+ position: absolute;
810
+ top: 6px;
811
+ right: 6px;
812
+ width: 28px;
813
+ height: 28px;
814
+ display: flex;
815
+ align-items: center;
816
+ justify-content: center;
817
+ border: 1px solid var(--rmx-border-subtle, #e2e8f0);
818
+ border-radius: 4px;
819
+ background: var(--rmx-bg, #ffffff);
820
+ color: var(--rmx-text-secondary, #94a3b8);
821
+ font-size: 14px;
822
+ cursor: pointer;
823
+ opacity: 0;
824
+ transition: opacity 0.15s ease, background 0.15s ease, color 0.15s ease;
825
+ z-index: 2;
826
+ line-height: 1;
827
+ padding: 0;
828
+ }
829
+
830
+ .rmx-content pre:hover .rmx-code-copy-btn {
831
+ opacity: 1;
832
+ }
833
+
834
+ .rmx-content pre .rmx-code-copy-btn:hover {
835
+ background: var(--rmx-bg-hover, #f1f5f9);
836
+ color: var(--rmx-text, #1e293b);
837
+ }
838
+
839
+ .rmx-content pre .rmx-code-copy-btn.rmx-code-copy-success {
840
+ opacity: 1;
841
+ color: #22c55e;
842
+ border-color: #22c55e;
843
+ }
844
+
845
+ /* ── Inline Code Highlighting ── */
846
+ .rmx-content code[data-language]:not(pre code) {
847
+ background: rgba(99, 102, 241, 0.06);
848
+ padding: 2px 5px;
849
+ border-radius: 3px;
850
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
851
+ font-size: 0.875em;
852
+ }
853
+
854
+ /* Programming language syntax tokens (light theme defaults) */
855
+ .rmx-syn-comment { color: #6a737d; font-style: italic; }
856
+ .rmx-syn-keyword { color: #d73a49; font-weight: 600; }
857
+ .rmx-syn-string { color: #032f62; }
858
+ .rmx-syn-number { color: #005cc5; }
859
+ .rmx-syn-function { color: #6f42c1; }
860
+ .rmx-syn-operator { color: #d73a49; }
861
+ .rmx-syn-punctuation { color: #24292e; }
862
+ .rmx-syn-builtin { color: #005cc5; }
863
+ .rmx-syn-property { color: #005cc5; }
864
+ .rmx-syn-regex { color: #032f62; }
865
+ .rmx-syn-decorator { color: #e36209; }
866
+ .rmx-syn-type { color: #22863a; }
867
+ .rmx-syn-selector { color: #22863a; }
868
+ .rmx-syn-atrule { color: #d73a49; }
869
+ .rmx-syn-variable { color: #e36209; }
870
+ .rmx-syn-tag { color: #22863a; }
871
+ .rmx-syn-attr-name { color: #6f42c1; }
872
+ .rmx-syn-attr-value { color: #032f62; }
873
+ .rmx-syn-entity { color: #005cc5; }
874
+ .rmx-syn-doctype { color: #6a737d; }
875
+
876
+ .rmx-content hr {
877
+ border: none;
878
+ border-top: 1px solid var(--rmx-border);
879
+ margin: 1.5em 0;
880
+ }
881
+
882
+ .rmx-content ul, .rmx-content ol {
883
+ margin: 0.5em 0;
884
+ padding-left: 1.5em;
885
+ }
886
+
887
+ .rmx-content li {
888
+ margin: 0.3em 0;
889
+ }
890
+
891
+ /* Task List */
892
+ .rmx-content .rmx-task-list {
893
+ list-style: none;
894
+ padding-left: 0;
895
+ }
896
+
897
+ .rmx-content .rmx-task-list li {
898
+ display: flex;
899
+ align-items: flex-start;
900
+ gap: 8px;
901
+ }
902
+
903
+ .rmx-content .rmx-task-checkbox {
904
+ margin-top: 5px;
905
+ cursor: pointer;
906
+ width: 16px;
907
+ height: 16px;
908
+ flex-shrink: 0;
909
+ accent-color: var(--rmx-primary);
910
+ }
911
+
912
+ /* Images */
913
+ .rmx-content img {
914
+ max-width: 100%;
915
+ height: auto;
916
+ cursor: pointer;
917
+ border-radius: 4px;
918
+ }
919
+
920
+ .rmx-content img:hover {
921
+ outline: 2px solid var(--rmx-primary);
922
+ outline-offset: 2px;
923
+ }
924
+
925
+ /* Tables */
926
+ .rmx-content table.rmx-table {
927
+ width: 100%;
928
+ border-collapse: collapse;
929
+ margin: 1em 0;
930
+ border-radius: var(--rmx-radius-inner);
931
+ overflow: hidden;
932
+ }
933
+
934
+ .rmx-content table.rmx-table td,
935
+ .rmx-content table.rmx-table th {
936
+ border: 1px solid var(--rmx-border);
937
+ padding: 10px 14px;
938
+ min-width: 60px;
939
+ vertical-align: top;
940
+ }
941
+
942
+ .rmx-content table.rmx-table th {
943
+ background: var(--rmx-statusbar-bg);
944
+ font-weight: 600;
945
+ color: var(--rmx-text);
946
+ font-size: 0.92em;
947
+ text-transform: none;
948
+ }
949
+
950
+ .rmx-content table.rmx-table td:focus,
951
+ .rmx-content table.rmx-table th:focus {
952
+ outline: 2px solid var(--rmx-primary);
953
+ outline-offset: -2px;
954
+ }
955
+
956
+ /* Sticky header row */
957
+ .rmx-content table.rmx-table thead th {
958
+ position: sticky;
959
+ top: 0;
960
+ z-index: 2;
961
+ }
962
+
963
+ /* Sortable columns */
964
+ .rmx-content table.rmx-table th.rmx-sortable {
965
+ cursor: pointer;
966
+ user-select: none;
967
+ }
968
+
969
+ .rmx-content table.rmx-table th.rmx-sortable:hover {
970
+ background: var(--rmx-toolbar-button-hover);
971
+ }
972
+
973
+ .rmx-content table.rmx-table th[data-sort-dir]::after {
974
+ margin-left: 4px;
975
+ font-size: 0.75em;
976
+ opacity: 0.7;
977
+ }
978
+
979
+ .rmx-content table.rmx-table th[data-sort-dir="asc"]::after {
980
+ content: "\25B2";
981
+ }
982
+
983
+ .rmx-content table.rmx-table th[data-sort-dir="desc"]::after {
984
+ content: "\25BC";
985
+ }
986
+
987
+ .rmx-content table.rmx-table th[data-sort-priority]::before {
988
+ content: attr(data-sort-priority);
989
+ font-size: 0.6em;
990
+ vertical-align: super;
991
+ margin-right: 2px;
992
+ opacity: 0.5;
993
+ }
994
+
995
+ /* Column resize handles */
996
+ .rmx-col-resize-handle {
997
+ position: absolute;
998
+ cursor: col-resize;
999
+ background: transparent;
1000
+ z-index: 3;
1001
+ transition: background 0.15s;
1002
+ }
1003
+
1004
+ .rmx-col-resize-handle:hover {
1005
+ background: var(--rmx-primary);
1006
+ opacity: 0.4;
1007
+ }
1008
+
1009
+ .rmx-row-resize-handle {
1010
+ position: absolute;
1011
+ cursor: row-resize;
1012
+ background: transparent;
1013
+ z-index: 3;
1014
+ transition: background 0.15s;
1015
+ }
1016
+
1017
+ .rmx-row-resize-handle:hover {
1018
+ background: var(--rmx-primary);
1019
+ opacity: 0.4;
1020
+ }
1021
+
1022
+ .rmx-table-resizing {
1023
+ user-select: none;
1024
+ }
1025
+
1026
+ /* Filter UI */
1027
+ .rmx-filter-btn {
1028
+ position: absolute;
1029
+ right: 4px;
1030
+ top: 50%;
1031
+ transform: translateY(-50%);
1032
+ cursor: pointer;
1033
+ font-size: 9px;
1034
+ opacity: 0.4;
1035
+ padding: 2px;
1036
+ line-height: 1;
1037
+ transition: opacity var(--rmx-transition-fast);
1038
+ }
1039
+
1040
+ .rmx-filter-btn:hover,
1041
+ .rmx-filter-btn.rmx-filter-active {
1042
+ opacity: 1;
1043
+ color: var(--rmx-primary);
1044
+ }
1045
+
1046
+ .rmx-filter-dropdown {
1047
+ position: absolute;
1048
+ top: 100%;
1049
+ right: 0;
1050
+ z-index: 10;
1051
+ background: var(--rmx-modal-bg);
1052
+ border: 1px solid var(--rmx-border);
1053
+ border-radius: var(--rmx-radius-inner);
1054
+ box-shadow: var(--rmx-shadow-md);
1055
+ padding: 6px;
1056
+ display: flex;
1057
+ gap: 4px;
1058
+ min-width: 140px;
1059
+ }
1060
+
1061
+ .rmx-filter-input {
1062
+ flex: 1;
1063
+ padding: 4px 6px;
1064
+ font-size: 12px;
1065
+ border: 1px solid var(--rmx-border);
1066
+ border-radius: var(--rmx-radius-inner);
1067
+ background: var(--rmx-bg);
1068
+ color: var(--rmx-text);
1069
+ outline: none;
1070
+ }
1071
+
1072
+ .rmx-filter-input:focus {
1073
+ border-color: var(--rmx-primary);
1074
+ }
1075
+
1076
+ .rmx-filter-clear-btn {
1077
+ padding: 4px 8px;
1078
+ font-size: 11px;
1079
+ background: var(--rmx-toolbar-button-hover);
1080
+ border: 1px solid var(--rmx-border);
1081
+ border-radius: var(--rmx-radius-inner);
1082
+ cursor: pointer;
1083
+ color: var(--rmx-text-secondary);
1084
+ }
1085
+
1086
+ .rmx-filter-clear-btn:hover {
1087
+ color: var(--rmx-text);
1088
+ }
1089
+
1090
+ /* Hidden rows (filtered out) */
1091
+ .rmx-row-hidden {
1092
+ display: none;
1093
+ }
1094
+
1095
+ /* Formula cells */
1096
+ .rmx-content table.rmx-table td[data-formula],
1097
+ .rmx-content table.rmx-table th[data-formula] {
1098
+ background: rgba(99, 102, 241, 0.04);
1099
+ }
1100
+
1101
+ /* Embeds */
1102
+ .rmx-content .rmx-embed-wrapper {
1103
+ position: relative;
1104
+ width: 100%;
1105
+ padding-bottom: 56.25%; /* 16:9 */
1106
+ margin: 1em 0;
1107
+ background: #000;
1108
+ border-radius: var(--rmx-radius-inner);
1109
+ overflow: hidden;
1110
+ }
1111
+
1112
+ .rmx-content .rmx-embed-wrapper iframe {
1113
+ position: absolute;
1114
+ top: 0;
1115
+ left: 0;
1116
+ width: 100%;
1117
+ height: 100%;
1118
+ border: none;
1119
+ }
1120
+
1121
+ /* Find highlights */
1122
+ .rmx-content mark.rmx-find-highlight {
1123
+ background: #fef08a;
1124
+ padding: 1px 2px;
1125
+ border-radius: 2px;
1126
+ }
1127
+
1128
+ .rmx-content mark.rmx-find-current {
1129
+ background: #f97316;
1130
+ color: white;
1131
+ padding: 1px 2px;
1132
+ border-radius: 2px;
1133
+ }
1134
+
1135
+ /* ====== Floating Toolbar ====== */
1136
+ .rmx-floating-toolbar {
1137
+ position: absolute;
1138
+ display: flex;
1139
+ gap: 1px;
1140
+ padding: 4px 6px;
1141
+ background: var(--rmx-modal-bg);
1142
+ border: 1px solid var(--rmx-border);
1143
+ border-radius: var(--rmx-radius);
1144
+ box-shadow: var(--rmx-shadow-float);
1145
+ z-index: 100;
1146
+ animation: rmx-scale-in 0.15s ease;
1147
+ will-change: transform;
1148
+ }
1149
+
1150
+ /* ====== Image Resize Handles ====== */
1151
+ .rmx-image-handles .rmx-handle-border {
1152
+ position: absolute;
1153
+ inset: 0;
1154
+ border: 2px solid var(--rmx-primary);
1155
+ border-radius: 4px;
1156
+ pointer-events: none;
1157
+ }
1158
+
1159
+ .rmx-image-handle {
1160
+ position: absolute;
1161
+ width: 10px;
1162
+ height: 10px;
1163
+ background: var(--rmx-primary);
1164
+ border: 2px solid white;
1165
+ border-radius: 50%;
1166
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
1167
+ }
1168
+
1169
+ .rmx-handle-nw { top: -5px; left: -5px; cursor: nw-resize; }
1170
+ .rmx-handle-ne { top: -5px; right: -5px; cursor: ne-resize; }
1171
+ .rmx-handle-sw { bottom: -5px; left: -5px; cursor: sw-resize; }
1172
+ .rmx-handle-se { bottom: -5px; right: -5px; cursor: se-resize; }
1173
+
1174
+ /* ====== Table Controls ====== */
1175
+ .rmx-table-controls {
1176
+ display: flex;
1177
+ gap: 2px;
1178
+ z-index: 50;
1179
+ }
1180
+
1181
+ .rmx-table-control-btn {
1182
+ padding: 3px 8px;
1183
+ font-size: 11px;
1184
+ background: var(--rmx-modal-bg);
1185
+ border: 1px solid var(--rmx-border);
1186
+ border-radius: var(--rmx-radius-inner);
1187
+ cursor: pointer;
1188
+ color: var(--rmx-text-secondary);
1189
+ box-shadow: var(--rmx-shadow-sm);
1190
+ transition: background var(--rmx-transition-fast), color var(--rmx-transition-fast);
1191
+ }
1192
+
1193
+ .rmx-table-control-btn:hover {
1194
+ background: var(--rmx-toolbar-button-hover);
1195
+ color: var(--rmx-text);
1196
+ }
1197
+
1198
+ .rmx-table-control-btn.rmx-danger {
1199
+ color: var(--rmx-danger);
1200
+ }
1201
+
1202
+ .rmx-table-control-btn.rmx-danger:hover {
1203
+ background: var(--rmx-danger-light);
1204
+ }
1205
+
1206
+ /* ====== Code Block Controls ====== */
1207
+ .rmx-codeblock-controls {
1208
+ font-family: var(--rmx-font-family);
1209
+ }
1210
+
1211
+ .rmx-codeblock-lang-btn {
1212
+ padding: 2px 8px;
1213
+ font-size: 11px;
1214
+ background: var(--rmx-modal-bg);
1215
+ border: 1px solid var(--rmx-border);
1216
+ border-radius: var(--rmx-radius-inner);
1217
+ cursor: pointer;
1218
+ color: var(--rmx-text-secondary);
1219
+ box-shadow: var(--rmx-shadow-sm);
1220
+ opacity: 0.7;
1221
+ transition: opacity var(--rmx-transition-fast), background var(--rmx-transition-fast);
1222
+ }
1223
+
1224
+ .rmx-codeblock-lang-btn:hover {
1225
+ opacity: 1;
1226
+ background: var(--rmx-toolbar-button-hover);
1227
+ color: var(--rmx-text);
1228
+ }
1229
+
1230
+ .rmx-codeblock-lang-dropdown {
1231
+ position: absolute;
1232
+ top: 100%;
1233
+ right: 0;
1234
+ margin-top: 4px;
1235
+ width: 180px;
1236
+ max-height: 240px;
1237
+ background: var(--rmx-modal-bg);
1238
+ border: 1px solid var(--rmx-border);
1239
+ border-radius: var(--rmx-radius);
1240
+ box-shadow: var(--rmx-shadow-md);
1241
+ overflow: hidden;
1242
+ display: flex;
1243
+ flex-direction: column;
1244
+ z-index: 100;
1245
+ }
1246
+
1247
+ .rmx-codeblock-lang-search {
1248
+ padding: 6px 8px;
1249
+ border: none;
1250
+ border-bottom: 1px solid var(--rmx-border);
1251
+ background: transparent;
1252
+ color: var(--rmx-text);
1253
+ font-size: 12px;
1254
+ outline: none;
1255
+ }
1256
+
1257
+ .rmx-codeblock-lang-search::placeholder {
1258
+ color: var(--rmx-text-secondary);
1259
+ }
1260
+
1261
+ .rmx-codeblock-lang-list {
1262
+ list-style: none;
1263
+ margin: 0;
1264
+ padding: 4px 0;
1265
+ overflow-y: auto;
1266
+ max-height: 200px;
1267
+ }
1268
+
1269
+ .rmx-codeblock-lang-option {
1270
+ display: block;
1271
+ width: 100%;
1272
+ text-align: left;
1273
+ padding: 4px 10px;
1274
+ font-size: 12px;
1275
+ border: none;
1276
+ background: none;
1277
+ color: var(--rmx-text);
1278
+ cursor: pointer;
1279
+ }
1280
+
1281
+ .rmx-codeblock-lang-option:hover {
1282
+ background: var(--rmx-toolbar-button-hover);
1283
+ }
1284
+
1285
+ .rmx-codeblock-lang-option.rmx-active {
1286
+ background: var(--rmx-primary);
1287
+ color: #fff;
1288
+ }
1289
+
1290
+ .rmx-codeblock-lang-empty {
1291
+ padding: 8px 10px;
1292
+ font-size: 12px;
1293
+ color: var(--rmx-text-secondary);
1294
+ text-align: center;
1295
+ }
1296
+
1297
+ /* ====== Status Bar ====== */
1298
+ .rmx-statusbar {
1299
+ display: flex;
1300
+ gap: 16px;
1301
+ padding: 6px 14px;
1302
+ background: var(--rmx-statusbar-bg);
1303
+ border-top: 1px solid var(--rmx-border-subtle);
1304
+ font-size: 11.5px;
1305
+ color: var(--rmx-statusbar-text);
1306
+ flex-shrink: 0;
1307
+ letter-spacing: 0.01em;
1308
+ }
1309
+
1310
+ .rmx-statusbar-item {
1311
+ display: inline-flex;
1312
+ align-items: center;
1313
+ gap: 4px;
1314
+ }
1315
+
1316
+ .rmx-statusbar-sep {
1317
+ width: 3px;
1318
+ height: 3px;
1319
+ border-radius: 50%;
1320
+ background: var(--rmx-statusbar-text);
1321
+ opacity: 0.5;
1322
+ flex-shrink: 0;
1323
+ }
1324
+
1325
+ .rmx-statusbar-top {
1326
+ border-top: none;
1327
+ border-bottom: 1px solid var(--rmx-border-subtle);
1328
+ }
1329
+
1330
+ /* Word Count Popover */
1331
+ .rmx-wordcount-popover {
1332
+ position: absolute;
1333
+ top: calc(100% + 6px);
1334
+ right: 0;
1335
+ z-index: 100;
1336
+ background: var(--rmx-modal-bg);
1337
+ border: 1px solid var(--rmx-border);
1338
+ border-radius: 8px;
1339
+ padding: 8px 4px;
1340
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
1341
+ min-width: 160px;
1342
+ font-size: 12.5px;
1343
+ }
1344
+
1345
+ .rmx-wordcount-popover-row {
1346
+ display: flex;
1347
+ justify-content: space-between;
1348
+ align-items: center;
1349
+ padding: 5px 12px;
1350
+ border-radius: 4px;
1351
+ }
1352
+
1353
+ .rmx-wordcount-popover-row:hover {
1354
+ background: var(--rmx-hover-bg);
1355
+ }
1356
+
1357
+ .rmx-wordcount-popover-label {
1358
+ color: var(--rmx-text-secondary);
1359
+ }
1360
+
1361
+ .rmx-wordcount-popover-value {
1362
+ font-weight: 600;
1363
+ font-variant-numeric: tabular-nums;
1364
+ color: var(--rmx-text);
1365
+ }
1366
+
1367
+ /* ====== Context Menu ====== */
1368
+ .rmx-context-menu {
1369
+ position: fixed;
1370
+ min-width: 190px;
1371
+ background: var(--rmx-modal-bg);
1372
+ border: 1px solid var(--rmx-border);
1373
+ border-radius: var(--rmx-radius);
1374
+ box-shadow: var(--rmx-shadow-lg);
1375
+ z-index: 10000;
1376
+ padding: 4px;
1377
+ animation: rmx-scale-in 0.12s ease;
1378
+ will-change: transform;
1379
+ }
1380
+
1381
+ .rmx-context-menu-item {
1382
+ display: flex;
1383
+ align-items: center;
1384
+ gap: 8px;
1385
+ width: 100%;
1386
+ padding: 7px 12px;
1387
+ border: none;
1388
+ background: transparent;
1389
+ color: var(--rmx-text);
1390
+ cursor: pointer;
1391
+ text-align: left;
1392
+ border-radius: var(--rmx-radius-inner);
1393
+ font-size: var(--rmx-font-size);
1394
+ transition: background var(--rmx-transition-fast);
1395
+ }
1396
+
1397
+ .rmx-context-menu-item:hover {
1398
+ background: var(--rmx-toolbar-button-hover);
1399
+ }
1400
+
1401
+ .rmx-context-menu-separator {
1402
+ height: 1px;
1403
+ background: var(--rmx-border-subtle);
1404
+ margin: 4px 0;
1405
+ }
1406
+
1407
+ /* ====== Modal ====== */
1408
+ .rmx-modal-overlay {
1409
+ position: fixed;
1410
+ inset: 0;
1411
+ background: var(--rmx-modal-overlay);
1412
+ display: flex;
1413
+ align-items: center;
1414
+ justify-content: center;
1415
+ z-index: 100000;
1416
+ animation: rmx-fade-in 0.15s ease;
1417
+ backdrop-filter: blur(4px);
1418
+ -webkit-backdrop-filter: blur(4px);
1419
+ }
1420
+
1421
+ .rmx-modal {
1422
+ background: var(--rmx-modal-bg);
1423
+ border-radius: 12px;
1424
+ width: 90%;
1425
+ box-shadow: var(--rmx-shadow-lg);
1426
+ animation: rmx-slide-up 0.2s ease;
1427
+ border: 1px solid var(--rmx-border);
1428
+ will-change: transform;
1429
+ }
1430
+
1431
+ .rmx-modal-header {
1432
+ display: flex;
1433
+ align-items: center;
1434
+ justify-content: space-between;
1435
+ padding: 18px 22px;
1436
+ border-bottom: 1px solid var(--rmx-border-subtle);
1437
+ }
1438
+
1439
+ .rmx-modal-title {
1440
+ margin: 0;
1441
+ font-size: 16px;
1442
+ font-weight: 600;
1443
+ letter-spacing: -0.01em;
1444
+ }
1445
+
1446
+ .rmx-modal-close {
1447
+ display: flex;
1448
+ align-items: center;
1449
+ justify-content: center;
1450
+ width: 30px;
1451
+ height: 30px;
1452
+ border: none;
1453
+ border-radius: var(--rmx-radius-inner);
1454
+ background: transparent;
1455
+ cursor: pointer;
1456
+ color: var(--rmx-text-secondary);
1457
+ transition: background var(--rmx-transition-fast), color var(--rmx-transition-fast);
1458
+ }
1459
+
1460
+ .rmx-modal-close:hover {
1461
+ background: var(--rmx-toolbar-button-hover);
1462
+ color: var(--rmx-text);
1463
+ }
1464
+
1465
+ .rmx-modal-close:focus-visible {
1466
+ outline: 2px solid var(--rmx-focus-ring, #2563eb);
1467
+ outline-offset: -2px;
1468
+ border-radius: 4px;
1469
+ }
1470
+
1471
+ .rmx-modal-body {
1472
+ padding: 22px;
1473
+ }
1474
+
1475
+ .rmx-modal-form {
1476
+ display: flex;
1477
+ flex-direction: column;
1478
+ gap: 14px;
1479
+ }
1480
+
1481
+ .rmx-form-group {
1482
+ display: flex;
1483
+ flex-direction: column;
1484
+ gap: 6px;
1485
+ }
1486
+
1487
+ .rmx-form-label {
1488
+ font-size: 13px;
1489
+ font-weight: 500;
1490
+ color: var(--rmx-text);
1491
+ }
1492
+
1493
+ .rmx-form-input {
1494
+ padding: 9px 12px;
1495
+ border: 1px solid var(--rmx-border);
1496
+ border-radius: var(--rmx-radius-inner);
1497
+ font-size: 14px;
1498
+ color: var(--rmx-text);
1499
+ background: var(--rmx-bg);
1500
+ outline: none;
1501
+ transition: border-color var(--rmx-transition-normal), box-shadow var(--rmx-transition-normal);
1502
+ font-family: var(--rmx-font-family);
1503
+ }
1504
+
1505
+ .rmx-form-input:focus {
1506
+ border-color: var(--rmx-primary);
1507
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
1508
+ }
1509
+
1510
+ .rmx-form-checkbox {
1511
+ display: flex;
1512
+ align-items: center;
1513
+ gap: 8px;
1514
+ font-size: 13px;
1515
+ cursor: pointer;
1516
+ }
1517
+
1518
+ .rmx-form-checkbox input[type="checkbox"] {
1519
+ accent-color: var(--rmx-primary);
1520
+ }
1521
+
1522
+ .rmx-form-hint {
1523
+ font-size: 12px;
1524
+ color: var(--rmx-text-secondary);
1525
+ margin: 0;
1526
+ }
1527
+
1528
+ .rmx-modal-actions {
1529
+ display: flex;
1530
+ justify-content: space-between;
1531
+ align-items: center;
1532
+ gap: 8px;
1533
+ padding-top: 10px;
1534
+ }
1535
+
1536
+ .rmx-modal-actions-right {
1537
+ display: flex;
1538
+ gap: 8px;
1539
+ margin-left: auto;
1540
+ }
1541
+
1542
+ /* ====== Buttons ====== */
1543
+ .rmx-btn {
1544
+ padding: 8px 16px;
1545
+ border: 1px solid var(--rmx-border);
1546
+ border-radius: var(--rmx-radius-inner);
1547
+ background: var(--rmx-bg);
1548
+ color: var(--rmx-text);
1549
+ cursor: pointer;
1550
+ font-size: 13px;
1551
+ font-weight: 500;
1552
+ font-family: var(--rmx-font-family);
1553
+ transition: background var(--rmx-transition-fast), border-color var(--rmx-transition-fast), box-shadow var(--rmx-transition-fast);
1554
+ }
1555
+
1556
+ /* #24 Focus-visible for buttons */
1557
+ .rmx-btn:focus-visible {
1558
+ outline: 2px solid var(--rmx-focus-ring, #2563eb);
1559
+ outline-offset: -2px;
1560
+ border-radius: 4px;
1561
+ }
1562
+
1563
+ .rmx-btn:hover {
1564
+ background: var(--rmx-toolbar-button-hover);
1565
+ border-color: var(--rmx-border);
1566
+ }
1567
+
1568
+ .rmx-btn-primary {
1569
+ background: var(--rmx-primary);
1570
+ color: white;
1571
+ border-color: var(--rmx-primary);
1572
+ }
1573
+
1574
+ .rmx-btn-primary:hover {
1575
+ background: var(--rmx-primary-hover);
1576
+ border-color: var(--rmx-primary-hover);
1577
+ }
1578
+
1579
+ .rmx-btn-primary:disabled {
1580
+ opacity: 0.5;
1581
+ cursor: not-allowed;
1582
+ }
1583
+
1584
+ .rmx-btn-danger {
1585
+ color: var(--rmx-danger);
1586
+ border-color: var(--rmx-danger);
1587
+ }
1588
+
1589
+ .rmx-btn-danger:hover {
1590
+ background: var(--rmx-danger-light);
1591
+ }
1592
+
1593
+ .rmx-btn-sm {
1594
+ padding: 5px 10px;
1595
+ font-size: 12px;
1596
+ }
1597
+
1598
+ .rmx-btn-upload {
1599
+ padding: 12px 24px;
1600
+ }
1601
+
1602
+ /* ====== Tabs ====== */
1603
+ .rmx-tabs {
1604
+ display: flex;
1605
+ gap: 0;
1606
+ border-bottom: 1px solid var(--rmx-border-subtle);
1607
+ margin-bottom: 18px;
1608
+ }
1609
+
1610
+ .rmx-tab {
1611
+ padding: 8px 16px;
1612
+ border: none;
1613
+ background: transparent;
1614
+ color: var(--rmx-text-secondary);
1615
+ cursor: pointer;
1616
+ font-size: 13px;
1617
+ font-weight: 500;
1618
+ border-bottom: 2px solid transparent;
1619
+ transition: color var(--rmx-transition-fast), border-color var(--rmx-transition-fast);
1620
+ }
1621
+
1622
+ .rmx-tab.rmx-active {
1623
+ color: var(--rmx-primary);
1624
+ border-bottom-color: var(--rmx-primary);
1625
+ }
1626
+
1627
+ .rmx-tab:focus-visible {
1628
+ outline: 2px solid var(--rmx-focus-ring, #2563eb);
1629
+ outline-offset: -2px;
1630
+ border-radius: 4px;
1631
+ }
1632
+
1633
+ .rmx-tab:hover {
1634
+ color: var(--rmx-text);
1635
+ }
1636
+
1637
+ /* ====== Upload Area ====== */
1638
+ .rmx-upload-area {
1639
+ text-align: center;
1640
+ padding: 28px;
1641
+ border: 2px dashed var(--rmx-border);
1642
+ border-radius: var(--rmx-radius);
1643
+ margin-bottom: 16px;
1644
+ transition: border-color var(--rmx-transition-fast), background var(--rmx-transition-fast);
1645
+ }
1646
+
1647
+ .rmx-upload-area:hover {
1648
+ border-color: var(--rmx-primary);
1649
+ background: rgba(99, 102, 241, 0.02);
1650
+ }
1651
+
1652
+ .rmx-upload-hint {
1653
+ font-size: 12px;
1654
+ color: var(--rmx-text-secondary);
1655
+ margin-top: 10px;
1656
+ }
1657
+
1658
+ /* ====== Table Picker ====== */
1659
+ .rmx-table-picker {
1660
+ text-align: center;
1661
+ }
1662
+
1663
+ .rmx-table-grid {
1664
+ display: inline-grid;
1665
+ grid-template-rows: repeat(10, 1fr);
1666
+ gap: 3px;
1667
+ padding: 4px;
1668
+ }
1669
+
1670
+ .rmx-table-grid-row {
1671
+ display: flex;
1672
+ gap: 3px;
1673
+ }
1674
+
1675
+ .rmx-table-grid-cell {
1676
+ width: 24px;
1677
+ height: 24px;
1678
+ border: 1px solid var(--rmx-border);
1679
+ border-radius: 4px;
1680
+ cursor: pointer;
1681
+ transition: background var(--rmx-transition-fast), border-color var(--rmx-transition-fast);
1682
+ }
1683
+
1684
+ .rmx-table-grid-cell.rmx-active {
1685
+ background: var(--rmx-primary-light);
1686
+ border-color: var(--rmx-primary);
1687
+ }
1688
+
1689
+ .rmx-table-grid-cell:hover {
1690
+ background: var(--rmx-toolbar-button-hover);
1691
+ }
1692
+
1693
+ .rmx-table-picker-info {
1694
+ margin-top: 8px;
1695
+ font-size: 12px;
1696
+ color: var(--rmx-text-secondary);
1697
+ }
1698
+
1699
+ /* ====== Source Code Textarea ====== */
1700
+ .rmx-source-textarea {
1701
+ width: 100%;
1702
+ min-height: 300px;
1703
+ padding: 14px;
1704
+ border: 1px solid var(--rmx-border);
1705
+ border-radius: var(--rmx-radius-inner);
1706
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
1707
+ font-size: 13px;
1708
+ line-height: 1.6;
1709
+ color: var(--rmx-text);
1710
+ background: var(--rmx-statusbar-bg);
1711
+ resize: vertical;
1712
+ outline: none;
1713
+ transition: border-color var(--rmx-transition-normal), box-shadow var(--rmx-transition-normal);
1714
+ }
1715
+
1716
+ .rmx-source-textarea:focus {
1717
+ border-color: var(--rmx-primary);
1718
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
1719
+ }
1720
+
1721
+ /* ====== Export Modal ====== */
1722
+ .rmx-export-options {
1723
+ display: flex;
1724
+ flex-direction: column;
1725
+ gap: 10px;
1726
+ }
1727
+
1728
+ .rmx-export-btn {
1729
+ display: flex;
1730
+ flex-direction: column;
1731
+ align-items: flex-start;
1732
+ padding: 14px 18px;
1733
+ text-align: left;
1734
+ width: 100%;
1735
+ border: 1px solid var(--rmx-border);
1736
+ border-radius: var(--rmx-radius-inner);
1737
+ background: var(--rmx-bg);
1738
+ color: var(--rmx-text);
1739
+ cursor: pointer;
1740
+ transition: background var(--rmx-transition-fast), border-color var(--rmx-transition-fast);
1741
+ }
1742
+
1743
+ .rmx-export-btn:hover {
1744
+ background: var(--rmx-toolbar-button-hover);
1745
+ border-color: var(--rmx-primary);
1746
+ }
1747
+
1748
+ .rmx-export-btn:disabled {
1749
+ opacity: 0.5;
1750
+ cursor: wait;
1751
+ }
1752
+
1753
+ .rmx-export-btn-label {
1754
+ font-weight: 600;
1755
+ font-size: 14px;
1756
+ }
1757
+
1758
+ .rmx-export-btn-hint {
1759
+ font-size: 12px;
1760
+ color: var(--rmx-text-secondary);
1761
+ margin-top: 2px;
1762
+ }
1763
+
1764
+ /* ====== Markdown Mode ====== */
1765
+ .rmx-content.rmx-markdown-mode {
1766
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
1767
+ font-size: 13px;
1768
+ line-height: 1.6;
1769
+ white-space: pre-wrap;
1770
+ word-wrap: break-word;
1771
+ }
1772
+
1773
+ /* ====== Find & Replace Panel ====== */
1774
+ .rmx-find-replace-panel {
1775
+ position: absolute;
1776
+ top: 0;
1777
+ right: 0;
1778
+ background: var(--rmx-modal-bg);
1779
+ border: 1px solid var(--rmx-border);
1780
+ border-radius: 0 0 0 var(--rmx-radius);
1781
+ box-shadow: var(--rmx-shadow-md);
1782
+ padding: 10px;
1783
+ z-index: 90;
1784
+ display: flex;
1785
+ flex-direction: column;
1786
+ gap: 6px;
1787
+ animation: rmx-fade-in 0.12s ease;
1788
+ }
1789
+
1790
+ .rmx-find-row {
1791
+ display: flex;
1792
+ align-items: center;
1793
+ gap: 4px;
1794
+ }
1795
+
1796
+ .rmx-find-input {
1797
+ width: 200px;
1798
+ padding: 5px 8px !important;
1799
+ font-size: 12px !important;
1800
+ }
1801
+
1802
+ .rmx-find-count {
1803
+ font-size: 11px;
1804
+ color: var(--rmx-text-secondary);
1805
+ min-width: 60px;
1806
+ text-align: center;
1807
+ }
1808
+
1809
+ .rmx-find-case {
1810
+ font-size: 11px !important;
1811
+ }
1812
+
1813
+ /* ====== Readonly Overlay ====== */
1814
+ .rmx-readonly-overlay {
1815
+ position: absolute;
1816
+ inset: 0;
1817
+ cursor: not-allowed;
1818
+ z-index: 5;
1819
+ }
1820
+
1821
+ /* ====== Command Palette ====== */
1822
+ .rmx-command-palette-overlay {
1823
+ position: fixed;
1824
+ inset: 0;
1825
+ background: var(--rmx-modal-overlay);
1826
+ display: flex;
1827
+ align-items: flex-start;
1828
+ justify-content: center;
1829
+ padding-top: 15vh;
1830
+ z-index: 100000;
1831
+ animation: rmx-fade-in 0.1s ease;
1832
+ backdrop-filter: blur(4px);
1833
+ -webkit-backdrop-filter: blur(4px);
1834
+ }
1835
+
1836
+ .rmx-command-palette {
1837
+ width: 90%;
1838
+ max-width: 520px;
1839
+ background: var(--rmx-modal-bg);
1840
+ border: 1px solid var(--rmx-border);
1841
+ border-radius: 12px;
1842
+ box-shadow: var(--rmx-shadow-lg);
1843
+ animation: rmx-slide-up 0.15s ease;
1844
+ overflow: hidden;
1845
+ }
1846
+
1847
+ .rmx-command-palette-input-wrap {
1848
+ display: flex;
1849
+ align-items: center;
1850
+ gap: 10px;
1851
+ padding: 14px 16px;
1852
+ border-bottom: 1px solid var(--rmx-border-subtle);
1853
+ }
1854
+
1855
+ .rmx-command-palette-search-icon {
1856
+ color: var(--rmx-text-secondary);
1857
+ flex-shrink: 0;
1858
+ font-size: 16px;
1859
+ }
1860
+
1861
+ .rmx-command-palette-input {
1862
+ flex: 1;
1863
+ border: none;
1864
+ outline: none;
1865
+ background: transparent;
1866
+ font-size: 15px;
1867
+ color: var(--rmx-text);
1868
+ font-family: var(--rmx-font-family);
1869
+ }
1870
+
1871
+ .rmx-command-palette-input::placeholder {
1872
+ color: var(--rmx-text-secondary);
1873
+ }
1874
+
1875
+ .rmx-command-palette-list {
1876
+ max-height: 360px;
1877
+ overflow-y: auto;
1878
+ padding: 6px;
1879
+ }
1880
+
1881
+ .rmx-command-palette-category {
1882
+ font-size: 11px;
1883
+ font-weight: 600;
1884
+ text-transform: uppercase;
1885
+ letter-spacing: 0.05em;
1886
+ color: var(--rmx-text-secondary);
1887
+ padding: 8px 10px 4px;
1888
+ user-select: none;
1889
+ }
1890
+
1891
+ .rmx-command-palette-item {
1892
+ display: flex;
1893
+ align-items: center;
1894
+ gap: 10px;
1895
+ padding: 8px 10px;
1896
+ border-radius: var(--rmx-radius-inner);
1897
+ cursor: pointer;
1898
+ transition: background var(--rmx-transition-fast);
1899
+ user-select: none;
1900
+ }
1901
+
1902
+ .rmx-command-palette-item:hover,
1903
+ .rmx-command-palette-item.rmx-active {
1904
+ background: var(--rmx-toolbar-button-hover);
1905
+ }
1906
+
1907
+ .rmx-command-palette-item-icon {
1908
+ display: flex;
1909
+ align-items: center;
1910
+ justify-content: center;
1911
+ width: 28px;
1912
+ height: 28px;
1913
+ border-radius: var(--rmx-radius-inner);
1914
+ background: var(--rmx-statusbar-bg);
1915
+ border: 1px solid var(--rmx-border-subtle);
1916
+ font-size: 12px;
1917
+ font-weight: 600;
1918
+ color: var(--rmx-text-secondary);
1919
+ flex-shrink: 0;
1920
+ }
1921
+
1922
+ .rmx-command-palette-item-text {
1923
+ flex: 1;
1924
+ min-width: 0;
1925
+ }
1926
+
1927
+ .rmx-command-palette-item-label {
1928
+ font-size: 13px;
1929
+ font-weight: 500;
1930
+ color: var(--rmx-text);
1931
+ }
1932
+
1933
+ .rmx-command-palette-item-desc {
1934
+ font-size: 11px;
1935
+ color: var(--rmx-text-secondary);
1936
+ }
1937
+
1938
+ .rmx-command-palette-shortcut {
1939
+ font-size: 11px;
1940
+ color: var(--rmx-text-secondary);
1941
+ background: var(--rmx-statusbar-bg);
1942
+ border: 1px solid var(--rmx-border-subtle);
1943
+ padding: 2px 6px;
1944
+ border-radius: 4px;
1945
+ font-family: var(--rmx-font-family);
1946
+ white-space: nowrap;
1947
+ flex-shrink: 0;
1948
+ }
1949
+
1950
+ .rmx-command-palette-empty {
1951
+ padding: 24px 10px;
1952
+ text-align: center;
1953
+ font-size: 13px;
1954
+ color: var(--rmx-text-secondary);
1955
+ }
1956
+
1957
+ .rmx-command-palette-hint {
1958
+ display: flex;
1959
+ align-items: center;
1960
+ justify-content: center;
1961
+ gap: 16px;
1962
+ padding: 8px 16px;
1963
+ border-top: 1px solid var(--rmx-border-subtle);
1964
+ font-size: 11px;
1965
+ color: var(--rmx-text-secondary);
1966
+ }
1967
+
1968
+ .rmx-command-palette-hint kbd {
1969
+ display: inline-flex;
1970
+ align-items: center;
1971
+ justify-content: center;
1972
+ min-width: 20px;
1973
+ height: 18px;
1974
+ padding: 0 4px;
1975
+ background: var(--rmx-statusbar-bg);
1976
+ border: 1px solid var(--rmx-border-subtle);
1977
+ border-radius: 3px;
1978
+ font-size: 10px;
1979
+ font-family: var(--rmx-font-family);
1980
+ }
1981
+
1982
+ /* ====== Animations ====== */
1983
+ @keyframes rmx-fade-in {
1984
+ from { opacity: 0; }
1985
+ to { opacity: 1; }
1986
+ }
1987
+
1988
+ @keyframes rmx-slide-up {
1989
+ from { opacity: 0; transform: translateY(8px) scale(0.98); }
1990
+ to { opacity: 1; transform: translateY(0) scale(1); }
1991
+ }
1992
+
1993
+ @keyframes rmx-scale-in {
1994
+ from { opacity: 0; transform: scale(0.95); }
1995
+ to { opacity: 1; transform: scale(1); }
1996
+ }
1997
+
1998
+ /* ====== Icon Styles ====== */
1999
+ .rmx-icon {
2000
+ flex-shrink: 0;
2001
+ }
2002
+
2003
+ /* ====== Floating Toolbar Touch Support ====== */
2004
+ .rmx-floating-toolbar-touch .rmx-toolbar-btn {
2005
+ min-width: 44px;
2006
+ min-height: 44px;
2007
+ }
2008
+
2009
+ .rmx-floating-toolbar-grip {
2010
+ display: none;
2011
+ align-items: center;
2012
+ justify-content: center;
2013
+ width: 100%;
2014
+ height: 12px;
2015
+ cursor: grab;
2016
+ color: var(--rmx-text-secondary);
2017
+ touch-action: none;
2018
+ user-select: none;
2019
+ -webkit-user-select: none;
2020
+ padding: 2px 0;
2021
+ }
2022
+
2023
+ .rmx-floating-toolbar-grip:active {
2024
+ cursor: grabbing;
2025
+ }
2026
+
2027
+ /* ====== Toolbar Overflow Menu ====== */
2028
+ .rmx-toolbar-overflow-container {
2029
+ position: relative;
2030
+ display: inline-flex;
2031
+ }
2032
+
2033
+ .rmx-toolbar-overflow-btn {
2034
+ font-size: 16px;
2035
+ font-weight: bold;
2036
+ letter-spacing: 2px;
2037
+ min-width: 36px;
2038
+ }
2039
+
2040
+ .rmx-toolbar-overflow-menu {
2041
+ position: absolute;
2042
+ top: 100%;
2043
+ right: 0;
2044
+ display: flex;
2045
+ flex-wrap: wrap;
2046
+ gap: 1px;
2047
+ padding: 6px;
2048
+ background: var(--rmx-modal-bg);
2049
+ border: 1px solid var(--rmx-border);
2050
+ border-radius: var(--rmx-radius);
2051
+ box-shadow: var(--rmx-shadow-float);
2052
+ z-index: 200;
2053
+ min-width: 200px;
2054
+ max-width: 320px;
2055
+ animation: rmx-scale-in 0.12s ease;
2056
+ }
2057
+
2058
+ /* ====== Touch Drag Ghost Preview ====== */
2059
+ .rmx-drag-ghost {
2060
+ background: var(--rmx-modal-bg);
2061
+ border: 1px solid var(--rmx-primary);
2062
+ border-radius: var(--rmx-radius);
2063
+ padding: 8px 12px;
2064
+ font-size: 13px;
2065
+ color: var(--rmx-text);
2066
+ box-shadow: var(--rmx-shadow-float);
2067
+ opacity: 0.9;
2068
+ white-space: nowrap;
2069
+ overflow: hidden;
2070
+ text-overflow: ellipsis;
2071
+ max-width: 300px;
2072
+ }
2073
+
2074
+ /* ====== Touch Drop Indicator ====== */
2075
+ .rmx-touch-drop-indicator {
2076
+ height: 3px;
2077
+ background: var(--rmx-primary);
2078
+ border-radius: 2px;
2079
+ margin: 2px 0;
2080
+ pointer-events: none;
2081
+ animation: rmx-fade-in 0.1s ease;
2082
+ }
2083
+
2084
+ /* ====== Pinch Zoom Reset Button ====== */
2085
+ .rmx-pinch-zoom-reset {
2086
+ position: absolute;
2087
+ top: 8px;
2088
+ right: 8px;
2089
+ z-index: 50;
2090
+ padding: 6px 12px;
2091
+ font-size: 12px;
2092
+ font-family: var(--rmx-font-family);
2093
+ color: var(--rmx-primary);
2094
+ background: var(--rmx-modal-bg);
2095
+ border: 1px solid var(--rmx-border);
2096
+ border-radius: var(--rmx-radius);
2097
+ box-shadow: var(--rmx-shadow-float);
2098
+ cursor: pointer;
2099
+ transition: background var(--rmx-transition-fast);
2100
+ }
2101
+
2102
+ .rmx-pinch-zoom-reset:hover {
2103
+ background: var(--rmx-toolbar-button-hover);
2104
+ }
2105
+
2106
+ /* ====== Responsive ====== */
2107
+ @media (max-width: 600px) {
2108
+ .rmx-toolbar-inner {
2109
+ gap: 1px;
2110
+ }
2111
+
2112
+ .rmx-toolbar-btn {
2113
+ min-width: 44px;
2114
+ min-height: 44px;
2115
+ padding: 6px;
2116
+ }
2117
+
2118
+ .rmx-toolbar-dropdown-label {
2119
+ max-width: 60px;
2120
+ }
2121
+
2122
+ .rmx-content {
2123
+ padding: 14px;
2124
+ }
2125
+
2126
+ .rmx-modal {
2127
+ width: 95%;
2128
+ }
2129
+
2130
+ .rmx-find-input {
2131
+ width: 120px;
2132
+ }
2133
+
2134
+ /* Context menu items larger for touch */
2135
+ .rmx-context-menu-item {
2136
+ min-height: 44px;
2137
+ padding: 10px 16px;
2138
+ font-size: 15px;
2139
+ }
2140
+
2141
+ /* Floating toolbar mobile positioning */
2142
+ .rmx-floating-toolbar {
2143
+ padding: 6px 8px;
2144
+ gap: 2px;
2145
+ }
2146
+
2147
+ .rmx-floating-toolbar .rmx-toolbar-btn {
2148
+ min-width: 44px;
2149
+ min-height: 44px;
2150
+ }
2151
+
2152
+ /* Show the grip handle on mobile */
2153
+ .rmx-floating-toolbar-grip {
2154
+ display: flex;
2155
+ }
2156
+ }
2157
+
2158
+ /* ====== Touch-specific: Coarse pointer (touchscreens) ====== */
2159
+ @media (pointer: coarse) {
2160
+ /* Larger toolbar buttons for touch */
2161
+ .rmx-toolbar-btn {
2162
+ min-width: 44px;
2163
+ min-height: 44px;
2164
+ }
2165
+
2166
+ /* Larger drag handle for touch */
2167
+ .rmx-block-drag-handle,
2168
+ .rmx-block-drag-handle-touch {
2169
+ width: 44px;
2170
+ height: 44px;
2171
+ left: -44px;
2172
+ }
2173
+
2174
+ .rmx-block-drag-handle svg {
2175
+ width: 20px;
2176
+ height: 20px;
2177
+ }
2178
+
2179
+ /* Always show drag handle on touch (no hover state) */
2180
+ .rmx-block-drag-handle.rmx-visible {
2181
+ opacity: 0.7;
2182
+ }
2183
+
2184
+ /* Context menu larger items */
2185
+ .rmx-context-menu-item {
2186
+ min-height: 44px;
2187
+ padding: 10px 16px;
2188
+ }
2189
+
2190
+ /* Floating toolbar grip visible on touch */
2191
+ .rmx-floating-toolbar-grip {
2192
+ display: flex;
2193
+ }
2194
+ }
2195
+
2196
+ /* ====== Utility Classes ====== */
2197
+ .rmx-inline-flex-relative {
2198
+ position: relative;
2199
+ display: inline-flex;
2200
+ }
2201
+
2202
+ .rmx-sr-only {
2203
+ position: absolute;
2204
+ width: 1px;
2205
+ height: 1px;
2206
+ padding: 0;
2207
+ margin: -1px;
2208
+ overflow: hidden;
2209
+ clip: rect(0, 0, 0, 0);
2210
+ white-space: nowrap;
2211
+ border-width: 0;
2212
+ }
2213
+
2214
+ .rmx-upload-filename {
2215
+ margin-top: 4px;
2216
+ font-weight: 500;
2217
+ }
2218
+
2219
+ .rmx-form-error {
2220
+ color: var(--rmx-error, #dc2626);
2221
+ }
2222
+
2223
+ .rmx-import-preview {
2224
+ max-height: 200px;
2225
+ overflow: auto;
2226
+ border: 1px solid var(--rmx-border, #e2e8f0);
2227
+ border-radius: var(--rmx-radius-inner, 4px);
2228
+ padding: 8px 12px;
2229
+ font-size: 13px;
2230
+ line-height: 1.5;
2231
+ background: var(--rmx-surface, #fff);
2232
+ }
2233
+
2234
+ .rmx-radio-group {
2235
+ display: flex;
2236
+ gap: 8px;
2237
+ }
2238
+
2239
+ .rmx-radio-label {
2240
+ display: flex;
2241
+ align-items: center;
2242
+ gap: 4px;
2243
+ cursor: pointer;
2244
+ font-size: 13px;
2245
+ }
2246
+
2247
+ /* ====== File Attachment Chip ====== */
2248
+ .rmx-attachment {
2249
+ display: inline-flex;
2250
+ align-items: center;
2251
+ gap: 4px;
2252
+ padding: 4px 10px;
2253
+ margin: 2px 4px;
2254
+ background: var(--rmx-primary-light, #e0e7ff);
2255
+ color: var(--rmx-primary, #6366f1);
2256
+ border-radius: var(--rmx-radius-inner, 4px);
2257
+ font-size: 13px;
2258
+ font-family: var(--rmx-font-family);
2259
+ text-decoration: none;
2260
+ cursor: pointer;
2261
+ transition: background 0.15s ease, color 0.15s ease;
2262
+ line-height: 1.4;
2263
+ }
2264
+
2265
+ .rmx-attachment:hover {
2266
+ background: var(--rmx-selection, #c7d2fe);
2267
+ color: var(--rmx-primary-hover, #4f46e5);
2268
+ text-decoration: none;
2269
+ }
2270
+
2271
+ .rmx-attachment:active {
2272
+ opacity: 0.85;
2273
+ }
2274
+
2275
+ /* ====== Autosave — Save Status Indicator ====== */
2276
+
2277
+ .rmx-save-status {
2278
+ display: inline-flex;
2279
+ align-items: center;
2280
+ gap: 6px;
2281
+ user-select: none;
2282
+ }
2283
+
2284
+ .rmx-save-status-dot {
2285
+ width: 6px;
2286
+ height: 6px;
2287
+ border-radius: 50%;
2288
+ flex-shrink: 0;
2289
+ transition: background 0.2s ease;
2290
+ }
2291
+
2292
+ .rmx-save-status--saved .rmx-save-status-dot {
2293
+ background: var(--rmx-save-saved);
2294
+ }
2295
+
2296
+ .rmx-save-status--saving .rmx-save-status-dot {
2297
+ background: var(--rmx-save-saving);
2298
+ animation: rmx-pulse 1.2s ease-in-out infinite;
2299
+ }
2300
+
2301
+ .rmx-save-status--unsaved .rmx-save-status-dot {
2302
+ background: var(--rmx-save-unsaved);
2303
+ }
2304
+
2305
+ .rmx-save-status--error .rmx-save-status-dot {
2306
+ background: var(--rmx-save-error);
2307
+ }
2308
+
2309
+ .rmx-save-status-label {
2310
+ font-size: 12px;
2311
+ color: var(--rmx-statusbar-text);
2312
+ line-height: 1;
2313
+ }
2314
+
2315
+ @keyframes rmx-pulse {
2316
+ 0%, 100% { opacity: 1; }
2317
+ 50% { opacity: 0.4; }
2318
+ }
2319
+
2320
+ /* ====== Autosave — Recovery Banner ====== */
2321
+
2322
+ .rmx-recovery-banner {
2323
+ display: flex;
2324
+ align-items: center;
2325
+ justify-content: space-between;
2326
+ padding: 8px 12px;
2327
+ background: var(--rmx-recovery-bg);
2328
+ border-bottom: 1px solid var(--rmx-recovery-border);
2329
+ color: var(--rmx-recovery-text);
2330
+ font-size: 13px;
2331
+ line-height: 1.4;
2332
+ gap: 12px;
2333
+ }
2334
+
2335
+ .rmx-recovery-banner-icon {
2336
+ flex-shrink: 0;
2337
+ width: 16px;
2338
+ height: 16px;
2339
+ color: var(--rmx-recovery-text);
2340
+ }
2341
+
2342
+ .rmx-recovery-banner-text {
2343
+ flex: 1;
2344
+ min-width: 0;
2345
+ }
2346
+
2347
+ .rmx-recovery-banner-actions {
2348
+ display: flex;
2349
+ gap: 8px;
2350
+ flex-shrink: 0;
2351
+ }
2352
+
2353
+ .rmx-recovery-btn {
2354
+ padding: 4px 12px;
2355
+ border-radius: var(--rmx-radius-sm);
2356
+ font-size: 12px;
2357
+ font-weight: 500;
2358
+ cursor: pointer;
2359
+ border: none;
2360
+ transition: background 0.15s ease, color 0.15s ease;
2361
+ line-height: 1.4;
2362
+ }
2363
+
2364
+ .rmx-recovery-btn--restore {
2365
+ background: var(--rmx-primary);
2366
+ color: #fff;
2367
+ }
2368
+
2369
+ .rmx-recovery-btn--restore:hover {
2370
+ background: var(--rmx-primary-hover);
2371
+ }
2372
+
2373
+ .rmx-recovery-btn--dismiss {
2374
+ background: transparent;
2375
+ color: var(--rmx-recovery-text);
2376
+ border: 1px solid var(--rmx-recovery-border);
2377
+ }
2378
+
2379
+ .rmx-recovery-btn--dismiss:hover {
2380
+ background: rgba(0, 0, 0, 0.05);
2381
+ }
2382
+
2383
+ /* ====== Tooltip ====== */
2384
+ .rmx-tooltip-wrap {
2385
+ position: relative;
2386
+ display: inline-flex;
2387
+ }
2388
+
2389
+ .rmx-tooltip {
2390
+ position: absolute;
2391
+ bottom: calc(100% + 6px);
2392
+ left: 50%;
2393
+ transform: translateX(-50%);
2394
+ padding: 5px 10px;
2395
+ background: var(--rmx-text, #1e293b);
2396
+ color: #fff;
2397
+ font-size: 11.5px;
2398
+ font-weight: 500;
2399
+ white-space: nowrap;
2400
+ border-radius: var(--rmx-radius-inner, 4px);
2401
+ box-shadow: var(--rmx-shadow-sm);
2402
+ z-index: 10001;
2403
+ pointer-events: none;
2404
+ animation: rmx-tooltip-in 0.12s ease;
2405
+ line-height: 1.4;
2406
+ }
2407
+
2408
+ .rmx-tooltip-arrow {
2409
+ position: absolute;
2410
+ bottom: -4px;
2411
+ left: 50%;
2412
+ transform: translateX(-50%);
2413
+ width: 8px;
2414
+ height: 4px;
2415
+ overflow: hidden;
2416
+ }
2417
+
2418
+ .rmx-tooltip-arrow::before {
2419
+ content: '';
2420
+ display: block;
2421
+ width: 6px;
2422
+ height: 6px;
2423
+ margin: 0 auto;
2424
+ background: var(--rmx-text, #1e293b);
2425
+ transform: rotate(45deg);
2426
+ transform-origin: center center;
2427
+ }
2428
+
2429
+ @keyframes rmx-tooltip-in {
2430
+ from { opacity: 0; transform: translateX(-50%) translateY(2px); }
2431
+ to { opacity: 1; transform: translateX(-50%) translateY(0); }
2432
+ }
2433
+
2434
+ /* ====== Spinner ====== */
2435
+ .rmx-spinner {
2436
+ display: inline-block;
2437
+ width: 16px;
2438
+ height: 16px;
2439
+ border: 2px solid var(--rmx-border, #e2e8f0);
2440
+ border-top-color: var(--rmx-primary, #6366f1);
2441
+ border-radius: 50%;
2442
+ animation: rmx-spin 0.6s linear infinite;
2443
+ }
2444
+
2445
+ @keyframes rmx-spin {
2446
+ to { transform: rotate(360deg); }
2447
+ }
2448
+
2449
+ /* ====== Focus Indicators ====== */
2450
+ .rmx-floating-toolbar .rmx-toolbar-btn:focus-visible,
2451
+ .rmx-context-menu-item:focus-visible {
2452
+ outline: 2px solid var(--rmx-focus-ring, #6366f1);
2453
+ outline-offset: -2px;
2454
+ border-radius: var(--rmx-radius-inner, 4px);
2455
+ }
2456
+
2457
+ .rmx-context-menu-item.rmx-focused {
2458
+ background: var(--rmx-toolbar-button-hover);
2459
+ }
2460
+
2461
+ /* ====== Unsaved Changes Indicator ====== */
2462
+ .rmx-statusbar-dirty {
2463
+ display: inline-flex;
2464
+ align-items: center;
2465
+ gap: 4px;
2466
+ color: var(--rmx-primary, #6366f1);
2467
+ font-weight: 600;
2468
+ }
2469
+
2470
+ .rmx-statusbar-dirty-dot {
2471
+ width: 6px;
2472
+ height: 6px;
2473
+ border-radius: 50%;
2474
+ background: var(--rmx-primary, #6366f1);
2475
+ }
2476
+
2477
+ /* ====== Print Stylesheet ====== */
2478
+ @media print {
2479
+ /* Hide all chrome — only print content */
2480
+ .rmx-toolbar,
2481
+ .rmx-menubar,
2482
+ .rmx-statusbar,
2483
+ .rmx-recovery-banner,
2484
+ .rmx-modal-overlay,
2485
+ .rmx-command-palette,
2486
+ .rmx-context-menu,
2487
+ .rmx-code-copy-btn,
2488
+ .rmx-code-lang-label,
2489
+ .rmx-table-filter-dropdown {
2490
+ display: none !important;
2491
+ }
2492
+
2493
+ /* Remove editor chrome styling */
2494
+ .rmx-editor {
2495
+ border: none !important;
2496
+ box-shadow: none !important;
2497
+ contain: none !important;
2498
+ max-height: none !important;
2499
+ overflow: visible !important;
2500
+ background: white !important;
2501
+ color: black !important;
2502
+ }
2503
+
2504
+ .rmx-content {
2505
+ padding: 0 !important;
2506
+ max-height: none !important;
2507
+ overflow: visible !important;
2508
+ }
2509
+
2510
+ /* Typography for print */
2511
+ .rmx-content h1, .rmx-content h2, .rmx-content h3,
2512
+ .rmx-content h4, .rmx-content h5, .rmx-content h6 {
2513
+ page-break-after: avoid;
2514
+ break-after: avoid;
2515
+ }
2516
+
2517
+ .rmx-content p, .rmx-content li, .rmx-content blockquote {
2518
+ orphans: 3;
2519
+ widows: 3;
2520
+ }
2521
+
2522
+ .rmx-content table, .rmx-content figure, .rmx-content img,
2523
+ .rmx-content pre {
2524
+ page-break-inside: avoid;
2525
+ break-inside: avoid;
2526
+ }
2527
+
2528
+ .rmx-content img {
2529
+ max-width: 100% !important;
2530
+ }
2531
+
2532
+ /* Print-friendly code blocks */
2533
+ .rmx-content pre {
2534
+ white-space: pre-wrap !important;
2535
+ word-wrap: break-word !important;
2536
+ border: 1px solid #ccc !important;
2537
+ background: #f9f9f9 !important;
2538
+ }
2539
+
2540
+ /* Print-friendly tables */
2541
+ .rmx-content table {
2542
+ border-collapse: collapse !important;
2543
+ }
2544
+
2545
+ .rmx-content th, .rmx-content td {
2546
+ border: 1px solid #999 !important;
2547
+ }
2548
+
2549
+ /* Show link URLs in print */
2550
+ .rmx-content a[href]::after {
2551
+ content: ' (' attr(href) ')';
2552
+ font-size: 0.85em;
2553
+ color: #666;
2554
+ font-style: italic;
2555
+ }
2556
+
2557
+ /* Don't show URLs for internal/anchor links */
2558
+ .rmx-content a[href^="#"]::after,
2559
+ .rmx-content a[href^="javascript"]::after {
2560
+ content: '';
2561
+ }
2562
+
2563
+ /* Line numbers visible in print */
2564
+ .rmx-content pre .rmx-line-numbers {
2565
+ opacity: 1 !important;
2566
+ color: #999 !important;
2567
+ }
2568
+ }
2569
+
2570
+ /* ====== RTL Support ====== */
2571
+ /* Logical properties for bidirectional layout */
2572
+ .rmx-content [dir="rtl"] {
2573
+ text-align: right;
2574
+ }
2575
+
2576
+ .rmx-content [dir="rtl"] ul,
2577
+ .rmx-content [dir="rtl"] ol {
2578
+ padding-left: 0;
2579
+ padding-right: 1.5em;
2580
+ }
2581
+
2582
+ .rmx-content [dir="rtl"] blockquote {
2583
+ border-left: none;
2584
+ border-right: 3px solid var(--rmx-border);
2585
+ padding-left: 0;
2586
+ padding-right: 16px;
2587
+ margin-left: 0;
2588
+ margin-right: 0;
2589
+ }
2590
+
2591
+ .rmx-content [dir="rtl"] .rmx-task-checkbox {
2592
+ margin-left: 8px;
2593
+ margin-right: 0;
2594
+ }
2595
+
2596
+ /* ====== List Nesting Visual Hierarchy ====== */
2597
+ .rmx-content ul { list-style-type: disc; }
2598
+ .rmx-content ul ul { list-style-type: circle; }
2599
+ .rmx-content ul ul ul { list-style-type: square; }
2600
+ .rmx-content ul ul ul ul { list-style-type: disc; }
2601
+ .rmx-content ul ul ul ul ul { list-style-type: circle; }
2602
+
2603
+ .rmx-content ol { list-style-type: decimal; }
2604
+ .rmx-content ol ol { list-style-type: lower-alpha; }
2605
+ .rmx-content ol ol ol { list-style-type: lower-roman; }
2606
+ .rmx-content ol ol ol ol { list-style-type: decimal; }
2607
+ .rmx-content ol ol ol ol ol { list-style-type: lower-alpha; }
2608
+
2609
+ /* ====== Image Alt-Text Edit Overlay ====== */
2610
+ .rmx-image-alt-overlay {
2611
+ position: absolute;
2612
+ bottom: 8px;
2613
+ left: 8px;
2614
+ display: flex;
2615
+ align-items: center;
2616
+ gap: 4px;
2617
+ z-index: 10;
2618
+ }
2619
+
2620
+ .rmx-image-alt-input {
2621
+ padding: 4px 8px;
2622
+ font-size: 12px;
2623
+ border: 1px solid var(--rmx-border);
2624
+ border-radius: var(--rmx-radius-inner);
2625
+ background: var(--rmx-modal-bg);
2626
+ color: var(--rmx-text);
2627
+ min-width: 120px;
2628
+ max-width: 250px;
2629
+ box-shadow: var(--rmx-shadow-sm);
2630
+ }
2631
+
2632
+ .rmx-image-alt-input:focus {
2633
+ outline: none;
2634
+ border-color: var(--rmx-primary);
2635
+ box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.2);
2636
+ }
2637
+
2638
+ .rmx-image-alt-label {
2639
+ font-size: 11px;
2640
+ color: var(--rmx-text-secondary);
2641
+ background: var(--rmx-modal-bg);
2642
+ padding: 2px 6px;
2643
+ border-radius: var(--rmx-radius-inner);
2644
+ border: 1px solid var(--rmx-border);
2645
+ box-shadow: var(--rmx-shadow-sm);
2646
+ white-space: nowrap;
2647
+ }
2648
+
2649
+ /* ====== Embed Preview ====== */
2650
+ .rmx-embed-preview {
2651
+ margin-top: 12px;
2652
+ border: 1px solid var(--rmx-border);
2653
+ border-radius: var(--rmx-radius);
2654
+ overflow: hidden;
2655
+ background: var(--rmx-bg);
2656
+ }
2657
+
2658
+ .rmx-embed-preview iframe {
2659
+ width: 100%;
2660
+ height: 200px;
2661
+ border: none;
2662
+ }
2663
+
2664
+ .rmx-embed-preview-placeholder {
2665
+ padding: 24px;
2666
+ text-align: center;
2667
+ color: var(--rmx-text-secondary);
2668
+ font-size: 13px;
2669
+ }
2670
+
2671
+ /* ====== Block Editing: Collapsible Sections ====== */
2672
+ .rmx-content details.rmx-collapsible {
2673
+ border: 1px solid var(--rmx-border, #e2e8f0);
2674
+ border-radius: var(--rmx-radius-inner, 4px);
2675
+ padding: 0;
2676
+ margin: 8px 0;
2677
+ transition: border-color var(--rmx-transition-fast, 0.15s);
2678
+ }
2679
+
2680
+ .rmx-content details.rmx-collapsible > summary {
2681
+ display: flex;
2682
+ align-items: center;
2683
+ gap: 6px;
2684
+ padding: 8px 12px;
2685
+ cursor: pointer;
2686
+ font-weight: 500;
2687
+ background: var(--rmx-statusbar-bg, #f8fafc);
2688
+ border-radius: var(--rmx-radius-inner, 4px);
2689
+ user-select: none;
2690
+ list-style: none;
2691
+ }
2692
+
2693
+ .rmx-content details.rmx-collapsible > summary::-webkit-details-marker {
2694
+ display: none;
2695
+ }
2696
+
2697
+ .rmx-content details.rmx-collapsible > summary::before {
2698
+ content: '';
2699
+ display: inline-block;
2700
+ width: 0;
2701
+ height: 0;
2702
+ border-left: 5px solid var(--rmx-text-secondary, #64748b);
2703
+ border-top: 4px solid transparent;
2704
+ border-bottom: 4px solid transparent;
2705
+ transition: transform var(--rmx-transition-fast, 0.15s);
2706
+ flex-shrink: 0;
2707
+ }
2708
+
2709
+ .rmx-content details.rmx-collapsible[open] > summary::before {
2710
+ transform: rotate(90deg);
2711
+ }
2712
+
2713
+ .rmx-content details.rmx-collapsible > :not(summary) {
2714
+ padding: 8px 12px;
2715
+ }
2716
+
2717
+ .rmx-content details.rmx-collapsible:hover {
2718
+ border-color: var(--rmx-primary, #6366f1);
2719
+ }
2720
+
2721
+ /* ====== Block Editing: Block Groups ====== */
2722
+ .rmx-content .rmx-block-group {
2723
+ border: 2px dashed var(--rmx-border, #e2e8f0);
2724
+ border-radius: var(--rmx-radius, 8px);
2725
+ padding: 8px;
2726
+ margin: 8px 0;
2727
+ position: relative;
2728
+ transition: border-color var(--rmx-transition-fast, 0.15s);
2729
+ }
2730
+
2731
+ .rmx-content .rmx-block-group:hover {
2732
+ border-color: var(--rmx-primary, #6366f1);
2733
+ }
2734
+
2735
+ /* ====== Block Editing: Block Selection ====== */
2736
+ .rmx-content .rmx-block-selected {
2737
+ outline: 2px solid var(--rmx-primary, #6366f1);
2738
+ outline-offset: 2px;
2739
+ border-radius: 2px;
2740
+ }
2741
+
2742
+ /* ====== Block Toolbar ====== */
2743
+ .rmx-block-toolbar {
2744
+ pointer-events: auto;
2745
+ animation: rmx-fade-in 0.1s ease;
2746
+ }
2747
+
2748
+ /* ====== Smooth Animations ====== */
2749
+
2750
+ /* Modal enter/exit: scale + fade */
2751
+ @keyframes rmx-modal-enter {
2752
+ from { opacity: 0; transform: scale(0.92); }
2753
+ to { opacity: 1; transform: scale(1); }
2754
+ }
2755
+ @keyframes rmx-modal-exit {
2756
+ from { opacity: 1; transform: scale(1); }
2757
+ to { opacity: 0; transform: scale(0.92); }
2758
+ }
2759
+ .rmx-modal-overlay {
2760
+ animation: rmx-fade-in 0.2s ease;
2761
+ }
2762
+ .rmx-modal-container,
2763
+ .rmx-modal {
2764
+ animation: rmx-modal-enter 0.2s cubic-bezier(0.16, 1, 0.3, 1);
2765
+ }
2766
+ .rmx-modal-container.rmx-modal-closing,
2767
+ .rmx-modal.rmx-modal-closing {
2768
+ animation: rmx-modal-exit 0.15s ease forwards;
2769
+ }
2770
+
2771
+ /* Block reorder animation */
2772
+ @keyframes rmx-block-reorder {
2773
+ from { opacity: 0.6; transform: translateY(-6px); }
2774
+ to { opacity: 1; transform: translateY(0); }
2775
+ }
2776
+ .rmx-block-reordered {
2777
+ animation: rmx-block-reorder 0.2s ease;
2778
+ }
2779
+
2780
+ /* Toolbar button hover/active state transitions */
2781
+ .rmx-toolbar-btn {
2782
+ transition: background-color var(--rmx-transition-fast), color var(--rmx-transition-fast), transform 0.1s ease, box-shadow var(--rmx-transition-fast);
2783
+ }
2784
+ .rmx-toolbar-btn:hover {
2785
+ transform: translateY(-1px);
2786
+ }
2787
+ .rmx-toolbar-btn:active {
2788
+ transform: translateY(0) scale(0.96);
2789
+ }
2790
+
2791
+ /* Dropdown open animation */
2792
+ @keyframes rmx-dropdown-enter {
2793
+ from { opacity: 0; transform: translateY(-4px); }
2794
+ to { opacity: 1; transform: translateY(0); }
2795
+ }
2796
+ .rmx-color-palette,
2797
+ .rmx-toolbar-dropdown-menu,
2798
+ .rmx-toolbar-overflow-menu {
2799
+ animation: rmx-dropdown-enter 0.15s ease;
2800
+ }
2801
+
2802
+ /* ====== Sticky Toolbar ====== */
2803
+ .rmx-toolbar {
2804
+ position: sticky;
2805
+ top: 0;
2806
+ z-index: 20;
2807
+ }
2808
+
2809
+ /* ====== Empty State ====== */
2810
+ .rmx-empty-state {
2811
+ display: flex;
2812
+ flex-direction: column;
2813
+ align-items: center;
2814
+ justify-content: center;
2815
+ padding: 48px 24px;
2816
+ color: var(--rmx-placeholder, #94a3b8);
2817
+ text-align: center;
2818
+ user-select: none;
2819
+ animation: rmx-fade-in 0.3s ease;
2820
+ }
2821
+ .rmx-empty-state-icon {
2822
+ width: 64px;
2823
+ height: 64px;
2824
+ margin-bottom: 16px;
2825
+ opacity: 0.4;
2826
+ }
2827
+ .rmx-empty-state-icon svg {
2828
+ width: 100%;
2829
+ height: 100%;
2830
+ fill: currentColor;
2831
+ }
2832
+ .rmx-empty-state-text {
2833
+ font-size: 15px;
2834
+ font-weight: 500;
2835
+ line-height: 1.5;
2836
+ }
2837
+ .rmx-empty-state-hint {
2838
+ font-size: 13px;
2839
+ margin-top: 6px;
2840
+ opacity: 0.7;
2841
+ }
2842
+
2843
+ /* ====== Distraction-Free Mode ====== */
2844
+ .rmx-editor.rmx-distraction-free .rmx-toolbar,
2845
+ .rmx-editor.rmx-distraction-free .rmx-statusbar,
2846
+ .rmx-editor.rmx-distraction-free .rmx-menubar {
2847
+ opacity: 0;
2848
+ pointer-events: none;
2849
+ transition: opacity 0.3s ease;
2850
+ }
2851
+ .rmx-editor.rmx-distraction-free:hover .rmx-toolbar,
2852
+ .rmx-editor.rmx-distraction-free:hover .rmx-statusbar,
2853
+ .rmx-editor.rmx-distraction-free:hover .rmx-menubar,
2854
+ .rmx-editor.rmx-distraction-free.rmx-df-show-chrome .rmx-toolbar,
2855
+ .rmx-editor.rmx-distraction-free.rmx-df-show-chrome .rmx-statusbar,
2856
+ .rmx-editor.rmx-distraction-free.rmx-df-show-chrome .rmx-menubar {
2857
+ opacity: 1;
2858
+ pointer-events: auto;
2859
+ }
2860
+
2861
+ /* ====== Breadcrumb Bar ====== */
2862
+ .rmx-breadcrumb-bar {
2863
+ display: flex;
2864
+ align-items: center;
2865
+ gap: 4px;
2866
+ padding: 4px 12px;
2867
+ font-size: 12px;
2868
+ color: var(--rmx-text-secondary, #64748b);
2869
+ background: var(--rmx-statusbar-bg, #f8fafc);
2870
+ border-bottom: 1px solid var(--rmx-border-subtle, #f1f5f9);
2871
+ overflow-x: auto;
2872
+ white-space: nowrap;
2873
+ min-height: 24px;
2874
+ }
2875
+ .rmx-breadcrumb-item {
2876
+ cursor: default;
2877
+ padding: 1px 4px;
2878
+ border-radius: 3px;
2879
+ transition: background-color var(--rmx-transition-fast);
2880
+ }
2881
+ .rmx-breadcrumb-item:hover {
2882
+ background: var(--rmx-toolbar-button-hover, #f1f5f9);
2883
+ }
2884
+ .rmx-breadcrumb-separator {
2885
+ opacity: 0.5;
2886
+ font-size: 10px;
2887
+ }
2888
+
2889
+ /* ====== Minimap ====== */
2890
+ .rmx-minimap {
2891
+ position: absolute;
2892
+ top: 0;
2893
+ right: 0;
2894
+ width: 100px;
2895
+ height: 100%;
2896
+ background: var(--rmx-statusbar-bg, #f8fafc);
2897
+ border-left: 1px solid var(--rmx-border-subtle, #f1f5f9);
2898
+ overflow: hidden;
2899
+ cursor: pointer;
2900
+ z-index: 5;
2901
+ opacity: 0.8;
2902
+ transition: opacity var(--rmx-transition-fast);
2903
+ }
2904
+ .rmx-minimap:hover {
2905
+ opacity: 1;
2906
+ }
2907
+ .rmx-minimap-content {
2908
+ transform-origin: top left;
2909
+ pointer-events: none;
2910
+ font-size: 2px;
2911
+ line-height: 1.2;
2912
+ padding: 4px;
2913
+ color: var(--rmx-text, #1e293b);
2914
+ overflow: hidden;
2915
+ }
2916
+ .rmx-minimap-viewport {
2917
+ position: absolute;
2918
+ left: 0;
2919
+ right: 0;
2920
+ background: var(--rmx-primary-light, #e0e7ff);
2921
+ opacity: 0.4;
2922
+ border-radius: 2px;
2923
+ pointer-events: none;
2924
+ }
2925
+
2926
+ /* ====== Split View ====== */
2927
+ .rmx-editor.rmx-split-view .rmx-editor-body {
2928
+ display: flex;
2929
+ flex-direction: row;
2930
+ }
2931
+ .rmx-editor.rmx-split-view .rmx-edit-area {
2932
+ flex: 1;
2933
+ min-width: 0;
2934
+ }
2935
+ .rmx-split-preview {
2936
+ flex: 1;
2937
+ min-width: 0;
2938
+ border-left: 1px solid var(--rmx-border, #e2e8f0);
2939
+ padding: 16px;
2940
+ overflow-y: auto;
2941
+ font-size: var(--rmx-content-font-size, 16px);
2942
+ line-height: var(--rmx-content-line-height, 1.7);
2943
+ color: var(--rmx-text, #1e293b);
2944
+ background: var(--rmx-bg, #ffffff);
2945
+ font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
2946
+ white-space: pre-wrap;
2947
+ word-break: break-word;
2948
+ }
2949
+ .rmx-split-preview-label {
2950
+ display: flex;
2951
+ align-items: center;
2952
+ justify-content: space-between;
2953
+ padding: 4px 12px;
2954
+ font-size: 11px;
2955
+ font-weight: 600;
2956
+ text-transform: uppercase;
2957
+ letter-spacing: 0.5px;
2958
+ color: var(--rmx-text-secondary, #64748b);
2959
+ background: var(--rmx-statusbar-bg, #f8fafc);
2960
+ border-bottom: 1px solid var(--rmx-border-subtle, #f1f5f9);
2961
+ }
2962
+
2963
+ /* ====== Drag-and-Drop Toolbar Customization ====== */
2964
+ .rmx-toolbar.rmx-toolbar-customizable .rmx-toolbar-btn {
2965
+ cursor: grab;
2966
+ }
2967
+ .rmx-toolbar.rmx-toolbar-customizable .rmx-toolbar-btn:active {
2968
+ cursor: grabbing;
2969
+ }
2970
+ .rmx-toolbar-btn.rmx-toolbar-drag-over {
2971
+ box-shadow: -2px 0 0 0 var(--rmx-primary, #6366f1);
2972
+ }
2973
+ .rmx-toolbar-btn.rmx-dragging {
2974
+ opacity: 0.4;
2975
+ }
2976
+
2977
+ /* ====== Typography Controls Dropdown ====== */
2978
+ .rmx-typography-dropdown {
2979
+ position: relative;
2980
+ display: inline-flex;
2981
+ }
2982
+ .rmx-typography-menu {
2983
+ position: absolute;
2984
+ top: 100%;
2985
+ left: 0;
2986
+ z-index: 30;
2987
+ background: var(--rmx-modal-bg, #ffffff);
2988
+ border: 1px solid var(--rmx-border, #e2e8f0);
2989
+ border-radius: var(--rmx-radius-sm, 6px);
2990
+ box-shadow: var(--rmx-shadow-md);
2991
+ padding: 8px;
2992
+ min-width: 200px;
2993
+ animation: rmx-dropdown-enter 0.15s ease;
2994
+ }
2995
+ .rmx-typography-row {
2996
+ display: flex;
2997
+ align-items: center;
2998
+ gap: 8px;
2999
+ padding: 4px 0;
3000
+ }
3001
+ .rmx-typography-row label {
3002
+ font-size: 12px;
3003
+ color: var(--rmx-text-secondary, #64748b);
3004
+ min-width: 90px;
3005
+ }
3006
+ .rmx-typography-row select,
3007
+ .rmx-typography-row input {
3008
+ flex: 1;
3009
+ padding: 3px 6px;
3010
+ border: 1px solid var(--rmx-border, #e2e8f0);
3011
+ border-radius: var(--rmx-radius-sm, 6px);
3012
+ font-size: 12px;
3013
+ background: var(--rmx-bg, #ffffff);
3014
+ color: var(--rmx-text, #1e293b);
3015
+ }
3016
+
3017
+ /* ====== #28 Prefers Reduced Motion ====== */
3018
+ @media (prefers-reduced-motion: reduce) {
3019
+ .rmx-editor *,
3020
+ .rmx-editor *::before,
3021
+ .rmx-editor *::after {
3022
+ animation-duration: 0.01ms !important;
3023
+ transition-duration: 0.01ms !important;
3024
+ }
3025
+ }
3026
+
3027
+ /* ====== #41 Forced Colors (Windows High Contrast) ====== */
3028
+ @media (forced-colors: active) {
3029
+ .rmx-toolbar-btn {
3030
+ border: 1px solid ButtonText;
3031
+ }
3032
+ .rmx-toolbar-btn:focus-visible {
3033
+ outline: 2px solid Highlight;
3034
+ }
3035
+ }
3036
+
3037
+ /* ====== #39 Toast Notifications ====== */
3038
+ .rmx-toast {
3039
+ position: fixed;
3040
+ bottom: 24px;
3041
+ left: 50%;
3042
+ transform: translateX(-50%);
3043
+ padding: 10px 20px;
3044
+ border-radius: var(--rmx-radius, 8px);
3045
+ font-size: 13px;
3046
+ font-family: var(--rmx-font-family);
3047
+ font-weight: 500;
3048
+ z-index: 100002;
3049
+ pointer-events: none;
3050
+ animation: rmx-toast-in 0.25s ease, rmx-toast-out 0.25s ease forwards;
3051
+ box-shadow: var(--rmx-shadow-md);
3052
+ white-space: nowrap;
3053
+ }
3054
+
3055
+ .rmx-toast--info {
3056
+ background: var(--rmx-text, #1e293b);
3057
+ color: #fff;
3058
+ }
3059
+
3060
+ .rmx-toast--success {
3061
+ background: #16a34a;
3062
+ color: #fff;
3063
+ }
3064
+
3065
+ .rmx-toast--warning {
3066
+ background: #f59e0b;
3067
+ color: #1e293b;
3068
+ }
3069
+
3070
+ @keyframes rmx-toast-in {
3071
+ from { opacity: 0; transform: translateX(-50%) translateY(12px); }
3072
+ to { opacity: 1; transform: translateX(-50%) translateY(0); }
3073
+ }
3074
+
3075
+ @keyframes rmx-toast-out {
3076
+ 0%, 75% { opacity: 1; }
3077
+ 100% { opacity: 0; }
3078
+ }
3079
+
3080
+ /* ====== #47 Loading Spinner ====== */
3081
+ .rmx-loading-spinner {
3082
+ display: flex;
3083
+ align-items: center;
3084
+ justify-content: center;
3085
+ padding: 12px;
3086
+ }
3087
+
3088
+ .rmx-loading-spinner::after {
3089
+ content: '';
3090
+ width: 20px;
3091
+ height: 20px;
3092
+ border: 2px solid var(--rmx-border, #e2e8f0);
3093
+ border-top-color: var(--rmx-primary, #6366f1);
3094
+ border-radius: 50%;
3095
+ animation: rmx-spin 0.6s linear infinite;
3096
+ }
3097
+
3098
+ @keyframes rmx-spin {
3099
+ to { transform: rotate(360deg); }
3100
+ }
3101
+
3102
+ /* ====== #56 Color Preset Section Classes ====== */
3103
+ .rmx-color-presets {
3104
+ border-top: 1px solid var(--rmx-border-subtle, #f1f5f9);
3105
+ padding: 4px 8px;
3106
+ }
3107
+
3108
+ .rmx-color-preset-row {
3109
+ display: flex;
3110
+ align-items: center;
3111
+ gap: 4px;
3112
+ margin-bottom: 2px;
3113
+ }
3114
+
3115
+ .rmx-color-preset-name {
3116
+ font-size: 11px;
3117
+ flex: 1;
3118
+ }
3119
+
3120
+ .rmx-color-preset-swatches {
3121
+ display: flex;
3122
+ gap: 1px;
3123
+ }
3124
+
3125
+ .rmx-color-preset-swatch {
3126
+ width: 12px;
3127
+ height: 12px;
3128
+ border: 1px solid #ccc;
3129
+ border-radius: 2px;
3130
+ cursor: pointer;
3131
+ padding: 0;
3132
+ }
3133
+
3134
+ .rmx-color-preset-save-btn {
3135
+ font-size: 11px;
3136
+ color: var(--rmx-primary, #6366f1);
3137
+ background: none;
3138
+ border: none;
3139
+ cursor: pointer;
3140
+ padding: 2px 0;
3141
+ }
3142
+
3143
+ .rmx-color-preset-save-form {
3144
+ display: flex;
3145
+ gap: 4px;
3146
+ margin-top: 4px;
3147
+ }
3148
+
3149
+ .rmx-color-preset-save-input {
3150
+ flex: 1;
3151
+ font-size: 11px;
3152
+ padding: 2px 4px;
3153
+ border: 1px solid var(--rmx-border, #e2e8f0);
3154
+ border-radius: 3px;
3155
+ }
3156
+
3157
+ .rmx-color-preset-save-confirm {
3158
+ font-size: 11px;
3159
+ padding: 2px 6px;
3160
+ cursor: pointer;
3161
+ }
3162
+
3163
+ /* ====== #30 Color Default Button ====== */
3164
+ .rmx-color-default-btn {
3165
+ display: block;
3166
+ width: 100%;
3167
+ padding: 4px 8px;
3168
+ margin-bottom: 6px;
3169
+ background: none;
3170
+ border: 1px solid var(--rmx-border, #e2e8f0);
3171
+ border-radius: var(--rmx-radius-inner, 4px);
3172
+ cursor: pointer;
3173
+ font-size: 12px;
3174
+ color: var(--rmx-text-secondary, #64748b);
3175
+ text-align: center;
3176
+ transition: background var(--rmx-transition-fast);
3177
+ }
3178
+
3179
+ .rmx-color-default-btn:hover {
3180
+ background: var(--rmx-toolbar-button-hover, #f1f5f9);
3181
+ }
3182
+
3183
+ /* ====== #34 Import Replace Warning ====== */
3184
+ .rmx-replace-warning {
3185
+ color: var(--rmx-danger, #ef4444);
3186
+ font-size: 12px;
3187
+ margin-top: 4px;
3188
+ font-weight: 500;
3189
+ }
3190
+
3191
+ /* ====== #50 Embed Loading ====== */
3192
+ .rmx-embed-loading-container {
3193
+ position: relative;
3194
+ }
3195
+
3196
+ .rmx-embed-loading-text {
3197
+ position: absolute;
3198
+ inset: 0;
3199
+ display: flex;
3200
+ align-items: center;
3201
+ justify-content: center;
3202
+ color: var(--rmx-text-secondary, #64748b);
3203
+ font-size: 13px;
3204
+ }
3205
+
3206
+ /* ====== #57 Image Preview ====== */
3207
+ .rmx-image-url-preview {
3208
+ margin-top: 8px;
3209
+ text-align: center;
3210
+ }
3211
+
3212
+ .rmx-image-url-preview img {
3213
+ max-width: 100%;
3214
+ max-height: 120px;
3215
+ border: 1px solid var(--rmx-border, #e2e8f0);
3216
+ border-radius: var(--rmx-radius-inner, 4px);
3217
+ }
3218
+
3219
+ .rmx-image-url-preview-error {
3220
+ font-size: 12px;
3221
+ color: var(--rmx-danger, #ef4444);
3222
+ }