@richhtmleditor/themes 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -338,6 +338,182 @@
338
338
  color: var(--de-text-muted);
339
339
  }
340
340
 
341
+ /* ── Track Changes Review Panel ────────────────────────────────────────────── */
342
+
343
+ #richhtmleditor-root .de-tc-panel {
344
+ position: absolute;
345
+ top: 0;
346
+ right: 0;
347
+ width: min(280px, 100%);
348
+ max-height: 100%;
349
+ overflow: auto;
350
+ background: var(--de-toolbar-bg);
351
+ border-left: 1px solid var(--de-border);
352
+ padding: 10px;
353
+ z-index: 5;
354
+ box-shadow: -4px 0 16px rgba(15, 23, 42, 0.06);
355
+ font-size: 12px;
356
+ color: var(--de-text-primary);
357
+ }
358
+
359
+ #richhtmleditor-root .de-tc-panel__head {
360
+ display: flex;
361
+ align-items: center;
362
+ justify-content: space-between;
363
+ gap: 8px;
364
+ margin-bottom: 8px;
365
+ }
366
+
367
+ #richhtmleditor-root .de-tc-panel__title {
368
+ margin: 0;
369
+ font-size: 13px;
370
+ font-weight: 600;
371
+ }
372
+
373
+ #richhtmleditor-root .de-tc-panel__close {
374
+ border: 0;
375
+ background: transparent;
376
+ cursor: pointer;
377
+ font-size: 18px;
378
+ line-height: 1;
379
+ padding: 2px 6px;
380
+ color: var(--de-text-muted);
381
+ }
382
+
383
+ #richhtmleditor-root .de-tc-panel__actions {
384
+ display: flex;
385
+ gap: 6px;
386
+ margin-bottom: 10px;
387
+ }
388
+
389
+ #richhtmleditor-root .de-tc-panel__btn {
390
+ flex: 1;
391
+ border: 1px solid var(--de-border);
392
+ border-radius: 6px;
393
+ padding: 4px 8px;
394
+ font: inherit;
395
+ font-size: 11px;
396
+ cursor: pointer;
397
+ background: var(--de-content-bg, #fff);
398
+ color: var(--de-text-primary);
399
+ }
400
+
401
+ #richhtmleditor-root .de-tc-panel__btn--accept {
402
+ border-color: #10b981;
403
+ color: #059669;
404
+ }
405
+
406
+ #richhtmleditor-root .de-tc-panel__btn--accept:hover:not(:disabled) {
407
+ background: #10b981;
408
+ color: #fff;
409
+ }
410
+
411
+ #richhtmleditor-root .de-tc-panel__btn--reject {
412
+ border-color: #f87171;
413
+ color: #dc2626;
414
+ }
415
+
416
+ #richhtmleditor-root .de-tc-panel__btn--reject:hover:not(:disabled) {
417
+ background: #ef4444;
418
+ color: #fff;
419
+ }
420
+
421
+ #richhtmleditor-root .de-tc-panel__btn:disabled {
422
+ opacity: 0.45;
423
+ cursor: default;
424
+ }
425
+
426
+ #richhtmleditor-root .de-tc-panel__list {
427
+ display: flex;
428
+ flex-direction: column;
429
+ gap: 6px;
430
+ }
431
+
432
+ #richhtmleditor-root .de-tc-panel__item {
433
+ display: grid;
434
+ grid-template-columns: 18px 1fr auto auto;
435
+ align-items: center;
436
+ gap: 6px;
437
+ padding: 6px 8px;
438
+ border-radius: 6px;
439
+ border: 1px solid var(--de-border);
440
+ cursor: pointer;
441
+ }
442
+
443
+ #richhtmleditor-root .de-tc-panel__item:hover {
444
+ background: color-mix(in srgb, var(--de-primary) 6%, transparent);
445
+ }
446
+
447
+ #richhtmleditor-root .de-tc-panel__item--insert {
448
+ border-left: 3px solid #10b981;
449
+ }
450
+
451
+ #richhtmleditor-root .de-tc-panel__item--delete {
452
+ border-left: 3px solid #ef4444;
453
+ }
454
+
455
+ #richhtmleditor-root .de-tc-panel__badge {
456
+ font-size: 13px;
457
+ font-weight: 700;
458
+ text-align: center;
459
+ }
460
+
461
+ #richhtmleditor-root .de-tc-panel__item--insert .de-tc-panel__badge {
462
+ color: #059669;
463
+ }
464
+
465
+ #richhtmleditor-root .de-tc-panel__item--delete .de-tc-panel__badge {
466
+ color: #dc2626;
467
+ }
468
+
469
+ #richhtmleditor-root .de-tc-panel__text {
470
+ overflow: hidden;
471
+ text-overflow: ellipsis;
472
+ white-space: nowrap;
473
+ font-size: 11px;
474
+ color: var(--de-text-primary);
475
+ }
476
+
477
+ #richhtmleditor-root .de-tc-panel__item-btn {
478
+ border: 0;
479
+ background: transparent;
480
+ cursor: pointer;
481
+ padding: 2px 4px;
482
+ border-radius: 4px;
483
+ font-size: 12px;
484
+ line-height: 1;
485
+ }
486
+
487
+ #richhtmleditor-root .de-tc-panel__item-btn--accept {
488
+ color: #059669;
489
+ }
490
+
491
+ #richhtmleditor-root .de-tc-panel__item-btn--accept:hover {
492
+ background: #d1fae5;
493
+ }
494
+
495
+ #richhtmleditor-root .de-tc-panel__item-btn--reject {
496
+ color: #dc2626;
497
+ }
498
+
499
+ #richhtmleditor-root .de-tc-panel__item-btn--reject:hover {
500
+ background: #fee2e2;
501
+ }
502
+
503
+ #richhtmleditor-root .de-tc-panel__empty {
504
+ margin: 0;
505
+ color: var(--de-text-muted);
506
+ }
507
+
508
+ /* dark mode adjustments */
509
+ #richhtmleditor-root.de-root--dark .de-tc-panel__item-btn--accept:hover {
510
+ background: rgba(16, 185, 129, 0.2);
511
+ }
512
+
513
+ #richhtmleditor-root.de-root--dark .de-tc-panel__item-btn--reject:hover {
514
+ background: rgba(239, 68, 68, 0.2);
515
+ }
516
+
341
517
  #richhtmleditor-root .de-content .de-table-figure {
342
518
  margin: 1em 0;
343
519
  }
@@ -950,9 +1126,10 @@ del.de-track-delete,
950
1126
  }
951
1127
 
952
1128
  #richhtmleditor-root .de-table-side-rail__menu {
953
- position: absolute;
954
- z-index: 44;
1129
+ position: fixed;
1130
+ z-index: 10000;
955
1131
  min-width: 140px;
1132
+ width: 300px;
956
1133
  padding: 6px;
957
1134
  background: var(--de-content-bg);
958
1135
  border: 1px solid var(--de-border);
@@ -961,6 +1138,8 @@ del.de-track-delete,
961
1138
  display: flex;
962
1139
  flex-direction: column;
963
1140
  gap: 2px;
1141
+ max-height: 70vh;
1142
+ overflow-y: auto;
964
1143
  }
965
1144
 
966
1145
  #richhtmleditor-root .de-table-side-rail__menu[hidden] {
@@ -992,27 +1171,41 @@ del.de-track-delete,
992
1171
  }
993
1172
 
994
1173
  #richhtmleditor-root .de-table-side-rail__swatches {
995
- display: flex;
996
- flex-wrap: wrap;
997
- gap: 6px;
998
- padding: 4px 8px 8px;
1174
+ display: grid;
1175
+ grid-template-columns: repeat(12, 1fr);
1176
+ gap: 3px;
1177
+ padding: 6px 8px 8px;
999
1178
  }
1000
1179
 
1001
1180
  #richhtmleditor-root .de-table-side-rail__swatch {
1002
- width: 22px;
1003
- height: 22px;
1004
- border: 1px solid var(--de-border);
1005
- border-radius: 4px;
1181
+ width: 20px;
1182
+ height: 20px;
1183
+ border: 1px solid rgba(0,0,0,0.12);
1184
+ border-radius: 3px;
1006
1185
  cursor: pointer;
1007
1186
  padding: 0;
1187
+ transition: transform 0.1s, box-shadow 0.1s;
1188
+ }
1189
+
1190
+ #richhtmleditor-root .de-table-side-rail__swatch:hover {
1191
+ transform: scale(1.25);
1192
+ box-shadow: 0 2px 6px rgba(0,0,0,0.2);
1193
+ z-index: 1;
1194
+ position: relative;
1008
1195
  }
1009
1196
 
1010
1197
  #richhtmleditor-root .de-table-side-rail__swatch--none {
1011
- display: grid;
1012
- place-items: center;
1013
- font-size: 0.85rem;
1198
+ grid-column: 1 / -1;
1199
+ width: 100%;
1200
+ height: 24px;
1201
+ display: flex;
1202
+ align-items: center;
1203
+ justify-content: center;
1204
+ gap: 4px;
1205
+ font-size: 0.75rem;
1014
1206
  color: var(--de-text-muted);
1015
1207
  background: var(--de-content-bg);
1208
+ margin-bottom: 2px;
1016
1209
  }
1017
1210
 
1018
1211
  #richhtmleditor-root .de-content td.de-table-row-active,
@@ -1573,6 +1766,8 @@ del.de-track-delete,
1573
1766
  --de-border: #e2e8f0;
1574
1767
  z-index: 10000;
1575
1768
  min-width: 188px;
1769
+ max-height: 70vh;
1770
+ overflow-y: auto;
1576
1771
  padding: 8px;
1577
1772
  background: var(--de-toolbar-bg);
1578
1773
  border: 1px solid var(--de-border);
@@ -1865,129 +2060,248 @@ del.de-track-delete,
1865
2060
  }
1866
2061
 
1867
2062
  .de-find-modal__backdrop--portal .de-a11y-modal {
1868
- width: min(420px, calc(100vw - 32px));
2063
+ width: min(560px, calc(100vw - 32px));
1869
2064
  }
1870
2065
 
1871
2066
  .de-find-modal__backdrop--portal .de-a11y-modal__body {
1872
- gap: 12px;
1873
- }
1874
-
1875
- .de-find-modal__backdrop--portal .de-a11y-modal__summary {
1876
- margin: 0;
1877
- font-size: 0.9rem;
1878
- color: var(--de-text-muted);
2067
+ gap: 14px;
1879
2068
  }
1880
2069
 
1881
- .de-find-modal__backdrop--portal .de-a11y-modal__summary--success {
2070
+ /* ── Score section ──────────────────────────────────────────────────────── */
2071
+ .de-find-modal__backdrop--portal .de-a11y-modal__score {
1882
2072
  display: flex;
1883
2073
  align-items: center;
1884
- gap: 10px;
2074
+ gap: 14px;
1885
2075
  padding: 14px 16px;
1886
- border-radius: 10px;
1887
- background: color-mix(in srgb, #16a34a 10%, var(--de-content-bg));
1888
- border: 1px solid color-mix(in srgb, #16a34a 28%, var(--de-border));
1889
- color: #166534;
1890
- font-weight: 600;
1891
- }
1892
-
1893
- .de-find-modal__backdrop--portal .de-a11y-modal__summary--success::before {
1894
- content: "✓";
1895
- display: inline-flex;
1896
- align-items: center;
1897
- justify-content: center;
1898
- width: 1.5rem;
1899
- height: 1.5rem;
1900
- border-radius: 999px;
1901
- background: #16a34a;
1902
- color: #fff;
1903
- font-size: 0.85rem;
1904
- flex-shrink: 0;
1905
- }
1906
-
1907
- .de-find-modal__backdrop--portal .de-a11y-modal__list {
1908
- margin: 0;
1909
- padding: 0;
1910
- list-style: none;
1911
- display: flex;
1912
- flex-direction: column;
1913
- gap: 8px;
1914
- max-height: min(50vh, 320px);
1915
- overflow: auto;
2076
+ border-radius: 12px;
2077
+ border: 1px solid var(--de-border);
1916
2078
  }
1917
2079
 
1918
- .de-find-modal__backdrop--portal .de-a11y-modal__item {
1919
- display: flex;
1920
- align-items: flex-start;
1921
- gap: 10px;
1922
- padding: 10px 12px;
1923
- border-radius: 8px;
1924
- border: 1px solid var(--de-border);
1925
- background: var(--de-content-bg);
2080
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--pass {
2081
+ background: color-mix(in srgb, #16a34a 8%, var(--de-content-bg));
2082
+ border-color: color-mix(in srgb, #16a34a 30%, var(--de-border));
1926
2083
  }
1927
2084
 
1928
- .de-find-modal__backdrop--portal .de-a11y-modal__item--error {
1929
- border-color: color-mix(in srgb, #dc2626 35%, var(--de-border));
2085
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--fail {
1930
2086
  background: color-mix(in srgb, #dc2626 6%, var(--de-content-bg));
2087
+ border-color: color-mix(in srgb, #dc2626 28%, var(--de-border));
1931
2088
  }
1932
2089
 
1933
- .de-find-modal__backdrop--portal .de-a11y-modal__item--warning {
1934
- border-color: color-mix(in srgb, #d97706 35%, var(--de-border));
1935
- background: color-mix(in srgb, #d97706 6%, var(--de-content-bg));
2090
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--warn {
2091
+ background: color-mix(in srgb, #d97706 8%, var(--de-content-bg));
2092
+ border-color: color-mix(in srgb, #d97706 28%, var(--de-border));
1936
2093
  }
1937
2094
 
1938
- .de-find-modal__backdrop--portal .de-a11y-modal__badge {
2095
+ .de-find-modal__backdrop--portal .de-a11y-modal__score-icon {
2096
+ display: inline-flex;
2097
+ align-items: center;
2098
+ justify-content: center;
2099
+ width: 2.2rem;
2100
+ height: 2.2rem;
2101
+ border-radius: 999px;
2102
+ font-size: 0.95rem;
2103
+ font-weight: 900;
1939
2104
  flex-shrink: 0;
1940
- font-size: 0.6875rem;
1941
- font-weight: 700;
1942
- letter-spacing: 0.04em;
1943
- text-transform: uppercase;
1944
- padding: 3px 7px;
1945
- border-radius: 6px;
2105
+ line-height: 1;
2106
+ }
2107
+
2108
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--pass .de-a11y-modal__score-icon {
2109
+ background: #16a34a;
2110
+ color: #fff;
1946
2111
  }
1947
2112
 
1948
- .de-find-modal__backdrop--portal .de-a11y-modal__item--error .de-a11y-modal__badge {
2113
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--fail .de-a11y-modal__score-icon {
1949
2114
  background: #dc2626;
1950
2115
  color: #fff;
1951
2116
  }
1952
2117
 
1953
- .de-find-modal__backdrop--portal .de-a11y-modal__item--warning .de-a11y-modal__badge {
2118
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--warn .de-a11y-modal__score-icon {
1954
2119
  background: #d97706;
1955
2120
  color: #fff;
1956
2121
  }
1957
2122
 
1958
- .de-find-modal__backdrop--portal .de-a11y-modal__message {
1959
- font-size: 0.875rem;
1960
- line-height: 1.45;
1961
- color: var(--de-text-primary);
2123
+ .de-find-modal__backdrop--portal .de-a11y-modal__score-title {
2124
+ font-size: 0.9375rem;
2125
+ font-weight: 700;
2126
+ line-height: 1.2;
1962
2127
  }
1963
2128
 
1964
- .de-find-modal__backdrop--portal .de-format-modal__color-row {
2129
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--pass .de-a11y-modal__score-title { color: #166534; }
2130
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--fail .de-a11y-modal__score-title { color: #991b1b; }
2131
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--warn .de-a11y-modal__score-title { color: #92400e; }
2132
+
2133
+ .de-find-modal__backdrop--portal .de-a11y-modal__score-desc {
2134
+ font-size: 0.8125rem;
2135
+ color: var(--de-text-muted);
2136
+ margin-top: 3px;
2137
+ line-height: 1.4;
2138
+ }
2139
+
2140
+ /* ── Stats row ──────────────────────────────────────────────────────────── */
2141
+ .de-find-modal__backdrop--portal .de-a11y-modal__stats {
1965
2142
  display: flex;
2143
+ gap: 8px;
2144
+ flex-wrap: wrap;
2145
+ }
2146
+
2147
+ .de-find-modal__backdrop--portal .de-a11y-modal__stat {
2148
+ display: inline-flex;
1966
2149
  align-items: center;
1967
- gap: 10px;
2150
+ padding: 4px 12px;
2151
+ border-radius: 999px;
2152
+ font-size: 0.8rem;
2153
+ font-weight: 700;
2154
+ letter-spacing: 0.01em;
2155
+ border: 1px solid transparent;
1968
2156
  }
1969
2157
 
1970
- .de-find-modal__backdrop--portal .de-format-modal__color-picker {
1971
- width: 44px;
1972
- height: 36px;
1973
- padding: 2px;
1974
- border: 1px solid var(--de-border);
1975
- border-radius: 8px;
1976
- background: var(--de-content-bg);
1977
- cursor: pointer;
2158
+ .de-find-modal__backdrop--portal .de-a11y-modal__stat--error {
2159
+ background: color-mix(in srgb, #dc2626 12%, transparent);
2160
+ color: #dc2626;
2161
+ border-color: color-mix(in srgb, #dc2626 28%, transparent);
1978
2162
  }
1979
2163
 
1980
- .de-find-modal__backdrop--portal .de-format-modal__color-row .de-find-modal__input {
1981
- flex: 1;
2164
+ .de-find-modal__backdrop--portal .de-a11y-modal__stat--warning {
2165
+ background: color-mix(in srgb, #d97706 12%, transparent);
2166
+ color: #b45309;
2167
+ border-color: color-mix(in srgb, #d97706 28%, transparent);
1982
2168
  }
1983
2169
 
1984
- .de-find-modal__backdrop--portal .de-format-modal__presets {
2170
+ /* ── List wrap ──────────────────────────────────────────────────────────── */
2171
+ .de-find-modal__backdrop--portal .de-a11y-modal__list-wrap {
1985
2172
  display: flex;
1986
- flex-wrap: wrap;
1987
- gap: 6px;
2173
+ flex-direction: column;
2174
+ gap: 4px;
2175
+ max-height: min(50vh, 340px);
2176
+ overflow-y: auto;
2177
+ scrollbar-width: thin;
1988
2178
  }
1989
2179
 
1990
- .de-find-modal__backdrop--portal .de-format-modal__swatch {
2180
+ .de-find-modal__backdrop--portal .de-a11y-modal__section-header {
2181
+ font-size: 0.6875rem;
2182
+ font-weight: 700;
2183
+ letter-spacing: 0.08em;
2184
+ text-transform: uppercase;
2185
+ color: var(--de-text-muted);
2186
+ padding: 8px 2px 4px;
2187
+ }
2188
+
2189
+ .de-find-modal__backdrop--portal .de-a11y-modal__section-header:first-child {
2190
+ padding-top: 2px;
2191
+ }
2192
+
2193
+ .de-find-modal__backdrop--portal .de-a11y-modal__list {
2194
+ margin: 0;
2195
+ padding: 0;
2196
+ list-style: none;
2197
+ display: flex;
2198
+ flex-direction: column;
2199
+ gap: 6px;
2200
+ }
2201
+
2202
+ /* ── Issue items ────────────────────────────────────────────────────────── */
2203
+ .de-find-modal__backdrop--portal .de-a11y-modal__item {
2204
+ display: flex;
2205
+ align-items: flex-start;
2206
+ gap: 12px;
2207
+ padding: 11px 14px;
2208
+ border-radius: 10px;
2209
+ border: 1px solid var(--de-border);
2210
+ border-left-width: 3px;
2211
+ background: var(--de-content-bg);
2212
+ }
2213
+
2214
+ .de-find-modal__backdrop--portal .de-a11y-modal__item--error {
2215
+ border-left-color: #dc2626;
2216
+ border-color: color-mix(in srgb, #dc2626 22%, var(--de-border));
2217
+ background: color-mix(in srgb, #dc2626 4%, var(--de-content-bg));
2218
+ }
2219
+
2220
+ .de-find-modal__backdrop--portal .de-a11y-modal__item--warning {
2221
+ border-left-color: #d97706;
2222
+ border-color: color-mix(in srgb, #d97706 22%, var(--de-border));
2223
+ background: color-mix(in srgb, #d97706 4%, var(--de-content-bg));
2224
+ }
2225
+
2226
+ .de-find-modal__backdrop--portal .de-a11y-modal__item-icon {
2227
+ display: inline-flex;
2228
+ align-items: center;
2229
+ justify-content: center;
2230
+ width: 1.5rem;
2231
+ height: 1.5rem;
2232
+ border-radius: 999px;
2233
+ font-size: 0.7rem;
2234
+ font-weight: 900;
2235
+ flex-shrink: 0;
2236
+ margin-top: 1px;
2237
+ line-height: 1;
2238
+ }
2239
+
2240
+ .de-find-modal__backdrop--portal .de-a11y-modal__item--error .de-a11y-modal__item-icon {
2241
+ background: #dc2626;
2242
+ color: #fff;
2243
+ }
2244
+
2245
+ .de-find-modal__backdrop--portal .de-a11y-modal__item--warning .de-a11y-modal__item-icon {
2246
+ background: #d97706;
2247
+ color: #fff;
2248
+ }
2249
+
2250
+ .de-find-modal__backdrop--portal .de-a11y-modal__item-body {
2251
+ display: flex;
2252
+ flex-direction: column;
2253
+ gap: 3px;
2254
+ min-width: 0;
2255
+ }
2256
+
2257
+ .de-find-modal__backdrop--portal .de-a11y-modal__rule {
2258
+ font-size: 0.7rem;
2259
+ font-weight: 700;
2260
+ letter-spacing: 0.06em;
2261
+ text-transform: uppercase;
2262
+ color: var(--de-text-muted);
2263
+ }
2264
+
2265
+ .de-find-modal__backdrop--portal .de-a11y-modal__message {
2266
+ font-size: 0.875rem;
2267
+ font-weight: 500;
2268
+ line-height: 1.4;
2269
+ color: var(--de-text-primary);
2270
+ }
2271
+
2272
+ .de-find-modal__backdrop--portal .de-a11y-modal__hint {
2273
+ font-size: 0.8rem;
2274
+ line-height: 1.4;
2275
+ color: var(--de-text-muted);
2276
+ }
2277
+
2278
+ .de-find-modal__backdrop--portal .de-format-modal__color-row {
2279
+ display: flex;
2280
+ align-items: center;
2281
+ gap: 10px;
2282
+ }
2283
+
2284
+ .de-find-modal__backdrop--portal .de-format-modal__color-picker {
2285
+ width: 44px;
2286
+ height: 36px;
2287
+ padding: 2px;
2288
+ border: 1px solid var(--de-border);
2289
+ border-radius: 8px;
2290
+ background: var(--de-content-bg);
2291
+ cursor: pointer;
2292
+ }
2293
+
2294
+ .de-find-modal__backdrop--portal .de-format-modal__color-row .de-find-modal__input {
2295
+ flex: 1;
2296
+ }
2297
+
2298
+ .de-find-modal__backdrop--portal .de-format-modal__presets {
2299
+ display: flex;
2300
+ flex-wrap: wrap;
2301
+ gap: 6px;
2302
+ }
2303
+
2304
+ .de-find-modal__backdrop--portal .de-format-modal__swatch {
1991
2305
  width: 28px;
1992
2306
  height: 28px;
1993
2307
  border: 1px solid var(--de-border);
@@ -2640,3 +2954,958 @@ del.de-track-delete,
2640
2954
  outline: 2px solid var(--de-brand, #2563eb);
2641
2955
  outline-offset: 1px;
2642
2956
  }
2957
+
2958
+ /* ── Paste Special Modal ───────────────────────────────────────────────────── */
2959
+
2960
+ .de-paste-special-backdrop {
2961
+ position: fixed;
2962
+ top: 0;
2963
+ left: 0;
2964
+ right: 0;
2965
+ bottom: 0;
2966
+ background: rgba(15, 23, 42, 0.3);
2967
+ z-index: 10000;
2968
+ }
2969
+
2970
+ .de-paste-special-modal {
2971
+ position: fixed;
2972
+ top: 50%;
2973
+ left: 50%;
2974
+ transform: translate(-50%, -50%);
2975
+ width: 90%;
2976
+ max-width: 400px;
2977
+ background: var(--de-toolbar-bg, #fff);
2978
+ border: 1px solid var(--de-border, #e2e8f0);
2979
+ border-radius: 8px;
2980
+ box-shadow: 0 12px 32px rgba(15, 23, 42, 0.15);
2981
+ z-index: 10001;
2982
+ color: var(--de-text-primary, #0f172a);
2983
+ }
2984
+
2985
+ .de-paste-special-modal__head {
2986
+ display: flex;
2987
+ align-items: center;
2988
+ justify-content: space-between;
2989
+ padding: 12px 16px;
2990
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
2991
+ }
2992
+
2993
+ .de-paste-special-modal__title {
2994
+ margin: 0;
2995
+ font-size: 14px;
2996
+ font-weight: 600;
2997
+ }
2998
+
2999
+ .de-paste-special-modal__close {
3000
+ border: 0;
3001
+ background: transparent;
3002
+ cursor: pointer;
3003
+ font-size: 18px;
3004
+ line-height: 1;
3005
+ padding: 4px 8px;
3006
+ color: var(--de-text-muted, #64748b);
3007
+ }
3008
+
3009
+ .de-paste-special-modal__close:hover {
3010
+ color: var(--de-text-primary, #0f172a);
3011
+ }
3012
+
3013
+ .de-paste-special-modal__body {
3014
+ padding: 16px;
3015
+ }
3016
+
3017
+ .de-paste-special-modal__option {
3018
+ margin-bottom: 12px;
3019
+ }
3020
+
3021
+ .de-paste-special-modal__label {
3022
+ display: flex;
3023
+ align-items: center;
3024
+ gap: 8px;
3025
+ cursor: pointer;
3026
+ font-size: 13px;
3027
+ user-select: none;
3028
+ }
3029
+
3030
+ .de-paste-special-modal__checkbox {
3031
+ cursor: pointer;
3032
+ }
3033
+
3034
+ .de-paste-special-modal__status {
3035
+ margin-top: 8px;
3036
+ font-size: 12px;
3037
+ color: var(--de-text-muted, #64748b);
3038
+ }
3039
+
3040
+ .de-paste-special-modal__status--error {
3041
+ color: #dc2626;
3042
+ }
3043
+
3044
+ .de-paste-special-modal__actions {
3045
+ display: flex;
3046
+ gap: 8px;
3047
+ padding: 12px 16px;
3048
+ border-top: 1px solid var(--de-border, #e2e8f0);
3049
+ justify-content: flex-end;
3050
+ }
3051
+
3052
+ .de-paste-special-modal__btn {
3053
+ border: 1px solid var(--de-border, #d1d5db);
3054
+ border-radius: 6px;
3055
+ padding: 6px 16px;
3056
+ font: inherit;
3057
+ font-size: 13px;
3058
+ cursor: pointer;
3059
+ background: var(--de-content-bg, #fff);
3060
+ color: var(--de-text-primary, #0f172a);
3061
+ }
3062
+
3063
+ .de-paste-special-modal__btn:hover {
3064
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 6%, transparent);
3065
+ }
3066
+
3067
+ .de-paste-special-modal__btn--apply {
3068
+ background: var(--de-primary, #2563eb);
3069
+ color: #fff;
3070
+ border-color: var(--de-primary, #2563eb);
3071
+ }
3072
+
3073
+ .de-paste-special-modal__btn--apply:hover {
3074
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 110%, transparent);
3075
+ }
3076
+
3077
+ /* ── Emoji Picker Panel ────────────────────────────────────────────────────── */
3078
+
3079
+ .de-emoji-picker {
3080
+ --de-primary: #2563eb;
3081
+ --de-primary-hover: #1d4ed8;
3082
+ --de-toolbar-bg: #ffffff;
3083
+ --de-text-primary: #0f172a;
3084
+ --de-text-muted: #64748b;
3085
+ --de-border: #e2e8f0;
3086
+ position: fixed;
3087
+ z-index: 10000;
3088
+ width: 296px;
3089
+ background: var(--de-toolbar-bg);
3090
+ border: 1px solid var(--de-border);
3091
+ border-radius: 12px;
3092
+ box-shadow:
3093
+ 0 16px 40px rgba(15, 23, 42, 0.14),
3094
+ 0 2px 8px rgba(15, 23, 42, 0.06);
3095
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3096
+ color: var(--de-text-primary);
3097
+ display: flex;
3098
+ flex-direction: column;
3099
+ overflow: hidden;
3100
+ }
3101
+
3102
+ .de-emoji-picker--dark {
3103
+ --de-toolbar-bg: #1e293b;
3104
+ --de-text-primary: #f1f5f9;
3105
+ --de-text-muted: #94a3b8;
3106
+ --de-border: #334155;
3107
+ }
3108
+
3109
+ .de-emoji-picker__search-wrap {
3110
+ padding: 10px 10px 6px;
3111
+ }
3112
+
3113
+ .de-emoji-picker__search {
3114
+ width: 100%;
3115
+ box-sizing: border-box;
3116
+ padding: 6px 10px;
3117
+ border: 1px solid var(--de-border);
3118
+ border-radius: 8px;
3119
+ background: color-mix(in srgb, var(--de-toolbar-bg) 90%, var(--de-text-primary));
3120
+ color: var(--de-text-primary);
3121
+ font-size: 0.8125rem;
3122
+ font-family: inherit;
3123
+ outline: none;
3124
+ transition: border-color 0.15s;
3125
+ }
3126
+
3127
+ .de-emoji-picker__search:focus {
3128
+ border-color: var(--de-primary);
3129
+ }
3130
+
3131
+ .de-emoji-picker__search::placeholder {
3132
+ color: var(--de-text-muted);
3133
+ }
3134
+
3135
+ .de-emoji-picker__tabs {
3136
+ display: flex;
3137
+ flex-wrap: nowrap;
3138
+ overflow-x: auto;
3139
+ padding: 0 8px 6px;
3140
+ gap: 2px;
3141
+ scrollbar-width: none;
3142
+ }
3143
+
3144
+ .de-emoji-picker__tabs::-webkit-scrollbar {
3145
+ display: none;
3146
+ }
3147
+
3148
+ .de-emoji-picker__tab {
3149
+ flex-shrink: 0;
3150
+ width: 28px;
3151
+ height: 28px;
3152
+ border: 1px solid transparent;
3153
+ border-radius: 6px;
3154
+ background: transparent;
3155
+ cursor: pointer;
3156
+ font-size: 1rem;
3157
+ display: flex;
3158
+ align-items: center;
3159
+ justify-content: center;
3160
+ transition: background 0.12s, border-color 0.12s;
3161
+ }
3162
+
3163
+ .de-emoji-picker__tab:hover {
3164
+ background: color-mix(in srgb, var(--de-toolbar-bg) 78%, var(--de-primary));
3165
+ border-color: color-mix(in srgb, var(--de-border) 45%, var(--de-primary));
3166
+ }
3167
+
3168
+ .de-emoji-picker__tab--active {
3169
+ background: color-mix(in srgb, var(--de-primary) 12%, var(--de-toolbar-bg));
3170
+ border-color: color-mix(in srgb, var(--de-primary) 35%, var(--de-border));
3171
+ }
3172
+
3173
+ .de-emoji-picker__body {
3174
+ overflow-y: auto;
3175
+ max-height: 220px;
3176
+ padding: 4px 8px 8px;
3177
+ scrollbar-width: thin;
3178
+ scrollbar-color: var(--de-border) transparent;
3179
+ }
3180
+
3181
+ .de-emoji-picker__body::-webkit-scrollbar {
3182
+ width: 5px;
3183
+ }
3184
+
3185
+ .de-emoji-picker__body::-webkit-scrollbar-thumb {
3186
+ background: var(--de-border);
3187
+ border-radius: 3px;
3188
+ }
3189
+
3190
+ .de-emoji-picker__section {
3191
+ font-size: 0.7rem;
3192
+ font-weight: 600;
3193
+ color: var(--de-text-muted);
3194
+ text-transform: uppercase;
3195
+ letter-spacing: 0.05em;
3196
+ margin: 6px 2px 4px;
3197
+ }
3198
+
3199
+ .de-emoji-picker__grid {
3200
+ display: grid;
3201
+ grid-template-columns: repeat(8, 1fr);
3202
+ gap: 2px;
3203
+ }
3204
+
3205
+ .de-emoji-picker__btn {
3206
+ width: 32px;
3207
+ height: 32px;
3208
+ border: 1px solid transparent;
3209
+ border-radius: 6px;
3210
+ background: transparent;
3211
+ cursor: pointer;
3212
+ font-size: 1.1rem;
3213
+ display: flex;
3214
+ align-items: center;
3215
+ justify-content: center;
3216
+ transition: background 0.1s, border-color 0.1s, transform 0.08s;
3217
+ padding: 0;
3218
+ }
3219
+
3220
+ .de-emoji-picker__btn:hover {
3221
+ background: color-mix(in srgb, var(--de-toolbar-bg) 75%, var(--de-primary));
3222
+ border-color: color-mix(in srgb, var(--de-border) 40%, var(--de-primary));
3223
+ transform: scale(1.2);
3224
+ }
3225
+
3226
+ .de-emoji-picker__btn:active {
3227
+ transform: scale(1.05);
3228
+ }
3229
+
3230
+ .de-emoji-picker__empty {
3231
+ font-size: 0.8125rem;
3232
+ color: var(--de-text-muted);
3233
+ text-align: center;
3234
+ padding: 20px 0;
3235
+ margin: 0;
3236
+ }
3237
+
3238
+ /* ── Symbol Picker ─────────────────────────────────────────────────────────── */
3239
+
3240
+ .de-symbol-picker .de-emoji-picker__grid {
3241
+ grid-template-columns: repeat(8, 1fr);
3242
+ }
3243
+
3244
+ .de-symbol-picker__btn {
3245
+ font-size: 0.9rem;
3246
+ font-family: "Segoe UI Symbol", "Apple Symbols", "Symbol", monospace;
3247
+ }
3248
+
3249
+ /* ── Word Count Panel ──────────────────────────────────────────────────────── */
3250
+
3251
+ .de-word-count-panel {
3252
+ --de-primary: #2563eb;
3253
+ --de-toolbar-bg: #ffffff;
3254
+ --de-text-primary: #0f172a;
3255
+ --de-text-muted: #64748b;
3256
+ --de-border: #e2e8f0;
3257
+ position: fixed;
3258
+ z-index: 10000;
3259
+ width: 240px;
3260
+ background: var(--de-toolbar-bg);
3261
+ border: 1px solid var(--de-border);
3262
+ border-radius: 12px;
3263
+ box-shadow: 0 16px 40px rgba(15,23,42,.14), 0 2px 8px rgba(15,23,42,.06);
3264
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3265
+ color: var(--de-text-primary);
3266
+ padding: 14px 16px 12px;
3267
+ position: relative;
3268
+ }
3269
+
3270
+ .de-word-count-panel--dark {
3271
+ --de-toolbar-bg: #1e293b;
3272
+ --de-text-primary: #f1f5f9;
3273
+ --de-text-muted: #94a3b8;
3274
+ --de-border: #334155;
3275
+ }
3276
+
3277
+ .de-word-count-panel__title {
3278
+ font-size: 0.75rem;
3279
+ font-weight: 700;
3280
+ text-transform: uppercase;
3281
+ letter-spacing: 0.06em;
3282
+ color: var(--de-text-muted);
3283
+ margin: 0 0 10px;
3284
+ }
3285
+
3286
+ .de-word-count-panel__close {
3287
+ position: absolute;
3288
+ top: 8px;
3289
+ right: 10px;
3290
+ background: none;
3291
+ border: none;
3292
+ cursor: pointer;
3293
+ font-size: 1.1rem;
3294
+ color: var(--de-text-muted);
3295
+ line-height: 1;
3296
+ padding: 2px 4px;
3297
+ }
3298
+
3299
+ .de-word-count-panel__close:hover {
3300
+ color: var(--de-text-primary);
3301
+ }
3302
+
3303
+ .de-word-count-panel__stats {
3304
+ display: grid;
3305
+ grid-template-columns: 1fr auto;
3306
+ gap: 4px 12px;
3307
+ margin: 0;
3308
+ }
3309
+
3310
+ .de-word-count-panel__label {
3311
+ font-size: 0.8125rem;
3312
+ color: var(--de-text-muted);
3313
+ }
3314
+
3315
+ .de-word-count-panel__value {
3316
+ font-size: 0.8125rem;
3317
+ font-weight: 700;
3318
+ color: var(--de-text-primary);
3319
+ text-align: right;
3320
+ margin: 0;
3321
+ }
3322
+
3323
+ /* ── Video Embed ───────────────────────────────────────────────────────────── */
3324
+
3325
+ #richhtmleditor-root .de-video {
3326
+ margin: 1rem 0;
3327
+ max-width: 100%;
3328
+ box-sizing: border-box;
3329
+ position: relative;
3330
+ display: block;
3331
+ }
3332
+
3333
+ /* Alignment (editor chrome uses width + margin for float-free centering) */
3334
+ #richhtmleditor-root .de-video--left { margin-right: auto; }
3335
+ #richhtmleditor-root .de-video--right { margin-left: auto; }
3336
+ #richhtmleditor-root .de-video--center { margin-left: auto; margin-right: auto; }
3337
+
3338
+ /* Active / selected state */
3339
+ #richhtmleditor-root .de-video--active .de-video__wrap {
3340
+ outline: 2px solid var(--de-primary, #2563eb);
3341
+ outline-offset: 2px;
3342
+ }
3343
+
3344
+ #richhtmleditor-root .de-video__wrap {
3345
+ position: relative;
3346
+ padding-top: 56.25%; /* 16:9 */
3347
+ background: #000;
3348
+ border-radius: 6px;
3349
+ overflow: hidden;
3350
+ }
3351
+
3352
+ #richhtmleditor-root .de-video__wrap iframe {
3353
+ position: absolute;
3354
+ top: 0;
3355
+ left: 0;
3356
+ width: 100%;
3357
+ height: 100%;
3358
+ border: none;
3359
+ }
3360
+
3361
+ #richhtmleditor-root .de-video-caption {
3362
+ display: block;
3363
+ font-size: 0.8125rem;
3364
+ color: var(--de-text-muted, #64748b);
3365
+ text-align: center;
3366
+ margin-top: 6px;
3367
+ }
3368
+
3369
+ /* Resize handle — appears at bottom-right like image resizer */
3370
+ #richhtmleditor-root .de-video-resizer {
3371
+ position: absolute;
3372
+ bottom: 0;
3373
+ right: 0;
3374
+ width: 16px;
3375
+ height: 16px;
3376
+ cursor: se-resize;
3377
+ background: var(--de-primary, #2563eb);
3378
+ border-radius: 3px 0 6px 0;
3379
+ opacity: 0;
3380
+ transition: opacity 0.15s;
3381
+ }
3382
+ #richhtmleditor-root .de-video--active .de-video-resizer { opacity: 1; }
3383
+
3384
+ .de-video-modal { max-width: 420px; }
3385
+ .de-video-modal__body { padding: 12px 0 4px; }
3386
+ .de-video-modal__hint { font-size: 0.8125rem; color: var(--de-text-muted); margin: 0 0 8px; }
3387
+
3388
+ .de-video-modal__input {
3389
+ width: 100%;
3390
+ box-sizing: border-box;
3391
+ padding: 8px 10px;
3392
+ border: 1px solid var(--de-border);
3393
+ border-radius: 8px;
3394
+ background: color-mix(in srgb, var(--de-toolbar-bg, #fff) 90%, var(--de-text-primary, #0f172a));
3395
+ color: var(--de-text-primary, #0f172a);
3396
+ font-size: 0.875rem;
3397
+ font-family: inherit;
3398
+ outline: none;
3399
+ }
3400
+
3401
+ .de-video-modal__input:focus { border-color: var(--de-primary, #2563eb); }
3402
+ .de-video-modal__status { font-size: 0.8125rem; color: #dc2626; min-height: 1.2em; margin: 6px 0 0; }
3403
+
3404
+ /* ── Multi-column Layout ───────────────────────────────────────────────────── */
3405
+
3406
+ #richhtmleditor-root .de-section[data-style-id^="columns-"] > .de-section__title {
3407
+ display: none;
3408
+ }
3409
+
3410
+ #richhtmleditor-root .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3411
+ #richhtmleditor-root .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3412
+
3413
+ .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3414
+ .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3415
+
3416
+ /* ── Fullscreen / Focus Mode ───────────────────────────────────────────────── */
3417
+
3418
+ #richhtmleditor-root.de-root--fullscreen {
3419
+ position: fixed !important;
3420
+ inset: 0 !important;
3421
+ width: 100vw !important;
3422
+ height: 100vh !important;
3423
+ max-width: none !important;
3424
+ max-height: none !important;
3425
+ z-index: 9998;
3426
+ border-radius: 0 !important;
3427
+ overflow: hidden;
3428
+ display: flex;
3429
+ flex-direction: column;
3430
+ }
3431
+
3432
+ #richhtmleditor-root.de-root--fullscreen .de-content {
3433
+ flex: 1;
3434
+ overflow-y: auto;
3435
+ max-height: none !important;
3436
+ height: auto !important;
3437
+ }
3438
+
3439
+ /* ── Read Aloud Panel ──────────────────────────────────────────────────────── */
3440
+
3441
+ .de-read-aloud-panel {
3442
+ --de-primary: #2563eb;
3443
+ --de-primary-hover: #1d4ed8;
3444
+ --de-toolbar-bg: #ffffff;
3445
+ --de-text-primary: #0f172a;
3446
+ --de-text-muted: #64748b;
3447
+ --de-border: #e2e8f0;
3448
+ position: fixed;
3449
+ z-index: 10000;
3450
+ width: 260px;
3451
+ background: var(--de-toolbar-bg);
3452
+ border: 1px solid var(--de-border);
3453
+ border-radius: 12px;
3454
+ box-shadow:
3455
+ 0 16px 40px rgba(15, 23, 42, 0.14),
3456
+ 0 2px 8px rgba(15, 23, 42, 0.06);
3457
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3458
+ color: var(--de-text-primary);
3459
+ display: flex;
3460
+ flex-direction: column;
3461
+ gap: 10px;
3462
+ padding: 12px;
3463
+ }
3464
+
3465
+ .de-read-aloud-panel--dark {
3466
+ --de-toolbar-bg: #1e293b;
3467
+ --de-text-primary: #f1f5f9;
3468
+ --de-text-muted: #94a3b8;
3469
+ --de-border: #334155;
3470
+ }
3471
+
3472
+ .de-read-aloud-panel__status {
3473
+ font-size: 0.75rem;
3474
+ font-weight: 600;
3475
+ text-transform: uppercase;
3476
+ letter-spacing: 0.04em;
3477
+ color: var(--de-text-muted);
3478
+ text-align: center;
3479
+ }
3480
+
3481
+ .de-read-aloud-panel__controls {
3482
+ display: flex;
3483
+ gap: 8px;
3484
+ justify-content: center;
3485
+ }
3486
+
3487
+ .de-read-aloud-panel__btn {
3488
+ display: inline-flex;
3489
+ align-items: center;
3490
+ justify-content: center;
3491
+ width: 36px;
3492
+ height: 36px;
3493
+ border-radius: 8px;
3494
+ border: 1px solid var(--de-border);
3495
+ background: none;
3496
+ cursor: pointer;
3497
+ font-size: 1rem;
3498
+ color: var(--de-text-primary);
3499
+ transition: background 0.12s, border-color 0.12s;
3500
+ }
3501
+
3502
+ .de-read-aloud-panel__btn:hover {
3503
+ background: rgba(37, 99, 235, 0.08);
3504
+ border-color: var(--de-primary);
3505
+ color: var(--de-primary);
3506
+ }
3507
+
3508
+ .de-read-aloud-panel__btn--stop:hover {
3509
+ background: rgba(220, 38, 38, 0.1);
3510
+ border-color: #dc2626;
3511
+ color: #dc2626;
3512
+ }
3513
+
3514
+ .de-read-aloud-panel__row {
3515
+ display: flex;
3516
+ align-items: center;
3517
+ gap: 8px;
3518
+ }
3519
+
3520
+ .de-read-aloud-panel__label {
3521
+ font-size: 0.72rem;
3522
+ font-weight: 600;
3523
+ color: var(--de-text-muted);
3524
+ white-space: nowrap;
3525
+ min-width: 38px;
3526
+ }
3527
+
3528
+ .de-read-aloud-panel__speed {
3529
+ flex: 1;
3530
+ accent-color: var(--de-primary);
3531
+ cursor: pointer;
3532
+ }
3533
+
3534
+ .de-read-aloud-panel__speed-val {
3535
+ font-size: 0.72rem;
3536
+ color: var(--de-text-muted);
3537
+ min-width: 26px;
3538
+ text-align: right;
3539
+ }
3540
+
3541
+ .de-read-aloud-panel__voice {
3542
+ flex: 1;
3543
+ font-size: 0.75rem;
3544
+ padding: 3px 6px;
3545
+ border: 1px solid var(--de-border);
3546
+ border-radius: 6px;
3547
+ background: var(--de-toolbar-bg);
3548
+ color: var(--de-text-primary);
3549
+ cursor: pointer;
3550
+ max-width: 160px;
3551
+ overflow: hidden;
3552
+ text-overflow: ellipsis;
3553
+ }
3554
+
3555
+ /* ── Bookmark Modal ─────────────────────────────────────────────────────────── */
3556
+
3557
+ .de-find-modal__backdrop--portal .de-bookmark-modal {
3558
+ max-width: 420px;
3559
+ }
3560
+
3561
+ .de-find-modal__backdrop--portal .de-bookmark-modal__hint {
3562
+ font-size: 0.75rem;
3563
+ color: var(--de-text-muted);
3564
+ margin: 2px 0 8px;
3565
+ }
3566
+
3567
+ .de-find-modal__backdrop--portal .de-bookmark-modal__preview {
3568
+ font-size: 0.75rem;
3569
+ font-family: "Cascadia Code", "Fira Code", "Courier New", monospace;
3570
+ margin: 4px 0 0;
3571
+ color: var(--de-primary);
3572
+ }
3573
+
3574
+ .de-find-modal__backdrop--portal .de-bookmark-modal__remove {
3575
+ color: #dc2626;
3576
+ margin-right: auto;
3577
+ }
3578
+
3579
+ .de-find-modal__backdrop--portal .de-bookmark-modal__remove:hover {
3580
+ background: rgba(220, 38, 38, 0.08);
3581
+ border-color: #dc2626;
3582
+ }
3583
+
3584
+ /* ── Cross-Reference Modal ──────────────────────────────────────────────────── */
3585
+
3586
+ .de-find-modal__backdrop--portal .de-crossref-modal {
3587
+ max-width: 480px;
3588
+ }
3589
+
3590
+ .de-find-modal__backdrop--portal .de-crossref-modal__body {
3591
+ padding-bottom: 0;
3592
+ }
3593
+
3594
+ .de-find-modal__backdrop--portal .de-crossref-modal__list {
3595
+ margin-top: 8px;
3596
+ max-height: 280px;
3597
+ overflow-y: auto;
3598
+ border: 1px solid var(--de-border);
3599
+ border-radius: 8px;
3600
+ }
3601
+
3602
+ .de-find-modal__backdrop--portal .de-crossref-modal__list::-webkit-scrollbar {
3603
+ width: 4px;
3604
+ }
3605
+
3606
+ .de-find-modal__backdrop--portal .de-crossref-modal__list::-webkit-scrollbar-thumb {
3607
+ background: var(--de-border);
3608
+ border-radius: 4px;
3609
+ }
3610
+
3611
+ .de-find-modal__backdrop--portal .de-crossref-modal__item {
3612
+ display: flex;
3613
+ align-items: center;
3614
+ justify-content: space-between;
3615
+ gap: 8px;
3616
+ width: 100%;
3617
+ padding: 8px 12px;
3618
+ border: none;
3619
+ border-bottom: 1px solid var(--de-border);
3620
+ background: none;
3621
+ cursor: pointer;
3622
+ text-align: left;
3623
+ color: var(--de-text-primary);
3624
+ font-size: 0.85rem;
3625
+ transition: background 0.1s;
3626
+ }
3627
+
3628
+ .de-find-modal__backdrop--portal .de-crossref-modal__item:last-child {
3629
+ border-bottom: none;
3630
+ }
3631
+
3632
+ .de-find-modal__backdrop--portal .de-crossref-modal__item:hover {
3633
+ background: rgba(37, 99, 235, 0.06);
3634
+ color: var(--de-primary);
3635
+ }
3636
+
3637
+ .de-find-modal__backdrop--portal .de-crossref-modal__item-text {
3638
+ flex: 1;
3639
+ overflow: hidden;
3640
+ text-overflow: ellipsis;
3641
+ white-space: nowrap;
3642
+ }
3643
+
3644
+ .de-find-modal__backdrop--portal .de-crossref-modal__item-id {
3645
+ font-size: 0.72rem;
3646
+ font-family: "Cascadia Code", "Fira Code", "Courier New", monospace;
3647
+ color: var(--de-text-muted);
3648
+ white-space: nowrap;
3649
+ }
3650
+
3651
+ .de-find-modal__backdrop--portal .de-crossref-modal__empty {
3652
+ font-size: 0.85rem;
3653
+ color: var(--de-text-muted);
3654
+ text-align: center;
3655
+ padding: 20px 0;
3656
+ margin: 0;
3657
+ }
3658
+
3659
+ /* ── Bookmark Visual Indicator (editor only) ────────────────────────────────── */
3660
+
3661
+ #richhtmleditor-root [contenteditable="true"] :is(p, h1, h2, h3, h4, h5, h6)[id]::after {
3662
+ content: " 🔖";
3663
+ font-size: 0.75em;
3664
+ opacity: 0.45;
3665
+ user-select: none;
3666
+ pointer-events: none;
3667
+ }
3668
+
3669
+ /* ── Compare Modal ──────────────────────────────────────────────────────────── */
3670
+
3671
+ .de-find-modal__backdrop--portal .de-compare-modal {
3672
+ max-width: 860px;
3673
+ width: min(860px, 96vw);
3674
+ }
3675
+
3676
+ .de-find-modal__backdrop--portal .de-compare-modal__body {
3677
+ display: grid;
3678
+ grid-template-columns: 1fr 1fr;
3679
+ gap: 16px;
3680
+ padding-bottom: 0;
3681
+ }
3682
+
3683
+ .de-compare-modal__pane {
3684
+ display: flex;
3685
+ flex-direction: column;
3686
+ gap: 6px;
3687
+ }
3688
+
3689
+ .de-find-modal__backdrop--portal .de-compare-modal__textarea {
3690
+ min-height: 300px;
3691
+ padding: 10px 12px;
3692
+ border: 1px solid var(--de-border);
3693
+ border-radius: 8px;
3694
+ background: var(--de-content-bg);
3695
+ color: var(--de-text-primary);
3696
+ font-family: "Cascadia Code", "Fira Code", "Courier New", monospace;
3697
+ font-size: 0.78rem;
3698
+ resize: vertical;
3699
+ line-height: 1.5;
3700
+ }
3701
+
3702
+ .de-find-modal__backdrop--portal .de-compare-modal__textarea:focus {
3703
+ outline: none;
3704
+ border-color: var(--de-primary);
3705
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
3706
+ }
3707
+
3708
+ .de-find-modal__backdrop--portal .de-compare-modal__output {
3709
+ min-height: 300px;
3710
+ max-height: 380px;
3711
+ overflow-y: auto;
3712
+ padding: 10px 12px;
3713
+ border: 1px solid var(--de-border);
3714
+ border-radius: 8px;
3715
+ background: var(--de-content-bg);
3716
+ font-size: 0.85rem;
3717
+ line-height: 1.6;
3718
+ }
3719
+
3720
+ .de-find-modal__backdrop--portal .de-compare-modal__legend {
3721
+ display: flex;
3722
+ gap: 12px;
3723
+ font-size: 0.72rem;
3724
+ }
3725
+
3726
+ .de-compare-modal__legend-item {
3727
+ display: inline-flex;
3728
+ align-items: center;
3729
+ padding: 2px 8px;
3730
+ border-radius: 4px;
3731
+ font-weight: 600;
3732
+ }
3733
+
3734
+ .de-compare-modal__legend--add { background: #dcfce7; color: #166534; }
3735
+ .de-compare-modal__legend--del { background: #fee2e2; color: #991b1b; }
3736
+ .de-compare-modal__legend--chg { background: #fef9c3; color: #854d0e; }
3737
+
3738
+ .de-find-modal__backdrop--portal .de-compare__line { margin: 2px 0; padding: 3px 6px; border-radius: 4px; }
3739
+ .de-find-modal__backdrop--portal .de-compare__line--equal { color: var(--de-text-primary); }
3740
+ .de-find-modal__backdrop--portal .de-compare__line--insert { background: #dcfce7; color: #166534; }
3741
+ .de-find-modal__backdrop--portal .de-compare__line--delete { background: #fee2e2; color: #991b1b; text-decoration: line-through; }
3742
+ .de-find-modal__backdrop--portal .de-compare__line--change { background: #fef9c3; color: #854d0e; }
3743
+
3744
+ .de-find-modal__backdrop--portal .de-compare__ins {
3745
+ background: #bbf7d0; color: #14532d; border-radius: 2px; padding: 0 1px;
3746
+ }
3747
+ .de-find-modal__backdrop--portal .de-compare__del {
3748
+ background: #fecaca; color: #7f1d1d; text-decoration: line-through; border-radius: 2px; padding: 0 1px;
3749
+ }
3750
+
3751
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--add { background: rgba(20,83,45,.35); color: #86efac; }
3752
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--del { background: rgba(127,29,29,.35); color: #fca5a5; }
3753
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--chg { background: rgba(133,77,14,.3); color: #fde047; }
3754
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare__line--insert { background: rgba(20,83,45,.3); color: #86efac; }
3755
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare__line--delete { background: rgba(127,29,29,.3); color: #fca5a5; }
3756
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare__line--change { background: rgba(133,77,14,.25); color: #fde047; }
3757
+
3758
+ /* ── Block drag-and-drop ────────────────────────────── */
3759
+ .de-block-drag-container {
3760
+ position: absolute;
3761
+ top: 0;
3762
+ left: 0;
3763
+ width: 0;
3764
+ height: 0;
3765
+ pointer-events: none;
3766
+ z-index: 5;
3767
+ }
3768
+
3769
+ .de-block-drag-handle {
3770
+ position: absolute;
3771
+ display: flex;
3772
+ align-items: center;
3773
+ justify-content: center;
3774
+ width: 20px;
3775
+ cursor: grab;
3776
+ pointer-events: auto;
3777
+ opacity: 0;
3778
+ transition: opacity 0.15s;
3779
+ color: var(--de-text-muted, #94a3b8);
3780
+ border-radius: 3px;
3781
+ user-select: none;
3782
+ }
3783
+ .de-block-drag-handle:hover {
3784
+ opacity: 1 !important;
3785
+ color: var(--de-text-primary, #0f172a);
3786
+ background: var(--de-secondary, #f1f5f9);
3787
+ }
3788
+ .de-content:hover .de-block-drag-handle {
3789
+ opacity: 0.35;
3790
+ }
3791
+
3792
+ .de-block-drop-indicator {
3793
+ position: absolute;
3794
+ left: 0;
3795
+ right: 0;
3796
+ height: 2px;
3797
+ background: var(--de-primary, #2563eb);
3798
+ border-radius: 1px;
3799
+ z-index: 10;
3800
+ pointer-events: none;
3801
+ }
3802
+ .de-block-drop-indicator::before,
3803
+ .de-block-drop-indicator::after {
3804
+ content: "";
3805
+ position: absolute;
3806
+ top: -3px;
3807
+ width: 8px;
3808
+ height: 8px;
3809
+ border-radius: 50%;
3810
+ background: var(--de-primary, #2563eb);
3811
+ }
3812
+ .de-block-drop-indicator::before { left: -4px; }
3813
+ .de-block-drop-indicator::after { right: -4px; }
3814
+
3815
+ .de-block-dragging {
3816
+ opacity: 0.4;
3817
+ }
3818
+
3819
+ .de-block-drag-active {
3820
+ cursor: grabbing !important;
3821
+ }
3822
+
3823
+ .de-block-drag-ghost {
3824
+ position: fixed;
3825
+ z-index: 10001;
3826
+ padding: 6px 12px;
3827
+ max-width: 320px;
3828
+ background: var(--de-toolbar-bg, #fff);
3829
+ border: 1px solid var(--de-border, #e2e8f0);
3830
+ border-radius: 6px;
3831
+ box-shadow: 0 4px 12px rgba(0,0,0,.15);
3832
+ font-size: 13px;
3833
+ color: var(--de-text-primary, #0f172a);
3834
+ white-space: nowrap;
3835
+ overflow: hidden;
3836
+ text-overflow: ellipsis;
3837
+ pointer-events: none;
3838
+ }
3839
+
3840
+ /* Dark mode */
3841
+ .de-root--dark .de-block-drag-handle:hover {
3842
+ background: var(--de-secondary, #334155);
3843
+ }
3844
+ .de-root--dark .de-block-drag-ghost {
3845
+ background: #1e293b;
3846
+ border-color: #475569;
3847
+ }
3848
+
3849
+ /* ── Slash command menu ──────────────────────────────── */
3850
+ .de-slash-menu {
3851
+ z-index: 10001;
3852
+ width: 240px;
3853
+ max-height: 320px;
3854
+ overflow-y: auto;
3855
+ padding: 6px;
3856
+ background: var(--de-toolbar-bg, #fff);
3857
+ border: 1px solid var(--de-border, #e2e8f0);
3858
+ border-radius: 10px;
3859
+ box-shadow: 0 8px 24px rgba(0,0,0,.12), 0 2px 6px rgba(0,0,0,.06);
3860
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3861
+ }
3862
+ .de-slash-menu[hidden] { display: none !important; }
3863
+
3864
+ .de-slash-menu__item {
3865
+ display: flex;
3866
+ align-items: center;
3867
+ gap: 10px;
3868
+ padding: 8px 10px;
3869
+ border-radius: 7px;
3870
+ cursor: pointer;
3871
+ font-size: 0.8125rem;
3872
+ font-weight: 500;
3873
+ color: var(--de-text-primary, #0f172a);
3874
+ transition: background 0.12s;
3875
+ }
3876
+ .de-slash-menu__item:hover,
3877
+ .de-slash-menu__item--active {
3878
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
3879
+ }
3880
+ .de-slash-menu__icon {
3881
+ display: inline-flex;
3882
+ align-items: center;
3883
+ justify-content: center;
3884
+ width: 28px;
3885
+ height: 28px;
3886
+ border-radius: 6px;
3887
+ background: var(--de-secondary, #f1f5f9);
3888
+ font-size: 0.75rem;
3889
+ font-weight: 700;
3890
+ color: var(--de-text-muted, #64748b);
3891
+ flex-shrink: 0;
3892
+ }
3893
+ .de-slash-menu__label {
3894
+ flex: 1;
3895
+ }
3896
+ .de-slash-menu__empty {
3897
+ padding: 16px 10px;
3898
+ text-align: center;
3899
+ font-size: 0.8125rem;
3900
+ color: var(--de-text-muted, #64748b);
3901
+ }
3902
+
3903
+ /* Dark mode */
3904
+ .de-root--dark .de-slash-menu {
3905
+ background: #1e293b;
3906
+ border-color: #475569;
3907
+ }
3908
+ .de-root--dark .de-slash-menu__icon {
3909
+ background: #334155;
3910
+ color: #94a3b8;
3911
+ }