@richhtmleditor/themes 1.0.0 → 1.1.1

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
  }
@@ -633,6 +809,14 @@
633
809
  background: color-mix(in srgb, var(--de-primary, #2563eb) 12%, var(--de-toolbar-bg, #fff));
634
810
  color: var(--de-primary, #2563eb);
635
811
  }
812
+ .de-block-style-gallery__sep {
813
+ margin: 4px 8px;
814
+ border: none;
815
+ border-top: 1px solid var(--de-border, #e2e8f0);
816
+ }
817
+ .de-block-style-gallery__item--custom {
818
+ font-style: italic;
819
+ }
636
820
 
637
821
  #richhtmleditor-root .de-character-style-gallery {
638
822
  position: relative;
@@ -950,9 +1134,10 @@ del.de-track-delete,
950
1134
  }
951
1135
 
952
1136
  #richhtmleditor-root .de-table-side-rail__menu {
953
- position: absolute;
954
- z-index: 44;
1137
+ position: fixed;
1138
+ z-index: 10000;
955
1139
  min-width: 140px;
1140
+ width: 300px;
956
1141
  padding: 6px;
957
1142
  background: var(--de-content-bg);
958
1143
  border: 1px solid var(--de-border);
@@ -961,6 +1146,8 @@ del.de-track-delete,
961
1146
  display: flex;
962
1147
  flex-direction: column;
963
1148
  gap: 2px;
1149
+ max-height: 70vh;
1150
+ overflow-y: auto;
964
1151
  }
965
1152
 
966
1153
  #richhtmleditor-root .de-table-side-rail__menu[hidden] {
@@ -992,27 +1179,41 @@ del.de-track-delete,
992
1179
  }
993
1180
 
994
1181
  #richhtmleditor-root .de-table-side-rail__swatches {
995
- display: flex;
996
- flex-wrap: wrap;
997
- gap: 6px;
998
- padding: 4px 8px 8px;
1182
+ display: grid;
1183
+ grid-template-columns: repeat(12, 1fr);
1184
+ gap: 3px;
1185
+ padding: 6px 8px 8px;
999
1186
  }
1000
1187
 
1001
1188
  #richhtmleditor-root .de-table-side-rail__swatch {
1002
- width: 22px;
1003
- height: 22px;
1004
- border: 1px solid var(--de-border);
1005
- border-radius: 4px;
1189
+ width: 20px;
1190
+ height: 20px;
1191
+ border: 1px solid rgba(0,0,0,0.12);
1192
+ border-radius: 3px;
1006
1193
  cursor: pointer;
1007
1194
  padding: 0;
1195
+ transition: transform 0.1s, box-shadow 0.1s;
1196
+ }
1197
+
1198
+ #richhtmleditor-root .de-table-side-rail__swatch:hover {
1199
+ transform: scale(1.25);
1200
+ box-shadow: 0 2px 6px rgba(0,0,0,0.2);
1201
+ z-index: 1;
1202
+ position: relative;
1008
1203
  }
1009
1204
 
1010
1205
  #richhtmleditor-root .de-table-side-rail__swatch--none {
1011
- display: grid;
1012
- place-items: center;
1013
- font-size: 0.85rem;
1206
+ grid-column: 1 / -1;
1207
+ width: 100%;
1208
+ height: 24px;
1209
+ display: flex;
1210
+ align-items: center;
1211
+ justify-content: center;
1212
+ gap: 4px;
1213
+ font-size: 0.75rem;
1014
1214
  color: var(--de-text-muted);
1015
1215
  background: var(--de-content-bg);
1216
+ margin-bottom: 2px;
1016
1217
  }
1017
1218
 
1018
1219
  #richhtmleditor-root .de-content td.de-table-row-active,
@@ -1573,6 +1774,8 @@ del.de-track-delete,
1573
1774
  --de-border: #e2e8f0;
1574
1775
  z-index: 10000;
1575
1776
  min-width: 188px;
1777
+ max-height: 70vh;
1778
+ overflow-y: auto;
1576
1779
  padding: 8px;
1577
1780
  background: var(--de-toolbar-bg);
1578
1781
  border: 1px solid var(--de-border);
@@ -1865,43 +2068,134 @@ del.de-track-delete,
1865
2068
  }
1866
2069
 
1867
2070
  .de-find-modal__backdrop--portal .de-a11y-modal {
1868
- width: min(420px, calc(100vw - 32px));
2071
+ width: min(560px, calc(100vw - 32px));
1869
2072
  }
1870
2073
 
1871
2074
  .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);
2075
+ gap: 14px;
1879
2076
  }
1880
2077
 
1881
- .de-find-modal__backdrop--portal .de-a11y-modal__summary--success {
2078
+ /* ── Score section ──────────────────────────────────────────────────────── */
2079
+ .de-find-modal__backdrop--portal .de-a11y-modal__score {
1882
2080
  display: flex;
1883
2081
  align-items: center;
1884
- gap: 10px;
2082
+ gap: 14px;
1885
2083
  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;
2084
+ border-radius: 12px;
2085
+ border: 1px solid var(--de-border);
2086
+ }
2087
+
2088
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--pass {
2089
+ background: color-mix(in srgb, #16a34a 8%, var(--de-content-bg));
2090
+ border-color: color-mix(in srgb, #16a34a 30%, var(--de-border));
2091
+ }
2092
+
2093
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--fail {
2094
+ background: color-mix(in srgb, #dc2626 6%, var(--de-content-bg));
2095
+ border-color: color-mix(in srgb, #dc2626 28%, var(--de-border));
2096
+ }
2097
+
2098
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--warn {
2099
+ background: color-mix(in srgb, #d97706 8%, var(--de-content-bg));
2100
+ border-color: color-mix(in srgb, #d97706 28%, var(--de-border));
1891
2101
  }
1892
2102
 
1893
- .de-find-modal__backdrop--portal .de-a11y-modal__summary--success::before {
1894
- content: "✓";
2103
+ .de-find-modal__backdrop--portal .de-a11y-modal__score-icon {
1895
2104
  display: inline-flex;
1896
2105
  align-items: center;
1897
2106
  justify-content: center;
1898
- width: 1.5rem;
1899
- height: 1.5rem;
2107
+ width: 2.2rem;
2108
+ height: 2.2rem;
1900
2109
  border-radius: 999px;
2110
+ font-size: 0.95rem;
2111
+ font-weight: 900;
2112
+ flex-shrink: 0;
2113
+ line-height: 1;
2114
+ }
2115
+
2116
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--pass .de-a11y-modal__score-icon {
1901
2117
  background: #16a34a;
1902
2118
  color: #fff;
1903
- font-size: 0.85rem;
1904
- flex-shrink: 0;
2119
+ }
2120
+
2121
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--fail .de-a11y-modal__score-icon {
2122
+ background: #dc2626;
2123
+ color: #fff;
2124
+ }
2125
+
2126
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--warn .de-a11y-modal__score-icon {
2127
+ background: #d97706;
2128
+ color: #fff;
2129
+ }
2130
+
2131
+ .de-find-modal__backdrop--portal .de-a11y-modal__score-title {
2132
+ font-size: 0.9375rem;
2133
+ font-weight: 700;
2134
+ line-height: 1.2;
2135
+ }
2136
+
2137
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--pass .de-a11y-modal__score-title { color: #166534; }
2138
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--fail .de-a11y-modal__score-title { color: #991b1b; }
2139
+ .de-find-modal__backdrop--portal .de-a11y-modal__score--warn .de-a11y-modal__score-title { color: #92400e; }
2140
+
2141
+ .de-find-modal__backdrop--portal .de-a11y-modal__score-desc {
2142
+ font-size: 0.8125rem;
2143
+ color: var(--de-text-muted);
2144
+ margin-top: 3px;
2145
+ line-height: 1.4;
2146
+ }
2147
+
2148
+ /* ── Stats row ──────────────────────────────────────────────────────────── */
2149
+ .de-find-modal__backdrop--portal .de-a11y-modal__stats {
2150
+ display: flex;
2151
+ gap: 8px;
2152
+ flex-wrap: wrap;
2153
+ }
2154
+
2155
+ .de-find-modal__backdrop--portal .de-a11y-modal__stat {
2156
+ display: inline-flex;
2157
+ align-items: center;
2158
+ padding: 4px 12px;
2159
+ border-radius: 999px;
2160
+ font-size: 0.8rem;
2161
+ font-weight: 700;
2162
+ letter-spacing: 0.01em;
2163
+ border: 1px solid transparent;
2164
+ }
2165
+
2166
+ .de-find-modal__backdrop--portal .de-a11y-modal__stat--error {
2167
+ background: color-mix(in srgb, #dc2626 12%, transparent);
2168
+ color: #dc2626;
2169
+ border-color: color-mix(in srgb, #dc2626 28%, transparent);
2170
+ }
2171
+
2172
+ .de-find-modal__backdrop--portal .de-a11y-modal__stat--warning {
2173
+ background: color-mix(in srgb, #d97706 12%, transparent);
2174
+ color: #b45309;
2175
+ border-color: color-mix(in srgb, #d97706 28%, transparent);
2176
+ }
2177
+
2178
+ /* ── List wrap ──────────────────────────────────────────────────────────── */
2179
+ .de-find-modal__backdrop--portal .de-a11y-modal__list-wrap {
2180
+ display: flex;
2181
+ flex-direction: column;
2182
+ gap: 4px;
2183
+ max-height: min(50vh, 340px);
2184
+ overflow-y: auto;
2185
+ scrollbar-width: thin;
2186
+ }
2187
+
2188
+ .de-find-modal__backdrop--portal .de-a11y-modal__section-header {
2189
+ font-size: 0.6875rem;
2190
+ font-weight: 700;
2191
+ letter-spacing: 0.08em;
2192
+ text-transform: uppercase;
2193
+ color: var(--de-text-muted);
2194
+ padding: 8px 2px 4px;
2195
+ }
2196
+
2197
+ .de-find-modal__backdrop--portal .de-a11y-modal__section-header:first-child {
2198
+ padding-top: 2px;
1905
2199
  }
1906
2200
 
1907
2201
  .de-find-modal__backdrop--portal .de-a11y-modal__list {
@@ -1910,57 +2204,85 @@ del.de-track-delete,
1910
2204
  list-style: none;
1911
2205
  display: flex;
1912
2206
  flex-direction: column;
1913
- gap: 8px;
1914
- max-height: min(50vh, 320px);
1915
- overflow: auto;
2207
+ gap: 6px;
1916
2208
  }
1917
2209
 
2210
+ /* ── Issue items ────────────────────────────────────────────────────────── */
1918
2211
  .de-find-modal__backdrop--portal .de-a11y-modal__item {
1919
2212
  display: flex;
1920
2213
  align-items: flex-start;
1921
- gap: 10px;
1922
- padding: 10px 12px;
1923
- border-radius: 8px;
2214
+ gap: 12px;
2215
+ padding: 11px 14px;
2216
+ border-radius: 10px;
1924
2217
  border: 1px solid var(--de-border);
2218
+ border-left-width: 3px;
1925
2219
  background: var(--de-content-bg);
1926
2220
  }
1927
2221
 
1928
2222
  .de-find-modal__backdrop--portal .de-a11y-modal__item--error {
1929
- border-color: color-mix(in srgb, #dc2626 35%, var(--de-border));
1930
- background: color-mix(in srgb, #dc2626 6%, var(--de-content-bg));
2223
+ border-left-color: #dc2626;
2224
+ border-color: color-mix(in srgb, #dc2626 22%, var(--de-border));
2225
+ background: color-mix(in srgb, #dc2626 4%, var(--de-content-bg));
1931
2226
  }
1932
2227
 
1933
2228
  .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));
2229
+ border-left-color: #d97706;
2230
+ border-color: color-mix(in srgb, #d97706 22%, var(--de-border));
2231
+ background: color-mix(in srgb, #d97706 4%, var(--de-content-bg));
1936
2232
  }
1937
2233
 
1938
- .de-find-modal__backdrop--portal .de-a11y-modal__badge {
2234
+ .de-find-modal__backdrop--portal .de-a11y-modal__item-icon {
2235
+ display: inline-flex;
2236
+ align-items: center;
2237
+ justify-content: center;
2238
+ width: 1.5rem;
2239
+ height: 1.5rem;
2240
+ border-radius: 999px;
2241
+ font-size: 0.7rem;
2242
+ font-weight: 900;
1939
2243
  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;
2244
+ margin-top: 1px;
2245
+ line-height: 1;
1946
2246
  }
1947
2247
 
1948
- .de-find-modal__backdrop--portal .de-a11y-modal__item--error .de-a11y-modal__badge {
2248
+ .de-find-modal__backdrop--portal .de-a11y-modal__item--error .de-a11y-modal__item-icon {
1949
2249
  background: #dc2626;
1950
2250
  color: #fff;
1951
2251
  }
1952
2252
 
1953
- .de-find-modal__backdrop--portal .de-a11y-modal__item--warning .de-a11y-modal__badge {
2253
+ .de-find-modal__backdrop--portal .de-a11y-modal__item--warning .de-a11y-modal__item-icon {
1954
2254
  background: #d97706;
1955
2255
  color: #fff;
1956
2256
  }
1957
2257
 
2258
+ .de-find-modal__backdrop--portal .de-a11y-modal__item-body {
2259
+ display: flex;
2260
+ flex-direction: column;
2261
+ gap: 3px;
2262
+ min-width: 0;
2263
+ }
2264
+
2265
+ .de-find-modal__backdrop--portal .de-a11y-modal__rule {
2266
+ font-size: 0.7rem;
2267
+ font-weight: 700;
2268
+ letter-spacing: 0.06em;
2269
+ text-transform: uppercase;
2270
+ color: var(--de-text-muted);
2271
+ }
2272
+
1958
2273
  .de-find-modal__backdrop--portal .de-a11y-modal__message {
1959
2274
  font-size: 0.875rem;
1960
- line-height: 1.45;
2275
+ font-weight: 500;
2276
+ line-height: 1.4;
1961
2277
  color: var(--de-text-primary);
1962
2278
  }
1963
2279
 
2280
+ .de-find-modal__backdrop--portal .de-a11y-modal__hint {
2281
+ font-size: 0.8rem;
2282
+ line-height: 1.4;
2283
+ color: var(--de-text-muted);
2284
+ }
2285
+
1964
2286
  .de-find-modal__backdrop--portal .de-format-modal__color-row {
1965
2287
  display: flex;
1966
2288
  align-items: center;
@@ -2446,6 +2768,7 @@ del.de-track-delete,
2446
2768
  outline-offset: -2px;
2447
2769
  }
2448
2770
 
2771
+ /* ---- Help dialog ---- */
2449
2772
  .de-shortcut-help__backdrop {
2450
2773
  position: fixed;
2451
2774
  inset: 0;
@@ -2460,56 +2783,178 @@ del.de-track-delete,
2460
2783
  }
2461
2784
 
2462
2785
  .de-shortcut-help__panel {
2463
- width: min(520px, calc(100vw - 32px));
2464
- max-height: min(80vh, 640px);
2465
- overflow: auto;
2466
- padding: 20px 22px;
2786
+ display: flex;
2787
+ flex-direction: column;
2788
+ width: min(600px, calc(100vw - 32px));
2789
+ max-height: min(80vh, 700px);
2467
2790
  background: var(--de-toolbar-bg, #fff);
2468
2791
  color: var(--de-text-primary, #111);
2469
2792
  border: 1px solid var(--de-border, #d1d5db);
2470
2793
  border-radius: 12px;
2471
2794
  box-shadow: 0 20px 48px rgba(15, 23, 42, 0.2);
2795
+ overflow: hidden;
2796
+ }
2797
+
2798
+ /* Header */
2799
+ .de-shortcut-help__header {
2800
+ display: flex;
2801
+ align-items: center;
2802
+ justify-content: space-between;
2803
+ padding: 16px 20px 0;
2472
2804
  }
2473
2805
 
2474
2806
  .de-shortcut-help__title {
2475
- margin: 0 0 12px;
2476
- font-size: 1.1rem;
2807
+ margin: 0;
2808
+ font-size: 1.15rem;
2809
+ font-weight: 600;
2810
+ }
2811
+
2812
+ .de-shortcut-help__close-x {
2813
+ background: none;
2814
+ border: none;
2815
+ font-size: 1.4rem;
2816
+ line-height: 1;
2817
+ padding: 4px 8px;
2818
+ cursor: pointer;
2819
+ color: var(--de-text-muted, #6b7280);
2820
+ border-radius: 6px;
2821
+ }
2822
+ .de-shortcut-help__close-x:hover {
2823
+ background: color-mix(in srgb, var(--de-text-muted, #6b7280) 12%, transparent);
2824
+ }
2825
+
2826
+ /* Tabs */
2827
+ .de-shortcut-help__tabs {
2828
+ display: flex;
2829
+ gap: 0;
2830
+ padding: 12px 20px 0;
2831
+ border-bottom: 1px solid var(--de-border, #d1d5db);
2477
2832
  }
2478
2833
 
2834
+ .de-shortcut-help__tab {
2835
+ background: none;
2836
+ border: none;
2837
+ border-bottom: 2px solid transparent;
2838
+ padding: 8px 16px;
2839
+ font-size: 0.85rem;
2840
+ font-weight: 500;
2841
+ cursor: pointer;
2842
+ color: var(--de-text-muted, #6b7280);
2843
+ transition: color 0.15s, border-color 0.15s;
2844
+ }
2845
+ .de-shortcut-help__tab:hover {
2846
+ color: var(--de-text-primary, #111);
2847
+ }
2848
+ .de-shortcut-help__tab--active {
2849
+ color: var(--de-primary, #2563eb);
2850
+ border-bottom-color: var(--de-primary, #2563eb);
2851
+ }
2852
+
2853
+ /* Body (scrollable) */
2479
2854
  .de-shortcut-help__body {
2480
2855
  display: grid;
2481
- gap: 14px;
2856
+ gap: 16px;
2857
+ padding: 16px 20px;
2858
+ overflow-y: auto;
2859
+ flex: 1;
2860
+ min-height: 0;
2861
+ }
2862
+
2863
+ .de-shortcut-help__body[hidden] {
2864
+ display: none !important;
2482
2865
  }
2483
2866
 
2867
+ /* Section headings */
2484
2868
  .de-shortcut-help__section h3 {
2485
- margin: 0 0 6px;
2486
- font-size: 0.82rem;
2869
+ margin: 0 0 8px;
2870
+ font-size: 0.8rem;
2487
2871
  text-transform: uppercase;
2488
- letter-spacing: 0.04em;
2872
+ letter-spacing: 0.05em;
2873
+ font-weight: 600;
2489
2874
  color: var(--de-text-muted, #6b7280);
2490
2875
  }
2491
2876
 
2877
+ /* Shortcut list */
2492
2878
  .de-shortcut-help__list {
2493
2879
  display: grid;
2494
- grid-template-columns: minmax(120px, 1fr) 2fr;
2495
- gap: 6px 12px;
2880
+ grid-template-columns: minmax(160px, auto) 1fr;
2881
+ gap: 6px 16px;
2496
2882
  margin: 0;
2497
2883
  }
2498
2884
 
2499
2885
  .de-shortcut-help__list dt {
2500
2886
  margin: 0;
2887
+ display: flex;
2888
+ align-items: center;
2889
+ gap: 4px;
2890
+ }
2891
+
2892
+ .de-shortcut-help__list dt kbd {
2893
+ display: inline-block;
2894
+ padding: 2px 7px;
2501
2895
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2502
- font-size: 0.78rem;
2503
- color: var(--de-text-primary, #111);
2896
+ font-size: 0.75rem;
2897
+ background: color-mix(in srgb, var(--de-text-primary, #111) 8%, transparent);
2898
+ border: 1px solid var(--de-border, #d1d5db);
2899
+ border-radius: 4px;
2900
+ line-height: 1.4;
2504
2901
  }
2505
2902
 
2506
2903
  .de-shortcut-help__list dd {
2507
2904
  margin: 0;
2508
- font-size: 0.86rem;
2905
+ font-size: 0.85rem;
2906
+ display: flex;
2907
+ align-items: center;
2908
+ }
2909
+
2910
+ /* Feature list */
2911
+ .de-shortcut-help__feature-list {
2912
+ display: grid;
2913
+ grid-template-columns: minmax(140px, auto) 1fr;
2914
+ gap: 6px 16px;
2915
+ margin: 0;
2916
+ }
2917
+
2918
+ .de-shortcut-help__feature-list dt {
2919
+ margin: 0;
2920
+ font-size: 0.85rem;
2921
+ font-weight: 600;
2922
+ color: var(--de-text-primary, #111);
2923
+ }
2924
+
2925
+ .de-shortcut-help__feature-list dd {
2926
+ margin: 0;
2927
+ font-size: 0.83rem;
2928
+ color: var(--de-text-muted, #6b7280);
2929
+ line-height: 1.45;
2930
+ }
2931
+
2932
+ /* Footer */
2933
+ .de-shortcut-help__footer {
2934
+ display: flex;
2935
+ align-items: center;
2936
+ justify-content: space-between;
2937
+ padding: 12px 20px;
2938
+ border-top: 1px solid var(--de-border, #d1d5db);
2939
+ }
2940
+
2941
+ .de-shortcut-help__hint {
2942
+ font-size: 0.78rem;
2943
+ color: var(--de-text-muted, #6b7280);
2509
2944
  }
2510
2945
 
2511
- .de-shortcut-help__close {
2512
- margin-top: 16px;
2946
+ .de-shortcut-help__close-btn {
2947
+ padding: 6px 20px;
2948
+ background: var(--de-primary, #2563eb);
2949
+ color: #fff;
2950
+ border: none;
2951
+ border-radius: 6px;
2952
+ font-size: 0.85rem;
2953
+ font-weight: 500;
2954
+ cursor: pointer;
2955
+ }
2956
+ .de-shortcut-help__close-btn:hover {
2957
+ background: var(--de-primary-hover, #1d4ed8);
2513
2958
  }
2514
2959
 
2515
2960
  #richhtmleditor-root .de-a11y-live {
@@ -2640,3 +3085,1318 @@ del.de-track-delete,
2640
3085
  outline: 2px solid var(--de-brand, #2563eb);
2641
3086
  outline-offset: 1px;
2642
3087
  }
3088
+
3089
+ /* ── Paste Special Modal ───────────────────────────────────────────────────── */
3090
+
3091
+ .de-paste-special-backdrop {
3092
+ position: fixed;
3093
+ top: 0;
3094
+ left: 0;
3095
+ right: 0;
3096
+ bottom: 0;
3097
+ background: rgba(15, 23, 42, 0.3);
3098
+ z-index: 10000;
3099
+ }
3100
+
3101
+ .de-paste-special-modal {
3102
+ position: fixed;
3103
+ top: 50%;
3104
+ left: 50%;
3105
+ transform: translate(-50%, -50%);
3106
+ width: 90%;
3107
+ max-width: 400px;
3108
+ background: var(--de-toolbar-bg, #fff);
3109
+ border: 1px solid var(--de-border, #e2e8f0);
3110
+ border-radius: 8px;
3111
+ box-shadow: 0 12px 32px rgba(15, 23, 42, 0.15);
3112
+ z-index: 10001;
3113
+ color: var(--de-text-primary, #0f172a);
3114
+ }
3115
+
3116
+ .de-paste-special-modal__head {
3117
+ display: flex;
3118
+ align-items: center;
3119
+ justify-content: space-between;
3120
+ padding: 12px 16px;
3121
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
3122
+ }
3123
+
3124
+ .de-paste-special-modal__title {
3125
+ margin: 0;
3126
+ font-size: 14px;
3127
+ font-weight: 600;
3128
+ }
3129
+
3130
+ .de-paste-special-modal__close {
3131
+ border: 0;
3132
+ background: transparent;
3133
+ cursor: pointer;
3134
+ font-size: 18px;
3135
+ line-height: 1;
3136
+ padding: 4px 8px;
3137
+ color: var(--de-text-muted, #64748b);
3138
+ }
3139
+
3140
+ .de-paste-special-modal__close:hover {
3141
+ color: var(--de-text-primary, #0f172a);
3142
+ }
3143
+
3144
+ .de-paste-special-modal__body {
3145
+ padding: 16px;
3146
+ }
3147
+
3148
+ .de-paste-special-modal__option {
3149
+ margin-bottom: 12px;
3150
+ }
3151
+
3152
+ .de-paste-special-modal__label {
3153
+ display: flex;
3154
+ align-items: center;
3155
+ gap: 8px;
3156
+ cursor: pointer;
3157
+ font-size: 13px;
3158
+ user-select: none;
3159
+ }
3160
+
3161
+ .de-paste-special-modal__checkbox {
3162
+ cursor: pointer;
3163
+ }
3164
+
3165
+ .de-paste-special-modal__status {
3166
+ margin-top: 8px;
3167
+ font-size: 12px;
3168
+ color: var(--de-text-muted, #64748b);
3169
+ }
3170
+
3171
+ .de-paste-special-modal__status--error {
3172
+ color: #dc2626;
3173
+ }
3174
+
3175
+ .de-paste-special-modal__actions {
3176
+ display: flex;
3177
+ gap: 8px;
3178
+ padding: 12px 16px;
3179
+ border-top: 1px solid var(--de-border, #e2e8f0);
3180
+ justify-content: flex-end;
3181
+ }
3182
+
3183
+ .de-paste-special-modal__btn {
3184
+ border: 1px solid var(--de-border, #d1d5db);
3185
+ border-radius: 6px;
3186
+ padding: 6px 16px;
3187
+ font: inherit;
3188
+ font-size: 13px;
3189
+ cursor: pointer;
3190
+ background: var(--de-content-bg, #fff);
3191
+ color: var(--de-text-primary, #0f172a);
3192
+ }
3193
+
3194
+ .de-paste-special-modal__btn:hover {
3195
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 6%, transparent);
3196
+ }
3197
+
3198
+ .de-paste-special-modal__btn--apply {
3199
+ background: var(--de-primary, #2563eb);
3200
+ color: #fff;
3201
+ border-color: var(--de-primary, #2563eb);
3202
+ }
3203
+
3204
+ .de-paste-special-modal__btn--apply:hover {
3205
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 110%, transparent);
3206
+ }
3207
+
3208
+ /* ── Emoji Picker Panel ────────────────────────────────────────────────────── */
3209
+
3210
+ .de-emoji-picker {
3211
+ --de-primary: #2563eb;
3212
+ --de-primary-hover: #1d4ed8;
3213
+ --de-toolbar-bg: #ffffff;
3214
+ --de-text-primary: #0f172a;
3215
+ --de-text-muted: #64748b;
3216
+ --de-border: #e2e8f0;
3217
+ position: fixed;
3218
+ z-index: 10000;
3219
+ width: 296px;
3220
+ background: var(--de-toolbar-bg);
3221
+ border: 1px solid var(--de-border);
3222
+ border-radius: 12px;
3223
+ box-shadow:
3224
+ 0 16px 40px rgba(15, 23, 42, 0.14),
3225
+ 0 2px 8px rgba(15, 23, 42, 0.06);
3226
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3227
+ color: var(--de-text-primary);
3228
+ display: flex;
3229
+ flex-direction: column;
3230
+ overflow: hidden;
3231
+ }
3232
+
3233
+ .de-emoji-picker--dark {
3234
+ --de-toolbar-bg: #1e293b;
3235
+ --de-text-primary: #f1f5f9;
3236
+ --de-text-muted: #94a3b8;
3237
+ --de-border: #334155;
3238
+ }
3239
+
3240
+ .de-emoji-picker__search-wrap {
3241
+ padding: 10px 10px 6px;
3242
+ }
3243
+
3244
+ .de-emoji-picker__search {
3245
+ width: 100%;
3246
+ box-sizing: border-box;
3247
+ padding: 6px 10px;
3248
+ border: 1px solid var(--de-border);
3249
+ border-radius: 8px;
3250
+ background: color-mix(in srgb, var(--de-toolbar-bg) 90%, var(--de-text-primary));
3251
+ color: var(--de-text-primary);
3252
+ font-size: 0.8125rem;
3253
+ font-family: inherit;
3254
+ outline: none;
3255
+ transition: border-color 0.15s;
3256
+ }
3257
+
3258
+ .de-emoji-picker__search:focus {
3259
+ border-color: var(--de-primary);
3260
+ }
3261
+
3262
+ .de-emoji-picker__search::placeholder {
3263
+ color: var(--de-text-muted);
3264
+ }
3265
+
3266
+ .de-emoji-picker__tabs {
3267
+ display: flex;
3268
+ flex-wrap: nowrap;
3269
+ overflow-x: auto;
3270
+ padding: 0 8px 6px;
3271
+ gap: 2px;
3272
+ scrollbar-width: none;
3273
+ }
3274
+
3275
+ .de-emoji-picker__tabs::-webkit-scrollbar {
3276
+ display: none;
3277
+ }
3278
+
3279
+ .de-emoji-picker__tab {
3280
+ flex-shrink: 0;
3281
+ width: 28px;
3282
+ height: 28px;
3283
+ border: 1px solid transparent;
3284
+ border-radius: 6px;
3285
+ background: transparent;
3286
+ cursor: pointer;
3287
+ font-size: 1rem;
3288
+ display: flex;
3289
+ align-items: center;
3290
+ justify-content: center;
3291
+ transition: background 0.12s, border-color 0.12s;
3292
+ }
3293
+
3294
+ .de-emoji-picker__tab:hover {
3295
+ background: color-mix(in srgb, var(--de-toolbar-bg) 78%, var(--de-primary));
3296
+ border-color: color-mix(in srgb, var(--de-border) 45%, var(--de-primary));
3297
+ }
3298
+
3299
+ .de-emoji-picker__tab--active {
3300
+ background: color-mix(in srgb, var(--de-primary) 12%, var(--de-toolbar-bg));
3301
+ border-color: color-mix(in srgb, var(--de-primary) 35%, var(--de-border));
3302
+ }
3303
+
3304
+ .de-emoji-picker__body {
3305
+ overflow-y: auto;
3306
+ max-height: 220px;
3307
+ padding: 4px 8px 8px;
3308
+ scrollbar-width: thin;
3309
+ scrollbar-color: var(--de-border) transparent;
3310
+ }
3311
+
3312
+ .de-emoji-picker__body::-webkit-scrollbar {
3313
+ width: 5px;
3314
+ }
3315
+
3316
+ .de-emoji-picker__body::-webkit-scrollbar-thumb {
3317
+ background: var(--de-border);
3318
+ border-radius: 3px;
3319
+ }
3320
+
3321
+ .de-emoji-picker__section {
3322
+ font-size: 0.7rem;
3323
+ font-weight: 600;
3324
+ color: var(--de-text-muted);
3325
+ text-transform: uppercase;
3326
+ letter-spacing: 0.05em;
3327
+ margin: 6px 2px 4px;
3328
+ }
3329
+
3330
+ .de-emoji-picker__grid {
3331
+ display: grid;
3332
+ grid-template-columns: repeat(8, 1fr);
3333
+ gap: 2px;
3334
+ }
3335
+
3336
+ .de-emoji-picker__btn {
3337
+ width: 32px;
3338
+ height: 32px;
3339
+ border: 1px solid transparent;
3340
+ border-radius: 6px;
3341
+ background: transparent;
3342
+ cursor: pointer;
3343
+ font-size: 1.1rem;
3344
+ display: flex;
3345
+ align-items: center;
3346
+ justify-content: center;
3347
+ transition: background 0.1s, border-color 0.1s, transform 0.08s;
3348
+ padding: 0;
3349
+ }
3350
+
3351
+ .de-emoji-picker__btn:hover {
3352
+ background: color-mix(in srgb, var(--de-toolbar-bg) 75%, var(--de-primary));
3353
+ border-color: color-mix(in srgb, var(--de-border) 40%, var(--de-primary));
3354
+ transform: scale(1.2);
3355
+ }
3356
+
3357
+ .de-emoji-picker__btn:active {
3358
+ transform: scale(1.05);
3359
+ }
3360
+
3361
+ .de-emoji-picker__empty {
3362
+ font-size: 0.8125rem;
3363
+ color: var(--de-text-muted);
3364
+ text-align: center;
3365
+ padding: 20px 0;
3366
+ margin: 0;
3367
+ }
3368
+
3369
+ /* ── Symbol Picker ─────────────────────────────────────────────────────────── */
3370
+
3371
+ .de-symbol-picker .de-emoji-picker__grid {
3372
+ grid-template-columns: repeat(8, 1fr);
3373
+ }
3374
+
3375
+ .de-symbol-picker__btn {
3376
+ font-size: 0.9rem;
3377
+ font-family: "Segoe UI Symbol", "Apple Symbols", "Symbol", monospace;
3378
+ }
3379
+
3380
+ /* ── Word Count Panel ──────────────────────────────────────────────────────── */
3381
+
3382
+ .de-word-count-panel {
3383
+ --de-primary: #2563eb;
3384
+ --de-toolbar-bg: #ffffff;
3385
+ --de-text-primary: #0f172a;
3386
+ --de-text-muted: #64748b;
3387
+ --de-border: #e2e8f0;
3388
+ position: fixed;
3389
+ z-index: 10000;
3390
+ width: 240px;
3391
+ background: var(--de-toolbar-bg);
3392
+ border: 1px solid var(--de-border);
3393
+ border-radius: 12px;
3394
+ box-shadow: 0 16px 40px rgba(15,23,42,.14), 0 2px 8px rgba(15,23,42,.06);
3395
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3396
+ color: var(--de-text-primary);
3397
+ padding: 14px 16px 12px;
3398
+ position: relative;
3399
+ }
3400
+
3401
+ .de-word-count-panel--dark {
3402
+ --de-toolbar-bg: #1e293b;
3403
+ --de-text-primary: #f1f5f9;
3404
+ --de-text-muted: #94a3b8;
3405
+ --de-border: #334155;
3406
+ }
3407
+
3408
+ .de-word-count-panel__title {
3409
+ font-size: 0.75rem;
3410
+ font-weight: 700;
3411
+ text-transform: uppercase;
3412
+ letter-spacing: 0.06em;
3413
+ color: var(--de-text-muted);
3414
+ margin: 0 0 10px;
3415
+ }
3416
+
3417
+ .de-word-count-panel__close {
3418
+ position: absolute;
3419
+ top: 8px;
3420
+ right: 10px;
3421
+ background: none;
3422
+ border: none;
3423
+ cursor: pointer;
3424
+ font-size: 1.1rem;
3425
+ color: var(--de-text-muted);
3426
+ line-height: 1;
3427
+ padding: 2px 4px;
3428
+ }
3429
+
3430
+ .de-word-count-panel__close:hover {
3431
+ color: var(--de-text-primary);
3432
+ }
3433
+
3434
+ .de-word-count-panel__stats {
3435
+ display: grid;
3436
+ grid-template-columns: 1fr auto;
3437
+ gap: 4px 12px;
3438
+ margin: 0;
3439
+ }
3440
+
3441
+ .de-word-count-panel__label {
3442
+ font-size: 0.8125rem;
3443
+ color: var(--de-text-muted);
3444
+ }
3445
+
3446
+ .de-word-count-panel__value {
3447
+ font-size: 0.8125rem;
3448
+ font-weight: 700;
3449
+ color: var(--de-text-primary);
3450
+ text-align: right;
3451
+ margin: 0;
3452
+ }
3453
+
3454
+ /* ── Video Embed ───────────────────────────────────────────────────────────── */
3455
+
3456
+ #richhtmleditor-root .de-video {
3457
+ margin: 1rem 0;
3458
+ max-width: 100%;
3459
+ box-sizing: border-box;
3460
+ position: relative;
3461
+ display: block;
3462
+ }
3463
+
3464
+ /* Alignment (editor chrome uses width + margin for float-free centering) */
3465
+ #richhtmleditor-root .de-video--left { margin-right: auto; }
3466
+ #richhtmleditor-root .de-video--right { margin-left: auto; }
3467
+ #richhtmleditor-root .de-video--center { margin-left: auto; margin-right: auto; }
3468
+
3469
+ /* Active / selected state */
3470
+ #richhtmleditor-root .de-video--active .de-video__wrap {
3471
+ outline: 2px solid var(--de-primary, #2563eb);
3472
+ outline-offset: 2px;
3473
+ }
3474
+
3475
+ #richhtmleditor-root .de-video__wrap {
3476
+ position: relative;
3477
+ padding-top: 56.25%; /* 16:9 */
3478
+ background: #000;
3479
+ border-radius: 6px;
3480
+ overflow: hidden;
3481
+ }
3482
+
3483
+ #richhtmleditor-root .de-video__wrap iframe {
3484
+ position: absolute;
3485
+ top: 0;
3486
+ left: 0;
3487
+ width: 100%;
3488
+ height: 100%;
3489
+ border: none;
3490
+ }
3491
+
3492
+ #richhtmleditor-root .de-video-caption {
3493
+ display: block;
3494
+ font-size: 0.8125rem;
3495
+ color: var(--de-text-muted, #64748b);
3496
+ text-align: center;
3497
+ margin-top: 6px;
3498
+ }
3499
+
3500
+ /* Resize handle — appears at bottom-right like image resizer */
3501
+ #richhtmleditor-root .de-video-resizer {
3502
+ position: absolute;
3503
+ bottom: 0;
3504
+ right: 0;
3505
+ width: 16px;
3506
+ height: 16px;
3507
+ cursor: se-resize;
3508
+ background: var(--de-primary, #2563eb);
3509
+ border-radius: 3px 0 6px 0;
3510
+ opacity: 0;
3511
+ transition: opacity 0.15s;
3512
+ }
3513
+ #richhtmleditor-root .de-video--active .de-video-resizer { opacity: 1; }
3514
+
3515
+ .de-video-modal { max-width: 420px; }
3516
+ .de-video-modal__body { padding: 12px 0 4px; }
3517
+ .de-video-modal__hint { font-size: 0.8125rem; color: var(--de-text-muted); margin: 0 0 8px; }
3518
+
3519
+ .de-video-modal__input {
3520
+ width: 100%;
3521
+ box-sizing: border-box;
3522
+ padding: 8px 10px;
3523
+ border: 1px solid var(--de-border);
3524
+ border-radius: 8px;
3525
+ background: color-mix(in srgb, var(--de-toolbar-bg, #fff) 90%, var(--de-text-primary, #0f172a));
3526
+ color: var(--de-text-primary, #0f172a);
3527
+ font-size: 0.875rem;
3528
+ font-family: inherit;
3529
+ outline: none;
3530
+ }
3531
+
3532
+ .de-video-modal__input:focus { border-color: var(--de-primary, #2563eb); }
3533
+ .de-video-modal__status { font-size: 0.8125rem; color: #dc2626; min-height: 1.2em; margin: 6px 0 0; }
3534
+
3535
+ /* ── Multi-column Layout ───────────────────────────────────────────────────── */
3536
+
3537
+ #richhtmleditor-root .de-section[data-style-id^="columns-"] > .de-section__title {
3538
+ display: none;
3539
+ }
3540
+
3541
+ #richhtmleditor-root .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3542
+ #richhtmleditor-root .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3543
+
3544
+ .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3545
+ .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3546
+
3547
+ /* ── Fullscreen / Focus Mode ───────────────────────────────────────────────── */
3548
+
3549
+ #richhtmleditor-root.de-root--fullscreen {
3550
+ position: fixed !important;
3551
+ inset: 0 !important;
3552
+ width: 100vw !important;
3553
+ height: 100vh !important;
3554
+ max-width: none !important;
3555
+ max-height: none !important;
3556
+ z-index: 9998;
3557
+ border-radius: 0 !important;
3558
+ overflow: hidden;
3559
+ display: flex;
3560
+ flex-direction: column;
3561
+ }
3562
+
3563
+ #richhtmleditor-root.de-root--fullscreen .de-content {
3564
+ flex: 1;
3565
+ overflow-y: auto;
3566
+ max-height: none !important;
3567
+ height: auto !important;
3568
+ }
3569
+
3570
+ /* ── Read Aloud Panel ──────────────────────────────────────────────────────── */
3571
+
3572
+ .de-read-aloud-panel {
3573
+ --de-primary: #2563eb;
3574
+ --de-primary-hover: #1d4ed8;
3575
+ --de-toolbar-bg: #ffffff;
3576
+ --de-text-primary: #0f172a;
3577
+ --de-text-muted: #64748b;
3578
+ --de-border: #e2e8f0;
3579
+ position: fixed;
3580
+ z-index: 10000;
3581
+ width: 260px;
3582
+ background: var(--de-toolbar-bg);
3583
+ border: 1px solid var(--de-border);
3584
+ border-radius: 12px;
3585
+ box-shadow:
3586
+ 0 16px 40px rgba(15, 23, 42, 0.14),
3587
+ 0 2px 8px rgba(15, 23, 42, 0.06);
3588
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3589
+ color: var(--de-text-primary);
3590
+ display: flex;
3591
+ flex-direction: column;
3592
+ gap: 10px;
3593
+ padding: 12px;
3594
+ }
3595
+
3596
+ .de-read-aloud-panel--dark {
3597
+ --de-toolbar-bg: #1e293b;
3598
+ --de-text-primary: #f1f5f9;
3599
+ --de-text-muted: #94a3b8;
3600
+ --de-border: #334155;
3601
+ }
3602
+
3603
+ .de-read-aloud-panel__status {
3604
+ font-size: 0.75rem;
3605
+ font-weight: 600;
3606
+ text-transform: uppercase;
3607
+ letter-spacing: 0.04em;
3608
+ color: var(--de-text-muted);
3609
+ text-align: center;
3610
+ }
3611
+
3612
+ .de-read-aloud-panel__controls {
3613
+ display: flex;
3614
+ gap: 8px;
3615
+ justify-content: center;
3616
+ }
3617
+
3618
+ .de-read-aloud-panel__btn {
3619
+ display: inline-flex;
3620
+ align-items: center;
3621
+ justify-content: center;
3622
+ width: 36px;
3623
+ height: 36px;
3624
+ border-radius: 8px;
3625
+ border: 1px solid var(--de-border);
3626
+ background: none;
3627
+ cursor: pointer;
3628
+ font-size: 1rem;
3629
+ color: var(--de-text-primary);
3630
+ transition: background 0.12s, border-color 0.12s;
3631
+ }
3632
+
3633
+ .de-read-aloud-panel__btn:hover {
3634
+ background: rgba(37, 99, 235, 0.08);
3635
+ border-color: var(--de-primary);
3636
+ color: var(--de-primary);
3637
+ }
3638
+
3639
+ .de-read-aloud-panel__btn--stop:hover {
3640
+ background: rgba(220, 38, 38, 0.1);
3641
+ border-color: #dc2626;
3642
+ color: #dc2626;
3643
+ }
3644
+
3645
+ .de-read-aloud-panel__row {
3646
+ display: flex;
3647
+ align-items: center;
3648
+ gap: 8px;
3649
+ }
3650
+
3651
+ .de-read-aloud-panel__label {
3652
+ font-size: 0.72rem;
3653
+ font-weight: 600;
3654
+ color: var(--de-text-muted);
3655
+ white-space: nowrap;
3656
+ min-width: 38px;
3657
+ }
3658
+
3659
+ .de-read-aloud-panel__speed {
3660
+ flex: 1;
3661
+ accent-color: var(--de-primary);
3662
+ cursor: pointer;
3663
+ }
3664
+
3665
+ .de-read-aloud-panel__speed-val {
3666
+ font-size: 0.72rem;
3667
+ color: var(--de-text-muted);
3668
+ min-width: 26px;
3669
+ text-align: right;
3670
+ }
3671
+
3672
+ .de-read-aloud-panel__voice {
3673
+ flex: 1;
3674
+ font-size: 0.75rem;
3675
+ padding: 3px 6px;
3676
+ border: 1px solid var(--de-border);
3677
+ border-radius: 6px;
3678
+ background: var(--de-toolbar-bg);
3679
+ color: var(--de-text-primary);
3680
+ cursor: pointer;
3681
+ max-width: 160px;
3682
+ overflow: hidden;
3683
+ text-overflow: ellipsis;
3684
+ }
3685
+
3686
+ /* ── Bookmark Modal ─────────────────────────────────────────────────────────── */
3687
+
3688
+ .de-find-modal__backdrop--portal .de-bookmark-modal {
3689
+ max-width: 420px;
3690
+ }
3691
+
3692
+ .de-find-modal__backdrop--portal .de-bookmark-modal__hint {
3693
+ font-size: 0.75rem;
3694
+ color: var(--de-text-muted);
3695
+ margin: 2px 0 8px;
3696
+ }
3697
+
3698
+ .de-find-modal__backdrop--portal .de-bookmark-modal__preview {
3699
+ font-size: 0.75rem;
3700
+ font-family: "Cascadia Code", "Fira Code", "Courier New", monospace;
3701
+ margin: 4px 0 0;
3702
+ color: var(--de-primary);
3703
+ }
3704
+
3705
+ .de-find-modal__backdrop--portal .de-bookmark-modal__remove {
3706
+ color: #dc2626;
3707
+ margin-right: auto;
3708
+ }
3709
+
3710
+ .de-find-modal__backdrop--portal .de-bookmark-modal__remove:hover {
3711
+ background: rgba(220, 38, 38, 0.08);
3712
+ border-color: #dc2626;
3713
+ }
3714
+
3715
+ /* ── Cross-Reference Modal ──────────────────────────────────────────────────── */
3716
+
3717
+ .de-find-modal__backdrop--portal .de-crossref-modal {
3718
+ max-width: 480px;
3719
+ }
3720
+
3721
+ .de-find-modal__backdrop--portal .de-crossref-modal__body {
3722
+ padding-bottom: 0;
3723
+ }
3724
+
3725
+ .de-find-modal__backdrop--portal .de-crossref-modal__list {
3726
+ margin-top: 8px;
3727
+ max-height: 280px;
3728
+ overflow-y: auto;
3729
+ border: 1px solid var(--de-border);
3730
+ border-radius: 8px;
3731
+ }
3732
+
3733
+ .de-find-modal__backdrop--portal .de-crossref-modal__list::-webkit-scrollbar {
3734
+ width: 4px;
3735
+ }
3736
+
3737
+ .de-find-modal__backdrop--portal .de-crossref-modal__list::-webkit-scrollbar-thumb {
3738
+ background: var(--de-border);
3739
+ border-radius: 4px;
3740
+ }
3741
+
3742
+ .de-find-modal__backdrop--portal .de-crossref-modal__item {
3743
+ display: flex;
3744
+ align-items: center;
3745
+ justify-content: space-between;
3746
+ gap: 8px;
3747
+ width: 100%;
3748
+ padding: 8px 12px;
3749
+ border: none;
3750
+ border-bottom: 1px solid var(--de-border);
3751
+ background: none;
3752
+ cursor: pointer;
3753
+ text-align: left;
3754
+ color: var(--de-text-primary);
3755
+ font-size: 0.85rem;
3756
+ transition: background 0.1s;
3757
+ }
3758
+
3759
+ .de-find-modal__backdrop--portal .de-crossref-modal__item:last-child {
3760
+ border-bottom: none;
3761
+ }
3762
+
3763
+ .de-find-modal__backdrop--portal .de-crossref-modal__item:hover {
3764
+ background: rgba(37, 99, 235, 0.06);
3765
+ color: var(--de-primary);
3766
+ }
3767
+
3768
+ .de-find-modal__backdrop--portal .de-crossref-modal__item-text {
3769
+ flex: 1;
3770
+ overflow: hidden;
3771
+ text-overflow: ellipsis;
3772
+ white-space: nowrap;
3773
+ }
3774
+
3775
+ .de-find-modal__backdrop--portal .de-crossref-modal__item-id {
3776
+ font-size: 0.72rem;
3777
+ font-family: "Cascadia Code", "Fira Code", "Courier New", monospace;
3778
+ color: var(--de-text-muted);
3779
+ white-space: nowrap;
3780
+ }
3781
+
3782
+ .de-find-modal__backdrop--portal .de-crossref-modal__empty {
3783
+ font-size: 0.85rem;
3784
+ color: var(--de-text-muted);
3785
+ text-align: center;
3786
+ padding: 20px 0;
3787
+ margin: 0;
3788
+ }
3789
+
3790
+ /* ── Bookmark Visual Indicator (editor only) ────────────────────────────────── */
3791
+
3792
+ #richhtmleditor-root [contenteditable="true"] :is(p, h1, h2, h3, h4, h5, h6)[id]::after {
3793
+ content: " 🔖";
3794
+ font-size: 0.75em;
3795
+ opacity: 0.45;
3796
+ user-select: none;
3797
+ pointer-events: none;
3798
+ }
3799
+
3800
+ /* ── Compare Modal ──────────────────────────────────────────────────────────── */
3801
+
3802
+ .de-find-modal__backdrop--portal .de-compare-modal {
3803
+ max-width: 860px;
3804
+ width: min(860px, 96vw);
3805
+ }
3806
+
3807
+ .de-find-modal__backdrop--portal .de-compare-modal__body {
3808
+ display: grid;
3809
+ grid-template-columns: 1fr 1fr;
3810
+ gap: 16px;
3811
+ padding-bottom: 0;
3812
+ }
3813
+
3814
+ .de-compare-modal__pane {
3815
+ display: flex;
3816
+ flex-direction: column;
3817
+ gap: 6px;
3818
+ }
3819
+
3820
+ .de-find-modal__backdrop--portal .de-compare-modal__textarea {
3821
+ min-height: 300px;
3822
+ padding: 10px 12px;
3823
+ border: 1px solid var(--de-border);
3824
+ border-radius: 8px;
3825
+ background: var(--de-content-bg);
3826
+ color: var(--de-text-primary);
3827
+ font-family: "Cascadia Code", "Fira Code", "Courier New", monospace;
3828
+ font-size: 0.78rem;
3829
+ resize: vertical;
3830
+ line-height: 1.5;
3831
+ }
3832
+
3833
+ .de-find-modal__backdrop--portal .de-compare-modal__textarea:focus {
3834
+ outline: none;
3835
+ border-color: var(--de-primary);
3836
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);
3837
+ }
3838
+
3839
+ .de-find-modal__backdrop--portal .de-compare-modal__output {
3840
+ min-height: 300px;
3841
+ max-height: 380px;
3842
+ overflow-y: auto;
3843
+ padding: 10px 12px;
3844
+ border: 1px solid var(--de-border);
3845
+ border-radius: 8px;
3846
+ background: var(--de-content-bg);
3847
+ font-size: 0.85rem;
3848
+ line-height: 1.6;
3849
+ }
3850
+
3851
+ .de-find-modal__backdrop--portal .de-compare-modal__legend {
3852
+ display: flex;
3853
+ gap: 12px;
3854
+ font-size: 0.72rem;
3855
+ }
3856
+
3857
+ .de-compare-modal__legend-item {
3858
+ display: inline-flex;
3859
+ align-items: center;
3860
+ padding: 2px 8px;
3861
+ border-radius: 4px;
3862
+ font-weight: 600;
3863
+ }
3864
+
3865
+ .de-compare-modal__legend--add { background: #dcfce7; color: #166534; }
3866
+ .de-compare-modal__legend--del { background: #fee2e2; color: #991b1b; }
3867
+ .de-compare-modal__legend--chg { background: #fef9c3; color: #854d0e; }
3868
+
3869
+ .de-find-modal__backdrop--portal .de-compare__line { margin: 2px 0; padding: 3px 6px; border-radius: 4px; }
3870
+ .de-find-modal__backdrop--portal .de-compare__line--equal { color: var(--de-text-primary); }
3871
+ .de-find-modal__backdrop--portal .de-compare__line--insert { background: #dcfce7; color: #166534; }
3872
+ .de-find-modal__backdrop--portal .de-compare__line--delete { background: #fee2e2; color: #991b1b; text-decoration: line-through; }
3873
+ .de-find-modal__backdrop--portal .de-compare__line--change { background: #fef9c3; color: #854d0e; }
3874
+
3875
+ .de-find-modal__backdrop--portal .de-compare__ins {
3876
+ background: #bbf7d0; color: #14532d; border-radius: 2px; padding: 0 1px;
3877
+ }
3878
+ .de-find-modal__backdrop--portal .de-compare__del {
3879
+ background: #fecaca; color: #7f1d1d; text-decoration: line-through; border-radius: 2px; padding: 0 1px;
3880
+ }
3881
+
3882
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--add { background: rgba(20,83,45,.35); color: #86efac; }
3883
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--del { background: rgba(127,29,29,.35); color: #fca5a5; }
3884
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--chg { background: rgba(133,77,14,.3); color: #fde047; }
3885
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare__line--insert { background: rgba(20,83,45,.3); color: #86efac; }
3886
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare__line--delete { background: rgba(127,29,29,.3); color: #fca5a5; }
3887
+ .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare__line--change { background: rgba(133,77,14,.25); color: #fde047; }
3888
+
3889
+ /* ── Block drag-and-drop ────────────────────────────── */
3890
+ .de-block-drag-container {
3891
+ position: absolute;
3892
+ top: 0;
3893
+ left: 0;
3894
+ width: 0;
3895
+ height: 0;
3896
+ pointer-events: none;
3897
+ z-index: 5;
3898
+ }
3899
+
3900
+ .de-block-drag-handle {
3901
+ position: absolute;
3902
+ display: flex;
3903
+ align-items: center;
3904
+ justify-content: center;
3905
+ width: 20px;
3906
+ cursor: grab;
3907
+ pointer-events: auto;
3908
+ opacity: 0;
3909
+ transition: opacity 0.15s;
3910
+ color: var(--de-text-muted, #94a3b8);
3911
+ border-radius: 3px;
3912
+ user-select: none;
3913
+ }
3914
+ .de-block-drag-handle:hover {
3915
+ opacity: 1 !important;
3916
+ color: var(--de-text-primary, #0f172a);
3917
+ background: var(--de-secondary, #f1f5f9);
3918
+ }
3919
+ .de-content:hover .de-block-drag-handle {
3920
+ opacity: 0.35;
3921
+ }
3922
+
3923
+ .de-block-drop-indicator {
3924
+ position: absolute;
3925
+ left: 0;
3926
+ right: 0;
3927
+ height: 2px;
3928
+ background: var(--de-primary, #2563eb);
3929
+ border-radius: 1px;
3930
+ z-index: 10;
3931
+ pointer-events: none;
3932
+ }
3933
+ .de-block-drop-indicator::before,
3934
+ .de-block-drop-indicator::after {
3935
+ content: "";
3936
+ position: absolute;
3937
+ top: -3px;
3938
+ width: 8px;
3939
+ height: 8px;
3940
+ border-radius: 50%;
3941
+ background: var(--de-primary, #2563eb);
3942
+ }
3943
+ .de-block-drop-indicator::before { left: -4px; }
3944
+ .de-block-drop-indicator::after { right: -4px; }
3945
+
3946
+ .de-block-dragging {
3947
+ opacity: 0.4;
3948
+ }
3949
+
3950
+ .de-block-drag-active {
3951
+ cursor: grabbing !important;
3952
+ }
3953
+
3954
+ .de-block-drag-ghost {
3955
+ position: fixed;
3956
+ z-index: 10001;
3957
+ padding: 6px 12px;
3958
+ max-width: 320px;
3959
+ background: var(--de-toolbar-bg, #fff);
3960
+ border: 1px solid var(--de-border, #e2e8f0);
3961
+ border-radius: 6px;
3962
+ box-shadow: 0 4px 12px rgba(0,0,0,.15);
3963
+ font-size: 13px;
3964
+ color: var(--de-text-primary, #0f172a);
3965
+ white-space: nowrap;
3966
+ overflow: hidden;
3967
+ text-overflow: ellipsis;
3968
+ pointer-events: none;
3969
+ }
3970
+
3971
+ /* Dark mode */
3972
+ .de-root--dark .de-block-drag-handle:hover {
3973
+ background: var(--de-secondary, #334155);
3974
+ }
3975
+ .de-root--dark .de-block-drag-ghost {
3976
+ background: #1e293b;
3977
+ border-color: #475569;
3978
+ }
3979
+
3980
+ /* ── Slash command menu ──────────────────────────────── */
3981
+ .de-slash-menu {
3982
+ z-index: 10001;
3983
+ width: 240px;
3984
+ max-height: 320px;
3985
+ overflow-y: auto;
3986
+ padding: 6px;
3987
+ background: var(--de-toolbar-bg, #fff);
3988
+ border: 1px solid var(--de-border, #e2e8f0);
3989
+ border-radius: 10px;
3990
+ box-shadow: 0 8px 24px rgba(0,0,0,.12), 0 2px 6px rgba(0,0,0,.06);
3991
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3992
+ }
3993
+ .de-slash-menu[hidden] { display: none !important; }
3994
+
3995
+ .de-slash-menu__item {
3996
+ display: flex;
3997
+ align-items: center;
3998
+ gap: 10px;
3999
+ padding: 8px 10px;
4000
+ border-radius: 7px;
4001
+ cursor: pointer;
4002
+ font-size: 0.8125rem;
4003
+ font-weight: 500;
4004
+ color: var(--de-text-primary, #0f172a);
4005
+ transition: background 0.12s;
4006
+ }
4007
+ .de-slash-menu__item:hover,
4008
+ .de-slash-menu__item--active {
4009
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
4010
+ }
4011
+ .de-slash-menu__icon {
4012
+ display: inline-flex;
4013
+ align-items: center;
4014
+ justify-content: center;
4015
+ width: 28px;
4016
+ height: 28px;
4017
+ border-radius: 6px;
4018
+ background: var(--de-secondary, #f1f5f9);
4019
+ font-size: 0.75rem;
4020
+ font-weight: 700;
4021
+ color: var(--de-text-muted, #64748b);
4022
+ flex-shrink: 0;
4023
+ }
4024
+ .de-slash-menu__label {
4025
+ flex: 1;
4026
+ }
4027
+ .de-slash-menu__empty {
4028
+ padding: 16px 10px;
4029
+ text-align: center;
4030
+ font-size: 0.8125rem;
4031
+ color: var(--de-text-muted, #64748b);
4032
+ }
4033
+
4034
+ /* Dark mode */
4035
+ .de-root--dark .de-slash-menu {
4036
+ background: #1e293b;
4037
+ border-color: #475569;
4038
+ }
4039
+ .de-root--dark .de-slash-menu__icon {
4040
+ background: #334155;
4041
+ color: #94a3b8;
4042
+ }
4043
+
4044
+ /* ── Fields / mail-merge placeholders ── */
4045
+ #richhtmleditor-root .de-content .de-field {
4046
+ display: inline;
4047
+ padding: 1px 4px;
4048
+ border-radius: 3px;
4049
+ background: color-mix(in srgb, var(--de-primary) 12%, transparent);
4050
+ border: 1px solid color-mix(in srgb, var(--de-primary) 25%, transparent);
4051
+ font-size: 0.92em;
4052
+ white-space: nowrap;
4053
+ cursor: default;
4054
+ }
4055
+ .de-root--dark .de-content .de-field {
4056
+ background: color-mix(in srgb, var(--de-primary) 18%, transparent);
4057
+ border-color: color-mix(in srgb, var(--de-primary) 35%, transparent);
4058
+ }
4059
+
4060
+ /* ── Shapes / drawing canvas ── */
4061
+ #richhtmleditor-root .de-content .de-shape {
4062
+ display: flex;
4063
+ margin: 0.5em 0;
4064
+ cursor: default;
4065
+ user-select: none;
4066
+ }
4067
+ #richhtmleditor-root .de-content .de-shape svg {
4068
+ display: block;
4069
+ max-width: 100%;
4070
+ }
4071
+ #richhtmleditor-root .de-content .de-shape--active {
4072
+ outline: 2px solid color-mix(in srgb, var(--de-primary) 55%, transparent);
4073
+ outline-offset: 3px;
4074
+ border-radius: 4px;
4075
+ }
4076
+ /* Shape alignment */
4077
+ #richhtmleditor-root .de-content .de-shape { display: flex; }
4078
+ #richhtmleditor-root .de-content .de-shape[data-shape-align="center"] { justify-content: center; }
4079
+ #richhtmleditor-root .de-content .de-shape[data-shape-align="right"] { justify-content: flex-end; }
4080
+
4081
+ /* ── Shape Controls (mini toolbar above selected shape) ── */
4082
+ .de-shape-controls[hidden],
4083
+ .de-shape-handles[hidden],
4084
+ .de-shape-edit-overlay[hidden] { display: none !important; }
4085
+ .de-shape-controls {
4086
+ position: absolute;
4087
+ display: flex;
4088
+ align-items: center;
4089
+ gap: 4px;
4090
+ padding: 4px 8px;
4091
+ background: var(--de-toolbar-bg, #fff);
4092
+ border: 1px solid var(--de-border, #e2e8f0);
4093
+ border-radius: 8px;
4094
+ box-shadow: 0 2px 8px rgba(0,0,0,.12);
4095
+ z-index: 50;
4096
+ white-space: nowrap;
4097
+ }
4098
+ .de-shape-controls__btn {
4099
+ display: inline-flex;
4100
+ align-items: center;
4101
+ justify-content: center;
4102
+ padding: 4px 10px;
4103
+ font-size: 12px;
4104
+ line-height: 1.4;
4105
+ border-radius: 4px;
4106
+ cursor: pointer;
4107
+ background: transparent;
4108
+ border: 1px solid var(--de-border, #e2e8f0);
4109
+ color: var(--de-text-primary, #1e293b);
4110
+ font-family: inherit;
4111
+ transition: background .15s, color .15s, border-color .15s;
4112
+ }
4113
+ .de-shape-controls__btn:hover {
4114
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
4115
+ }
4116
+ /* Save button — prominent blue CTA */
4117
+ .de-shape-controls__btn.de-shape-controls__btn--save {
4118
+ background: var(--de-primary, #2563eb);
4119
+ color: #fff;
4120
+ border-color: var(--de-primary, #2563eb);
4121
+ font-weight: 600;
4122
+ }
4123
+ .de-shape-controls__btn.de-shape-controls__btn--save:hover {
4124
+ background: var(--de-primary-hover, #1d4ed8);
4125
+ border-color: var(--de-primary-hover, #1d4ed8);
4126
+ }
4127
+ /* Alignment button group */
4128
+ .de-shape-controls__align-group {
4129
+ display: flex;
4130
+ gap: 1px;
4131
+ border: 1px solid var(--de-border, #e2e8f0);
4132
+ border-radius: 4px;
4133
+ overflow: hidden;
4134
+ }
4135
+ .de-shape-controls__align-btn {
4136
+ padding: 4px 8px;
4137
+ font-size: 13px;
4138
+ cursor: pointer;
4139
+ background: none;
4140
+ border: none;
4141
+ color: var(--de-text-primary, #1e293b);
4142
+ transition: background .15s;
4143
+ line-height: 1;
4144
+ }
4145
+ .de-shape-controls__align-btn:hover {
4146
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
4147
+ }
4148
+ .de-shape-controls__align-btn--active {
4149
+ background: var(--de-primary, #2563eb);
4150
+ color: #fff;
4151
+ }
4152
+ .de-shape-controls__align-btn--active:hover {
4153
+ background: var(--de-primary-hover, #1d4ed8);
4154
+ }
4155
+ /* Divider */
4156
+ .de-shape-controls__divider {
4157
+ width: 1px;
4158
+ height: 20px;
4159
+ background: var(--de-border, #e2e8f0);
4160
+ flex-shrink: 0;
4161
+ }
4162
+ .de-shape-controls__btn--remove {
4163
+ color: #dc2626;
4164
+ border-color: #fecaca;
4165
+ }
4166
+ .de-shape-controls__btn--remove:hover {
4167
+ background: #fef2f2;
4168
+ }
4169
+
4170
+ /* ── Shape drag-to-reposition ── */
4171
+ .de-shape-controls__btn--drag {
4172
+ cursor: grab;
4173
+ font-size: 14px;
4174
+ letter-spacing: -1px;
4175
+ }
4176
+ .de-shape--dragging {
4177
+ opacity: 0.35;
4178
+ }
4179
+ .de-shape-drop-indicator {
4180
+ position: absolute;
4181
+ height: 3px;
4182
+ background: var(--de-primary, #2563eb);
4183
+ border-radius: 2px;
4184
+ z-index: 55;
4185
+ pointer-events: none;
4186
+ }
4187
+ .de-shape-drop-indicator[hidden] { display: none !important; }
4188
+ .de-shape-drag-ghost {
4189
+ position: fixed;
4190
+ padding: 6px 14px;
4191
+ background: var(--de-primary, #2563eb);
4192
+ color: #fff;
4193
+ font-size: 12px;
4194
+ font-family: system-ui, sans-serif;
4195
+ border-radius: 6px;
4196
+ box-shadow: 0 4px 12px rgba(0,0,0,.2);
4197
+ pointer-events: none;
4198
+ z-index: 10001;
4199
+ white-space: nowrap;
4200
+ text-transform: capitalize;
4201
+ }
4202
+
4203
+ /* ── Shape resize handles ── */
4204
+ .de-shape-handles {
4205
+ position: absolute;
4206
+ pointer-events: none;
4207
+ z-index: 49;
4208
+ }
4209
+ .de-shape-handle {
4210
+ position: absolute;
4211
+ width: 10px;
4212
+ height: 10px;
4213
+ background: #fff;
4214
+ border: 2px solid var(--de-primary, #2563eb);
4215
+ border-radius: 2px;
4216
+ pointer-events: auto;
4217
+ z-index: 51;
4218
+ }
4219
+ .de-shape-handle--nw { top: -5px; left: -5px; cursor: nwse-resize; }
4220
+ .de-shape-handle--ne { top: -5px; right: -5px; cursor: nesw-resize; }
4221
+ .de-shape-handle--se { bottom: -5px; right: -5px; cursor: nwse-resize; }
4222
+ .de-shape-handle--sw { bottom: -5px; left: -5px; cursor: nesw-resize; }
4223
+ .de-shape-handle--e { top: calc(50% - 5px); right: -5px; cursor: ew-resize; }
4224
+
4225
+ /* ── Shape text edit overlay ── */
4226
+ .de-shape-edit-overlay {
4227
+ position: absolute;
4228
+ display: flex;
4229
+ align-items: center;
4230
+ justify-content: center;
4231
+ z-index: 52;
4232
+ background: rgba(255,255,255,.85);
4233
+ border-radius: 4px;
4234
+ }
4235
+ .de-shape-edit-overlay__input {
4236
+ width: 80%;
4237
+ max-width: 300px;
4238
+ padding: 6px 10px;
4239
+ border: 2px solid var(--de-primary, #2563eb);
4240
+ border-radius: 6px;
4241
+ font-size: 14px;
4242
+ font-family: system-ui, sans-serif;
4243
+ text-align: center;
4244
+ outline: none;
4245
+ background: #fff;
4246
+ color: #1e293b;
4247
+ box-shadow: 0 2px 8px rgba(0,0,0,.15);
4248
+ }
4249
+ /* Dark mode overrides */
4250
+ .de-root--dark .de-shape-controls {
4251
+ background: var(--de-toolbar-bg, #1e293b);
4252
+ border-color: var(--de-border, #334155);
4253
+ }
4254
+ .de-root--dark .de-shape-controls__btn {
4255
+ color: var(--de-text-primary, #e2e8f0);
4256
+ border-color: var(--de-border, #334155);
4257
+ }
4258
+ .de-root--dark .de-shape-controls__btn--remove {
4259
+ color: #f87171;
4260
+ border-color: #7f1d1d;
4261
+ }
4262
+ .de-root--dark .de-shape-controls__btn--remove:hover {
4263
+ background: rgba(127,29,29,.3);
4264
+ }
4265
+ .de-root--dark .de-shape-edit-overlay {
4266
+ background: rgba(15,23,42,.85);
4267
+ }
4268
+ .de-root--dark .de-shape-edit-overlay__input {
4269
+ background: #1e293b;
4270
+ color: #e2e8f0;
4271
+ border-color: var(--de-primary, #3b82f6);
4272
+ }
4273
+
4274
+ /* ── Shape Picker Panel ── */
4275
+ .de-shape-picker {
4276
+ width: 480px;
4277
+ background: var(--de-toolbar-bg, #fff);
4278
+ border: 1px solid var(--de-border, #e2e8f0);
4279
+ border-radius: 10px;
4280
+ box-shadow: 0 8px 24px rgba(0,0,0,.15);
4281
+ font-family: system-ui, -apple-system, sans-serif;
4282
+ overflow: hidden;
4283
+ }
4284
+ .de-shape-picker__tabs {
4285
+ display: flex;
4286
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
4287
+ padding: 0 4px;
4288
+ gap: 2px;
4289
+ }
4290
+ .de-shape-picker__tab {
4291
+ padding: 8px 14px;
4292
+ font-size: 15px;
4293
+ cursor: pointer;
4294
+ background: none;
4295
+ border: none;
4296
+ border-bottom: 2px solid transparent;
4297
+ color: var(--de-text-muted, #64748b);
4298
+ transition: color .15s, border-color .15s;
4299
+ line-height: 1;
4300
+ }
4301
+ .de-shape-picker__tab:hover {
4302
+ color: var(--de-text-primary, #1e293b);
4303
+ }
4304
+ .de-shape-picker__tab--active {
4305
+ border-bottom-color: var(--de-primary, #2563eb);
4306
+ color: var(--de-primary, #2563eb);
4307
+ }
4308
+ .de-shape-picker__body {
4309
+ padding: 12px;
4310
+ max-height: 280px;
4311
+ overflow-y: auto;
4312
+ }
4313
+ .de-shape-picker__grid {
4314
+ display: grid;
4315
+ grid-template-columns: repeat(7, 1fr);
4316
+ gap: 6px;
4317
+ }
4318
+ .de-shape-picker__btn {
4319
+ width: 48px;
4320
+ height: 48px;
4321
+ display: flex;
4322
+ align-items: center;
4323
+ justify-content: center;
4324
+ border: 2px solid transparent;
4325
+ border-radius: 6px;
4326
+ cursor: pointer;
4327
+ background: none;
4328
+ padding: 4px;
4329
+ transition: border-color .15s, background .15s;
4330
+ }
4331
+ .de-shape-picker__btn:hover {
4332
+ border-color: var(--de-primary, #2563eb);
4333
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 8%, transparent);
4334
+ }
4335
+ .de-shape-picker__btn--selected {
4336
+ border-color: var(--de-primary, #2563eb);
4337
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 15%, transparent);
4338
+ }
4339
+ .de-shape-picker__btn svg {
4340
+ display: block;
4341
+ }
4342
+ .de-shape-picker__footer {
4343
+ display: flex;
4344
+ gap: 8px;
4345
+ align-items: center;
4346
+ padding: 10px 12px;
4347
+ border-top: 1px solid var(--de-border, #e2e8f0);
4348
+ }
4349
+ .de-shape-picker__text-input {
4350
+ flex: 1;
4351
+ padding: 6px 10px;
4352
+ border: 1px solid var(--de-border, #e2e8f0);
4353
+ border-radius: 6px;
4354
+ font-size: 13px;
4355
+ font-family: inherit;
4356
+ background: var(--de-content-bg, #fff);
4357
+ color: var(--de-text-primary, #1e293b);
4358
+ outline: none;
4359
+ }
4360
+ .de-shape-picker__text-input:focus {
4361
+ border-color: var(--de-primary, #2563eb);
4362
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--de-primary, #2563eb) 20%, transparent);
4363
+ }
4364
+ .de-shape-picker__insert-btn {
4365
+ padding: 6px 16px;
4366
+ background: var(--de-primary, #2563eb);
4367
+ color: #fff;
4368
+ border: none;
4369
+ border-radius: 6px;
4370
+ font-size: 13px;
4371
+ font-family: inherit;
4372
+ cursor: pointer;
4373
+ transition: background .15s;
4374
+ }
4375
+ .de-shape-picker__insert-btn:hover:not(:disabled) {
4376
+ background: var(--de-primary-hover, #1d4ed8);
4377
+ }
4378
+ .de-shape-picker__insert-btn:disabled {
4379
+ opacity: 0.45;
4380
+ cursor: not-allowed;
4381
+ }
4382
+ /* Dark mode */
4383
+ .de-shape-picker--dark {
4384
+ background: var(--de-toolbar-bg, #1e293b);
4385
+ border-color: var(--de-border, #334155);
4386
+ box-shadow: 0 8px 24px rgba(0,0,0,.35);
4387
+ }
4388
+ .de-shape-picker--dark .de-shape-picker__text-input {
4389
+ background: var(--de-content-bg, #0f172a);
4390
+ color: var(--de-text-primary, #e2e8f0);
4391
+ border-color: var(--de-border, #334155);
4392
+ }
4393
+
4394
+ /* ── Print: repeat table headers on each page ── */
4395
+ @media print {
4396
+ #richhtmleditor-root .de-content table.de-table thead {
4397
+ display: table-header-group;
4398
+ }
4399
+ #richhtmleditor-root .de-content table.de-table tbody {
4400
+ display: table-row-group;
4401
+ }
4402
+ }