@richhtmleditor/themes 1.1.1 → 1.1.3

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.
package/README.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  Shared CSS for Rich HTML Editor — toolbar, content area, outline panel, selection mini-toolbar, tables, and dark mode tokens. Pair with [`@richhtmleditor/core`](https://www.npmjs.com/package/@richhtmleditor/core) or any framework wrapper.
4
4
 
5
- **Current release: 1.1.1**
5
+ **Current release: 1.1.3**
6
6
 
7
7
  **Repository:** [github.com/rajkishorsahu89/richhtmleditor](https://github.com/rajkishorsahu89/richhtmleditor)
8
8
 
9
9
  **Demo:** [richhtmleditor.vercel.app](https://richhtmleditor.vercel.app/) — [demo](https://richhtmleditor.vercel.app/demo) · [guide](https://richhtmleditor.vercel.app/guide) · [API](https://richhtmleditor.vercel.app/api). Doc Preview joint demo: [doc-preview-app.vercel.app/demo/enterprise](https://doc-preview-app.vercel.app/demo/enterprise)
10
10
 
11
- ### What's in 1.1.1
11
+ ### What's in 1.1.3
12
12
 
13
13
  - **`richhtmleditor.css`** — complete editor chrome (toolbar rows, buttons, dropdowns, content area)
14
14
  - **Dark mode** — `.de-root--dark` class toggled when `dark: true` is passed to `createEditor`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@richhtmleditor/themes",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "CSS themes for Rich HTML Editor.",
5
5
  "type": "module",
6
6
  "style": "./src/richhtmleditor.css",
@@ -514,6 +514,320 @@
514
514
  background: rgba(239, 68, 68, 0.2);
515
515
  }
516
516
 
517
+ /* ── Undo History Panel ──────────────────────────────────────────────────────── */
518
+
519
+ #richhtmleditor-root .de-undo-panel[hidden] {
520
+ display: none;
521
+ }
522
+
523
+ #richhtmleditor-root .de-undo-panel {
524
+ position: absolute;
525
+ top: 0;
526
+ right: 0;
527
+ width: 240px;
528
+ height: 100%;
529
+ background: var(--de-toolbar-bg);
530
+ border-left: 1px solid var(--de-border);
531
+ display: flex;
532
+ flex-direction: column;
533
+ z-index: 20;
534
+ box-shadow: -2px 0 8px rgba(0,0,0,.08);
535
+ overflow: hidden;
536
+ }
537
+
538
+ #richhtmleditor-root .de-undo-panel__head {
539
+ display: flex;
540
+ align-items: center;
541
+ justify-content: space-between;
542
+ padding: 10px 12px;
543
+ border-bottom: 1px solid var(--de-border);
544
+ flex-shrink: 0;
545
+ }
546
+
547
+ #richhtmleditor-root .de-undo-panel__title {
548
+ margin: 0;
549
+ font-size: 0.8rem;
550
+ font-weight: 600;
551
+ color: var(--de-text-primary);
552
+ text-transform: uppercase;
553
+ letter-spacing: 0.05em;
554
+ }
555
+
556
+ #richhtmleditor-root .de-undo-panel__close {
557
+ background: none;
558
+ border: none;
559
+ cursor: pointer;
560
+ font-size: 1.1rem;
561
+ color: var(--de-text-muted);
562
+ line-height: 1;
563
+ padding: 2px 4px;
564
+ border-radius: 3px;
565
+ }
566
+
567
+ #richhtmleditor-root .de-undo-panel__close:hover {
568
+ color: var(--de-text-primary);
569
+ background: var(--de-border);
570
+ }
571
+
572
+ #richhtmleditor-root .de-undo-panel__list {
573
+ flex: 1;
574
+ overflow-y: auto;
575
+ padding: 6px 0;
576
+ }
577
+
578
+ #richhtmleditor-root .de-undo-panel__item {
579
+ display: flex;
580
+ align-items: center;
581
+ gap: 8px;
582
+ padding: 6px 12px;
583
+ cursor: pointer;
584
+ font-size: 0.8rem;
585
+ color: var(--de-text-primary);
586
+ transition: background 0.1s;
587
+ }
588
+
589
+ #richhtmleditor-root .de-undo-panel__item:hover {
590
+ background: var(--de-border);
591
+ }
592
+
593
+ #richhtmleditor-root .de-undo-panel__item--future {
594
+ opacity: 0.45;
595
+ }
596
+
597
+ #richhtmleditor-root .de-undo-panel__item--future:hover {
598
+ opacity: 0.8;
599
+ }
600
+
601
+ #richhtmleditor-root .de-undo-panel__num {
602
+ font-size: 0.7rem;
603
+ color: var(--de-text-muted);
604
+ min-width: 24px;
605
+ text-align: right;
606
+ flex-shrink: 0;
607
+ }
608
+
609
+ #richhtmleditor-root .de-undo-panel__text {
610
+ flex: 1;
611
+ overflow: hidden;
612
+ text-overflow: ellipsis;
613
+ white-space: nowrap;
614
+ }
615
+
616
+ #richhtmleditor-root .de-undo-panel__now {
617
+ padding: 6px 12px;
618
+ font-size: 0.78rem;
619
+ font-weight: 700;
620
+ color: var(--de-primary);
621
+ border-top: 1px solid var(--de-border);
622
+ border-bottom: 1px solid var(--de-border);
623
+ background: color-mix(in srgb, var(--de-primary) 8%, transparent);
624
+ }
625
+
626
+ /* ── Revision History Modal ──────────────────────────────────────────────────── */
627
+
628
+ #richhtmleditor-root .de-rev-modal {
629
+ width: min(640px, calc(100% - 32px));
630
+ max-height: min(600px, calc(100vh - 80px));
631
+ display: flex;
632
+ flex-direction: column;
633
+ }
634
+
635
+ #richhtmleditor-root .de-rev-modal__body {
636
+ display: flex;
637
+ flex-direction: column;
638
+ gap: 0;
639
+ padding: 0;
640
+ flex: 1;
641
+ min-height: 0;
642
+ overflow: hidden;
643
+ }
644
+
645
+ #richhtmleditor-root .de-rev-modal__save-row {
646
+ display: flex;
647
+ gap: 8px;
648
+ padding: 10px 14px;
649
+ border-bottom: 1px solid var(--de-border);
650
+ flex-shrink: 0;
651
+ }
652
+
653
+ #richhtmleditor-root .de-rev-modal__label-input {
654
+ flex: 1;
655
+ min-width: 0;
656
+ padding: 5px 8px;
657
+ font-size: 13px;
658
+ border: 1px solid var(--de-border);
659
+ border-radius: 6px;
660
+ background: var(--de-content-bg);
661
+ color: var(--de-text-primary);
662
+ }
663
+
664
+ #richhtmleditor-root .de-rev-modal__label-input:focus {
665
+ outline: 2px solid var(--de-primary);
666
+ outline-offset: -1px;
667
+ }
668
+
669
+ #richhtmleditor-root .de-rev-modal__save-btn {
670
+ padding: 5px 14px;
671
+ font-size: 13px;
672
+ font-weight: 500;
673
+ background: var(--de-primary);
674
+ color: #fff;
675
+ border: 0;
676
+ border-radius: 6px;
677
+ cursor: pointer;
678
+ white-space: nowrap;
679
+ flex-shrink: 0;
680
+ }
681
+
682
+ #richhtmleditor-root .de-rev-modal__save-btn:hover {
683
+ background: var(--de-primary-hover);
684
+ }
685
+
686
+ #richhtmleditor-root .de-rev-modal__list {
687
+ flex: 1;
688
+ overflow-y: auto;
689
+ min-height: 80px;
690
+ }
691
+
692
+ #richhtmleditor-root .de-rev-modal__empty {
693
+ margin: 16px;
694
+ font-size: 13px;
695
+ color: var(--de-text-muted);
696
+ }
697
+
698
+ #richhtmleditor-root .de-rev-modal__item {
699
+ display: flex;
700
+ align-items: center;
701
+ justify-content: space-between;
702
+ gap: 10px;
703
+ padding: 8px 14px;
704
+ border-bottom: 1px solid var(--de-border);
705
+ }
706
+
707
+ #richhtmleditor-root .de-rev-modal__item:hover {
708
+ background: color-mix(in srgb, var(--de-toolbar-bg) 60%, transparent);
709
+ }
710
+
711
+ #richhtmleditor-root .de-rev-modal__meta {
712
+ display: flex;
713
+ flex-direction: column;
714
+ gap: 2px;
715
+ min-width: 0;
716
+ flex: 1;
717
+ }
718
+
719
+ #richhtmleditor-root .de-rev-modal__date {
720
+ font-size: 11px;
721
+ color: var(--de-text-muted);
722
+ }
723
+
724
+ #richhtmleditor-root .de-rev-modal__lbl {
725
+ font-size: 13px;
726
+ font-weight: 500;
727
+ white-space: nowrap;
728
+ overflow: hidden;
729
+ text-overflow: ellipsis;
730
+ }
731
+
732
+ #richhtmleditor-root .de-rev-modal__item-btns {
733
+ display: flex;
734
+ gap: 4px;
735
+ flex-shrink: 0;
736
+ }
737
+
738
+ #richhtmleditor-root .de-rev-modal__item-btn {
739
+ padding: 3px 8px;
740
+ font-size: 12px;
741
+ border: 1px solid var(--de-border);
742
+ border-radius: 4px;
743
+ background: transparent;
744
+ color: var(--de-text-primary);
745
+ cursor: pointer;
746
+ }
747
+
748
+ #richhtmleditor-root .de-rev-modal__item-btn:hover {
749
+ background: var(--de-toolbar-bg);
750
+ }
751
+
752
+ #richhtmleditor-root .de-rev-modal__item-btn--restore {
753
+ color: var(--de-primary);
754
+ border-color: var(--de-primary);
755
+ }
756
+
757
+ #richhtmleditor-root .de-rev-modal__item-btn--restore:hover {
758
+ background: color-mix(in srgb, var(--de-primary) 8%, transparent);
759
+ }
760
+
761
+ #richhtmleditor-root .de-rev-modal__item-btn--del {
762
+ color: var(--de-text-muted);
763
+ }
764
+
765
+ #richhtmleditor-root .de-rev-modal__diff {
766
+ border-top: 2px solid var(--de-border);
767
+ max-height: 200px;
768
+ overflow-y: auto;
769
+ flex-shrink: 0;
770
+ }
771
+
772
+ #richhtmleditor-root .de-rev-modal__diff-head {
773
+ display: flex;
774
+ align-items: center;
775
+ justify-content: space-between;
776
+ padding: 6px 14px;
777
+ background: var(--de-toolbar-bg);
778
+ border-bottom: 1px solid var(--de-border);
779
+ position: sticky;
780
+ top: 0;
781
+ }
782
+
783
+ #richhtmleditor-root .de-rev-modal__diff-title {
784
+ font-size: 11px;
785
+ font-weight: 600;
786
+ text-transform: uppercase;
787
+ letter-spacing: 0.05em;
788
+ color: var(--de-text-muted);
789
+ }
790
+
791
+ #richhtmleditor-root .de-rev-modal__diff-body {
792
+ padding: 10px 14px;
793
+ font-size: 12px;
794
+ line-height: 1.6;
795
+ }
796
+
797
+ #richhtmleditor-root .de-rev-modal__diff-body .de-compare__line { margin: 2px 0; padding: 3px 8px; border-radius: 4px; }
798
+ #richhtmleditor-root .de-rev-modal__diff-body .de-compare__line--equal { color: var(--de-text-primary); }
799
+ #richhtmleditor-root .de-rev-modal__diff-body .de-compare__line--insert { background: #dcfce7; color: #166534; }
800
+ #richhtmleditor-root .de-rev-modal__diff-body .de-compare__line--delete { background: #fee2e2; color: #991b1b; text-decoration: line-through; }
801
+ #richhtmleditor-root .de-rev-modal__diff-body .de-compare__line--change { background: #fef9c3; color: #854d0e; }
802
+ #richhtmleditor-root .de-rev-modal__diff-body .de-compare__ins { background: #bbf7d0; color: #14532d; border-radius: 2px; padding: 0 2px; }
803
+ #richhtmleditor-root .de-rev-modal__diff-body .de-compare__del { background: #fecaca; color: #7f1d1d; text-decoration: line-through; border-radius: 2px; padding: 0 2px; }
804
+
805
+ #richhtmleditor-root.de-root--dark .de-rev-modal__diff-body .de-compare__line--insert { background: rgba(20,83,45,.3); color: #86efac; }
806
+ #richhtmleditor-root.de-root--dark .de-rev-modal__diff-body .de-compare__line--delete { background: rgba(127,29,29,.3); color: #fca5a5; }
807
+ #richhtmleditor-root.de-root--dark .de-rev-modal__diff-body .de-compare__line--change { background: rgba(133,77,14,.25); color: #fde047; }
808
+
809
+ .de-rev-confirm {
810
+ width: min(400px, calc(100% - 32px));
811
+ }
812
+
813
+ .de-rev-confirm__body {
814
+ padding: 16px 20px 4px;
815
+ }
816
+
817
+ .de-rev-confirm__msg {
818
+ margin: 0;
819
+ font-size: 14px;
820
+ line-height: 1.6;
821
+ color: var(--de-text-primary, #1e293b);
822
+ }
823
+
824
+ /* dark mode */
825
+ #richhtmleditor-root.de-root--dark .de-rev-modal__item-btn--restore:hover {
826
+ background: rgba(59, 130, 246, 0.15);
827
+ }
828
+
829
+ /* ── Table ─────────────────────────────────────────────────────────────────── */
830
+
517
831
  #richhtmleditor-root .de-content .de-table-figure {
518
832
  margin: 1em 0;
519
833
  }
@@ -570,7 +884,21 @@
570
884
  #richhtmleditor-root .de-content nav.de-toc .de-toc__list,
571
885
  #richhtmleditor-root .de-content nav.de-toc > ol {
572
886
  margin: 0;
573
- padding-left: 1.25rem;
887
+ padding-left: 0;
888
+ list-style: none;
889
+ }
890
+
891
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list--level-1 { padding-left: 0; }
892
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list--level-2 { padding-left: 1.25rem; }
893
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list--level-3 { padding-left: 2.5rem; }
894
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list li { margin: 0.15em 0; }
895
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list a {
896
+ color: var(--de-primary, #2563eb);
897
+ text-decoration: none;
898
+ font-size: 0.9em;
899
+ }
900
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list a:hover {
901
+ text-decoration: underline;
574
902
  }
575
903
 
576
904
  #richhtmleditor-root .de-content nav.de-toc[contenteditable="false"] {
@@ -582,7 +910,47 @@
582
910
  pointer-events: none;
583
911
  cursor: default;
584
912
  text-decoration: none;
585
- color: inherit;
913
+ color: var(--de-primary, #2563eb);
914
+ }
915
+
916
+ /* ── Spellcheck ──────────────────────────────────────── */
917
+ .de-spell-error {
918
+ border-bottom: 2px solid #dc2626;
919
+ cursor: pointer;
920
+ border-radius: 1px;
921
+ }
922
+ .de-spell-popover {
923
+ background: var(--de-toolbar-bg, #fff);
924
+ border: 1px solid var(--de-border, #e2e8f0);
925
+ border-radius: 8px;
926
+ box-shadow: 0 4px 16px rgba(0,0,0,.12);
927
+ padding: 4px;
928
+ min-width: 130px;
929
+ display: flex;
930
+ flex-direction: column;
931
+ gap: 2px;
932
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
933
+ font-size: 0.875rem;
934
+ }
935
+ .de-spell-popover__item {
936
+ text-align: left;
937
+ padding: 6px 10px;
938
+ border: none;
939
+ background: none;
940
+ cursor: pointer;
941
+ border-radius: 6px;
942
+ font-size: inherit;
943
+ font-family: inherit;
944
+ color: var(--de-text-primary, #0f172a);
945
+ white-space: nowrap;
946
+ }
947
+ .de-spell-popover__item:hover { background: var(--de-primary-hover, #eff6ff); }
948
+ .de-spell-popover__item--muted {
949
+ color: var(--de-text-muted, #64748b);
950
+ font-style: italic;
951
+ border-top: 1px solid var(--de-border, #e2e8f0);
952
+ margin-top: 2px;
953
+ padding-top: 8px;
586
954
  }
587
955
 
588
956
  #richhtmleditor-root .de-content details {
@@ -728,6 +1096,20 @@
728
1096
  margin: 0;
729
1097
  }
730
1098
 
1099
+ #richhtmleditor-root .de-content th[data-de-tcol] {
1100
+ cursor: pointer;
1101
+ user-select: none;
1102
+ }
1103
+ #richhtmleditor-root .de-content th[data-de-tcol]::after {
1104
+ content: " ↕";
1105
+ opacity: 0.3;
1106
+ font-size: 0.7em;
1107
+ font-weight: normal;
1108
+ }
1109
+ #richhtmleditor-root .de-content th[data-de-tcol]:hover::after {
1110
+ opacity: 0.7;
1111
+ }
1112
+
731
1113
  #richhtmleditor-root .de-table-col-resizer {
732
1114
  position: absolute;
733
1115
  top: 0;
@@ -1776,6 +2158,8 @@ del.de-track-delete,
1776
2158
  min-width: 188px;
1777
2159
  max-height: 70vh;
1778
2160
  overflow-y: auto;
2161
+ scrollbar-width: thin;
2162
+ scrollbar-color: color-mix(in srgb, var(--de-text-muted) 30%, transparent) transparent;
1779
2163
  padding: 8px;
1780
2164
  background: var(--de-toolbar-bg);
1781
2165
  border: 1px solid var(--de-border);
@@ -1789,6 +2173,16 @@ del.de-track-delete,
1789
2173
  font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
1790
2174
  color: var(--de-text-primary);
1791
2175
  }
2176
+ .de-toolbar__overflow-menu::-webkit-scrollbar {
2177
+ width: 4px;
2178
+ }
2179
+ .de-toolbar__overflow-menu::-webkit-scrollbar-thumb {
2180
+ background: color-mix(in srgb, var(--de-text-muted) 30%, transparent);
2181
+ border-radius: 4px;
2182
+ }
2183
+ .de-toolbar__overflow-menu::-webkit-scrollbar-track {
2184
+ background: transparent;
2185
+ }
1792
2186
 
1793
2187
  .de-toolbar__overflow-menu--dark {
1794
2188
  --de-toolbar-bg: #1e293b;
@@ -3054,6 +3448,24 @@ del.de-track-delete,
3054
3448
  background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
3055
3449
  }
3056
3450
 
3451
+ @media (pointer: coarse) {
3452
+ #richhtmleditor-root .de-selection-mini-toolbar {
3453
+ padding: 6px 8px;
3454
+ gap: 4px;
3455
+ border-radius: 12px;
3456
+ }
3457
+ #richhtmleditor-root .de-selection-mini-toolbar__btn {
3458
+ min-width: 40px;
3459
+ height: 40px;
3460
+ padding: 8px;
3461
+ border-radius: 8px;
3462
+ font-size: 1rem;
3463
+ }
3464
+ #richhtmleditor-root .de-selection-mini-toolbar__sep {
3465
+ height: 24px;
3466
+ }
3467
+ }
3468
+
3057
3469
  #richhtmleditor-root .de-track-bubble {
3058
3470
  display: inline-flex;
3059
3471
  gap: 4px;
@@ -3086,6 +3498,65 @@ del.de-track-delete,
3086
3498
  outline-offset: 1px;
3087
3499
  }
3088
3500
 
3501
+ /* ── Paste Prompt Bar ──────────────────────────────────────────────────────── */
3502
+
3503
+ .de-paste-prompt {
3504
+ display: flex;
3505
+ align-items: center;
3506
+ gap: 6px;
3507
+ padding: 5px 10px;
3508
+ background: var(--de-toolbar-bg);
3509
+ border-bottom: 1px solid var(--de-border);
3510
+ font-size: 12px;
3511
+ flex-wrap: wrap;
3512
+ animation: de-paste-prompt-in 0.15s ease;
3513
+ }
3514
+
3515
+ @keyframes de-paste-prompt-in {
3516
+ from { opacity: 0; transform: translateY(-4px); }
3517
+ to { opacity: 1; transform: translateY(0); }
3518
+ }
3519
+
3520
+ .de-paste-prompt__label {
3521
+ color: var(--de-text-muted);
3522
+ font-weight: 500;
3523
+ margin-right: 2px;
3524
+ }
3525
+
3526
+ .de-paste-prompt__btn {
3527
+ padding: 2px 10px;
3528
+ font-size: 12px;
3529
+ border: 1px solid var(--de-border);
3530
+ border-radius: 4px;
3531
+ background: var(--de-content-bg);
3532
+ color: var(--de-text-primary);
3533
+ cursor: pointer;
3534
+ line-height: 1.6;
3535
+ transition: background 0.1s, color 0.1s, border-color 0.1s;
3536
+ }
3537
+
3538
+ .de-paste-prompt__btn:hover {
3539
+ background: var(--de-primary);
3540
+ color: #fff;
3541
+ border-color: var(--de-primary);
3542
+ }
3543
+
3544
+ .de-paste-prompt__dismiss {
3545
+ background: none;
3546
+ border: none;
3547
+ cursor: pointer;
3548
+ color: var(--de-text-muted);
3549
+ font-size: 16px;
3550
+ line-height: 1;
3551
+ padding: 0 6px;
3552
+ opacity: 0.6;
3553
+ flex-shrink: 0;
3554
+ }
3555
+
3556
+ .de-paste-prompt__dismiss:hover {
3557
+ opacity: 1;
3558
+ }
3559
+
3089
3560
  /* ── Paste Special Modal ───────────────────────────────────────────────────── */
3090
3561
 
3091
3562
  .de-paste-special-backdrop {
@@ -3103,14 +3574,16 @@ del.de-track-delete,
3103
3574
  top: 50%;
3104
3575
  left: 50%;
3105
3576
  transform: translate(-50%, -50%);
3106
- width: 90%;
3107
- max-width: 400px;
3577
+ width: min(560px, calc(100vw - 32px));
3108
3578
  background: var(--de-toolbar-bg, #fff);
3109
3579
  border: 1px solid var(--de-border, #e2e8f0);
3110
3580
  border-radius: 8px;
3111
3581
  box-shadow: 0 12px 32px rgba(15, 23, 42, 0.15);
3112
3582
  z-index: 10001;
3113
3583
  color: var(--de-text-primary, #0f172a);
3584
+ display: flex;
3585
+ flex-direction: column;
3586
+ max-height: min(90vh, 720px);
3114
3587
  }
3115
3588
 
3116
3589
  .de-paste-special-modal__head {
@@ -3119,6 +3592,7 @@ del.de-track-delete,
3119
3592
  justify-content: space-between;
3120
3593
  padding: 12px 16px;
3121
3594
  border-bottom: 1px solid var(--de-border, #e2e8f0);
3595
+ flex-shrink: 0;
3122
3596
  }
3123
3597
 
3124
3598
  .de-paste-special-modal__title {
@@ -3143,27 +3617,93 @@ del.de-track-delete,
3143
3617
 
3144
3618
  .de-paste-special-modal__body {
3145
3619
  padding: 16px;
3620
+ overflow-y: auto;
3621
+ flex: 1;
3622
+ display: flex;
3623
+ flex-direction: column;
3624
+ gap: 14px;
3146
3625
  }
3147
3626
 
3148
- .de-paste-special-modal__option {
3149
- margin-bottom: 12px;
3627
+ /* Mode radio group */
3628
+ .de-paste-special-modal__modes {
3629
+ display: flex;
3630
+ flex-direction: column;
3631
+ gap: 6px;
3150
3632
  }
3151
3633
 
3152
- .de-paste-special-modal__label {
3634
+ .de-paste-special-modal__mode {
3153
3635
  display: flex;
3154
- align-items: center;
3155
- gap: 8px;
3636
+ flex-direction: column;
3637
+ gap: 2px;
3638
+ padding: 10px 12px;
3639
+ border: 1px solid var(--de-border, #e2e8f0);
3640
+ border-radius: 6px;
3156
3641
  cursor: pointer;
3642
+ transition: border-color 0.12s, background 0.12s;
3643
+ }
3644
+
3645
+ .de-paste-special-modal__mode input[type="radio"] {
3646
+ position: absolute;
3647
+ opacity: 0;
3648
+ width: 0;
3649
+ height: 0;
3650
+ }
3651
+
3652
+ .de-paste-special-modal__mode--active {
3653
+ border-color: var(--de-primary, #2563eb);
3654
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 5%, transparent);
3655
+ }
3656
+
3657
+ .de-paste-special-modal__mode--disabled {
3658
+ opacity: 0.4;
3659
+ pointer-events: none;
3660
+ }
3661
+
3662
+ .de-paste-special-modal__mode-label {
3157
3663
  font-size: 13px;
3158
- user-select: none;
3664
+ font-weight: 600;
3665
+ color: var(--de-text-primary, #0f172a);
3159
3666
  }
3160
3667
 
3161
- .de-paste-special-modal__checkbox {
3162
- cursor: pointer;
3668
+ .de-paste-special-modal__mode--active .de-paste-special-modal__mode-label {
3669
+ color: var(--de-primary, #2563eb);
3670
+ }
3671
+
3672
+ .de-paste-special-modal__mode-desc {
3673
+ font-size: 12px;
3674
+ color: var(--de-text-muted, #64748b);
3675
+ }
3676
+
3677
+ /* Preview pane */
3678
+ .de-paste-special-modal__preview-wrap {
3679
+ display: flex;
3680
+ flex-direction: column;
3681
+ gap: 6px;
3682
+ }
3683
+
3684
+ .de-paste-special-modal__preview-label {
3685
+ font-size: 12px;
3686
+ font-weight: 600;
3687
+ color: var(--de-text-muted, #64748b);
3688
+ text-transform: uppercase;
3689
+ letter-spacing: 0.04em;
3690
+ }
3691
+
3692
+ .de-paste-special-modal__preview {
3693
+ border: 1px solid var(--de-border, #e2e8f0);
3694
+ border-radius: 6px;
3695
+ padding: 10px 12px;
3696
+ font-size: 13px;
3697
+ min-height: 80px;
3698
+ max-height: 180px;
3699
+ overflow-y: auto;
3700
+ background: var(--de-content-bg, #f8fafc);
3701
+ color: var(--de-text-primary, #0f172a);
3702
+ white-space: pre-wrap;
3703
+ word-break: break-word;
3163
3704
  }
3164
3705
 
3165
3706
  .de-paste-special-modal__status {
3166
- margin-top: 8px;
3167
3707
  font-size: 12px;
3168
3708
  color: var(--de-text-muted, #64748b);
3169
3709
  }
@@ -3178,6 +3718,7 @@ del.de-track-delete,
3178
3718
  padding: 12px 16px;
3179
3719
  border-top: 1px solid var(--de-border, #e2e8f0);
3180
3720
  justify-content: flex-end;
3721
+ flex-shrink: 0;
3181
3722
  }
3182
3723
 
3183
3724
  .de-paste-special-modal__btn {
@@ -3203,8 +3744,138 @@ del.de-track-delete,
3203
3744
 
3204
3745
  .de-paste-special-modal__btn--apply:hover {
3205
3746
  background: color-mix(in srgb, var(--de-primary, #2563eb) 110%, transparent);
3747
+ color: #fff;
3748
+ }
3749
+
3750
+ /* ── Page Setup Modal ──────────────────────────────────────────────────────── */
3751
+
3752
+ .de-ps-modal-backdrop {
3753
+ position: fixed;
3754
+ inset: 0;
3755
+ background: rgba(15, 23, 42, 0.3);
3756
+ z-index: 10000;
3757
+ }
3758
+
3759
+ .de-ps-modal {
3760
+ position: fixed;
3761
+ top: 50%;
3762
+ left: 50%;
3763
+ transform: translate(-50%, -50%);
3764
+ width: min(520px, calc(100vw - 32px));
3765
+ max-height: min(90vh, 720px);
3766
+ background: var(--de-toolbar-bg, #fff);
3767
+ border: 1px solid var(--de-border, #e2e8f0);
3768
+ border-radius: 8px;
3769
+ box-shadow: 0 12px 32px rgba(15, 23, 42, 0.15);
3770
+ z-index: 10001;
3771
+ color: var(--de-text-primary, #0f172a);
3772
+ display: flex;
3773
+ flex-direction: column;
3774
+ }
3775
+
3776
+ .de-ps-modal__head {
3777
+ display: flex;
3778
+ align-items: center;
3779
+ justify-content: space-between;
3780
+ padding: 12px 16px;
3781
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
3782
+ flex-shrink: 0;
3783
+ }
3784
+
3785
+ .de-ps-modal__title {
3786
+ margin: 0;
3787
+ font-size: 14px;
3788
+ font-weight: 600;
3789
+ }
3790
+
3791
+ .de-ps-modal__close {
3792
+ border: 0;
3793
+ background: transparent;
3794
+ cursor: pointer;
3795
+ font-size: 18px;
3796
+ line-height: 1;
3797
+ padding: 4px 8px;
3798
+ color: var(--de-text-muted, #64748b);
3799
+ }
3800
+ .de-ps-modal__close:hover { color: var(--de-text-primary, #0f172a); }
3801
+
3802
+ .de-ps-modal__body {
3803
+ padding: 16px;
3804
+ overflow-y: auto;
3805
+ flex: 1;
3806
+ display: flex;
3807
+ flex-direction: column;
3808
+ gap: 20px;
3809
+ }
3810
+
3811
+ .de-ps-modal__section { display: flex; flex-direction: column; gap: 10px; }
3812
+
3813
+ .de-ps-modal__section-title {
3814
+ font-size: 11px;
3815
+ font-weight: 700;
3816
+ text-transform: uppercase;
3817
+ letter-spacing: 0.06em;
3818
+ color: var(--de-text-muted, #64748b);
3819
+ }
3820
+
3821
+ .de-ps-modal__row { display: flex; gap: 12px; }
3822
+
3823
+ .de-ps-modal__field { display: flex; flex-direction: column; gap: 4px; flex: 1; }
3824
+
3825
+ .de-ps-modal__field-label {
3826
+ font-size: 12px;
3827
+ font-weight: 500;
3828
+ color: var(--de-text-muted, #64748b);
3206
3829
  }
3207
3830
 
3831
+ .de-ps-modal__input,
3832
+ .de-ps-modal__select {
3833
+ border: 1px solid var(--de-border, #e2e8f0);
3834
+ border-radius: 5px;
3835
+ padding: 6px 10px;
3836
+ font: inherit;
3837
+ font-size: 13px;
3838
+ background: var(--de-content-bg, #fff);
3839
+ color: var(--de-text-primary, #0f172a);
3840
+ outline: none;
3841
+ width: 100%;
3842
+ }
3843
+ .de-ps-modal__input:focus,
3844
+ .de-ps-modal__select:focus {
3845
+ border-color: var(--de-primary, #2563eb);
3846
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--de-primary, #2563eb) 20%, transparent);
3847
+ }
3848
+
3849
+ .de-ps-modal__size-custom { display: flex; gap: 12px; }
3850
+
3851
+ .de-ps-modal__actions {
3852
+ display: flex;
3853
+ gap: 8px;
3854
+ padding: 12px 16px;
3855
+ border-top: 1px solid var(--de-border, #e2e8f0);
3856
+ justify-content: flex-end;
3857
+ flex-shrink: 0;
3858
+ }
3859
+
3860
+ .de-ps-modal__btn {
3861
+ border: 1px solid var(--de-border, #d1d5db);
3862
+ border-radius: 6px;
3863
+ padding: 6px 16px;
3864
+ font: inherit;
3865
+ font-size: 13px;
3866
+ cursor: pointer;
3867
+ background: var(--de-content-bg, #fff);
3868
+ color: var(--de-text-primary, #0f172a);
3869
+ }
3870
+ .de-ps-modal__btn:hover { background: color-mix(in srgb, var(--de-primary, #2563eb) 6%, transparent); }
3871
+
3872
+ .de-ps-modal__btn--apply {
3873
+ background: var(--de-primary, #2563eb);
3874
+ color: #fff;
3875
+ border-color: var(--de-primary, #2563eb);
3876
+ }
3877
+ .de-ps-modal__btn--apply:hover { background: color-mix(in srgb, var(--de-primary, #2563eb) 110%, transparent); }
3878
+
3208
3879
  /* ── Emoji Picker Panel ────────────────────────────────────────────────────── */
3209
3880
 
3210
3881
  .de-emoji-picker {
@@ -3537,10 +4208,16 @@ del.de-track-delete,
3537
4208
  #richhtmleditor-root .de-section[data-style-id^="columns-"] > .de-section__title {
3538
4209
  display: none;
3539
4210
  }
4211
+ #richhtmleditor-root .de-section[data-style-id^="columns-"] {
4212
+ overflow-wrap: break-word;
4213
+ word-break: break-word;
4214
+ }
3540
4215
 
3541
4216
  #richhtmleditor-root .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3542
4217
  #richhtmleditor-root .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3543
4218
 
4219
+ .de-section[data-style-id^="columns-"] > .de-section__title { display: none; }
4220
+ .de-section[data-style-id^="columns-"] { overflow-wrap: break-word; word-break: break-word; }
3544
4221
  .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3545
4222
  .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3546
4223
 
@@ -3800,8 +4477,23 @@ del.de-track-delete,
3800
4477
  /* ── Compare Modal ──────────────────────────────────────────────────────────── */
3801
4478
 
3802
4479
  .de-find-modal__backdrop--portal .de-compare-modal {
3803
- max-width: 860px;
3804
- width: min(860px, 96vw);
4480
+ max-width: 1100px;
4481
+ width: min(1100px, 96vw);
4482
+ }
4483
+
4484
+ .de-find-modal__backdrop--portal .de-rev-confirm {
4485
+ width: min(400px, calc(100% - 32px));
4486
+ }
4487
+
4488
+ .de-find-modal__backdrop--portal .de-rev-confirm__body {
4489
+ padding: 4px 20px 8px;
4490
+ }
4491
+
4492
+ .de-find-modal__backdrop--portal .de-rev-confirm__msg {
4493
+ margin: 0;
4494
+ font-size: 14px;
4495
+ line-height: 1.6;
4496
+ color: var(--de-text-primary);
3805
4497
  }
3806
4498
 
3807
4499
  .de-find-modal__backdrop--portal .de-compare-modal__body {
@@ -3872,6 +4564,8 @@ del.de-track-delete,
3872
4564
  .de-find-modal__backdrop--portal .de-compare__line--delete { background: #fee2e2; color: #991b1b; text-decoration: line-through; }
3873
4565
  .de-find-modal__backdrop--portal .de-compare__line--change { background: #fef9c3; color: #854d0e; }
3874
4566
 
4567
+ .de-find-modal__backdrop--portal .de-compare__line--empty { opacity: 0.25; }
4568
+
3875
4569
  .de-find-modal__backdrop--portal .de-compare__ins {
3876
4570
  background: #bbf7d0; color: #14532d; border-radius: 2px; padding: 0 1px;
3877
4571
  }
@@ -3879,6 +4573,18 @@ del.de-track-delete,
3879
4573
  background: #fecaca; color: #7f1d1d; text-decoration: line-through; border-radius: 2px; padding: 0 1px;
3880
4574
  }
3881
4575
 
4576
+ /* Tools row & output head */
4577
+ .de-compare-modal__pane--output { flex: 1 1 0; min-width: 0; }
4578
+ .de-compare-modal__output-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
4579
+ .de-compare-modal__tools { display: flex; gap: 4px; flex-shrink: 0; }
4580
+ .de-compare-modal__tool-btn { font-size: 0.72rem; padding: 2px 8px; }
4581
+
4582
+ /* Side-by-side */
4583
+ .de-compare-modal__sbs { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
4584
+ .de-compare-modal__sbs-pane { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
4585
+ .de-compare-modal__sbs-label { font-size: 0.72rem; font-weight: 600; color: var(--de-text-muted); padding: 0 2px; }
4586
+ .de-compare-modal__sbs-output { min-height: 260px; max-height: 320px; }
4587
+
3882
4588
  .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--add { background: rgba(20,83,45,.35); color: #86efac; }
3883
4589
  .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--del { background: rgba(127,29,29,.35); color: #fca5a5; }
3884
4590
  .de-find-modal__backdrop--portal.de-find-modal__backdrop--dark .de-compare-modal__legend--chg { background: rgba(133,77,14,.3); color: #fde047; }
@@ -3980,9 +4686,11 @@ del.de-track-delete,
3980
4686
  /* ── Slash command menu ──────────────────────────────── */
3981
4687
  .de-slash-menu {
3982
4688
  z-index: 10001;
3983
- width: 240px;
3984
- max-height: 320px;
4689
+ width: 270px;
4690
+ max-height: 380px;
3985
4691
  overflow-y: auto;
4692
+ scrollbar-width: thin;
4693
+ scrollbar-color: rgba(0,0,0,.15) transparent;
3986
4694
  padding: 6px;
3987
4695
  background: var(--de-toolbar-bg, #fff);
3988
4696
  border: 1px solid var(--de-border, #e2e8f0);
@@ -3996,11 +4704,9 @@ del.de-track-delete,
3996
4704
  display: flex;
3997
4705
  align-items: center;
3998
4706
  gap: 10px;
3999
- padding: 8px 10px;
4707
+ padding: 7px 10px;
4000
4708
  border-radius: 7px;
4001
4709
  cursor: pointer;
4002
- font-size: 0.8125rem;
4003
- font-weight: 500;
4004
4710
  color: var(--de-text-primary, #0f172a);
4005
4711
  transition: background 0.12s;
4006
4712
  }
@@ -4012,8 +4718,8 @@ del.de-track-delete,
4012
4718
  display: inline-flex;
4013
4719
  align-items: center;
4014
4720
  justify-content: center;
4015
- width: 28px;
4016
- height: 28px;
4721
+ width: 30px;
4722
+ height: 30px;
4017
4723
  border-radius: 6px;
4018
4724
  background: var(--de-secondary, #f1f5f9);
4019
4725
  font-size: 0.75rem;
@@ -4021,8 +4727,27 @@ del.de-track-delete,
4021
4727
  color: var(--de-text-muted, #64748b);
4022
4728
  flex-shrink: 0;
4023
4729
  }
4730
+ .de-slash-menu__icon svg { display: block; }
4731
+ .de-slash-menu__text {
4732
+ display: flex;
4733
+ flex-direction: column;
4734
+ gap: 1px;
4735
+ flex: 1;
4736
+ min-width: 0;
4737
+ }
4024
4738
  .de-slash-menu__label {
4025
- flex: 1;
4739
+ font-size: 0.8125rem;
4740
+ font-weight: 500;
4741
+ line-height: 1.3;
4742
+ }
4743
+ .de-slash-menu__desc {
4744
+ font-size: 0.6875rem;
4745
+ font-weight: 400;
4746
+ color: var(--de-text-muted, #64748b);
4747
+ line-height: 1.3;
4748
+ white-space: nowrap;
4749
+ overflow: hidden;
4750
+ text-overflow: ellipsis;
4026
4751
  }
4027
4752
  .de-slash-menu__empty {
4028
4753
  padding: 16px 10px;
@@ -4040,6 +4765,16 @@ del.de-track-delete,
4040
4765
  background: #334155;
4041
4766
  color: #94a3b8;
4042
4767
  }
4768
+ .de-root--dark .de-slash-menu {
4769
+ scrollbar-color: rgba(255,255,255,.15) transparent;
4770
+ }
4771
+ .de-slash-menu::-webkit-scrollbar { width: 5px; }
4772
+ .de-slash-menu::-webkit-scrollbar-track { background: transparent; }
4773
+ .de-slash-menu::-webkit-scrollbar-thumb {
4774
+ background: rgba(0,0,0,.15);
4775
+ border-radius: 99px;
4776
+ }
4777
+ .de-root--dark .de-slash-menu::-webkit-scrollbar-thumb { background: rgba(255,255,255,.15); }
4043
4778
 
4044
4779
  /* ── Fields / mail-merge placeholders ── */
4045
4780
  #richhtmleditor-root .de-content .de-field {
@@ -4309,6 +5044,18 @@ del.de-track-delete,
4309
5044
  padding: 12px;
4310
5045
  max-height: 280px;
4311
5046
  overflow-y: auto;
5047
+ scrollbar-width: thin;
5048
+ scrollbar-color: color-mix(in srgb, var(--de-text-muted) 30%, transparent) transparent;
5049
+ }
5050
+ .de-shape-picker__body::-webkit-scrollbar {
5051
+ width: 4px;
5052
+ }
5053
+ .de-shape-picker__body::-webkit-scrollbar-thumb {
5054
+ background: color-mix(in srgb, var(--de-text-muted) 30%, transparent);
5055
+ border-radius: 4px;
5056
+ }
5057
+ .de-shape-picker__body::-webkit-scrollbar-track {
5058
+ background: transparent;
4312
5059
  }
4313
5060
  .de-shape-picker__grid {
4314
5061
  display: grid;
@@ -4400,3 +5147,395 @@ del.de-track-delete,
4400
5147
  display: table-row-group;
4401
5148
  }
4402
5149
  }
5150
+
5151
+ /* ═══════════════════════════════════════════════════════════════════════════
5152
+ Task list — unscoped so they apply in live preview divs and export HTML
5153
+ ═══════════════════════════════════════════════════════════════════════════ */
5154
+ ul.de-task-list {
5155
+ list-style: none;
5156
+ padding-left: 4px;
5157
+ }
5158
+ ul.de-task-list li.de-task-item {
5159
+ display: flex;
5160
+ align-items: flex-start;
5161
+ gap: 6px;
5162
+ margin: 2px 0;
5163
+ }
5164
+ ul.de-task-list li.de-task-item > p {
5165
+ flex: 1;
5166
+ min-width: 0;
5167
+ margin: 0;
5168
+ }
5169
+ ul.de-task-list li.de-task-item input[type="checkbox"] {
5170
+ margin-top: 3px;
5171
+ flex-shrink: 0;
5172
+ cursor: pointer;
5173
+ }
5174
+ ul.de-task-list li.de-task-item--checked > p {
5175
+ text-decoration: line-through;
5176
+ opacity: 0.6;
5177
+ }
5178
+
5179
+ /* ═══════════════════════════════════════════════════════════════════════════
5180
+ Preview modal
5181
+ ═══════════════════════════════════════════════════════════════════════════ */
5182
+ .de-preview-modal {
5183
+ background: var(--de-content-bg, #fff);
5184
+ color: var(--de-text-primary, #1e293b);
5185
+ border-radius: 8px;
5186
+ box-shadow: 0 16px 48px rgba(0,0,0,.25);
5187
+ width: min(800px, calc(100% - 32px));
5188
+ height: min(90vh, 800px);
5189
+ display: flex;
5190
+ flex-direction: column;
5191
+ overflow: hidden;
5192
+ }
5193
+ .de-preview-modal__header {
5194
+ display: flex;
5195
+ align-items: center;
5196
+ gap: 8px;
5197
+ padding: 12px 16px;
5198
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
5199
+ flex-shrink: 0;
5200
+ }
5201
+ .de-preview-modal__title {
5202
+ font-size: 15px;
5203
+ font-weight: 600;
5204
+ margin: 0;
5205
+ flex: 1;
5206
+ }
5207
+ .de-preview-modal__stats {
5208
+ font-size: 12px;
5209
+ color: var(--de-text-muted, #64748b);
5210
+ }
5211
+ .de-preview-modal__body {
5212
+ overflow-y: auto;
5213
+ padding: 24px 32px;
5214
+ flex: 1;
5215
+ }
5216
+ .de-preview-modal__frame {
5217
+ flex: 1;
5218
+ border: none;
5219
+ width: 100%;
5220
+ min-height: 0;
5221
+ }
5222
+
5223
+ /* ═══════════════════════════════════════════════════════════════════════════
5224
+ Link checker panel
5225
+ ═══════════════════════════════════════════════════════════════════════════ */
5226
+ .de-lc-panel {
5227
+ position: absolute;
5228
+ top: 0;
5229
+ right: 0;
5230
+ bottom: 0;
5231
+ width: 280px;
5232
+ background: var(--de-toolbar-bg, #f8fafc);
5233
+ border-left: 1px solid var(--de-border, #e2e8f0);
5234
+ display: flex;
5235
+ flex-direction: column;
5236
+ z-index: 20;
5237
+ overflow: hidden;
5238
+ }
5239
+ .de-lc-panel[hidden] { display: none; }
5240
+ .de-lc-panel__head {
5241
+ display: flex;
5242
+ align-items: center;
5243
+ justify-content: space-between;
5244
+ padding: 10px 12px;
5245
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
5246
+ flex-shrink: 0;
5247
+ }
5248
+ .de-lc-panel__title {
5249
+ font-size: 13px;
5250
+ font-weight: 600;
5251
+ margin: 0;
5252
+ color: var(--de-text-primary, #1e293b);
5253
+ }
5254
+ .de-lc-panel__close {
5255
+ background: none;
5256
+ border: none;
5257
+ font-size: 18px;
5258
+ line-height: 1;
5259
+ cursor: pointer;
5260
+ color: var(--de-text-muted, #64748b);
5261
+ padding: 2px 6px;
5262
+ border-radius: 4px;
5263
+ }
5264
+ .de-lc-panel__close:hover { background: var(--de-border, #e2e8f0); }
5265
+ .de-lc-panel__list {
5266
+ flex: 1;
5267
+ overflow-y: auto;
5268
+ padding: 8px;
5269
+ }
5270
+ .de-lc-panel__empty {
5271
+ font-size: 12px;
5272
+ color: var(--de-text-muted, #64748b);
5273
+ text-align: center;
5274
+ padding: 24px 8px;
5275
+ margin: 0;
5276
+ }
5277
+ .de-lc-panel__item {
5278
+ display: flex;
5279
+ align-items: center;
5280
+ gap: 6px;
5281
+ padding: 6px 4px;
5282
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
5283
+ }
5284
+ .de-lc-panel__item:last-child { border-bottom: none; }
5285
+ .de-lc-panel__link-text {
5286
+ flex: 1;
5287
+ font-size: 12px;
5288
+ color: var(--de-text-primary, #1e293b);
5289
+ white-space: nowrap;
5290
+ overflow: hidden;
5291
+ text-overflow: ellipsis;
5292
+ min-width: 0;
5293
+ }
5294
+ .de-lc-panel__open-btn {
5295
+ flex-shrink: 0;
5296
+ font-size: 11px;
5297
+ padding: 2px 8px;
5298
+ border-radius: 4px;
5299
+ background: var(--de-primary, #2563eb);
5300
+ color: #fff;
5301
+ text-decoration: none;
5302
+ border: none;
5303
+ cursor: pointer;
5304
+ white-space: nowrap;
5305
+ }
5306
+ .de-lc-panel__open-btn:hover { background: var(--de-primary-hover, #1d4ed8); }
5307
+
5308
+ /* Dark mode */
5309
+ .de-root--dark .de-lc-panel {
5310
+ background: var(--de-toolbar-bg, #1e293b);
5311
+ border-color: var(--de-border, #334155);
5312
+ }
5313
+ .de-root--dark .de-preview-modal {
5314
+ background: var(--de-content-bg, #0f172a);
5315
+ color: var(--de-text-primary, #e2e8f0);
5316
+ }
5317
+
5318
+ /* ═══════════════════════════════════════════════════════════════════════════
5319
+ Visual blocks
5320
+ ═══════════════════════════════════════════════════════════════════════════ */
5321
+ .de-root--visual-blocks .de-content p::after,
5322
+ .de-root--visual-blocks .de-content h1::after,
5323
+ .de-root--visual-blocks .de-content h2::after,
5324
+ .de-root--visual-blocks .de-content h3::after,
5325
+ .de-root--visual-blocks .de-content h4::after,
5326
+ .de-root--visual-blocks .de-content h5::after,
5327
+ .de-root--visual-blocks .de-content h6::after {
5328
+ content: "¶";
5329
+ opacity: 0.25;
5330
+ margin-left: 2px;
5331
+ font-style: normal;
5332
+ font-weight: normal;
5333
+ pointer-events: none;
5334
+ user-select: none;
5335
+ }
5336
+ .de-root--visual-blocks .de-content p,
5337
+ .de-root--visual-blocks .de-content blockquote,
5338
+ .de-root--visual-blocks .de-content pre,
5339
+ .de-root--visual-blocks .de-content h1,
5340
+ .de-root--visual-blocks .de-content h2,
5341
+ .de-root--visual-blocks .de-content h3,
5342
+ .de-root--visual-blocks .de-content h4,
5343
+ .de-root--visual-blocks .de-content h5,
5344
+ .de-root--visual-blocks .de-content h6 {
5345
+ outline: 1px dashed var(--de-border, #e2e8f0);
5346
+ outline-offset: 2px;
5347
+ }
5348
+
5349
+ /* ═══════════════════════════════════════════════════════════════════════════
5350
+ Footnotes section (public/preview HTML)
5351
+ ═══════════════════════════════════════════════════════════════════════════ */
5352
+ .de-footnotes {
5353
+ margin-top: 2em;
5354
+ padding-top: 0;
5355
+ font-size: 0.875em;
5356
+ color: var(--de-text-muted, #64748b);
5357
+ }
5358
+ .de-footnotes hr {
5359
+ border: none;
5360
+ border-top: 1px solid var(--de-border, #e2e8f0);
5361
+ margin-bottom: 0.75em;
5362
+ }
5363
+ .de-footnotes ol {
5364
+ margin: 0;
5365
+ padding-left: 1.5em;
5366
+ }
5367
+ .de-footnotes li {
5368
+ margin-bottom: 0.35em;
5369
+ line-height: 1.5;
5370
+ }
5371
+ a.de-fn-ref {
5372
+ text-decoration: none;
5373
+ color: var(--de-primary, #2563eb);
5374
+ font-size: 0.85em;
5375
+ vertical-align: super;
5376
+ }
5377
+ a.de-fn-ref:hover { text-decoration: underline; }
5378
+ a.de-fn-back {
5379
+ text-decoration: none;
5380
+ color: var(--de-text-muted, #94a3b8);
5381
+ margin-left: 4px;
5382
+ font-size: 0.875em;
5383
+ }
5384
+ a.de-fn-back:hover { color: var(--de-primary, #2563eb); }
5385
+
5386
+ /* Heading numbers (live editor via CSS counters) */
5387
+ .de-root--heading-numbers .de-content {
5388
+ counter-reset: h1-counter 0 h2-counter 0 h3-counter 0 h4-counter 0 h5-counter 0 h6-counter 0;
5389
+ }
5390
+ .de-root--heading-numbers .de-content h1 { counter-increment: h1-counter; counter-reset: h2-counter h3-counter h4-counter h5-counter h6-counter; }
5391
+ .de-root--heading-numbers .de-content h2 { counter-increment: h2-counter; counter-reset: h3-counter h4-counter h5-counter h6-counter; }
5392
+ .de-root--heading-numbers .de-content h3 { counter-increment: h3-counter; counter-reset: h4-counter h5-counter h6-counter; }
5393
+ .de-root--heading-numbers .de-content h4 { counter-increment: h4-counter; counter-reset: h5-counter h6-counter; }
5394
+ .de-root--heading-numbers .de-content h5 { counter-increment: h5-counter; counter-reset: h6-counter; }
5395
+ .de-root--heading-numbers .de-content h6 { counter-increment: h6-counter; }
5396
+ .de-root--heading-numbers .de-content h1::before { content: counter(h1-counter) ". "; }
5397
+ .de-root--heading-numbers .de-content h2::before { content: counter(h1-counter) "." counter(h2-counter) " "; }
5398
+ .de-root--heading-numbers .de-content h3::before { content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) " "; }
5399
+ .de-root--heading-numbers .de-content h4::before { content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) "." counter(h4-counter) " "; }
5400
+ .de-root--heading-numbers .de-content h5::before { content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) "." counter(h4-counter) "." counter(h5-counter) " "; }
5401
+ .de-root--heading-numbers .de-content h6::before { content: counter(h1-counter) "." counter(h2-counter) "." counter(h3-counter) "." counter(h4-counter) "." counter(h5-counter) "." counter(h6-counter) " "; }
5402
+
5403
+ /* ═══════════════════════════════════════════════════════════════════════════
5404
+ Autoresize
5405
+ ═══════════════════════════════════════════════════════════════════════════ */
5406
+ .de-root--autoresize {
5407
+ height: auto !important;
5408
+ }
5409
+ .de-root--autoresize .de-content {
5410
+ overflow-y: visible;
5411
+ height: auto;
5412
+ min-height: 80px;
5413
+ }
5414
+
5415
+ /* ═══════════════════════════════════════════════════════════════════════════
5416
+ Math figures
5417
+ ═══════════════════════════════════════════════════════════════════════════ */
5418
+ figure.de-math {
5419
+ display: inline-block;
5420
+ vertical-align: middle;
5421
+ margin: 0.25em 2px;
5422
+ }
5423
+ figure.de-math--block {
5424
+ display: block;
5425
+ text-align: center;
5426
+ margin: 1rem auto;
5427
+ }
5428
+ figure.de-math[contenteditable="false"] {
5429
+ cursor: pointer;
5430
+ outline: none;
5431
+ border-radius: 4px;
5432
+ }
5433
+ figure.de-math[contenteditable="false"]:hover {
5434
+ outline: 2px solid var(--de-primary, #2563eb);
5435
+ }
5436
+ .de-math__fallback {
5437
+ font-family: monospace;
5438
+ background: color-mix(in srgb, var(--de-border, #e2e8f0) 30%, var(--de-content-bg, #fff));
5439
+ padding: 2px 6px;
5440
+ border-radius: 4px;
5441
+ }
5442
+ .de-math__error {
5443
+ color: #dc2626;
5444
+ font-size: 0.8em;
5445
+ }
5446
+
5447
+ /* ═══════════════════════════════════════════════════════════════════════════
5448
+ Math modal
5449
+ ═══════════════════════════════════════════════════════════════════════════ */
5450
+ .de-math-modal__backdrop {
5451
+ position: fixed;
5452
+ inset: 0;
5453
+ background: rgba(0, 0, 0, 0.4);
5454
+ z-index: 9999;
5455
+ display: flex;
5456
+ align-items: center;
5457
+ justify-content: center;
5458
+ }
5459
+ .de-math-modal {
5460
+ background: var(--de-toolbar-bg, #fff);
5461
+ border-radius: 12px;
5462
+ padding: 20px;
5463
+ width: min(540px, 90vw);
5464
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.2);
5465
+ display: flex;
5466
+ flex-direction: column;
5467
+ gap: 12px;
5468
+ color: var(--de-text-primary, #1e293b);
5469
+ }
5470
+ .de-math-modal__title {
5471
+ margin: 0;
5472
+ font-size: 1rem;
5473
+ font-weight: 600;
5474
+ }
5475
+ .de-math-modal__modes {
5476
+ display: flex;
5477
+ gap: 16px;
5478
+ align-items: center;
5479
+ }
5480
+ .de-math-modal__mode {
5481
+ font-size: 0.875rem;
5482
+ display: flex;
5483
+ align-items: center;
5484
+ gap: 6px;
5485
+ cursor: pointer;
5486
+ }
5487
+ .de-math-modal__input {
5488
+ width: 100%;
5489
+ box-sizing: border-box;
5490
+ padding: 8px 10px;
5491
+ border: 1px solid var(--de-border, #e2e8f0);
5492
+ border-radius: 8px;
5493
+ font-family: monospace;
5494
+ font-size: 0.9rem;
5495
+ resize: vertical;
5496
+ background: var(--de-content-bg, #fff);
5497
+ color: var(--de-text-primary, #1e293b);
5498
+ }
5499
+ .de-math-modal__input:focus {
5500
+ outline: 2px solid var(--de-primary, #2563eb);
5501
+ outline-offset: -1px;
5502
+ }
5503
+ .de-math-modal__preview {
5504
+ min-height: 44px;
5505
+ padding: 8px 12px;
5506
+ border: 1px solid var(--de-border, #e2e8f0);
5507
+ border-radius: 8px;
5508
+ background: var(--de-content-bg, #fff);
5509
+ overflow: auto;
5510
+ font-size: 0.9rem;
5511
+ }
5512
+ .de-math-modal__actions {
5513
+ display: flex;
5514
+ justify-content: flex-end;
5515
+ gap: 8px;
5516
+ }
5517
+ .de-math-modal__cancel {
5518
+ padding: 7px 16px;
5519
+ border: 1px solid var(--de-border, #e2e8f0);
5520
+ background: none;
5521
+ border-radius: 8px;
5522
+ cursor: pointer;
5523
+ font-size: 0.875rem;
5524
+ color: var(--de-text-primary, #1e293b);
5525
+ }
5526
+ .de-math-modal__cancel:hover {
5527
+ background: color-mix(in srgb, var(--de-border, #e2e8f0) 30%, transparent);
5528
+ }
5529
+ .de-math-modal__confirm {
5530
+ padding: 7px 16px;
5531
+ background: var(--de-primary, #2563eb);
5532
+ color: #fff;
5533
+ border: none;
5534
+ border-radius: 8px;
5535
+ cursor: pointer;
5536
+ font-size: 0.875rem;
5537
+ font-weight: 500;
5538
+ }
5539
+ .de-math-modal__confirm:hover {
5540
+ background: var(--de-primary-hover, #1d4ed8);
5541
+ }