tfrere HF Staff commited on
Commit
5ad12dd
·
1 Parent(s): 561e6f0

refactor: split editor.css into tokens/article/editing layers

Browse files

Split monolithic editor.css (1077 lines) into three CSS files:
- tokens.css: light/dark design tokens as CSS custom properties
- article.css: content styles shared with published version
- editing.css: editor-only chrome (cursors, slash menu, panels)

All hardcoded dark-mode colors replaced with var() references.
Light theme tokens defined and ready for theme toggle.

Made-with: Cursor

frontend/index.html CHANGED
@@ -1,5 +1,5 @@
1
  <!DOCTYPE html>
2
- <html lang="en">
3
  <head>
4
  <meta charset="UTF-8" />
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 
1
  <!DOCTYPE html>
2
+ <html lang="en" data-theme="dark">
3
  <head>
4
  <meta charset="UTF-8" />
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
frontend/src/main.tsx CHANGED
@@ -3,7 +3,9 @@ import ReactDOM from "react-dom/client";
3
  import { ThemeProvider, CssBaseline } from "@mui/material";
4
  import { theme } from "./theme";
5
  import App from "./App";
6
- import "./editor.css";
 
 
7
 
8
  ReactDOM.createRoot(document.getElementById("root")!).render(
9
  <React.StrictMode>
 
3
  import { ThemeProvider, CssBaseline } from "@mui/material";
4
  import { theme } from "./theme";
5
  import App from "./App";
6
+ import "./styles/tokens.css";
7
+ import "./styles/article.css";
8
+ import "./styles/editing.css";
9
 
10
  ReactDOM.createRoot(document.getElementById("root")!).render(
11
  <React.StrictMode>
frontend/src/styles/article.css ADDED
@@ -0,0 +1,529 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -----------------------------------------------------------------------
2
+ Article content styles
3
+
4
+ Shared between editor and published version.
5
+ Uses CSS variables from tokens.css for light/dark theming.
6
+ ----------------------------------------------------------------------- */
7
+
8
+ /* Base typography */
9
+ .tiptap {
10
+ outline: none;
11
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
12
+ font-size: 1rem;
13
+ line-height: 1.7;
14
+ color: var(--text-primary);
15
+ max-width: 780px;
16
+ margin-left: auto;
17
+ margin-right: auto;
18
+ padding: 0 32px 0 64px;
19
+ min-height: 100%;
20
+ overflow-wrap: break-word;
21
+ word-break: break-word;
22
+ }
23
+
24
+ .tiptap > *:first-child {
25
+ margin-top: 0;
26
+ }
27
+
28
+ /* Headings */
29
+ .tiptap h1 {
30
+ font-size: 2rem;
31
+ font-weight: 700;
32
+ color: var(--text-heading);
33
+ line-height: 1.2;
34
+ margin: 2em 0 0.4em;
35
+ letter-spacing: -0.02em;
36
+ }
37
+
38
+ .tiptap h1:first-child {
39
+ margin-top: 0;
40
+ }
41
+
42
+ .tiptap h2 {
43
+ font-size: 1.5rem;
44
+ font-weight: 600;
45
+ color: var(--text-heading-secondary);
46
+ line-height: 1.3;
47
+ margin: 1.8em 0 0.4em;
48
+ letter-spacing: -0.01em;
49
+ }
50
+
51
+ .tiptap h3 {
52
+ font-size: 1.2rem;
53
+ font-weight: 600;
54
+ color: var(--text-primary);
55
+ line-height: 1.4;
56
+ margin: 1.5em 0 0.3em;
57
+ }
58
+
59
+ /* Paragraphs */
60
+ .tiptap p {
61
+ margin: 0.5em 0;
62
+ }
63
+
64
+ /* Lists */
65
+ .tiptap ul,
66
+ .tiptap ol {
67
+ padding-left: 1.5rem;
68
+ margin: 0.5em 0;
69
+ }
70
+
71
+ .tiptap li {
72
+ margin: 0.25em 0;
73
+ }
74
+
75
+ .tiptap li p {
76
+ margin: 0.15em 0;
77
+ }
78
+
79
+ /* Blockquote */
80
+ .tiptap blockquote {
81
+ border-left: 3px solid var(--border);
82
+ padding-left: 1rem;
83
+ margin: 1em 0;
84
+ color: var(--text-secondary);
85
+ }
86
+
87
+ .tiptap blockquote p {
88
+ margin: 0.4em 0;
89
+ }
90
+
91
+ /* Inline code */
92
+ .tiptap code {
93
+ font-family: "SFMono-Regular", "Fira Code", "Fira Mono", Menlo, Consolas, monospace;
94
+ background: var(--bg-code);
95
+ padding: 0.15em 0.4em;
96
+ border-radius: 4px;
97
+ font-size: 0.88em;
98
+ color: var(--code-text);
99
+ }
100
+
101
+ /* Code block */
102
+ .tiptap pre {
103
+ background: var(--bg-code-block);
104
+ border: 1px solid var(--border-light);
105
+ border-radius: 8px;
106
+ padding: 1rem 1.25rem;
107
+ margin: 1em 0;
108
+ overflow-x: auto;
109
+ }
110
+
111
+ .tiptap pre code {
112
+ background: none;
113
+ padding: 0;
114
+ color: var(--text-secondary);
115
+ font-size: 0.875rem;
116
+ line-height: 1.6;
117
+ }
118
+
119
+ /* Syntax highlighting */
120
+ .tiptap pre code .hljs-comment,
121
+ .tiptap pre code .hljs-quote {
122
+ color: var(--code-comment);
123
+ font-style: italic;
124
+ }
125
+
126
+ .tiptap pre code .hljs-keyword,
127
+ .tiptap pre code .hljs-selector-tag,
128
+ .tiptap pre code .hljs-addition {
129
+ color: var(--code-keyword);
130
+ }
131
+
132
+ .tiptap pre code .hljs-string,
133
+ .tiptap pre code .hljs-meta .hljs-string,
134
+ .tiptap pre code .hljs-regexp,
135
+ .tiptap pre code .hljs-doctag {
136
+ color: var(--code-string);
137
+ }
138
+
139
+ .tiptap pre code .hljs-number,
140
+ .tiptap pre code .hljs-literal,
141
+ .tiptap pre code .hljs-bullet {
142
+ color: var(--code-number);
143
+ }
144
+
145
+ .tiptap pre code .hljs-variable,
146
+ .tiptap pre code .hljs-template-variable,
147
+ .tiptap pre code .hljs-tag .hljs-attr {
148
+ color: var(--code-variable);
149
+ }
150
+
151
+ .tiptap pre code .hljs-type,
152
+ .tiptap pre code .hljs-built_in,
153
+ .tiptap pre code .hljs-class .hljs-title,
154
+ .tiptap pre code .hljs-title.class_ {
155
+ color: var(--code-type);
156
+ }
157
+
158
+ .tiptap pre code .hljs-function,
159
+ .tiptap pre code .hljs-title,
160
+ .tiptap pre code .hljs-section {
161
+ color: var(--code-function);
162
+ }
163
+
164
+ .tiptap pre code .hljs-name,
165
+ .tiptap pre code .hljs-tag {
166
+ color: var(--code-tag);
167
+ }
168
+
169
+ .tiptap pre code .hljs-attr {
170
+ color: var(--code-attr);
171
+ }
172
+
173
+ .tiptap pre code .hljs-symbol,
174
+ .tiptap pre code .hljs-link {
175
+ color: var(--code-symbol);
176
+ }
177
+
178
+ .tiptap pre code .hljs-meta,
179
+ .tiptap pre code .hljs-selector-id,
180
+ .tiptap pre code .hljs-selector-class {
181
+ color: var(--code-meta);
182
+ }
183
+
184
+ .tiptap pre code .hljs-deletion {
185
+ color: var(--code-deletion);
186
+ }
187
+
188
+ .tiptap pre code .hljs-emphasis {
189
+ font-style: italic;
190
+ }
191
+
192
+ .tiptap pre code .hljs-strong {
193
+ font-weight: 700;
194
+ }
195
+
196
+ /* Horizontal rule */
197
+ .tiptap hr {
198
+ border: none;
199
+ border-top: 1px solid var(--border);
200
+ margin: 2em 0;
201
+ }
202
+
203
+ /* Tables */
204
+ .tiptap table {
205
+ border-collapse: collapse;
206
+ width: 100%;
207
+ margin: 1em 0;
208
+ overflow: hidden;
209
+ border-radius: 6px;
210
+ border: 1px solid var(--border-light);
211
+ }
212
+
213
+ .tiptap th,
214
+ .tiptap td {
215
+ padding: 0.5rem 0.75rem;
216
+ border: 1px solid var(--border-light);
217
+ text-align: left;
218
+ font-size: 0.875rem;
219
+ min-width: 80px;
220
+ }
221
+
222
+ .tiptap th {
223
+ background: var(--bg-code);
224
+ color: var(--text-secondary);
225
+ font-weight: 600;
226
+ font-size: 0.8125rem;
227
+ text-transform: uppercase;
228
+ letter-spacing: 0.03em;
229
+ }
230
+
231
+ .tiptap td {
232
+ color: var(--text-primary);
233
+ }
234
+
235
+ .tiptap tr:hover td {
236
+ background: var(--bg-hover);
237
+ }
238
+
239
+ /* Links */
240
+ .tiptap a,
241
+ .tiptap .editor-link {
242
+ color: var(--accent-light);
243
+ text-decoration: underline;
244
+ text-decoration-color: rgba(149, 141, 241, 0.4);
245
+ text-underline-offset: 2px;
246
+ transition: text-decoration-color 0.15s;
247
+ }
248
+
249
+ .tiptap a:hover,
250
+ .tiptap .editor-link:hover {
251
+ text-decoration-color: rgba(149, 141, 241, 0.8);
252
+ }
253
+
254
+ /* Bold */
255
+ .tiptap strong {
256
+ font-weight: 600;
257
+ color: var(--text-strong);
258
+ }
259
+
260
+ /* Images */
261
+ .tiptap img {
262
+ max-width: 100%;
263
+ height: auto;
264
+ border-radius: 8px;
265
+ margin: 1em 0;
266
+ }
267
+
268
+ /* Math - inline */
269
+ .tiptap [data-type="inline-math"] .tiptap-mathematics-render {
270
+ padding: 0 0.2em;
271
+ border-radius: 3px;
272
+ transition: background 0.15s;
273
+ }
274
+
275
+ .tiptap [data-type="inline-math"] .tiptap-mathematics-render:hover {
276
+ background: var(--bg-code);
277
+ }
278
+
279
+ /* Math - block */
280
+ .tiptap [data-type="block-math"] {
281
+ margin: 1em 0;
282
+ }
283
+
284
+ .tiptap [data-type="block-math"] .tiptap-mathematics-render {
285
+ display: flex;
286
+ justify-content: center;
287
+ padding: 1rem 0;
288
+ border-radius: 8px;
289
+ transition: background 0.15s;
290
+ }
291
+
292
+ .tiptap [data-type="block-math"] .tiptap-mathematics-render:hover {
293
+ background: var(--bg-hover);
294
+ }
295
+
296
+ /* KaTeX color */
297
+ .tiptap .katex {
298
+ color: var(--katex-color);
299
+ }
300
+
301
+ /* Citation inline node */
302
+ .citation-node {
303
+ position: relative;
304
+ color: var(--accent-light);
305
+ cursor: default;
306
+ font-size: 0.9em;
307
+ white-space: nowrap;
308
+ text-decoration: underline;
309
+ text-decoration-color: rgba(149, 141, 241, 0.3);
310
+ text-underline-offset: 2px;
311
+ transition: text-decoration-color 0.15s;
312
+ }
313
+
314
+ .citation-node:hover {
315
+ text-decoration-color: rgba(149, 141, 241, 0.7);
316
+ }
317
+
318
+ /* Citation hover tooltip */
319
+ .citation-tooltip {
320
+ position: absolute;
321
+ bottom: calc(100% + 8px);
322
+ left: 50%;
323
+ transform: translateX(-50%);
324
+ background: var(--bg-tooltip);
325
+ border: 1px solid var(--border);
326
+ border-radius: 8px;
327
+ padding: 0.75rem;
328
+ min-width: 240px;
329
+ max-width: 320px;
330
+ box-shadow: var(--shadow-lg);
331
+ z-index: 100;
332
+ white-space: normal;
333
+ pointer-events: auto;
334
+ }
335
+
336
+ .citation-tooltip-title {
337
+ color: var(--text-heading-secondary);
338
+ font-size: 0.8125rem;
339
+ font-weight: 500;
340
+ line-height: 1.4;
341
+ margin-bottom: 0.35rem;
342
+ }
343
+
344
+ .citation-tooltip-journal {
345
+ color: var(--text-secondary);
346
+ font-size: 0.75rem;
347
+ font-style: italic;
348
+ line-height: 1.3;
349
+ }
350
+
351
+ .citation-tooltip-doi {
352
+ color: var(--text-tertiary);
353
+ font-size: 0.7rem;
354
+ font-family: "SFMono-Regular", "Fira Code", monospace;
355
+ margin-top: 0.35rem;
356
+ overflow: hidden;
357
+ text-overflow: ellipsis;
358
+ }
359
+
360
+ .citation-tooltip-remove {
361
+ display: block;
362
+ margin-top: 0.5rem;
363
+ margin-left: auto;
364
+ padding: 0.25rem 0.6rem;
365
+ border: none;
366
+ border-radius: 4px;
367
+ background: var(--danger-bg);
368
+ color: var(--danger);
369
+ font-size: 0.7rem;
370
+ font-family: inherit;
371
+ cursor: pointer;
372
+ transition: background 0.15s;
373
+ }
374
+
375
+ .citation-tooltip-remove:hover {
376
+ background: var(--danger-bg-hover);
377
+ }
378
+
379
+ /* Bibliography block */
380
+ .bibliography-block {
381
+ margin: 2em 0 1em;
382
+ padding-top: 1.5em;
383
+ border-top: 1px solid var(--border);
384
+ }
385
+
386
+ .bibliography-title {
387
+ font-size: 1.3rem;
388
+ font-weight: 600;
389
+ color: var(--text-heading-secondary);
390
+ margin: 0 0 1em;
391
+ }
392
+
393
+ .bibliography-empty {
394
+ color: var(--text-faint);
395
+ font-size: 0.875rem;
396
+ font-style: italic;
397
+ }
398
+
399
+ .bibliography-content {
400
+ font-size: 0.875rem;
401
+ line-height: 1.7;
402
+ color: var(--text-secondary);
403
+ }
404
+
405
+ .bibliography-content .csl-entry {
406
+ margin-bottom: 0.75em;
407
+ padding-left: 2em;
408
+ text-indent: -2em;
409
+ }
410
+
411
+ .bibliography-content .csl-entry i {
412
+ font-style: italic;
413
+ }
414
+
415
+ /* Custom component blocks */
416
+ .component-content > *:first-child {
417
+ margin-top: 0;
418
+ }
419
+
420
+ .component-content > *:last-child {
421
+ margin-bottom: 0;
422
+ }
423
+
424
+ /* Glossary inline node */
425
+ .glossary-node {
426
+ position: relative;
427
+ display: inline;
428
+ border-bottom: 1px dashed rgba(149, 141, 241, 0.5);
429
+ color: rgba(149, 141, 241, 0.9);
430
+ cursor: help;
431
+ }
432
+
433
+ .glossary-tooltip {
434
+ position: absolute;
435
+ bottom: calc(100% + 6px);
436
+ left: 50%;
437
+ transform: translateX(-50%);
438
+ background: var(--bg-tooltip);
439
+ border: 1px solid var(--border);
440
+ border-radius: 8px;
441
+ padding: 10px 14px;
442
+ min-width: 200px;
443
+ max-width: 320px;
444
+ z-index: 50;
445
+ box-shadow: var(--shadow-lg);
446
+ }
447
+
448
+ .glossary-tooltip-term {
449
+ font-weight: 700;
450
+ font-size: 13px;
451
+ color: var(--text-heading-secondary);
452
+ margin-bottom: 4px;
453
+ }
454
+
455
+ .glossary-tooltip-def {
456
+ font-size: 12px;
457
+ color: var(--text-secondary);
458
+ line-height: 1.5;
459
+ }
460
+
461
+ .glossary-tooltip-remove {
462
+ margin-top: 8px;
463
+ background: none;
464
+ border: none;
465
+ color: var(--danger);
466
+ font-size: 11px;
467
+ cursor: pointer;
468
+ padding: 0;
469
+ opacity: 0.8;
470
+ }
471
+
472
+ .glossary-tooltip-remove:hover {
473
+ opacity: 1;
474
+ }
475
+
476
+ /* Footnote inline node */
477
+ .footnote-node {
478
+ position: relative;
479
+ display: inline;
480
+ }
481
+
482
+ .footnote-marker {
483
+ color: rgba(149, 141, 241, 0.9);
484
+ cursor: pointer;
485
+ font-size: 0.75em;
486
+ font-weight: 700;
487
+ margin: 0 1px;
488
+ }
489
+
490
+ .footnote-tooltip {
491
+ position: absolute;
492
+ bottom: calc(100% + 6px);
493
+ left: 50%;
494
+ transform: translateX(-50%);
495
+ background: var(--bg-tooltip);
496
+ border: 1px solid var(--border);
497
+ border-radius: 8px;
498
+ padding: 10px 14px;
499
+ min-width: 220px;
500
+ max-width: 360px;
501
+ z-index: 50;
502
+ box-shadow: var(--shadow-lg);
503
+ }
504
+
505
+ .footnote-tooltip-content {
506
+ font-size: 12px;
507
+ color: var(--text-secondary);
508
+ line-height: 1.5;
509
+ }
510
+
511
+ /* Stack columns */
512
+ .stack-columns {
513
+ display: contents;
514
+ }
515
+
516
+ .stack-columns > div[data-type="stack-column"] {
517
+ border: 1px dashed var(--border-light);
518
+ border-radius: 6px;
519
+ padding: 8px;
520
+ min-height: 40px;
521
+ }
522
+
523
+ .stack-columns > div[data-type="stack-column"] > *:first-child {
524
+ margin-top: 0;
525
+ }
526
+
527
+ .stack-columns > div[data-type="stack-column"] > *:last-child {
528
+ margin-bottom: 0;
529
+ }
frontend/src/{editor.css → styles/editing.css} RENAMED
@@ -1,262 +1,53 @@
1
- /* Notion-like editor typography */
2
- .tiptap {
3
- outline: none;
4
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
5
- font-size: 1rem;
6
- line-height: 1.7;
7
- color: rgba(255, 255, 255, 0.85);
8
- max-width: 780px;
9
- margin-left: auto;
10
- margin-right: auto;
11
- padding: 0 32px 0 64px;
12
- min-height: 100%;
13
- overflow-wrap: break-word;
14
- word-break: break-word;
15
- }
16
-
17
- .tiptap > *:first-child {
18
- margin-top: 0;
19
- }
20
-
21
- /* Headings */
22
- .tiptap h1 {
23
- font-size: 2rem;
24
- font-weight: 700;
25
- color: #fff;
26
- line-height: 1.2;
27
- margin: 2em 0 0.4em;
28
- letter-spacing: -0.02em;
29
- }
30
-
31
- .tiptap h1:first-child {
32
- margin-top: 0;
33
- }
34
-
35
- .tiptap h2 {
36
- font-size: 1.5rem;
37
- font-weight: 600;
38
- color: rgba(255, 255, 255, 0.9);
39
- line-height: 1.3;
40
- margin: 1.8em 0 0.4em;
41
- letter-spacing: -0.01em;
42
- }
43
-
44
- .tiptap h3 {
45
- font-size: 1.2rem;
46
- font-weight: 600;
47
- color: rgba(255, 255, 255, 0.85);
48
- line-height: 1.4;
49
- margin: 1.5em 0 0.3em;
50
- }
51
-
52
- /* Paragraphs */
53
- .tiptap p {
54
- margin: 0.5em 0;
55
- }
56
-
57
- /* Lists */
58
- .tiptap ul,
59
- .tiptap ol {
60
- padding-left: 1.5rem;
61
- margin: 0.5em 0;
62
- }
63
-
64
- .tiptap li {
65
- margin: 0.25em 0;
66
- }
67
-
68
- .tiptap li p {
69
- margin: 0.15em 0;
70
- }
71
-
72
- /* Blockquote */
73
- .tiptap blockquote {
74
- border-left: 3px solid rgba(255, 255, 255, 0.2);
75
- padding-left: 1rem;
76
- margin: 1em 0;
77
- color: rgba(255, 255, 255, 0.6);
78
- }
79
-
80
- .tiptap blockquote p {
81
- margin: 0.4em 0;
82
- }
83
-
84
- /* Inline code */
85
- .tiptap code {
86
- font-family: "SFMono-Regular", "Fira Code", "Fira Mono", Menlo, Consolas, monospace;
87
- background: rgba(255, 255, 255, 0.06);
88
- padding: 0.15em 0.4em;
89
- border-radius: 4px;
90
- font-size: 0.88em;
91
- color: #e06c75;
92
- }
93
-
94
- /* Code block */
95
- .tiptap pre {
96
- background: rgba(255, 255, 255, 0.03);
97
- border: 1px solid rgba(255, 255, 255, 0.08);
98
- border-radius: 8px;
99
- padding: 1rem 1.25rem;
100
- margin: 1em 0;
101
- overflow-x: auto;
102
- }
103
-
104
- .tiptap pre code {
105
- background: none;
106
- padding: 0;
107
- color: rgba(255, 255, 255, 0.7);
108
- font-size: 0.875rem;
109
- line-height: 1.6;
110
- }
111
-
112
- /* Syntax highlighting (One Dark inspired) */
113
- .tiptap pre code .hljs-comment,
114
- .tiptap pre code .hljs-quote {
115
- color: #5c6370;
116
- font-style: italic;
117
- }
118
-
119
- .tiptap pre code .hljs-keyword,
120
- .tiptap pre code .hljs-selector-tag,
121
- .tiptap pre code .hljs-addition {
122
- color: #c678dd;
123
- }
124
-
125
- .tiptap pre code .hljs-string,
126
- .tiptap pre code .hljs-meta .hljs-string,
127
- .tiptap pre code .hljs-regexp,
128
- .tiptap pre code .hljs-doctag {
129
- color: #98c379;
130
- }
131
-
132
- .tiptap pre code .hljs-number,
133
- .tiptap pre code .hljs-literal,
134
- .tiptap pre code .hljs-bullet {
135
- color: #d19a66;
136
- }
137
-
138
- .tiptap pre code .hljs-variable,
139
- .tiptap pre code .hljs-template-variable,
140
- .tiptap pre code .hljs-tag .hljs-attr {
141
- color: #e06c75;
142
- }
143
-
144
- .tiptap pre code .hljs-type,
145
- .tiptap pre code .hljs-built_in,
146
- .tiptap pre code .hljs-class .hljs-title,
147
- .tiptap pre code .hljs-title.class_ {
148
- color: #e5c07b;
149
- }
150
-
151
- .tiptap pre code .hljs-function,
152
- .tiptap pre code .hljs-title,
153
- .tiptap pre code .hljs-section {
154
- color: #61afef;
155
- }
156
-
157
- .tiptap pre code .hljs-name,
158
- .tiptap pre code .hljs-tag {
159
- color: #e06c75;
160
- }
161
-
162
- .tiptap pre code .hljs-attr {
163
- color: #d19a66;
164
- }
165
-
166
- .tiptap pre code .hljs-symbol,
167
- .tiptap pre code .hljs-link {
168
- color: #56b6c2;
169
- }
170
-
171
- .tiptap pre code .hljs-meta,
172
- .tiptap pre code .hljs-selector-id,
173
- .tiptap pre code .hljs-selector-class {
174
- color: #61afef;
175
- }
176
-
177
- .tiptap pre code .hljs-deletion {
178
- color: #e06c75;
179
- }
180
 
181
- .tiptap pre code .hljs-emphasis {
182
- font-style: italic;
 
183
  }
184
 
185
- .tiptap pre code .hljs-strong {
186
- font-weight: 700;
187
  }
188
 
189
- /* Horizontal rule */
190
- .tiptap hr {
191
- border: none;
192
- border-top: 1px solid rgba(255, 255, 255, 0.1);
193
- margin: 2em 0;
 
 
 
194
  }
195
 
196
- /* Tables */
197
- .tiptap table {
198
- border-collapse: collapse;
199
  width: 100%;
200
- margin: 1em 0;
201
- overflow: hidden;
202
- border-radius: 6px;
203
- border: 1px solid rgba(255, 255, 255, 0.08);
204
- }
205
-
206
- .tiptap th,
207
- .tiptap td {
208
- padding: 0.5rem 0.75rem;
209
- border: 1px solid rgba(255, 255, 255, 0.08);
210
- text-align: left;
211
  font-size: 0.875rem;
212
- min-width: 80px;
213
- }
214
-
215
- .tiptap th {
216
- background: rgba(255, 255, 255, 0.04);
217
- color: rgba(255, 255, 255, 0.7);
218
- font-weight: 600;
219
- font-size: 0.8125rem;
220
- text-transform: uppercase;
221
- letter-spacing: 0.03em;
222
- }
223
-
224
- .tiptap td {
225
- color: rgba(255, 255, 255, 0.75);
226
- }
227
-
228
- .tiptap tr:hover td {
229
- background: rgba(255, 255, 255, 0.02);
230
  }
231
 
 
232
  .tiptap .selectedCell {
233
- background: rgba(149, 141, 241, 0.1);
234
- }
235
-
236
- /* Links */
237
- .tiptap a,
238
- .tiptap .editor-link {
239
- color: #958DF1;
240
- text-decoration: underline;
241
- text-decoration-color: rgba(149, 141, 241, 0.4);
242
- text-underline-offset: 2px;
243
- transition: text-decoration-color 0.15s;
244
- }
245
-
246
- .tiptap a:hover,
247
- .tiptap .editor-link:hover {
248
- text-decoration-color: rgba(149, 141, 241, 0.8);
249
- }
250
-
251
- /* Bold */
252
- .tiptap strong {
253
- font-weight: 600;
254
- color: rgba(255, 255, 255, 0.95);
255
  }
256
 
257
  /* Comment marks */
258
  .comment-mark {
259
- background: rgba(149, 141, 241, 0.15);
260
  border-bottom: 2px solid rgba(149, 141, 241, 0.4);
261
  cursor: pointer;
262
  border-radius: 2px;
@@ -264,12 +55,12 @@
264
  }
265
 
266
  .comment-mark:hover {
267
- background: rgba(149, 141, 241, 0.3);
268
  }
269
 
270
  .comment-mark.resolved {
271
  background: transparent;
272
- border-bottom: 1px dashed rgba(255, 255, 255, 0.1);
273
  }
274
 
275
  /* Collaboration cursors */
@@ -301,14 +92,14 @@
301
  .tiptap p.is-editor-empty:first-child::before {
302
  content: attr(data-placeholder);
303
  float: left;
304
- color: rgba(255, 255, 255, 0.25);
305
  pointer-events: none;
306
  height: 0;
307
  }
308
 
309
  /* Image upload card */
310
  .image-upload-card {
311
- border: 2px dashed rgba(255, 255, 255, 0.1);
312
  border-radius: 12px;
313
  padding: 2.5rem 1.5rem;
314
  margin: 1em 0;
@@ -321,17 +112,17 @@
321
  }
322
 
323
  .image-upload-card:hover {
324
- border-color: rgba(255, 255, 255, 0.18);
325
- background: rgba(255, 255, 255, 0.015);
326
  }
327
 
328
  .image-upload-card.dragging {
329
- border-color: #958DF1;
330
- background: rgba(149, 141, 241, 0.06);
331
  }
332
 
333
  .image-upload-card-icon {
334
- color: rgba(255, 255, 255, 0.2);
335
  }
336
 
337
  .image-upload-card-actions {
@@ -351,28 +142,27 @@
351
  }
352
 
353
  .image-upload-btn.primary {
354
- background: rgba(149, 141, 241, 0.15);
355
- color: #b4aef7;
356
  }
357
 
358
  .image-upload-btn.primary:hover {
359
- background: rgba(149, 141, 241, 0.25);
360
- color: #d0ccfa;
361
  }
362
 
363
  .image-upload-btn.secondary {
364
- background: rgba(255, 255, 255, 0.06);
365
- color: rgba(255, 255, 255, 0.5);
366
  }
367
 
368
  .image-upload-btn.secondary:hover {
369
- background: rgba(255, 255, 255, 0.1);
370
- color: rgba(255, 255, 255, 0.7);
371
  }
372
 
373
  .image-upload-card-hint {
374
  font-size: 0.75rem;
375
- color: rgba(255, 255, 255, 0.25);
376
  margin: 0;
377
  }
378
 
@@ -388,10 +178,10 @@
388
  .image-upload-url-input {
389
  width: 100%;
390
  padding: 0.5rem 0.75rem;
391
- border: 1px solid rgba(255, 255, 255, 0.12);
392
  border-radius: 6px;
393
- background: rgba(255, 255, 255, 0.04);
394
- color: rgba(255, 255, 255, 0.85);
395
  font-size: 0.8125rem;
396
  font-family: inherit;
397
  outline: none;
@@ -399,35 +189,72 @@
399
  }
400
 
401
  .image-upload-url-input:focus {
402
- border-color: rgba(149, 141, 241, 0.5);
403
  }
404
 
405
  .image-upload-url-input::placeholder {
406
- color: rgba(255, 255, 255, 0.25);
407
  }
408
 
409
- /* Uploaded images */
410
- .tiptap img {
411
- max-width: 100%;
412
- height: auto;
413
  border-radius: 8px;
414
- margin: 1em 0;
415
  }
416
 
417
- .tiptap .ProseMirror-selectednode img {
418
- outline: 2px solid #958DF1;
 
419
  outline-offset: 2px;
420
  border-radius: 8px;
421
  }
422
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
423
  /* Slash menu */
424
  .slash-menu {
425
- background: #1a1a1a;
426
- border: 1px solid rgba(255, 255, 255, 0.1);
427
  border-radius: 10px;
428
  padding: 0.35rem;
429
  min-width: 220px;
430
- box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5);
431
  overflow: hidden;
432
  }
433
 
@@ -443,14 +270,14 @@
443
  background: none;
444
  width: 100%;
445
  text-align: left;
446
- color: rgba(255, 255, 255, 0.8);
447
  font-size: 0.875rem;
448
  font-family: inherit;
449
  }
450
 
451
  .slash-menu-item:hover,
452
  .slash-menu-item.is-selected {
453
- background: rgba(255, 255, 255, 0.08);
454
  }
455
 
456
  .slash-menu-item-icon {
@@ -460,8 +287,8 @@
460
  align-items: center;
461
  justify-content: center;
462
  border-radius: 6px;
463
- background: rgba(255, 255, 255, 0.05);
464
- color: rgba(255, 255, 255, 0.5);
465
  font-size: 0.9rem;
466
  flex-shrink: 0;
467
  }
@@ -473,234 +300,67 @@
473
 
474
  .slash-menu-item-title {
475
  font-weight: 500;
476
- color: rgba(255, 255, 255, 0.85);
477
  font-size: 0.875rem;
478
  }
479
 
480
  .slash-menu-item-desc {
481
  font-size: 0.75rem;
482
- color: rgba(255, 255, 255, 0.4);
483
- }
484
-
485
- /* Math - inline */
486
- .tiptap [data-type="inline-math"] {
487
- cursor: pointer;
488
- }
489
-
490
- .tiptap [data-type="inline-math"] .tiptap-mathematics-render {
491
- padding: 0 0.2em;
492
- border-radius: 3px;
493
- transition: background 0.15s;
494
  }
495
 
496
- .tiptap [data-type="inline-math"] .tiptap-mathematics-render:hover {
497
- background: rgba(255, 255, 255, 0.06);
498
- }
499
-
500
- .tiptap [data-type="inline-math"] .tiptap-mathematics-editor {
501
- font-family: "SFMono-Regular", "Fira Code", monospace;
502
- font-size: 0.85em;
503
- color: #e06c75;
504
- background: rgba(255, 255, 255, 0.06);
505
- padding: 0.1em 0.4em;
506
- border-radius: 3px;
507
- outline: none;
508
- }
509
-
510
- /* Math - block */
511
- .tiptap [data-type="block-math"] {
512
- margin: 1em 0;
513
- cursor: pointer;
514
- }
515
-
516
- .tiptap [data-type="block-math"] .tiptap-mathematics-render {
517
- display: flex;
518
- justify-content: center;
519
- padding: 1rem 0;
520
- border-radius: 8px;
521
- transition: background 0.15s;
522
- }
523
-
524
- .tiptap [data-type="block-math"] .tiptap-mathematics-render:hover {
525
- background: rgba(255, 255, 255, 0.03);
526
- }
527
-
528
- .tiptap [data-type="block-math"] .tiptap-mathematics-editor {
529
- display: block;
530
  width: 100%;
531
- font-family: "SFMono-Regular", "Fira Code", monospace;
532
- font-size: 0.875rem;
533
- line-height: 1.6;
534
- color: #e06c75;
535
- background: rgba(255, 255, 255, 0.03);
536
- border: 1px solid rgba(255, 255, 255, 0.08);
537
- border-radius: 8px;
538
- padding: 1rem 1.25rem;
539
  outline: none;
540
- text-align: center;
 
541
  }
542
 
543
- /* Block handle (Notion-like: + and drag grip) */
544
- .block-handle {
545
- display: flex;
546
- align-items: center;
547
- gap: 1px;
548
- height: 28px;
549
  }
550
 
551
- .block-handle-btn {
552
- width: 22px;
553
- height: 24px;
554
  display: flex;
555
- align-items: center;
556
- justify-content: center;
557
- border: none;
558
- background: none;
559
- color: rgba(255, 255, 255, 0.2);
560
- border-radius: 4px;
561
- cursor: pointer;
562
- transition: color 0.12s, background 0.12s;
563
- padding: 0;
564
- line-height: 1;
565
- }
566
-
567
- .block-handle-btn:hover {
568
- color: rgba(255, 255, 255, 0.55);
569
- background: rgba(255, 255, 255, 0.06);
570
- }
571
-
572
- .block-handle-grip {
573
- cursor: grab;
574
- }
575
-
576
- .block-handle-grip:active {
577
- cursor: grabbing;
578
- }
579
-
580
- /* KaTeX color override for dark mode */
581
- .tiptap .katex {
582
- color: rgba(255, 255, 255, 0.85);
583
- }
584
-
585
- /* Citation inline node */
586
- .citation-node {
587
- position: relative;
588
- color: #958DF1;
589
- cursor: default;
590
- font-size: 0.9em;
591
- white-space: nowrap;
592
- text-decoration: underline;
593
- text-decoration-color: rgba(149, 141, 241, 0.3);
594
- text-underline-offset: 2px;
595
- transition: text-decoration-color 0.15s;
596
- }
597
-
598
- .citation-node:hover {
599
- text-decoration-color: rgba(149, 141, 241, 0.7);
600
- }
601
-
602
- /* Citation hover tooltip */
603
- .citation-tooltip {
604
- position: absolute;
605
- bottom: calc(100% + 8px);
606
- left: 50%;
607
- transform: translateX(-50%);
608
- background: #1e1e1e;
609
- border: 1px solid rgba(255, 255, 255, 0.12);
610
- border-radius: 8px;
611
- padding: 0.75rem;
612
- min-width: 240px;
613
- max-width: 320px;
614
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
615
- z-index: 100;
616
- white-space: normal;
617
- pointer-events: auto;
618
- }
619
-
620
- .citation-tooltip-title {
621
- color: rgba(255, 255, 255, 0.9);
622
- font-size: 0.8125rem;
623
- font-weight: 500;
624
- line-height: 1.4;
625
- margin-bottom: 0.35rem;
626
- }
627
-
628
- .citation-tooltip-journal {
629
- color: rgba(255, 255, 255, 0.5);
630
- font-size: 0.75rem;
631
- font-style: italic;
632
- line-height: 1.3;
633
- }
634
-
635
- .citation-tooltip-doi {
636
- color: rgba(255, 255, 255, 0.35);
637
- font-size: 0.7rem;
638
- font-family: "SFMono-Regular", "Fira Code", monospace;
639
- margin-top: 0.35rem;
640
- overflow: hidden;
641
- text-overflow: ellipsis;
642
  }
643
 
644
- .citation-tooltip-remove {
645
- display: block;
646
- margin-top: 0.5rem;
647
- margin-left: auto;
648
- padding: 0.25rem 0.6rem;
649
  border: none;
650
- border-radius: 4px;
651
- background: rgba(224, 108, 117, 0.12);
652
- color: #e06c75;
653
- font-size: 0.7rem;
654
- font-family: inherit;
655
  cursor: pointer;
656
- transition: background 0.15s;
657
- }
658
-
659
- .citation-tooltip-remove:hover {
660
- background: rgba(224, 108, 117, 0.25);
661
- }
662
-
663
- /* Bibliography block */
664
- .bibliography-block {
665
- margin: 2em 0 1em;
666
- padding-top: 1.5em;
667
- border-top: 1px solid rgba(255, 255, 255, 0.1);
668
- }
669
-
670
- .bibliography-title {
671
- font-size: 1.3rem;
672
- font-weight: 600;
673
- color: rgba(255, 255, 255, 0.9);
674
- margin: 0 0 1em;
675
- }
676
-
677
- .bibliography-empty {
678
- color: rgba(255, 255, 255, 0.3);
679
- font-size: 0.875rem;
680
- font-style: italic;
681
  }
682
 
683
- .bibliography-content {
684
- font-size: 0.875rem;
685
- line-height: 1.7;
686
- color: rgba(255, 255, 255, 0.7);
687
  }
688
 
689
- .bibliography-content .csl-entry {
690
- margin-bottom: 0.75em;
691
- padding-left: 2em;
692
- text-indent: -2em;
693
  }
694
 
695
- .bibliography-content .csl-entry i {
696
- font-style: italic;
697
  }
698
 
699
  /* Citation panel overlay */
700
  .citation-panel-overlay {
701
  position: fixed;
702
  inset: 0;
703
- background: rgba(0, 0, 0, 0.5);
704
  display: flex;
705
  align-items: center;
706
  justify-content: center;
@@ -708,8 +368,8 @@
708
  }
709
 
710
  .citation-panel {
711
- background: #1a1a1a;
712
- border: 1px solid rgba(255, 255, 255, 0.1);
713
  border-radius: 12px;
714
  width: 480px;
715
  max-height: 80vh;
@@ -724,20 +384,20 @@
724
  align-items: center;
725
  justify-content: space-between;
726
  padding: 1rem 1.25rem;
727
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
728
  }
729
 
730
  .citation-panel-header h3 {
731
  margin: 0;
732
  font-size: 1rem;
733
  font-weight: 600;
734
- color: rgba(255, 255, 255, 0.9);
735
  }
736
 
737
  .citation-panel-close {
738
  background: none;
739
  border: none;
740
- color: rgba(255, 255, 255, 0.4);
741
  font-size: 1.4rem;
742
  cursor: pointer;
743
  padding: 0;
@@ -745,7 +405,7 @@
745
  }
746
 
747
  .citation-panel-close:hover {
748
- color: rgba(255, 255, 255, 0.8);
749
  }
750
 
751
  .citation-panel-body {
@@ -759,10 +419,10 @@
759
  .citation-input {
760
  width: 100%;
761
  padding: 0.55rem 0.75rem;
762
- border: 1px solid rgba(255, 255, 255, 0.12);
763
  border-radius: 6px;
764
- background: rgba(255, 255, 255, 0.04);
765
- color: rgba(255, 255, 255, 0.85);
766
  font-size: 0.8125rem;
767
  font-family: inherit;
768
  outline: none;
@@ -771,11 +431,11 @@
771
  }
772
 
773
  .citation-input:focus {
774
- border-color: rgba(149, 141, 241, 0.5);
775
  }
776
 
777
  .citation-input::placeholder {
778
- color: rgba(255, 255, 255, 0.25);
779
  }
780
 
781
  .citation-smart-input {
@@ -784,7 +444,7 @@
784
  }
785
 
786
  .citation-error {
787
- color: #e06c75;
788
  font-size: 0.75rem;
789
  margin: 0;
790
  }
@@ -794,8 +454,8 @@
794
  padding: 0.5rem 1.25rem;
795
  border: none;
796
  border-radius: 6px;
797
- background: rgba(149, 141, 241, 0.15);
798
- color: #b4aef7;
799
  font-size: 0.8125rem;
800
  font-family: inherit;
801
  font-weight: 500;
@@ -804,7 +464,7 @@
804
  }
805
 
806
  .citation-resolve-btn:hover:not(:disabled) {
807
- background: rgba(149, 141, 241, 0.25);
808
  }
809
 
810
  .citation-resolve-btn:disabled {
@@ -816,7 +476,7 @@
816
  display: flex;
817
  align-items: center;
818
  gap: 0.75rem;
819
- color: rgba(255, 255, 255, 0.3);
820
  font-size: 0.75rem;
821
  margin-top: 0.25rem;
822
  }
@@ -825,7 +485,7 @@
825
  content: "";
826
  flex: 1;
827
  height: 1px;
828
- background: rgba(255, 255, 255, 0.06);
829
  }
830
 
831
  .citation-library-list {
@@ -844,7 +504,7 @@
844
  }
845
 
846
  .citation-library-item:hover {
847
- background: rgba(255, 255, 255, 0.04);
848
  }
849
 
850
  .citation-library-info {
@@ -856,13 +516,13 @@
856
  }
857
 
858
  .citation-library-meta {
859
- color: rgba(255, 255, 255, 0.5);
860
  font-size: 0.75rem;
861
  font-weight: 500;
862
  }
863
 
864
  .citation-library-title {
865
- color: rgba(255, 255, 255, 0.65);
866
  font-size: 0.75rem;
867
  white-space: nowrap;
868
  overflow: hidden;
@@ -878,8 +538,8 @@
878
  justify-content: center;
879
  border: none;
880
  border-radius: 6px;
881
- background: rgba(149, 141, 241, 0.1);
882
- color: #958DF1;
883
  font-size: 1rem;
884
  font-weight: 500;
885
  cursor: pointer;
@@ -892,185 +552,5 @@
892
  }
893
 
894
  .citation-library-insert:hover {
895
- background: rgba(149, 141, 241, 0.25);
896
- }
897
-
898
- /* -----------------------------------------------------------------------
899
- Custom component blocks (Accordion, Note, Quote, …)
900
- ----------------------------------------------------------------------- */
901
-
902
- /* Ensure editable area inside wrapper components has proper spacing */
903
- .component-content > *:first-child {
904
- margin-top: 0;
905
- }
906
-
907
- .component-content > *:last-child {
908
- margin-bottom: 0;
909
- }
910
-
911
- /* Selection ring when the wrapper node is selected */
912
- .tiptap [data-component].ProseMirror-selectednode {
913
- outline: 2px solid rgba(149, 141, 241, 0.5);
914
- outline-offset: 2px;
915
- border-radius: 8px;
916
- }
917
-
918
- /* -----------------------------------------------------------------------
919
- Glossary inline node
920
- ----------------------------------------------------------------------- */
921
-
922
- .glossary-node {
923
- position: relative;
924
- display: inline;
925
- border-bottom: 1px dashed rgba(149, 141, 241, 0.5);
926
- color: rgba(149, 141, 241, 0.9);
927
- cursor: help;
928
- }
929
-
930
- .glossary-tooltip {
931
- position: absolute;
932
- bottom: calc(100% + 6px);
933
- left: 50%;
934
- transform: translateX(-50%);
935
- background: #1e1e2e;
936
- border: 1px solid rgba(255, 255, 255, 0.12);
937
- border-radius: 8px;
938
- padding: 10px 14px;
939
- min-width: 200px;
940
- max-width: 320px;
941
- z-index: 50;
942
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
943
- }
944
-
945
- .glossary-tooltip-term {
946
- font-weight: 700;
947
- font-size: 13px;
948
- color: rgba(255, 255, 255, 0.9);
949
- margin-bottom: 4px;
950
- }
951
-
952
- .glossary-tooltip-def {
953
- font-size: 12px;
954
- color: rgba(255, 255, 255, 0.6);
955
- line-height: 1.5;
956
- }
957
-
958
- .glossary-tooltip-remove {
959
- margin-top: 8px;
960
- background: none;
961
- border: none;
962
- color: rgba(239, 68, 68, 0.8);
963
- font-size: 11px;
964
- cursor: pointer;
965
- padding: 0;
966
- }
967
-
968
- .glossary-tooltip-remove:hover {
969
- color: #ef4444;
970
- }
971
-
972
- /* -----------------------------------------------------------------------
973
- Footnote inline node
974
- ----------------------------------------------------------------------- */
975
-
976
- .footnote-node {
977
- position: relative;
978
- display: inline;
979
- }
980
-
981
- .footnote-marker {
982
- color: rgba(149, 141, 241, 0.9);
983
- cursor: pointer;
984
- font-size: 0.75em;
985
- font-weight: 700;
986
- margin: 0 1px;
987
- }
988
-
989
- .footnote-tooltip {
990
- position: absolute;
991
- bottom: calc(100% + 6px);
992
- left: 50%;
993
- transform: translateX(-50%);
994
- background: #1e1e2e;
995
- border: 1px solid rgba(255, 255, 255, 0.12);
996
- border-radius: 8px;
997
- padding: 10px 14px;
998
- min-width: 220px;
999
- max-width: 360px;
1000
- z-index: 50;
1001
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
1002
- }
1003
-
1004
- .footnote-tooltip-content {
1005
- font-size: 12px;
1006
- color: rgba(255, 255, 255, 0.7);
1007
- line-height: 1.5;
1008
- }
1009
-
1010
- .footnote-tooltip-input {
1011
- width: 100%;
1012
- background: rgba(255, 255, 255, 0.06);
1013
- border: 1px solid rgba(255, 255, 255, 0.15);
1014
- border-radius: 4px;
1015
- color: rgba(255, 255, 255, 0.9);
1016
- font-size: 12px;
1017
- padding: 6px 8px;
1018
- resize: vertical;
1019
- outline: none;
1020
- font-family: inherit;
1021
- line-height: 1.5;
1022
- }
1023
-
1024
- .footnote-tooltip-input:focus {
1025
- border-color: rgba(149, 141, 241, 0.5);
1026
- }
1027
-
1028
- .footnote-tooltip-actions {
1029
- display: flex;
1030
- gap: 8px;
1031
- margin-top: 8px;
1032
- }
1033
-
1034
- .footnote-tooltip-btn {
1035
- background: none;
1036
- border: none;
1037
- font-size: 11px;
1038
- cursor: pointer;
1039
- padding: 0;
1040
- color: rgba(149, 141, 241, 0.8);
1041
- }
1042
-
1043
- .footnote-tooltip-btn:hover {
1044
- color: #958df1;
1045
- }
1046
-
1047
- .footnote-tooltip-remove {
1048
- color: rgba(239, 68, 68, 0.8) !important;
1049
- }
1050
-
1051
- .footnote-tooltip-remove:hover {
1052
- color: #ef4444 !important;
1053
- }
1054
-
1055
- /* -----------------------------------------------------------------------
1056
- Stack columns
1057
- ----------------------------------------------------------------------- */
1058
-
1059
- .stack-columns {
1060
- display: contents;
1061
- }
1062
-
1063
- .stack-columns > div[data-type="stack-column"] {
1064
- border: 1px dashed rgba(255, 255, 255, 0.08);
1065
- border-radius: 6px;
1066
- padding: 8px;
1067
- min-height: 40px;
1068
- }
1069
-
1070
- .stack-columns > div[data-type="stack-column"] > *:first-child {
1071
- margin-top: 0;
1072
- }
1073
-
1074
- .stack-columns > div[data-type="stack-column"] > *:last-child {
1075
- margin-bottom: 0;
1076
  }
 
1
+ /* -----------------------------------------------------------------------
2
+ Editor-only styles
3
+
4
+ These styles are NOT included in the published version.
5
+ They handle editor chrome: cursors, selection, placeholders,
6
+ block handles, slash menu, upload UI, panels, etc.
7
+ ----------------------------------------------------------------------- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
+ /* Math editing */
10
+ .tiptap [data-type="inline-math"] {
11
+ cursor: pointer;
12
  }
13
 
14
+ .tiptap [data-type="block-math"] {
15
+ cursor: pointer;
16
  }
17
 
18
+ .tiptap [data-type="inline-math"] .tiptap-mathematics-editor {
19
+ font-family: "SFMono-Regular", "Fira Code", monospace;
20
+ font-size: 0.85em;
21
+ color: var(--code-text);
22
+ background: var(--bg-code);
23
+ padding: 0.1em 0.4em;
24
+ border-radius: 3px;
25
+ outline: none;
26
  }
27
 
28
+ .tiptap [data-type="block-math"] .tiptap-mathematics-editor {
29
+ display: block;
 
30
  width: 100%;
31
+ font-family: "SFMono-Regular", "Fira Code", monospace;
 
 
 
 
 
 
 
 
 
 
32
  font-size: 0.875rem;
33
+ line-height: 1.6;
34
+ color: var(--code-text);
35
+ background: var(--bg-code-block);
36
+ border: 1px solid var(--border-light);
37
+ border-radius: 8px;
38
+ padding: 1rem 1.25rem;
39
+ outline: none;
40
+ text-align: center;
 
 
 
 
 
 
 
 
 
 
41
  }
42
 
43
+ /* Table cell selection */
44
  .tiptap .selectedCell {
45
+ background: var(--accent-bg);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
47
 
48
  /* Comment marks */
49
  .comment-mark {
50
+ background: var(--accent-bg);
51
  border-bottom: 2px solid rgba(149, 141, 241, 0.4);
52
  cursor: pointer;
53
  border-radius: 2px;
 
55
  }
56
 
57
  .comment-mark:hover {
58
+ background: var(--accent-bg-hover);
59
  }
60
 
61
  .comment-mark.resolved {
62
  background: transparent;
63
+ border-bottom: 1px dashed var(--border);
64
  }
65
 
66
  /* Collaboration cursors */
 
92
  .tiptap p.is-editor-empty:first-child::before {
93
  content: attr(data-placeholder);
94
  float: left;
95
+ color: var(--text-faint);
96
  pointer-events: none;
97
  height: 0;
98
  }
99
 
100
  /* Image upload card */
101
  .image-upload-card {
102
+ border: 2px dashed var(--border);
103
  border-radius: 12px;
104
  padding: 2.5rem 1.5rem;
105
  margin: 1em 0;
 
112
  }
113
 
114
  .image-upload-card:hover {
115
+ border-color: var(--text-tertiary);
116
+ background: var(--bg-hover);
117
  }
118
 
119
  .image-upload-card.dragging {
120
+ border-color: var(--accent-light);
121
+ background: var(--accent-bg);
122
  }
123
 
124
  .image-upload-card-icon {
125
+ color: var(--text-faint);
126
  }
127
 
128
  .image-upload-card-actions {
 
142
  }
143
 
144
  .image-upload-btn.primary {
145
+ background: var(--accent-bg);
146
+ color: var(--accent-text);
147
  }
148
 
149
  .image-upload-btn.primary:hover {
150
+ background: var(--accent-bg-hover);
 
151
  }
152
 
153
  .image-upload-btn.secondary {
154
+ background: var(--bg-code);
155
+ color: var(--text-secondary);
156
  }
157
 
158
  .image-upload-btn.secondary:hover {
159
+ background: var(--bg-code);
160
+ color: var(--text-primary);
161
  }
162
 
163
  .image-upload-card-hint {
164
  font-size: 0.75rem;
165
+ color: var(--text-faint);
166
  margin: 0;
167
  }
168
 
 
178
  .image-upload-url-input {
179
  width: 100%;
180
  padding: 0.5rem 0.75rem;
181
+ border: 1px solid var(--border);
182
  border-radius: 6px;
183
+ background: var(--bg-code);
184
+ color: var(--text-primary);
185
  font-size: 0.8125rem;
186
  font-family: inherit;
187
  outline: none;
 
189
  }
190
 
191
  .image-upload-url-input:focus {
192
+ border-color: var(--border-focus);
193
  }
194
 
195
  .image-upload-url-input::placeholder {
196
+ color: var(--text-faint);
197
  }
198
 
199
+ /* Image selection */
200
+ .tiptap .ProseMirror-selectednode img {
201
+ outline: 2px solid var(--accent-light);
202
+ outline-offset: 2px;
203
  border-radius: 8px;
 
204
  }
205
 
206
+ /* Component selection ring */
207
+ .tiptap [data-component].ProseMirror-selectednode {
208
+ outline: 2px solid rgba(149, 141, 241, 0.5);
209
  outline-offset: 2px;
210
  border-radius: 8px;
211
  }
212
 
213
+ /* Block handle */
214
+ .block-handle {
215
+ display: flex;
216
+ align-items: center;
217
+ gap: 1px;
218
+ height: 28px;
219
+ }
220
+
221
+ .block-handle-btn {
222
+ width: 22px;
223
+ height: 24px;
224
+ display: flex;
225
+ align-items: center;
226
+ justify-content: center;
227
+ border: none;
228
+ background: none;
229
+ color: var(--text-faint);
230
+ border-radius: 4px;
231
+ cursor: pointer;
232
+ transition: color 0.12s, background 0.12s;
233
+ padding: 0;
234
+ line-height: 1;
235
+ }
236
+
237
+ .block-handle-btn:hover {
238
+ color: var(--text-secondary);
239
+ background: var(--bg-code);
240
+ }
241
+
242
+ .block-handle-grip {
243
+ cursor: grab;
244
+ }
245
+
246
+ .block-handle-grip:active {
247
+ cursor: grabbing;
248
+ }
249
+
250
  /* Slash menu */
251
  .slash-menu {
252
+ background: var(--bg-surface);
253
+ border: 1px solid var(--border);
254
  border-radius: 10px;
255
  padding: 0.35rem;
256
  min-width: 220px;
257
+ box-shadow: var(--shadow-lg);
258
  overflow: hidden;
259
  }
260
 
 
270
  background: none;
271
  width: 100%;
272
  text-align: left;
273
+ color: var(--text-primary);
274
  font-size: 0.875rem;
275
  font-family: inherit;
276
  }
277
 
278
  .slash-menu-item:hover,
279
  .slash-menu-item.is-selected {
280
+ background: var(--bg-code);
281
  }
282
 
283
  .slash-menu-item-icon {
 
287
  align-items: center;
288
  justify-content: center;
289
  border-radius: 6px;
290
+ background: var(--bg-code);
291
+ color: var(--text-secondary);
292
  font-size: 0.9rem;
293
  flex-shrink: 0;
294
  }
 
300
 
301
  .slash-menu-item-title {
302
  font-weight: 500;
303
+ color: var(--text-primary);
304
  font-size: 0.875rem;
305
  }
306
 
307
  .slash-menu-item-desc {
308
  font-size: 0.75rem;
309
+ color: var(--text-tertiary);
 
 
 
 
 
 
 
 
 
 
 
310
  }
311
 
312
+ /* Footnote editing controls */
313
+ .footnote-tooltip-input {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
314
  width: 100%;
315
+ background: var(--bg-code);
316
+ border: 1px solid var(--border);
317
+ border-radius: 4px;
318
+ color: var(--text-primary);
319
+ font-size: 12px;
320
+ padding: 6px 8px;
321
+ resize: vertical;
 
322
  outline: none;
323
+ font-family: inherit;
324
+ line-height: 1.5;
325
  }
326
 
327
+ .footnote-tooltip-input:focus {
328
+ border-color: var(--border-focus);
 
 
 
 
329
  }
330
 
331
+ .footnote-tooltip-actions {
 
 
332
  display: flex;
333
+ gap: 8px;
334
+ margin-top: 8px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
335
  }
336
 
337
+ .footnote-tooltip-btn {
338
+ background: none;
 
 
 
339
  border: none;
340
+ font-size: 11px;
 
 
 
 
341
  cursor: pointer;
342
+ padding: 0;
343
+ color: rgba(149, 141, 241, 0.8);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
344
  }
345
 
346
+ .footnote-tooltip-btn:hover {
347
+ color: var(--accent-light);
 
 
348
  }
349
 
350
+ .footnote-tooltip-remove {
351
+ color: var(--danger) !important;
352
+ opacity: 0.8;
 
353
  }
354
 
355
+ .footnote-tooltip-remove:hover {
356
+ opacity: 1 !important;
357
  }
358
 
359
  /* Citation panel overlay */
360
  .citation-panel-overlay {
361
  position: fixed;
362
  inset: 0;
363
+ background: var(--bg-overlay);
364
  display: flex;
365
  align-items: center;
366
  justify-content: center;
 
368
  }
369
 
370
  .citation-panel {
371
+ background: var(--bg-surface);
372
+ border: 1px solid var(--border);
373
  border-radius: 12px;
374
  width: 480px;
375
  max-height: 80vh;
 
384
  align-items: center;
385
  justify-content: space-between;
386
  padding: 1rem 1.25rem;
387
+ border-bottom: 1px solid var(--border-light);
388
  }
389
 
390
  .citation-panel-header h3 {
391
  margin: 0;
392
  font-size: 1rem;
393
  font-weight: 600;
394
+ color: var(--text-heading-secondary);
395
  }
396
 
397
  .citation-panel-close {
398
  background: none;
399
  border: none;
400
+ color: var(--text-tertiary);
401
  font-size: 1.4rem;
402
  cursor: pointer;
403
  padding: 0;
 
405
  }
406
 
407
  .citation-panel-close:hover {
408
+ color: var(--text-primary);
409
  }
410
 
411
  .citation-panel-body {
 
419
  .citation-input {
420
  width: 100%;
421
  padding: 0.55rem 0.75rem;
422
+ border: 1px solid var(--border);
423
  border-radius: 6px;
424
+ background: var(--bg-code);
425
+ color: var(--text-primary);
426
  font-size: 0.8125rem;
427
  font-family: inherit;
428
  outline: none;
 
431
  }
432
 
433
  .citation-input:focus {
434
+ border-color: var(--border-focus);
435
  }
436
 
437
  .citation-input::placeholder {
438
+ color: var(--text-faint);
439
  }
440
 
441
  .citation-smart-input {
 
444
  }
445
 
446
  .citation-error {
447
+ color: var(--danger);
448
  font-size: 0.75rem;
449
  margin: 0;
450
  }
 
454
  padding: 0.5rem 1.25rem;
455
  border: none;
456
  border-radius: 6px;
457
+ background: var(--accent-bg);
458
+ color: var(--accent-text);
459
  font-size: 0.8125rem;
460
  font-family: inherit;
461
  font-weight: 500;
 
464
  }
465
 
466
  .citation-resolve-btn:hover:not(:disabled) {
467
+ background: var(--accent-bg-hover);
468
  }
469
 
470
  .citation-resolve-btn:disabled {
 
476
  display: flex;
477
  align-items: center;
478
  gap: 0.75rem;
479
+ color: var(--text-faint);
480
  font-size: 0.75rem;
481
  margin-top: 0.25rem;
482
  }
 
485
  content: "";
486
  flex: 1;
487
  height: 1px;
488
+ background: var(--border-light);
489
  }
490
 
491
  .citation-library-list {
 
504
  }
505
 
506
  .citation-library-item:hover {
507
+ background: var(--bg-code);
508
  }
509
 
510
  .citation-library-info {
 
516
  }
517
 
518
  .citation-library-meta {
519
+ color: var(--text-secondary);
520
  font-size: 0.75rem;
521
  font-weight: 500;
522
  }
523
 
524
  .citation-library-title {
525
+ color: var(--text-tertiary);
526
  font-size: 0.75rem;
527
  white-space: nowrap;
528
  overflow: hidden;
 
538
  justify-content: center;
539
  border: none;
540
  border-radius: 6px;
541
+ background: var(--accent-bg);
542
+ color: var(--accent-light);
543
  font-size: 1rem;
544
  font-weight: 500;
545
  cursor: pointer;
 
552
  }
553
 
554
  .citation-library-insert:hover {
555
+ background: var(--accent-bg-hover);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
556
  }
frontend/src/styles/tokens.css ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -----------------------------------------------------------------------
2
+ Design tokens - Light / Dark theming
3
+
4
+ Usage: var(--token-name)
5
+ Toggle: data-theme="light" or data-theme="dark" on <html>
6
+ Default: follows prefers-color-scheme
7
+ ----------------------------------------------------------------------- */
8
+
9
+ :root,
10
+ [data-theme="light"] {
11
+ --text-primary: #1a1a1a;
12
+ --text-secondary: #555;
13
+ --text-tertiary: #888;
14
+ --text-faint: #aaa;
15
+ --text-heading: #111;
16
+ --text-heading-secondary: #222;
17
+ --text-strong: #000;
18
+
19
+ --bg-primary: #ffffff;
20
+ --bg-secondary: #f7f7f7;
21
+ --bg-tertiary: #f0f0f0;
22
+ --bg-hover: rgba(0, 0, 0, 0.03);
23
+ --bg-overlay: rgba(0, 0, 0, 0.5);
24
+ --bg-tooltip: #ffffff;
25
+ --bg-surface: #ffffff;
26
+ --bg-code: rgba(0, 0, 0, 0.04);
27
+ --bg-code-block: #fafafa;
28
+
29
+ --border: #e0e0e0;
30
+ --border-light: #eeeeee;
31
+ --border-focus: rgba(124, 58, 237, 0.5);
32
+
33
+ --accent: #7c3aed;
34
+ --accent-light: #958DF1;
35
+ --accent-bg: rgba(124, 58, 237, 0.08);
36
+ --accent-bg-hover: rgba(124, 58, 237, 0.15);
37
+ --accent-text: #6d28d9;
38
+
39
+ --code-text: #d63384;
40
+ --code-comment: #6a737d;
41
+ --code-keyword: #8250df;
42
+ --code-string: #0a6640;
43
+ --code-number: #b35900;
44
+ --code-variable: #d63384;
45
+ --code-type: #b35900;
46
+ --code-function: #0550ae;
47
+ --code-tag: #d63384;
48
+ --code-attr: #b35900;
49
+ --code-symbol: #0a6640;
50
+ --code-meta: #0550ae;
51
+ --code-deletion: #d63384;
52
+
53
+ --danger: #dc2626;
54
+ --danger-bg: rgba(220, 38, 38, 0.08);
55
+ --danger-bg-hover: rgba(220, 38, 38, 0.15);
56
+
57
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
58
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.1);
59
+ --shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.12);
60
+
61
+ --katex-color: #1a1a1a;
62
+ }
63
+
64
+ [data-theme="dark"] {
65
+ --text-primary: rgba(255, 255, 255, 0.85);
66
+ --text-secondary: rgba(255, 255, 255, 0.5);
67
+ --text-tertiary: rgba(255, 255, 255, 0.4);
68
+ --text-faint: rgba(255, 255, 255, 0.25);
69
+ --text-heading: #fff;
70
+ --text-heading-secondary: rgba(255, 255, 255, 0.9);
71
+ --text-strong: rgba(255, 255, 255, 0.95);
72
+
73
+ --bg-primary: #0a0a0a;
74
+ --bg-secondary: #1a1a1a;
75
+ --bg-tertiary: #1e1e1e;
76
+ --bg-hover: rgba(255, 255, 255, 0.03);
77
+ --bg-overlay: rgba(0, 0, 0, 0.5);
78
+ --bg-tooltip: #1e1e2e;
79
+ --bg-surface: #1a1a1a;
80
+ --bg-code: rgba(255, 255, 255, 0.06);
81
+ --bg-code-block: rgba(255, 255, 255, 0.03);
82
+
83
+ --border: rgba(255, 255, 255, 0.1);
84
+ --border-light: rgba(255, 255, 255, 0.06);
85
+ --border-focus: rgba(149, 141, 241, 0.5);
86
+
87
+ --accent: #7c3aed;
88
+ --accent-light: #958DF1;
89
+ --accent-bg: rgba(149, 141, 241, 0.15);
90
+ --accent-bg-hover: rgba(149, 141, 241, 0.25);
91
+ --accent-text: #b4aef7;
92
+
93
+ --code-text: #e06c75;
94
+ --code-comment: #5c6370;
95
+ --code-keyword: #c678dd;
96
+ --code-string: #98c379;
97
+ --code-number: #d19a66;
98
+ --code-variable: #e06c75;
99
+ --code-type: #e5c07b;
100
+ --code-function: #61afef;
101
+ --code-tag: #e06c75;
102
+ --code-attr: #d19a66;
103
+ --code-symbol: #56b6c2;
104
+ --code-meta: #61afef;
105
+ --code-deletion: #e06c75;
106
+
107
+ --danger: #e06c75;
108
+ --danger-bg: rgba(224, 108, 117, 0.12);
109
+ --danger-bg-hover: rgba(224, 108, 117, 0.25);
110
+
111
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
112
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
113
+ --shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.5);
114
+
115
+ --katex-color: rgba(255, 255, 255, 0.85);
116
+ }
117
+
118
+ @media (prefers-color-scheme: dark) {
119
+ :root:not([data-theme="light"]) {
120
+ --text-primary: rgba(255, 255, 255, 0.85);
121
+ --text-secondary: rgba(255, 255, 255, 0.5);
122
+ --text-tertiary: rgba(255, 255, 255, 0.4);
123
+ --text-faint: rgba(255, 255, 255, 0.25);
124
+ --text-heading: #fff;
125
+ --text-heading-secondary: rgba(255, 255, 255, 0.9);
126
+ --text-strong: rgba(255, 255, 255, 0.95);
127
+
128
+ --bg-primary: #0a0a0a;
129
+ --bg-secondary: #1a1a1a;
130
+ --bg-tertiary: #1e1e1e;
131
+ --bg-hover: rgba(255, 255, 255, 0.03);
132
+ --bg-overlay: rgba(0, 0, 0, 0.5);
133
+ --bg-tooltip: #1e1e2e;
134
+ --bg-surface: #1a1a1a;
135
+ --bg-code: rgba(255, 255, 255, 0.06);
136
+ --bg-code-block: rgba(255, 255, 255, 0.03);
137
+
138
+ --border: rgba(255, 255, 255, 0.1);
139
+ --border-light: rgba(255, 255, 255, 0.06);
140
+ --border-focus: rgba(149, 141, 241, 0.5);
141
+
142
+ --accent: #7c3aed;
143
+ --accent-light: #958DF1;
144
+ --accent-bg: rgba(149, 141, 241, 0.15);
145
+ --accent-bg-hover: rgba(149, 141, 241, 0.25);
146
+ --accent-text: #b4aef7;
147
+
148
+ --code-text: #e06c75;
149
+ --code-comment: #5c6370;
150
+ --code-keyword: #c678dd;
151
+ --code-string: #98c379;
152
+ --code-number: #d19a66;
153
+ --code-variable: #e06c75;
154
+ --code-type: #e5c07b;
155
+ --code-function: #61afef;
156
+ --code-tag: #e06c75;
157
+ --code-attr: #d19a66;
158
+ --code-symbol: #56b6c2;
159
+ --code-meta: #61afef;
160
+ --code-deletion: #e06c75;
161
+
162
+ --danger: #e06c75;
163
+ --danger-bg: rgba(224, 108, 117, 0.12);
164
+ --danger-bg-hover: rgba(224, 108, 117, 0.25);
165
+
166
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
167
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
168
+ --shadow-lg: 0 8px 30px rgba(0, 0, 0, 0.5);
169
+
170
+ --katex-color: rgba(255, 255, 255, 0.85);
171
+ }
172
+ }