notra-editor 0.7.0 → 0.8.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.
@@ -1,385 +1,3106 @@
1
- @import './shared.css';
1
+ @charset "UTF-8";
2
+ :root {
3
+ /******************
4
+ Basics
5
+ ******************/
6
+ overflow-wrap: break-word;
7
+ text-size-adjust: none;
8
+ text-rendering: optimizeLegibility;
9
+ -webkit-font-smoothing: antialiased;
10
+ -moz-osx-font-smoothing: grayscale;
11
+ /******************
12
+ Colors variables
13
+ ******************/
14
+ /* Gray alpha (light mode) */
15
+ --tt-gray-light-a-50: rgba(56, 56, 56, 0.04);
16
+ --tt-gray-light-a-100: rgba(15, 22, 36, 0.05);
17
+ --tt-gray-light-a-200: rgba(37, 39, 45, 0.1);
18
+ --tt-gray-light-a-300: rgba(47, 50, 55, 0.2);
19
+ --tt-gray-light-a-400: rgba(40, 44, 51, 0.42);
20
+ --tt-gray-light-a-500: rgba(52, 55, 60, 0.64);
21
+ --tt-gray-light-a-600: rgba(36, 39, 46, 0.78);
22
+ --tt-gray-light-a-700: rgba(35, 37, 42, 0.87);
23
+ --tt-gray-light-a-800: rgba(30, 32, 36, 0.95);
24
+ --tt-gray-light-a-900: rgba(29, 30, 32, 0.98);
25
+ /* Gray (light mode) */
26
+ --tt-gray-light-50: rgba(250, 250, 250, 1);
27
+ --tt-gray-light-100: rgba(244, 244, 245, 1);
28
+ --tt-gray-light-200: rgba(234, 234, 235, 1);
29
+ --tt-gray-light-300: rgba(213, 214, 215, 1);
30
+ --tt-gray-light-400: rgba(166, 167, 171, 1);
31
+ --tt-gray-light-500: rgba(125, 127, 130, 1);
32
+ --tt-gray-light-600: rgba(83, 86, 90, 1);
33
+ --tt-gray-light-700: rgba(64, 65, 69, 1);
34
+ --tt-gray-light-800: rgba(44, 45, 48, 1);
35
+ --tt-gray-light-900: rgba(34, 35, 37, 1);
36
+ /* Gray alpha (dark mode) */
37
+ --tt-gray-dark-a-50: rgba(232, 232, 253, 0.05);
38
+ --tt-gray-dark-a-100: rgba(231, 231, 243, 0.07);
39
+ --tt-gray-dark-a-200: rgba(238, 238, 246, 0.11);
40
+ --tt-gray-dark-a-300: rgba(239, 239, 245, 0.22);
41
+ --tt-gray-dark-a-400: rgba(244, 244, 255, 0.37);
42
+ --tt-gray-dark-a-500: rgba(236, 238, 253, 0.5);
43
+ --tt-gray-dark-a-600: rgba(247, 247, 253, 0.64);
44
+ --tt-gray-dark-a-700: rgba(251, 251, 254, 0.75);
45
+ --tt-gray-dark-a-800: rgba(253, 253, 253, 0.88);
46
+ --tt-gray-dark-a-900: rgba(255, 255, 255, 0.96);
47
+ /* Gray (dark mode) */
48
+ --tt-gray-dark-50: rgba(25, 25, 26, 1);
49
+ --tt-gray-dark-100: rgba(32, 32, 34, 1);
50
+ --tt-gray-dark-200: rgba(45, 45, 47, 1);
51
+ --tt-gray-dark-300: rgba(70, 70, 73, 1);
52
+ --tt-gray-dark-400: rgba(99, 99, 105, 1);
53
+ --tt-gray-dark-500: rgba(124, 124, 131, 1);
54
+ --tt-gray-dark-600: rgba(163, 163, 168, 1);
55
+ --tt-gray-dark-700: rgba(192, 192, 195, 1);
56
+ --tt-gray-dark-800: rgba(224, 224, 225, 1);
57
+ --tt-gray-dark-900: rgba(245, 245, 245, 1);
58
+ /* Brand colors */
59
+ --tt-brand-color-50: rgba(239, 238, 255, 1);
60
+ --tt-brand-color-100: rgba(222, 219, 255, 1);
61
+ --tt-brand-color-200: rgba(195, 189, 255, 1);
62
+ --tt-brand-color-300: rgba(157, 138, 255, 1);
63
+ --tt-brand-color-400: rgba(122, 82, 255, 1);
64
+ --tt-brand-color-500: rgba(98, 41, 255, 1);
65
+ --tt-brand-color-600: rgba(84, 0, 229, 1);
66
+ --tt-brand-color-700: rgba(75, 0, 204, 1);
67
+ --tt-brand-color-800: rgba(56, 0, 153, 1);
68
+ --tt-brand-color-900: rgba(43, 25, 102, 1);
69
+ --tt-brand-color-950: hsla(257, 100%, 9%, 1);
70
+ /* Green */
71
+ --tt-color-green-inc-5: hsla(129, 100%, 97%, 1);
72
+ --tt-color-green-inc-4: hsla(129, 100%, 92%, 1);
73
+ --tt-color-green-inc-3: hsla(131, 100%, 86%, 1);
74
+ --tt-color-green-inc-2: hsla(133, 98%, 78%, 1);
75
+ --tt-color-green-inc-1: hsla(137, 99%, 70%, 1);
76
+ --tt-color-green-base: hsla(147, 99%, 50%, 1);
77
+ --tt-color-green-dec-1: hsla(147, 97%, 41%, 1);
78
+ --tt-color-green-dec-2: hsla(146, 98%, 32%, 1);
79
+ --tt-color-green-dec-3: hsla(146, 100%, 24%, 1);
80
+ --tt-color-green-dec-4: hsla(144, 100%, 16%, 1);
81
+ --tt-color-green-dec-5: hsla(140, 100%, 9%, 1);
82
+ /* Yellow */
83
+ --tt-color-yellow-inc-5: hsla(50, 100%, 97%, 1);
84
+ --tt-color-yellow-inc-4: hsla(50, 100%, 91%, 1);
85
+ --tt-color-yellow-inc-3: hsla(50, 100%, 84%, 1);
86
+ --tt-color-yellow-inc-2: hsla(50, 100%, 77%, 1);
87
+ --tt-color-yellow-inc-1: hsla(50, 100%, 68%, 1);
88
+ --tt-color-yellow-base: hsla(52, 100%, 50%, 1);
89
+ --tt-color-yellow-dec-1: hsla(52, 100%, 41%, 1);
90
+ --tt-color-yellow-dec-2: hsla(52, 100%, 32%, 1);
91
+ --tt-color-yellow-dec-3: hsla(52, 100%, 24%, 1);
92
+ --tt-color-yellow-dec-4: hsla(51, 100%, 16%, 1);
93
+ --tt-color-yellow-dec-5: hsla(50, 100%, 9%, 1);
94
+ /* Red */
95
+ --tt-color-red-inc-5: hsla(11, 100%, 96%, 1);
96
+ --tt-color-red-inc-4: hsla(11, 100%, 88%, 1);
97
+ --tt-color-red-inc-3: hsla(10, 100%, 80%, 1);
98
+ --tt-color-red-inc-2: hsla(9, 100%, 73%, 1);
99
+ --tt-color-red-inc-1: hsla(7, 100%, 64%, 1);
100
+ --tt-color-red-base: hsla(7, 100%, 54%, 1);
101
+ --tt-color-red-dec-1: hsla(7, 100%, 41%, 1);
102
+ --tt-color-red-dec-2: hsla(5, 100%, 32%, 1);
103
+ --tt-color-red-dec-3: hsla(4, 100%, 24%, 1);
104
+ --tt-color-red-dec-4: hsla(3, 100%, 16%, 1);
105
+ --tt-color-red-dec-5: hsla(1, 100%, 9%, 1);
106
+ /* Basic colors */
107
+ --white: rgba(255, 255, 255, 1);
108
+ --black: rgba(14, 14, 17, 1);
109
+ --transparent: rgba(255, 255, 255, 0);
110
+ /******************
111
+ Shadow variables
112
+ ******************/
113
+ /* Shadows Light */
114
+ --tt-shadow-elevated-md:
115
+ 0px 16px 48px 0px rgba(17, 24, 39, 0.04),
116
+ 0px 12px 24px 0px rgba(17, 24, 39, 0.04),
117
+ 0px 6px 8px 0px rgba(17, 24, 39, 0.02),
118
+ 0px 2px 3px 0px rgba(17, 24, 39, 0.02);
119
+ /**************************************************
120
+ Radius variables
121
+ **************************************************/
122
+ --tt-radius-xxs: 0.125rem; /* 2px */
123
+ --tt-radius-xs: 0.25rem; /* 4px */
124
+ --tt-radius-sm: 0.375rem; /* 6px */
125
+ --tt-radius-md: 0.5rem; /* 8px */
126
+ --tt-radius-lg: 0.75rem; /* 12px */
127
+ --tt-radius-xl: 1rem; /* 16px */
128
+ /**************************************************
129
+ Transition variables
130
+ **************************************************/
131
+ --tt-transition-duration-short: 0.1s;
132
+ --tt-transition-duration-default: 0.2s;
133
+ --tt-transition-duration-long: 0.64s;
134
+ --tt-transition-easing-default: cubic-bezier(0.46, 0.03, 0.52, 0.96);
135
+ --tt-transition-easing-cubic: cubic-bezier(0.65, 0.05, 0.36, 1);
136
+ --tt-transition-easing-quart: cubic-bezier(0.77, 0, 0.18, 1);
137
+ --tt-transition-easing-circ: cubic-bezier(0.79, 0.14, 0.15, 0.86);
138
+ --tt-transition-easing-back: cubic-bezier(0.68, -0.55, 0.27, 1.55);
139
+ /******************
140
+ Contrast variables
141
+ ******************/
142
+ --tt-accent-contrast: 8%;
143
+ --tt-destructive-contrast: 8%;
144
+ --tt-foreground-contrast: 8%;
145
+ }
146
+ :root,
147
+ :root *,
148
+ :root ::before,
149
+ :root ::after {
150
+ box-sizing: border-box;
151
+ transition: none var(--tt-transition-duration-default) var(--tt-transition-easing-default);
152
+ }
2
153
 
3
- /* =====================
4
- Editor-specific Variables
5
- ===================== */
6
- .notra-editor {
7
- overflow: auto;
8
-
9
- --notra-cursor-color: rgba(98, 41, 255, 1);
10
- --notra-selection-color: rgba(157, 138, 255, 0.2);
11
- --notra-placeholder-color: rgba(40, 44, 51, 0.42);
12
-
13
- /* Toolbar design tokens (from Tiptap simple-next) */
14
- --white: rgba(255, 255, 255, 1);
15
- --black: rgba(14, 14, 17, 1);
16
- --transparent: rgba(255, 255, 255, 0);
17
-
18
- /* Gray alpha scale (light mode) */
19
- --tt-gray-light-a-50: rgba(56, 56, 56, 0.04);
20
- --tt-gray-light-a-100: rgba(15, 22, 36, 0.05);
21
- --tt-gray-light-a-200: rgba(37, 39, 45, 0.1);
22
- --tt-gray-light-a-300: rgba(47, 50, 55, 0.2);
23
- --tt-gray-light-a-400: rgba(40, 44, 51, 0.42);
24
- --tt-gray-light-a-500: rgba(52, 55, 60, 0.64);
25
- --tt-gray-light-a-600: rgba(36, 39, 46, 0.78);
26
- --tt-gray-light-a-700: rgba(35, 37, 42, 0.87);
27
- --tt-gray-light-a-800: rgba(30, 32, 36, 0.95);
28
- --tt-gray-light-a-900: rgba(29, 30, 32, 0.98);
29
-
30
- /* Gray alpha scale (dark mode) */
31
- --tt-gray-dark-a-50: rgba(232, 232, 253, 0.05);
32
- --tt-gray-dark-a-100: rgba(231, 231, 243, 0.07);
33
- --tt-gray-dark-a-200: rgba(238, 238, 246, 0.11);
34
- --tt-gray-dark-a-300: rgba(239, 239, 245, 0.22);
35
- --tt-gray-dark-a-400: rgba(244, 244, 255, 0.37);
36
- --tt-gray-dark-a-500: rgba(236, 238, 253, 0.5);
37
- --tt-gray-dark-a-600: rgba(247, 247, 253, 0.64);
38
- --tt-gray-dark-a-700: rgba(251, 251, 254, 0.75);
39
- --tt-gray-dark-a-800: rgba(253, 253, 253, 0.88);
40
- --tt-gray-dark-a-900: rgba(255, 255, 255, 0.96);
41
-
42
- /* Gray solid scale (light mode) */
43
- --tt-gray-light-200: rgba(234, 234, 235, 1);
44
-
45
- /* Gray solid scale (dark mode) */
46
- --tt-gray-dark-50: rgba(25, 25, 26, 1);
47
- --tt-gray-dark-200: rgba(45, 45, 47, 1);
48
-
49
- /* Radius & transitions */
50
- --tt-radius-lg: 0.75rem;
51
- --tt-transition-duration-default: 0.2s;
52
- --tt-transition-easing-default: cubic-bezier(0.46, 0.03, 0.52, 0.96);
53
-
54
- /* Toolbar */
55
- --tt-toolbar-height: 2.75rem;
56
- --tt-toolbar-bg-color: var(--white);
57
- --tt-toolbar-border-color: var(--tt-gray-light-a-100);
58
-
59
- /* Ghost button colors */
60
- --tt-button-default-bg-color: var(--transparent);
61
- --tt-button-hover-bg-color: var(--tt-gray-light-200);
62
- --tt-button-disabled-bg-color: var(--transparent);
63
- --tt-button-default-icon-color: var(--tt-gray-light-a-600);
64
- --tt-button-hover-icon-color: var(--tt-gray-light-a-900);
65
- --tt-button-disabled-icon-color: var(--tt-gray-light-a-400);
66
-
67
- /* Separator */
68
- --tt-separator-color: var(--tt-gray-light-a-200);
154
+ :root {
155
+ /**************************************************
156
+ Global colors
157
+ **************************************************/
158
+ /* Global colors - Light mode */
159
+ --tt-bg-color: var(--white);
160
+ --tt-border-color: var(--tt-gray-light-a-200);
161
+ --tt-border-color-tint: var(--tt-gray-light-a-100);
162
+ --tt-sidebar-bg-color: var(--tt-gray-light-100);
163
+ --tt-scrollbar-color: var(--tt-gray-light-a-200);
164
+ --tt-cursor-color: var(--tt-brand-color-500);
165
+ --tt-selection-color: rgba(157, 138, 255, 0.2);
166
+ --tt-card-bg-color: var(--white);
167
+ --tt-card-border-color: var(--tt-gray-light-a-100);
69
168
  }
70
169
 
71
- /* =====================
72
- Editor Layout
73
- ===================== */
74
- .notra-editor .notra-editor-content {
75
- max-width: 648px;
76
- width: 100%;
77
- margin: 0 auto;
78
- height: 100%;
79
- display: flex;
80
- flex-direction: column;
81
- flex: 1;
170
+ /* Global colors - Dark mode */
171
+ .dark {
172
+ --tt-bg-color: var(--black);
173
+ --tt-border-color: var(--tt-gray-dark-a-200);
174
+ --tt-border-color-tint: var(--tt-gray-dark-a-100);
175
+ --tt-sidebar-bg-color: var(--tt-gray-dark-100);
176
+ --tt-scrollbar-color: var(--tt-gray-dark-a-200);
177
+ --tt-cursor-color: var(--tt-brand-color-400);
178
+ --tt-selection-color: rgba(122, 82, 255, 0.2);
179
+ --tt-card-bg-color: var(--tt-gray-dark-50);
180
+ --tt-card-border-color: var(--tt-gray-dark-a-50);
181
+ --tt-shadow-elevated-md:
182
+ 0px 16px 48px 0px rgba(0, 0, 0, 0.5), 0px 12px 24px 0px rgba(0, 0, 0, 0.24),
183
+ 0px 6px 8px 0px rgba(0, 0, 0, 0.22), 0px 2px 3px 0px rgba(0, 0, 0, 0.12);
184
+ }
185
+
186
+ /* Text colors */
187
+ :root {
188
+ --tt-color-text-gray: hsl(45, 2%, 46%);
189
+ --tt-color-text-brown: hsl(19, 31%, 47%);
190
+ --tt-color-text-orange: hsl(30, 89%, 45%);
191
+ --tt-color-text-yellow: hsl(38, 62%, 49%);
192
+ --tt-color-text-green: hsl(148, 32%, 39%);
193
+ --tt-color-text-blue: hsl(202, 54%, 43%);
194
+ --tt-color-text-purple: hsl(274, 32%, 54%);
195
+ --tt-color-text-pink: hsl(328, 49%, 53%);
196
+ --tt-color-text-red: hsl(2, 62%, 55%);
197
+ --tt-color-text-gray-contrast: hsla(39, 26%, 26%, 0.15);
198
+ --tt-color-text-brown-contrast: hsla(18, 43%, 69%, 0.35);
199
+ --tt-color-text-orange-contrast: hsla(24, 73%, 55%, 0.27);
200
+ --tt-color-text-yellow-contrast: hsla(44, 82%, 59%, 0.39);
201
+ --tt-color-text-green-contrast: hsla(126, 29%, 60%, 0.27);
202
+ --tt-color-text-blue-contrast: hsla(202, 54%, 59%, 0.27);
203
+ --tt-color-text-purple-contrast: hsla(274, 37%, 64%, 0.27);
204
+ --tt-color-text-pink-contrast: hsla(331, 60%, 71%, 0.27);
205
+ --tt-color-text-red-contrast: hsla(8, 79%, 79%, 0.4);
206
+ }
207
+
208
+ .dark {
209
+ --tt-color-text-gray: hsl(0, 0%, 61%);
210
+ --tt-color-text-brown: hsl(18, 35%, 58%);
211
+ --tt-color-text-orange: hsl(25, 53%, 53%);
212
+ --tt-color-text-yellow: hsl(36, 54%, 55%);
213
+ --tt-color-text-green: hsl(145, 32%, 47%);
214
+ --tt-color-text-blue: hsl(202, 64%, 52%);
215
+ --tt-color-text-purple: hsl(270, 55%, 62%);
216
+ --tt-color-text-pink: hsl(329, 57%, 58%);
217
+ --tt-color-text-red: hsl(1, 69%, 60%);
218
+ --tt-color-text-gray-contrast: hsla(0, 0%, 100%, 0.09);
219
+ --tt-color-text-brown-contrast: hsla(17, 45%, 50%, 0.25);
220
+ --tt-color-text-orange-contrast: hsla(27, 82%, 53%, 0.2);
221
+ --tt-color-text-yellow-contrast: hsla(35, 49%, 47%, 0.2);
222
+ --tt-color-text-green-contrast: hsla(151, 55%, 39%, 0.2);
223
+ --tt-color-text-blue-contrast: hsla(202, 54%, 43%, 0.2);
224
+ --tt-color-text-purple-contrast: hsla(271, 56%, 60%, 0.18);
225
+ --tt-color-text-pink-contrast: hsla(331, 67%, 58%, 0.22);
226
+ --tt-color-text-red-contrast: hsla(0, 67%, 60%, 0.25);
227
+ }
228
+
229
+ /* Highlight colors */
230
+ :root {
231
+ --tt-color-highlight-yellow: #fef9c3;
232
+ --tt-color-highlight-green: #dcfce7;
233
+ --tt-color-highlight-blue: #e0f2fe;
234
+ --tt-color-highlight-purple: #f3e8ff;
235
+ --tt-color-highlight-red: #ffe4e6;
236
+ --tt-color-highlight-gray: rgb(248, 248, 247);
237
+ --tt-color-highlight-brown: rgb(244, 238, 238);
238
+ --tt-color-highlight-orange: rgb(251, 236, 221);
239
+ --tt-color-highlight-pink: rgb(252, 241, 246);
240
+ --tt-color-highlight-yellow-contrast: #fbe604;
241
+ --tt-color-highlight-green-contrast: #c7fad8;
242
+ --tt-color-highlight-blue-contrast: #ceeafd;
243
+ --tt-color-highlight-purple-contrast: #e4ccff;
244
+ --tt-color-highlight-red-contrast: #ffccd0;
245
+ --tt-color-highlight-gray-contrast: rgba(84, 72, 49, 0.15);
246
+ --tt-color-highlight-brown-contrast: rgba(210, 162, 141, 0.35);
247
+ --tt-color-highlight-orange-contrast: rgba(224, 124, 57, 0.27);
248
+ --tt-color-highlight-pink-contrast: rgba(225, 136, 179, 0.27);
249
+ }
250
+
251
+ .dark {
252
+ --tt-color-highlight-yellow: #6b6524;
253
+ --tt-color-highlight-green: #509568;
254
+ --tt-color-highlight-blue: #6e92aa;
255
+ --tt-color-highlight-purple: #583e74;
256
+ --tt-color-highlight-red: #743e42;
257
+ --tt-color-highlight-gray: rgb(47, 47, 47);
258
+ --tt-color-highlight-brown: rgb(74, 50, 40);
259
+ --tt-color-highlight-orange: rgb(92, 59, 35);
260
+ --tt-color-highlight-pink: rgb(78, 44, 60);
261
+ --tt-color-highlight-yellow-contrast: #58531e;
262
+ --tt-color-highlight-green-contrast: #47855d;
263
+ --tt-color-highlight-blue-contrast: #5e86a1;
264
+ --tt-color-highlight-purple-contrast: #4c3564;
265
+ --tt-color-highlight-red-contrast: #643539;
266
+ --tt-color-highlight-gray-contrast: rgba(255, 255, 255, 0.094);
267
+ --tt-color-highlight-brown-contrast: rgba(184, 101, 69, 0.25);
268
+ --tt-color-highlight-orange-contrast: rgba(233, 126, 37, 0.2);
269
+ --tt-color-highlight-pink-contrast: rgba(220, 76, 145, 0.22);
270
+ }
271
+
272
+ @keyframes fadeIn {
273
+ from {
274
+ opacity: 0;
275
+ }
276
+ to {
277
+ opacity: 1;
278
+ }
279
+ }
280
+ @keyframes fadeOut {
281
+ from {
282
+ opacity: 1;
283
+ }
284
+ to {
285
+ opacity: 0;
286
+ }
287
+ }
288
+ @keyframes zoomIn {
289
+ from {
290
+ transform: scale(0.95);
291
+ }
292
+ to {
293
+ transform: scale(1);
294
+ }
295
+ }
296
+ @keyframes zoomOut {
297
+ from {
298
+ transform: scale(1);
299
+ }
300
+ to {
301
+ transform: scale(0.95);
302
+ }
303
+ }
304
+ @keyframes zoom {
305
+ 0% {
306
+ opacity: 0;
307
+ transform: scale(0.95);
308
+ }
309
+ 100% {
310
+ opacity: 1;
311
+ transform: scale(1);
312
+ }
313
+ }
314
+ @keyframes slideFromTop {
315
+ from {
316
+ transform: translateY(-0.5rem);
317
+ }
318
+ to {
319
+ transform: translateY(0);
320
+ }
321
+ }
322
+ @keyframes slideFromRight {
323
+ from {
324
+ transform: translateX(0.5rem);
325
+ }
326
+ to {
327
+ transform: translateX(0);
328
+ }
329
+ }
330
+ @keyframes slideFromLeft {
331
+ from {
332
+ transform: translateX(-0.5rem);
333
+ }
334
+ to {
335
+ transform: translateX(0);
336
+ }
337
+ }
338
+ @keyframes slideFromBottom {
339
+ from {
340
+ transform: translateY(0.5rem);
341
+ }
342
+ to {
343
+ transform: translateY(0);
344
+ }
345
+ }
346
+ @keyframes spin {
347
+ from {
348
+ transform: rotate(0deg);
349
+ }
350
+ to {
351
+ transform: rotate(360deg);
352
+ }
353
+ }
354
+ .notra-editor-wrapper {
355
+ --tt-toolbar-height: 44px;
356
+ --tt-theme-text: var(--tt-gray-light-900);
357
+ }
358
+ .dark .notra-editor-wrapper {
359
+ --tt-theme-text: var(--tt-gray-dark-900);
360
+ }
361
+
362
+ .notra-editor-wrapper {
363
+ font-family: "Inter", sans-serif;
364
+ color: var(--tt-theme-text);
365
+ font-optical-sizing: auto;
366
+ font-weight: 400;
367
+ font-style: normal;
368
+ padding: 0;
369
+ overscroll-behavior-y: none;
370
+ }
371
+
372
+ .notra-editor-wrapper {
373
+ overscroll-behavior-x: none;
374
+ }
375
+
376
+ .notra-editor-wrapper {
377
+ height: 100%;
378
+ background-color: var(--tt-bg-color);
379
+ }
380
+
381
+ ::-webkit-scrollbar {
382
+ width: 0.25rem;
383
+ }
384
+
385
+ * {
386
+ scrollbar-width: thin;
387
+ scrollbar-color: var(--tt-scrollbar-color) transparent;
388
+ }
389
+
390
+ ::-webkit-scrollbar-thumb {
391
+ background-color: var(--tt-scrollbar-color);
392
+ border-radius: 9999px;
393
+ }
394
+
395
+ ::-webkit-scrollbar-track {
396
+ background: transparent;
397
+ }
398
+
399
+ .notra-prose {
400
+ font-family: "DM Sans", sans-serif;
401
+ }
402
+
403
+ .notra-editor-wrapper {
404
+ width: 100vw;
405
+ height: 100vh;
406
+ overflow: auto;
407
+ }
408
+
409
+ .notra-editor-content {
410
+ max-width: 648px;
411
+ width: 100%;
412
+ margin: 0 auto;
413
+ height: 100%;
414
+ display: flex;
415
+ flex-direction: column;
416
+ flex: 1;
82
417
  }
83
418
 
84
- .notra-editor .notra-editor-content .tiptap.ProseMirror {
85
- flex: 1;
86
- padding: 3rem 3rem 30vh;
419
+ .notra-editor-content .notra-prose {
420
+ flex: 1;
421
+ padding: 3rem 3rem 30vh;
87
422
  }
88
423
 
89
424
  @media screen and (max-width: 480px) {
90
- .notra-editor .notra-editor-content .tiptap.ProseMirror {
91
- padding: 1rem 1.5rem 30vh;
92
- }
425
+ .notra-editor-content .notra-prose {
426
+ padding: 1rem 1.5rem 30vh;
427
+ }
428
+ }
429
+ .notra-prose {
430
+ --tt-collaboration-carets-label: var(--tt-gray-light-900);
431
+ --link-text-color: var(--tt-brand-color-500);
432
+ --thread-text: var(--tt-gray-light-900);
433
+ --placeholder-color: var(--tt-gray-light-a-400);
434
+ --thread-bg-color: var(--tt-color-yellow-inc-2);
435
+ --tiptap-ai-insertion-color: var(--tt-brand-color-600);
436
+ }
437
+ .dark .notra-prose {
438
+ --tt-collaboration-carets-label: var(--tt-gray-dark-100);
439
+ --link-text-color: var(--tt-brand-color-400);
440
+ --thread-text: var(--tt-gray-dark-900);
441
+ --placeholder-color: var(--tt-gray-dark-a-400);
442
+ --thread-bg-color: var(--tt-color-yellow-dec-2);
443
+ --tiptap-ai-insertion-color: var(--tt-brand-color-400);
444
+ }
445
+
446
+ /* Ensure each top-level node has relative positioning
447
+ so absolutely positioned placeholders work correctly */
448
+ .notra-prose > * {
449
+ position: relative;
93
450
  }
94
451
 
95
452
  /* =====================
96
- Editor Container
97
- ===================== */
98
- .notra-editor .tiptap.ProseMirror {
99
- white-space: pre-wrap;
100
- outline: none;
101
- caret-color: var(--notra-cursor-color);
453
+ CORE EDITOR STYLES
454
+ ===================== */
455
+ .notra-prose {
456
+ white-space: pre-wrap;
457
+ outline: none;
458
+ caret-color: var(--tt-cursor-color);
459
+ }
460
+ .notra-prose p:not(:first-child):not(td p):not(th p) {
461
+ font-size: 1rem;
462
+ line-height: 1.6;
463
+ font-weight: normal;
464
+ margin-top: 20px;
465
+ }
466
+ .notra-prose:not(.readonly):not(.ProseMirror-hideselection) ::selection {
467
+ background-color: var(--tt-selection-color);
468
+ }
469
+ .notra-prose:not(.readonly):not(.ProseMirror-hideselection) .selection::selection {
470
+ background: transparent;
471
+ }
472
+ .notra-prose .selection {
473
+ display: inline;
474
+ background-color: var(--tt-selection-color);
475
+ }
476
+ .notra-prose .ProseMirror-selectednode:not(img):not(pre):not(.react-renderer) {
477
+ border-radius: var(--tt-radius-md);
478
+ background-color: var(--tt-selection-color);
479
+ }
480
+ .notra-prose .ProseMirror-hideselection {
481
+ caret-color: transparent;
482
+ }
483
+ .notra-prose.resize-cursor {
484
+ cursor: ew-resize;
485
+ cursor: col-resize;
102
486
  }
103
487
 
104
488
  /* =====================
105
- Selection
106
- ===================== */
107
- .notra-editor .tiptap.ProseMirror ::selection {
108
- background-color: var(--notra-selection-color);
489
+ TEXT DECORATION
490
+ ===================== */
491
+ .notra-prose a span {
492
+ text-decoration: underline;
493
+ }
494
+ .notra-prose s span {
495
+ text-decoration: line-through;
496
+ }
497
+ .notra-prose u span {
498
+ text-decoration: underline;
499
+ }
500
+ .notra-prose .tiptap-ai-insertion {
501
+ color: var(--tiptap-ai-insertion-color);
109
502
  }
110
503
 
111
- .notra-editor .tiptap.ProseMirror .selection {
112
- display: inline;
113
- background-color: var(--notra-selection-color);
504
+ /* =====================
505
+ COLLABORATION
506
+ ===================== */
507
+ .notra-prose .collaboration-carets__caret {
508
+ border-right: 1px solid transparent;
509
+ border-left: 1px solid transparent;
510
+ pointer-events: none;
511
+ margin-left: -1px;
512
+ margin-right: -1px;
513
+ position: relative;
514
+ word-break: normal;
515
+ }
516
+ .notra-prose .collaboration-carets__label {
517
+ color: var(--tt-collaboration-carets-label);
518
+ border-radius: 0.25rem;
519
+ border-bottom-left-radius: 0;
520
+ font-size: 0.75rem;
521
+ font-weight: 600;
522
+ left: -1px;
523
+ line-height: 1;
524
+ padding: 0.125rem 0.375rem;
525
+ position: absolute;
526
+ top: -1.3em;
527
+ user-select: none;
528
+ white-space: nowrap;
114
529
  }
115
530
 
116
- .notra-editor .tiptap.ProseMirror .selection::selection {
117
- background: transparent;
531
+ /* =====================
532
+ EMOJI
533
+ ===================== */
534
+ .notra-prose [data-type=emoji] img {
535
+ display: inline-block;
536
+ width: 1.25em;
537
+ height: 1.25em;
538
+ cursor: text;
118
539
  }
119
540
 
120
- .notra-editor
121
- .tiptap.ProseMirror
122
- .ProseMirror-selectednode:not(img):not(pre):not(.react-renderer) {
123
- border-radius: var(--notra-radius);
124
- background-color: var(--notra-selection-color);
541
+ /* =====================
542
+ LINKS
543
+ ===================== */
544
+ .notra-prose a {
545
+ color: var(--link-text-color);
546
+ text-decoration: underline;
125
547
  }
126
548
 
127
549
  /* =====================
128
- Placeholder
129
- ===================== */
130
- .notra-editor .tiptap.ProseMirror > * {
131
- position: relative;
132
- }
133
-
134
- .notra-editor
135
- .tiptap.ProseMirror
136
- .is-empty[data-placeholder]:has(
137
- > .ProseMirror-trailingBreak:only-child
138
- )::before {
139
- content: attr(data-placeholder);
140
- pointer-events: none;
141
- height: 0;
142
- position: absolute;
143
- width: 100%;
144
- text-align: inherit;
145
- left: 0;
146
- right: 0;
147
- color: var(--notra-placeholder-color);
550
+ MENTION
551
+ ===================== */
552
+ .notra-prose [data-type=mention] {
553
+ display: inline-block;
554
+ color: var(--tt-brand-color-500);
148
555
  }
149
556
 
150
557
  /* =====================
151
- Drop Cursor
152
- ===================== */
153
- .notra-editor .prosemirror-dropcursor-block,
154
- .notra-editor .prosemirror-dropcursor-inline {
155
- background: var(--notra-cursor-color) !important;
156
- border-radius: 0.25rem;
157
- margin-left: -1px;
158
- margin-right: -1px;
159
- width: 100%;
160
- height: 0.188rem;
558
+ THREADS
559
+ ===================== */
560
+ .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--inline {
561
+ transition: color 0.2s ease-in-out, background-color 0.2s ease-in-out;
562
+ color: var(--thread-text);
563
+ border-bottom: 2px dashed var(--tt-color-yellow-base);
564
+ font-weight: 600;
565
+ }
566
+ .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--inline.tiptap-thread--selected, .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--inline.tiptap-thread--hovered {
567
+ background-color: var(--thread-bg-color);
568
+ border-bottom-color: transparent;
569
+ }
570
+ .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--block:has(img) {
571
+ outline: 0.125rem solid var(--tt-color-yellow-base);
572
+ border-radius: var(--tt-radius-xs, 0.25rem);
573
+ overflow: hidden;
574
+ width: fit-content;
575
+ }
576
+ .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--block:has(img).tiptap-thread--selected {
577
+ outline-width: 0.25rem;
578
+ outline-color: var(--tt-color-yellow-base);
579
+ }
580
+ .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--block:has(img).tiptap-thread--hovered {
581
+ outline-width: 0.25rem;
582
+ }
583
+ .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--block:not(:has(img)) {
584
+ border-radius: 0.25rem;
585
+ border-bottom: 0.125rem dashed var(--tt-color-yellow-base);
586
+ border-top: 0.125rem dashed var(--tt-color-yellow-base);
587
+ outline: 0.25rem solid transparent;
588
+ }
589
+ .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--block:not(:has(img)).tiptap-thread--hovered, .notra-prose .tiptap-thread.tiptap-thread--unresolved.tiptap-thread--block:not(:has(img)).tiptap-thread--selected {
590
+ background-color: var(--tt-color-yellow-base);
591
+ outline-color: var(--tt-color-yellow-base);
592
+ }
593
+ .notra-prose .tiptap-thread.tiptap-thread--resolved.tiptap-thread--inline.tiptap-thread--selected {
594
+ background-color: var(--tt-color-yellow-base);
595
+ border-color: transparent;
596
+ opacity: 0.5;
597
+ }
598
+ .notra-prose .tiptap-thread.tiptap-thread--block:has(.react-renderer) {
599
+ margin-top: 3rem;
600
+ margin-bottom: 3rem;
161
601
  }
162
602
 
163
603
  /* =====================
164
- Toolbar
165
- ===================== */
166
- .notra-editor .tiptap-toolbar {
167
- display: flex;
168
- align-items: center;
169
- gap: 0.25rem;
604
+ PLACEHOLDER
605
+ ===================== */
606
+ .is-empty:not(.with-slash)[data-placeholder]:has(> .ProseMirror-trailingBreak:only-child)::before {
607
+ content: attr(data-placeholder);
170
608
  }
171
609
 
172
- .notra-editor .tiptap-toolbar[data-variant='fixed'] {
173
- position: sticky;
174
- top: 0;
175
- z-index: 50;
176
- width: 100%;
177
- min-height: var(--tt-toolbar-height);
178
- background: var(--tt-toolbar-bg-color);
179
- border-bottom: 1px solid var(--tt-toolbar-border-color);
180
- padding: 0 0.5rem;
181
- overflow-x: auto;
182
- overscroll-behavior-x: contain;
183
- -webkit-overflow-scrolling: touch;
184
- scrollbar-width: none;
185
- -ms-overflow-style: none;
610
+ .is-empty.with-slash[data-placeholder]:has(> .ProseMirror-trailingBreak:only-child)::before {
611
+ content: "Write, type '/' for commands…";
612
+ font-style: italic;
186
613
  }
187
614
 
188
- .notra-editor .tiptap-toolbar[data-variant='fixed']::-webkit-scrollbar {
189
- display: none;
615
+ .is-empty[data-placeholder]:has(> .ProseMirror-trailingBreak:only-child):before {
616
+ pointer-events: none;
617
+ height: 0;
618
+ position: absolute;
619
+ width: 100%;
620
+ text-align: inherit;
621
+ left: 0;
622
+ right: 0;
190
623
  }
191
624
 
192
- .notra-editor .tiptap-toolbar-group {
193
- display: flex;
194
- align-items: center;
195
- gap: 0.125rem;
625
+ .is-empty[data-placeholder]:has(> .ProseMirror-trailingBreak):before {
626
+ color: var(--placeholder-color);
196
627
  }
197
628
 
198
- .notra-editor .tiptap-toolbar-group:empty {
199
- display: none;
629
+ /* =====================
630
+ DROPCURSOR
631
+ ===================== */
632
+ .prosemirror-dropcursor-block,
633
+ .prosemirror-dropcursor-inline {
634
+ background: var(--tt-brand-color-400) !important;
635
+ border-radius: 0.25rem;
636
+ margin-left: -1px;
637
+ margin-right: -1px;
638
+ width: 100%;
639
+ height: 0.188rem;
640
+ cursor: grabbing;
200
641
  }
201
642
 
202
643
  /* =====================
203
- Separator
204
- ===================== */
205
- .notra-editor .tiptap-separator {
206
- flex-shrink: 0;
207
- background-color: var(--tt-separator-color);
644
+ INDENT
645
+ ===================== */
646
+ .notra-prose {
647
+ --tt-indent-unit: 24px;
648
+ }
649
+ .notra-prose [data-indent] {
650
+ transition: margin-left 0.2s ease-in-out;
651
+ margin-left: calc(var(--tt-indent-unit) * var(--tt-indent-level, 0));
208
652
  }
209
653
 
210
- .notra-editor .tiptap-separator[data-orientation='vertical'] {
211
- height: 1.5rem;
212
- width: 1px;
654
+ .notra-prose h1,
655
+ .notra-prose h2,
656
+ .notra-prose h3,
657
+ .notra-prose h4 {
658
+ position: relative;
659
+ color: inherit;
660
+ font-style: inherit;
661
+ }
662
+ .notra-prose > h1:first-child,
663
+ .notra-prose > h2:first-child,
664
+ .notra-prose > h3:first-child,
665
+ .notra-prose > h4:first-child,
666
+ .notra-prose > .ProseMirror-widget + h1,
667
+ .notra-prose > .ProseMirror-widget + h2,
668
+ .notra-prose > .ProseMirror-widget + h3,
669
+ .notra-prose > .ProseMirror-widget + h4 {
670
+ margin-top: 0;
671
+ }
672
+ .notra-prose h1 {
673
+ font-size: 1.5em;
674
+ font-weight: 700;
675
+ margin-top: 3em;
676
+ }
677
+ .notra-prose h2 {
678
+ font-size: 1.25em;
679
+ font-weight: 700;
680
+ margin-top: 2.5em;
681
+ }
682
+ .notra-prose h3 {
683
+ font-size: 1.125em;
684
+ font-weight: 600;
685
+ margin-top: 2em;
686
+ }
687
+ .notra-prose h4 {
688
+ font-size: 1em;
689
+ font-weight: 600;
690
+ margin-top: 2em;
213
691
  }
214
692
 
215
- .notra-editor .tiptap-separator[data-orientation='horizontal'] {
216
- height: 1px;
217
- width: 100%;
218
- margin: 0.5rem 0;
693
+ .notra-prose {
694
+ --tt-checklist-bg-color: var(--tt-gray-light-a-100);
695
+ --tt-checklist-bg-active-color: var(--tt-gray-light-a-900);
696
+ --tt-checklist-border-color: var(--tt-gray-light-a-200);
697
+ --tt-checklist-border-active-color: var(--tt-gray-light-a-900);
698
+ --tt-checklist-check-icon-color: var(--white);
699
+ --tt-checklist-text-active: var(--tt-gray-light-a-500);
700
+ }
701
+ .dark .notra-prose {
702
+ --tt-checklist-bg-color: var(--tt-gray-dark-a-100);
703
+ --tt-checklist-bg-active-color: var(--tt-gray-dark-a-900);
704
+ --tt-checklist-border-color: var(--tt-gray-dark-a-200);
705
+ --tt-checklist-border-active-color: var(--tt-gray-dark-a-900);
706
+ --tt-checklist-check-icon-color: var(--black);
707
+ --tt-checklist-text-active: var(--tt-gray-dark-a-500);
219
708
  }
220
709
 
221
710
  /* =====================
222
- Button
223
- ===================== */
224
- .notra-editor .tiptap-button {
225
- font-size: 0.875rem;
226
- font-weight: 500;
227
- line-height: 1.15;
228
- height: 2rem;
229
- min-width: 2rem;
230
- border: none;
231
- padding: 0.5rem;
232
- gap: 0.25rem;
233
- display: flex;
234
- align-items: center;
235
- justify-content: center;
236
- border-radius: var(--tt-radius-lg);
237
- cursor: pointer;
238
- background-color: var(--tt-button-default-bg-color);
239
- color: var(--tt-button-default-icon-color);
240
- transition-property: background-color, color, opacity;
241
- transition-duration: var(--tt-transition-duration-default);
242
- transition-timing-function: var(--tt-transition-easing-default);
243
- }
244
-
245
- .notra-editor .tiptap-button:focus-visible {
246
- outline: none;
247
- }
248
-
249
- .notra-editor .tiptap-button:hover:not([disabled]) {
250
- background-color: var(--tt-button-hover-bg-color);
251
- color: var(--tt-button-hover-icon-color);
252
- }
253
-
254
- .notra-editor .tiptap-button:disabled {
255
- background-color: var(--tt-button-disabled-bg-color);
256
- color: var(--tt-button-disabled-icon-color);
257
- cursor: default;
711
+ LISTS
712
+ ===================== */
713
+ .notra-prose ol,
714
+ .notra-prose ul {
715
+ margin-top: 1.5em;
716
+ margin-bottom: 1.5em;
717
+ padding-left: 1.5em;
718
+ }
719
+ .notra-prose ol:first-child,
720
+ .notra-prose ul:first-child {
721
+ margin-top: 0;
722
+ }
723
+ .notra-prose ol:last-child,
724
+ .notra-prose ul:last-child {
725
+ margin-bottom: 0;
726
+ }
727
+ .notra-prose ol ol,
728
+ .notra-prose ol ul,
729
+ .notra-prose ul ol,
730
+ .notra-prose ul ul {
731
+ margin-top: 0;
732
+ margin-bottom: 0;
733
+ }
734
+ .notra-prose li p {
735
+ margin-top: 0;
736
+ line-height: 1.6;
737
+ }
738
+ .notra-prose ol {
739
+ list-style: decimal;
740
+ }
741
+ .notra-prose ol ol {
742
+ list-style: lower-alpha;
743
+ }
744
+ .notra-prose ol ol ol {
745
+ list-style: lower-roman;
746
+ }
747
+ .notra-prose ol ol ol ol {
748
+ list-style: decimal;
749
+ }
750
+ .notra-prose ol ol ol ol ol {
751
+ list-style: lower-alpha;
752
+ }
753
+ .notra-prose ol ol ol ol ol ol {
754
+ list-style: lower-roman;
755
+ }
756
+ .notra-prose ol ol ol ol ol ol ol {
757
+ list-style: decimal;
758
+ }
759
+ .notra-prose ol ol ol ol ol ol ol ol {
760
+ list-style: lower-alpha;
761
+ }
762
+ .notra-prose ol ol ol ol ol ol ol ol ol {
763
+ list-style: lower-roman;
764
+ }
765
+ .notra-prose ul:not([data-type=taskList]) {
766
+ list-style: disc;
767
+ }
768
+ .notra-prose ul:not([data-type=taskList]) ul {
769
+ list-style: circle;
770
+ }
771
+ .notra-prose ul:not([data-type=taskList]) ul ul {
772
+ list-style: square;
773
+ }
774
+ .notra-prose ul:not([data-type=taskList]) ul ul ul {
775
+ list-style: disc;
776
+ }
777
+ .notra-prose ul:not([data-type=taskList]) ul ul ul ul {
778
+ list-style: circle;
779
+ }
780
+ .notra-prose ul:not([data-type=taskList]) ul ul ul ul ul {
781
+ list-style: square;
782
+ }
783
+ .notra-prose ul:not([data-type=taskList]) ul ul ul ul ul ul {
784
+ list-style: disc;
785
+ }
786
+ .notra-prose ul:not([data-type=taskList]) ul ul ul ul ul ul ul {
787
+ list-style: circle;
788
+ }
789
+ .notra-prose ul:not([data-type=taskList]) ul ul ul ul ul ul ul ul {
790
+ list-style: square;
791
+ }
792
+ .notra-prose ul[data-type=taskList] {
793
+ padding-left: 0.25em;
794
+ }
795
+ .notra-prose ul[data-type=taskList] li {
796
+ display: flex;
797
+ flex-direction: row;
798
+ align-items: flex-start;
799
+ }
800
+ .notra-prose ul[data-type=taskList] li:not(:has(> p:first-child)) {
801
+ list-style-type: none;
802
+ }
803
+ .notra-prose ul[data-type=taskList] li[data-checked=true] > div > p {
804
+ opacity: 0.5;
805
+ text-decoration: line-through;
806
+ }
807
+ .notra-prose ul[data-type=taskList] li[data-checked=true] > div > p span {
808
+ text-decoration: line-through;
809
+ }
810
+ .notra-prose ul[data-type=taskList] li label {
811
+ position: relative;
812
+ padding-top: 0.375rem;
813
+ padding-right: 0.5rem;
814
+ }
815
+ .notra-prose ul[data-type=taskList] li label input[type=checkbox] {
816
+ position: absolute;
817
+ opacity: 0;
818
+ width: 0;
819
+ height: 0;
820
+ }
821
+ .notra-prose ul[data-type=taskList] li label span {
822
+ display: block;
823
+ width: 1em;
824
+ height: 1em;
825
+ border: 1px solid var(--tt-checklist-border-color);
826
+ border-radius: var(--tt-radius-xs, 0.25rem);
827
+ position: relative;
828
+ cursor: pointer;
829
+ background-color: var(--tt-checklist-bg-color);
830
+ transition: background-color 80ms ease-out, border-color 80ms ease-out;
831
+ }
832
+ .notra-prose ul[data-type=taskList] li label span::before {
833
+ content: "";
834
+ position: absolute;
835
+ left: 50%;
836
+ top: 50%;
837
+ transform: translate(-50%, -50%);
838
+ width: 0.75em;
839
+ height: 0.75em;
840
+ background-color: var(--tt-checklist-check-icon-color);
841
+ opacity: 0;
842
+ -webkit-mask: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22currentColor%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21.4142%204.58579C22.1953%205.36683%2022.1953%206.63317%2021.4142%207.41421L10.4142%2018.4142C9.63317%2019.1953%208.36684%2019.1953%207.58579%2018.4142L2.58579%2013.4142C1.80474%2012.6332%201.80474%2011.3668%202.58579%2010.5858C3.36683%209.80474%204.63317%209.80474%205.41421%2010.5858L9%2014.1716L18.5858%204.58579C19.3668%203.80474%2020.6332%203.80474%2021.4142%204.58579Z%22%20fill%3D%22currentColor%22%2F%3E%3C%2Fsvg%3E") center/contain no-repeat;
843
+ mask: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22currentColor%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21.4142%204.58579C22.1953%205.36683%2022.1953%206.63317%2021.4142%207.41421L10.4142%2018.4142C9.63317%2019.1953%208.36684%2019.1953%207.58579%2018.4142L2.58579%2013.4142C1.80474%2012.6332%201.80474%2011.3668%202.58579%2010.5858C3.36683%209.80474%204.63317%209.80474%205.41421%2010.5858L9%2014.1716L18.5858%204.58579C19.3668%203.80474%2020.6332%203.80474%2021.4142%204.58579Z%22%20fill%3D%22currentColor%22%2F%3E%3C%2Fsvg%3E") center/contain no-repeat;
844
+ }
845
+ .notra-prose ul[data-type=taskList] li label input[type=checkbox]:checked + span {
846
+ background: var(--tt-checklist-bg-active-color);
847
+ border-color: var(--tt-checklist-border-active-color);
848
+ }
849
+ .notra-prose ul[data-type=taskList] li label input[type=checkbox]:checked + span::before {
850
+ opacity: 1;
851
+ }
852
+ .notra-prose ul[data-type=taskList] li div {
853
+ flex: 1 1 0%;
854
+ min-width: 0;
855
+ }
856
+
857
+ .notra-prose {
858
+ --blockquote-bg-color: var(--tt-gray-light-900);
859
+ }
860
+ .dark .notra-prose {
861
+ --blockquote-bg-color: var(--tt-gray-dark-900);
258
862
  }
259
863
 
260
864
  /* =====================
261
- Additional Variables
262
- ===================== */
263
- .notra-editor {
264
- --tt-brand-color-400: rgba(122, 82, 255, 1);
265
- --tt-brand-color-500: rgba(98, 41, 255, 1);
266
- --tt-shadow-elevated-md:
267
- 0px 16px 48px 0px rgba(17, 24, 39, 0.04),
268
- 0px 12px 24px 0px rgba(17, 24, 39, 0.04),
269
- 0px 6px 8px 0px rgba(17, 24, 39, 0.02),
270
- 0px 2px 3px 0px rgba(17, 24, 39, 0.02);
271
- --tt-radius-md: 0.5rem;
865
+ BLOCKQUOTE
866
+ ===================== */
867
+ .notra-prose blockquote {
868
+ position: relative;
869
+ padding-left: 1em;
870
+ padding-top: 0.375em;
871
+ padding-bottom: 0.375em;
872
+ margin: 1.5rem 0;
873
+ }
874
+ .notra-prose blockquote p {
875
+ margin-top: 0;
876
+ }
877
+ .notra-prose blockquote::before, .notra-prose blockquote.is-empty::before {
878
+ position: absolute;
879
+ bottom: 0;
880
+ left: 0;
881
+ top: 0;
882
+ height: 100%;
883
+ width: 0.25em;
884
+ background-color: var(--blockquote-bg-color);
885
+ content: "";
886
+ border-radius: 0;
887
+ }
888
+
889
+ .notra-prose {
890
+ --tt-inline-code-bg-color: var(--tt-gray-light-a-100);
891
+ --tt-inline-code-text-color: var(--tt-gray-light-a-700);
892
+ --tt-inline-code-border-color: var(--tt-gray-light-a-200);
893
+ --tt-codeblock-bg: var(--tt-gray-light-a-50);
894
+ --tt-codeblock-text: var(--tt-gray-light-a-800);
895
+ --tt-codeblock-border: var(--tt-gray-light-a-200);
896
+ }
897
+ .dark .notra-prose {
898
+ --tt-inline-code-bg-color: var(--tt-gray-dark-a-100);
899
+ --tt-inline-code-text-color: var(--tt-gray-dark-a-700);
900
+ --tt-inline-code-border-color: var(--tt-gray-dark-a-200);
901
+ --tt-codeblock-bg: var(--tt-gray-dark-a-50);
902
+ --tt-codeblock-text: var(--tt-gray-dark-a-800);
903
+ --tt-codeblock-border: var(--tt-gray-dark-a-200);
904
+ }
272
905
 
273
- /* Dropdown menu */
274
- --tt-dropdown-menu-bg-color: var(--white);
275
- --tt-dropdown-menu-text-color: var(--tt-gray-light-a-600);
906
+ /* =====================
907
+ CODE FORMATTING
908
+ ===================== */
909
+ .notra-prose code {
910
+ background-color: var(--tt-inline-code-bg-color);
911
+ color: var(--tt-inline-code-text-color);
912
+ border: 1px solid var(--tt-inline-code-border-color);
913
+ font-family: "JetBrains Mono NL", monospace;
914
+ font-size: 0.875em;
915
+ line-height: 1.4;
916
+ border-radius: 6px/0.375rem;
917
+ padding: 0.1em 0.2em;
918
+ }
919
+ .notra-prose pre {
920
+ background-color: var(--tt-codeblock-bg);
921
+ color: var(--tt-codeblock-text);
922
+ border: 1px solid var(--tt-codeblock-border);
923
+ margin-top: 1.5em;
924
+ margin-bottom: 1.5em;
925
+ padding: 1em;
926
+ font-size: 1rem;
927
+ border-radius: 6px/0.375rem;
928
+ }
929
+ .notra-prose pre code {
930
+ background-color: transparent;
931
+ border: none;
932
+ border-radius: 0;
933
+ -webkit-text-fill-color: inherit;
934
+ color: inherit;
276
935
  }
277
936
 
278
937
  /* =====================
279
- Button Active State
938
+ Atom One Light (default)
280
939
  ===================== */
281
- .notra-editor .tiptap-button[data-active-state='on'] {
282
- background-color: var(--tt-gray-light-a-100);
283
- color: var(--tt-brand-color-500);
940
+ .notra-prose .hljs {
941
+ color: #383a42;
942
+ background: #fafafa;
943
+ }
944
+
945
+ .notra-prose .hljs-comment,
946
+ .notra-prose .hljs-quote {
947
+ color: #a0a1a7;
948
+ font-style: italic;
949
+ }
950
+
951
+ .notra-prose .hljs-doctag,
952
+ .notra-prose .hljs-formula,
953
+ .notra-prose .hljs-keyword {
954
+ color: #a626a4;
955
+ }
956
+
957
+ .notra-prose .hljs-deletion,
958
+ .notra-prose .hljs-name,
959
+ .notra-prose .hljs-section,
960
+ .notra-prose .hljs-selector-tag,
961
+ .notra-prose .hljs-subst {
962
+ color: #e45649;
963
+ }
964
+
965
+ .notra-prose .hljs-literal {
966
+ color: #0184bb;
967
+ }
968
+
969
+ .notra-prose .hljs-addition,
970
+ .notra-prose .hljs-attribute,
971
+ .notra-prose .hljs-meta .hljs-string,
972
+ .notra-prose .hljs-regexp,
973
+ .notra-prose .hljs-string {
974
+ color: #50a14f;
975
+ }
976
+
977
+ .notra-prose .hljs-built_in,
978
+ .notra-prose .hljs-class .hljs-title,
979
+ .notra-prose .hljs-title.class_ {
980
+ color: #c18401;
981
+ }
982
+
983
+ .notra-prose .hljs-attr,
984
+ .notra-prose .hljs-number,
985
+ .notra-prose .hljs-selector-attr,
986
+ .notra-prose .hljs-selector-class,
987
+ .notra-prose .hljs-selector-pseudo,
988
+ .notra-prose .hljs-template-variable,
989
+ .notra-prose .hljs-type,
990
+ .notra-prose .hljs-variable {
991
+ color: #986801;
992
+ }
993
+
994
+ .notra-prose .hljs-bullet,
995
+ .notra-prose .hljs-link,
996
+ .notra-prose .hljs-meta,
997
+ .notra-prose .hljs-selector-id,
998
+ .notra-prose .hljs-symbol,
999
+ .notra-prose .hljs-title {
1000
+ color: #4078f2;
1001
+ }
1002
+
1003
+ .notra-prose .hljs-emphasis {
1004
+ font-style: italic;
1005
+ }
1006
+
1007
+ .notra-prose .hljs-strong {
1008
+ font-weight: bold;
284
1009
  }
285
1010
 
286
- .notra-editor .tiptap-button[data-active-state='on']:hover:not([disabled]) {
287
- background-color: var(--tt-gray-light-200);
1011
+ .notra-prose .hljs-link {
1012
+ text-decoration: underline;
288
1013
  }
289
1014
 
290
1015
  /* =====================
291
- Button Extras
1016
+ Atom One Dark (.dark override)
292
1017
  ===================== */
293
- .notra-editor .tiptap-button-dropdown-arrows {
294
- width: 0.75rem;
295
- height: 0.75rem;
296
- color: var(--tt-gray-light-a-600);
1018
+ .dark .notra-prose .hljs {
1019
+ color: #abb2bf;
1020
+ background: #282c34;
1021
+ }
1022
+
1023
+ .dark .notra-prose .hljs-comment,
1024
+ .dark .notra-prose .hljs-quote {
1025
+ color: #5c6370;
1026
+ font-style: italic;
297
1027
  }
298
1028
 
299
- .notra-editor .tiptap-button-text {
300
- padding: 0 0.125rem;
1029
+ .dark .notra-prose .hljs-doctag,
1030
+ .dark .notra-prose .hljs-formula,
1031
+ .dark .notra-prose .hljs-keyword {
1032
+ color: #c678dd;
1033
+ }
1034
+
1035
+ .dark .notra-prose .hljs-deletion,
1036
+ .dark .notra-prose .hljs-name,
1037
+ .dark .notra-prose .hljs-section,
1038
+ .dark .notra-prose .hljs-selector-tag,
1039
+ .dark .notra-prose .hljs-subst {
1040
+ color: #e06c75;
1041
+ }
1042
+
1043
+ .dark .notra-prose .hljs-literal {
1044
+ color: #56b6c2;
1045
+ }
1046
+
1047
+ .dark .notra-prose .hljs-addition,
1048
+ .dark .notra-prose .hljs-attribute,
1049
+ .dark .notra-prose .hljs-meta .hljs-string,
1050
+ .dark .notra-prose .hljs-regexp,
1051
+ .dark .notra-prose .hljs-string {
1052
+ color: #98c379;
1053
+ }
1054
+
1055
+ .dark .notra-prose .hljs-built_in,
1056
+ .dark .notra-prose .hljs-class .hljs-title,
1057
+ .dark .notra-prose .hljs-title.class_ {
1058
+ color: #e6c07b;
1059
+ }
1060
+
1061
+ .dark .notra-prose .hljs-attr,
1062
+ .dark .notra-prose .hljs-number,
1063
+ .dark .notra-prose .hljs-selector-attr,
1064
+ .dark .notra-prose .hljs-selector-class,
1065
+ .dark .notra-prose .hljs-selector-pseudo,
1066
+ .dark .notra-prose .hljs-template-variable,
1067
+ .dark .notra-prose .hljs-type,
1068
+ .dark .notra-prose .hljs-variable {
1069
+ color: #d19a66;
1070
+ }
1071
+
1072
+ .dark .notra-prose .hljs-bullet,
1073
+ .dark .notra-prose .hljs-link,
1074
+ .dark .notra-prose .hljs-meta,
1075
+ .dark .notra-prose .hljs-selector-id,
1076
+ .dark .notra-prose .hljs-symbol,
1077
+ .dark .notra-prose .hljs-title {
1078
+ color: #61aeee;
1079
+ }
1080
+
1081
+ .notra-prose {
1082
+ --horizontal-rule-color: var(--tt-gray-light-a-200);
1083
+ }
1084
+ .dark .notra-prose {
1085
+ --horizontal-rule-color: var(--tt-gray-dark-a-200);
301
1086
  }
302
1087
 
303
1088
  /* =====================
1089
+ HORIZONTAL RULE
1090
+ ===================== */
1091
+ .notra-prose hr {
1092
+ border: none;
1093
+ height: 1px;
1094
+ background-color: var(--horizontal-rule-color);
1095
+ }
1096
+ .notra-prose [data-type=horizontalRule] {
1097
+ margin-top: 2.25em;
1098
+ margin-bottom: 2.25em;
1099
+ padding-top: 0.75rem;
1100
+ padding-bottom: 0.75rem;
1101
+ }
1102
+
1103
+ .notra-prose img {
1104
+ max-width: 100%;
1105
+ height: auto;
1106
+ display: block;
1107
+ }
1108
+ .notra-prose p > img {
1109
+ display: inline-block;
1110
+ }
1111
+ .notra-prose > img:not([data-type=emoji] img) {
1112
+ margin: 2rem 0;
1113
+ outline: 0.125rem solid transparent;
1114
+ border-radius: var(--tt-radius-xs, 0.25rem);
1115
+ }
1116
+ .notra-prose img:not([data-type=emoji] img).ProseMirror-selectednode {
1117
+ outline-color: var(--tt-brand-color-500);
1118
+ }
1119
+ .notra-prose .tiptap-thread:has(> img) {
1120
+ margin: 2rem 0;
1121
+ }
1122
+ .notra-prose .tiptap-thread:has(> img) img {
1123
+ outline: 0.125rem solid transparent;
1124
+ border-radius: var(--tt-radius-xs, 0.25rem);
1125
+ }
1126
+ .notra-prose .tiptap-thread img {
1127
+ margin: 0;
1128
+ }
1129
+
1130
+ :root {
1131
+ --tiptap-image-upload-active: var(--tt-brand-color-500);
1132
+ --tiptap-image-upload-progress-bg: var(--tt-brand-color-50);
1133
+ --tiptap-image-upload-icon-bg: var(--tt-brand-color-500);
1134
+ --tiptap-image-upload-text-color: var(--tt-gray-light-a-700);
1135
+ --tiptap-image-upload-subtext-color: var(--tt-gray-light-a-400);
1136
+ --tiptap-image-upload-border: var(--tt-gray-light-a-300);
1137
+ --tiptap-image-upload-border-hover: var(--tt-gray-light-a-400);
1138
+ --tiptap-image-upload-border-active: var(--tt-brand-color-500);
1139
+ --tiptap-image-upload-icon-doc-bg: var(--tt-gray-light-a-200);
1140
+ --tiptap-image-upload-icon-doc-border: var(--tt-gray-light-300);
1141
+ --tiptap-image-upload-icon-color: var(--white);
1142
+ }
1143
+
1144
+ .dark {
1145
+ --tiptap-image-upload-active: var(--tt-brand-color-400);
1146
+ --tiptap-image-upload-progress-bg: var(--tt-brand-color-900);
1147
+ --tiptap-image-upload-icon-bg: var(--tt-brand-color-400);
1148
+ --tiptap-image-upload-text-color: var(--tt-gray-dark-a-700);
1149
+ --tiptap-image-upload-subtext-color: var(--tt-gray-dark-a-400);
1150
+ --tiptap-image-upload-border: var(--tt-gray-dark-a-300);
1151
+ --tiptap-image-upload-border-hover: var(--tt-gray-dark-a-400);
1152
+ --tiptap-image-upload-border-active: var(--tt-brand-color-400);
1153
+ --tiptap-image-upload-icon-doc-bg: var(--tt-gray-dark-a-200);
1154
+ --tiptap-image-upload-icon-doc-border: var(--tt-gray-dark-300);
1155
+ --tiptap-image-upload-icon-color: var(--black);
1156
+ }
1157
+
1158
+ .tiptap-image-upload {
1159
+ margin: 2rem 0;
1160
+ }
1161
+ .tiptap-image-upload input[type=file] {
1162
+ display: none;
1163
+ }
1164
+ .tiptap-image-upload .tiptap-image-upload-dropzone {
1165
+ position: relative;
1166
+ width: 3.125rem;
1167
+ height: 3.75rem;
1168
+ display: inline-flex;
1169
+ align-items: flex-start;
1170
+ justify-content: center;
1171
+ -webkit-user-select: none; /* Safari */
1172
+ -ms-user-select: none; /* IE 10 and IE 11 */
1173
+ user-select: none;
1174
+ }
1175
+ .tiptap-image-upload .tiptap-image-upload-icon-container {
1176
+ position: absolute;
1177
+ width: 1.75rem;
1178
+ height: 1.75rem;
1179
+ bottom: 0;
1180
+ right: 0;
1181
+ background-color: var(--tiptap-image-upload-icon-bg);
1182
+ border-radius: var(--tt-radius-lg, 0.75rem);
1183
+ display: flex;
1184
+ align-items: center;
1185
+ justify-content: center;
1186
+ }
1187
+ .tiptap-image-upload .tiptap-image-upload-icon {
1188
+ width: 0.875rem;
1189
+ height: 0.875rem;
1190
+ color: var(--tiptap-image-upload-icon-color);
1191
+ }
1192
+ .tiptap-image-upload .tiptap-image-upload-dropzone-rect-primary {
1193
+ color: var(--tiptap-image-upload-icon-doc-bg);
1194
+ position: absolute;
1195
+ }
1196
+ .tiptap-image-upload .tiptap-image-upload-dropzone-rect-secondary {
1197
+ position: absolute;
1198
+ top: 0;
1199
+ right: 0.25rem;
1200
+ bottom: 0;
1201
+ color: var(--tiptap-image-upload-icon-doc-border);
1202
+ }
1203
+ .tiptap-image-upload .tiptap-image-upload-text {
1204
+ color: var(--tiptap-image-upload-text-color);
1205
+ font-weight: 500;
1206
+ font-size: 0.875rem;
1207
+ line-height: normal;
1208
+ }
1209
+ .tiptap-image-upload .tiptap-image-upload-text em {
1210
+ font-style: normal;
1211
+ text-decoration: underline;
1212
+ }
1213
+ .tiptap-image-upload .tiptap-image-upload-subtext {
1214
+ color: var(--tiptap-image-upload-subtext-color);
1215
+ font-weight: 600;
1216
+ line-height: normal;
1217
+ font-size: 0.75rem;
1218
+ }
1219
+ .tiptap-image-upload .tiptap-image-upload-drag-area {
1220
+ padding: 2rem 1.5rem;
1221
+ border: 1.5px dashed var(--tiptap-image-upload-border);
1222
+ border-radius: var(--tt-radius-md, 0.5rem);
1223
+ text-align: center;
1224
+ cursor: pointer;
1225
+ position: relative;
1226
+ overflow: hidden;
1227
+ transition: all 0.2s ease;
1228
+ }
1229
+ .tiptap-image-upload .tiptap-image-upload-drag-area:hover {
1230
+ border-color: var(--tiptap-image-upload-border-hover);
1231
+ }
1232
+ .tiptap-image-upload .tiptap-image-upload-drag-area.drag-active {
1233
+ border-color: var(--tiptap-image-upload-border-active);
1234
+ background-color: rgba(var(--tiptap-image-upload-active-rgb, 0, 123, 255), 0.05);
1235
+ }
1236
+ .tiptap-image-upload .tiptap-image-upload-drag-area.drag-over {
1237
+ border-color: var(--tiptap-image-upload-border-active);
1238
+ background-color: rgba(var(--tiptap-image-upload-active-rgb, 0, 123, 255), 0.1);
1239
+ }
1240
+ .tiptap-image-upload .tiptap-image-upload-content {
1241
+ display: flex;
1242
+ align-items: center;
1243
+ justify-content: center;
1244
+ flex-direction: column;
1245
+ gap: 0.25rem;
1246
+ -webkit-user-select: none; /* Safari */
1247
+ -ms-user-select: none; /* IE 10 and IE 11 */
1248
+ user-select: none;
1249
+ }
1250
+ .tiptap-image-upload .tiptap-image-upload-previews {
1251
+ display: flex;
1252
+ flex-direction: column;
1253
+ gap: 0.75rem;
1254
+ }
1255
+ .tiptap-image-upload .tiptap-image-upload-header {
1256
+ display: flex;
1257
+ align-items: center;
1258
+ justify-content: space-between;
1259
+ padding: 0.5rem 0;
1260
+ border-bottom: 1px solid var(--tiptap-image-upload-border);
1261
+ margin-bottom: 0.5rem;
1262
+ }
1263
+ .tiptap-image-upload .tiptap-image-upload-header span {
1264
+ font-size: 0.875rem;
1265
+ font-weight: 500;
1266
+ color: var(--tiptap-image-upload-text-color);
1267
+ }
1268
+ .tiptap-image-upload .tiptap-image-upload-preview {
1269
+ position: relative;
1270
+ border-radius: var(--tt-radius-md, 0.5rem);
1271
+ overflow: hidden;
1272
+ }
1273
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-progress {
1274
+ position: absolute;
1275
+ inset: 0;
1276
+ background-color: var(--tiptap-image-upload-progress-bg);
1277
+ transition: all 300ms ease-out;
1278
+ }
1279
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-preview-content {
1280
+ position: relative;
1281
+ border: 1px solid var(--tiptap-image-upload-border);
1282
+ border-radius: var(--tt-radius-md, 0.5rem);
1283
+ padding: 1rem;
1284
+ display: flex;
1285
+ align-items: center;
1286
+ justify-content: space-between;
1287
+ }
1288
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-file-info {
1289
+ display: flex;
1290
+ align-items: center;
1291
+ gap: 0.75rem;
1292
+ height: 2rem;
1293
+ }
1294
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-file-info .tiptap-image-upload-file-icon {
1295
+ padding: 0.5rem;
1296
+ background-color: var(--tiptap-image-upload-icon-bg);
1297
+ border-radius: var(--tt-radius-lg, 0.75rem);
1298
+ }
1299
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-file-info .tiptap-image-upload-file-icon svg {
1300
+ width: 0.875rem;
1301
+ height: 0.875rem;
1302
+ color: var(--tiptap-image-upload-icon-color);
1303
+ }
1304
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-details {
1305
+ display: flex;
1306
+ flex-direction: column;
1307
+ }
1308
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-actions {
1309
+ display: flex;
1310
+ align-items: center;
1311
+ gap: 0.5rem;
1312
+ }
1313
+ .tiptap-image-upload .tiptap-image-upload-preview .tiptap-image-upload-actions .tiptap-image-upload-progress-text {
1314
+ font-size: 0.75rem;
1315
+ color: var(--tiptap-image-upload-border-active);
1316
+ font-weight: 600;
1317
+ }
1318
+
1319
+ .notra-prose.ProseMirror-focused .ProseMirror-selectednode .tiptap-image-upload-drag-area {
1320
+ border-color: var(--tiptap-image-upload-active);
1321
+ }
1322
+
1323
+ @media (max-width: 480px) {
1324
+ .tiptap-image-upload .tiptap-image-upload-drag-area {
1325
+ padding: 1.5rem 1rem;
1326
+ }
1327
+ .tiptap-image-upload .tiptap-image-upload-header {
1328
+ flex-direction: column;
1329
+ align-items: flex-start;
1330
+ gap: 0.5rem;
1331
+ }
1332
+ .tiptap-image-upload .tiptap-image-upload-preview-content {
1333
+ padding: 0.75rem;
1334
+ }
1335
+ }
1336
+ :root {
1337
+ --tt-toolbar-height: 2.75rem;
1338
+ --tt-safe-area-bottom: env(safe-area-inset-bottom, 0px);
1339
+ --tt-toolbar-bg-color: var(--white);
1340
+ --tt-toolbar-border-color: var(--tt-gray-light-a-100);
1341
+ }
1342
+
1343
+ .dark {
1344
+ --tt-toolbar-bg-color: var(--black);
1345
+ --tt-toolbar-border-color: var(--tt-gray-dark-a-50);
1346
+ }
1347
+
1348
+ .tiptap-toolbar {
1349
+ display: flex;
1350
+ align-items: center;
1351
+ gap: 0.25rem;
1352
+ }
1353
+ .tiptap-toolbar-group {
1354
+ display: flex;
1355
+ align-items: center;
1356
+ gap: 0.125rem;
1357
+ }
1358
+ .tiptap-toolbar-group:empty {
1359
+ display: none;
1360
+ }
1361
+ .tiptap-toolbar-group:empty + .tiptap-separator, .tiptap-separator + .tiptap-toolbar-group:empty {
1362
+ display: none;
1363
+ }
1364
+ .tiptap-toolbar[data-variant=fixed] {
1365
+ position: sticky;
1366
+ top: 0;
1367
+ z-index: 50;
1368
+ width: 100%;
1369
+ min-height: var(--tt-toolbar-height);
1370
+ background: var(--tt-toolbar-bg-color);
1371
+ border-bottom: 1px solid var(--tt-toolbar-border-color);
1372
+ padding: 0 0.5rem;
1373
+ overflow-x: auto;
1374
+ overscroll-behavior-x: contain;
1375
+ -webkit-overflow-scrolling: touch;
1376
+ scrollbar-width: none;
1377
+ -ms-overflow-style: none;
1378
+ }
1379
+ .tiptap-toolbar[data-variant=fixed]::-webkit-scrollbar {
1380
+ display: none;
1381
+ }
1382
+ @media (max-width: 480px) {
1383
+ .tiptap-toolbar[data-variant=fixed] {
1384
+ position: absolute;
1385
+ top: auto;
1386
+ height: calc(var(--tt-toolbar-height) + var(--tt-safe-area-bottom));
1387
+ border-top: 1px solid var(--tt-toolbar-border-color);
1388
+ border-bottom: none;
1389
+ padding: 0 0.5rem var(--tt-safe-area-bottom);
1390
+ flex-wrap: nowrap;
1391
+ justify-content: flex-start;
1392
+ }
1393
+ .tiptap-toolbar[data-variant=fixed] .tiptap-toolbar-group {
1394
+ flex: 0 0 auto;
1395
+ }
1396
+ }
1397
+ .tiptap-toolbar[data-variant=floating] {
1398
+ --tt-toolbar-padding: 0.125rem;
1399
+ --tt-toolbar-border-width: 1px;
1400
+ padding: 0.188rem;
1401
+ border-radius: calc(var(--tt-toolbar-padding) + var(--tt-radius-lg) + var(--tt-toolbar-border-width));
1402
+ border: var(--tt-toolbar-border-width) solid var(--tt-toolbar-border-color);
1403
+ background-color: var(--tt-toolbar-bg-color);
1404
+ box-shadow: var(--tt-shadow-elevated-md);
1405
+ outline: none;
1406
+ overflow: hidden;
1407
+ }
1408
+ .tiptap-toolbar[data-variant=floating][data-plain=true] {
1409
+ padding: 0;
1410
+ border-radius: 0;
1411
+ border: none;
1412
+ box-shadow: none;
1413
+ background-color: transparent;
1414
+ }
1415
+ @media screen and (max-width: 480px) {
1416
+ .tiptap-toolbar[data-variant=floating] {
1417
+ width: 100%;
1418
+ border-radius: 0;
1419
+ border: none;
1420
+ box-shadow: none;
1421
+ }
1422
+ }
1423
+
1424
+ .tiptap-button {
1425
+ font-size: 0.875rem;
1426
+ font-weight: 500;
1427
+ font-feature-settings: "salt" on, "cv01" on;
1428
+ line-height: 1.15;
1429
+ height: 2rem;
1430
+ min-width: 2rem;
1431
+ border: none;
1432
+ padding: 0.5rem;
1433
+ gap: 0.25rem;
1434
+ display: flex;
1435
+ align-items: center;
1436
+ justify-content: center;
1437
+ border-radius: var(--tt-radius-lg, 0.75rem);
1438
+ transition-property: background, color, opacity;
1439
+ transition-duration: var(--tt-transition-duration-default);
1440
+ transition-timing-function: var(--tt-transition-easing-default);
1441
+ }
1442
+ .tiptap-button:focus-visible {
1443
+ outline: none;
1444
+ }
1445
+ .tiptap-button[data-highlighted=true], .tiptap-button[data-focus-visible=true] {
1446
+ background-color: var(--tt-button-hover-bg-color);
1447
+ color: var(--tt-button-hover-text-color);
1448
+ }
1449
+ .tiptap-button[data-weight=small] {
1450
+ width: 1.5rem;
1451
+ min-width: 1.5rem;
1452
+ padding-right: 0;
1453
+ padding-left: 0;
1454
+ }
1455
+ .tiptap-button {
1456
+ /* button size large */
1457
+ }
1458
+ .tiptap-button[data-size=large] {
1459
+ font-size: 0.9375rem;
1460
+ height: 2.375rem;
1461
+ min-width: 2.375rem;
1462
+ padding: 0.625rem;
1463
+ }
1464
+ .tiptap-button {
1465
+ /* button size small */
1466
+ }
1467
+ .tiptap-button[data-size=small] {
1468
+ font-size: 0.75rem;
1469
+ line-height: 1.2;
1470
+ height: 1.5rem;
1471
+ min-width: 1.5rem;
1472
+ padding: 0.3125rem;
1473
+ border-radius: var(--tt-radius-md, 0.5rem);
1474
+ }
1475
+ .tiptap-button {
1476
+ /* trim / expand text of the button */
1477
+ }
1478
+ .tiptap-button .tiptap-button-text {
1479
+ padding: 0 0.125rem;
1480
+ flex-grow: 1;
1481
+ text-align: left;
1482
+ line-height: 1.5rem;
1483
+ }
1484
+ .tiptap-button[data-text-trim=on] .tiptap-button-text {
1485
+ text-overflow: ellipsis;
1486
+ overflow: hidden;
1487
+ }
1488
+ .tiptap-button {
1489
+ /* global icon settings */
1490
+ }
1491
+ .tiptap-button .tiptap-button-icon,
1492
+ .tiptap-button .tiptap-button-icon-sub,
1493
+ .tiptap-button .tiptap-button-dropdown-arrows,
1494
+ .tiptap-button .tiptap-button-dropdown-small {
1495
+ flex-shrink: 0;
1496
+ }
1497
+ .tiptap-button {
1498
+ /* standard icon, what is used */
1499
+ }
1500
+ .tiptap-button .tiptap-button-icon {
1501
+ width: 1rem;
1502
+ height: 1rem;
1503
+ }
1504
+ .tiptap-button[data-size=large] .tiptap-button-icon {
1505
+ width: 1.125rem;
1506
+ height: 1.125rem;
1507
+ }
1508
+ .tiptap-button[data-size=small] .tiptap-button-icon {
1509
+ width: 0.875rem;
1510
+ height: 0.875rem;
1511
+ }
1512
+ .tiptap-button {
1513
+ /* if 2 icons are used and this icon should be more subtle */
1514
+ }
1515
+ .tiptap-button .tiptap-button-icon-sub {
1516
+ width: 1rem;
1517
+ height: 1rem;
1518
+ }
1519
+ .tiptap-button[data-size=large] .tiptap-button-icon-sub {
1520
+ width: 1.125rem;
1521
+ height: 1.125rem;
1522
+ }
1523
+ .tiptap-button[data-size=small] .tiptap-button-icon-sub {
1524
+ width: 0.875rem;
1525
+ height: 0.875rem;
1526
+ }
1527
+ .tiptap-button {
1528
+ /* dropdown menus or arrows that are slightly smaller */
1529
+ }
1530
+ .tiptap-button .tiptap-button-dropdown-arrows {
1531
+ width: 0.75rem;
1532
+ height: 0.75rem;
1533
+ }
1534
+ .tiptap-button[data-size=large] .tiptap-button-dropdown-arrows {
1535
+ width: 0.875rem;
1536
+ height: 0.875rem;
1537
+ }
1538
+ .tiptap-button[data-size=small] .tiptap-button-dropdown-arrows {
1539
+ width: 0.625rem;
1540
+ height: 0.625rem;
1541
+ }
1542
+ .tiptap-button {
1543
+ /* dropdown menu for icon buttons only */
1544
+ }
1545
+ .tiptap-button .tiptap-button-dropdown-small {
1546
+ width: 0.625rem;
1547
+ height: 0.625rem;
1548
+ }
1549
+ .tiptap-button[data-size=large] .tiptap-button-dropdown-small {
1550
+ width: 0.75rem;
1551
+ height: 0.75rem;
1552
+ }
1553
+ .tiptap-button[data-size=small] .tiptap-button-dropdown-small {
1554
+ width: 0.5rem;
1555
+ height: 0.5rem;
1556
+ }
1557
+ .tiptap-button {
1558
+ /* button only has icons */
1559
+ }
1560
+ .tiptap-button:has(> svg):not(:has(> :not(svg))) {
1561
+ gap: 0.125rem;
1562
+ }
1563
+ .tiptap-button:has(> svg):not(:has(> :not(svg)))[data-size=large], .tiptap-button:has(> svg):not(:has(> :not(svg)))[data-size=small] {
1564
+ gap: 0.125rem;
1565
+ }
1566
+ .tiptap-button {
1567
+ /* button only has 2 icons and one of them is dropdown small */
1568
+ }
1569
+ .tiptap-button:has(> svg:nth-of-type(2)):has(> .tiptap-button-dropdown-small):not(:has(> svg:nth-of-type(3))):not(:has(> .tiptap-button-text)) {
1570
+ gap: 0;
1571
+ padding-right: 0.25rem;
1572
+ }
1573
+ .tiptap-button:has(> svg:nth-of-type(2)):has(> .tiptap-button-dropdown-small):not(:has(> svg:nth-of-type(3))):not(:has(> .tiptap-button-text))[data-size=large] {
1574
+ padding-right: 0.375rem;
1575
+ }
1576
+ .tiptap-button:has(> svg:nth-of-type(2)):has(> .tiptap-button-dropdown-small):not(:has(> svg:nth-of-type(3))):not(:has(> .tiptap-button-text))[data-size=small] {
1577
+ padding-right: 0.25rem;
1578
+ }
1579
+ .tiptap-button {
1580
+ /* Emoji is used in a button */
1581
+ }
1582
+ .tiptap-button .tiptap-button-emoji {
1583
+ width: 1rem;
1584
+ display: flex;
1585
+ justify-content: center;
1586
+ }
1587
+ .tiptap-button[data-size=large] .tiptap-button-emoji {
1588
+ width: 1.125rem;
1589
+ }
1590
+ .tiptap-button[data-size=small] .tiptap-button-emoji {
1591
+ width: 0.875rem;
1592
+ }
1593
+
1594
+ /* --------------------------------------------
1595
+ ----------- BUTTON COLOR SETTINGS -------------
1596
+ -------------------------------------------- */
1597
+ .tiptap-button {
1598
+ background-color: var(--tt-button-default-bg-color);
1599
+ color: var(--tt-button-default-text-color);
1600
+ }
1601
+ .tiptap-button .tiptap-button-icon {
1602
+ color: var(--tt-button-default-icon-color);
1603
+ }
1604
+ .tiptap-button .tiptap-button-icon-sub {
1605
+ color: var(--tt-button-default-icon-sub-color);
1606
+ }
1607
+ .tiptap-button .tiptap-button-dropdown-arrows {
1608
+ color: var(--tt-button-default-dropdown-arrows-color);
1609
+ }
1610
+ .tiptap-button .tiptap-button-dropdown-small {
1611
+ color: var(--tt-button-default-dropdown-arrows-color);
1612
+ }
1613
+ .tiptap-button {
1614
+ /* hover state of a button */
1615
+ }
1616
+ .tiptap-button:hover:not([data-active-item=true]):not([disabled]), .tiptap-button[data-active-item=true]:not([disabled]), .tiptap-button[data-highlighted]:not([disabled]):not([data-highlighted=false]) {
1617
+ background-color: var(--tt-button-hover-bg-color);
1618
+ color: var(--tt-button-hover-text-color);
1619
+ }
1620
+ .tiptap-button:hover:not([data-active-item=true]):not([disabled]) .tiptap-button-icon, .tiptap-button[data-active-item=true]:not([disabled]) .tiptap-button-icon, .tiptap-button[data-highlighted]:not([disabled]):not([data-highlighted=false]) .tiptap-button-icon {
1621
+ color: var(--tt-button-hover-icon-color);
1622
+ }
1623
+ .tiptap-button:hover:not([data-active-item=true]):not([disabled]) .tiptap-button-icon-sub, .tiptap-button[data-active-item=true]:not([disabled]) .tiptap-button-icon-sub, .tiptap-button[data-highlighted]:not([disabled]):not([data-highlighted=false]) .tiptap-button-icon-sub {
1624
+ color: var(--tt-button-hover-icon-sub-color);
1625
+ }
1626
+ .tiptap-button:hover:not([data-active-item=true]):not([disabled]) .tiptap-button-dropdown-arrows,
1627
+ .tiptap-button:hover:not([data-active-item=true]):not([disabled]) .tiptap-button-dropdown-small, .tiptap-button[data-active-item=true]:not([disabled]) .tiptap-button-dropdown-arrows,
1628
+ .tiptap-button[data-active-item=true]:not([disabled]) .tiptap-button-dropdown-small, .tiptap-button[data-highlighted]:not([disabled]):not([data-highlighted=false]) .tiptap-button-dropdown-arrows,
1629
+ .tiptap-button[data-highlighted]:not([disabled]):not([data-highlighted=false]) .tiptap-button-dropdown-small {
1630
+ color: var(--tt-button-hover-dropdown-arrows-color);
1631
+ }
1632
+ .tiptap-button {
1633
+ /* Active state of a button */
1634
+ }
1635
+ .tiptap-button[data-active-state=on]:not([disabled]), .tiptap-button[data-state=open]:not([disabled]) {
1636
+ background-color: var(--tt-button-active-bg-color);
1637
+ color: var(--tt-button-active-text-color);
1638
+ }
1639
+ .tiptap-button[data-active-state=on]:not([disabled]) .tiptap-button-icon, .tiptap-button[data-state=open]:not([disabled]) .tiptap-button-icon {
1640
+ color: var(--tt-button-active-icon-color);
1641
+ }
1642
+ .tiptap-button[data-active-state=on]:not([disabled]) .tiptap-button-icon-sub, .tiptap-button[data-state=open]:not([disabled]) .tiptap-button-icon-sub {
1643
+ color: var(--tt-button-active-icon-sub-color);
1644
+ }
1645
+ .tiptap-button[data-active-state=on]:not([disabled]) .tiptap-button-dropdown-arrows,
1646
+ .tiptap-button[data-active-state=on]:not([disabled]) .tiptap-button-dropdown-small, .tiptap-button[data-state=open]:not([disabled]) .tiptap-button-dropdown-arrows,
1647
+ .tiptap-button[data-state=open]:not([disabled]) .tiptap-button-dropdown-small {
1648
+ color: var(--tt-button-active-dropdown-arrows-color);
1649
+ }
1650
+ .tiptap-button[data-active-state=on]:not([disabled]):hover, .tiptap-button[data-state=open]:not([disabled]):hover {
1651
+ background-color: var(--tt-button-active-hover-bg-color);
1652
+ }
1653
+ .tiptap-button[data-active-state=on]:not([disabled]), .tiptap-button[data-state=open]:not([disabled]) {
1654
+ /* Emphasized */
1655
+ }
1656
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=emphasized], .tiptap-button[data-state=open]:not([disabled])[data-appearance=emphasized] {
1657
+ background-color: var(--tt-button-active-bg-color-emphasized);
1658
+ color: var(--tt-button-active-text-color-emphasized);
1659
+ }
1660
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=emphasized] .tiptap-button-icon, .tiptap-button[data-state=open]:not([disabled])[data-appearance=emphasized] .tiptap-button-icon {
1661
+ color: var(--tt-button-active-icon-color-emphasized);
1662
+ }
1663
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=emphasized] .tiptap-button-icon-sub, .tiptap-button[data-state=open]:not([disabled])[data-appearance=emphasized] .tiptap-button-icon-sub {
1664
+ color: var(--tt-button-active-icon-sub-color-emphasized);
1665
+ }
1666
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=emphasized] .tiptap-button-dropdown-arrows,
1667
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=emphasized] .tiptap-button-dropdown-small, .tiptap-button[data-state=open]:not([disabled])[data-appearance=emphasized] .tiptap-button-dropdown-arrows,
1668
+ .tiptap-button[data-state=open]:not([disabled])[data-appearance=emphasized] .tiptap-button-dropdown-small {
1669
+ color: var(--tt-button-active-dropdown-arrows-color-emphasized);
1670
+ }
1671
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=emphasized]:hover, .tiptap-button[data-state=open]:not([disabled])[data-appearance=emphasized]:hover {
1672
+ background-color: var(--tt-button-active-hover-bg-color-emphasized);
1673
+ }
1674
+ .tiptap-button[data-active-state=on]:not([disabled]), .tiptap-button[data-state=open]:not([disabled]) {
1675
+ /* Subdued */
1676
+ }
1677
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=subdued], .tiptap-button[data-state=open]:not([disabled])[data-appearance=subdued] {
1678
+ background-color: var(--tt-button-active-bg-color-subdued);
1679
+ color: var(--tt-button-active-text-color-subdued);
1680
+ }
1681
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=subdued] .tiptap-button-icon, .tiptap-button[data-state=open]:not([disabled])[data-appearance=subdued] .tiptap-button-icon {
1682
+ color: var(--tt-button-active-icon-color-subdued);
1683
+ }
1684
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=subdued] .tiptap-button-icon-sub, .tiptap-button[data-state=open]:not([disabled])[data-appearance=subdued] .tiptap-button-icon-sub {
1685
+ color: var(--tt-button-active-icon-sub-color-subdued);
1686
+ }
1687
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=subdued] .tiptap-button-dropdown-arrows,
1688
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=subdued] .tiptap-button-dropdown-small, .tiptap-button[data-state=open]:not([disabled])[data-appearance=subdued] .tiptap-button-dropdown-arrows,
1689
+ .tiptap-button[data-state=open]:not([disabled])[data-appearance=subdued] .tiptap-button-dropdown-small {
1690
+ color: var(--tt-button-active-dropdown-arrows-color-subdued);
1691
+ }
1692
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=subdued]:hover, .tiptap-button[data-state=open]:not([disabled])[data-appearance=subdued]:hover {
1693
+ background-color: var(--tt-button-active-hover-bg-color-subdued);
1694
+ }
1695
+ .tiptap-button[data-active-state=on]:not([disabled])[data-appearance=subdued]:hover .tiptap-button-icon, .tiptap-button[data-state=open]:not([disabled])[data-appearance=subdued]:hover .tiptap-button-icon {
1696
+ color: var(--tt-button-active-icon-color-subdued);
1697
+ }
1698
+ .tiptap-button:disabled {
1699
+ background-color: var(--tt-button-disabled-bg-color);
1700
+ color: var(--tt-button-disabled-text-color);
1701
+ }
1702
+ .tiptap-button:disabled .tiptap-button-icon {
1703
+ color: var(--tt-button-disabled-icon-color);
1704
+ }
1705
+
1706
+ .tiptap-button {
1707
+ /**************************************************
1708
+ Default button background color
1709
+ **************************************************/
1710
+ /* Light mode */
1711
+ --tt-button-default-bg-color: var(--tt-gray-light-a-100);
1712
+ --tt-button-hover-bg-color: var(--tt-gray-light-200);
1713
+ --tt-button-active-bg-color: var(--tt-gray-light-a-200);
1714
+ --tt-button-active-bg-color-emphasized: var(
1715
+ --tt-brand-color-100
1716
+ );
1717
+ --tt-button-active-bg-color-subdued: var(
1718
+ --tt-gray-light-a-200
1719
+ );
1720
+ --tt-button-active-hover-bg-color: var(--tt-gray-light-300);
1721
+ --tt-button-active-hover-bg-color-emphasized: var(
1722
+ --tt-brand-color-200
1723
+ );
1724
+ --tt-button-active-hover-bg-color-subdued: var(
1725
+ --tt-gray-light-a-300
1726
+ );
1727
+ --tt-button-disabled-bg-color: var(--tt-gray-light-a-50);
1728
+ /* Dark mode */
1729
+ }
1730
+ .dark .tiptap-button {
1731
+ --tt-button-default-bg-color: var(--tt-gray-dark-a-100);
1732
+ --tt-button-hover-bg-color: var(--tt-gray-dark-200);
1733
+ --tt-button-active-bg-color: var(--tt-gray-dark-a-200);
1734
+ --tt-button-active-bg-color-emphasized: var(
1735
+ --tt-brand-color-900
1736
+ );
1737
+ --tt-button-active-bg-color-subdued: var(
1738
+ --tt-gray-dark-a-200
1739
+ );
1740
+ --tt-button-active-hover-bg-color: var(--tt-gray-dark-300);
1741
+ --tt-button-active-hover-bg-color-emphasized: var(
1742
+ --tt-brand-color-800
1743
+ );
1744
+ --tt-button-active-hover-bg-color-subdued: var(
1745
+ --tt-gray-dark-a-300
1746
+ );
1747
+ --tt-button-disabled-bg-color: var(--tt-gray-dark-a-50);
1748
+ }
1749
+ .tiptap-button {
1750
+ /**************************************************
1751
+ Default button text color
1752
+ **************************************************/
1753
+ /* Light mode */
1754
+ --tt-button-default-text-color: var(--tt-gray-light-a-600);
1755
+ --tt-button-hover-text-color: var(--tt-gray-light-a-900);
1756
+ --tt-button-active-text-color: var(--tt-gray-light-a-900);
1757
+ --tt-button-active-text-color-emphasized: var(--tt-gray-light-a-900);
1758
+ --tt-button-active-text-color-subdued: var(--tt-gray-light-a-900);
1759
+ --tt-button-disabled-text-color: var(--tt-gray-light-a-400);
1760
+ /* Dark mode */
1761
+ }
1762
+ .dark .tiptap-button {
1763
+ --tt-button-default-text-color: var(--tt-gray-dark-a-600);
1764
+ --tt-button-hover-text-color: var(--tt-gray-dark-a-900);
1765
+ --tt-button-active-text-color: var(--tt-gray-dark-a-900);
1766
+ --tt-button-active-text-color-emphasized: var(--tt-gray-dark-a-900);
1767
+ --tt-button-active-text-color-subdued: var(--tt-gray-dark-a-900);
1768
+ --tt-button-disabled-text-color: var(--tt-gray-dark-a-300);
1769
+ }
1770
+ .tiptap-button {
1771
+ /**************************************************
1772
+ Default button icon color
1773
+ **************************************************/
1774
+ /* Light mode */
1775
+ --tt-button-default-icon-color: var(--tt-gray-light-a-600);
1776
+ --tt-button-hover-icon-color: var(--tt-gray-light-a-900);
1777
+ --tt-button-active-icon-color: var(--tt-brand-color-500);
1778
+ --tt-button-active-icon-color-emphasized: var(--tt-brand-color-600);
1779
+ --tt-button-active-icon-color-subdued: var(--tt-gray-light-a-900);
1780
+ --tt-button-disabled-icon-color: var(--tt-gray-light-a-400);
1781
+ /* Dark mode */
1782
+ }
1783
+ .dark .tiptap-button {
1784
+ --tt-button-default-icon-color: var(--tt-gray-dark-a-600);
1785
+ --tt-button-hover-icon-color: var(--tt-gray-dark-a-900);
1786
+ --tt-button-active-icon-color: var(--tt-brand-color-400);
1787
+ --tt-button-active-icon-color-emphasized: var(--tt-brand-color-400);
1788
+ --tt-button-active-icon-color-subdued: var(--tt-gray-dark-a-900);
1789
+ --tt-button-disabled-icon-color: var(--tt-gray-dark-a-400);
1790
+ }
1791
+ .tiptap-button {
1792
+ /**************************************************
1793
+ Default button subicon color
1794
+ **************************************************/
1795
+ /* Light mode */
1796
+ --tt-button-default-icon-sub-color: var(--tt-gray-light-a-400);
1797
+ --tt-button-hover-icon-sub-color: var(--tt-gray-light-a-500);
1798
+ --tt-button-active-icon-sub-color: var(--tt-gray-light-a-400);
1799
+ --tt-button-active-icon-sub-color-emphasized: var(--tt-gray-light-a-500);
1800
+ --tt-button-active-icon-sub-color-subdued: var(--tt-gray-light-a-400);
1801
+ --tt-button-disabled-icon-sub-color: var(--tt-gray-light-a-100);
1802
+ /* Dark mode */
1803
+ }
1804
+ .dark .tiptap-button {
1805
+ --tt-button-default-icon-sub-color: var(--tt-gray-dark-a-300);
1806
+ --tt-button-hover-icon-sub-color: var(--tt-gray-dark-a-400);
1807
+ --tt-button-active-icon-sub-color: var(--tt-gray-dark-a-300);
1808
+ --tt-button-active-icon-sub-color-emphasized: var(--tt-gray-dark-a-400);
1809
+ --tt-button-active-icon-sub-color-subdued: var(--tt-gray-dark-a-300);
1810
+ --tt-button-disabled-icon-sub-color: var(--tt-gray-dark-a-100);
1811
+ }
1812
+ .tiptap-button {
1813
+ /**************************************************
1814
+ Default button dropdown / arrows color
1815
+ **************************************************/
1816
+ /* Light mode */
1817
+ --tt-button-default-dropdown-arrows-color: var(--tt-gray-light-a-600);
1818
+ --tt-button-hover-dropdown-arrows-color: var(--tt-gray-light-a-700);
1819
+ --tt-button-active-dropdown-arrows-color: var(--tt-gray-light-a-600);
1820
+ --tt-button-active-dropdown-arrows-color-emphasized: var(
1821
+ --tt-gray-light-a-700
1822
+ );
1823
+ --tt-button-active-dropdown-arrows-color-subdued: var(--tt-gray-light-a-600);
1824
+ --tt-button-disabled-dropdown-arrows-color: var(--tt-gray-light-a-400);
1825
+ /* Dark mode */
1826
+ }
1827
+ .dark .tiptap-button {
1828
+ --tt-button-default-dropdown-arrows-color: var(--tt-gray-dark-a-600);
1829
+ --tt-button-hover-dropdown-arrows-color: var(--tt-gray-dark-a-700);
1830
+ --tt-button-active-dropdown-arrows-color: var(--tt-gray-dark-a-600);
1831
+ --tt-button-active-dropdown-arrows-color-emphasized: var(
1832
+ --tt-gray-dark-a-700
1833
+ );
1834
+ --tt-button-active-dropdown-arrows-color-subdued: var(--tt-gray-dark-a-600);
1835
+ --tt-button-disabled-dropdown-arrows-color: var(--tt-gray-dark-a-400);
1836
+ }
1837
+ .tiptap-button {
1838
+ /* ----------------------------------------------------------------
1839
+ --------------------------- GHOST BUTTON --------------------------
1840
+ ---------------------------------------------------------------- */
1841
+ }
1842
+ .tiptap-button[data-style=ghost] {
1843
+ /**************************************************
1844
+ Ghost button background color
1845
+ **************************************************/
1846
+ /* Light mode */
1847
+ --tt-button-default-bg-color: var(--transparent);
1848
+ --tt-button-hover-bg-color: var(--tt-gray-light-200);
1849
+ --tt-button-active-bg-color: var(--tt-gray-light-a-100);
1850
+ --tt-button-active-bg-color-emphasized: var(
1851
+ --tt-brand-color-100
1852
+ );
1853
+ --tt-button-active-bg-color-subdued: var(
1854
+ --tt-gray-light-a-100
1855
+ );
1856
+ --tt-button-active-hover-bg-color: var(--tt-gray-light-200);
1857
+ --tt-button-active-hover-bg-color-emphasized: var(
1858
+ --tt-brand-color-200
1859
+ );
1860
+ --tt-button-active-hover-bg-color-subdued: var(
1861
+ --tt-gray-light-a-200
1862
+ );
1863
+ --tt-button-disabled-bg-color: var(--transparent);
1864
+ /* Dark mode */
1865
+ }
1866
+ .dark .tiptap-button[data-style=ghost] {
1867
+ --tt-button-default-bg-color: var(--transparent);
1868
+ --tt-button-hover-bg-color: var(--tt-gray-dark-200);
1869
+ --tt-button-active-bg-color: var(--tt-gray-dark-a-100);
1870
+ --tt-button-active-bg-color-emphasized: var(
1871
+ --tt-brand-color-900
1872
+ );
1873
+ --tt-button-active-bg-color-subdued: var(
1874
+ --tt-gray-dark-a-100
1875
+ );
1876
+ --tt-button-active-hover-bg-color: var(--tt-gray-dark-200);
1877
+ --tt-button-active-hover-bg-color-emphasized: var(
1878
+ --tt-brand-color-800
1879
+ );
1880
+ --tt-button-active-hover-bg-color-subdued: var(
1881
+ --tt-gray-dark-a-200
1882
+ );
1883
+ --tt-button-disabled-bg-color: var(--transparent);
1884
+ }
1885
+ .tiptap-button[data-style=ghost] {
1886
+ /**************************************************
1887
+ Ghost button text color
1888
+ **************************************************/
1889
+ /* Light mode */
1890
+ --tt-button-default-text-color: var(--tt-gray-light-a-600);
1891
+ --tt-button-hover-text-color: var(--tt-gray-light-a-900);
1892
+ --tt-button-active-text-color: var(--tt-gray-light-a-900);
1893
+ --tt-button-active-text-color-emphasized: var(--tt-gray-light-a-900);
1894
+ --tt-button-active-text-color-subdued: var(--tt-gray-light-a-900);
1895
+ --tt-button-disabled-text-color: var(--tt-gray-light-a-400);
1896
+ /* Dark mode */
1897
+ }
1898
+ .dark .tiptap-button[data-style=ghost] {
1899
+ --tt-button-default-text-color: var(--tt-gray-dark-a-600);
1900
+ --tt-button-hover-text-color: var(--tt-gray-dark-a-900);
1901
+ --tt-button-active-text-color: var(--tt-gray-dark-a-900);
1902
+ --tt-button-active-text-color-emphasized: var(--tt-gray-dark-a-900);
1903
+ --tt-button-active-text-color-subdued: var(--tt-gray-dark-a-900);
1904
+ --tt-button-disabled-text-color: var(--tt-gray-dark-a-300);
1905
+ }
1906
+ .tiptap-button[data-style=ghost] {
1907
+ /**************************************************
1908
+ Ghost button icon color
1909
+ **************************************************/
1910
+ /* Light mode */
1911
+ --tt-button-default-icon-color: var(--tt-gray-light-a-600);
1912
+ --tt-button-hover-icon-color: var(--tt-gray-light-a-900);
1913
+ --tt-button-active-icon-color: var(--tt-brand-color-500);
1914
+ --tt-button-active-icon-color-emphasized: var(--tt-brand-color-600);
1915
+ --tt-button-active-icon-color-subdued: var(--tt-gray-light-a-900);
1916
+ --tt-button-disabled-icon-color: var(--tt-gray-light-a-400);
1917
+ /* Dark mode */
1918
+ }
1919
+ .dark .tiptap-button[data-style=ghost] {
1920
+ --tt-button-default-icon-color: var(--tt-gray-dark-a-600);
1921
+ --tt-button-hover-icon-color: var(--tt-gray-dark-a-900);
1922
+ --tt-button-active-icon-color: var(--tt-brand-color-400);
1923
+ --tt-button-active-icon-color-emphasized: var(--tt-brand-color-300);
1924
+ --tt-button-active-icon-color-subdued: var(--tt-gray-dark-a-900);
1925
+ --tt-button-disabled-icon-color: var(--tt-gray-dark-a-400);
1926
+ }
1927
+ .tiptap-button[data-style=ghost] {
1928
+ /**************************************************
1929
+ Ghost button subicon color
1930
+ **************************************************/
1931
+ /* Light mode */
1932
+ --tt-button-default-icon-sub-color: var(--tt-gray-light-a-400);
1933
+ --tt-button-hover-icon-sub-color: var(--tt-gray-light-a-500);
1934
+ --tt-button-active-icon-sub-color: var(--tt-gray-light-a-400);
1935
+ --tt-button-active-icon-sub-color-emphasized: var(--tt-gray-light-a-500);
1936
+ --tt-button-active-icon-sub-color-subdued: var(--tt-gray-light-a-400);
1937
+ --tt-button-disabled-icon-sub-color: var(--tt-gray-light-a-100);
1938
+ /* Dark mode */
1939
+ }
1940
+ .dark .tiptap-button[data-style=ghost] {
1941
+ --tt-button-default-icon-sub-color: var(--tt-gray-dark-a-300);
1942
+ --tt-button-hover-icon-sub-color: var(--tt-gray-dark-a-400);
1943
+ --tt-button-active-icon-sub-color: var(--tt-gray-dark-a-300);
1944
+ --tt-button-active-icon-sub-color-emphasized: var(--tt-gray-dark-a-400);
1945
+ --tt-button-active-icon-sub-color-subdued: var(--tt-gray-dark-a-300);
1946
+ --tt-button-disabled-icon-sub-color: var(--tt-gray-dark-a-100);
1947
+ }
1948
+ .tiptap-button[data-style=ghost] {
1949
+ /**************************************************
1950
+ Ghost button dropdown / arrows color
1951
+ **************************************************/
1952
+ /* Light mode */
1953
+ --tt-button-default-dropdown-arrows-color: var(--tt-gray-light-a-600);
1954
+ --tt-button-hover-dropdown-arrows-color: var(--tt-gray-light-a-700);
1955
+ --tt-button-active-dropdown-arrows-color: var(--tt-gray-light-a-600);
1956
+ --tt-button-active-dropdown-arrows-color-emphasized: var(
1957
+ --tt-gray-light-a-700
1958
+ );
1959
+ --tt-button-active-dropdown-arrows-color-subdued: var(
1960
+ --tt-gray-light-a-600
1961
+ );
1962
+ --tt-button-disabled-dropdown-arrows-color: var(--tt-gray-light-a-400);
1963
+ /* Dark mode */
1964
+ }
1965
+ .dark .tiptap-button[data-style=ghost] {
1966
+ --tt-button-default-dropdown-arrows-color: var(--tt-gray-dark-a-600);
1967
+ --tt-button-hover-dropdown-arrows-color: var(--tt-gray-dark-a-700);
1968
+ --tt-button-active-dropdown-arrows-color: var(--tt-gray-dark-a-600);
1969
+ --tt-button-active-dropdown-arrows-color-emphasized: var(
1970
+ --tt-gray-dark-a-700
1971
+ );
1972
+ --tt-button-active-dropdown-arrows-color-subdued: var(
1973
+ --tt-gray-dark-a-600
1974
+ );
1975
+ --tt-button-disabled-dropdown-arrows-color: var(--tt-gray-dark-a-400);
1976
+ }
1977
+ .tiptap-button {
1978
+ /* ----------------------------------------------------------------
1979
+ -------------------------- PRIMARY BUTTON -------------------------
1980
+ ---------------------------------------------------------------- */
1981
+ }
1982
+ .tiptap-button[data-style=primary] {
1983
+ /**************************************************
1984
+ Primary button background color
1985
+ **************************************************/
1986
+ /* Light mode */
1987
+ --tt-button-default-bg-color: var(--tt-brand-color-500);
1988
+ --tt-button-hover-bg-color: var(--tt-brand-color-600);
1989
+ --tt-button-active-bg-color: var(--tt-brand-color-100);
1990
+ --tt-button-active-bg-color-emphasized: var(
1991
+ --tt-brand-color-100
1992
+ );
1993
+ --tt-button-active-bg-color-subdued: var(
1994
+ --tt-brand-color-100
1995
+ );
1996
+ --tt-button-active-hover-bg-color: var(--tt-brand-color-200);
1997
+ --tt-button-active-hover-bg-color-emphasized: var(
1998
+ --tt-brand-color-200
1999
+ );
2000
+ --tt-button-active-hover-bg-color-subdued: var(
2001
+ --tt-brand-color-200
2002
+ );
2003
+ --tt-button-disabled-bg-color: var(--tt-gray-light-a-100);
2004
+ /* Dark mode */
2005
+ }
2006
+ .dark .tiptap-button[data-style=primary] {
2007
+ --tt-button-default-bg-color: var(--tt-brand-color-500);
2008
+ --tt-button-hover-bg-color: var(--tt-brand-color-600);
2009
+ --tt-button-active-bg-color: var(--tt-brand-color-900);
2010
+ --tt-button-active-bg-color-emphasized: var(
2011
+ --tt-brand-color-900
2012
+ );
2013
+ --tt-button-active-bg-color-subdued: var(
2014
+ --tt-brand-color-900
2015
+ );
2016
+ --tt-button-active-hover-bg-color: var(--tt-brand-color-800);
2017
+ --tt-button-active-hover-bg-color-emphasized: var(
2018
+ --tt-brand-color-800
2019
+ );
2020
+ --tt-button-active-hover-bg-color-subdued: var(
2021
+ --tt-brand-color-800
2022
+ );
2023
+ --tt-button-disabled-bg-color: var(--tt-gray-dark-a-100);
2024
+ }
2025
+ .tiptap-button[data-style=primary] {
2026
+ /**************************************************
2027
+ Primary button text color
2028
+ **************************************************/
2029
+ /* Light mode */
2030
+ --tt-button-default-text-color: var(--white);
2031
+ --tt-button-hover-text-color: var(--white);
2032
+ --tt-button-active-text-color: var(--tt-gray-light-a-900);
2033
+ --tt-button-active-text-color-emphasized: var(--tt-gray-light-a-900);
2034
+ --tt-button-active-text-color-subdued: var(--tt-gray-light-a-900);
2035
+ --tt-button-disabled-text-color: var(--tt-gray-light-a-400);
2036
+ /* Dark mode */
2037
+ }
2038
+ .dark .tiptap-button[data-style=primary] {
2039
+ --tt-button-default-text-color: var(--white);
2040
+ --tt-button-hover-text-color: var(--white);
2041
+ --tt-button-active-text-color: var(--tt-gray-dark-a-900);
2042
+ --tt-button-active-text-color-emphasized: var(--tt-gray-dark-a-900);
2043
+ --tt-button-active-text-color-subdued: var(--tt-gray-dark-a-900);
2044
+ --tt-button-disabled-text-color: var(--tt-gray-dark-a-300);
2045
+ }
2046
+ .tiptap-button[data-style=primary] {
2047
+ /**************************************************
2048
+ Primary button icon color
2049
+ **************************************************/
2050
+ /* Light mode */
2051
+ --tt-button-default-icon-color: var(--white);
2052
+ --tt-button-hover-icon-color: var(--white);
2053
+ --tt-button-active-icon-color: var(--tt-brand-color-600);
2054
+ --tt-button-active-icon-color-emphasized: var(--tt-brand-color-600);
2055
+ --tt-button-active-icon-color-subdued: var(--tt-brand-color-600);
2056
+ --tt-button-disabled-icon-color: var(--tt-gray-light-a-400);
2057
+ /* Dark mode */
2058
+ }
2059
+ .dark .tiptap-button[data-style=primary] {
2060
+ --tt-button-default-icon-color: var(--white);
2061
+ --tt-button-hover-icon-color: var(--white);
2062
+ --tt-button-active-icon-color: var(--tt-brand-color-400);
2063
+ --tt-button-active-icon-color-emphasized: var(--tt-brand-color-400);
2064
+ --tt-button-active-icon-color-subdued: var(--tt-brand-color-400);
2065
+ --tt-button-disabled-icon-color: var(--tt-gray-dark-a-300);
2066
+ }
2067
+ .tiptap-button[data-style=primary] {
2068
+ /**************************************************
2069
+ Primary button subicon color
2070
+ **************************************************/
2071
+ /* Light mode */
2072
+ --tt-button-default-icon-sub-color: var(--tt-gray-dark-a-500);
2073
+ --tt-button-hover-icon-sub-color: var(--tt-gray-dark-a-500);
2074
+ --tt-button-active-icon-sub-color: var(--tt-gray-light-a-500);
2075
+ --tt-button-active-icon-sub-color-emphasized: var(--tt-gray-light-a-500);
2076
+ --tt-button-active-icon-sub-color-subdued: var(--tt-gray-light-a-500);
2077
+ --tt-button-disabled-icon-sub-color: var(--tt-gray-light-a-100);
2078
+ /* Dark mode */
2079
+ }
2080
+ .dark .tiptap-button[data-style=primary] {
2081
+ --tt-button-default-icon-sub-color: var(--tt-gray-dark-a-400);
2082
+ --tt-button-hover-icon-sub-color: var(--tt-gray-dark-a-500);
2083
+ --tt-button-active-icon-sub-color: var(--tt-gray-dark-a-300);
2084
+ --tt-button-active-icon-sub-color-emphasized: var(--tt-gray-dark-a-400);
2085
+ --tt-button-active-icon-sub-color-subdued: var(--tt-gray-dark-a-300);
2086
+ --tt-button-disabled-icon-sub-color: var(--tt-gray-dark-a-100);
2087
+ }
2088
+ .tiptap-button[data-style=primary] {
2089
+ /**************************************************
2090
+ Primary button dropdown / arrows color
2091
+ **************************************************/
2092
+ /* Light mode */
2093
+ --tt-button-default-dropdown-arrows-color: var(--white);
2094
+ --tt-button-hover-dropdown-arrows-color: var(--white);
2095
+ --tt-button-active-dropdown-arrows-color: var(--tt-gray-light-a-700);
2096
+ --tt-button-active-dropdown-arrows-color-emphasized: var(
2097
+ --tt-gray-light-a-700
2098
+ );
2099
+ --tt-button-active-dropdown-arrows-color-subdued: var(
2100
+ --tt-gray-light-a-700
2101
+ );
2102
+ --tt-button-disabled-dropdown-arrows-color: var(--tt-gray-light-a-400);
2103
+ /* Dark mode */
2104
+ }
2105
+ .dark .tiptap-button[data-style=primary] {
2106
+ --tt-button-default-dropdown-arrows-color: var(--white);
2107
+ --tt-button-hover-dropdown-arrows-color: var(--white);
2108
+ --tt-button-active-dropdown-arrows-color: var(--tt-gray-dark-a-600);
2109
+ --tt-button-active-dropdown-arrows-color-emphasized: var(
2110
+ --tt-gray-dark-a-600
2111
+ );
2112
+ --tt-button-active-dropdown-arrows-color-subdued: var(
2113
+ --tt-gray-dark-a-600
2114
+ );
2115
+ --tt-button-disabled-dropdown-arrows-color: var(--tt-gray-dark-a-400);
2116
+ }
2117
+
2118
+ .tiptap-button-group {
2119
+ display: flex;
2120
+ width: fit-content;
2121
+ align-items: stretch;
2122
+ /* nested tiptap-button-group gets a gap */
2123
+ }
2124
+ .tiptap-button-group:has(> [data-slot=tiptap-button-group]) {
2125
+ gap: 0.125rem;
2126
+ }
2127
+ .tiptap-button-group {
2128
+ /* focus-visible children stack correctly */
2129
+ }
2130
+ .tiptap-button-group > *:focus-visible {
2131
+ position: relative;
2132
+ z-index: 10;
2133
+ }
2134
+ .tiptap-button-group {
2135
+ /* select trigger without explicit width becomes fit-content */
2136
+ }
2137
+ .tiptap-button-group > [data-slot=select-trigger]:not([class*=w-]) {
2138
+ width: fit-content;
2139
+ }
2140
+ .tiptap-button-group {
2141
+ /* input children fill remaining space */
2142
+ }
2143
+ .tiptap-button-group > input {
2144
+ flex: 1;
2145
+ }
2146
+
2147
+ /* ─── Horizontal ────────────────────────────────────────── */
2148
+ .tiptap-button-group-horizontal {
2149
+ /* all [data-slot] children: remove right radius */
2150
+ }
2151
+ .tiptap-button-group-horizontal > [data-slot] {
2152
+ border-top-right-radius: 0;
2153
+ border-bottom-right-radius: 0;
2154
+ }
2155
+ .tiptap-button-group-horizontal {
2156
+ /* last [data-slot] child: restore right radius */
2157
+ }
2158
+ .tiptap-button-group-horizontal > [data-slot]:not(:has(~ [data-slot])) {
2159
+ border-top-right-radius: var(--tt-radius-lg) !important;
2160
+ border-bottom-right-radius: var(--tt-radius-lg) !important;
2161
+ }
2162
+ .tiptap-button-group-horizontal {
2163
+ /* non-first [data-slot] children: remove left radius + left border */
2164
+ }
2165
+ .tiptap-button-group-horizontal > [data-slot] ~ [data-slot] {
2166
+ border-top-left-radius: 0;
2167
+ border-bottom-left-radius: 0;
2168
+ border-left-width: 0;
2169
+ }
2170
+ .tiptap-button-group-horizontal {
2171
+ /* select trigger last of type when followed by hidden select */
2172
+ }
2173
+ .tiptap-button-group-horizontal:has(select[aria-hidden=true]:last-child) > [data-slot=select-trigger]:last-of-type {
2174
+ border-top-right-radius: var(--tt-radius-lg);
2175
+ border-bottom-right-radius: var(--tt-radius-lg);
2176
+ }
2177
+
2178
+ /* ─── Vertical ──────────────────────────────────────────── */
2179
+ .tiptap-button-group-vertical {
2180
+ flex-direction: column;
2181
+ /* all [data-slot] children: remove bottom radius */
2182
+ }
2183
+ .tiptap-button-group-vertical > [data-slot] {
2184
+ border-bottom-left-radius: 0;
2185
+ border-bottom-right-radius: 0;
2186
+ }
2187
+ .tiptap-button-group-vertical {
2188
+ /* last [data-slot] child: restore bottom radius */
2189
+ }
2190
+ .tiptap-button-group-vertical > [data-slot]:not(:has(~ [data-slot])) {
2191
+ border-bottom-left-radius: var(--tt-radius-lg) !important;
2192
+ border-bottom-right-radius: var(--tt-radius-lg) !important;
2193
+ }
2194
+ .tiptap-button-group-vertical {
2195
+ /* non-first [data-slot] children: remove top radius + top border */
2196
+ }
2197
+ .tiptap-button-group-vertical > [data-slot] ~ [data-slot] {
2198
+ border-top-left-radius: 0;
2199
+ border-top-right-radius: 0;
2200
+ border-top-width: 0;
2201
+ }
2202
+
2203
+ .tiptap-separator {
2204
+ --tt-link-border-color: var(--tt-gray-light-a-200);
2205
+ }
2206
+ .dark .tiptap-separator {
2207
+ --tt-link-border-color: var(--tt-gray-dark-a-200);
2208
+ }
2209
+
2210
+ .tiptap-separator {
2211
+ flex-shrink: 0;
2212
+ background-color: var(--tt-link-border-color);
2213
+ }
2214
+ .tiptap-separator[data-orientation=horizontal] {
2215
+ height: 1px;
2216
+ width: 100%;
2217
+ margin: 0.5rem 0;
2218
+ }
2219
+ .tiptap-separator[data-orientation=vertical] {
2220
+ height: 1.5rem;
2221
+ width: 1px;
2222
+ }
2223
+
2224
+ :root {
2225
+ --tt-dropdown-menu-bg-color: var(--white);
2226
+ --tt-dropdown-menu-text-color: var(--tt-gray-light-a-600);
2227
+ --tt-dropdown-menu-label-color: var(--tt-gray-light-a-800);
2228
+ }
2229
+
2230
+ :root.dark,
2231
+ .dark {
2232
+ --tt-dropdown-menu-bg-color: var(--tt-gray-dark-50);
2233
+ --tt-dropdown-menu-text-color: var(--tt-gray-dark-a-600);
2234
+ --tt-dropdown-menu-label-color: var(--tt-gray-dark-a-800);
2235
+ }
2236
+
2237
+ /* ============================================================
304
2238
  Dropdown Menu
305
- ===================== */
306
- .notra-editor .tiptap-dropdown-menu-content {
307
- z-index: 9999;
308
- min-width: 8rem;
309
- border-radius: calc(0.375rem + var(--tt-radius-lg));
310
- padding: 0.375rem;
311
- background-color: var(--tt-dropdown-menu-bg-color);
312
- color: var(--tt-dropdown-menu-text-color);
313
- box-shadow: var(--tt-shadow-elevated-md);
314
- overflow: hidden;
315
- transform: translateX(-50%);
316
- animation: dropdown-in 100ms ease forwards;
2239
+ ============================================================ */
2240
+ /* --- Content --- */
2241
+ .tiptap-dropdown-menu-content {
2242
+ --slide-x: 0px;
2243
+ --slide-y: 0px;
2244
+ --padding: 0.375rem;
2245
+ position: relative;
2246
+ z-index: 50;
2247
+ min-width: 8rem;
2248
+ max-height: var(--radix-dropdown-menu-content-available-height);
2249
+ overflow-x: hidden;
2250
+ overflow-y: auto;
2251
+ border-radius: calc(var(--padding) + var(--tt-radius-lg));
2252
+ padding: 0.375rem;
2253
+ background-color: var(--tt-dropdown-menu-bg-color);
2254
+ color: var(--tt-dropdown-menu-text-color);
2255
+ box-shadow: var(--tt-shadow-elevated-md);
2256
+ transform-origin: var(--radix-dropdown-menu-content-transform-origin);
2257
+ transition-duration: 100ms;
2258
+ }
2259
+
2260
+ .tiptap-dropdown-menu-content[data-side=bottom] {
2261
+ --slide-y: -0.5rem;
317
2262
  }
318
2263
 
319
- .notra-editor .tiptap-dropdown-menu-group {
320
- display: flex;
321
- flex-direction: column;
2264
+ .tiptap-dropdown-menu-content[data-side=top] {
2265
+ --slide-y: 0.5rem;
322
2266
  }
323
2267
 
2268
+ .tiptap-dropdown-menu-content[data-side=left] {
2269
+ --slide-x: 0.5rem;
2270
+ }
2271
+
2272
+ .tiptap-dropdown-menu-content[data-side=right] {
2273
+ --slide-x: -0.5rem;
2274
+ }
2275
+
2276
+ .tiptap-dropdown-menu-content[data-state=open] {
2277
+ animation: dropdown-in 100ms ease forwards;
2278
+ }
2279
+
2280
+ .tiptap-dropdown-menu-content[data-state=closed] {
2281
+ animation: dropdown-out 100ms ease forwards;
2282
+ overflow: hidden;
2283
+ }
2284
+
2285
+ /* --- Sub Content --- */
2286
+ .tiptap-dropdown-menu-sub-content {
2287
+ --slide-x: 0px;
2288
+ --slide-y: 0px;
2289
+ --padding: 0.375rem;
2290
+ z-index: 50;
2291
+ min-width: 6rem;
2292
+ overflow: hidden;
2293
+ border-radius: calc(var(--padding) + var(--tt-radius-lg));
2294
+ padding: 0.25rem;
2295
+ background-color: var(--tt-dropdown-menu-bg-color);
2296
+ box-shadow: var(--tt-shadow-elevated-md);
2297
+ color: var(--tt-dropdown-menu-text-color);
2298
+ transform-origin: var(--radix-dropdown-menu-content-transform-origin);
2299
+ transition-duration: 100ms;
2300
+ }
2301
+
2302
+ .tiptap-dropdown-menu-sub-content[data-side=bottom] {
2303
+ --slide-y: -0.5rem;
2304
+ }
2305
+
2306
+ .tiptap-dropdown-menu-sub-content[data-side=top] {
2307
+ --slide-y: 0.5rem;
2308
+ }
2309
+
2310
+ .tiptap-dropdown-menu-sub-content[data-side=left] {
2311
+ --slide-x: 0.5rem;
2312
+ }
2313
+
2314
+ .tiptap-dropdown-menu-sub-content[data-side=right] {
2315
+ --slide-x: -0.5rem;
2316
+ }
2317
+
2318
+ .tiptap-dropdown-menu-sub-content[data-state=open] {
2319
+ animation: dropdown-in 100ms ease forwards;
2320
+ }
2321
+
2322
+ .tiptap-dropdown-menu-sub-content[data-state=closed] {
2323
+ animation: dropdown-out 100ms ease forwards;
2324
+ }
2325
+
2326
+ /* Shared enter/exit keyframes — slide direction driven by --slide-x/y on the element */
324
2327
  @keyframes dropdown-in {
325
- from {
326
- opacity: 0;
327
- transform: translateX(-50%) scale(0.95) translateY(-0.25rem);
328
- }
329
- to {
330
- opacity: 1;
331
- transform: translateX(-50%) scale(1) translateY(0);
332
- }
2328
+ from {
2329
+ opacity: 0;
2330
+ transform: scale(0.95) translate(var(--slide-x), var(--slide-y));
2331
+ }
2332
+ to {
2333
+ opacity: 1;
2334
+ transform: scale(1) translate(0, 0);
2335
+ }
2336
+ }
2337
+ @keyframes dropdown-out {
2338
+ from {
2339
+ opacity: 1;
2340
+ transform: scale(1) translate(0, 0);
2341
+ }
2342
+ to {
2343
+ opacity: 0;
2344
+ transform: scale(0.95) translate(var(--slide-x), var(--slide-y));
2345
+ }
2346
+ }
2347
+ /* --- Label --- */
2348
+ .tiptap-dropdown-menu-label {
2349
+ padding: 0.75rem 0.5rem 0.25rem;
2350
+ font-size: 0.75rem;
2351
+ font-weight: 600;
2352
+ line-height: normal;
2353
+ text-transform: capitalize;
2354
+ color: var(--tt-dropdown-menu-label-color);
333
2355
  }
334
2356
 
335
- /* =====================
336
- Dark Mode Overrides
337
- ===================== */
338
- .dark .notra-editor {
339
- --notra-cursor-color: var(--tt-brand-color-400);
340
- --notra-selection-color: rgba(122, 82, 255, 0.2);
341
- --notra-placeholder-color: var(--tt-gray-dark-a-400);
2357
+ .tiptap-dropdown-menu-label[data-inset=true] {
2358
+ padding-left: 1.75rem;
2359
+ }
342
2360
 
343
- /* Toolbar */
344
- --tt-toolbar-bg-color: var(--black);
345
- --tt-toolbar-border-color: var(--tt-gray-dark-a-50);
2361
+ .tiptap-dropdown-menu-group,
2362
+ .tiptap-dropdown-menu-group[data-orientation=vertical] {
2363
+ display: flex;
2364
+ flex-direction: column;
2365
+ }
346
2366
 
347
- /* Ghost button colors */
348
- --tt-button-hover-bg-color: var(--tt-gray-dark-200);
349
- --tt-button-default-icon-color: var(--tt-gray-dark-a-600);
350
- --tt-button-hover-icon-color: var(--tt-gray-dark-a-900);
351
- --tt-button-disabled-icon-color: var(--tt-gray-dark-a-400);
2367
+ .tiptap-dropdown-menu-group[data-orientation=horizontal] {
2368
+ display: flex;
2369
+ flex-direction: row;
2370
+ align-items: center;
2371
+ gap: 0.25rem;
2372
+ }
352
2373
 
353
- /* Separator */
354
- --tt-separator-color: var(--tt-gray-dark-a-200);
2374
+ .tiptap-popover {
2375
+ --tt-popover-bg-color: var(--white);
2376
+ --tt-popover-border-color: var(--tt-gray-light-a-100);
2377
+ --tt-popover-text-color: var(--tt-gray-light-a-600);
2378
+ }
355
2379
 
356
- /* Shadow */
357
- --tt-shadow-elevated-md:
358
- 0px 16px 48px 0px rgba(0, 0, 0, 0.5), 0px 12px 24px 0px rgba(0, 0, 0, 0.24),
359
- 0px 6px 8px 0px rgba(0, 0, 0, 0.22), 0px 2px 3px 0px rgba(0, 0, 0, 0.12);
2380
+ :root.dark,
2381
+ .dark {
2382
+ --tt-popover-border-color: var(--tt-gray-dark-a-50);
2383
+ --tt-popover-bg-color: var(--tt-gray-dark-50);
2384
+ --tt-popover-text-color: var(--tt-gray-dark-a-600);
2385
+ }
360
2386
 
361
- /* Dropdown menu */
362
- --tt-dropdown-menu-bg-color: var(--tt-gray-dark-50);
363
- --tt-dropdown-menu-text-color: var(--tt-gray-dark-a-600);
2387
+ /* --------------------------------------------
2388
+ --------- POPOVER STYLING SETTINGS -----------
2389
+ -------------------------------------------- */
2390
+ .tiptap-popover {
2391
+ z-index: 50;
2392
+ outline: none;
2393
+ transform-origin: var(--radix-popover-content-transform-origin);
2394
+ max-height: var(--radix-popover-content-available-height);
2395
+ }
2396
+ .tiptap-popover > * {
2397
+ max-height: var(--radix-popover-content-available-height);
2398
+ }
2399
+ .tiptap-popover {
2400
+ /* Animation states */
2401
+ }
2402
+ .tiptap-popover[data-state=open] {
2403
+ animation: fadeIn 150ms cubic-bezier(0.16, 1, 0.3, 1), zoomIn 150ms cubic-bezier(0.16, 1, 0.3, 1);
2404
+ }
2405
+ .tiptap-popover[data-state=closed] {
2406
+ animation: fadeOut 150ms cubic-bezier(0.16, 1, 0.3, 1), zoomOut 150ms cubic-bezier(0.16, 1, 0.3, 1);
2407
+ }
2408
+ .tiptap-popover {
2409
+ /* Position-based animations */
2410
+ }
2411
+ .tiptap-popover[data-side=top], .tiptap-popover[data-side=top-start], .tiptap-popover[data-side=top-end] {
2412
+ animation: slideFromBottom 150ms cubic-bezier(0.16, 1, 0.3, 1);
2413
+ }
2414
+ .tiptap-popover[data-side=right], .tiptap-popover[data-side=right-start], .tiptap-popover[data-side=right-end] {
2415
+ animation: slideFromLeft 150ms cubic-bezier(0.16, 1, 0.3, 1);
2416
+ }
2417
+ .tiptap-popover[data-side=bottom], .tiptap-popover[data-side=bottom-start], .tiptap-popover[data-side=bottom-end] {
2418
+ animation: slideFromTop 150ms cubic-bezier(0.16, 1, 0.3, 1);
2419
+ }
2420
+ .tiptap-popover[data-side=left], .tiptap-popover[data-side=left-start], .tiptap-popover[data-side=left-end] {
2421
+ animation: slideFromRight 150ms cubic-bezier(0.16, 1, 0.3, 1);
364
2422
  }
365
2423
 
366
- /* =====================
367
- Button Active State (dark)
368
- ===================== */
369
- .dark .notra-editor .tiptap-button[data-active-state='on'] {
370
- background-color: var(--tt-gray-dark-a-100);
371
- color: var(--tt-brand-color-400);
2424
+ .tiptap-tooltip {
2425
+ --tt-tooltip-bg: var(--tt-gray-light-900);
2426
+ --tt-tooltip-text: var(--white);
2427
+ --tt-kbd: var(--tt-gray-dark-a-400);
2428
+ }
2429
+ .dark .tiptap-tooltip {
2430
+ --tt-tooltip-bg: var(--white);
2431
+ --tt-tooltip-text: var(--tt-gray-light-600);
2432
+ --tt-kbd: var(--tt-gray-light-a-400);
2433
+ }
2434
+
2435
+ .tiptap-tooltip {
2436
+ z-index: 50;
2437
+ overflow: hidden;
2438
+ border-radius: var(--tt-radius-md, 0.375rem);
2439
+ background-color: var(--tt-tooltip-bg);
2440
+ padding: 0.375rem 0.5rem;
2441
+ font-size: 0.75rem;
2442
+ font-weight: 500;
2443
+ color: var(--tt-tooltip-text);
2444
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
2445
+ text-align: center;
2446
+ }
2447
+ .tiptap-tooltip kbd {
2448
+ display: inline-block;
2449
+ text-align: center;
2450
+ vertical-align: baseline;
2451
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
2452
+ text-transform: capitalize;
2453
+ color: var(--tt-kbd);
372
2454
  }
373
2455
 
374
- .dark
375
- .notra-editor
376
- .tiptap-button[data-active-state='on']:hover:not([disabled]) {
377
- background-color: var(--tt-gray-dark-200);
2456
+ :root {
2457
+ --tiptap-card-bg-color: var(--white);
2458
+ --tiptap-card-border-color: var(--tt-gray-light-a-100);
2459
+ --tiptap-card-group-label-color: var(--tt-gray-light-a-800);
378
2460
  }
379
2461
 
380
- /* =====================
381
- Button Extras (dark)
382
- ===================== */
383
- .dark .notra-editor .tiptap-button-dropdown-arrows {
384
- color: var(--tt-gray-dark-a-600);
2462
+ .dark {
2463
+ --tiptap-card-bg-color: var(--tt-gray-dark-50);
2464
+ --tiptap-card-border-color: var(--tt-gray-dark-a-100);
2465
+ --tiptap-card-group-label-color: var(--tt-gray-dark-a-800);
2466
+ }
2467
+
2468
+ .tiptap-card {
2469
+ --padding: 0.375rem;
2470
+ --border-width: 1px;
2471
+ border-radius: calc(var(--padding) + var(--tt-radius-lg));
2472
+ box-shadow: var(--tt-shadow-elevated-md);
2473
+ background-color: var(--tiptap-card-bg-color);
2474
+ border: 1px solid var(--tiptap-card-border-color);
2475
+ display: flex;
2476
+ flex-direction: column;
2477
+ outline: none;
2478
+ align-items: center;
2479
+ position: relative;
2480
+ min-width: 0;
2481
+ word-wrap: break-word;
2482
+ background-clip: border-box;
2483
+ }
2484
+
2485
+ .tiptap-card-header {
2486
+ padding: 0.375rem;
2487
+ flex: 0 0 auto;
2488
+ display: flex;
2489
+ align-items: center;
2490
+ justify-content: space-between;
2491
+ width: 100%;
2492
+ border-bottom: var(--border-width) solid var(--tiptap-card-border-color);
2493
+ }
2494
+
2495
+ .tiptap-card-body {
2496
+ padding: 0.375rem;
2497
+ flex: 1 1 auto;
2498
+ overflow-y: auto;
2499
+ }
2500
+
2501
+ .tiptap-card-item-group {
2502
+ position: relative;
2503
+ display: flex;
2504
+ vertical-align: middle;
2505
+ min-width: max-content;
2506
+ }
2507
+ .tiptap-card-item-group[data-orientation=vertical] {
2508
+ flex-direction: column;
2509
+ justify-content: center;
2510
+ }
2511
+ .tiptap-card-item-group[data-orientation=horizontal] {
2512
+ gap: 0.25rem;
2513
+ flex-direction: row;
2514
+ align-items: center;
2515
+ }
2516
+
2517
+ .tiptap-card-group-label {
2518
+ padding: 0.75rem 0.5rem 0.25rem;
2519
+ line-height: normal;
2520
+ font-size: 0.75rem;
2521
+ font-weight: 600;
2522
+ line-height: normal;
2523
+ text-transform: capitalize;
2524
+ color: var(--tiptap-card-group-label-color);
2525
+ }
2526
+
2527
+ :root {
2528
+ --tt-input-placeholder: var(--tt-gray-light-a-400);
2529
+ --tt-input-border: var(--tt-gray-light-a-200);
2530
+ --tt-input-border-focus: var(--tt-gray-light-a-300);
2531
+ }
2532
+
2533
+ .dark {
2534
+ --tt-input-placeholder: var(--tt-gray-dark-a-400);
2535
+ --tt-input-border: var(--tt-gray-dark-a-200);
2536
+ --tt-input-border-focus: var(--tt-gray-dark-a-300);
2537
+ }
2538
+
2539
+ .tiptap-input {
2540
+ width: 100%;
2541
+ min-width: 0;
2542
+ height: 2rem;
2543
+ padding: 0.25rem 0.625rem;
2544
+ border-radius: var(--tt-radius-md);
2545
+ border: 1px solid var(--tt-input-border);
2546
+ background: transparent;
2547
+ font-size: 1rem;
2548
+ outline: none;
2549
+ transition: color, background-color, border-color 150ms;
2550
+ }
2551
+ .tiptap-input::placeholder {
2552
+ color: var(--tt-input-placeholder);
2553
+ }
2554
+
2555
+ .tiptap-input:focus-visible {
2556
+ border-color: var(--tt-input-border-focus);
2557
+ }
2558
+
2559
+ @media (min-width: 768px) {
2560
+ .tiptap-input {
2561
+ font-size: 0.875rem;
2562
+ }
2563
+ }
2564
+ .tiptap-badge {
2565
+ font-size: 0.625rem;
2566
+ font-weight: 700;
2567
+ font-feature-settings: "salt" on, "cv01" on;
2568
+ line-height: 1.15;
2569
+ height: 1.25rem;
2570
+ min-width: 1.25rem;
2571
+ padding: 0.25rem;
2572
+ display: flex;
2573
+ align-items: center;
2574
+ justify-content: center;
2575
+ border: solid 1px;
2576
+ border-radius: var(--tt-radius-sm, 0.375rem);
2577
+ transition-property: background, color, opacity;
2578
+ transition-duration: var(--tt-transition-duration-default);
2579
+ transition-timing-function: var(--tt-transition-easing-default);
2580
+ /* button size large */
2581
+ }
2582
+ .tiptap-badge[data-size=large] {
2583
+ font-size: 0.75rem;
2584
+ height: 1.5rem;
2585
+ min-width: 1.5rem;
2586
+ padding: 0.375rem;
2587
+ border-radius: var(--tt-radius-md, 0.375rem);
2588
+ }
2589
+ .tiptap-badge {
2590
+ /* button size small */
2591
+ }
2592
+ .tiptap-badge[data-size=small] {
2593
+ height: 1rem;
2594
+ min-width: 1rem;
2595
+ padding: 0.125rem;
2596
+ border-radius: var(--tt-radius-xs, 0.25rem);
2597
+ }
2598
+ .tiptap-badge {
2599
+ /* trim / expand text of the button */
2600
+ }
2601
+ .tiptap-badge .tiptap-badge-text {
2602
+ padding: 0 0.125rem;
2603
+ flex-grow: 1;
2604
+ text-align: left;
2605
+ }
2606
+ .tiptap-badge[data-text-trim=on] .tiptap-badge-text {
2607
+ text-overflow: ellipsis;
2608
+ overflow: hidden;
2609
+ }
2610
+ .tiptap-badge {
2611
+ /* standard icon, what is used */
2612
+ }
2613
+ .tiptap-badge .tiptap-badge-icon {
2614
+ pointer-events: none;
2615
+ flex-shrink: 0;
2616
+ width: 0.625rem;
2617
+ height: 0.625rem;
2618
+ }
2619
+ .tiptap-badge[data-size=large] .tiptap-badge-icon {
2620
+ width: 0.75rem;
2621
+ height: 0.75rem;
2622
+ }
2623
+
2624
+ /* --------------------------------------------
2625
+ ----------- BADGE COLOR SETTINGS -------------
2626
+ -------------------------------------------- */
2627
+ .tiptap-badge {
2628
+ background-color: var(--tt-badge-bg-color);
2629
+ border-color: var(--tt-badge-border-color);
2630
+ color: var(--tt-badge-text-color);
2631
+ }
2632
+ .tiptap-badge .tiptap-badge-icon {
2633
+ color: var(--tt-badge-icon-color);
2634
+ }
2635
+ .tiptap-badge {
2636
+ /* Emphasized */
2637
+ }
2638
+ .tiptap-badge[data-appearance=emphasized] {
2639
+ background-color: var(--tt-badge-bg-color-emphasized);
2640
+ border-color: var(--tt-badge-border-color-emphasized);
2641
+ color: var(--tt-badge-text-color-emphasized);
2642
+ }
2643
+ .tiptap-badge[data-appearance=emphasized] .tiptap-badge-icon {
2644
+ color: var(--tt-badge-icon-color-emphasized);
2645
+ }
2646
+ .tiptap-badge {
2647
+ /* Subdued */
2648
+ }
2649
+ .tiptap-badge[data-appearance=subdued] {
2650
+ background-color: var(--tt-badge-bg-color-subdued);
2651
+ border-color: var(--tt-badge-border-color-subdued);
2652
+ color: var(--tt-badge-text-color-subdued);
2653
+ }
2654
+ .tiptap-badge[data-appearance=subdued] .tiptap-badge-icon {
2655
+ color: var(--tt-badge-icon-color-subdued);
2656
+ }
2657
+
2658
+ .tiptap-badge {
2659
+ /**************************************************
2660
+ Default
2661
+ **************************************************/
2662
+ /* Light mode */
2663
+ --tt-badge-border-color: var(--tt-gray-light-a-200);
2664
+ --tt-badge-border-color-subdued: var(--tt-gray-light-a-200);
2665
+ --tt-badge-border-color-emphasized: var(--tt-gray-light-a-600);
2666
+ --tt-badge-text-color: var(--tt-gray-light-a-500);
2667
+ --tt-badge-text-color-subdued: var(
2668
+ --tt-gray-light-a-400
2669
+ );
2670
+ --tt-badge-text-color-emphasized: var(
2671
+ --tt-gray-light-a-600
2672
+ );
2673
+ --tt-badge-bg-color: var(--white);
2674
+ --tt-badge-bg-color-subdued: var(--white);
2675
+ --tt-badge-bg-color-emphasized: var(--white);
2676
+ --tt-badge-icon-color: var(--tt-gray-light-a-500);
2677
+ --tt-badge-icon-color-subdued: var(
2678
+ --tt-gray-light-a-400
2679
+ );
2680
+ --tt-badge-icon-color-emphasized: var(
2681
+ --tt-brand-color-600
2682
+ );
2683
+ /* Dark mode */
2684
+ }
2685
+ .dark .tiptap-badge {
2686
+ --tt-badge-border-color: var(--tt-gray-dark-a-200);
2687
+ --tt-badge-border-color-subdued: var(--tt-gray-dark-a-200);
2688
+ --tt-badge-border-color-emphasized: var(--tt-gray-dark-a-500);
2689
+ --tt-badge-text-color: var(--tt-gray-dark-a-500);
2690
+ --tt-badge-text-color-subdued: var(
2691
+ --tt-gray-dark-a-400
2692
+ );
2693
+ --tt-badge-text-color-emphasized: var(
2694
+ --tt-gray-dark-a-600
2695
+ );
2696
+ --tt-badge-bg-color: var(--black);
2697
+ --tt-badge-bg-color-subdued: var(--black);
2698
+ --tt-badge-bg-color-emphasized: var(--black);
2699
+ --tt-badge-icon-color: var(--tt-gray-dark-a-500);
2700
+ --tt-badge-icon-color-subdued: var(
2701
+ --tt-gray-dark-a-400
2702
+ );
2703
+ --tt-badge-icon-color-emphasized: var(
2704
+ --tt-brand-color-400
2705
+ );
2706
+ }
2707
+ .tiptap-badge {
2708
+ /**************************************************
2709
+ Ghost
2710
+ **************************************************/
2711
+ }
2712
+ .tiptap-badge[data-style=ghost] {
2713
+ /* Light mode */
2714
+ --tt-badge-border-color: var(--tt-gray-light-a-200);
2715
+ --tt-badge-border-color-subdued: var(--tt-gray-light-a-200);
2716
+ --tt-badge-border-color-emphasized: var(--tt-gray-light-a-600);
2717
+ --tt-badge-text-color: var(--tt-gray-light-a-500);
2718
+ --tt-badge-text-color-subdued: var(
2719
+ --tt-gray-light-a-400
2720
+ );
2721
+ --tt-badge-text-color-emphasized: var(
2722
+ --tt-gray-light-a-600
2723
+ );
2724
+ --tt-badge-bg-color: var(--transparent);
2725
+ --tt-badge-bg-color-subdued: var(--transparent);
2726
+ --tt-badge-bg-color-emphasized: var(--transparent);
2727
+ --tt-badge-icon-color: var(--tt-gray-light-a-500);
2728
+ --tt-badge-icon-color-subdued: var(
2729
+ --tt-gray-light-a-400
2730
+ );
2731
+ --tt-badge-icon-color-emphasized: var(
2732
+ --tt-brand-color-600
2733
+ );
2734
+ /* Dark mode */
2735
+ }
2736
+ .dark .tiptap-badge[data-style=ghost] {
2737
+ --tt-badge-border-color: var(--tt-gray-dark-a-200);
2738
+ --tt-badge-border-color-subdued: var(--tt-gray-dark-a-200);
2739
+ --tt-badge-border-color-emphasized: var(--tt-gray-dark-a-500);
2740
+ --tt-badge-text-color: var(--tt-gray-dark-a-500);
2741
+ --tt-badge-text-color-subdued: var(
2742
+ --tt-gray-dark-a-400
2743
+ );
2744
+ --tt-badge-text-color-emphasized: var(
2745
+ --tt-gray-dark-a-600
2746
+ );
2747
+ --tt-badge-bg-color: var(--transparent);
2748
+ --tt-badge-bg-color-subdued: var(--transparent);
2749
+ --tt-badge-bg-color-emphasized: var(--transparent);
2750
+ --tt-badge-icon-color: var(--tt-gray-dark-a-500);
2751
+ --tt-badge-icon-color-subdued: var(
2752
+ --tt-gray-dark-a-400
2753
+ );
2754
+ --tt-badge-icon-color-emphasized: var(
2755
+ --tt-brand-color-400
2756
+ );
2757
+ }
2758
+ .tiptap-badge {
2759
+ /**************************************************
2760
+ Gray
2761
+ **************************************************/
2762
+ }
2763
+ .tiptap-badge[data-style=gray] {
2764
+ /* Light mode */
2765
+ --tt-badge-border-color: var(--tt-gray-light-a-200);
2766
+ --tt-badge-border-color-subdued: var(--tt-gray-light-a-200);
2767
+ --tt-badge-border-color-emphasized: var(--tt-gray-light-a-500);
2768
+ --tt-badge-text-color: var(--tt-gray-light-a-500);
2769
+ --tt-badge-text-color-subdued: var(
2770
+ --tt-gray-light-a-400
2771
+ );
2772
+ --tt-badge-text-color-emphasized: var(--white);
2773
+ --tt-badge-bg-color: var(--tt-gray-light-a-100);
2774
+ --tt-badge-bg-color-subdued: var(
2775
+ --tt-gray-light-a-50
2776
+ );
2777
+ --tt-badge-bg-color-emphasized: var(
2778
+ --tt-gray-light-a-700
2779
+ );
2780
+ --tt-badge-icon-color: var(--tt-gray-light-a-500);
2781
+ --tt-badge-icon-color-subdued: var(
2782
+ --tt-gray-light-a-400
2783
+ );
2784
+ --tt-badge-icon-color-emphasized: var(--white);
2785
+ /* Dark mode */
2786
+ }
2787
+ .dark .tiptap-badge[data-style=gray] {
2788
+ --tt-badge-border-color: var(--tt-gray-dark-a-200);
2789
+ --tt-badge-border-color-subdued: var(--tt-gray-dark-a-200);
2790
+ --tt-badge-border-color-emphasized: var(--tt-gray-dark-a-500);
2791
+ --tt-badge-text-color: var(--tt-gray-dark-a-500);
2792
+ --tt-badge-text-color-subdued: var(
2793
+ --tt-gray-dark-a-400
2794
+ );
2795
+ --tt-badge-text-color-emphasized: var(--black);
2796
+ --tt-badge-bg-color: var(--tt-gray-dark-a-100);
2797
+ --tt-badge-bg-color-subdued: var(
2798
+ --tt-gray-dark-a-50
2799
+ );
2800
+ --tt-badge-bg-color-emphasized: var(
2801
+ --tt-gray-dark-a-800
2802
+ );
2803
+ --tt-badge-icon-color: var(--tt-gray-dark-a-500);
2804
+ --tt-badge-icon-color-subdued: var(
2805
+ --tt-gray-dark-a-400
2806
+ );
2807
+ --tt-badge-icon-color-emphasized: var(--black);
2808
+ }
2809
+ .tiptap-badge {
2810
+ /**************************************************
2811
+ Green
2812
+ **************************************************/
2813
+ }
2814
+ .tiptap-badge[data-style=green] {
2815
+ /* Light mode */
2816
+ --tt-badge-border-color: var(--tt-color-green-inc-2);
2817
+ --tt-badge-border-color-subdued: var(--tt-color-green-inc-3);
2818
+ --tt-badge-border-color-emphasized: var(--tt-color-green-dec-2);
2819
+ --tt-badge-text-color: var(--tt-color-green-dec-3);
2820
+ --tt-badge-text-color-subdued: var(
2821
+ --tt-color-green-dec-2
2822
+ );
2823
+ --tt-badge-text-color-emphasized: var(
2824
+ --tt-color-green-inc-5
2825
+ );
2826
+ --tt-badge-bg-color: var(--tt-color-green-inc-4);
2827
+ --tt-badge-bg-color-subdued: var(
2828
+ --tt-color-green-inc-5
2829
+ );
2830
+ --tt-badge-bg-color-emphasized: var(
2831
+ --tt-color-green-dec-1
2832
+ );
2833
+ --tt-badge-icon-color: var(--tt-color-green-dec-3);
2834
+ --tt-badge-icon-color-subdued: var(
2835
+ --tt-color-green-dec-2
2836
+ );
2837
+ --tt-badge-icon-color-emphasized: var(
2838
+ --tt-color-green-inc-5
2839
+ );
2840
+ /* Dark mode */
2841
+ }
2842
+ .dark .tiptap-badge[data-style=green] {
2843
+ --tt-badge-border-color: var(--tt-color-green-dec-2);
2844
+ --tt-badge-border-color-subdued: var(--tt-color-green-dec-3);
2845
+ --tt-badge-border-color-emphasized: var(--tt-color-green-base);
2846
+ --tt-badge-text-color: var(--tt-color-green-inc-3);
2847
+ --tt-badge-text-color-subdued: var(
2848
+ --tt-color-green-inc-2
2849
+ );
2850
+ --tt-badge-text-color-emphasized: var(
2851
+ --tt-color-green-dec-5
2852
+ );
2853
+ --tt-badge-bg-color: var(--tt-color-green-dec-4);
2854
+ --tt-badge-bg-color-subdued: var(
2855
+ --tt-color-green-dec-5
2856
+ );
2857
+ --tt-badge-bg-color-emphasized: var(
2858
+ --tt-color-green-inc-1
2859
+ );
2860
+ --tt-badge-icon-color: var(--tt-color-green-inc-3);
2861
+ --tt-badge-icon-color-subdued: var(
2862
+ --tt-color-green-inc-2
2863
+ );
2864
+ --tt-badge-icon-color-emphasized: var(
2865
+ --tt-color-green-dec-5
2866
+ );
2867
+ }
2868
+ .tiptap-badge {
2869
+ /**************************************************
2870
+ Yellow
2871
+ **************************************************/
2872
+ }
2873
+ .tiptap-badge[data-style=yellow] {
2874
+ /* Light mode */
2875
+ --tt-badge-border-color: var(--tt-color-yellow-inc-2);
2876
+ --tt-badge-border-color-subdued: var(--tt-color-yellow-inc-3);
2877
+ --tt-badge-border-color-emphasized: var(--tt-color-yellow-dec-1);
2878
+ --tt-badge-text-color: var(--tt-color-yellow-dec-3);
2879
+ --tt-badge-text-color-subdued: var(
2880
+ --tt-color-yellow-dec-2
2881
+ );
2882
+ --tt-badge-text-color-emphasized: var(
2883
+ --tt-color-yellow-dec-3
2884
+ );
2885
+ --tt-badge-bg-color: var(--tt-color-yellow-inc-4);
2886
+ --tt-badge-bg-color-subdued: var(
2887
+ --tt-color-yellow-inc-5
2888
+ );
2889
+ --tt-badge-bg-color-emphasized: var(
2890
+ --tt-color-yellow-base
2891
+ );
2892
+ --tt-badge-icon-color: var(--tt-color-yellow-dec-3);
2893
+ --tt-badge-icon-color-subdued: var(
2894
+ --tt-color-yellow-dec-2
2895
+ );
2896
+ --tt-badge-icon-color-emphasized: var(
2897
+ --tt-color-yellow-dec-3
2898
+ );
2899
+ /* Dark mode */
2900
+ }
2901
+ .dark .tiptap-badge[data-style=yellow] {
2902
+ --tt-badge-border-color: var(--tt-color-yellow-dec-2);
2903
+ --tt-badge-border-color-subdued: var(--tt-color-yellow-dec-3);
2904
+ --tt-badge-border-color-emphasized: var(--tt-color-yellow-inc-1);
2905
+ --tt-badge-text-color: var(--tt-color-yellow-inc-3);
2906
+ --tt-badge-text-color-subdued: var(
2907
+ --tt-color-yellow-inc-2
2908
+ );
2909
+ --tt-badge-text-color-emphasized: var(
2910
+ --tt-color-yellow-dec-3
2911
+ );
2912
+ --tt-badge-bg-color: var(--tt-color-yellow-dec-4);
2913
+ --tt-badge-bg-color-subdued: var(
2914
+ --tt-color-yellow-dec-5
2915
+ );
2916
+ --tt-badge-bg-color-emphasized: var(
2917
+ --tt-color-yellow-base
2918
+ );
2919
+ --tt-badge-icon-color: var(--tt-color-yellow-inc-3);
2920
+ --tt-badge-icon-color-subdued: var(
2921
+ --tt-color-yellow-inc-2
2922
+ );
2923
+ --tt-badge-icon-color-emphasized: var(
2924
+ --tt-color-yellow-dec-3
2925
+ );
2926
+ }
2927
+ .tiptap-badge {
2928
+ /**************************************************
2929
+ Red
2930
+ **************************************************/
2931
+ }
2932
+ .tiptap-badge[data-style=red] {
2933
+ /* Light mode */
2934
+ --tt-badge-border-color: var(--tt-color-red-inc-2);
2935
+ --tt-badge-border-color-subdued: var(--tt-color-red-inc-3);
2936
+ --tt-badge-border-color-emphasized: var(--tt-color-red-dec-2);
2937
+ --tt-badge-text-color: var(--tt-color-red-dec-3);
2938
+ --tt-badge-text-color-subdued: var(
2939
+ --tt-color-red-dec-2
2940
+ );
2941
+ --tt-badge-text-color-emphasized: var(
2942
+ --tt-color-red-inc-5
2943
+ );
2944
+ --tt-badge-bg-color: var(--tt-color-red-inc-4);
2945
+ --tt-badge-bg-color-subdued: var(
2946
+ --tt-color-red-inc-5
2947
+ );
2948
+ --tt-badge-bg-color-emphasized: var(
2949
+ --tt-color-red-dec-1
2950
+ );
2951
+ --tt-badge-icon-color: var(--tt-color-red-dec-3);
2952
+ --tt-badge-icon-color-subdued: var(
2953
+ --tt-color-red-dec-2
2954
+ );
2955
+ --tt-badge-icon-color-emphasized: var(
2956
+ --tt-color-red-inc-5
2957
+ );
2958
+ /* Dark mode */
2959
+ }
2960
+ .dark .tiptap-badge[data-style=red] {
2961
+ --tt-badge-border-color: var(--tt-color-red-dec-2);
2962
+ --tt-badge-border-color-subdued: var(--tt-color-red-dec-3);
2963
+ --tt-badge-border-color-emphasized: var(--tt-color-red-base);
2964
+ --tt-badge-text-color: var(--tt-color-red-inc-3);
2965
+ --tt-badge-text-color-subdued: var(
2966
+ --tt-color-red-inc-2
2967
+ );
2968
+ --tt-badge-text-color-emphasized: var(
2969
+ --tt-color-red-dec-5
2970
+ );
2971
+ --tt-badge-bg-color: var(--tt-color-red-dec-4);
2972
+ --tt-badge-bg-color-subdued: var(
2973
+ --tt-color-red-dec-5
2974
+ );
2975
+ --tt-badge-bg-color-emphasized: var(
2976
+ --tt-color-red-inc-1
2977
+ );
2978
+ --tt-badge-icon-color: var(--tt-color-red-inc-3);
2979
+ --tt-badge-icon-color-subdued: var(
2980
+ --tt-color-red-inc-2
2981
+ );
2982
+ --tt-badge-icon-color-emphasized: var(
2983
+ --tt-color-red-dec-5
2984
+ );
2985
+ }
2986
+ .tiptap-badge {
2987
+ /**************************************************
2988
+ Brand
2989
+ **************************************************/
2990
+ }
2991
+ .tiptap-badge[data-style=brand] {
2992
+ /* Light mode */
2993
+ --tt-badge-border-color: var(--tt-brand-color-300);
2994
+ --tt-badge-border-color-subdued: var(--tt-brand-color-200);
2995
+ --tt-badge-border-color-emphasized: var(--tt-brand-color-600);
2996
+ --tt-badge-text-color: var(--tt-brand-color-800);
2997
+ --tt-badge-text-color-subdued: var(
2998
+ --tt-brand-color-700
2999
+ );
3000
+ --tt-badge-text-color-emphasized: var(
3001
+ --tt-brand-color-50
3002
+ );
3003
+ --tt-badge-bg-color: var(--tt-brand-color-100);
3004
+ --tt-badge-bg-color-subdued: var(
3005
+ --tt-brand-color-50
3006
+ );
3007
+ --tt-badge-bg-color-emphasized: var(
3008
+ --tt-brand-color-600
3009
+ );
3010
+ --tt-badge-icon-color: var(--tt-brand-color-800);
3011
+ --tt-badge-icon-color-subdued: var(
3012
+ --tt-brand-color-700
3013
+ );
3014
+ --tt-badge-icon-color-emphasized: var(
3015
+ --tt-brand-color-100
3016
+ );
3017
+ /* Dark mode */
3018
+ }
3019
+ .dark .tiptap-badge[data-style=brand] {
3020
+ --tt-badge-border-color: var(--tt-brand-color-700);
3021
+ --tt-badge-border-color-subdued: var(--tt-brand-color-800);
3022
+ --tt-badge-border-color-emphasized: var(--tt-brand-color-400);
3023
+ --tt-badge-text-color: var(--tt-brand-color-200);
3024
+ --tt-badge-text-color-subdued: var(
3025
+ --tt-brand-color-300
3026
+ );
3027
+ --tt-badge-text-color-emphasized: var(
3028
+ --tt-brand-color-950
3029
+ );
3030
+ --tt-badge-bg-color: var(--tt-brand-color-900);
3031
+ --tt-badge-bg-color-subdued: var(
3032
+ --tt-brand-color-950
3033
+ );
3034
+ --tt-badge-bg-color-emphasized: var(
3035
+ --tt-brand-color-400
3036
+ );
3037
+ --tt-badge-icon-color: var(--tt-brand-color-200);
3038
+ --tt-badge-icon-color-subdued: var(
3039
+ --tt-brand-color-300
3040
+ );
3041
+ --tt-badge-icon-color-emphasized: var(
3042
+ --tt-brand-color-900
3043
+ );
3044
+ }
3045
+
3046
+ .tiptap-badge-group {
3047
+ align-items: center;
3048
+ display: flex;
3049
+ flex-wrap: wrap;
3050
+ gap: 0.25rem;
3051
+ }
3052
+
3053
+ .tiptap-badge-group [data-orientation=vertical] {
3054
+ flex-direction: column;
3055
+ }
3056
+ .tiptap-badge-group [data-orientation=horizontal] {
3057
+ flex-direction: row;
3058
+ }
3059
+
3060
+ .tiptap-button-highlight {
3061
+ position: relative;
3062
+ width: 1.25rem;
3063
+ height: 1.25rem;
3064
+ margin: 0 -0.175rem;
3065
+ border-radius: var(--tt-radius-xl);
3066
+ background-color: var(--highlight-color);
3067
+ transition: transform 0.2s ease;
3068
+ }
3069
+ .tiptap-button-highlight::after {
3070
+ content: "";
3071
+ position: absolute;
3072
+ width: 100%;
3073
+ height: 100%;
3074
+ left: 0;
3075
+ top: 0;
3076
+ border-radius: inherit;
3077
+ box-sizing: border-box;
3078
+ border: 1px solid var(--highlight-color);
3079
+ filter: brightness(95%);
3080
+ mix-blend-mode: multiply;
3081
+ }
3082
+ .dark .tiptap-button-highlight::after {
3083
+ filter: brightness(140%);
3084
+ mix-blend-mode: lighten;
3085
+ }
3086
+
3087
+ .tiptap-button[data-active-state=on] .tiptap-button-highlight::after {
3088
+ filter: brightness(80%);
3089
+ }
3090
+ .dark .tiptap-button[data-active-state=on] .tiptap-button-highlight::after {
3091
+ filter: brightness(180%);
3092
+ }
3093
+
3094
+ .tiptap-link-input {
3095
+ font-size: 0.875rem;
3096
+ border: none;
3097
+ /* Clamp the input */
3098
+ min-width: 12rem;
3099
+ padding-right: 0;
3100
+ text-overflow: ellipsis;
3101
+ white-space: nowrap;
3102
+ }
3103
+ .tiptap-link-input:focus {
3104
+ text-overflow: clip;
3105
+ overflow: visible;
385
3106
  }