@elixpo/lixeditor 2.1.6

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.
@@ -0,0 +1,1154 @@
1
+ /* ===== No selection outline or drag handle for custom blocks ===== */
2
+
3
+ .blog-editor-wrapper [data-content-type="codeBlock"],
4
+ .blog-editor-wrapper [data-content-type="blockEquation"],
5
+ .blog-editor-wrapper [data-content-type="mermaidBlock"] {
6
+ outline: none !important;
7
+ box-shadow: none !important;
8
+ border-color: var(--border-default) !important;
9
+ }
10
+
11
+ /* Remove the blue selected ring BlockNote adds */
12
+ .blog-editor-wrapper [data-content-type="codeBlock"] *::selection,
13
+ .blog-editor-wrapper [data-content-type="blockEquation"] *::selection,
14
+ .blog-editor-wrapper [data-content-type="mermaidBlock"] *::selection {
15
+ background: transparent;
16
+ }
17
+
18
+ .blog-editor-wrapper .bn-block-outer[data-node-type="blockContainer"]:has([data-content-type="codeBlock"]) > .bn-block,
19
+ .blog-editor-wrapper .bn-block-outer[data-node-type="blockContainer"]:has([data-content-type="blockEquation"]) > .bn-block,
20
+ .blog-editor-wrapper .bn-block-outer[data-node-type="blockContainer"]:has([data-content-type="mermaidBlock"]) > .bn-block {
21
+ outline: none !important;
22
+ box-shadow: none !important;
23
+ }
24
+
25
+ /* ===== Code blocks ===== */
26
+
27
+ .blog-editor-wrapper [data-content-type="codeBlock"] {
28
+ background: var(--code-bg);
29
+ border: 1px solid var(--border-default);
30
+ border-radius: 10px;
31
+ font-family: 'lixCode', monospace;
32
+ padding: 4px 0;
33
+ margin: 12px 0;
34
+ overflow-x: auto;
35
+ -webkit-hyphens: none;
36
+ hyphens: none;
37
+ }
38
+
39
+ /* Light mode code block vars */
40
+ :root {
41
+ --code-bg: #f8f8fb;
42
+ --code-text: #3d3d50;
43
+ --code-lang-bg: #eeeef2;
44
+ --code-lang-text: #6b7280;
45
+ }
46
+
47
+ [data-theme="dark"] {
48
+ --code-bg: #0e1219;
49
+ --code-text: #c8d1e0;
50
+ --code-lang-bg: #1a2030;
51
+ --code-lang-text: #9ba8b9;
52
+ }
53
+
54
+ .blog-editor-wrapper [data-content-type="codeBlock"] code {
55
+ color: var(--code-text);
56
+ font-size: 0.84em;
57
+ font-family: inherit;
58
+ background: none;
59
+ padding: 0;
60
+ line-height: 1.7;
61
+ }
62
+
63
+ .blog-editor-wrapper [data-content-type="codeBlock"] [contenteditable] {
64
+ padding: 8px 16px !important;
65
+ -webkit-text-decorations-in-effect: none;
66
+ }
67
+
68
+ /* Kill spellcheck red squiggles inside code blocks */
69
+ .blog-editor-wrapper [data-content-type="codeBlock"] [contenteditable] * {
70
+ text-decoration: none !important;
71
+ -webkit-text-decoration: none !important;
72
+ }
73
+
74
+ /* Shiki syntax highlighting — let inline styles override default color */
75
+ .blog-editor-wrapper [data-content-type="codeBlock"] code span[style] {
76
+ background: none !important;
77
+ }
78
+
79
+ /* Language selector dropdown (BlockNote built-in) */
80
+ .blog-editor-wrapper [data-content-type="codeBlock"] select {
81
+ background: var(--code-lang-bg);
82
+ color: var(--code-lang-text);
83
+ border: 1px solid var(--border-default);
84
+ border-radius: 6px;
85
+ padding: 2px 8px;
86
+ font-size: 11px;
87
+ font-family: 'lixCode', monospace;
88
+ cursor: pointer;
89
+ outline: none;
90
+ margin: 4px 8px;
91
+ }
92
+
93
+ .blog-editor-wrapper [data-content-type="codeBlock"] select:focus {
94
+ border-color: #a78bfa;
95
+ }
96
+
97
+ /* Language label */
98
+ .code-lang-label {
99
+ position: absolute;
100
+ top: 0;
101
+ left: 16px;
102
+ font-size: 10px;
103
+ font-weight: 600;
104
+ letter-spacing: 0.5px;
105
+ text-transform: uppercase;
106
+ color: var(--code-lang-text);
107
+ background: var(--code-lang-bg);
108
+ padding: 2px 8px;
109
+ border-radius: 0 0 6px 6px;
110
+ cursor: pointer;
111
+ line-height: 1.5;
112
+ border: none;
113
+ transition: color 0.15s, background 0.15s;
114
+ z-index: 5;
115
+ }
116
+
117
+ .code-lang-label:hover {
118
+ color: #9b7bf7;
119
+ background: var(--bg-elevated);
120
+ }
121
+
122
+ /* Language picker dropdown */
123
+ .code-lang-picker {
124
+ background-color: var(--bg-app);
125
+ border: 1px solid var(--border-default);
126
+ border-radius: 12px;
127
+ box-shadow: var(--shadow-lg);
128
+ width: 180px;
129
+ max-height: 280px;
130
+ overflow: hidden;
131
+ display: flex;
132
+ flex-direction: column;
133
+ }
134
+
135
+ .code-lang-search {
136
+ width: 100%;
137
+ padding: 8px 12px;
138
+ font-size: 12px;
139
+ border: none;
140
+ border-bottom: 1px solid var(--divider);
141
+ background: transparent;
142
+ color: var(--text-primary);
143
+ outline: none;
144
+ }
145
+
146
+ .code-lang-search::placeholder {
147
+ color: var(--text-faint);
148
+ }
149
+
150
+ .code-lang-list {
151
+ overflow-y: auto;
152
+ max-height: 220px;
153
+ padding: 4px;
154
+ }
155
+
156
+ .code-lang-option {
157
+ display: block;
158
+ width: 100%;
159
+ text-align: left;
160
+ padding: 6px 10px;
161
+ font-size: 12px;
162
+ font-family: monospace;
163
+ color: var(--text-body);
164
+ background: transparent;
165
+ border: none;
166
+ border-radius: 6px;
167
+ cursor: pointer;
168
+ transition: background 0.1s;
169
+ }
170
+
171
+ .code-lang-option:hover {
172
+ background: var(--bg-hover);
173
+ color: var(--text-primary);
174
+ }
175
+
176
+ .code-lang-list::-webkit-scrollbar {
177
+ width: 4px;
178
+ }
179
+
180
+ .code-lang-list::-webkit-scrollbar-thumb {
181
+ background: var(--border-default);
182
+ border-radius: 2px;
183
+ }
184
+
185
+ /* Code block copy button */
186
+ .code-copy-btn {
187
+ position: absolute;
188
+ top: 8px;
189
+ right: 8px;
190
+ z-index: 10;
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: center;
194
+ width: 28px;
195
+ height: 28px;
196
+ background: var(--code-lang-bg);
197
+ border: 1px solid var(--border-default);
198
+ border-radius: 6px;
199
+ color: var(--code-lang-text);
200
+ cursor: pointer;
201
+ opacity: 0;
202
+ transition: opacity 0.15s, background 0.15s, color 0.15s;
203
+ }
204
+
205
+ [data-content-type="codeBlock"]:hover .code-copy-btn {
206
+ opacity: 1;
207
+ }
208
+
209
+ .code-copy-btn:hover {
210
+ background: var(--bg-active);
211
+ color: #a78bfa;
212
+ }
213
+
214
+ /* ===== Divider / Horizontal Rule ===== */
215
+
216
+ .blog-editor-wrapper [data-content-type="divider"] {
217
+ margin: 16px 0;
218
+ padding: 8px 0;
219
+ pointer-events: none;
220
+ user-select: none;
221
+ cursor: default;
222
+ }
223
+
224
+ .blog-editor-wrapper [data-content-type="divider"] hr {
225
+ border: none;
226
+ height: 1px;
227
+ background: var(--border-default);
228
+ }
229
+
230
+ /* ===== Sub-Page Block ===== */
231
+
232
+ .blog-editor-wrapper [data-content-type="tabsBlock"] {
233
+ user-select: none;
234
+ width: 100%;
235
+ }
236
+
237
+ .blog-editor-wrapper [data-content-type="tabsBlock"] .bn-block-content {
238
+ cursor: default;
239
+ width: 100%;
240
+ }
241
+
242
+ /* Shared subpage styles (editor + preview) */
243
+
244
+ .subpage-block {
245
+ width: 100%;
246
+ margin: 12px 0;
247
+ border: 1px solid var(--border-default);
248
+ border-radius: 12px;
249
+ overflow: hidden;
250
+ background: var(--bg-surface);
251
+ }
252
+
253
+ .subpage-block-inner,
254
+ .subpage-item {
255
+ display: flex;
256
+ align-items: center;
257
+ gap: 14px;
258
+ padding: 16px 20px;
259
+ width: 100%;
260
+ box-sizing: border-box;
261
+ cursor: pointer;
262
+ border-bottom: 1px solid var(--divider);
263
+ text-decoration: none;
264
+ color: inherit;
265
+ transition: background 0.15s;
266
+ }
267
+
268
+ .subpage-item:last-child {
269
+ border-bottom: none;
270
+ }
271
+
272
+ .subpage-item:hover {
273
+ background: var(--bg-hover);
274
+ }
275
+
276
+ .subpage-icon {
277
+ width: 36px;
278
+ height: 36px;
279
+ border-radius: 8px;
280
+ display: flex;
281
+ align-items: center;
282
+ justify-content: center;
283
+ flex-shrink: 0;
284
+ background: var(--bg-app);
285
+ border: 1px solid var(--border-default);
286
+ color: var(--text-faint);
287
+ transition: background 0.15s, border-color 0.15s;
288
+ }
289
+
290
+ .subpage-item:hover .subpage-icon {
291
+ background: rgba(155, 123, 247, 0.08);
292
+ border-color: rgba(155, 123, 247, 0.25);
293
+ color: #9b7bf7;
294
+ }
295
+
296
+ .subpage-icon--add {
297
+ border-style: dashed;
298
+ border-color: rgba(155, 123, 247, 0.3);
299
+ background: rgba(155, 123, 247, 0.04);
300
+ }
301
+
302
+ .subpage-title {
303
+ flex: 1;
304
+ font-size: 15px;
305
+ font-weight: 600;
306
+ color: var(--text-primary);
307
+ line-height: 1.3;
308
+ min-width: 0;
309
+ overflow: hidden;
310
+ text-overflow: ellipsis;
311
+ white-space: nowrap;
312
+ }
313
+
314
+ .subpage-arrow {
315
+ flex-shrink: 0;
316
+ color: var(--text-faint);
317
+ transition: color 0.15s, transform 0.15s;
318
+ }
319
+
320
+ .subpage-item:hover .subpage-arrow {
321
+ color: #9b7bf7;
322
+ transform: translateX(2px);
323
+ }
324
+
325
+ .subpage-delete-btn {
326
+ width: 28px;
327
+ height: 28px;
328
+ border-radius: 6px;
329
+ display: flex;
330
+ align-items: center;
331
+ justify-content: center;
332
+ background: none;
333
+ border: none;
334
+ color: var(--text-faint);
335
+ cursor: pointer;
336
+ opacity: 0;
337
+ transition: opacity 0.15s, color 0.15s, background 0.15s;
338
+ }
339
+
340
+ .group\/page:hover .subpage-delete-btn {
341
+ opacity: 1;
342
+ }
343
+
344
+ .subpage-delete-btn:hover {
345
+ color: #f87171;
346
+ background: rgba(248, 113, 113, 0.08);
347
+ }
348
+
349
+ .subpage-name-input {
350
+ flex: 1;
351
+ font-size: 15px;
352
+ font-weight: 500;
353
+ background: transparent;
354
+ border: none;
355
+ outline: none;
356
+ color: var(--text-primary);
357
+ min-width: 0;
358
+ }
359
+
360
+ .subpage-name-input::placeholder {
361
+ color: var(--text-faint);
362
+ }
363
+
364
+ .subpage-create-btn {
365
+ padding: 6px 14px;
366
+ font-size: 12px;
367
+ font-weight: 600;
368
+ color: white;
369
+ background: #9b7bf7;
370
+ border: none;
371
+ border-radius: 8px;
372
+ cursor: pointer;
373
+ transition: background 0.15s;
374
+ flex-shrink: 0;
375
+ }
376
+
377
+ .subpage-create-btn:hover {
378
+ background: #8b6ae6;
379
+ }
380
+
381
+ .subpage-create-btn:disabled {
382
+ opacity: 0.3;
383
+ cursor: not-allowed;
384
+ }
385
+
386
+ .subpage-block-adding {
387
+ border: none;
388
+ }
389
+
390
+ /* ===== Lists ===== */
391
+
392
+ .blog-editor-wrapper [data-content-type="bulletListItem"],
393
+ .blog-editor-wrapper [data-content-type="numberedListItem"] {
394
+ color: var(--text-primary);
395
+ }
396
+
397
+ .blog-editor-wrapper [data-content-type="bulletListItem"]::before {
398
+ color: var(--text-muted);
399
+ }
400
+
401
+ .blog-editor-wrapper [data-content-type="numberedListItem"]::before {
402
+ color: var(--text-muted);
403
+ }
404
+
405
+ /* ===== Fancy Checkboxes ===== */
406
+
407
+ .blog-editor-wrapper [data-content-type="checkListItem"] [data-checked-icon],
408
+ .blog-editor-wrapper [data-content-type="checkListItem"] [data-unchecked-icon],
409
+ .blog-editor-wrapper [data-content-type="checkListItem"] input[type="checkbox"] {
410
+ appearance: none;
411
+ -webkit-appearance: none;
412
+ width: 18px;
413
+ height: 18px;
414
+ border-radius: 6px;
415
+ border: 2px solid var(--border-default);
416
+ background-color: var(--bg-surface);
417
+ cursor: pointer;
418
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
419
+ position: relative;
420
+ flex-shrink: 0;
421
+ }
422
+
423
+ .blog-editor-wrapper [data-content-type="checkListItem"] input[type="checkbox"]:hover {
424
+ border-color: #9b7bf7;
425
+ box-shadow: 0 0 0 3px rgba(155, 123, 247, 0.12);
426
+ }
427
+
428
+ .blog-editor-wrapper [data-content-type="checkListItem"] input[type="checkbox"]:checked {
429
+ background: linear-gradient(135deg, #9b7bf7, #8b6ae6);
430
+ border-color: #9b7bf7;
431
+ box-shadow: 0 1px 4px rgba(155, 123, 247, 0.3);
432
+ }
433
+
434
+ .blog-editor-wrapper [data-content-type="checkListItem"] input[type="checkbox"]:checked::after {
435
+ content: '';
436
+ position: absolute;
437
+ top: 2px;
438
+ left: 5px;
439
+ width: 5px;
440
+ height: 9px;
441
+ border: solid white;
442
+ border-width: 0 2px 2px 0;
443
+ transform: rotate(45deg);
444
+ }
445
+
446
+ /* Checked item text gets muted + strikethrough */
447
+ .blog-editor-wrapper [data-content-type="checkListItem"][data-checked="true"] .bn-inline-content {
448
+ text-decoration: line-through;
449
+ opacity: 0.5;
450
+ }
451
+
452
+ /* BlockNote's native checkbox SVG icons — style them too */
453
+ .blog-editor-wrapper [data-content-type="checkListItem"] .bn-checkbox {
454
+ width: 18px;
455
+ height: 18px;
456
+ border-radius: 6px;
457
+ border: 2px solid var(--border-default);
458
+ background-color: var(--bg-surface);
459
+ cursor: pointer;
460
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
461
+ display: flex;
462
+ align-items: center;
463
+ justify-content: center;
464
+ }
465
+
466
+ .blog-editor-wrapper [data-content-type="checkListItem"] .bn-checkbox:hover {
467
+ border-color: #9b7bf7;
468
+ box-shadow: 0 0 0 3px rgba(155, 123, 247, 0.12);
469
+ }
470
+
471
+ .blog-editor-wrapper [data-content-type="checkListItem"][data-checked="true"] .bn-checkbox {
472
+ background: linear-gradient(135deg, #9b7bf7, #8b6ae6);
473
+ border-color: #9b7bf7;
474
+ box-shadow: 0 1px 4px rgba(155, 123, 247, 0.3);
475
+ }
476
+
477
+ .blog-editor-wrapper [data-content-type="checkListItem"][data-checked="true"] .bn-checkbox svg {
478
+ color: white;
479
+ }
480
+
481
+ /* ===== Image blocks ===== */
482
+
483
+ .blog-editor-wrapper [data-content-type="image"] img {
484
+ border-radius: 10px;
485
+ max-width: 100%;
486
+ }
487
+
488
+ .blog-editor-wrapper [data-content-type="image"] .bn-image-resize-handle {
489
+ background: #7ba8f0;
490
+ }
491
+
492
+ /* ===== Table ===== */
493
+
494
+ .blog-editor-wrapper [data-content-type="table"] {
495
+ border-color: var(--border-default);
496
+ }
497
+
498
+ .blog-editor-wrapper [data-content-type="table"] td,
499
+ .blog-editor-wrapper [data-content-type="table"] th {
500
+ border-color: var(--border-default);
501
+ padding: 8px 12px;
502
+ }
503
+
504
+ /* Table handles dark theme */
505
+ .blog-editor-wrapper .bn-table-handle {
506
+ background: var(--border-default);
507
+ border: 1px solid #333;
508
+ color: var(--text-muted);
509
+ }
510
+
511
+ .blog-editor-wrapper .bn-table-handle:hover {
512
+ background: var(--border-hover);
513
+ color: #c4b5fd;
514
+ }
515
+
516
+ /* Table handle dropdown menu */
517
+ .blog-editor-wrapper .bn-table-handle-menu,
518
+ .bn-table-handle-menu {
519
+ background: var(--bg-surface) !important;
520
+ border: 1px solid var(--border-default) !important;
521
+ border-radius: 8px !important;
522
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5) !important;
523
+ }
524
+
525
+ .blog-editor-wrapper .bn-table-handle-menu button,
526
+ .bn-table-handle-menu button {
527
+ color: var(--text-primary) !important;
528
+ }
529
+
530
+ .blog-editor-wrapper .bn-table-handle-menu button:hover,
531
+ .bn-table-handle-menu button:hover {
532
+ background: rgba(196, 181, 253, 0.1) !important;
533
+ color: #c4b5fd !important;
534
+ }
535
+
536
+ /* Table extend (add row/col) button */
537
+ .blog-editor-wrapper .bn-extend-button {
538
+ background: rgba(196, 181, 253, 0.08);
539
+ border: 1px dashed rgba(196, 181, 253, 0.2);
540
+ color: var(--text-muted);
541
+ transition: all 0.15s;
542
+ }
543
+
544
+ .blog-editor-wrapper .bn-extend-button:hover {
545
+ background: rgba(196, 181, 253, 0.15);
546
+ border-color: rgba(196, 181, 253, 0.4);
547
+ color: #c4b5fd;
548
+ }
549
+
550
+ /* ===== KaTeX overrides ===== */
551
+
552
+ .blog-editor-wrapper .katex {
553
+ color: var(--text-primary);
554
+ font-size: 1.1em;
555
+ }
556
+
557
+ .blog-editor-wrapper .katex-display {
558
+ margin: 0;
559
+ }
560
+
561
+ /* ===== Custom block styles ===== */
562
+
563
+ .blog-editor-wrapper .toc-block a {
564
+ color: #9b7bf7;
565
+ text-decoration: none;
566
+ }
567
+
568
+ .blog-editor-wrapper .toc-block a:hover {
569
+ color: #b69aff;
570
+ }
571
+
572
+ /* Hide KaTeX MathML accessibility layer — it renders as visible duplicate text */
573
+ .katex-mathml {
574
+ display: none !important;
575
+ }
576
+
577
+ /* ===== Inline equation chip (like DateChip) ===== */
578
+
579
+ .inline-equation-chip {
580
+ display: inline-flex;
581
+ align-items: center;
582
+ padding: 1px 6px;
583
+ margin: 0 2px;
584
+ border-radius: 5px;
585
+ cursor: pointer;
586
+ transition: all 0.15s;
587
+ color: #9b7bf7;
588
+ background: rgba(155, 123, 247, 0.06);
589
+ border: 1px solid rgba(155, 123, 247, 0.15);
590
+ font-size: 13px;
591
+ }
592
+
593
+ .inline-equation-chip:hover {
594
+ background: rgba(155, 123, 247, 0.12);
595
+ border-color: rgba(155, 123, 247, 0.3);
596
+ box-shadow: 0 0 0 2px rgba(155, 123, 247, 0.15);
597
+ }
598
+
599
+ .inline-equation-chip .katex {
600
+ font-size: 1em;
601
+ color: #9b7bf7;
602
+ }
603
+
604
+ /* Inline equation dropdown editor */
605
+
606
+ .inline-equation-editor {
607
+ position: absolute;
608
+ z-index: 100;
609
+ top: 100%;
610
+ left: 0;
611
+ margin-top: 4px;
612
+ width: 320px;
613
+ border-radius: 12px;
614
+ overflow: hidden;
615
+ background: var(--bg-app);
616
+ border: 1px solid var(--border-default);
617
+ box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2);
618
+ animation: confirmDialogIn 0.15s cubic-bezier(0.16, 1, 0.3, 1);
619
+ }
620
+
621
+ .inline-equation-editor-input {
622
+ width: 100%;
623
+ box-sizing: border-box;
624
+ padding: 10px 12px;
625
+ background: var(--bg-surface);
626
+ border: none;
627
+ border-bottom: 1px solid var(--border-default);
628
+ color: var(--text-primary);
629
+ font-family: 'lixCode', monospace;
630
+ font-size: 13px;
631
+ outline: none;
632
+ }
633
+
634
+ .inline-equation-editor-input::placeholder {
635
+ color: var(--text-faint);
636
+ }
637
+
638
+ .inline-equation-editor-preview {
639
+ padding: 8px 12px;
640
+ text-align: center;
641
+ border-bottom: 1px solid var(--border-default);
642
+ min-height: 24px;
643
+ }
644
+
645
+ .inline-equation-editor-actions {
646
+ display: flex;
647
+ justify-content: flex-end;
648
+ gap: 6px;
649
+ padding: 8px 12px;
650
+ }
651
+
652
+ /* ===== Inline LaTeX input popup ===== */
653
+
654
+ .inline-latex-overlay {
655
+ position: fixed;
656
+ inset: 0;
657
+ z-index: 200;
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: center;
661
+ background: rgba(0, 0, 0, 0.4);
662
+ backdrop-filter: blur(4px);
663
+ animation: confirmOverlayIn 0.15s ease-out;
664
+ }
665
+
666
+ .inline-latex-popup {
667
+ width: 100%;
668
+ max-width: 420px;
669
+ border-radius: 14px;
670
+ overflow: hidden;
671
+ background: var(--bg-surface);
672
+ border: 1px solid var(--border-default);
673
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.25);
674
+ animation: confirmDialogIn 0.2s cubic-bezier(0.16, 1, 0.3, 1);
675
+ }
676
+
677
+ .inline-latex-header {
678
+ display: flex;
679
+ align-items: center;
680
+ gap: 6px;
681
+ padding: 12px 16px 0;
682
+ font-size: 12px;
683
+ font-weight: 500;
684
+ color: var(--text-muted);
685
+ }
686
+
687
+ .inline-latex-input {
688
+ width: 100%;
689
+ box-sizing: border-box;
690
+ padding: 10px 16px;
691
+ margin-top: 8px;
692
+ background: var(--bg-app);
693
+ border: none;
694
+ border-top: 1px solid var(--border-default);
695
+ border-bottom: 1px solid var(--border-default);
696
+ color: var(--text-primary);
697
+ font-family: 'lixCode', monospace;
698
+ font-size: 14px;
699
+ outline: none;
700
+ }
701
+
702
+ .inline-latex-input::placeholder {
703
+ color: var(--text-faint);
704
+ }
705
+
706
+ .inline-latex-preview {
707
+ padding: 10px 16px;
708
+ text-align: center;
709
+ min-height: 28px;
710
+ border-bottom: 1px solid var(--border-default);
711
+ }
712
+
713
+
714
+ .inline-latex-actions {
715
+ display: flex;
716
+ justify-content: flex-end;
717
+ gap: 8px;
718
+ padding: 10px 16px;
719
+ }
720
+
721
+ /* ===== Mermaid diagram blocks ===== */
722
+
723
+ .blog-editor-wrapper [data-content-type="mermaidBlock"],
724
+ .blog-editor-wrapper [data-content-type="blockEquation"] {
725
+ width: 100%;
726
+ }
727
+
728
+ /* Block equation rendered state — matches preview .preview-block-equation */
729
+ .editor-block-equation {
730
+ border: 1px solid var(--border-default);
731
+ border-radius: 12px;
732
+ background: var(--bg-surface);
733
+ padding: 20px 24px;
734
+ margin: 8px 0;
735
+ text-align: center;
736
+ overflow-x: auto;
737
+ width: 100%;
738
+ box-sizing: border-box;
739
+ cursor: pointer;
740
+ transition: border-color 0.15s;
741
+ }
742
+
743
+ .editor-block-equation:hover {
744
+ border-color: var(--border-hover);
745
+ }
746
+
747
+ .editor-block-equation .katex {
748
+ font-size: 1.2em;
749
+ color: var(--text-primary);
750
+ }
751
+
752
+ .mermaid-block {
753
+ border: 1px solid var(--border-default);
754
+ border-radius: 12px;
755
+ background: var(--bg-surface);
756
+ margin: 8px 0;
757
+ overflow: hidden;
758
+ width: 100%;
759
+ }
760
+
761
+ .mermaid-block--empty {
762
+ display: flex;
763
+ align-items: center;
764
+ justify-content: center;
765
+ gap: 8px;
766
+ padding: 32px 16px;
767
+ border-style: dashed;
768
+ background: rgba(240, 240, 245, 0.5);
769
+ color: var(--text-muted);
770
+ font-size: 13px;
771
+ cursor: pointer;
772
+ transition: border-color 0.15s, color 0.15s;
773
+ }
774
+
775
+ [data-theme="dark"] .mermaid-block--empty {
776
+ background: rgba(20, 26, 38, 0.5);
777
+ }
778
+
779
+ .mermaid-block--empty:hover {
780
+ border-color: #ccc;
781
+ color: #7c5cbf;
782
+ }
783
+
784
+ [data-theme="dark"] .mermaid-block--empty:hover {
785
+ border-color: #333;
786
+ color: #c4b5fd;
787
+ }
788
+
789
+ .mermaid-block--editing {
790
+ padding: 0;
791
+ }
792
+
793
+ .mermaid-block-header {
794
+ display: flex;
795
+ align-items: center;
796
+ gap: 6px;
797
+ padding: 10px 14px 0;
798
+ font-size: 11px;
799
+ font-weight: 500;
800
+ color: var(--text-muted);
801
+ }
802
+
803
+ .mermaid-block-textarea {
804
+ width: 100%;
805
+ box-sizing: border-box;
806
+ background: var(--bg-app);
807
+ border: none;
808
+ border-top: 1px solid var(--border-default);
809
+ margin-top: 8px;
810
+ padding: 12px 14px;
811
+ color: var(--text-primary);
812
+ font-family: 'lixCode', monospace;
813
+ font-size: 13px;
814
+ resize: vertical;
815
+ outline: none;
816
+ min-height: 160px;
817
+ }
818
+
819
+ .mermaid-block-textarea::placeholder {
820
+ color: var(--text-faint);
821
+ }
822
+
823
+ /* Live preview panel inside edit mode */
824
+ .mermaid-live-preview {
825
+ border-top: 1px solid var(--border-default);
826
+ background: var(--bg-app);
827
+ }
828
+
829
+ .mermaid-live-preview-label {
830
+ padding: 6px 14px 0;
831
+ font-size: 10px;
832
+ font-weight: 500;
833
+ color: var(--text-faint);
834
+ text-transform: uppercase;
835
+ letter-spacing: 0.5px;
836
+ }
837
+
838
+ .mermaid-viewport--compact {
839
+ height: 200px;
840
+ min-height: 120px;
841
+ border-radius: 0;
842
+ }
843
+
844
+ /* LaTeX live preview inside edit mode */
845
+ .latex-live-preview {
846
+ border-top: 1px solid var(--border-default);
847
+ background: var(--bg-app);
848
+ padding: 12px 14px;
849
+ min-height: 40px;
850
+ text-align: center;
851
+ overflow-x: auto;
852
+ }
853
+
854
+ .latex-live-preview-label {
855
+ font-size: 10px;
856
+ font-weight: 500;
857
+ color: var(--text-faint);
858
+ text-transform: uppercase;
859
+ letter-spacing: 0.5px;
860
+ margin-bottom: 8px;
861
+ }
862
+
863
+ .latex-live-preview .katex-display {
864
+ margin: 0;
865
+ }
866
+
867
+
868
+ .mermaid-block-actions {
869
+ display: flex;
870
+ justify-content: flex-end;
871
+ gap: 8px;
872
+ padding: 8px 14px;
873
+ border-top: 1px solid var(--border-default);
874
+ }
875
+
876
+ .mermaid-btn-cancel {
877
+ padding: 4px 12px;
878
+ font-size: 12px;
879
+ color: #888;
880
+ background: none;
881
+ border: none;
882
+ cursor: pointer;
883
+ transition: color 0.15s;
884
+ }
885
+
886
+ .mermaid-btn-cancel:hover {
887
+ color: var(--text-primary);
888
+ }
889
+
890
+ .mermaid-btn-save {
891
+ padding: 4px 12px;
892
+ font-size: 12px;
893
+ color: white;
894
+ background: #9b7bf7;
895
+ border: none;
896
+ border-radius: 6px;
897
+ font-weight: 500;
898
+ cursor: pointer;
899
+ transition: background 0.15s;
900
+ }
901
+
902
+ .mermaid-btn-save:hover {
903
+ background: #b69aff;
904
+ }
905
+
906
+ .mermaid-btn-save:disabled {
907
+ opacity: 0.4;
908
+ cursor: not-allowed;
909
+ }
910
+
911
+ .mermaid-block--rendered {
912
+ position: relative;
913
+ padding: 0;
914
+ cursor: default;
915
+ min-height: 280px;
916
+ }
917
+
918
+ .mermaid-viewport {
919
+ position: relative;
920
+ width: 100%;
921
+ height: 320px;
922
+ overflow: hidden;
923
+ cursor: grab;
924
+ display: flex;
925
+ align-items: center;
926
+ justify-content: center;
927
+ border-radius: 12px;
928
+ }
929
+
930
+ .mermaid-viewport:active {
931
+ cursor: grabbing;
932
+ }
933
+
934
+ .mermaid-block-svg {
935
+ display: flex;
936
+ justify-content: center;
937
+ align-items: center;
938
+ transition: transform 0.05s linear;
939
+ will-change: transform;
940
+ padding: 24px;
941
+ }
942
+
943
+ .mermaid-block-svg svg {
944
+ max-width: none !important;
945
+ height: auto !important;
946
+ }
947
+
948
+ /* Make text inside mermaid SVG bigger and more readable */
949
+ .mermaid-block-svg svg text {
950
+ font-size: 15px !important;
951
+ }
952
+
953
+ .mermaid-block-svg svg .nodeLabel,
954
+ .mermaid-block-svg svg .edgeLabel {
955
+ font-size: 15px !important;
956
+ }
957
+
958
+ /* Zoom controls */
959
+ .mermaid-zoom-controls {
960
+ position: absolute;
961
+ bottom: 10px;
962
+ right: 10px;
963
+ display: flex;
964
+ align-items: center;
965
+ gap: 4px;
966
+ background: rgba(255, 255, 255, 0.85);
967
+ backdrop-filter: blur(12px);
968
+ border: 1px solid var(--border-default);
969
+ border-radius: 8px;
970
+ padding: 4px 6px;
971
+ z-index: 5;
972
+ }
973
+
974
+ [data-theme="dark"] .mermaid-zoom-controls {
975
+ background: rgba(14, 18, 27, 0.85);
976
+ }
977
+
978
+ .mermaid-zoom-btn {
979
+ display: flex;
980
+ align-items: center;
981
+ justify-content: center;
982
+ width: 26px;
983
+ height: 26px;
984
+ background: none;
985
+ border: none;
986
+ border-radius: 5px;
987
+ color: var(--text-muted);
988
+ cursor: pointer;
989
+ transition: color 0.15s, background 0.15s;
990
+ }
991
+
992
+ .mermaid-zoom-btn:hover {
993
+ color: #c4b5fd;
994
+ background: rgba(196, 181, 253, 0.1);
995
+ }
996
+
997
+ .mermaid-zoom-label {
998
+ font-size: 11px;
999
+ color: var(--text-faint);
1000
+ min-width: 36px;
1001
+ text-align: center;
1002
+ font-variant-numeric: tabular-nums;
1003
+ user-select: none;
1004
+ }
1005
+
1006
+ .mermaid-block-hover {
1007
+ position: absolute;
1008
+ top: 8px;
1009
+ right: 8px;
1010
+ display: flex;
1011
+ gap: 4px;
1012
+ opacity: 0;
1013
+ transition: opacity 0.15s;
1014
+ }
1015
+
1016
+ .mermaid-block--rendered:hover .mermaid-block-hover,
1017
+ .group:hover .mermaid-block-hover {
1018
+ opacity: 1;
1019
+ }
1020
+
1021
+ .mermaid-hover-btn {
1022
+ display: flex;
1023
+ align-items: center;
1024
+ justify-content: center;
1025
+ width: 28px;
1026
+ height: 28px;
1027
+ background: rgba(255, 255, 255, 0.85);
1028
+ border: 1px solid #ddd;
1029
+ border-radius: 6px;
1030
+ color: var(--text-muted);
1031
+ cursor: pointer;
1032
+ transition: color 0.15s, background 0.15s;
1033
+ }
1034
+
1035
+ [data-theme="dark"] .mermaid-hover-btn {
1036
+ background: rgba(14, 18, 27, 0.85);
1037
+ border-color: #333;
1038
+ }
1039
+
1040
+ .mermaid-hover-btn:hover {
1041
+ color: var(--text-primary);
1042
+ background: var(--border-default);
1043
+ }
1044
+
1045
+ .mermaid-hover-delete:hover {
1046
+ color: #f87171;
1047
+ }
1048
+
1049
+ /* ===== Editor Outline Sidebar ===== */
1050
+
1051
+ .editor-outline-sidebar {
1052
+ position: fixed;
1053
+ right: 24px;
1054
+ top: 80px;
1055
+ width: 200px;
1056
+ max-height: calc(100vh - 120px);
1057
+ overflow-y: auto;
1058
+ z-index: 30;
1059
+ opacity: 0.5;
1060
+ transition: opacity 0.2s;
1061
+ }
1062
+
1063
+ .editor-outline-sidebar:hover {
1064
+ opacity: 1;
1065
+ }
1066
+
1067
+ .editor-outline-title {
1068
+ font-size: 11px;
1069
+ font-weight: 600;
1070
+ text-transform: uppercase;
1071
+ letter-spacing: 0.08em;
1072
+ color: var(--text-faint);
1073
+ margin-bottom: 8px;
1074
+ padding-left: 12px;
1075
+ }
1076
+
1077
+ .editor-outline-list {
1078
+ list-style: none;
1079
+ margin: 0;
1080
+ padding: 0;
1081
+ display: flex;
1082
+ flex-direction: column;
1083
+ gap: 2px;
1084
+ }
1085
+
1086
+ .editor-outline-item {
1087
+ display: block;
1088
+ padding: 3px 0;
1089
+ cursor: pointer;
1090
+ transition: color 0.15s;
1091
+ }
1092
+
1093
+ .editor-outline-text {
1094
+ font-size: 13px;
1095
+ color: var(--text-muted);
1096
+ text-decoration: none;
1097
+ display: block;
1098
+ line-height: 1.4;
1099
+ transition: color 0.15s, font-weight 0.15s;
1100
+ }
1101
+
1102
+ .editor-outline-item:hover .editor-outline-text {
1103
+ color: var(--accent);
1104
+ }
1105
+
1106
+ /* Hide on smaller screens where there's no room */
1107
+ @media (max-width: 1200px) {
1108
+ .editor-outline-sidebar {
1109
+ display: none;
1110
+ }
1111
+ }
1112
+
1113
+ /* Scrollbar styling for outline */
1114
+ .editor-outline-sidebar::-webkit-scrollbar {
1115
+ width: 2px;
1116
+ }
1117
+
1118
+ .editor-outline-sidebar::-webkit-scrollbar-thumb {
1119
+ background: rgba(155, 123, 247, 0.2);
1120
+ border-radius: 2px;
1121
+ }
1122
+
1123
+ /* ===== Table delete button ===== */
1124
+
1125
+ .table-delete-btn {
1126
+ position: absolute;
1127
+ top: -12px;
1128
+ right: -12px;
1129
+ z-index: 20;
1130
+ width: 26px;
1131
+ height: 26px;
1132
+ border-radius: 8px;
1133
+ display: flex;
1134
+ align-items: center;
1135
+ justify-content: center;
1136
+ background-color: var(--bg-surface);
1137
+ border: 1px solid var(--border-default);
1138
+ color: var(--text-faint);
1139
+ cursor: pointer;
1140
+ opacity: 0;
1141
+ transition: opacity 0.15s, color 0.15s, background-color 0.15s, border-color 0.15s;
1142
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
1143
+ }
1144
+
1145
+ [data-content-type="table"]:hover .table-delete-btn,
1146
+ .table-delete-btn:focus {
1147
+ opacity: 1;
1148
+ }
1149
+
1150
+ .table-delete-btn:hover {
1151
+ color: #f87171;
1152
+ background-color: rgba(248, 113, 113, 0.08);
1153
+ border-color: rgba(248, 113, 113, 0.3);
1154
+ }