@richhtmleditor/themes 1.1.0 → 1.1.2

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.0**
5
+ **Current release: 1.1.2**
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.0
11
+ ### What's in 1.1.2
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.0",
3
+ "version": "1.1.2",
4
4
  "description": "CSS themes for Rich HTML Editor.",
5
5
  "type": "module",
6
6
  "style": "./src/richhtmleditor.css",
@@ -584,6 +584,48 @@
584
584
  text-decoration: none;
585
585
  color: inherit;
586
586
  }
587
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list li[data-level="2"] { padding-left: 1rem; }
588
+ #richhtmleditor-root .de-content nav.de-toc .de-toc__list li[data-level="3"] { padding-left: 2rem; }
589
+
590
+ /* ── Spellcheck ──────────────────────────────────────── */
591
+ .de-spell-error {
592
+ border-bottom: 2px solid #dc2626;
593
+ cursor: pointer;
594
+ border-radius: 1px;
595
+ }
596
+ .de-spell-popover {
597
+ background: var(--de-toolbar-bg, #fff);
598
+ border: 1px solid var(--de-border, #e2e8f0);
599
+ border-radius: 8px;
600
+ box-shadow: 0 4px 16px rgba(0,0,0,.12);
601
+ padding: 4px;
602
+ min-width: 130px;
603
+ display: flex;
604
+ flex-direction: column;
605
+ gap: 2px;
606
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
607
+ font-size: 0.875rem;
608
+ }
609
+ .de-spell-popover__item {
610
+ text-align: left;
611
+ padding: 6px 10px;
612
+ border: none;
613
+ background: none;
614
+ cursor: pointer;
615
+ border-radius: 6px;
616
+ font-size: inherit;
617
+ font-family: inherit;
618
+ color: var(--de-text-primary, #0f172a);
619
+ white-space: nowrap;
620
+ }
621
+ .de-spell-popover__item:hover { background: var(--de-primary-hover, #eff6ff); }
622
+ .de-spell-popover__item--muted {
623
+ color: var(--de-text-muted, #64748b);
624
+ font-style: italic;
625
+ border-top: 1px solid var(--de-border, #e2e8f0);
626
+ margin-top: 2px;
627
+ padding-top: 8px;
628
+ }
587
629
 
588
630
  #richhtmleditor-root .de-content details {
589
631
  --de-acc-pad-x: 0.75rem;
@@ -809,6 +851,14 @@
809
851
  background: color-mix(in srgb, var(--de-primary, #2563eb) 12%, var(--de-toolbar-bg, #fff));
810
852
  color: var(--de-primary, #2563eb);
811
853
  }
854
+ .de-block-style-gallery__sep {
855
+ margin: 4px 8px;
856
+ border: none;
857
+ border-top: 1px solid var(--de-border, #e2e8f0);
858
+ }
859
+ .de-block-style-gallery__item--custom {
860
+ font-style: italic;
861
+ }
812
862
 
813
863
  #richhtmleditor-root .de-character-style-gallery {
814
864
  position: relative;
@@ -1768,6 +1818,8 @@ del.de-track-delete,
1768
1818
  min-width: 188px;
1769
1819
  max-height: 70vh;
1770
1820
  overflow-y: auto;
1821
+ scrollbar-width: thin;
1822
+ scrollbar-color: color-mix(in srgb, var(--de-text-muted) 30%, transparent) transparent;
1771
1823
  padding: 8px;
1772
1824
  background: var(--de-toolbar-bg);
1773
1825
  border: 1px solid var(--de-border);
@@ -1781,6 +1833,16 @@ del.de-track-delete,
1781
1833
  font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
1782
1834
  color: var(--de-text-primary);
1783
1835
  }
1836
+ .de-toolbar__overflow-menu::-webkit-scrollbar {
1837
+ width: 4px;
1838
+ }
1839
+ .de-toolbar__overflow-menu::-webkit-scrollbar-thumb {
1840
+ background: color-mix(in srgb, var(--de-text-muted) 30%, transparent);
1841
+ border-radius: 4px;
1842
+ }
1843
+ .de-toolbar__overflow-menu::-webkit-scrollbar-track {
1844
+ background: transparent;
1845
+ }
1784
1846
 
1785
1847
  .de-toolbar__overflow-menu--dark {
1786
1848
  --de-toolbar-bg: #1e293b;
@@ -2760,6 +2822,7 @@ del.de-track-delete,
2760
2822
  outline-offset: -2px;
2761
2823
  }
2762
2824
 
2825
+ /* ---- Help dialog ---- */
2763
2826
  .de-shortcut-help__backdrop {
2764
2827
  position: fixed;
2765
2828
  inset: 0;
@@ -2774,56 +2837,178 @@ del.de-track-delete,
2774
2837
  }
2775
2838
 
2776
2839
  .de-shortcut-help__panel {
2777
- width: min(520px, calc(100vw - 32px));
2778
- max-height: min(80vh, 640px);
2779
- overflow: auto;
2780
- padding: 20px 22px;
2840
+ display: flex;
2841
+ flex-direction: column;
2842
+ width: min(600px, calc(100vw - 32px));
2843
+ max-height: min(80vh, 700px);
2781
2844
  background: var(--de-toolbar-bg, #fff);
2782
2845
  color: var(--de-text-primary, #111);
2783
2846
  border: 1px solid var(--de-border, #d1d5db);
2784
2847
  border-radius: 12px;
2785
2848
  box-shadow: 0 20px 48px rgba(15, 23, 42, 0.2);
2849
+ overflow: hidden;
2850
+ }
2851
+
2852
+ /* Header */
2853
+ .de-shortcut-help__header {
2854
+ display: flex;
2855
+ align-items: center;
2856
+ justify-content: space-between;
2857
+ padding: 16px 20px 0;
2786
2858
  }
2787
2859
 
2788
2860
  .de-shortcut-help__title {
2789
- margin: 0 0 12px;
2790
- font-size: 1.1rem;
2861
+ margin: 0;
2862
+ font-size: 1.15rem;
2863
+ font-weight: 600;
2864
+ }
2865
+
2866
+ .de-shortcut-help__close-x {
2867
+ background: none;
2868
+ border: none;
2869
+ font-size: 1.4rem;
2870
+ line-height: 1;
2871
+ padding: 4px 8px;
2872
+ cursor: pointer;
2873
+ color: var(--de-text-muted, #6b7280);
2874
+ border-radius: 6px;
2875
+ }
2876
+ .de-shortcut-help__close-x:hover {
2877
+ background: color-mix(in srgb, var(--de-text-muted, #6b7280) 12%, transparent);
2878
+ }
2879
+
2880
+ /* Tabs */
2881
+ .de-shortcut-help__tabs {
2882
+ display: flex;
2883
+ gap: 0;
2884
+ padding: 12px 20px 0;
2885
+ border-bottom: 1px solid var(--de-border, #d1d5db);
2791
2886
  }
2792
2887
 
2888
+ .de-shortcut-help__tab {
2889
+ background: none;
2890
+ border: none;
2891
+ border-bottom: 2px solid transparent;
2892
+ padding: 8px 16px;
2893
+ font-size: 0.85rem;
2894
+ font-weight: 500;
2895
+ cursor: pointer;
2896
+ color: var(--de-text-muted, #6b7280);
2897
+ transition: color 0.15s, border-color 0.15s;
2898
+ }
2899
+ .de-shortcut-help__tab:hover {
2900
+ color: var(--de-text-primary, #111);
2901
+ }
2902
+ .de-shortcut-help__tab--active {
2903
+ color: var(--de-primary, #2563eb);
2904
+ border-bottom-color: var(--de-primary, #2563eb);
2905
+ }
2906
+
2907
+ /* Body (scrollable) */
2793
2908
  .de-shortcut-help__body {
2794
2909
  display: grid;
2795
- gap: 14px;
2910
+ gap: 16px;
2911
+ padding: 16px 20px;
2912
+ overflow-y: auto;
2913
+ flex: 1;
2914
+ min-height: 0;
2796
2915
  }
2797
2916
 
2917
+ .de-shortcut-help__body[hidden] {
2918
+ display: none !important;
2919
+ }
2920
+
2921
+ /* Section headings */
2798
2922
  .de-shortcut-help__section h3 {
2799
- margin: 0 0 6px;
2800
- font-size: 0.82rem;
2923
+ margin: 0 0 8px;
2924
+ font-size: 0.8rem;
2801
2925
  text-transform: uppercase;
2802
- letter-spacing: 0.04em;
2926
+ letter-spacing: 0.05em;
2927
+ font-weight: 600;
2803
2928
  color: var(--de-text-muted, #6b7280);
2804
2929
  }
2805
2930
 
2931
+ /* Shortcut list */
2806
2932
  .de-shortcut-help__list {
2807
2933
  display: grid;
2808
- grid-template-columns: minmax(120px, 1fr) 2fr;
2809
- gap: 6px 12px;
2934
+ grid-template-columns: minmax(160px, auto) 1fr;
2935
+ gap: 6px 16px;
2810
2936
  margin: 0;
2811
2937
  }
2812
2938
 
2813
2939
  .de-shortcut-help__list dt {
2814
2940
  margin: 0;
2941
+ display: flex;
2942
+ align-items: center;
2943
+ gap: 4px;
2944
+ }
2945
+
2946
+ .de-shortcut-help__list dt kbd {
2947
+ display: inline-block;
2948
+ padding: 2px 7px;
2815
2949
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2816
- font-size: 0.78rem;
2817
- color: var(--de-text-primary, #111);
2950
+ font-size: 0.75rem;
2951
+ background: color-mix(in srgb, var(--de-text-primary, #111) 8%, transparent);
2952
+ border: 1px solid var(--de-border, #d1d5db);
2953
+ border-radius: 4px;
2954
+ line-height: 1.4;
2818
2955
  }
2819
2956
 
2820
2957
  .de-shortcut-help__list dd {
2821
2958
  margin: 0;
2822
- font-size: 0.86rem;
2959
+ font-size: 0.85rem;
2960
+ display: flex;
2961
+ align-items: center;
2962
+ }
2963
+
2964
+ /* Feature list */
2965
+ .de-shortcut-help__feature-list {
2966
+ display: grid;
2967
+ grid-template-columns: minmax(140px, auto) 1fr;
2968
+ gap: 6px 16px;
2969
+ margin: 0;
2970
+ }
2971
+
2972
+ .de-shortcut-help__feature-list dt {
2973
+ margin: 0;
2974
+ font-size: 0.85rem;
2975
+ font-weight: 600;
2976
+ color: var(--de-text-primary, #111);
2977
+ }
2978
+
2979
+ .de-shortcut-help__feature-list dd {
2980
+ margin: 0;
2981
+ font-size: 0.83rem;
2982
+ color: var(--de-text-muted, #6b7280);
2983
+ line-height: 1.45;
2823
2984
  }
2824
2985
 
2825
- .de-shortcut-help__close {
2826
- margin-top: 16px;
2986
+ /* Footer */
2987
+ .de-shortcut-help__footer {
2988
+ display: flex;
2989
+ align-items: center;
2990
+ justify-content: space-between;
2991
+ padding: 12px 20px;
2992
+ border-top: 1px solid var(--de-border, #d1d5db);
2993
+ }
2994
+
2995
+ .de-shortcut-help__hint {
2996
+ font-size: 0.78rem;
2997
+ color: var(--de-text-muted, #6b7280);
2998
+ }
2999
+
3000
+ .de-shortcut-help__close-btn {
3001
+ padding: 6px 20px;
3002
+ background: var(--de-primary, #2563eb);
3003
+ color: #fff;
3004
+ border: none;
3005
+ border-radius: 6px;
3006
+ font-size: 0.85rem;
3007
+ font-weight: 500;
3008
+ cursor: pointer;
3009
+ }
3010
+ .de-shortcut-help__close-btn:hover {
3011
+ background: var(--de-primary-hover, #1d4ed8);
2827
3012
  }
2828
3013
 
2829
3014
  #richhtmleditor-root .de-a11y-live {
@@ -3406,10 +3591,16 @@ del.de-track-delete,
3406
3591
  #richhtmleditor-root .de-section[data-style-id^="columns-"] > .de-section__title {
3407
3592
  display: none;
3408
3593
  }
3594
+ #richhtmleditor-root .de-section[data-style-id^="columns-"] {
3595
+ overflow-wrap: break-word;
3596
+ word-break: break-word;
3597
+ }
3409
3598
 
3410
3599
  #richhtmleditor-root .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3411
3600
  #richhtmleditor-root .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3412
3601
 
3602
+ .de-section[data-style-id^="columns-"] > .de-section__title { display: none; }
3603
+ .de-section[data-style-id^="columns-"] { overflow-wrap: break-word; word-break: break-word; }
3413
3604
  .de-section[data-style-id="columns-2"] { column-count: 2; column-gap: 2em; }
3414
3605
  .de-section[data-style-id="columns-3"] { column-count: 3; column-gap: 1.5em; }
3415
3606
 
@@ -3845,67 +4036,468 @@ del.de-track-delete,
3845
4036
  background: #1e293b;
3846
4037
  border-color: #475569;
3847
4038
  }
3848
-
3849
- /* ── Slash command menu ──────────────────────────────── */
3850
- .de-slash-menu {
3851
- z-index: 10001;
3852
- width: 240px;
3853
- max-height: 320px;
3854
- overflow-y: auto;
3855
- padding: 6px;
3856
- background: var(--de-toolbar-bg, #fff);
3857
- border: 1px solid var(--de-border, #e2e8f0);
3858
- border-radius: 10px;
3859
- box-shadow: 0 8px 24px rgba(0,0,0,.12), 0 2px 6px rgba(0,0,0,.06);
3860
- font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
3861
- }
3862
- .de-slash-menu[hidden] { display: none !important; }
3863
-
3864
- .de-slash-menu__item {
3865
- display: flex;
3866
- align-items: center;
3867
- gap: 10px;
3868
- padding: 8px 10px;
3869
- border-radius: 7px;
3870
- cursor: pointer;
3871
- font-size: 0.8125rem;
3872
- font-weight: 500;
3873
- color: var(--de-text-primary, #0f172a);
3874
- transition: background 0.12s;
3875
- }
3876
- .de-slash-menu__item:hover,
3877
- .de-slash-menu__item--active {
3878
- background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
3879
- }
3880
- .de-slash-menu__icon {
3881
- display: inline-flex;
3882
- align-items: center;
3883
- justify-content: center;
3884
- width: 28px;
3885
- height: 28px;
3886
- border-radius: 6px;
3887
- background: var(--de-secondary, #f1f5f9);
3888
- font-size: 0.75rem;
3889
- font-weight: 700;
3890
- color: var(--de-text-muted, #64748b);
3891
- flex-shrink: 0;
3892
- }
3893
- .de-slash-menu__label {
3894
- flex: 1;
3895
- }
3896
- .de-slash-menu__empty {
3897
- padding: 16px 10px;
3898
- text-align: center;
3899
- font-size: 0.8125rem;
3900
- color: var(--de-text-muted, #64748b);
3901
- }
3902
-
3903
- /* Dark mode */
3904
- .de-root--dark .de-slash-menu {
3905
- background: #1e293b;
3906
- border-color: #475569;
3907
- }
3908
- .de-root--dark .de-slash-menu__icon {
3909
- background: #334155;
3910
- color: #94a3b8;
3911
- }
4039
+
4040
+ /* ── Slash command menu ──────────────────────────────── */
4041
+ .de-slash-menu {
4042
+ z-index: 10001;
4043
+ width: 270px;
4044
+ max-height: 380px;
4045
+ overflow-y: auto;
4046
+ scrollbar-width: thin;
4047
+ scrollbar-color: rgba(0,0,0,.15) transparent;
4048
+ padding: 6px;
4049
+ background: var(--de-toolbar-bg, #fff);
4050
+ border: 1px solid var(--de-border, #e2e8f0);
4051
+ border-radius: 10px;
4052
+ box-shadow: 0 8px 24px rgba(0,0,0,.12), 0 2px 6px rgba(0,0,0,.06);
4053
+ font-family: "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;
4054
+ }
4055
+ .de-slash-menu[hidden] { display: none !important; }
4056
+
4057
+ .de-slash-menu__item {
4058
+ display: flex;
4059
+ align-items: center;
4060
+ gap: 10px;
4061
+ padding: 7px 10px;
4062
+ border-radius: 7px;
4063
+ cursor: pointer;
4064
+ color: var(--de-text-primary, #0f172a);
4065
+ transition: background 0.12s;
4066
+ }
4067
+ .de-slash-menu__item:hover,
4068
+ .de-slash-menu__item--active {
4069
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
4070
+ }
4071
+ .de-slash-menu__icon {
4072
+ display: inline-flex;
4073
+ align-items: center;
4074
+ justify-content: center;
4075
+ width: 30px;
4076
+ height: 30px;
4077
+ border-radius: 6px;
4078
+ background: var(--de-secondary, #f1f5f9);
4079
+ font-size: 0.75rem;
4080
+ font-weight: 700;
4081
+ color: var(--de-text-muted, #64748b);
4082
+ flex-shrink: 0;
4083
+ }
4084
+ .de-slash-menu__icon svg { display: block; }
4085
+ .de-slash-menu__text {
4086
+ display: flex;
4087
+ flex-direction: column;
4088
+ gap: 1px;
4089
+ flex: 1;
4090
+ min-width: 0;
4091
+ }
4092
+ .de-slash-menu__label {
4093
+ font-size: 0.8125rem;
4094
+ font-weight: 500;
4095
+ line-height: 1.3;
4096
+ }
4097
+ .de-slash-menu__desc {
4098
+ font-size: 0.6875rem;
4099
+ font-weight: 400;
4100
+ color: var(--de-text-muted, #64748b);
4101
+ line-height: 1.3;
4102
+ white-space: nowrap;
4103
+ overflow: hidden;
4104
+ text-overflow: ellipsis;
4105
+ }
4106
+ .de-slash-menu__empty {
4107
+ padding: 16px 10px;
4108
+ text-align: center;
4109
+ font-size: 0.8125rem;
4110
+ color: var(--de-text-muted, #64748b);
4111
+ }
4112
+
4113
+ /* Dark mode */
4114
+ .de-root--dark .de-slash-menu {
4115
+ background: #1e293b;
4116
+ border-color: #475569;
4117
+ }
4118
+ .de-root--dark .de-slash-menu__icon {
4119
+ background: #334155;
4120
+ color: #94a3b8;
4121
+ }
4122
+ .de-root--dark .de-slash-menu {
4123
+ scrollbar-color: rgba(255,255,255,.15) transparent;
4124
+ }
4125
+ .de-slash-menu::-webkit-scrollbar { width: 5px; }
4126
+ .de-slash-menu::-webkit-scrollbar-track { background: transparent; }
4127
+ .de-slash-menu::-webkit-scrollbar-thumb {
4128
+ background: rgba(0,0,0,.15);
4129
+ border-radius: 99px;
4130
+ }
4131
+ .de-root--dark .de-slash-menu::-webkit-scrollbar-thumb { background: rgba(255,255,255,.15); }
4132
+
4133
+ /* ── Fields / mail-merge placeholders ── */
4134
+ #richhtmleditor-root .de-content .de-field {
4135
+ display: inline;
4136
+ padding: 1px 4px;
4137
+ border-radius: 3px;
4138
+ background: color-mix(in srgb, var(--de-primary) 12%, transparent);
4139
+ border: 1px solid color-mix(in srgb, var(--de-primary) 25%, transparent);
4140
+ font-size: 0.92em;
4141
+ white-space: nowrap;
4142
+ cursor: default;
4143
+ }
4144
+ .de-root--dark .de-content .de-field {
4145
+ background: color-mix(in srgb, var(--de-primary) 18%, transparent);
4146
+ border-color: color-mix(in srgb, var(--de-primary) 35%, transparent);
4147
+ }
4148
+
4149
+ /* ── Shapes / drawing canvas ── */
4150
+ #richhtmleditor-root .de-content .de-shape {
4151
+ display: flex;
4152
+ margin: 0.5em 0;
4153
+ cursor: default;
4154
+ user-select: none;
4155
+ }
4156
+ #richhtmleditor-root .de-content .de-shape svg {
4157
+ display: block;
4158
+ max-width: 100%;
4159
+ }
4160
+ #richhtmleditor-root .de-content .de-shape--active {
4161
+ outline: 2px solid color-mix(in srgb, var(--de-primary) 55%, transparent);
4162
+ outline-offset: 3px;
4163
+ border-radius: 4px;
4164
+ }
4165
+ /* Shape alignment */
4166
+ #richhtmleditor-root .de-content .de-shape { display: flex; }
4167
+ #richhtmleditor-root .de-content .de-shape[data-shape-align="center"] { justify-content: center; }
4168
+ #richhtmleditor-root .de-content .de-shape[data-shape-align="right"] { justify-content: flex-end; }
4169
+
4170
+ /* ── Shape Controls (mini toolbar above selected shape) ── */
4171
+ .de-shape-controls[hidden],
4172
+ .de-shape-handles[hidden],
4173
+ .de-shape-edit-overlay[hidden] { display: none !important; }
4174
+ .de-shape-controls {
4175
+ position: absolute;
4176
+ display: flex;
4177
+ align-items: center;
4178
+ gap: 4px;
4179
+ padding: 4px 8px;
4180
+ background: var(--de-toolbar-bg, #fff);
4181
+ border: 1px solid var(--de-border, #e2e8f0);
4182
+ border-radius: 8px;
4183
+ box-shadow: 0 2px 8px rgba(0,0,0,.12);
4184
+ z-index: 50;
4185
+ white-space: nowrap;
4186
+ }
4187
+ .de-shape-controls__btn {
4188
+ display: inline-flex;
4189
+ align-items: center;
4190
+ justify-content: center;
4191
+ padding: 4px 10px;
4192
+ font-size: 12px;
4193
+ line-height: 1.4;
4194
+ border-radius: 4px;
4195
+ cursor: pointer;
4196
+ background: transparent;
4197
+ border: 1px solid var(--de-border, #e2e8f0);
4198
+ color: var(--de-text-primary, #1e293b);
4199
+ font-family: inherit;
4200
+ transition: background .15s, color .15s, border-color .15s;
4201
+ }
4202
+ .de-shape-controls__btn:hover {
4203
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
4204
+ }
4205
+ /* Save button — prominent blue CTA */
4206
+ .de-shape-controls__btn.de-shape-controls__btn--save {
4207
+ background: var(--de-primary, #2563eb);
4208
+ color: #fff;
4209
+ border-color: var(--de-primary, #2563eb);
4210
+ font-weight: 600;
4211
+ }
4212
+ .de-shape-controls__btn.de-shape-controls__btn--save:hover {
4213
+ background: var(--de-primary-hover, #1d4ed8);
4214
+ border-color: var(--de-primary-hover, #1d4ed8);
4215
+ }
4216
+ /* Alignment button group */
4217
+ .de-shape-controls__align-group {
4218
+ display: flex;
4219
+ gap: 1px;
4220
+ border: 1px solid var(--de-border, #e2e8f0);
4221
+ border-radius: 4px;
4222
+ overflow: hidden;
4223
+ }
4224
+ .de-shape-controls__align-btn {
4225
+ padding: 4px 8px;
4226
+ font-size: 13px;
4227
+ cursor: pointer;
4228
+ background: none;
4229
+ border: none;
4230
+ color: var(--de-text-primary, #1e293b);
4231
+ transition: background .15s;
4232
+ line-height: 1;
4233
+ }
4234
+ .de-shape-controls__align-btn:hover {
4235
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 10%, transparent);
4236
+ }
4237
+ .de-shape-controls__align-btn--active {
4238
+ background: var(--de-primary, #2563eb);
4239
+ color: #fff;
4240
+ }
4241
+ .de-shape-controls__align-btn--active:hover {
4242
+ background: var(--de-primary-hover, #1d4ed8);
4243
+ }
4244
+ /* Divider */
4245
+ .de-shape-controls__divider {
4246
+ width: 1px;
4247
+ height: 20px;
4248
+ background: var(--de-border, #e2e8f0);
4249
+ flex-shrink: 0;
4250
+ }
4251
+ .de-shape-controls__btn--remove {
4252
+ color: #dc2626;
4253
+ border-color: #fecaca;
4254
+ }
4255
+ .de-shape-controls__btn--remove:hover {
4256
+ background: #fef2f2;
4257
+ }
4258
+
4259
+ /* ── Shape drag-to-reposition ── */
4260
+ .de-shape-controls__btn--drag {
4261
+ cursor: grab;
4262
+ font-size: 14px;
4263
+ letter-spacing: -1px;
4264
+ }
4265
+ .de-shape--dragging {
4266
+ opacity: 0.35;
4267
+ }
4268
+ .de-shape-drop-indicator {
4269
+ position: absolute;
4270
+ height: 3px;
4271
+ background: var(--de-primary, #2563eb);
4272
+ border-radius: 2px;
4273
+ z-index: 55;
4274
+ pointer-events: none;
4275
+ }
4276
+ .de-shape-drop-indicator[hidden] { display: none !important; }
4277
+ .de-shape-drag-ghost {
4278
+ position: fixed;
4279
+ padding: 6px 14px;
4280
+ background: var(--de-primary, #2563eb);
4281
+ color: #fff;
4282
+ font-size: 12px;
4283
+ font-family: system-ui, sans-serif;
4284
+ border-radius: 6px;
4285
+ box-shadow: 0 4px 12px rgba(0,0,0,.2);
4286
+ pointer-events: none;
4287
+ z-index: 10001;
4288
+ white-space: nowrap;
4289
+ text-transform: capitalize;
4290
+ }
4291
+
4292
+ /* ── Shape resize handles ── */
4293
+ .de-shape-handles {
4294
+ position: absolute;
4295
+ pointer-events: none;
4296
+ z-index: 49;
4297
+ }
4298
+ .de-shape-handle {
4299
+ position: absolute;
4300
+ width: 10px;
4301
+ height: 10px;
4302
+ background: #fff;
4303
+ border: 2px solid var(--de-primary, #2563eb);
4304
+ border-radius: 2px;
4305
+ pointer-events: auto;
4306
+ z-index: 51;
4307
+ }
4308
+ .de-shape-handle--nw { top: -5px; left: -5px; cursor: nwse-resize; }
4309
+ .de-shape-handle--ne { top: -5px; right: -5px; cursor: nesw-resize; }
4310
+ .de-shape-handle--se { bottom: -5px; right: -5px; cursor: nwse-resize; }
4311
+ .de-shape-handle--sw { bottom: -5px; left: -5px; cursor: nesw-resize; }
4312
+ .de-shape-handle--e { top: calc(50% - 5px); right: -5px; cursor: ew-resize; }
4313
+
4314
+ /* ── Shape text edit overlay ── */
4315
+ .de-shape-edit-overlay {
4316
+ position: absolute;
4317
+ display: flex;
4318
+ align-items: center;
4319
+ justify-content: center;
4320
+ z-index: 52;
4321
+ background: rgba(255,255,255,.85);
4322
+ border-radius: 4px;
4323
+ }
4324
+ .de-shape-edit-overlay__input {
4325
+ width: 80%;
4326
+ max-width: 300px;
4327
+ padding: 6px 10px;
4328
+ border: 2px solid var(--de-primary, #2563eb);
4329
+ border-radius: 6px;
4330
+ font-size: 14px;
4331
+ font-family: system-ui, sans-serif;
4332
+ text-align: center;
4333
+ outline: none;
4334
+ background: #fff;
4335
+ color: #1e293b;
4336
+ box-shadow: 0 2px 8px rgba(0,0,0,.15);
4337
+ }
4338
+ /* Dark mode overrides */
4339
+ .de-root--dark .de-shape-controls {
4340
+ background: var(--de-toolbar-bg, #1e293b);
4341
+ border-color: var(--de-border, #334155);
4342
+ }
4343
+ .de-root--dark .de-shape-controls__btn {
4344
+ color: var(--de-text-primary, #e2e8f0);
4345
+ border-color: var(--de-border, #334155);
4346
+ }
4347
+ .de-root--dark .de-shape-controls__btn--remove {
4348
+ color: #f87171;
4349
+ border-color: #7f1d1d;
4350
+ }
4351
+ .de-root--dark .de-shape-controls__btn--remove:hover {
4352
+ background: rgba(127,29,29,.3);
4353
+ }
4354
+ .de-root--dark .de-shape-edit-overlay {
4355
+ background: rgba(15,23,42,.85);
4356
+ }
4357
+ .de-root--dark .de-shape-edit-overlay__input {
4358
+ background: #1e293b;
4359
+ color: #e2e8f0;
4360
+ border-color: var(--de-primary, #3b82f6);
4361
+ }
4362
+
4363
+ /* ── Shape Picker Panel ── */
4364
+ .de-shape-picker {
4365
+ width: 480px;
4366
+ background: var(--de-toolbar-bg, #fff);
4367
+ border: 1px solid var(--de-border, #e2e8f0);
4368
+ border-radius: 10px;
4369
+ box-shadow: 0 8px 24px rgba(0,0,0,.15);
4370
+ font-family: system-ui, -apple-system, sans-serif;
4371
+ overflow: hidden;
4372
+ }
4373
+ .de-shape-picker__tabs {
4374
+ display: flex;
4375
+ border-bottom: 1px solid var(--de-border, #e2e8f0);
4376
+ padding: 0 4px;
4377
+ gap: 2px;
4378
+ }
4379
+ .de-shape-picker__tab {
4380
+ padding: 8px 14px;
4381
+ font-size: 15px;
4382
+ cursor: pointer;
4383
+ background: none;
4384
+ border: none;
4385
+ border-bottom: 2px solid transparent;
4386
+ color: var(--de-text-muted, #64748b);
4387
+ transition: color .15s, border-color .15s;
4388
+ line-height: 1;
4389
+ }
4390
+ .de-shape-picker__tab:hover {
4391
+ color: var(--de-text-primary, #1e293b);
4392
+ }
4393
+ .de-shape-picker__tab--active {
4394
+ border-bottom-color: var(--de-primary, #2563eb);
4395
+ color: var(--de-primary, #2563eb);
4396
+ }
4397
+ .de-shape-picker__body {
4398
+ padding: 12px;
4399
+ max-height: 280px;
4400
+ overflow-y: auto;
4401
+ scrollbar-width: thin;
4402
+ scrollbar-color: color-mix(in srgb, var(--de-text-muted) 30%, transparent) transparent;
4403
+ }
4404
+ .de-shape-picker__body::-webkit-scrollbar {
4405
+ width: 4px;
4406
+ }
4407
+ .de-shape-picker__body::-webkit-scrollbar-thumb {
4408
+ background: color-mix(in srgb, var(--de-text-muted) 30%, transparent);
4409
+ border-radius: 4px;
4410
+ }
4411
+ .de-shape-picker__body::-webkit-scrollbar-track {
4412
+ background: transparent;
4413
+ }
4414
+ .de-shape-picker__grid {
4415
+ display: grid;
4416
+ grid-template-columns: repeat(7, 1fr);
4417
+ gap: 6px;
4418
+ }
4419
+ .de-shape-picker__btn {
4420
+ width: 48px;
4421
+ height: 48px;
4422
+ display: flex;
4423
+ align-items: center;
4424
+ justify-content: center;
4425
+ border: 2px solid transparent;
4426
+ border-radius: 6px;
4427
+ cursor: pointer;
4428
+ background: none;
4429
+ padding: 4px;
4430
+ transition: border-color .15s, background .15s;
4431
+ }
4432
+ .de-shape-picker__btn:hover {
4433
+ border-color: var(--de-primary, #2563eb);
4434
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 8%, transparent);
4435
+ }
4436
+ .de-shape-picker__btn--selected {
4437
+ border-color: var(--de-primary, #2563eb);
4438
+ background: color-mix(in srgb, var(--de-primary, #2563eb) 15%, transparent);
4439
+ }
4440
+ .de-shape-picker__btn svg {
4441
+ display: block;
4442
+ }
4443
+ .de-shape-picker__footer {
4444
+ display: flex;
4445
+ gap: 8px;
4446
+ align-items: center;
4447
+ padding: 10px 12px;
4448
+ border-top: 1px solid var(--de-border, #e2e8f0);
4449
+ }
4450
+ .de-shape-picker__text-input {
4451
+ flex: 1;
4452
+ padding: 6px 10px;
4453
+ border: 1px solid var(--de-border, #e2e8f0);
4454
+ border-radius: 6px;
4455
+ font-size: 13px;
4456
+ font-family: inherit;
4457
+ background: var(--de-content-bg, #fff);
4458
+ color: var(--de-text-primary, #1e293b);
4459
+ outline: none;
4460
+ }
4461
+ .de-shape-picker__text-input:focus {
4462
+ border-color: var(--de-primary, #2563eb);
4463
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--de-primary, #2563eb) 20%, transparent);
4464
+ }
4465
+ .de-shape-picker__insert-btn {
4466
+ padding: 6px 16px;
4467
+ background: var(--de-primary, #2563eb);
4468
+ color: #fff;
4469
+ border: none;
4470
+ border-radius: 6px;
4471
+ font-size: 13px;
4472
+ font-family: inherit;
4473
+ cursor: pointer;
4474
+ transition: background .15s;
4475
+ }
4476
+ .de-shape-picker__insert-btn:hover:not(:disabled) {
4477
+ background: var(--de-primary-hover, #1d4ed8);
4478
+ }
4479
+ .de-shape-picker__insert-btn:disabled {
4480
+ opacity: 0.45;
4481
+ cursor: not-allowed;
4482
+ }
4483
+ /* Dark mode */
4484
+ .de-shape-picker--dark {
4485
+ background: var(--de-toolbar-bg, #1e293b);
4486
+ border-color: var(--de-border, #334155);
4487
+ box-shadow: 0 8px 24px rgba(0,0,0,.35);
4488
+ }
4489
+ .de-shape-picker--dark .de-shape-picker__text-input {
4490
+ background: var(--de-content-bg, #0f172a);
4491
+ color: var(--de-text-primary, #e2e8f0);
4492
+ border-color: var(--de-border, #334155);
4493
+ }
4494
+
4495
+ /* ── Print: repeat table headers on each page ── */
4496
+ @media print {
4497
+ #richhtmleditor-root .de-content table.de-table thead {
4498
+ display: table-header-group;
4499
+ }
4500
+ #richhtmleditor-root .de-content table.de-table tbody {
4501
+ display: table-row-group;
4502
+ }
4503
+ }