collabmd 0.1.21 → 0.1.23

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.
Files changed (99) hide show
  1. package/README.md +94 -7
  2. package/bin/collabmd.js +3 -2
  3. package/docker-compose.yml +13 -1
  4. package/package.json +2 -1
  5. package/public/assets/css/style.css +1 -1
  6. package/public/assets/js/chunks/{chunk-HEWVH67U.js → chunk-CYK7KO7W.js} +8 -8
  7. package/public/assets/js/chunks/editor-session-S5AT7BMV.js +22 -0
  8. package/public/assets/js/{excalidraw-editor-TCIH6GJL.js → excalidraw-editor-5YWMGLKF.js} +145 -62
  9. package/public/assets/js/excalidraw-editor.js +1 -1
  10. package/public/assets/js/main.js +503 -182
  11. package/public/index.html +104 -84
  12. package/src/client/application/app-shell/git-feature.js +247 -9
  13. package/src/client/application/app-shell/ui-feature.js +65 -7
  14. package/src/client/application/app-shell/workspace-feature.js +46 -0
  15. package/src/client/application/app-shell-elements.js +2 -0
  16. package/src/client/application/mermaid-preview-hydrator.js +1 -1
  17. package/src/client/application/plantuml-preview-hydrator.js +1 -1
  18. package/src/client/application/workspace-coordinator.js +147 -18
  19. package/src/client/application/workspace-preview-controller.js +34 -0
  20. package/src/client/application/workspace-route-controller.js +104 -0
  21. package/src/client/bootstrap/collabmd-app-shell.js +95 -0
  22. package/src/client/domain/runtime-paths.js +5 -0
  23. package/src/client/excalidraw-editor.js +50 -2
  24. package/src/client/infrastructure/auth-client.js +219 -52
  25. package/src/client/infrastructure/browser-navigation-port.js +20 -0
  26. package/src/client/infrastructure/editor-collaboration-client.js +4 -0
  27. package/src/client/infrastructure/editor-session.js +47 -7
  28. package/src/client/infrastructure/editor-view-adapter.js +122 -58
  29. package/src/client/infrastructure/runtime-config.js +66 -0
  30. package/src/client/presentation/comment-ui-controller.js +82 -26
  31. package/src/client/presentation/comments-panel.js +2 -2
  32. package/src/client/presentation/excalidraw-embed-controller.js +60 -2
  33. package/src/client/presentation/file-history-view-controller.js +806 -0
  34. package/src/client/presentation/git-diff-view-controller.js +718 -121
  35. package/src/client/presentation/git-panel-controller.js +458 -66
  36. package/src/client/presentation/layout-controller.js +1 -1
  37. package/src/client/styles/components/actions.css +89 -0
  38. package/src/client/styles/components/feedback.css +43 -0
  39. package/src/client/styles/components/navigation.css +68 -0
  40. package/src/client/styles/components/scrollbars.css +104 -0
  41. package/src/client/styles/components/states.css +289 -0
  42. package/src/client/styles/components/surfaces.css +155 -0
  43. package/src/client/styles/features/backlinks.css +213 -0
  44. package/src/client/styles/features/collaboration-chat.css +228 -0
  45. package/src/client/styles/features/collaboration-dialogs.css +154 -0
  46. package/src/client/styles/features/collaboration-presence.css +103 -0
  47. package/src/client/styles/features/collaboration-ui.css +3 -0
  48. package/src/client/styles/features/comment-card.css +236 -0
  49. package/src/client/styles/features/comment-markdown.css +127 -0
  50. package/src/client/styles/features/comment-overlays.css +60 -0
  51. package/src/client/styles/features/comments-drawer.css +120 -0
  52. package/src/client/styles/features/comments.css +4 -0
  53. package/src/client/styles/features/diagram-preview.css +227 -0
  54. package/src/client/styles/features/diff-commit.css +268 -0
  55. package/src/client/styles/features/diff-lines.css +160 -0
  56. package/src/client/styles/features/diff-toolbar.css +98 -0
  57. package/src/client/styles/features/diff.css +3 -0
  58. package/src/client/styles/features/embedded-preview.css +218 -0
  59. package/src/client/styles/features/git-branch.css +155 -0
  60. package/src/client/styles/features/git-files.css +105 -0
  61. package/src/client/styles/features/git-history.css +339 -0
  62. package/src/client/styles/features/git.css +3 -0
  63. package/src/client/styles/features/media-lightbox.css +157 -0
  64. package/src/client/styles/features/outline.css +115 -0
  65. package/src/client/styles/features/preview-content.css +3 -0
  66. package/src/client/styles/features/preview-markdown.css +201 -0
  67. package/src/client/styles/features/preview-sidebars.css +2 -0
  68. package/src/client/styles/features/quick-switcher.css +167 -0
  69. package/src/client/styles/foundation/themes.css +347 -0
  70. package/src/client/styles/foundation/tokens.css +66 -0
  71. package/src/client/styles/foundation/utilities.css +36 -0
  72. package/src/client/styles/layout/editor-page.css +203 -0
  73. package/src/client/styles/layout/overlays.css +132 -0
  74. package/src/client/styles/layout/responsive.css +251 -0
  75. package/src/client/styles/layout/shell.css +314 -0
  76. package/src/client/styles/layout/sidebar.css +176 -0
  77. package/src/client/styles/layout/view-modes.css +92 -0
  78. package/src/client/styles/overrides/codemirror.css +53 -0
  79. package/src/client/styles/overrides/highlightjs.css +7 -0
  80. package/src/client/styles/overrides/vendor.css +2 -0
  81. package/src/client/styles/primitives/controls.css +276 -0
  82. package/src/client/styles/style.css +25 -4945
  83. package/src/server/auth/create-auth-service.js +373 -15
  84. package/src/server/auth/session-cookie.js +30 -4
  85. package/src/server/config/env.js +121 -5
  86. package/src/server/create-app-server.js +8 -0
  87. package/src/server/domain/collaboration/collaboration-room.js +90 -47
  88. package/src/server/index.js +3 -1
  89. package/src/server/infrastructure/git/command-runner.js +2 -1
  90. package/src/server/infrastructure/git/git-service.js +48 -2
  91. package/src/server/infrastructure/git/history-service.js +683 -0
  92. package/src/server/infrastructure/git/parsers.js +30 -0
  93. package/src/server/infrastructure/git/responses.js +73 -0
  94. package/src/server/infrastructure/http/create-auth-api-handler.js +30 -2
  95. package/src/server/infrastructure/http/create-git-api-command-handler.js +2 -0
  96. package/src/server/infrastructure/http/create-git-api-handler.js +2 -0
  97. package/src/server/infrastructure/http/create-git-api-query-handler.js +61 -0
  98. package/src/server/infrastructure/http/create-request-handler.js +15 -0
  99. package/public/assets/js/chunks/editor-session-EAUBJCHH.js +0 -22
@@ -1,4945 +1,25 @@
1
- /* CollabMD Design Tokens & Styles */
2
-
3
- /* ===== TYPE SCALE ===== */
4
- :root {
5
- --text-xs: clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem);
6
- --text-sm: clamp(0.875rem, 0.8rem + 0.35vw, 1rem);
7
- --text-base: clamp(1rem, 0.9rem + 0.5vw, 1.125rem);
8
- --text-lg: clamp(1.125rem, 0.95rem + 0.85vw, 1.5rem);
9
- --text-xl: clamp(1.5rem, 1rem + 1.5vw, 2.25rem);
10
- --text-2xl: clamp(2rem, 1.2rem + 2.5vw, 3.5rem);
11
-
12
- /* Fonts */
13
- --font-body: 'Inter', system-ui, sans-serif;
14
- --font-display: 'Geist', 'Cal Sans', 'Inter', system-ui, sans-serif;
15
- --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
16
-
17
- /* ===== SPACING (4px base) ===== */
18
- --space-1: 0.25rem;
19
- --space-2: 0.5rem;
20
- --space-3: 0.75rem;
21
- --space-4: 1rem;
22
- --space-5: 1.25rem;
23
- --space-6: 1.5rem;
24
- --space-8: 2rem;
25
- --space-10: 2.5rem;
26
- --space-12: 3rem;
27
- --space-16: 4rem;
28
- --space-20: 5rem;
29
- --space-24: 6rem;
30
- --space-32: 8rem;
31
-
32
- /* Radius */
33
- --radius-sm: 0.375rem;
34
- --radius-md: 0.5rem;
35
- --radius-lg: 0.75rem;
36
- --radius-xl: 1rem;
37
- --radius-full: 9999px;
38
-
39
- /* Transitions */
40
- --transition-interactive: 180ms cubic-bezier(0.16, 1, 0.3, 1);
41
-
42
- /* Content widths */
43
- --content-narrow: 640px;
44
- --content-default: 960px;
45
- --content-wide: 1200px;
46
-
47
- /* Toolbar height */
48
- --toolbar-h: 48px;
49
- }
50
-
51
- /* ===== COLOR PALETTE ===== */
52
-
53
- /* LIGHT MODE */
54
- :root, [data-theme="light"] {
55
- --color-bg: #f5f5f7;
56
- --color-surface: #ffffff;
57
- --color-surface-2: #fafafe;
58
- --color-surface-offset: #eeeef2;
59
- --color-surface-offset-2: #e6e6eb;
60
- --color-surface-dynamic: #dddde3;
61
- --color-divider: #d1d1d8;
62
- --color-border: #c4c4ce;
63
-
64
- --color-text: #1a1a2e;
65
- --color-text-muted: #6b6b80;
66
- --color-text-faint: #a0a0b0;
67
- --color-text-inverse: #f5f5f7;
68
-
69
- --color-primary: #4f46e5;
70
- --color-primary-hover: #4338ca;
71
- --color-primary-active: #3730a3;
72
- --color-primary-highlight: #e0e0ff;
73
- --color-comment: #4f46e5;
74
- --color-comment-soft: rgba(79, 70, 229, 0.08);
75
- --color-comment-strong: rgba(79, 70, 229, 0.14);
76
- --color-comment-text: #3730a3;
77
-
78
- --color-error: #dc2626;
79
- --color-error-highlight: #fce8e8;
80
- --color-success: #16a34a;
81
- --color-success-highlight: #dcfce7;
82
- --color-warning: #d97706;
83
- --color-warning-highlight: #fef3c7;
84
- --diff-add-bg: rgba(22, 163, 74, 0.06);
85
- --diff-add-line-bg: rgba(22, 163, 74, 0.14);
86
- --diff-add-text: #16a34a;
87
- --diff-del-bg: rgba(220, 38, 38, 0.06);
88
- --diff-del-line-bg: rgba(220, 38, 38, 0.14);
89
- --diff-del-text: #dc2626;
90
- --diff-hunk-bg: rgba(79, 70, 229, 0.08);
91
- --diff-hunk-text: #4f46e5;
92
- --diff-gutter: #a0a0b0;
93
-
94
- --shadow-sm: 0 1px 2px oklch(0.2 0.02 260 / 0.06);
95
- --shadow-md: 0 4px 12px oklch(0.2 0.02 260 / 0.08);
96
- --shadow-lg: 0 12px 32px oklch(0.2 0.02 260 / 0.12);
97
- }
98
-
99
- /* DARK MODE (default) */
100
- [data-theme="dark"] {
101
- --color-bg: #0f1117;
102
- --color-surface: #161822;
103
- --color-surface-2: #1c1e2c;
104
- --color-surface-offset: #1a1c28;
105
- --color-surface-offset-2: #22243a;
106
- --color-surface-dynamic: #2a2c3e;
107
- --color-divider: #2e3044;
108
- --color-border: #383a50;
109
-
110
- --color-text: #e2e2ea;
111
- --color-text-muted: #8b8ba0;
112
- --color-text-faint: #5a5a70;
113
- --color-text-inverse: #0f1117;
114
-
115
- --color-primary: #818cf8;
116
- --color-primary-hover: #6366f1;
117
- --color-primary-active: #4f46e5;
118
- --color-primary-highlight: #1e1e3a;
119
- --color-comment: #818cf8;
120
- --color-comment-soft: rgba(129, 140, 248, 0.1);
121
- --color-comment-strong: rgba(129, 140, 248, 0.16);
122
- --color-comment-text: #c7d2fe;
123
-
124
- --color-error: #f87171;
125
- --color-error-highlight: #2a1a1a;
126
- --color-success: #4ade80;
127
- --color-success-highlight: #1a2a1a;
128
- --color-warning: #fbbf24;
129
- --color-warning-highlight: #2a261a;
130
- --diff-add-bg: rgba(74, 222, 128, 0.08);
131
- --diff-add-line-bg: rgba(74, 222, 128, 0.15);
132
- --diff-add-text: #4ade80;
133
- --diff-del-bg: rgba(248, 113, 113, 0.08);
134
- --diff-del-line-bg: rgba(248, 113, 113, 0.15);
135
- --diff-del-text: #f87171;
136
- --diff-hunk-bg: rgba(129, 140, 248, 0.1);
137
- --diff-hunk-text: #818cf8;
138
- --diff-gutter: #5a5a70;
139
-
140
- --shadow-sm: 0 1px 2px oklch(0 0 0 / 0.25);
141
- --shadow-md: 0 4px 12px oklch(0 0 0 / 0.35);
142
- --shadow-lg: 0 12px 32px oklch(0 0 0 / 0.5);
143
- }
144
-
145
- @media (prefers-color-scheme: dark) {
146
- :root:not([data-theme]) {
147
- --color-bg: #0f1117;
148
- --color-surface: #161822;
149
- --color-surface-2: #1c1e2c;
150
- --color-surface-offset: #1a1c28;
151
- --color-surface-offset-2: #22243a;
152
- --color-surface-dynamic: #2a2c3e;
153
- --color-divider: #2e3044;
154
- --color-border: #383a50;
155
- --color-text: #e2e2ea;
156
- --color-text-muted: #8b8ba0;
157
- --color-text-faint: #5a5a70;
158
- --color-text-inverse: #0f1117;
159
- --color-primary: #818cf8;
160
- --color-primary-hover: #6366f1;
161
- --color-primary-active: #4f46e5;
162
- --color-primary-highlight: #1e1e3a;
163
- --color-comment: #818cf8;
164
- --color-comment-soft: rgba(129, 140, 248, 0.1);
165
- --color-comment-strong: rgba(129, 140, 248, 0.16);
166
- --color-comment-text: #c7d2fe;
167
- --color-error: #f87171;
168
- --color-error-highlight: #2a1a1a;
169
- --color-success: #4ade80;
170
- --color-success-highlight: #1a2a1a;
171
- --color-warning: #fbbf24;
172
- --color-warning-highlight: #2a261a;
173
- --shadow-sm: 0 1px 2px oklch(0 0 0 / 0.25);
174
- --shadow-md: 0 4px 12px oklch(0 0 0 / 0.35);
175
- --shadow-lg: 0 12px 32px oklch(0 0 0 / 0.5);
176
- }
177
- }
178
-
179
-
180
- /* ===== SHARED COMPONENTS ===== */
181
-
182
- .hidden { display: none !important; }
183
-
184
- html[data-initial-file-requested="true"] .empty-state {
185
- display: none !important;
186
- }
187
-
188
- html[data-initial-file-requested="true"] .editor-page.hidden {
189
- display: flex !important;
190
- }
191
-
192
- .btn {
193
- display: inline-flex;
194
- align-items: center;
195
- justify-content: center;
196
- gap: var(--space-2);
197
- padding: var(--space-2) var(--space-4);
198
- border-radius: var(--radius-md);
199
- font-size: var(--text-sm);
200
- font-weight: 500;
201
- transition: all var(--transition-interactive);
202
- cursor: pointer;
203
- white-space: nowrap;
204
- border: none;
205
- text-decoration: none;
206
- }
207
- .btn:active { transform: scale(0.97); }
208
-
209
- .btn-primary {
210
- background: var(--color-primary);
211
- color: var(--color-text-inverse);
212
- }
213
- .btn-primary:hover { background: var(--color-primary-hover); }
214
-
215
- .btn-secondary {
216
- background: var(--color-surface-2);
217
- color: var(--color-text);
218
- border: 1px solid var(--color-border);
219
- }
220
- .btn-secondary:hover { background: var(--color-surface-dynamic); }
221
-
222
- .btn-danger {
223
- background: var(--color-error);
224
- color: var(--color-text-inverse);
225
- }
226
- .btn-danger:hover { filter: brightness(0.95); }
227
-
228
- .btn-ghost {
229
- background: transparent;
230
- color: var(--color-text-muted);
231
- padding: var(--space-2);
232
- }
233
- .btn-ghost:hover { color: var(--color-text); background: var(--color-surface-offset); }
234
-
235
- .btn-lg {
236
- padding: var(--space-3) var(--space-6);
237
- font-weight: 600;
238
- }
239
-
240
- .input {
241
- padding: var(--space-2) var(--space-3);
242
- border: 1px solid var(--color-border);
243
- border-radius: var(--radius-md);
244
- background: var(--color-surface);
245
- font-size: var(--text-sm);
246
- color: var(--color-text);
247
- transition: border-color var(--transition-interactive);
248
- width: 100%;
249
- }
250
- .input:focus {
251
- outline: none;
252
- border-color: var(--color-primary);
253
- box-shadow: 0 0 0 3px oklch(from var(--color-primary) l c h / 0.15);
254
- }
255
- .input::placeholder { color: var(--color-text-faint); }
256
-
257
-
258
- /* ===== LOADING STATE ===== */
259
-
260
- .editor-loading {
261
- display: flex;
262
- flex-direction: column;
263
- padding: var(--space-6) var(--space-8);
264
- height: 100%;
265
- gap: var(--space-2);
266
- }
267
- .editor-loading.hidden { display: none; }
268
-
269
- .skeleton-line {
270
- height: 16px;
271
- background: var(--color-surface-offset);
272
- border-radius: 4px;
273
- animation: pulse-skeleton 1.5s ease-in-out infinite;
274
- }
275
-
276
- @keyframes pulse-skeleton {
277
- 0% { opacity: 0.6; }
278
- 50% { opacity: 0.3; }
279
- 100% { opacity: 0.6; }
280
- }
281
-
282
-
283
- /* ===== APP SHELL ===== */
284
-
285
- .app-shell {
286
- display: flex;
287
- height: 100dvh;
288
- overflow: hidden;
289
- }
290
-
291
- /* ===== SIDEBAR ===== */
292
-
293
- .sidebar {
294
- width: 260px;
295
- min-width: 260px;
296
- max-width: 260px;
297
- background: var(--color-surface);
298
- border-right: 1px solid var(--color-divider);
299
- display: flex;
300
- flex-direction: column;
301
- overflow: hidden;
302
- transition: width 180ms cubic-bezier(0.16, 1, 0.3, 1), min-width 180ms cubic-bezier(0.16, 1, 0.3, 1);
303
- }
304
-
305
- .sidebar.collapsed {
306
- width: 0;
307
- min-width: 0;
308
- border-right: none;
309
- overflow: hidden;
310
- }
311
-
312
- .sidebar-header {
313
- display: flex;
314
- align-items: center;
315
- justify-content: space-between;
316
- padding: var(--space-3) var(--space-3);
317
- border-bottom: 1px solid var(--color-divider);
318
- min-height: var(--toolbar-h);
319
- gap: var(--space-2);
320
- }
321
-
322
- .sidebar-brand {
323
- display: flex;
324
- align-items: center;
325
- gap: var(--space-2);
326
- }
327
-
328
- .sidebar-title {
329
- font-size: var(--text-sm);
330
- font-weight: 700;
331
- letter-spacing: -0.02em;
332
- white-space: nowrap;
333
- }
334
-
335
- .sidebar-actions {
336
- display: flex;
337
- gap: 4px;
338
- }
339
-
340
- .sidebar-action-btn {
341
- background: none;
342
- border: none;
343
- min-width: 28px;
344
- min-height: 28px;
345
- padding: 4px;
346
- border-radius: var(--radius-sm);
347
- color: var(--color-text-muted);
348
- cursor: pointer;
349
- display: inline-flex;
350
- align-items: center;
351
- justify-content: center;
352
- transition: color var(--transition-interactive), background var(--transition-interactive);
353
- }
354
-
355
- .sidebar-action-btn:hover {
356
- background: var(--color-surface-offset);
357
- color: var(--color-text);
358
- }
359
-
360
- .sidebar-action-btn:active {
361
- transform: scale(0.95);
362
- }
363
-
364
- .sidebar-close-btn {
365
- display: none;
366
- }
367
-
368
- .sidebar-search {
369
- padding: var(--space-2) var(--space-3);
370
- border-bottom: 1px solid var(--color-divider);
371
- }
372
-
373
- .sidebar-search-input {
374
- width: 100%;
375
- background: var(--color-surface-offset);
376
- border: 1px solid transparent;
377
- border-radius: var(--radius-sm);
378
- padding: var(--space-1) var(--space-2);
379
- font-size: var(--text-xs);
380
- color: var(--color-text);
381
- outline: none;
382
- transition: border-color var(--transition-interactive);
383
- }
384
-
385
- .sidebar-search-input::placeholder {
386
- color: var(--color-text-faint);
387
- }
388
-
389
- .sidebar-search-input:focus {
390
- border-color: var(--color-primary);
391
- }
392
-
393
- .sidebar-tabs {
394
- display: flex;
395
- border-bottom: 1px solid var(--color-divider);
396
- padding: 0 var(--space-2);
397
- }
398
-
399
- .sidebar-tab {
400
- flex: 1;
401
- display: inline-flex;
402
- align-items: center;
403
- justify-content: center;
404
- gap: 6px;
405
- padding: var(--space-2) var(--space-3);
406
- color: var(--color-text-muted);
407
- border-bottom: 2px solid transparent;
408
- font-size: var(--text-xs);
409
- font-weight: 500;
410
- transition: all var(--transition-interactive);
411
- position: relative;
412
- }
413
-
414
- .sidebar-tab.has-changes::after {
415
- content: "";
416
- position: absolute;
417
- top: 8px;
418
- right: 12px;
419
- width: 6px;
420
- height: 6px;
421
- background-color: var(--color-success);
422
- border-radius: 50%;
423
- animation: pulse-dot 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
424
- }
425
-
426
- @keyframes pulse-dot {
427
- 0%, 100% { opacity: 1; transform: scale(1); }
428
- 50% { opacity: 0.5; transform: scale(0.8); }
429
- }
430
-
431
- .sidebar-tab:hover {
432
- background: var(--color-surface-offset);
433
- color: var(--color-text);
434
- }
435
-
436
- .sidebar-tab.active {
437
- color: var(--color-primary);
438
- border-bottom-color: var(--color-primary);
439
- }
440
-
441
- /* File tree */
442
-
443
- .file-tree {
444
- flex: 1;
445
- overflow-y: auto;
446
- overflow-x: hidden;
447
- padding: var(--space-2) 0;
448
- }
449
-
450
- .file-tree-empty {
451
- padding: var(--space-4) var(--space-3);
452
- font-size: var(--text-xs);
453
- color: var(--color-text-faint);
454
- text-align: center;
455
- }
456
- .file-tree-item {
457
- display: flex;
458
- align-items: center;
459
- gap: var(--space-1);
460
- width: 100%;
461
- padding-top: 4px;
462
- padding-bottom: 4px;
463
- padding-right: 8px;
464
- padding-left: calc(8px + var(--depth, 0) * 16px);
465
- border: none;
466
- background: none;
467
- font-size: 13px;
468
- font-family: var(--font-body);
469
- color: var(--color-text-muted);
470
- cursor: pointer;
471
- text-align: left;
472
- user-select: none;
473
- position: relative;
474
- }
475
-
476
- .file-tree-item:not([data-depth="0"])::before {
477
- content: "";
478
- position: absolute;
479
- top: 0;
480
- bottom: 0;
481
- left: calc(8px + (var(--depth, 1) - 1) * 16px + 6px);
482
- width: 1px;
483
- background-color: var(--color-border);
484
- opacity: 0.3;
485
- }
486
-
487
- .file-tree-file {
488
- padding-left: calc(8px + var(--depth, 0) * 16px + 18px);
489
- }
490
-
491
- .file-tree-item {
492
- overflow: hidden;
493
- text-overflow: ellipsis;
494
- border-radius: 0;
495
- transition: background var(--transition-interactive), color var(--transition-interactive);
496
- }
497
-
498
- .file-tree-item:hover {
499
- background: var(--color-surface-offset);
500
- color: var(--color-text);
501
- }
502
-
503
- .file-tree-file.active {
504
- background: var(--color-primary-highlight);
505
- color: var(--color-primary);
506
- }
507
-
508
- .file-tree-chevron {
509
- flex-shrink: 0;
510
- transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
511
- }
512
-
513
- .file-tree-chevron.expanded {
514
- transform: rotate(90deg);
515
- }
516
-
517
- .file-tree-icon {
518
- flex-shrink: 0;
519
- opacity: 0.5;
520
- }
521
-
522
- .file-tree-name {
523
- overflow: hidden;
524
- text-overflow: ellipsis;
525
- }
526
-
527
- .file-tree-children {
528
- /* Children indentation handled by paddingLeft on items */
529
- }
530
-
531
- /* Git sidebar */
532
-
533
- .git-panel {
534
- flex: 1;
535
- display: flex;
536
- flex-direction: column;
537
- overflow-y: auto;
538
- }
539
-
540
- .git-panel.active {
541
- display: flex;
542
- }
543
-
544
- .git-branch-bar {
545
- display: flex;
546
- flex-direction: column;
547
- align-items: stretch;
548
- gap: var(--space-2);
549
- padding: var(--space-3);
550
- border-bottom: 1px solid var(--color-divider);
551
- font-size: var(--text-xs);
552
- }
553
-
554
- .git-branch-meta {
555
- display: flex;
556
- align-items: center;
557
- justify-content: space-between;
558
- gap: var(--space-3);
559
- min-width: 0;
560
- width: 100%;
561
- }
562
-
563
- .git-branch-name {
564
- display: inline-flex;
565
- align-items: center;
566
- gap: 6px;
567
- min-width: 0;
568
- max-width: 100%;
569
- padding: 3px 8px;
570
- border-radius: var(--radius-sm);
571
- background: var(--color-surface-offset);
572
- color: var(--color-text);
573
- font-family: var(--font-mono);
574
- font-size: 12px;
575
- font-weight: 500;
576
- }
577
-
578
- .git-branch-name svg {
579
- flex-shrink: 0;
580
- color: var(--color-primary);
581
- }
582
-
583
- .git-sync-info {
584
- display: inline-flex;
585
- gap: var(--space-2);
586
- font-family: var(--font-mono);
587
- font-size: 11px;
588
- flex-shrink: 0;
589
- }
590
-
591
- .git-sync-info-muted {
592
- color: var(--color-text-faint);
593
- }
594
-
595
- .git-change-stats {
596
- display: inline-flex;
597
- align-items: center;
598
- gap: var(--space-2);
599
- font-family: var(--font-mono);
600
- font-size: 11px;
601
- font-weight: 600;
602
- flex-shrink: 0;
603
- }
604
-
605
- .git-branch-actions {
606
- display: grid;
607
- grid-template-columns: repeat(2, minmax(0, 1fr));
608
- gap: 6px;
609
- width: 100%;
610
- }
611
-
612
- .git-branch-action-btn {
613
- display: inline-flex;
614
- align-items: center;
615
- justify-content: center;
616
- gap: 5px;
617
- width: 100%;
618
- min-width: 0;
619
- min-height: 30px;
620
- padding: 0 12px;
621
- border-radius: 999px;
622
- border: 1px solid var(--color-border);
623
- background: var(--color-surface-offset);
624
- color: var(--color-text-muted);
625
- font-size: 11px;
626
- font-weight: 600;
627
- transition: all var(--transition-interactive);
628
- }
629
-
630
- .git-branch-action-btn:hover:not(:disabled) {
631
- background: var(--color-surface-dynamic);
632
- color: var(--color-text);
633
- }
634
-
635
- .git-branch-action-btn:disabled {
636
- opacity: 0.45;
637
- cursor: not-allowed;
638
- }
639
-
640
- .git-branch-action-btn svg {
641
- flex-shrink: 0;
642
- }
643
-
644
- .git-change-add {
645
- color: var(--diff-add-text);
646
- }
647
-
648
- .git-change-del {
649
- color: var(--diff-del-text);
650
- }
651
-
652
- .git-section {
653
- border-bottom: 1px solid var(--color-divider);
654
- }
655
-
656
- .git-section-header {
657
- display: flex;
658
- align-items: center;
659
- gap: 6px;
660
- width: 100%;
661
- padding: var(--space-2) var(--space-3);
662
- background: transparent;
663
- color: var(--color-text-muted);
664
- font-size: 11px;
665
- font-weight: 600;
666
- letter-spacing: 0.05em;
667
- text-transform: uppercase;
668
- text-align: left;
669
- }
670
-
671
- .git-section-header:hover {
672
- background: var(--color-surface-offset);
673
- }
674
-
675
- .git-section-count {
676
- padding: 1px 6px;
677
- border-radius: var(--radius-full);
678
- background: var(--color-surface-dynamic);
679
- color: var(--color-text-muted);
680
- font-size: 10px;
681
- font-weight: 600;
682
- }
683
-
684
- .git-section-chevron {
685
- color: var(--color-text-faint);
686
- transition: transform 150ms ease;
687
- }
688
-
689
- .git-section-chevron.collapsed {
690
- transform: rotate(-90deg);
691
- }
692
-
693
- .git-file-list {
694
- padding: var(--space-1) 0;
695
- }
696
-
697
- .git-file-row {
698
- display: flex;
699
- align-items: center;
700
- gap: var(--space-2);
701
- margin: 0 var(--space-2) 2px;
702
- padding: 2px;
703
- border-radius: var(--radius-md);
704
- transition: background var(--transition-interactive), color var(--transition-interactive);
705
- }
706
-
707
- .git-file-row:hover {
708
- background: var(--color-surface-offset);
709
- }
710
-
711
- .git-file-row.active {
712
- background: var(--color-primary-highlight);
713
- }
714
-
715
- .git-file-item {
716
- display: flex;
717
- align-items: center;
718
- gap: var(--space-2);
719
- min-width: 0;
720
- flex: 1;
721
- padding: 5px var(--space-2) 5px calc(var(--space-2) + 10px);
722
- border-radius: calc(var(--radius-md) - 2px);
723
- background: transparent;
724
- color: var(--color-text-muted);
725
- text-align: left;
726
- transition: color var(--transition-interactive);
727
- }
728
-
729
- .git-file-item:hover {
730
- color: var(--color-text);
731
- }
732
-
733
- .git-file-item.active {
734
- color: var(--color-primary);
735
- }
736
-
737
- .git-file-row.active .git-file-path {
738
- color: color-mix(in oklab, var(--color-primary) 56%, var(--color-text-muted));
739
- }
740
-
741
- .git-file-icon {
742
- flex-shrink: 0;
743
- opacity: 0.5;
744
- }
745
-
746
- .git-file-copy {
747
- flex: 1;
748
- display: flex;
749
- flex-direction: column;
750
- min-width: 0;
751
- }
752
-
753
- .git-file-name {
754
- overflow: hidden;
755
- text-overflow: ellipsis;
756
- white-space: nowrap;
757
- font-size: 13px;
758
- }
759
-
760
- .git-file-path {
761
- color: var(--color-text-faint);
762
- font-size: 11px;
763
- overflow: hidden;
764
- text-overflow: ellipsis;
765
- white-space: nowrap;
766
- }
767
-
768
- .git-status-badge {
769
- flex-shrink: 0;
770
- padding: 1px 5px;
771
- border-radius: 3px;
772
- font-family: var(--font-mono);
773
- font-size: 10px;
774
- font-weight: 600;
775
- letter-spacing: 0.02em;
776
- text-transform: uppercase;
777
- }
778
-
779
- .git-status-badge.modified {
780
- color: var(--color-warning);
781
- background: color-mix(in oklab, var(--color-warning) 14%, transparent);
782
- }
783
-
784
- .git-status-badge.added {
785
- color: var(--color-success);
786
- background: color-mix(in oklab, var(--color-success) 14%, transparent);
787
- }
788
-
789
- .git-status-badge.deleted {
790
- color: var(--color-error);
791
- background: color-mix(in oklab, var(--color-error) 14%, transparent);
792
- }
793
-
794
- .git-status-badge.renamed {
795
- color: var(--color-primary);
796
- background: color-mix(in oklab, var(--color-primary) 16%, transparent);
797
- }
798
-
799
- .git-status-badge.untracked {
800
- color: var(--color-text-faint);
801
- background: var(--color-surface-offset);
802
- }
803
-
804
- .git-file-actions {
805
- display: inline-flex;
806
- align-items: center;
807
- gap: 4px;
808
- flex-shrink: 0;
809
- padding-right: 4px;
810
- }
811
-
812
- .git-file-action-btn {
813
- display: inline-flex;
814
- align-items: center;
815
- justify-content: center;
816
- width: 30px;
817
- min-height: 26px;
818
- padding: 0;
819
- border: 1px solid transparent;
820
- border-radius: 999px;
821
- background: color-mix(in oklab, var(--color-surface-offset) 82%, transparent);
822
- color: var(--color-text-muted);
823
- font-size: 11px;
824
- font-weight: 600;
825
- letter-spacing: 0.02em;
826
- text-transform: uppercase;
827
- transition: background var(--transition-interactive), color var(--transition-interactive), border-color var(--transition-interactive);
828
- }
829
-
830
- .git-file-action-btn:hover:not(:disabled) {
831
- background: var(--color-surface-dynamic);
832
- color: var(--color-text);
833
- }
834
-
835
- .git-file-action-btn:disabled {
836
- opacity: 0.6;
837
- cursor: default;
838
- }
839
-
840
- .git-file-action-btn svg {
841
- flex-shrink: 0;
842
- }
843
-
844
- .git-file-action-btn-primary {
845
- background: color-mix(in oklab, var(--color-primary) 14%, transparent);
846
- color: var(--color-primary);
847
- border-color: color-mix(in oklab, var(--color-primary) 20%, transparent);
848
- }
849
-
850
- .git-file-row.active .git-file-action-btn {
851
- background: color-mix(in oklab, var(--color-surface) 30%, var(--color-primary-highlight));
852
- color: var(--color-text);
853
- }
854
-
855
- .git-file-row.active .git-file-action-btn-primary {
856
- background: color-mix(in oklab, var(--color-primary) 18%, transparent);
857
- color: var(--color-primary);
858
- }
859
-
860
- .git-panel-footer {
861
- margin-top: auto;
862
- padding: var(--space-3);
863
- border-top: 1px solid var(--color-divider);
864
- }
865
-
866
- .git-panel-footer-actions {
867
- display: flex;
868
- flex-direction: column;
869
- gap: var(--space-2);
870
- }
871
-
872
- .git-view-all-btn {
873
- display: inline-flex;
874
- align-items: center;
875
- justify-content: center;
876
- gap: 6px;
877
- width: 100%;
878
- padding: var(--space-2);
879
- border-radius: var(--radius-md);
880
- background: var(--color-surface-offset);
881
- color: var(--color-text-muted);
882
- font-size: var(--text-xs);
883
- font-weight: 500;
884
- transition: all var(--transition-interactive);
885
- }
886
-
887
- .git-view-all-btn:hover {
888
- background: var(--color-surface-dynamic);
889
- color: var(--color-text);
890
- }
891
-
892
- .git-footer-commit-btn {
893
- display: inline-flex;
894
- align-items: center;
895
- justify-content: center;
896
- width: 100%;
897
- min-height: 34px;
898
- padding: 0 var(--space-3);
899
- border-radius: var(--radius-md);
900
- border: 1px solid color-mix(in oklab, var(--color-primary) 22%, transparent);
901
- background: color-mix(in oklab, var(--color-primary) 16%, transparent);
902
- color: var(--color-primary);
903
- font-size: var(--text-xs);
904
- font-weight: 600;
905
- transition: all var(--transition-interactive);
906
- }
907
-
908
- .git-footer-commit-btn:hover:not(:disabled) {
909
- background: color-mix(in oklab, var(--color-primary) 22%, transparent);
910
- }
911
-
912
- .git-footer-commit-btn:disabled {
913
- opacity: 0.45;
914
- cursor: not-allowed;
915
- }
916
-
917
- .git-panel-empty {
918
- padding: var(--space-4);
919
- color: var(--color-text-faint);
920
- font-size: var(--text-xs);
921
- text-align: center;
922
- }
923
-
924
- /* Context menu */
925
-
926
- .file-context-menu {
927
- position: fixed;
928
- z-index: 1000;
929
- background: var(--color-surface);
930
- border: 1px solid var(--color-border);
931
- border-radius: var(--radius-md);
932
- box-shadow: var(--shadow-md);
933
- padding: var(--space-1);
934
- min-width: 120px;
935
- transform-origin: top left;
936
- opacity: 1;
937
- transform: scale(1);
938
- transition: opacity 0.15s cubic-bezier(0.16, 1, 0.3, 1), transform 0.15s cubic-bezier(0.16, 1, 0.3, 1);
939
- }
940
-
941
- @starting-style {
942
- .file-context-menu {
943
- opacity: 0;
944
- transform: scale(0.9);
945
- }
946
- }
947
-
948
- .file-context-item {
949
- display: block;
950
- width: 100%;
951
- padding: var(--space-1) var(--space-3);
952
- border: none;
953
- background: none;
954
- font-size: 13px;
955
- font-family: var(--font-body);
956
- color: var(--color-text);
957
- cursor: pointer;
958
- text-align: left;
959
- border-radius: var(--radius-sm);
960
- transition: background var(--transition-interactive);
961
- }
962
-
963
- .file-context-item:hover {
964
- background: var(--color-surface-offset);
965
- }
966
-
967
- .file-context-danger {
968
- color: var(--color-error);
969
- }
970
-
971
- /* Wiki-link */
972
-
973
- .wiki-link {
974
- color: var(--color-primary);
975
- text-decoration: underline;
976
- text-decoration-style: dotted;
977
- text-underline-offset: 2px;
978
- cursor: pointer;
979
- }
980
-
981
- .wiki-link:hover {
982
- text-decoration-style: solid;
983
- }
984
-
985
- .wiki-link-new {
986
- color: var(--color-text-muted);
987
- text-decoration-style: dashed;
988
- opacity: 0.7;
989
- }
990
-
991
- .wiki-link-new:hover {
992
- color: var(--color-primary);
993
- opacity: 1;
994
- text-decoration-style: dashed;
995
- }
996
-
997
- /* ===== MAIN AREA ===== */
998
-
999
- .main-area {
1000
- flex: 1;
1001
- display: flex;
1002
- flex-direction: column;
1003
- overflow: hidden;
1004
- min-width: 0;
1005
- }
1006
-
1007
- /* ===== EMPTY STATE ===== */
1008
-
1009
- .empty-state {
1010
- flex: 1;
1011
- display: flex;
1012
- align-items: center;
1013
- justify-content: center;
1014
- padding: var(--space-8);
1015
- }
1016
-
1017
- .empty-state-content {
1018
- display: flex;
1019
- flex-direction: column;
1020
- align-items: center;
1021
- text-align: center;
1022
- gap: var(--space-2);
1023
- max-width: 320px;
1024
- }
1025
-
1026
- .empty-state-logo {
1027
- display: inline-flex;
1028
- align-items: center;
1029
- justify-content: center;
1030
- width: 80px;
1031
- height: 80px;
1032
- margin-bottom: var(--space-2);
1033
- border: 1px solid color-mix(in oklab, var(--color-primary) 22%, var(--color-divider));
1034
- border-radius: 24px;
1035
- background:
1036
- radial-gradient(circle at top, color-mix(in oklab, var(--color-primary) 22%, transparent), transparent 70%),
1037
- linear-gradient(180deg, color-mix(in oklab, var(--color-surface) 94%, white 2%), color-mix(in oklab, var(--color-surface-2) 88%, black 12%));
1038
- box-shadow:
1039
- 0 18px 36px rgb(0 0 0 / 0.18),
1040
- inset 0 1px 0 rgb(255 255 255 / 0.04);
1041
- }
1042
-
1043
- .empty-state-logo svg {
1044
- display: block;
1045
- opacity: 0.72;
1046
- }
1047
-
1048
- .empty-state-title {
1049
- font-size: var(--text-lg);
1050
- font-weight: 600;
1051
- margin: 0;
1052
- letter-spacing: -0.02em;
1053
- }
1054
-
1055
- .empty-state-desc {
1056
- margin: 0;
1057
- font-size: var(--text-sm);
1058
- color: var(--color-text-muted);
1059
- line-height: 1.5;
1060
- }
1061
-
1062
- .empty-state-actions {
1063
- display: flex;
1064
- flex-direction: column;
1065
- gap: var(--space-3);
1066
- margin-top: var(--space-4);
1067
- width: 100%;
1068
- }
1069
-
1070
- .empty-state-btn {
1071
- justify-content: flex-start;
1072
- padding: var(--space-3) var(--space-4);
1073
- font-size: var(--text-sm);
1074
- color: var(--color-text);
1075
- background: var(--color-surface-offset);
1076
- border: 1px solid var(--color-border);
1077
- box-shadow: var(--shadow-sm);
1078
- }
1079
-
1080
- .empty-state-btn:hover {
1081
- background: var(--color-surface-offset-2);
1082
- border-color: var(--color-text-faint);
1083
- }
1084
-
1085
- .empty-state-kbd {
1086
- margin-left: auto;
1087
- font-family: var(--font-mono);
1088
- font-size: 0.75rem;
1089
- color: var(--color-text-muted);
1090
- background: var(--color-surface);
1091
- padding: 2px 6px;
1092
- border-radius: 4px;
1093
- border: 1px solid var(--color-divider);
1094
- }
1095
-
1096
-
1097
- /* ===== EDITOR PAGE ===== */
1098
-
1099
- .editor-page {
1100
- display: flex;
1101
- flex-direction: column;
1102
- flex: 1;
1103
- overflow: hidden;
1104
- }
1105
-
1106
- .diff-page {
1107
- display: flex;
1108
- flex-direction: column;
1109
- flex: 1;
1110
- overflow: hidden;
1111
- }
1112
-
1113
- /* Toolbar */
1114
- .toolbar {
1115
- display: flex;
1116
- align-items: center;
1117
- justify-content: space-between;
1118
- height: var(--toolbar-h);
1119
- padding: 0 var(--space-3);
1120
- background: var(--color-surface);
1121
- border-bottom: 1px solid var(--color-divider);
1122
- flex-shrink: 0;
1123
- z-index: 10;
1124
- gap: var(--space-2);
1125
- }
1126
-
1127
- .toolbar-left,
1128
- .toolbar-right {
1129
- display: flex;
1130
- align-items: center;
1131
- gap: var(--space-2);
1132
- }
1133
- .toolbar-left {
1134
- min-width: 0;
1135
- flex: 1;
1136
- }
1137
- .toolbar-right {
1138
- flex-shrink: 0;
1139
- }
1140
-
1141
- .toolbar-logo {
1142
- display: flex;
1143
- align-items: center;
1144
- padding: var(--space-1);
1145
- border-radius: var(--radius-sm);
1146
- transition: background var(--transition-interactive);
1147
- flex-shrink: 0;
1148
- }
1149
- .toolbar-logo:hover {
1150
- background: var(--color-surface-offset);
1151
- }
1152
-
1153
- .toolbar-room-info {
1154
- display: flex;
1155
- align-items: center;
1156
- gap: var(--space-2);
1157
- min-width: 0;
1158
- }
1159
- .toolbar-room-name {
1160
- font-size: var(--text-sm);
1161
- font-weight: 600;
1162
- overflow: hidden;
1163
- text-overflow: ellipsis;
1164
- white-space: nowrap;
1165
- }
1166
- .toolbar-badge {
1167
- font-size: 11px;
1168
- font-weight: 500;
1169
- padding: 2px var(--space-2);
1170
- border-radius: var(--radius-full);
1171
- background: var(--color-primary-highlight);
1172
- color: var(--color-primary);
1173
- white-space: nowrap;
1174
- flex-shrink: 0;
1175
- }
1176
-
1177
- .toolbar-center {
1178
- flex-shrink: 0;
1179
- }
1180
-
1181
- .view-toggle {
1182
- display: flex;
1183
- background: var(--color-surface-offset);
1184
- border-radius: var(--radius-md);
1185
- padding: 2px;
1186
- gap: 2px;
1187
- }
1188
- .view-btn {
1189
- display: flex;
1190
- align-items: center;
1191
- justify-content: center;
1192
- width: 32px;
1193
- height: 28px;
1194
- border-radius: var(--radius-sm);
1195
- color: var(--color-text-faint);
1196
- transition: all var(--transition-interactive);
1197
- }
1198
- .view-btn:hover {
1199
- color: var(--color-text-muted);
1200
- }
1201
- .view-btn.active {
1202
- background: var(--color-surface);
1203
- color: var(--color-text);
1204
- box-shadow: var(--shadow-sm);
1205
- }
1206
-
1207
- .diff-mode-toggle {
1208
- padding: 3px;
1209
- }
1210
-
1211
- .diff-mode-btn {
1212
- width: auto;
1213
- min-width: 72px;
1214
- height: 28px;
1215
- padding: 0 var(--space-3);
1216
- font-size: 12px;
1217
- font-weight: 600;
1218
- }
1219
-
1220
- /* Diff */
1221
-
1222
- .diff-toolbar {
1223
- display: flex;
1224
- align-items: center;
1225
- justify-content: space-between;
1226
- gap: var(--space-3);
1227
- padding: var(--space-2) var(--space-4);
1228
- background: var(--color-surface-2);
1229
- border-bottom: 1px solid var(--color-divider);
1230
- }
1231
-
1232
- .diff-toolbar-left,
1233
- .diff-toolbar-right {
1234
- display: flex;
1235
- align-items: center;
1236
- gap: var(--space-3);
1237
- }
1238
-
1239
- .diff-toolbar-actions {
1240
- display: inline-flex;
1241
- align-items: center;
1242
- gap: var(--space-2);
1243
- }
1244
-
1245
- .diff-toolbar-actions-group {
1246
- display: inline-flex;
1247
- align-items: center;
1248
- gap: var(--space-2);
1249
- }
1250
-
1251
- .diff-toolbar-actions-group-git {
1252
- padding: 3px;
1253
- border: 1px solid var(--color-divider);
1254
- border-radius: 12px;
1255
- background: color-mix(in oklab, var(--color-surface) 78%, transparent);
1256
- box-shadow: inset 0 1px 0 color-mix(in oklab, var(--color-text) 4%, transparent);
1257
- }
1258
-
1259
- .diff-toolbar-actions-divider {
1260
- width: 1px;
1261
- height: 28px;
1262
- background: var(--color-divider);
1263
- opacity: 0.9;
1264
- }
1265
-
1266
- .diff-toolbar-actions .btn {
1267
- min-height: 36px;
1268
- padding: 0 14px;
1269
- border-radius: 10px;
1270
- font-size: 12px;
1271
- font-weight: 600;
1272
- white-space: nowrap;
1273
- }
1274
-
1275
- .diff-action-btn {
1276
- min-width: 92px;
1277
- border-radius: 9px;
1278
- }
1279
-
1280
- .diff-open-editor-btn {
1281
- min-width: 116px;
1282
- }
1283
-
1284
- .diff-open-editor-btn:disabled {
1285
- opacity: 0.45;
1286
- cursor: not-allowed;
1287
- }
1288
-
1289
- .diff-file-nav {
1290
- display: flex;
1291
- align-items: center;
1292
- gap: var(--space-2);
1293
- }
1294
-
1295
- .diff-nav-btn {
1296
- width: 28px;
1297
- height: 28px;
1298
- display: inline-flex;
1299
- align-items: center;
1300
- justify-content: center;
1301
- border-radius: var(--radius-sm);
1302
- color: var(--color-text-muted);
1303
- }
1304
-
1305
- .diff-nav-btn:hover {
1306
- background: var(--color-surface-offset);
1307
- color: var(--color-text);
1308
- }
1309
-
1310
- .diff-nav-btn:disabled {
1311
- opacity: 0.3;
1312
- cursor: not-allowed;
1313
- }
1314
-
1315
- .diff-file-indicator {
1316
- color: var(--color-text-muted);
1317
- font-size: var(--text-xs);
1318
- font-variant-numeric: tabular-nums;
1319
- }
1320
-
1321
- .diff-stats {
1322
- display: inline-flex;
1323
- align-items: center;
1324
- gap: var(--space-2);
1325
- font-family: var(--font-mono);
1326
- font-size: 12px;
1327
- white-space: nowrap;
1328
- }
1329
-
1330
- .diff-stats-add {
1331
- color: var(--diff-add-text);
1332
- }
1333
-
1334
- .diff-stats-del {
1335
- color: var(--diff-del-text);
1336
- }
1337
-
1338
- .diff-scroll {
1339
- flex: 1;
1340
- overflow: auto;
1341
- }
1342
-
1343
- .diff-content {
1344
- min-width: fit-content;
1345
- }
1346
-
1347
- .diff-file-block {
1348
- margin-bottom: 0;
1349
- }
1350
-
1351
- .diff-file-header {
1352
- position: sticky;
1353
- top: 0;
1354
- z-index: 5;
1355
- display: flex;
1356
- align-items: center;
1357
- gap: var(--space-2);
1358
- padding: var(--space-2) var(--space-4);
1359
- background: var(--color-surface-offset);
1360
- border-top: 1px solid var(--color-divider);
1361
- border-bottom: 1px solid var(--color-divider);
1362
- }
1363
-
1364
- .diff-file-header:first-child {
1365
- border-top: none;
1366
- }
1367
-
1368
- .diff-file-path {
1369
- color: var(--color-text);
1370
- font-family: var(--font-mono);
1371
- font-size: 12px;
1372
- font-weight: 500;
1373
- }
1374
-
1375
- .diff-file-header-stats {
1376
- margin-left: auto;
1377
- display: inline-flex;
1378
- gap: var(--space-2);
1379
- font-family: var(--font-mono);
1380
- font-size: 11px;
1381
- }
1382
-
1383
- .diff-hunk-header,
1384
- .diff-split-hunk {
1385
- padding: 4px var(--space-4);
1386
- padding-left: 92px;
1387
- background: var(--diff-hunk-bg);
1388
- color: var(--diff-hunk-text);
1389
- font-family: var(--font-mono);
1390
- font-size: 12px;
1391
- }
1392
-
1393
- .diff-line {
1394
- display: flex;
1395
- align-items: stretch;
1396
- min-height: 20px;
1397
- font-family: var(--font-mono);
1398
- font-size: 13px;
1399
- line-height: 20px;
1400
- }
1401
-
1402
- .diff-line-numbers {
1403
- display: flex;
1404
- flex-shrink: 0;
1405
- user-select: none;
1406
- }
1407
-
1408
- .diff-line-num {
1409
- width: 40px;
1410
- padding: 0 8px;
1411
- color: var(--diff-gutter);
1412
- text-align: right;
1413
- font-size: 12px;
1414
- border-right: 1px solid var(--color-divider);
1415
- }
1416
-
1417
- .diff-line-num:first-child {
1418
- border-right: none;
1419
- }
1420
-
1421
- .diff-line-prefix {
1422
- width: 20px;
1423
- padding-left: 8px;
1424
- flex-shrink: 0;
1425
- font-weight: 500;
1426
- user-select: none;
1427
- }
1428
-
1429
- .diff-line-content {
1430
- flex: 1;
1431
- padding: 0 var(--space-3);
1432
- white-space: pre;
1433
- tab-size: 4;
1434
- }
1435
-
1436
- .diff-line.addition {
1437
- background: var(--diff-add-bg);
1438
- }
1439
-
1440
- .diff-line.addition .diff-line-num {
1441
- background: var(--diff-add-line-bg);
1442
- color: var(--diff-add-text);
1443
- }
1444
-
1445
- .diff-line.addition .diff-line-prefix {
1446
- color: var(--diff-add-text);
1447
- }
1448
-
1449
- .diff-line.deletion {
1450
- background: var(--diff-del-bg);
1451
- }
1452
-
1453
- .diff-line.deletion .diff-line-num {
1454
- background: var(--diff-del-line-bg);
1455
- color: var(--diff-del-text);
1456
- }
1457
-
1458
- .diff-line.deletion .diff-line-prefix {
1459
- color: var(--diff-del-text);
1460
- }
1461
-
1462
- .diff-line.note {
1463
- background: var(--color-surface-offset);
1464
- color: var(--color-text-faint);
1465
- }
1466
-
1467
- .diff-highlight-add {
1468
- background: color-mix(in oklab, var(--diff-add-text) 24%, transparent);
1469
- border-radius: 2px;
1470
- padding: 0 1px;
1471
- }
1472
-
1473
- .diff-highlight-del {
1474
- background: color-mix(in oklab, var(--diff-del-text) 24%, transparent);
1475
- border-radius: 2px;
1476
- padding: 0 1px;
1477
- }
1478
-
1479
- .diff-split {
1480
- display: block;
1481
- }
1482
-
1483
- .diff-split-row {
1484
- display: grid;
1485
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1486
- }
1487
-
1488
- .diff-split-pane-header {
1489
- display: none;
1490
- }
1491
-
1492
- .diff-split-line {
1493
- display: flex;
1494
- min-height: 20px;
1495
- font-family: var(--font-mono);
1496
- font-size: 13px;
1497
- line-height: 20px;
1498
- }
1499
-
1500
- .diff-split-line:first-child {
1501
- border-right: 1px solid var(--color-divider);
1502
- }
1503
-
1504
- .diff-split-num {
1505
- width: 44px;
1506
- padding: 0 8px;
1507
- color: var(--diff-gutter);
1508
- text-align: right;
1509
- font-size: 12px;
1510
- border-right: 1px solid var(--color-divider);
1511
- }
1512
-
1513
- .diff-split-content {
1514
- flex: 1;
1515
- padding: 0 var(--space-3);
1516
- white-space: pre;
1517
- tab-size: 4;
1518
- }
1519
-
1520
- .diff-split-line.addition {
1521
- background: var(--diff-add-bg);
1522
- }
1523
-
1524
- .diff-split-line.addition .diff-split-num {
1525
- background: var(--diff-add-line-bg);
1526
- color: var(--diff-add-text);
1527
- }
1528
-
1529
- .diff-split-line.deletion {
1530
- background: var(--diff-del-bg);
1531
- }
1532
-
1533
- .diff-split-line.deletion .diff-split-num {
1534
- background: var(--diff-del-line-bg);
1535
- color: var(--diff-del-text);
1536
- }
1537
-
1538
- .diff-split-line.empty {
1539
- background: var(--color-surface-offset);
1540
- opacity: 0.45;
1541
- }
1542
-
1543
- .diff-binary-message,
1544
- .diff-empty-state {
1545
- padding: var(--space-4);
1546
- color: var(--color-text-faint);
1547
- }
1548
-
1549
- .diff-limit-card {
1550
- display: flex;
1551
- flex-direction: column;
1552
- align-items: flex-start;
1553
- gap: var(--space-2);
1554
- padding: var(--space-4);
1555
- color: var(--color-text-muted);
1556
- border-top: 1px solid var(--color-divider);
1557
- }
1558
-
1559
- .diff-limit-card strong {
1560
- color: var(--color-text);
1561
- font-size: var(--text-sm);
1562
- }
1563
-
1564
- .diff-load-full-btn {
1565
- margin-top: var(--space-1);
1566
- font-size: 12px;
1567
- font-weight: 600;
1568
- }
1569
-
1570
- .toolbar-btn {
1571
- display: flex;
1572
- align-items: center;
1573
- gap: var(--space-1);
1574
- padding: var(--space-1) var(--space-2);
1575
- border-radius: var(--radius-md);
1576
- font-size: var(--text-xs);
1577
- }
1578
- .toolbar-btn-label {
1579
- font-size: var(--text-xs);
1580
- }
1581
- .toolbar-name-btn {
1582
- max-width: 132px;
1583
- }
1584
- .toolbar-user-name {
1585
- overflow: hidden;
1586
- text-overflow: ellipsis;
1587
- white-space: nowrap;
1588
- }
1589
-
1590
- /* Mobile view toggle — hidden on desktop */
1591
- .mobile-view-toggle {
1592
- display: none;
1593
- }
1594
-
1595
- .user-avatars {
1596
- display: flex;
1597
- align-items: center;
1598
- }
1599
- .user-avatar {
1600
- width: 24px;
1601
- height: 24px;
1602
- border-radius: var(--radius-full);
1603
- display: flex;
1604
- align-items: center;
1605
- justify-content: center;
1606
- font-size: 11px;
1607
- font-weight: 600;
1608
- color: white;
1609
- border: 2px solid var(--color-surface);
1610
- margin-left: -4px;
1611
- position: relative;
1612
- z-index: 1;
1613
- flex-shrink: 0;
1614
- }
1615
- .user-avatar-initial {
1616
- display: inline-flex;
1617
- align-items: center;
1618
- justify-content: center;
1619
- line-height: 1;
1620
- }
1621
- .user-avatar:first-child {
1622
- margin-left: 0;
1623
- }
1624
- .user-avatar.is-local {
1625
- width: auto;
1626
- min-width: 44px;
1627
- padding: 0 8px 0 6px;
1628
- gap: 4px;
1629
- border-radius: var(--radius-full);
1630
- margin-right: 6px;
1631
- box-shadow:
1632
- 0 0 0 2px var(--color-surface),
1633
- 0 0 0 4px oklch(from var(--color-primary) l c h / 0.18);
1634
- z-index: 5;
1635
- }
1636
- .user-avatar.is-local + .user-avatar {
1637
- margin-left: 0;
1638
- }
1639
- .user-avatar.is-local .user-avatar-initial {
1640
- width: 14px;
1641
- height: 14px;
1642
- border-radius: var(--radius-full);
1643
- background: rgb(255 255 255 / 0.22);
1644
- font-size: 9px;
1645
- }
1646
- .user-avatar-self-label {
1647
- padding: 2px 4px;
1648
- border-radius: var(--radius-full);
1649
- background: rgb(15 17 23 / 0.84);
1650
- color: #ffffff;
1651
- font-size: 9px;
1652
- font-weight: 700;
1653
- letter-spacing: 0.04em;
1654
- line-height: 1;
1655
- text-transform: uppercase;
1656
- }
1657
- .user-avatar-button {
1658
- cursor: pointer;
1659
- padding: 0;
1660
- transition: transform var(--transition-interactive), box-shadow var(--transition-interactive);
1661
- }
1662
- .user-avatar-button:hover {
1663
- transform: translateY(-1px);
1664
- z-index: 2;
1665
- }
1666
- .user-avatar-button:focus-visible {
1667
- outline: none;
1668
- box-shadow: 0 0 0 2px var(--color-bg), 0 0 0 4px oklch(from var(--color-primary) l c h / 0.45);
1669
- z-index: 3;
1670
- }
1671
- .user-avatar.is-following {
1672
- box-shadow: 0 0 0 2px var(--color-primary), 0 0 0 4px oklch(from var(--color-primary) l c h / 0.2);
1673
- z-index: 4;
1674
- }
1675
- .user-avatar-button.different-file {
1676
- opacity: 0.55;
1677
- }
1678
- .user-avatar-button.different-file:hover {
1679
- opacity: 0.85;
1680
- }
1681
-
1682
- .chat-container {
1683
- position: relative;
1684
- }
1685
-
1686
- .chat-toggle-btn {
1687
- position: relative;
1688
- }
1689
-
1690
- .chat-toggle-btn.is-active {
1691
- color: var(--color-text);
1692
- background: var(--color-surface-offset);
1693
- }
1694
-
1695
- .chat-toggle-btn.is-unread:not(.is-active) {
1696
- color: var(--color-primary);
1697
- background: oklch(from var(--color-primary) l c h / 0.12);
1698
- box-shadow: inset 0 0 0 1px oklch(from var(--color-primary) l c h / 0.22);
1699
- }
1700
-
1701
- .chat-toggle-btn.is-unread:not(.is-active):hover {
1702
- background: oklch(from var(--color-primary) l c h / 0.18);
1703
- }
1704
-
1705
- .chat-toggle-badge {
1706
- min-width: 18px;
1707
- height: 18px;
1708
- padding: 0 5px;
1709
- border-radius: var(--radius-full);
1710
- background: var(--color-primary);
1711
- color: var(--color-text-inverse);
1712
- font-size: 10px;
1713
- font-weight: 700;
1714
- line-height: 18px;
1715
- text-align: center;
1716
- }
1717
-
1718
- .chat-toggle-btn.is-unread:not(.is-active) .chat-toggle-badge {
1719
- box-shadow: 0 0 0 3px oklch(from var(--color-primary) l c h / 0.16);
1720
- }
1721
-
1722
- .chat-panel {
1723
- position: absolute;
1724
- top: calc(100% + var(--space-2));
1725
- right: 0;
1726
- width: min(360px, calc(100vw - var(--space-6)));
1727
- max-height: min(70vh, 520px);
1728
- display: flex;
1729
- flex-direction: column;
1730
- gap: var(--space-3);
1731
- padding: var(--space-3);
1732
- border: 1px solid var(--color-border);
1733
- border-radius: var(--radius-lg);
1734
- background: oklch(from var(--color-surface) l c h / 0.98);
1735
- box-shadow: var(--shadow-lg);
1736
- backdrop-filter: blur(14px);
1737
- z-index: 30;
1738
- }
1739
-
1740
- .chat-container > .chat-toast-container {
1741
- position: fixed;
1742
- top: calc(var(--toolbar-h) + var(--space-2));
1743
- right: var(--space-3);
1744
- width: min(360px, calc(100vw - var(--space-6)));
1745
- align-items: flex-end;
1746
- z-index: 60;
1747
- }
1748
-
1749
- .chat-toast-container .toast {
1750
- width: 100%;
1751
- max-width: 100%;
1752
- padding: 12px 14px;
1753
- border-width: 1px;
1754
- border-style: solid;
1755
- border-color: color-mix(in oklab, #f59e0b 78%, white 10%);
1756
- border-left-width: 4px;
1757
- background:
1758
- linear-gradient(135deg,
1759
- color-mix(in oklab, #f59e0b 32%, transparent),
1760
- color-mix(in oklab, var(--color-surface) 86%, #0b1022 14%) 42%),
1761
- color-mix(in oklab, var(--color-surface) 74%, #1b1320 26%);
1762
- color: color-mix(in oklab, white 92%, #fef3c7 8%);
1763
- font-size: 13px;
1764
- font-weight: 600;
1765
- box-shadow:
1766
- 0 18px 34px rgb(0 0 0 / 0.38),
1767
- 0 0 0 1px color-mix(in oklab, #f59e0b 18%, transparent);
1768
- }
1769
-
1770
- :root[data-theme="light"] .chat-toast-container .toast {
1771
- border-color: color-mix(in oklab, #f59e0b 84%, #b45309 16%);
1772
- background:
1773
- linear-gradient(135deg,
1774
- color-mix(in oklab, #fcd34d 42%, white 58%),
1775
- color-mix(in oklab, white 94%, #fff7ed 6%) 42%),
1776
- #fff8e7;
1777
- color: #422006;
1778
- box-shadow:
1779
- 0 16px 30px rgb(84 46 10 / 0.18),
1780
- 0 0 0 1px rgb(245 158 11 / 0.12);
1781
- }
1782
-
1783
- .chat-panel-header {
1784
- display: flex;
1785
- align-items: flex-start;
1786
- justify-content: space-between;
1787
- gap: var(--space-3);
1788
- }
1789
-
1790
- .chat-panel-title {
1791
- margin: 0;
1792
- font-size: var(--text-sm);
1793
- font-weight: 700;
1794
- }
1795
-
1796
- .chat-panel-status {
1797
- margin: var(--space-1) 0 0;
1798
- font-size: 11px;
1799
- color: var(--color-text-muted);
1800
- }
1801
-
1802
- .chat-alert-btn {
1803
- flex-shrink: 0;
1804
- padding: 6px 10px;
1805
- font-size: 11px;
1806
- }
1807
-
1808
- .chat-alert-btn.is-enabled {
1809
- border-color: oklch(from var(--color-success) l c h / 0.45);
1810
- color: var(--color-success);
1811
- background: oklch(from var(--color-success) l c h / 0.12);
1812
- }
1813
-
1814
- .chat-alert-btn.is-blocked {
1815
- color: var(--color-warning);
1816
- }
1817
-
1818
- .chat-empty-state {
1819
- padding: var(--space-4);
1820
- border: 1px dashed var(--color-border);
1821
- border-radius: var(--radius-md);
1822
- font-size: 12px;
1823
- color: var(--color-text-muted);
1824
- background: var(--color-surface-2);
1825
- }
1826
-
1827
- .chat-messages {
1828
- display: flex;
1829
- flex-direction: column;
1830
- gap: var(--space-3);
1831
- overflow-y: auto;
1832
- padding-right: var(--space-1);
1833
- min-height: 140px;
1834
- max-height: 320px;
1835
- }
1836
-
1837
- .chat-message {
1838
- display: flex;
1839
- align-items: flex-start;
1840
- gap: var(--space-2);
1841
- }
1842
-
1843
- .chat-message.is-local {
1844
- flex-direction: row-reverse;
1845
- }
1846
-
1847
- .chat-message-avatar {
1848
- width: 28px;
1849
- height: 28px;
1850
- border-radius: var(--radius-full);
1851
- display: flex;
1852
- align-items: center;
1853
- justify-content: center;
1854
- color: white;
1855
- font-size: 12px;
1856
- font-weight: 700;
1857
- flex-shrink: 0;
1858
- }
1859
-
1860
- .chat-message-body {
1861
- min-width: 0;
1862
- flex: 1;
1863
- display: flex;
1864
- flex-direction: column;
1865
- align-items: flex-start;
1866
- }
1867
-
1868
- .chat-message.is-local .chat-message-body {
1869
- align-items: flex-end;
1870
- }
1871
-
1872
- .chat-message-meta {
1873
- display: flex;
1874
- flex-wrap: wrap;
1875
- align-items: center;
1876
- gap: 6px;
1877
- margin-bottom: 4px;
1878
- }
1879
-
1880
- .chat-message.is-local .chat-message-meta {
1881
- justify-content: flex-end;
1882
- }
1883
-
1884
- .chat-message-author {
1885
- font-size: 12px;
1886
- font-weight: 600;
1887
- color: var(--color-text);
1888
- }
1889
-
1890
- .chat-message-time,
1891
- .chat-message-file {
1892
- font-size: 10px;
1893
- color: var(--color-text-muted);
1894
- }
1895
-
1896
- .chat-message-file {
1897
- padding: 2px 6px;
1898
- border-radius: var(--radius-full);
1899
- background: var(--color-surface-offset);
1900
- }
1901
-
1902
- .chat-message-text {
1903
- margin: 0;
1904
- padding: 10px 12px;
1905
- border-radius: var(--radius-md);
1906
- background: var(--color-surface-2);
1907
- border: 1px solid var(--color-divider);
1908
- color: var(--color-text);
1909
- font-size: 13px;
1910
- line-height: 1.45;
1911
- word-break: break-word;
1912
- width: fit-content;
1913
- max-width: 78%;
1914
- }
1915
-
1916
- .chat-message.is-local .chat-message-text {
1917
- background: oklch(from var(--color-primary) l c h / 0.14);
1918
- border-color: oklch(from var(--color-primary) l c h / 0.25);
1919
- }
1920
-
1921
- .chat-form {
1922
- display: flex;
1923
- align-items: center;
1924
- gap: var(--space-2);
1925
- }
1926
-
1927
- .chat-input {
1928
- font-size: 13px;
1929
- }
1930
-
1931
- .chat-send-btn {
1932
- flex-shrink: 0;
1933
- padding-inline: var(--space-4);
1934
- }
1935
-
1936
- .app-dialog {
1937
- width: min(420px, calc(100vw - var(--space-6)));
1938
- margin: auto;
1939
- padding: 0;
1940
- border: 1px solid var(--color-border);
1941
- border-radius: var(--radius-xl);
1942
- background: var(--color-surface);
1943
- color: var(--color-text);
1944
- box-shadow: var(--shadow-lg);
1945
- opacity: 0;
1946
- transform: scale(0.95);
1947
- transition:
1948
- opacity 0.2s cubic-bezier(0.16, 1, 0.3, 1),
1949
- transform 0.2s cubic-bezier(0.16, 1, 0.3, 1),
1950
- display 0.2s cubic-bezier(0.16, 1, 0.3, 1) allow-discrete;
1951
- }
1952
-
1953
- .app-dialog[open] {
1954
- opacity: 1;
1955
- transform: scale(1);
1956
- }
1957
-
1958
- @starting-style {
1959
- .app-dialog[open] {
1960
- opacity: 0;
1961
- transform: scale(0.95);
1962
- }
1963
- }
1964
-
1965
- .app-dialog::backdrop {
1966
- background: oklch(from var(--color-bg) l c h / 0.72);
1967
- backdrop-filter: blur(6px);
1968
- opacity: 0;
1969
- transition:
1970
- opacity 0.2s cubic-bezier(0.16, 1, 0.3, 1),
1971
- display 0.2s cubic-bezier(0.16, 1, 0.3, 1) allow-discrete;
1972
- }
1973
-
1974
- .app-dialog[open]::backdrop {
1975
- opacity: 1;
1976
- }
1977
-
1978
- @starting-style {
1979
- .app-dialog[open]::backdrop {
1980
- opacity: 0;
1981
- }
1982
- }
1983
- .app-dialog-form {
1984
- display: grid;
1985
- gap: var(--space-4);
1986
- padding: var(--space-5);
1987
- }
1988
- .app-dialog-header {
1989
- display: grid;
1990
- gap: var(--space-1);
1991
- }
1992
- .app-dialog-title {
1993
- font-size: var(--text-base);
1994
- font-weight: 600;
1995
- }
1996
- .app-dialog-copy {
1997
- color: var(--color-text-muted);
1998
- font-size: var(--text-sm);
1999
- }
2000
- .app-dialog-field {
2001
- display: grid;
2002
- gap: var(--space-2);
2003
- }
2004
- .app-dialog-label {
2005
- font-size: var(--text-xs);
2006
- font-weight: 600;
2007
- color: var(--color-text-muted);
2008
- text-transform: uppercase;
2009
- letter-spacing: 0.08em;
2010
- }
2011
- .app-dialog-hint {
2012
- color: var(--color-text-muted);
2013
- font-size: var(--text-xs);
2014
- line-height: 1.5;
2015
- }
2016
- .app-dialog-note {
2017
- border: 1px solid var(--color-border);
2018
- border-radius: var(--radius-md);
2019
- background: var(--color-surface-offset);
2020
- color: var(--color-text);
2021
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2022
- font-size: var(--text-xs);
2023
- line-height: 1.6;
2024
- overflow-wrap: anywhere;
2025
- padding: var(--space-3);
2026
- }
2027
- .app-dialog-note.is-danger {
2028
- background: var(--color-error-highlight);
2029
- border-color: oklch(from var(--color-error) l c h / 0.35);
2030
- color: var(--color-error);
2031
- }
2032
- .app-dialog-actions {
2033
- display: flex;
2034
- justify-content: flex-end;
2035
- gap: var(--space-2);
2036
- }
2037
-
2038
- .tab-lock-overlay {
2039
- position: fixed;
2040
- inset: 0;
2041
- z-index: 1200;
2042
- display: grid;
2043
- place-items: center;
2044
- padding: var(--space-6);
2045
- background:
2046
- radial-gradient(circle at top, oklch(from var(--color-primary) l c h / 0.16), transparent 38%),
2047
- oklch(from var(--color-bg) l c h / 0.82);
2048
- backdrop-filter: blur(10px);
2049
- }
2050
-
2051
- .tab-lock-card {
2052
- width: min(520px, 100%);
2053
- display: grid;
2054
- gap: var(--space-4);
2055
- padding: var(--space-6);
2056
- border: 1px solid oklch(from var(--color-primary) l c h / 0.25);
2057
- border-radius: var(--radius-xl);
2058
- background: linear-gradient(180deg, var(--color-surface), var(--color-surface-2));
2059
- box-shadow: var(--shadow-lg);
2060
- }
2061
-
2062
- .tab-lock-kicker {
2063
- font-size: var(--text-xs);
2064
- font-weight: 700;
2065
- letter-spacing: 0.08em;
2066
- text-transform: uppercase;
2067
- color: var(--color-primary);
2068
- }
2069
-
2070
- .tab-lock-title {
2071
- font-size: var(--text-lg);
2072
- line-height: 1.2;
2073
- }
2074
-
2075
- .tab-lock-copy {
2076
- color: var(--color-text-muted);
2077
- font-size: var(--text-sm);
2078
- line-height: 1.6;
2079
- }
2080
-
2081
- .tab-lock-actions {
2082
- display: flex;
2083
- justify-content: flex-start;
2084
- }
2085
-
2086
-
2087
- /* ===== EDITOR LAYOUT ===== */
2088
-
2089
- .editor-layout {
2090
- display: flex;
2091
- flex: 1;
2092
- overflow: hidden;
2093
- position: relative;
2094
- }
2095
-
2096
- .editor-pane,
2097
- .preview-pane {
2098
- display: flex;
2099
- flex-direction: column;
2100
- overflow: hidden;
2101
- }
2102
- .editor-pane {
2103
- flex: 1;
2104
- min-width: 200px;
2105
- }
2106
- .preview-pane {
2107
- flex: 1;
2108
- min-width: 200px;
2109
- }
2110
-
2111
- .pane-header {
2112
- display: flex;
2113
- align-items: center;
2114
- justify-content: space-between;
2115
- padding: var(--space-1) var(--space-3);
2116
- background: var(--color-surface-offset);
2117
- border-bottom: 1px solid var(--color-divider);
2118
- flex-shrink: 0;
2119
- height: 28px;
2120
- }
2121
- .pane-header-actions {
2122
- display: flex;
2123
- align-items: center;
2124
- gap: var(--space-1);
2125
- }
2126
- .pane-header-meta {
2127
- display: flex;
2128
- align-items: baseline;
2129
- gap: var(--space-3);
2130
- min-width: 0;
2131
- }
2132
- .pane-label {
2133
- font-size: 11px;
2134
- font-weight: 500;
2135
- color: var(--color-text-muted);
2136
- text-transform: uppercase;
2137
- letter-spacing: 0.06em;
2138
- }
2139
- .pane-label-meta {
2140
- font-size: 11px;
2141
- font-family: var(--font-mono);
2142
- color: var(--color-text-muted);
2143
- }
2144
-
2145
- /* Resizer */
2146
- .resizer {
2147
- width: 4px;
2148
- cursor: col-resize;
2149
- background: var(--color-divider);
2150
- flex-shrink: 0;
2151
- position: relative;
2152
- transition: background var(--transition-interactive);
2153
- z-index: 5;
2154
- }
2155
- .resizer:hover,
2156
- .resizer.dragging {
2157
- background: var(--color-primary);
2158
- }
2159
- .resizer::after {
2160
- content: '';
2161
- position: absolute;
2162
- top: 0;
2163
- left: -6px;
2164
- right: -6px;
2165
- bottom: 0;
2166
- }
2167
-
2168
- /* Editor container (CodeMirror) */
2169
- .markdown-toolbar {
2170
- display: flex;
2171
- align-items: center;
2172
- gap: var(--space-1);
2173
- flex-wrap: wrap;
2174
- padding: var(--space-1) var(--space-2);
2175
- background: var(--color-surface);
2176
- border-bottom: 1px solid var(--color-divider);
2177
- flex-shrink: 0;
2178
- }
2179
-
2180
- .markdown-toolbar-btn {
2181
- min-width: 36px;
2182
- min-height: 28px;
2183
- padding: 0;
2184
- border-radius: var(--radius-sm);
2185
- color: var(--color-text-muted);
2186
- font-size: 11px;
2187
- line-height: 1;
2188
- }
2189
-
2190
- .markdown-toolbar-btn svg {
2191
- width: 14px;
2192
- height: 14px;
2193
- flex-shrink: 0;
2194
- pointer-events: none;
2195
- }
2196
-
2197
- .markdown-toolbar-separator {
2198
- width: 1px;
2199
- height: 18px;
2200
- background: var(--color-divider);
2201
- margin: 0 2px;
2202
- flex-shrink: 0;
2203
- }
2204
-
2205
- .markdown-toolbar-btn:hover {
2206
- color: var(--color-text);
2207
- background: var(--color-surface-offset);
2208
- }
2209
-
2210
- .markdown-toolbar-btn:active {
2211
- transform: scale(0.95);
2212
- }
2213
-
2214
- .markdown-toolbar-btn:focus-visible {
2215
- outline: 2px solid oklch(from var(--color-primary) l c h / 0.35);
2216
- outline-offset: 1px;
2217
- }
2218
-
2219
- .editor-container {
2220
- flex: 1;
2221
- overflow: hidden;
2222
- background: var(--color-bg);
2223
- position: relative;
2224
- }
2225
-
2226
- .editor-container > .editor-loading {
2227
- position: absolute;
2228
- inset: 0;
2229
- z-index: 2;
2230
- background: var(--color-bg);
2231
- }
2232
-
2233
- .editor-container.is-loading-editor .cm-editor {
2234
- visibility: hidden;
2235
- }
2236
-
2237
- .editor-container .cm-editor {
2238
- height: 100%;
2239
- font-family: var(--font-mono);
2240
- font-size: 14px;
2241
- }
2242
- .editor-container .cm-editor .cm-scroller {
2243
- overflow: auto;
2244
- font-family: var(--font-mono);
2245
- }
2246
- .editor-container .cm-editor.cm-focused {
2247
- outline: none;
2248
- }
2249
-
2250
- /* y-webrtc cursor styles */
2251
- .cm-editor .cm-ySelectionInfo {
2252
- font-family: var(--font-body);
2253
- font-size: 11px;
2254
- font-weight: 600;
2255
- padding: 1px 4px;
2256
- border-radius: 3px 3px 3px 0;
2257
- opacity: 1;
2258
- transition: opacity 0.3s;
2259
- position: absolute;
2260
- top: -1.2em;
2261
- left: -1px;
2262
- white-space: nowrap;
2263
- z-index: 10;
2264
- }
2265
-
2266
- /* Preview body (contains preview + outline side by side) */
2267
- .preview-body {
2268
- --preview-floating-sidebar-gap: var(--space-3);
2269
- --preview-floating-comments-width: min(300px, 34vw);
2270
- --preview-floating-outline-width: 220px;
2271
- --preview-content-max-width: 720px;
2272
- --preview-comment-rail-width: 0px;
2273
- --preview-comment-rail-inset: 10px;
2274
- display: flex;
2275
- flex: 1;
2276
- overflow: hidden;
2277
- min-height: 0;
2278
- position: relative;
2279
- }
2280
-
2281
- /* Preview container */
2282
- .preview-container {
2283
- flex: 1;
2284
- overflow-y: auto;
2285
- overflow-x: hidden;
2286
- background: var(--color-bg);
2287
- overscroll-behavior: contain;
2288
- min-width: 0;
2289
- }
2290
-
2291
- .preview-content {
2292
- padding: var(--space-6) calc(var(--space-6) + var(--preview-comment-rail-width)) var(--space-12) var(--space-6);
2293
- max-width: 720px;
2294
- margin: 0 auto;
2295
- min-width: 0;
2296
- overflow: hidden;
2297
- position: relative;
2298
- font-family: var(--font-body);
2299
- font-size: var(--text-sm);
2300
- line-height: 1.7;
2301
- color: var(--color-text);
2302
- }
2303
- .preview-content[data-render-phase="shell"] {
2304
- color: var(--color-text-muted);
2305
- }
2306
-
2307
- @media (min-width: 769px) {
2308
- .preview-body {
2309
- --preview-comment-rail-width: 52px;
2310
- }
2311
-
2312
- .preview-content {
2313
- padding-bottom: calc(var(--space-12) + 96px);
2314
- }
2315
- }
2316
-
2317
- .preview-content.is-excalidraw-file-preview {
2318
- display: flex;
2319
- width: 100%;
2320
- min-height: 100%;
2321
- height: 100%;
2322
- margin: 0;
2323
- padding: var(--space-3);
2324
- position: relative;
2325
- box-sizing: border-box;
2326
- max-width: none;
2327
- }
2328
-
2329
- .preview-content.is-image-file-preview {
2330
- display: flex;
2331
- width: 100%;
2332
- min-height: 100%;
2333
- margin: 0;
2334
- padding: var(--space-4);
2335
- position: relative;
2336
- box-sizing: border-box;
2337
- max-width: none;
2338
- }
2339
-
2340
- .preview-content.is-plantuml-file-preview {
2341
- width: 100%;
2342
- min-height: 100%;
2343
- max-width: none;
2344
- }
2345
-
2346
- .preview-content.is-mermaid-file-preview {
2347
- width: 100%;
2348
- min-height: 100%;
2349
- max-width: none;
2350
- }
2351
-
2352
- .preview-content.is-mermaid-file-preview [data-preview-render-host="true"] {
2353
- min-height: 100%;
2354
- }
2355
-
2356
- .preview-content.is-plantuml-file-preview [data-preview-render-host="true"] {
2357
- min-height: 100%;
2358
- }
2359
-
2360
- .preview-content.is-excalidraw-file-preview [data-preview-render-host="true"] {
2361
- display: flex;
2362
- flex: 1;
2363
- min-width: 0;
2364
- min-height: 100%;
2365
- }
2366
-
2367
- .preview-content.is-image-file-preview [data-preview-render-host="true"] {
2368
- display: flex;
2369
- flex: 1;
2370
- min-width: 0;
2371
- min-height: 100%;
2372
- }
2373
-
2374
- .image-file-preview-shell {
2375
- width: 100%;
2376
- min-height: 100%;
2377
- margin: 0;
2378
- display: flex;
2379
- align-items: center;
2380
- justify-content: center;
2381
- }
2382
-
2383
- .image-file-preview-image {
2384
- max-width: min(100%, 1200px);
2385
- max-height: calc(100vh - 180px);
2386
- object-fit: contain;
2387
- border-radius: var(--radius-lg);
2388
- box-shadow: var(--shadow-lg);
2389
- background: var(--color-surface);
2390
- }
2391
-
2392
- .preview-content.is-mermaid-file-preview .mermaid-shell {
2393
- margin: 0;
2394
- min-height: 100%;
2395
- }
2396
-
2397
- .preview-content.is-plantuml-file-preview .plantuml-shell {
2398
- margin: 0;
2399
- min-height: 100%;
2400
- }
2401
-
2402
- .preview-content.is-excalidraw-file-preview .excalidraw-embed,
2403
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-placeholder {
2404
- margin: 0;
2405
- width: 100%;
2406
- min-height: 100%;
2407
- }
2408
-
2409
- .preview-content.is-excalidraw-file-preview .excalidraw-embed {
2410
- display: flex;
2411
- flex-direction: column;
2412
- height: 100%;
2413
- }
2414
-
2415
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-placeholder {
2416
- display: flex;
2417
- align-items: stretch;
2418
- }
2419
-
2420
- .preview-content.is-excalidraw-file-preview .preview-shell {
2421
- width: 100%;
2422
- min-height: 100%;
2423
- }
2424
-
2425
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-iframe {
2426
- flex: 1;
2427
- min-height: 0;
2428
- height: 100% !important;
2429
- }
2430
-
2431
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-resizer {
2432
- display: none;
2433
- }
2434
-
2435
- .preview-content.is-excalidraw-file-preview .excalidraw-embed.is-maximized {
2436
- position: absolute;
2437
- inset: var(--space-3);
2438
- margin: 0;
2439
- z-index: 2;
2440
- max-width: calc(100% - (var(--space-3) * 2));
2441
- box-sizing: border-box;
2442
- }
2443
-
2444
- .preview-content.is-excalidraw-file-preview .excalidraw-embed.is-maximized .excalidraw-embed-iframe {
2445
- height: 100% !important;
2446
- }
2447
-
2448
- .preview-shell {
2449
- min-height: 60vh;
2450
- display: flex;
2451
- align-items: center;
2452
- justify-content: center;
2453
- font-size: var(--text-sm);
2454
- color: var(--color-text-muted);
2455
- }
2456
-
2457
- /* ===== MARKDOWN PREVIEW STYLES ===== */
2458
-
2459
- .preview-content h1 {
2460
- font-size: var(--text-xl);
2461
- font-weight: 700;
2462
- margin: var(--space-8) 0 var(--space-4);
2463
- padding-bottom: var(--space-2);
2464
- border-bottom: 1px solid var(--color-divider);
2465
- letter-spacing: -0.02em;
2466
- }
2467
- .preview-content h1:first-child {
2468
- margin-top: 0;
2469
- }
2470
- .preview-content h2 {
2471
- font-size: var(--text-lg);
2472
- font-weight: 600;
2473
- margin: var(--space-6) 0 var(--space-3);
2474
- letter-spacing: -0.01em;
2475
- }
2476
- .preview-content h3 {
2477
- font-size: var(--text-base);
2478
- font-weight: 600;
2479
- margin: var(--space-5) 0 var(--space-2);
2480
- }
2481
- .preview-content h4, .preview-content h5, .preview-content h6 {
2482
- font-size: var(--text-sm);
2483
- font-weight: 600;
2484
- margin: var(--space-4) 0 var(--space-2);
2485
- color: var(--color-text-muted);
2486
- }
2487
-
2488
- .preview-content p {
2489
- margin-bottom: var(--space-4);
2490
- max-width: 72ch;
2491
- }
2492
-
2493
- .preview-content p:has(> .excalidraw-embed-placeholder:only-child) {
2494
- max-width: none;
2495
- margin-bottom: 0;
2496
- }
2497
-
2498
- .preview-content p:has(> .video-embed-placeholder:only-child) {
2499
- max-width: none;
2500
- margin-bottom: 0;
2501
- }
2502
-
2503
- .preview-content p:has(> .plantuml-shell:only-child) {
2504
- max-width: none;
2505
- margin-bottom: 0;
2506
- }
2507
-
2508
- .preview-content a {
2509
- color: var(--color-primary);
2510
- text-decoration: none;
2511
- border-bottom: 1px solid oklch(from var(--color-primary) l c h / 0.3);
2512
- transition: border-color var(--transition-interactive);
2513
- }
2514
- .preview-content a:hover {
2515
- border-bottom-color: var(--color-primary);
2516
- }
2517
-
2518
- .preview-content strong { font-weight: 600; }
2519
- .preview-content em { font-style: italic; }
2520
- .preview-content del { text-decoration: line-through; color: var(--color-text-muted); }
2521
-
2522
- .preview-content ul,
2523
- .preview-content ol {
2524
- margin-bottom: var(--space-4);
2525
- padding-left: var(--space-6);
2526
- }
2527
- .preview-content li {
2528
- margin-bottom: var(--space-1);
2529
- }
2530
- .preview-content li > ul,
2531
- .preview-content li > ol {
2532
- margin-top: var(--space-1);
2533
- margin-bottom: 0;
2534
- }
2535
-
2536
- /* Task list checkboxes */
2537
- .preview-content .task-list-item {
2538
- list-style: none;
2539
- margin-left: calc(var(--space-6) * -1);
2540
- padding-left: var(--space-1);
2541
- }
2542
- .preview-content .task-list-item input[type="checkbox"] {
2543
- margin-right: var(--space-2);
2544
- accent-color: var(--color-primary);
2545
- vertical-align: middle;
2546
- }
2547
-
2548
- /* Blockquote */
2549
- .preview-content blockquote {
2550
- margin: var(--space-4) 0;
2551
- padding: var(--space-3) var(--space-5);
2552
- border-left: 3px solid var(--color-primary);
2553
- background: var(--color-surface);
2554
- border-radius: 0 var(--radius-md) var(--radius-md) 0;
2555
- color: var(--color-text-muted);
2556
- }
2557
- .preview-content blockquote p:last-child {
2558
- margin-bottom: 0;
2559
- }
2560
-
2561
- /* Inline code */
2562
- .preview-content code {
2563
- font-family: var(--font-mono);
2564
- font-size: 0.875em;
2565
- background: var(--color-surface-offset);
2566
- padding: 2px 6px;
2567
- border-radius: var(--radius-sm);
2568
- color: var(--color-primary);
2569
- }
2570
-
2571
- /* Code blocks */
2572
- .preview-content pre {
2573
- margin: var(--space-4) 0;
2574
- border-radius: var(--radius-lg);
2575
- overflow-x: auto;
2576
- -webkit-overflow-scrolling: touch;
2577
- border: 1px solid var(--color-border);
2578
- max-width: 100%;
2579
- background: var(--color-surface);
2580
- }
2581
- .preview-content pre code {
2582
- display: block;
2583
- padding: var(--space-4);
2584
- background: none;
2585
- color: var(--color-text);
2586
- font-size: 13px;
2587
- line-height: 1.6;
2588
- white-space: pre;
2589
- word-wrap: normal;
2590
- overflow-wrap: normal;
2591
- width: fit-content;
2592
- min-width: 100%;
2593
- }
2594
-
2595
- /* Tables */
2596
- .preview-content .table-wrapper {
2597
- margin: var(--space-4) 0;
2598
- border: 1px solid var(--color-border);
2599
- border-radius: var(--radius-md);
2600
- overflow-x: auto;
2601
- -webkit-overflow-scrolling: touch;
2602
- }
2603
- .preview-content table {
2604
- width: 100%;
2605
- min-width: 100%;
2606
- border-collapse: collapse;
2607
- white-space: nowrap;
2608
- }
2609
- .preview-content th,
2610
- .preview-content td {
2611
- padding: var(--space-2) var(--space-3);
2612
- text-align: left;
2613
- border-bottom: 1px solid var(--color-divider);
2614
- font-size: var(--text-sm);
2615
- }
2616
- .preview-content th {
2617
- background: var(--color-surface-offset);
2618
- font-weight: 600;
2619
- font-size: var(--text-xs);
2620
- text-transform: uppercase;
2621
- letter-spacing: 0.03em;
2622
- color: var(--color-text-muted);
2623
- }
2624
- .preview-content tr:last-child td {
2625
- border-bottom: none;
2626
- }
2627
- .preview-content tr:hover td {
2628
- background: var(--color-surface-offset);
2629
- }
2630
-
2631
- /* Horizontal rule */
2632
- .preview-content hr {
2633
- border: none;
2634
- height: 1px;
2635
- background: var(--color-divider);
2636
- margin: var(--space-8) 0;
2637
- }
2638
-
2639
- /* Images */
2640
- .preview-content img {
2641
- max-width: 100%;
2642
- height: auto;
2643
- border-radius: var(--radius-md);
2644
- margin: var(--space-4) 0;
2645
- cursor: zoom-in;
2646
- }
2647
-
2648
- .image-lightbox-root {
2649
- position: fixed;
2650
- inset: 0;
2651
- z-index: 220;
2652
- display: grid;
2653
- place-items: center;
2654
- pointer-events: auto;
2655
- }
2656
-
2657
- .image-lightbox-root[hidden] {
2658
- display: none !important;
2659
- }
2660
-
2661
- .image-lightbox-backdrop {
2662
- position: absolute;
2663
- inset: 0;
2664
- border: none;
2665
- background: oklch(0.08 0.01 260 / 0.82);
2666
- backdrop-filter: blur(10px);
2667
- cursor: zoom-out;
2668
- }
2669
-
2670
- .image-lightbox-shell {
2671
- position: absolute;
2672
- inset: 0;
2673
- z-index: 1;
2674
- }
2675
-
2676
- .image-lightbox-toolbar {
2677
- position: absolute;
2678
- top: var(--space-5);
2679
- left: var(--space-5);
2680
- right: var(--space-5);
2681
- z-index: 2;
2682
- display: flex;
2683
- align-items: center;
2684
- justify-content: space-between;
2685
- gap: var(--space-3);
2686
- pointer-events: none;
2687
- }
2688
-
2689
- .image-lightbox-title {
2690
- min-width: 0;
2691
- font-size: var(--text-xs);
2692
- font-weight: 600;
2693
- color: white;
2694
- overflow: hidden;
2695
- text-overflow: ellipsis;
2696
- white-space: nowrap;
2697
- padding: 8px 12px;
2698
- border-radius: 999px;
2699
- background: oklch(0.18 0.02 260 / 0.68);
2700
- backdrop-filter: blur(12px);
2701
- box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2702
- pointer-events: auto;
2703
- }
2704
-
2705
- .image-lightbox-controls {
2706
- display: inline-flex;
2707
- align-items: center;
2708
- gap: var(--space-2);
2709
- flex-wrap: wrap;
2710
- justify-content: flex-end;
2711
- pointer-events: auto;
2712
- }
2713
-
2714
- .image-lightbox-btn {
2715
- min-width: 0;
2716
- padding: 8px 12px;
2717
- border: none;
2718
- border-radius: 999px;
2719
- background: oklch(0.18 0.02 260 / 0.68);
2720
- color: white;
2721
- font-size: var(--text-xs);
2722
- font-weight: 600;
2723
- backdrop-filter: blur(12px);
2724
- box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2725
- transition: background 0.18s ease, transform 0.18s ease;
2726
- }
2727
-
2728
- .image-lightbox-btn:hover:not(:disabled) {
2729
- background: oklch(0.24 0.02 260 / 0.82);
2730
- }
2731
-
2732
- .image-lightbox-btn:disabled {
2733
- opacity: 0.45;
2734
- cursor: default;
2735
- }
2736
-
2737
- .image-lightbox-zoom-label {
2738
- min-width: 58px;
2739
- padding: 8px 12px;
2740
- border-radius: 999px;
2741
- background: oklch(0.18 0.02 260 / 0.68);
2742
- color: white;
2743
- font-size: var(--text-xs);
2744
- font-weight: 600;
2745
- font-variant-numeric: tabular-nums;
2746
- text-align: center;
2747
- backdrop-filter: blur(12px);
2748
- box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2749
- }
2750
-
2751
- .image-lightbox-viewport {
2752
- position: absolute;
2753
- inset: 0;
2754
- overflow: hidden;
2755
- touch-action: none;
2756
- user-select: none;
2757
- }
2758
-
2759
- .image-lightbox-viewport.is-dragging .image-lightbox-image {
2760
- cursor: grabbing !important;
2761
- }
2762
-
2763
- .image-lightbox-image {
2764
- position: absolute;
2765
- inset: 0;
2766
- margin: auto;
2767
- max-width: calc(100vw - (var(--space-8) * 2));
2768
- max-height: calc(100vh - (var(--space-8) * 2));
2769
- width: auto;
2770
- height: auto;
2771
- object-fit: contain;
2772
- transform-origin: center center;
2773
- will-change: transform;
2774
- box-shadow: 0 28px 80px oklch(0 0 0 / 0.28);
2775
- }
2776
-
2777
- body.image-lightbox-open {
2778
- overflow: hidden;
2779
- }
2780
-
2781
- @media (max-width: 768px) {
2782
- .image-lightbox-toolbar {
2783
- top: var(--space-3);
2784
- left: var(--space-3);
2785
- right: var(--space-3);
2786
- align-items: flex-start;
2787
- flex-direction: column;
2788
- }
2789
-
2790
- .image-lightbox-controls {
2791
- justify-content: flex-start;
2792
- }
2793
-
2794
- .image-lightbox-btn {
2795
- flex: 0 0 auto;
2796
- }
2797
-
2798
- .image-lightbox-image {
2799
- max-width: calc(100vw - (var(--space-4) * 2));
2800
- max-height: calc(100vh - (var(--space-4) * 2));
2801
- }
2802
- }
2803
-
2804
- .preview-content .video-embed-shell {
2805
- display: block;
2806
- background: #000;
2807
- }
2808
-
2809
- .preview-content .video-embed,
2810
- .preview-content .video-embed-placeholder {
2811
- display: block;
2812
- transition: box-shadow 0.18s ease;
2813
- }
2814
-
2815
- .preview-content .video-embed-placeholder.is-hydrated {
2816
- visibility: hidden;
2817
- }
2818
-
2819
- .video-embed-overlay-root {
2820
- position: absolute;
2821
- inset: 0;
2822
- pointer-events: none;
2823
- z-index: 1;
2824
- }
2825
-
2826
- .preview-content .video-embed-frame,
2827
- .preview-content .video-embed,
2828
- .preview-content .video-embed-placeholder {
2829
- width: 100%;
2830
- max-width: 100%;
2831
- min-width: 0;
2832
- }
2833
-
2834
- .preview-content .video-embed-frame {
2835
- height: 100%;
2836
- }
2837
-
2838
- .preview-content .video-embed-placeholder-card {
2839
- border-radius: 0;
2840
- min-height: 100%;
2841
- }
2842
-
2843
- .preview-content .video-embed-placeholder-copy {
2844
- display: grid;
2845
- gap: 2px;
2846
- }
2847
-
2848
- .preview-content .video-embed-iframe,
2849
- .preview-content .video-embed-player {
2850
- display: block;
2851
- width: 100%;
2852
- height: 100%;
2853
- max-width: 100%;
2854
- border: none;
2855
- background: #000;
2856
- }
2857
-
2858
- .preview-content .video-embed-player {
2859
- object-fit: contain;
2860
- }
2861
-
2862
- /* Mermaid diagrams */
2863
- .preview-content .mermaid-shell {
2864
- display: grid;
2865
- gap: 0;
2866
- }
2867
- .preview-content .mermaid-placeholder-card {
2868
- border-radius: 0;
2869
- }
2870
- .preview-content .mermaid-toolbar {
2871
- justify-content: flex-end;
2872
- }
2873
- .preview-content .mermaid-zoom-btn {
2874
- min-width: 32px;
2875
- line-height: 1.5;
2876
- }
2877
- .preview-content .mermaid-zoom-btn:disabled {
2878
- opacity: 0.5;
2879
- cursor: not-allowed;
2880
- }
2881
- .preview-content .mermaid-frame {
2882
- max-width: none;
2883
- }
2884
- .preview-content .mermaid-frame.is-pannable {
2885
- cursor: grab;
2886
- }
2887
- .preview-content .mermaid-frame.is-dragging {
2888
- cursor: grabbing;
2889
- user-select: none;
2890
- }
2891
- .preview-content .mermaid-frame svg {
2892
- display: block;
2893
- }
2894
- body.mermaid-maximized-open {
2895
- overflow: hidden;
2896
- }
2897
- body.mermaid-maximized-open::before {
2898
- content: '';
2899
- position: fixed;
2900
- inset: 0;
2901
- background: oklch(0.1 0 0 / 0.42);
2902
- backdrop-filter: blur(2px);
2903
- z-index: 170;
2904
- }
2905
- .preview-content .mermaid-shell.is-maximized {
2906
- position: fixed;
2907
- inset: var(--space-4);
2908
- width: auto;
2909
- z-index: 171;
2910
- margin: 0;
2911
- max-width: none;
2912
- box-shadow: var(--shadow-lg);
2913
- grid-template-rows: auto minmax(0, 1fr);
2914
- }
2915
- .preview-content .mermaid-shell.is-maximized .mermaid-frame {
2916
- max-height: none;
2917
- height: 100%;
2918
- }
2919
-
2920
- /* PlantUML diagrams */
2921
- .preview-content .plantuml-shell,
2922
- .plantuml-maximized-root .plantuml-shell {
2923
- display: grid;
2924
- gap: 0;
2925
- }
2926
- .preview-content .plantuml-shell,
2927
- .plantuml-maximized-root .plantuml-shell {
2928
- min-width: 0;
2929
- width: 100%;
2930
- }
2931
- .preview-content .plantuml-placeholder-card,
2932
- .plantuml-maximized-root .plantuml-placeholder-card {
2933
- border-radius: 0;
2934
- }
2935
- .preview-content .plantuml-tool-btn:disabled,
2936
- .plantuml-maximized-root .plantuml-tool-btn:disabled {
2937
- opacity: 0.5;
2938
- cursor: not-allowed;
2939
- }
2940
- .preview-content .plantuml-toolbar,
2941
- .plantuml-maximized-root .plantuml-toolbar {
2942
- justify-content: flex-end;
2943
- }
2944
- .preview-content .plantuml-tool-btn,
2945
- .plantuml-maximized-root .plantuml-tool-btn {
2946
- min-width: 32px;
2947
- line-height: 1.5;
2948
- }
2949
- .preview-content .plantuml-frame,
2950
- .plantuml-maximized-root .plantuml-frame {
2951
- max-width: 100%;
2952
- }
2953
- .preview-content .plantuml-frame.is-pannable,
2954
- .plantuml-maximized-root .plantuml-frame.is-pannable {
2955
- cursor: grab;
2956
- }
2957
- .preview-content .plantuml-frame.is-dragging,
2958
- .plantuml-maximized-root .plantuml-frame.is-dragging {
2959
- cursor: grabbing;
2960
- user-select: none;
2961
- }
2962
- .preview-content .plantuml-frame svg,
2963
- .plantuml-maximized-root .plantuml-frame svg {
2964
- display: block;
2965
- }
2966
- body.plantuml-maximized-open {
2967
- overflow: hidden;
2968
- }
2969
- body.plantuml-maximized-open::before {
2970
- content: '';
2971
- position: fixed;
2972
- inset: 0;
2973
- background: oklch(0.1 0 0 / 0.42);
2974
- backdrop-filter: blur(2px);
2975
- z-index: 170;
2976
- }
2977
- .plantuml-maximized-root {
2978
- position: fixed;
2979
- inset: 0;
2980
- pointer-events: none;
2981
- z-index: 171;
2982
- }
2983
- .preview-content .plantuml-shell.is-maximized,
2984
- .plantuml-maximized-root .plantuml-shell.is-maximized {
2985
- position: fixed;
2986
- inset: var(--space-4);
2987
- width: auto;
2988
- z-index: 171;
2989
- margin: 0;
2990
- max-width: none;
2991
- box-shadow: var(--shadow-lg);
2992
- pointer-events: auto;
2993
- grid-template-rows: auto minmax(0, 1fr);
2994
- }
2995
- .preview-content .plantuml-shell.is-maximized .plantuml-frame,
2996
- .plantuml-maximized-root .plantuml-shell.is-maximized .plantuml-frame {
2997
- max-height: none;
2998
- height: 100%;
2999
- }
3000
-
3001
- /* ===== OUTLINE PANEL ===== */
3002
-
3003
- .pane-header-btn {
3004
- padding: 2px 6px;
3005
- border-radius: var(--radius-sm);
3006
- display: flex;
3007
- align-items: center;
3008
- gap: var(--space-1);
3009
- font-size: 11px;
3010
- color: var(--color-text-muted);
3011
- white-space: nowrap;
3012
- transition: color var(--transition-interactive), background var(--transition-interactive);
3013
- }
3014
- .pane-header-btn:hover {
3015
- color: var(--color-text);
3016
- background: var(--color-surface-dynamic);
3017
- }
3018
- .pane-header-btn.active {
3019
- color: var(--color-primary);
3020
- background: oklch(from var(--color-primary) l c h / 0.1);
3021
- }
3022
-
3023
- /* ===== COMMENTS ===== */
3024
-
3025
- .comments-drawer {
3026
- width: min(300px, 34vw);
3027
- min-width: 240px;
3028
- border-left: 1px solid var(--color-divider);
3029
- background:
3030
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.035), transparent 120px),
3031
- color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3032
- display: flex;
3033
- flex-direction: column;
3034
- min-height: 0;
3035
- box-shadow: inset 1px 0 0 oklch(from var(--color-comment) l c h / 0.06);
3036
- }
3037
-
3038
- .comments-drawer-header {
3039
- padding: var(--space-4);
3040
- border-bottom: 1px solid var(--color-divider);
3041
- background: color-mix(in srgb, var(--color-surface) 97%, var(--color-comment) 3%);
3042
- }
3043
-
3044
- .comments-drawer-title {
3045
- font-size: 12px;
3046
- font-weight: 700;
3047
- letter-spacing: 0.06em;
3048
- text-transform: uppercase;
3049
- color: var(--color-comment);
3050
- }
3051
-
3052
- .comments-drawer-empty {
3053
- padding: var(--space-4);
3054
- color: var(--color-text-muted);
3055
- font-size: 12px;
3056
- }
3057
-
3058
- .comments-drawer-list {
3059
- display: flex;
3060
- flex-direction: column;
3061
- gap: var(--space-3);
3062
- overflow: auto;
3063
- padding: var(--space-3);
3064
- }
3065
-
3066
- .comments-drawer-item {
3067
- width: 100%;
3068
- text-align: left;
3069
- border: 1px solid color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);
3070
- border-radius: calc(var(--radius-lg) + 4px);
3071
- padding: var(--space-4);
3072
- background:
3073
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.028), transparent 70%),
3074
- color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);
3075
- transition: transform 140ms ease, border-color var(--transition-interactive), background var(--transition-interactive), box-shadow var(--transition-interactive);
3076
- }
3077
-
3078
- .comments-drawer-item:hover {
3079
- transform: translateY(-1px);
3080
- border-color: oklch(from var(--color-comment) l c h / 0.18);
3081
- background:
3082
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.042), transparent 70%),
3083
- color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);
3084
- box-shadow: var(--shadow-md);
3085
- }
3086
-
3087
- .comments-drawer-item.is-active {
3088
- border-color: color-mix(in srgb, var(--color-border) 78%, var(--color-comment) 22%);
3089
- background:
3090
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.055), transparent 72%),
3091
- color-mix(in srgb, var(--color-surface-2) 90%, var(--color-comment) 10%);
3092
- box-shadow: 0 0 0 1px oklch(from var(--color-comment) l c h / 0.14);
3093
- }
3094
-
3095
- .comments-drawer-item-header,
3096
- .comments-drawer-item-footer {
3097
- display: flex;
3098
- align-items: center;
3099
- justify-content: space-between;
3100
- gap: var(--space-2);
3101
- }
3102
-
3103
- .comments-drawer-item-title {
3104
- font-size: 11px;
3105
- font-weight: 700;
3106
- letter-spacing: 0.05em;
3107
- text-transform: uppercase;
3108
- color: var(--color-comment);
3109
- }
3110
-
3111
- .comments-drawer-item-count {
3112
- min-width: 20px;
3113
- height: 20px;
3114
- border-radius: var(--radius-full);
3115
- display: inline-flex;
3116
- align-items: center;
3117
- justify-content: center;
3118
- background: var(--color-comment-soft);
3119
- color: var(--color-comment);
3120
- font-size: 11px;
3121
- font-weight: 700;
3122
- border: 1px solid oklch(from var(--color-comment) l c h / 0.18);
3123
- }
3124
-
3125
- .comments-drawer-item-quote {
3126
- margin: var(--space-3) 0;
3127
- padding: var(--space-3);
3128
- border-radius: var(--radius-lg);
3129
- border: 1px solid color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);
3130
- background: color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);
3131
- color: var(--color-text-muted);
3132
- font-family: var(--font-mono);
3133
- font-size: 11.5px;
3134
- line-height: 1.65;
3135
- white-space: pre-wrap;
3136
- overflow: auto;
3137
- overflow-wrap: anywhere;
3138
- word-break: break-word;
3139
- max-height: 9.5rem;
3140
- scrollbar-width: thin;
3141
- padding-bottom: calc(var(--space-3) + 2px);
3142
- }
3143
-
3144
- .comments-drawer-item-preview {
3145
- position: relative;
3146
- max-height: 7.8rem;
3147
- overflow: hidden;
3148
- color: var(--color-text-muted);
3149
- }
3150
-
3151
- .comments-drawer-item-preview:after {
3152
- content: "";
3153
- position: absolute;
3154
- inset: auto 0 0 0;
3155
- height: 2.5rem;
3156
- background: linear-gradient(180deg, oklch(0 0 0 / 0), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%));
3157
- pointer-events: none;
3158
- }
3159
-
3160
- .comments-drawer-item-footer {
3161
- font-size: 11px;
3162
- color: var(--color-text-muted);
3163
- font-weight: 600;
3164
- letter-spacing: 0.01em;
3165
- align-items: flex-end;
3166
- flex-wrap: wrap;
3167
- }
3168
-
3169
- .comments-drawer-item-updated {
3170
- color: var(--color-text-faint);
3171
- }
3172
-
3173
- .comment-editor-layer,
3174
- .comment-preview-layer,
3175
- .comment-preview-highlights {
3176
- position: absolute;
3177
- inset: 0;
3178
- pointer-events: none;
3179
- }
3180
-
3181
- .comment-editor-badge,
3182
- .comment-preview-badge {
3183
- position: absolute;
3184
- min-width: 28px;
3185
- height: 24px;
3186
- border-radius: var(--radius-full);
3187
- background: color-mix(in srgb, var(--color-surface) 68%, var(--color-comment) 32%);
3188
- color: var(--color-comment);
3189
- border: 1px solid oklch(from var(--color-comment) l c h / 0.24);
3190
- box-shadow: var(--shadow-md);
3191
- display: inline-flex;
3192
- align-items: center;
3193
- justify-content: center;
3194
- gap: 4px;
3195
- padding: 0 7px;
3196
- font-size: 10px;
3197
- font-weight: 700;
3198
- pointer-events: auto;
3199
- transition: transform 140ms ease, box-shadow 140ms ease, background-color 140ms ease, border-color 140ms ease, color 140ms ease, opacity 140ms ease;
3200
- }
3201
-
3202
- .comment-editor-badge.is-active,
3203
- .comment-preview-badge.is-active {
3204
- background: color-mix(in srgb, var(--color-surface) 42%, var(--color-comment) 58%);
3205
- border-color: oklch(from var(--color-comment) l c h / 0.32);
3206
- color: var(--color-text-inverse);
3207
- }
3208
-
3209
- .comment-preview-badge {
3210
- right: var(--preview-comment-rail-inset);
3211
- }
3212
-
3213
- .comment-editor-badge.is-passive,
3214
- .comment-preview-badge.is-passive {
3215
- opacity: 0.48;
3216
- background: color-mix(in srgb, var(--color-surface) 76%, var(--color-comment) 24%);
3217
- border-color: oklch(from var(--color-comment) l c h / 0.16);
3218
- box-shadow: none;
3219
- }
3220
-
3221
- .comment-editor-badge.is-hovered,
3222
- .comment-preview-badge.is-hovered {
3223
- opacity: 1;
3224
- background: color-mix(in srgb, var(--color-surface) 56%, var(--color-comment) 44%);
3225
- border-color: oklch(from var(--color-comment) l c h / 0.28);
3226
- color: var(--color-text-inverse);
3227
- }
3228
-
3229
- .comment-marker-icon {
3230
- display: inline-flex;
3231
- width: 12px;
3232
- height: 12px;
3233
- flex: 0 0 auto;
3234
- }
3235
-
3236
- .comment-marker-icon svg {
3237
- width: 100%;
3238
- height: 100%;
3239
- display: block;
3240
- }
3241
-
3242
- .comment-marker-count {
3243
- line-height: 1;
3244
- }
3245
-
3246
- .comment-editor-badge:hover,
3247
- .comment-preview-badge:hover,
3248
- .comment-selection-chip:hover {
3249
- transform: translateY(-1px) scale(1.04);
3250
- box-shadow: var(--shadow-lg);
3251
- }
3252
-
3253
- .comment-selection-chip {
3254
- position: absolute;
3255
- border-radius: var(--radius-full);
3256
- padding: 6px 10px;
3257
- min-width: 96px;
3258
- background: color-mix(in srgb, var(--color-surface) 25%, var(--color-comment) 75%);
3259
- color: var(--color-text-inverse);
3260
- border: 1px solid oklch(from var(--color-comment) l c h / 0.22);
3261
- font-size: 11px;
3262
- font-weight: 700;
3263
- letter-spacing: 0.02em;
3264
- text-align: center;
3265
- box-shadow: var(--shadow-md);
3266
- pointer-events: auto;
3267
- transition: transform 140ms ease, box-shadow 140ms ease;
3268
- }
3269
-
3270
- .comment-preview-highlight {
3271
- position: absolute;
3272
- border-radius: 6px;
3273
- background: var(--color-comment-soft);
3274
- border: 1px solid oklch(from var(--color-comment) l c h / 0.16);
3275
- opacity: 0.56;
3276
- transition: opacity 140ms ease, background-color 140ms ease, border-color 140ms ease;
3277
- }
3278
-
3279
- .comment-preview-highlight.is-passive {
3280
- opacity: 0.32;
3281
- }
3282
-
3283
- .comment-preview-highlight.is-hovered {
3284
- opacity: 0.72;
3285
- background: color-mix(in srgb, var(--color-comment-soft) 74%, var(--color-comment) 26%);
3286
- border-color: oklch(from var(--color-comment) l c h / 0.24);
3287
- }
3288
-
3289
- .comment-preview-highlight.is-active {
3290
- opacity: 0.9;
3291
- background: color-mix(in srgb, var(--color-comment-soft) 62%, var(--color-comment) 38%);
3292
- border-color: oklch(from var(--color-comment) l c h / 0.3);
3293
- }
3294
-
3295
- .comment-card-root {
3296
- position: fixed;
3297
- z-index: 50;
3298
- }
3299
-
3300
- .comment-card {
3301
- width: min(100%, 520px);
3302
- border-radius: 18px;
3303
- border: 1px solid color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);
3304
- background: color-mix(in srgb, var(--color-surface) 94%, var(--color-comment) 6%);
3305
- box-shadow: 0 20px 56px oklch(0 0 0 / 0.24);
3306
- padding: var(--space-4);
3307
- display: flex;
3308
- flex-direction: column;
3309
- gap: var(--space-3);
3310
- max-height: min(78vh, 720px);
3311
- overflow: hidden;
3312
- animation: comment-card-in 140ms cubic-bezier(0.16, 1, 0.3, 1);
3313
- }
3314
-
3315
- .comment-card-header,
3316
- .comment-thread-card-header,
3317
- .comment-message-card-meta,
3318
- .comment-card-actions {
3319
- display: flex;
3320
- align-items: center;
3321
- gap: var(--space-2);
3322
- }
3323
-
3324
- .comment-card-header,
3325
- .comment-thread-card-header,
3326
- .comment-card-actions {
3327
- justify-content: space-between;
3328
- }
3329
-
3330
- .comment-card-header {
3331
- flex-shrink: 0;
3332
- }
3333
-
3334
- .comment-card-scroll {
3335
- display: flex;
3336
- flex-direction: column;
3337
- gap: var(--space-3);
3338
- min-height: 0;
3339
- overflow: auto;
3340
- padding-right: 2px;
3341
- }
3342
-
3343
- .comment-card-title {
3344
- font-size: 15px;
3345
- font-weight: 700;
3346
- letter-spacing: -0.01em;
3347
- }
3348
-
3349
- .comment-card-meta {
3350
- margin-top: 2px;
3351
- color: var(--color-comment);
3352
- font-size: 11px;
3353
- font-weight: 700;
3354
- letter-spacing: 0.05em;
3355
- text-transform: uppercase;
3356
- }
3357
-
3358
- .comment-card-close,
3359
- .comment-thread-card-action {
3360
- padding: 5px 8px;
3361
- border-radius: var(--radius-full);
3362
- font-size: 11px;
3363
- font-weight: 700;
3364
- color: var(--color-text-muted);
3365
- background: color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);
3366
- border: 1px solid transparent;
3367
- transition: color var(--transition-interactive), background var(--transition-interactive), border-color var(--transition-interactive);
3368
- }
3369
-
3370
- .comment-card-close:hover,
3371
- .comment-thread-card-action:hover {
3372
- color: var(--color-text);
3373
- border-color: oklch(from var(--color-comment) l c h / 0.16);
3374
- }
3375
-
3376
- .comment-thread-card-action.is-active {
3377
- color: var(--color-text);
3378
- background: color-mix(in srgb, var(--color-surface-offset) 72%, var(--color-comment) 28%);
3379
- border-color: oklch(from var(--color-comment) l c h / 0.2);
3380
- }
3381
-
3382
- .comment-thread-card-action.is-danger {
3383
- color: var(--color-error);
3384
- }
3385
-
3386
- .comment-card-quote,
3387
- .comment-thread-card-excerpt {
3388
- font-size: 12px;
3389
- color: var(--color-text-muted);
3390
- background: color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);
3391
- border-radius: var(--radius-md);
3392
- padding: var(--space-2) var(--space-3);
3393
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3394
- }
3395
-
3396
- .comment-card-quote {
3397
- white-space: pre-wrap;
3398
- overflow: auto;
3399
- overflow-wrap: anywhere;
3400
- word-break: break-word;
3401
- font-family: var(--font-mono);
3402
- font-size: 11.5px;
3403
- line-height: 1.65;
3404
- max-height: 11rem;
3405
- padding-bottom: calc(var(--space-3) + 2px);
3406
- scrollbar-width: thin;
3407
- }
3408
-
3409
- .comment-card-form,
3410
- .comment-reply-form {
3411
- display: flex;
3412
- flex-direction: column;
3413
- gap: var(--space-3);
3414
- }
3415
-
3416
- .comment-card-input {
3417
- resize: vertical;
3418
- min-height: 88px;
3419
- }
3420
-
3421
- .comment-thread-card {
3422
- display: flex;
3423
- flex-direction: column;
3424
- gap: var(--space-3);
3425
- padding-top: var(--space-3);
3426
- border-top: 1px solid var(--color-divider);
3427
- }
3428
-
3429
- .comment-thread-card-header {
3430
- align-items: flex-start;
3431
- flex-wrap: wrap;
3432
- }
3433
-
3434
- .comment-thread-card-heading {
3435
- display: flex;
3436
- flex: 1 1 160px;
3437
- flex-wrap: wrap;
3438
- gap: var(--space-1) var(--space-2);
3439
- min-width: 0;
3440
- }
3441
-
3442
- .comment-thread-card-author,
3443
- .comment-message-card-author {
3444
- font-size: 12px;
3445
- font-weight: 700;
3446
- }
3447
-
3448
- .comment-thread-card-time,
3449
- .comment-message-card-time {
3450
- font-size: 11px;
3451
- color: var(--color-text-faint);
3452
- }
3453
-
3454
- .comment-thread-card-actions {
3455
- display: inline-flex;
3456
- flex-wrap: wrap;
3457
- gap: var(--space-1);
3458
- margin-left: auto;
3459
- justify-content: flex-end;
3460
- }
3461
-
3462
- .comment-message-card {
3463
- border-radius: var(--radius-md);
3464
- background: color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);
3465
- border: 1px solid color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);
3466
- padding: var(--space-2) var(--space-3);
3467
- }
3468
-
3469
- .comment-message-card-body {
3470
- margin-top: var(--space-1);
3471
- font-size: 12px;
3472
- line-height: 1.65;
3473
- }
3474
-
3475
- .comment-reaction-bar {
3476
- display: flex;
3477
- align-items: flex-start;
3478
- justify-content: space-between;
3479
- gap: var(--space-2);
3480
- flex-wrap: wrap;
3481
- margin-top: var(--space-2);
3482
- }
3483
-
3484
- .comment-reaction-chips {
3485
- display: flex;
3486
- flex-wrap: wrap;
3487
- gap: var(--space-2);
3488
- }
3489
-
3490
- .comment-reaction-actions {
3491
- display: flex;
3492
- align-items: center;
3493
- flex-wrap: wrap;
3494
- gap: var(--space-2);
3495
- }
3496
-
3497
- .comment-reaction-chip,
3498
- .comment-reaction-more-trigger {
3499
- display: inline-flex;
3500
- align-items: center;
3501
- justify-content: center;
3502
- gap: 6px;
3503
- min-height: 30px;
3504
- padding: 4px 10px;
3505
- border-radius: var(--radius-full);
3506
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3507
- background: color-mix(in srgb, var(--color-surface) 90%, var(--color-comment) 10%);
3508
- color: var(--color-text-muted);
3509
- font-size: 11px;
3510
- font-weight: 600;
3511
- transition: background var(--transition-interactive), border-color var(--transition-interactive), color var(--transition-interactive), transform 140ms ease;
3512
- }
3513
-
3514
- .comment-reaction-chip:hover,
3515
- .comment-reaction-more-trigger:hover {
3516
- color: var(--color-text);
3517
- border-color: oklch(from var(--color-comment) l c h / 0.22);
3518
- background: color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-comment) 24%);
3519
- }
3520
-
3521
- .comment-reaction-chip.is-active {
3522
- color: var(--color-comment);
3523
- border-color: oklch(from var(--color-comment) l c h / 0.28);
3524
- background: color-mix(in srgb, var(--color-surface-offset) 64%, var(--color-comment) 36%);
3525
- }
3526
-
3527
- .comment-reaction-chip-emoji,
3528
- .comment-reaction-chip-count {
3529
- line-height: 1;
3530
- }
3531
-
3532
- .comment-reaction-quick-add,
3533
- .comment-reaction-picker-btn {
3534
- display: inline-flex;
3535
- align-items: center;
3536
- justify-content: center;
3537
- min-width: 34px;
3538
- min-height: 34px;
3539
- padding: 0;
3540
- border-radius: var(--radius-md);
3541
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3542
- background: color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);
3543
- font-size: 18px;
3544
- transition: background var(--transition-interactive), border-color var(--transition-interactive), transform 140ms ease;
3545
- }
3546
-
3547
- .comment-reaction-quick-add:hover,
3548
- .comment-reaction-picker-btn:hover {
3549
- border-color: oklch(from var(--color-comment) l c h / 0.24);
3550
- background: color-mix(in srgb, var(--color-surface-offset) 78%, var(--color-comment) 22%);
3551
- transform: translateY(-1px);
3552
- }
3553
-
3554
- .comment-reaction-picker-wrap {
3555
- position: relative;
3556
- display: inline-flex;
3557
- }
3558
-
3559
- .comment-reaction-picker {
3560
- position: absolute;
3561
- top: calc(100% + 8px);
3562
- right: 0;
3563
- z-index: 2;
3564
- min-width: 220px;
3565
- display: flex;
3566
- flex-direction: column;
3567
- gap: var(--space-2);
3568
- padding: var(--space-3);
3569
- border-radius: var(--radius-lg);
3570
- border: 1px solid color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);
3571
- background: color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3572
- box-shadow: var(--shadow-lg);
3573
- overflow: auto;
3574
- scrollbar-width: thin;
3575
- }
3576
-
3577
- .comment-reaction-picker.is-upward {
3578
- top: auto;
3579
- bottom: calc(100% + 8px);
3580
- }
3581
-
3582
- .comment-reaction-picker-grid {
3583
- display: grid;
3584
- grid-template-columns: repeat(5, minmax(0, 1fr));
3585
- gap: var(--space-2);
3586
- }
3587
-
3588
- .comment-markdown {
3589
- color: var(--color-text);
3590
- font-size: 12px;
3591
- line-height: 1.65;
3592
- }
3593
-
3594
- .comment-markdown > :first-child {
3595
- margin-top: 0;
3596
- }
3597
-
3598
- .comment-markdown > :last-child {
3599
- margin-bottom: 0;
3600
- }
3601
-
3602
- .comment-markdown p,
3603
- .comment-markdown ul,
3604
- .comment-markdown ol,
3605
- .comment-markdown blockquote,
3606
- .comment-markdown pre,
3607
- .comment-markdown .comment-markdown-table,
3608
- .comment-markdown table {
3609
- max-width: none;
3610
- }
3611
-
3612
- .comment-markdown p,
3613
- .comment-markdown ul,
3614
- .comment-markdown ol,
3615
- .comment-markdown blockquote,
3616
- .comment-markdown pre,
3617
- .comment-markdown .comment-markdown-table {
3618
- margin: var(--space-2) 0;
3619
- }
3620
-
3621
- .comment-markdown li + li {
3622
- margin-top: 4px;
3623
- }
3624
-
3625
- .comment-markdown ul,
3626
- .comment-markdown ol {
3627
- padding-left: var(--space-5);
3628
- }
3629
-
3630
- .comment-markdown a {
3631
- color: var(--color-primary);
3632
- overflow-wrap: anywhere;
3633
- text-decoration: underline;
3634
- }
3635
-
3636
- .comment-markdown blockquote {
3637
- padding: var(--space-2) var(--space-3);
3638
- border-left: 3px solid oklch(from var(--color-comment) l c h / 0.45);
3639
- border-radius: 0 var(--radius-md) var(--radius-md) 0;
3640
- background: color-mix(in srgb, var(--color-surface-offset) 84%, var(--color-comment) 16%);
3641
- color: var(--color-text-muted);
3642
- }
3643
-
3644
- .comment-markdown code {
3645
- font-family: var(--font-mono);
3646
- font-size: 0.9em;
3647
- background: color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);
3648
- padding: 2px 6px;
3649
- border-radius: var(--radius-sm);
3650
- color: var(--color-primary);
3651
- }
3652
-
3653
- .comment-markdown pre {
3654
- border-radius: var(--radius-lg);
3655
- overflow: auto;
3656
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3657
- background: color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3658
- max-width: 100%;
3659
- }
3660
-
3661
- .comment-markdown pre code {
3662
- display: block;
3663
- padding: var(--space-3);
3664
- background: none;
3665
- color: var(--color-text);
3666
- font-size: 12px;
3667
- line-height: 1.6;
3668
- white-space: pre;
3669
- width: max-content;
3670
- min-width: 100%;
3671
- }
3672
-
3673
- .comment-markdown .comment-markdown-table {
3674
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3675
- border-radius: var(--radius-md);
3676
- overflow: auto;
3677
- }
3678
-
3679
- .comment-markdown table {
3680
- width: 100%;
3681
- border-collapse: collapse;
3682
- }
3683
-
3684
- .comment-markdown th,
3685
- .comment-markdown td {
3686
- padding: var(--space-2) var(--space-3);
3687
- text-align: left;
3688
- border-bottom: 1px solid var(--color-divider);
3689
- font-size: 12px;
3690
- }
3691
-
3692
- .comment-markdown th {
3693
- background: color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);
3694
- }
3695
-
3696
- .comment-markdown-preview > :not(pre):not(blockquote):not(.comment-markdown-table) {
3697
- display: -webkit-box;
3698
- -webkit-box-orient: vertical;
3699
- -webkit-line-clamp: 4;
3700
- overflow: hidden;
3701
- }
3702
-
3703
- .comment-markdown-preview pre code {
3704
- max-height: 6.6rem;
3705
- min-width: 0;
3706
- width: 100%;
3707
- overflow: hidden;
3708
- }
3709
-
3710
- .comment-markdown-preview .comment-markdown-table {
3711
- display: none;
3712
- }
3713
-
3714
- @keyframes comment-card-in {
3715
- from {
3716
- opacity: 0;
3717
- transform: translateY(6px) scale(0.98);
3718
- }
3719
- to {
3720
- opacity: 1;
3721
- transform: translateY(0) scale(1);
3722
- }
3723
- }
3724
-
3725
- /* ===== BACKLINKS PANEL ===== */
3726
-
3727
- .backlinks-panel.hidden,
3728
- .backlinks-panel-layer.hidden {
3729
- display: none;
3730
- }
3731
- .backlinks-panel {
3732
- min-width: 0;
3733
- }
3734
- .backlinks-panel-layer {
3735
- position: absolute;
3736
- left: max(
3737
- var(--space-4),
3738
- calc((100% - min(var(--preview-content-max-width), 100%)) / 2)
3739
- );
3740
- bottom: calc(var(--space-5) + env(safe-area-inset-bottom, 0px));
3741
- width: min(320px, calc(min(var(--preview-content-max-width), 100%) - var(--space-8)));
3742
- z-index: 14;
3743
- pointer-events: none;
3744
- }
3745
- .backlinks-panel-dock {
3746
- display: flex;
3747
- flex-direction: column-reverse;
3748
- border: 1px solid var(--color-divider);
3749
- border-radius: 18px;
3750
- background: color-mix(in srgb, var(--color-surface) 84%, var(--color-surface-offset) 16%);
3751
- box-shadow: 0 14px 34px oklch(0 0 0 / 0.18);
3752
- backdrop-filter: blur(16px);
3753
- overflow: hidden;
3754
- pointer-events: auto;
3755
- transition: box-shadow 160ms ease, transform 160ms ease, background-color 160ms ease, border-color 160ms ease;
3756
- }
3757
- .backlinks-panel-dock:hover {
3758
- transform: translateY(-1px);
3759
- box-shadow: 0 18px 40px oklch(0 0 0 / 0.2);
3760
- }
3761
- .backlinks-panel-inline {
3762
- border-top: 1px solid var(--color-divider);
3763
- margin-top: var(--space-6);
3764
- padding: 0 var(--space-4);
3765
- }
3766
- .backlinks-header {
3767
- display: flex;
3768
- align-items: center;
3769
- gap: var(--space-2);
3770
- padding: var(--space-3) 0;
3771
- cursor: pointer;
3772
- user-select: none;
3773
- font-size: var(--text-sm);
3774
- font-weight: 600;
3775
- color: var(--color-text-muted);
3776
- transition: color var(--transition-interactive);
3777
- }
3778
- .backlinks-header:hover {
3779
- color: var(--color-text);
3780
- }
3781
- .backlinks-panel-dock .backlinks-header {
3782
- padding: 11px 14px;
3783
- background: color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-bg) 24%);
3784
- }
3785
- .backlinks-header-empty {
3786
- cursor: default;
3787
- opacity: 0.5;
3788
- }
3789
- .backlinks-header-empty:hover {
3790
- color: var(--color-text-muted);
3791
- }
3792
- .backlinks-chevron {
3793
- flex-shrink: 0;
3794
- transition: transform var(--transition-interactive);
3795
- }
3796
- .backlinks-panel.expanded .backlinks-chevron {
3797
- transform: rotate(90deg);
3798
- }
3799
- .backlinks-toggle {
3800
- flex: 1;
3801
- min-width: 0;
3802
- overflow: hidden;
3803
- text-overflow: ellipsis;
3804
- white-space: nowrap;
3805
- }
3806
- .backlinks-count {
3807
- font-size: var(--text-xs);
3808
- font-weight: 600;
3809
- color: var(--color-primary);
3810
- background: oklch(from var(--color-primary) l c h / 0.14);
3811
- border-radius: var(--radius-full);
3812
- padding: 1px 7px;
3813
- min-width: 22px;
3814
- text-align: center;
3815
- }
3816
- .backlinks-count:empty {
3817
- display: none;
3818
- }
3819
- .backlinks-body {
3820
- overflow: hidden;
3821
- max-height: 0;
3822
- transition: max-height 200ms ease;
3823
- }
3824
- .backlinks-panel-inline.expanded .backlinks-body {
3825
- max-height: 600px;
3826
- overflow-y: auto;
3827
- }
3828
- .backlinks-panel-dock .backlinks-body {
3829
- background: color-mix(in srgb, var(--color-surface) 94%, var(--color-surface-offset) 6%);
3830
- }
3831
- .backlinks-panel-dock.expanded .backlinks-body {
3832
- max-height: min(44vh, 400px);
3833
- overflow-y: auto;
3834
- border-bottom: 1px solid color-mix(in srgb, var(--color-divider) 78%, var(--color-primary) 22%);
3835
- }
3836
- .backlinks-panel-dock.expanded {
3837
- border-color: color-mix(in srgb, var(--color-divider) 72%, var(--color-primary) 28%);
3838
- background: color-mix(in srgb, var(--color-surface) 90%, var(--color-surface-offset) 10%);
3839
- }
3840
- .backlinks-list {
3841
- padding-bottom: var(--space-4);
3842
- display: flex;
3843
- flex-direction: column;
3844
- gap: var(--space-2);
3845
- }
3846
- .backlinks-panel-dock .backlinks-list {
3847
- padding: 10px;
3848
- }
3849
- .backlink-item {
3850
- display: block;
3851
- width: 100%;
3852
- text-align: left;
3853
- padding: var(--space-3);
3854
- border-radius: var(--radius-md);
3855
- border: 1px solid var(--color-divider);
3856
- background: var(--color-surface);
3857
- cursor: pointer;
3858
- transition: border-color var(--transition-interactive), background var(--transition-interactive);
3859
- }
3860
- .backlinks-panel-dock .backlink-item {
3861
- border-radius: 12px;
3862
- background: color-mix(in srgb, var(--color-surface) 88%, var(--color-surface-offset) 12%);
3863
- }
3864
- .backlink-item:hover {
3865
- border-color: var(--color-primary);
3866
- background: oklch(from var(--color-primary) l c h / 0.04);
3867
- }
3868
- .backlink-item:focus-visible {
3869
- outline: none;
3870
- box-shadow: 0 0 0 2px oklch(from var(--color-primary) l c h / 0.45);
3871
- }
3872
- .backlink-file-name {
3873
- display: flex;
3874
- align-items: center;
3875
- gap: var(--space-2);
3876
- font-size: var(--text-sm);
3877
- font-weight: 600;
3878
- color: var(--color-text);
3879
- margin-bottom: var(--space-1);
3880
- }
3881
- .backlink-icon {
3882
- flex-shrink: 0;
3883
- color: var(--color-text-muted);
3884
- }
3885
- .backlink-dir {
3886
- font-size: var(--text-xs);
3887
- font-weight: 400;
3888
- color: var(--color-text-faint);
3889
- margin-left: auto;
3890
- }
3891
- .backlink-context {
3892
- font-size: var(--text-xs);
3893
- color: var(--color-text-muted);
3894
- line-height: 1.6;
3895
- padding-left: 22px;
3896
- overflow: hidden;
3897
- text-overflow: ellipsis;
3898
- white-space: nowrap;
3899
- }
3900
- .backlink-more {
3901
- font-style: italic;
3902
- color: var(--color-text-faint);
3903
- }
3904
-
3905
- @media (min-width: 769px) {
3906
- .backlinks-panel-inline {
3907
- display: none !important;
3908
- }
3909
- }
3910
-
3911
- .outline-panel {
3912
- width: 220px;
3913
- flex-shrink: 0;
3914
- border-left: 1px solid var(--color-divider);
3915
- background: var(--color-surface-offset);
3916
- display: flex;
3917
- flex-direction: column;
3918
- overflow: hidden;
3919
- transition: width 0.2s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.15s ease;
3920
- }
3921
- .outline-panel.hidden {
3922
- width: 0;
3923
- border-left: none;
3924
- opacity: 0;
3925
- pointer-events: none;
3926
- }
3927
-
3928
- .outline-header {
3929
- padding: var(--space-2) var(--space-3);
3930
- border-bottom: 1px solid var(--color-divider);
3931
- flex-shrink: 0;
3932
- }
3933
- .outline-title {
3934
- font-size: 11px;
3935
- font-weight: 600;
3936
- text-transform: uppercase;
3937
- letter-spacing: 0.05em;
3938
- color: var(--color-text-muted);
3939
- }
3940
-
3941
- .outline-nav {
3942
- flex: 1;
3943
- overflow-y: auto;
3944
- overflow-x: hidden;
3945
- padding: var(--space-2) 0;
3946
- }
3947
- .outline-nav::-webkit-scrollbar {
3948
- width: 4px;
3949
- }
3950
- .outline-nav::-webkit-scrollbar-thumb {
3951
- background: var(--color-surface-dynamic);
3952
- border-radius: var(--radius-full);
3953
- }
3954
-
3955
- .outline-item {
3956
- display: block;
3957
- width: 100%;
3958
- text-align: left;
3959
- padding: 3px var(--space-3);
3960
- font-size: 12px;
3961
- line-height: 1.5;
3962
- color: var(--color-text-muted);
3963
- background: none;
3964
- border: none;
3965
- border-left: 2px solid transparent;
3966
- cursor: pointer;
3967
- white-space: nowrap;
3968
- overflow: hidden;
3969
- text-overflow: ellipsis;
3970
- transition: color var(--transition-interactive), border-color var(--transition-interactive), background var(--transition-interactive);
3971
- font-family: var(--font-body);
3972
- }
3973
- .outline-item:hover {
3974
- color: var(--color-text);
3975
- background: var(--color-surface-dynamic);
3976
- }
3977
- .outline-item.active {
3978
- color: var(--color-primary);
3979
- border-left-color: var(--color-primary);
3980
- background: oklch(from var(--color-primary) l c h / 0.06);
3981
- }
3982
-
3983
- .outline-item[data-level="1"] { padding-left: var(--space-3); font-weight: 600; }
3984
- .outline-item[data-level="2"] { padding-left: calc(var(--space-3) + 12px); }
3985
- .outline-item[data-level="3"] { padding-left: calc(var(--space-3) + 24px); font-size: 11px; }
3986
- .outline-item[data-level="4"] { padding-left: calc(var(--space-3) + 36px); font-size: 11px; }
3987
- .outline-item[data-level="5"] { padding-left: calc(var(--space-3) + 48px); font-size: 11px; }
3988
- .outline-item[data-level="6"] { padding-left: calc(var(--space-3) + 60px); font-size: 11px; }
3989
-
3990
- .outline-empty {
3991
- padding: var(--space-4) var(--space-3);
3992
- font-size: 12px;
3993
- color: var(--color-text-faint);
3994
- font-style: italic;
3995
- }
3996
-
3997
-
3998
- /* ===== VIEW MODES ===== */
3999
-
4000
- .editor-layout[data-view="editor"] .preview-pane,
4001
- .editor-layout[data-view="editor"] .resizer {
4002
- display: none;
4003
- }
4004
- .editor-layout[data-view="preview"] .editor-pane,
4005
- .editor-layout[data-view="preview"] .resizer {
4006
- display: none;
4007
- }
4008
- .editor-layout[data-view="preview"] .preview-pane {
4009
- flex: 1;
4010
- }
4011
- .editor-layout[data-view="preview"] .preview-body {
4012
- --preview-content-max-width: 1080px;
4013
- }
4014
- .editor-layout[data-view="preview"] .preview-content {
4015
- max-width: 1080px;
4016
- }
4017
- .editor-layout[data-view="preview"] .preview-content.is-excalidraw-file-preview {
4018
- max-width: none;
4019
- }
4020
- .editor-layout[data-view="preview"] .preview-content.is-image-file-preview {
4021
- max-width: none;
4022
- }
4023
- .editor-layout[data-view="preview"] .preview-content.is-mermaid-file-preview {
4024
- max-width: none;
4025
- }
4026
- .editor-layout[data-view="preview"] .preview-content.is-plantuml-file-preview {
4027
- max-width: none;
4028
- }
4029
- .editor-layout[data-view="preview"] .preview-content p {
4030
- max-width: 84ch;
4031
- }
4032
-
4033
- .editor-layout[data-view="preview"] .preview-content p:has(> .excalidraw-embed-placeholder:only-child) {
4034
- max-width: none;
4035
- }
4036
-
4037
- .editor-layout[data-view="preview"] .preview-content p:has(> .video-embed-placeholder:only-child) {
4038
- max-width: none;
4039
- }
4040
-
4041
- .editor-layout[data-view="preview"] .preview-content p:has(> .mermaid-shell:only-child) {
4042
- max-width: none;
4043
- }
4044
-
4045
- .editor-layout[data-view="preview"] .preview-content p:has(> .plantuml-shell:only-child) {
4046
- max-width: none;
4047
- }
4048
- @media (min-width: 769px) {
4049
- .preview-body > .comments-drawer,
4050
- .preview-body > .outline-panel {
4051
- position: absolute;
4052
- top: var(--preview-floating-sidebar-gap);
4053
- right: var(--preview-floating-sidebar-gap);
4054
- bottom: var(--preview-floating-sidebar-gap);
4055
- z-index: 20;
4056
- overflow: hidden;
4057
- border: 1px solid var(--color-divider);
4058
- border-radius: calc(var(--radius-lg) + 2px);
4059
- box-shadow: var(--shadow-lg);
4060
- backdrop-filter: blur(14px);
4061
- }
4062
-
4063
- .preview-body > .comments-drawer {
4064
- width: var(--preview-floating-comments-width);
4065
- min-width: 240px;
4066
- border-left: 1px solid var(--color-divider);
4067
- }
4068
-
4069
- .preview-body > .outline-panel {
4070
- width: var(--preview-floating-outline-width);
4071
- border-left: 1px solid var(--color-divider);
4072
- }
4073
-
4074
- .preview-body > .comments-drawer.hidden,
4075
- .preview-body > .outline-panel.hidden {
4076
- display: flex !important;
4077
- opacity: 0;
4078
- pointer-events: none;
4079
- transform: translateX(12px);
4080
- visibility: hidden;
4081
- }
4082
-
4083
- .preview-body > .comments-drawer:not(.hidden),
4084
- .preview-body > .outline-panel:not(.hidden) {
4085
- opacity: 1;
4086
- transform: translateX(0);
4087
- visibility: visible;
4088
- }
4089
-
4090
- .preview-body:has(> .outline-panel:not(.hidden)) > .comments-drawer:not(.hidden) {
4091
- right: calc(
4092
- var(--preview-floating-sidebar-gap) * 2
4093
- + var(--preview-floating-outline-width)
4094
- );
4095
- }
4096
- }
4097
- .editor-layout[data-view="editor"] .editor-pane {
4098
- flex: 1;
4099
- }
4100
-
4101
-
4102
- /* ===== TOAST ===== */
4103
-
4104
- .toast-container {
4105
- position: fixed;
4106
- bottom: var(--space-4);
4107
- right: var(--space-4);
4108
- display: flex;
4109
- flex-direction: column;
4110
- gap: var(--space-2);
4111
- z-index: 100;
4112
- pointer-events: none;
4113
- }
4114
- .toast {
4115
- pointer-events: auto;
4116
- padding: var(--space-2) var(--space-4);
4117
- background: var(--color-surface-2);
4118
- border: 1px solid var(--color-border);
4119
- border-radius: var(--radius-md);
4120
- font-size: var(--text-xs);
4121
- color: var(--color-text);
4122
- box-shadow: var(--shadow-md);
4123
- max-width: 320px;
4124
-
4125
- opacity: 1;
4126
- transform: translateX(0) scale(1);
4127
- transition: opacity 300ms cubic-bezier(0.16, 1, 0.3, 1), transform 300ms cubic-bezier(0.16, 1, 0.3, 1), display 300ms cubic-bezier(0.16, 1, 0.3, 1) allow-discrete;
4128
- }
4129
-
4130
- @starting-style {
4131
- .toast {
4132
- opacity: 0;
4133
- transform: translateX(8px) scale(0.96);
4134
- }
4135
- }
4136
-
4137
- .toast.leaving {
4138
- opacity: 0;
4139
- transform: translateX(8px) scale(0.96);
4140
- pointer-events: none;
4141
- }
4142
-
4143
-
4144
- /* ===== MOBILE / RESPONSIVE ===== */
4145
-
4146
- @media (max-width: 768px) {
4147
- /* Keep mobile text inputs at 16px to prevent iOS Safari focus zoom. */
4148
- .input,
4149
- .sidebar-search-input,
4150
- .qs-input,
4151
- .chat-input,
4152
- .editor-container .cm-editor {
4153
- font-size: 16px;
4154
- }
4155
-
4156
- .sidebar {
4157
- position: fixed;
4158
- top: 0;
4159
- left: 0;
4160
- bottom: 0;
4161
- z-index: 100;
4162
- box-shadow: var(--shadow-lg);
4163
- }
4164
-
4165
- .sidebar.collapsed {
4166
- display: none;
4167
- }
4168
-
4169
- .toolbar-btn-label { display: none; }
4170
- .toolbar-center { display: none; }
4171
- .mobile-view-toggle { display: flex !important; }
4172
- .toolbar-name-btn { max-width: none; }
4173
- .sidebar-close-btn { display: inline-flex; }
4174
- .sidebar-tabs { padding: 0 var(--space-1); }
4175
- .sidebar-tab { padding: var(--space-2); }
4176
-
4177
- .editor-layout {
4178
- flex-direction: column;
4179
- }
4180
- .resizer {
4181
- display: none !important;
4182
- }
4183
-
4184
- /* On mobile, hide the non-active pane */
4185
- .editor-layout[data-view="split"] .preview-pane {
4186
- display: none;
4187
- }
4188
- .editor-layout[data-view="split"] .editor-pane {
4189
- flex: 1;
4190
- }
4191
-
4192
- .preview-content {
4193
- padding: var(--space-4);
4194
- }
4195
-
4196
- .backlinks-panel-layer {
4197
- display: none !important;
4198
- }
4199
-
4200
- .diff-toolbar {
4201
- flex-wrap: wrap;
4202
- padding: var(--space-2) var(--space-3);
4203
- }
4204
-
4205
- .diff-toolbar-left,
4206
- .diff-toolbar-right {
4207
- width: 100%;
4208
- justify-content: space-between;
4209
- }
4210
-
4211
- .diff-toolbar-left {
4212
- flex-wrap: wrap;
4213
- }
4214
-
4215
- .diff-toolbar-actions {
4216
- width: 100%;
4217
- justify-content: space-between;
4218
- }
4219
-
4220
- .diff-toolbar-actions-group-git {
4221
- flex: 1;
4222
- }
4223
-
4224
- .diff-toolbar-actions-group-git .diff-action-btn {
4225
- flex: 1;
4226
- min-width: 0;
4227
- }
4228
-
4229
- .diff-toolbar-actions-divider {
4230
- display: none;
4231
- }
4232
-
4233
- .diff-mode-btn {
4234
- min-width: 74px;
4235
- }
4236
-
4237
- .diff-split-row {
4238
- grid-template-columns: 1fr;
4239
- }
4240
-
4241
- .diff-split-line:first-child {
4242
- border-right: none;
4243
- border-bottom: 1px solid var(--color-divider);
4244
- }
4245
-
4246
- .markdown-toolbar {
4247
- overflow-x: auto;
4248
- flex-wrap: nowrap;
4249
- scrollbar-width: thin;
4250
- }
4251
-
4252
- .outline-panel {
4253
- position: absolute;
4254
- top: 0;
4255
- right: 0;
4256
- bottom: 0;
4257
- left: 0;
4258
- width: auto;
4259
- border-left: none;
4260
- border-top: 1px solid var(--color-divider);
4261
- background: oklch(from var(--color-surface) l c h / 0.98);
4262
- backdrop-filter: blur(10px);
4263
- box-shadow: var(--shadow-lg);
4264
- z-index: 6;
4265
- }
4266
- .outline-panel.hidden {
4267
- display: none !important;
4268
- }
4269
- #outlineToggle {
4270
- display: inline-flex !important;
4271
- }
4272
-
4273
- .toolbar {
4274
- padding: 0 var(--space-2);
4275
- }
4276
- .toolbar-room-name {
4277
- font-size: var(--text-xs);
4278
- max-width: 120px;
4279
- }
4280
-
4281
- .chat-panel {
4282
- position: fixed;
4283
- top: calc(var(--toolbar-h) + var(--space-2));
4284
- right: var(--space-2);
4285
- left: var(--space-2);
4286
- width: auto;
4287
- max-height: calc(100vh - var(--toolbar-h) - var(--space-6));
4288
- }
4289
-
4290
- .chat-form {
4291
- align-items: stretch;
4292
- }
4293
-
4294
- .chat-send-btn {
4295
- padding-inline: var(--space-3);
4296
- }
4297
-
4298
- .comment-card {
4299
- width: min(100vw - 32px, 520px);
4300
- max-height: min(72vh, 680px);
4301
- }
4302
-
4303
- .comment-thread-card-actions {
4304
- width: 100%;
4305
- margin-left: 0;
4306
- justify-content: flex-start;
4307
- }
4308
-
4309
- .comment-reaction-picker {
4310
- left: 0;
4311
- right: auto;
4312
- min-width: min(240px, calc(100vw - 64px));
4313
- }
4314
- }
4315
-
4316
- @media (min-width: 769px) {
4317
- .mobile-view-toggle { display: none !important; }
4318
- }
4319
-
4320
-
4321
- /* ===== LIGHT MODE OVERRIDES ===== */
4322
-
4323
- [data-theme="light"] .preview-content pre,
4324
- [data-theme="light"] .preview-content pre code,
4325
- [data-theme="light"] .hljs {
4326
- background: var(--color-surface) !important;
4327
- }
4328
-
4329
-
4330
- /* ===== SCROLLBAR STYLING ===== */
4331
-
4332
- .preview-container,
4333
- .cm-scroller,
4334
- .file-tree,
4335
- .git-panel,
4336
- .diff-scroll,
4337
- .comments-drawer-list,
4338
- .comments-drawer-item-quote,
4339
- .comment-card-quote,
4340
- .comment-card-scroll,
4341
- .markdown-toolbar,
4342
- .comment-markdown pre,
4343
- .comment-markdown .comment-markdown-table,
4344
- .preview-content pre,
4345
- .preview-content .table-wrapper,
4346
- .preview-content .mermaid-frame,
4347
- .preview-content .plantuml-frame,
4348
- .plantuml-maximized-root .plantuml-frame {
4349
- scrollbar-width: thin;
4350
- scrollbar-color: var(--color-surface-dynamic) transparent;
4351
- }
4352
-
4353
- .preview-container::-webkit-scrollbar,
4354
- .cm-scroller::-webkit-scrollbar,
4355
- .file-tree::-webkit-scrollbar,
4356
- .git-panel::-webkit-scrollbar,
4357
- .diff-scroll::-webkit-scrollbar,
4358
- .comments-drawer-list::-webkit-scrollbar,
4359
- .comments-drawer-item-quote::-webkit-scrollbar,
4360
- .comment-card-quote::-webkit-scrollbar,
4361
- .comment-card-scroll::-webkit-scrollbar,
4362
- .markdown-toolbar::-webkit-scrollbar,
4363
- .comment-markdown pre::-webkit-scrollbar,
4364
- .comment-markdown .comment-markdown-table::-webkit-scrollbar,
4365
- .preview-content pre::-webkit-scrollbar,
4366
- .preview-content .table-wrapper::-webkit-scrollbar,
4367
- .preview-content .mermaid-frame::-webkit-scrollbar,
4368
- .preview-content .plantuml-frame::-webkit-scrollbar,
4369
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar {
4370
- width: 8px;
4371
- height: 8px;
4372
- }
4373
- .preview-container::-webkit-scrollbar-track,
4374
- .cm-scroller::-webkit-scrollbar-track,
4375
- .file-tree::-webkit-scrollbar-track,
4376
- .git-panel::-webkit-scrollbar-track,
4377
- .diff-scroll::-webkit-scrollbar-track,
4378
- .comments-drawer-list::-webkit-scrollbar-track,
4379
- .comments-drawer-item-quote::-webkit-scrollbar-track,
4380
- .comment-card-quote::-webkit-scrollbar-track,
4381
- .comment-card-scroll::-webkit-scrollbar-track,
4382
- .markdown-toolbar::-webkit-scrollbar-track,
4383
- .comment-markdown pre::-webkit-scrollbar-track,
4384
- .comment-markdown .comment-markdown-table::-webkit-scrollbar-track,
4385
- .preview-content pre::-webkit-scrollbar-track,
4386
- .preview-content .table-wrapper::-webkit-scrollbar-track,
4387
- .preview-content .mermaid-frame::-webkit-scrollbar-track,
4388
- .preview-content .plantuml-frame::-webkit-scrollbar-track,
4389
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar-track {
4390
- background: transparent;
4391
- }
4392
- .preview-container::-webkit-scrollbar-thumb,
4393
- .cm-scroller::-webkit-scrollbar-thumb,
4394
- .file-tree::-webkit-scrollbar-thumb,
4395
- .git-panel::-webkit-scrollbar-thumb,
4396
- .diff-scroll::-webkit-scrollbar-thumb,
4397
- .comments-drawer-list::-webkit-scrollbar-thumb,
4398
- .comments-drawer-item-quote::-webkit-scrollbar-thumb,
4399
- .comment-card-quote::-webkit-scrollbar-thumb,
4400
- .comment-card-scroll::-webkit-scrollbar-thumb,
4401
- .markdown-toolbar::-webkit-scrollbar-thumb,
4402
- .comment-markdown pre::-webkit-scrollbar-thumb,
4403
- .comment-markdown .comment-markdown-table::-webkit-scrollbar-thumb,
4404
- .preview-content pre::-webkit-scrollbar-thumb,
4405
- .preview-content .table-wrapper::-webkit-scrollbar-thumb,
4406
- .preview-content .mermaid-frame::-webkit-scrollbar-thumb,
4407
- .preview-content .plantuml-frame::-webkit-scrollbar-thumb,
4408
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar-thumb {
4409
- background: var(--color-surface-dynamic);
4410
- border-radius: var(--radius-full);
4411
- }
4412
- .preview-container::-webkit-scrollbar-thumb:hover,
4413
- .cm-scroller::-webkit-scrollbar-thumb:hover,
4414
- .file-tree::-webkit-scrollbar-thumb:hover,
4415
- .git-panel::-webkit-scrollbar-thumb:hover,
4416
- .diff-scroll::-webkit-scrollbar-thumb:hover,
4417
- .comments-drawer-list::-webkit-scrollbar-thumb:hover,
4418
- .comments-drawer-item-quote::-webkit-scrollbar-thumb:hover,
4419
- .comment-card-quote::-webkit-scrollbar-thumb:hover,
4420
- .comment-card-scroll::-webkit-scrollbar-thumb:hover,
4421
- .markdown-toolbar::-webkit-scrollbar-thumb:hover,
4422
- .comment-markdown pre::-webkit-scrollbar-thumb:hover,
4423
- .comment-markdown .comment-markdown-table::-webkit-scrollbar-thumb:hover,
4424
- .preview-content pre::-webkit-scrollbar-thumb:hover,
4425
- .preview-content .table-wrapper::-webkit-scrollbar-thumb:hover,
4426
- .preview-content .mermaid-frame::-webkit-scrollbar-thumb:hover,
4427
- .preview-content .plantuml-frame::-webkit-scrollbar-thumb:hover,
4428
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar-thumb:hover {
4429
- background: var(--color-text-faint);
4430
- }
4431
-
4432
- /* ===== WIKI-LINK AUTOCOMPLETE ===== */
4433
-
4434
- .cm-tooltip-autocomplete {
4435
- background: var(--color-surface) !important;
4436
- border: 1px solid var(--color-divider) !important;
4437
- border-radius: var(--radius-md) !important;
4438
- box-shadow: var(--shadow-md) !important;
4439
- overflow: hidden;
4440
- font-family: var(--font-body);
4441
- font-size: var(--text-sm);
4442
- }
4443
-
4444
- .cm-tooltip-autocomplete > ul {
4445
- max-height: 240px !important;
4446
- padding: var(--space-1) 0;
4447
- }
4448
-
4449
- .cm-tooltip-autocomplete > ul > li {
4450
- padding: var(--space-2) var(--space-3) !important;
4451
- line-height: 1.4;
4452
- display: flex;
4453
- align-items: center;
4454
- gap: var(--space-2);
4455
- }
4456
-
4457
- .cm-tooltip-autocomplete > ul > li[aria-selected] {
4458
- background: var(--color-primary) !important;
4459
- color: var(--color-text-inverse) !important;
4460
- }
4461
-
4462
- .cm-tooltip-autocomplete .cm-completionLabel {
4463
- flex: 1;
4464
- overflow: hidden;
4465
- text-overflow: ellipsis;
4466
- white-space: nowrap;
4467
- }
4468
-
4469
- .cm-tooltip-autocomplete .cm-completionDetail {
4470
- font-size: var(--text-xs);
4471
- opacity: 0.6;
4472
- margin-left: auto;
4473
- white-space: nowrap;
4474
- }
4475
-
4476
- .cm-tooltip-autocomplete > ul > li[aria-selected] .cm-completionDetail {
4477
- opacity: 0.85;
4478
- }
4479
-
4480
- .cm-completionIcon-text::after {
4481
- content: '📄';
4482
- font-size: 13px;
4483
- }
4484
-
4485
- /* ===== QUICK SWITCHER (Cmd+K) ===== */
4486
-
4487
- .qs-overlay {
4488
- position: fixed;
4489
- inset: 0;
4490
- z-index: 9999;
4491
- display: flex;
4492
- justify-content: center;
4493
- padding-top: min(20vh, 160px);
4494
- background: oklch(0.1 0 0 / 0.5);
4495
- backdrop-filter: blur(4px);
4496
- opacity: 0;
4497
- visibility: hidden;
4498
- transition: opacity 120ms ease, visibility 120ms ease, display 120ms ease allow-discrete;
4499
- }
4500
-
4501
- .qs-overlay.visible {
4502
- opacity: 1;
4503
- visibility: visible;
4504
- }
4505
-
4506
- @starting-style {
4507
- .qs-overlay.visible {
4508
- opacity: 0;
4509
- }
4510
- }
4511
-
4512
- .qs-modal {
4513
- width: min(560px, calc(100vw - 32px));
4514
- max-height: min(440px, 60vh);
4515
- display: flex;
4516
- flex-direction: column;
4517
- background: var(--color-surface);
4518
- border: 1px solid var(--color-border);
4519
- border-radius: var(--radius-lg);
4520
- box-shadow: var(--shadow-lg);
4521
- overflow: hidden;
4522
- transform: translateY(-8px) scale(0.98);
4523
- transition: transform 120ms cubic-bezier(0.16, 1, 0.3, 1);
4524
- }
4525
-
4526
- .qs-overlay.visible .qs-modal {
4527
- transform: translateY(0) scale(1);
4528
- }
4529
-
4530
- @starting-style {
4531
- .qs-overlay.visible .qs-modal {
4532
- transform: translateY(-8px) scale(0.98);
4533
- }
4534
- }
4535
-
4536
- .qs-input-wrap {
4537
- display: flex;
4538
- align-items: center;
4539
- gap: var(--space-2);
4540
- padding: var(--space-3) var(--space-4);
4541
- border-bottom: 1px solid var(--color-divider);
4542
- }
4543
-
4544
- .qs-search-icon {
4545
- flex-shrink: 0;
4546
- color: var(--color-text-muted);
4547
- }
4548
-
4549
- .qs-input {
4550
- flex: 1;
4551
- border: none;
4552
- outline: none;
4553
- background: transparent;
4554
- font-size: var(--text-sm);
4555
- font-family: var(--font-body);
4556
- color: var(--color-text);
4557
- line-height: 1.5;
4558
- }
4559
-
4560
- .qs-input::placeholder {
4561
- color: var(--color-text-faint);
4562
- }
4563
-
4564
- .qs-kbd {
4565
- flex-shrink: 0;
4566
- font-family: var(--font-body);
4567
- font-size: 11px;
4568
- line-height: 1;
4569
- padding: 3px 6px;
4570
- border-radius: var(--radius-sm);
4571
- background: var(--color-surface-offset);
4572
- border: 1px solid var(--color-divider);
4573
- color: var(--color-text-muted);
4574
- text-transform: uppercase;
4575
- letter-spacing: 0.03em;
4576
- }
4577
-
4578
- .qs-results {
4579
- overflow-y: auto;
4580
- overscroll-behavior: contain;
4581
- padding: var(--space-1) 0;
4582
- }
4583
-
4584
- .qs-result-item {
4585
- display: flex;
4586
- align-items: center;
4587
- gap: var(--space-2);
4588
- width: 100%;
4589
- padding: var(--space-2) var(--space-4);
4590
- border: none;
4591
- background: transparent;
4592
- color: var(--color-text);
4593
- font-size: var(--text-sm);
4594
- font-family: var(--font-body);
4595
- text-align: left;
4596
- cursor: pointer;
4597
- transition: background 60ms ease;
4598
- }
4599
-
4600
- .qs-result-item:hover,
4601
- .qs-result-item.selected {
4602
- background: var(--color-surface-offset);
4603
- }
4604
-
4605
- .qs-result-item.selected {
4606
- background: var(--color-primary-highlight);
4607
- }
4608
-
4609
- [data-theme="dark"] .qs-result-item.selected {
4610
- background: oklch(from var(--color-primary) l c h / 0.18);
4611
- }
4612
-
4613
- .qs-result-icon {
4614
- flex-shrink: 0;
4615
- color: var(--color-text-muted);
4616
- }
4617
-
4618
- .qs-result-name {
4619
- flex: 1;
4620
- overflow: hidden;
4621
- text-overflow: ellipsis;
4622
- white-space: nowrap;
4623
- }
4624
-
4625
- .qs-result-name mark {
4626
- background: oklch(from var(--color-primary) l c h / 0.2);
4627
- color: var(--color-primary);
4628
- border-radius: 2px;
4629
- padding: 0 1px;
4630
- }
4631
-
4632
- .qs-result-path {
4633
- flex-shrink: 0;
4634
- font-size: var(--text-xs);
4635
- color: var(--color-text-faint);
4636
- max-width: 200px;
4637
- overflow: hidden;
4638
- text-overflow: ellipsis;
4639
- white-space: nowrap;
4640
- }
4641
-
4642
- .qs-hint {
4643
- padding: var(--space-4) var(--space-4);
4644
- text-align: center;
4645
- font-size: var(--text-xs);
4646
- color: var(--color-text-muted);
4647
- }
4648
-
4649
- .qs-hint.hidden {
4650
- display: none;
4651
- }
4652
-
4653
- /* ── Excalidraw Embeds ───────────────────────────────────────────── */
4654
-
4655
- .diagram-preview-shell {
4656
- margin: var(--space-4) 0;
4657
- border: 1px solid var(--color-border);
4658
- border-radius: 8px;
4659
- overflow: hidden;
4660
- background: var(--color-surface);
4661
- width: 100%;
4662
- max-width: 100%;
4663
- box-sizing: border-box;
4664
- }
4665
-
4666
- .diagram-preview-placeholder-card {
4667
- display: flex;
4668
- align-items: center;
4669
- justify-content: space-between;
4670
- gap: var(--space-3);
4671
- padding: var(--space-4);
4672
- background: var(--color-surface);
4673
- }
4674
-
4675
- .diagram-preview-placeholder-copy {
4676
- display: grid;
4677
- gap: 2px;
4678
- }
4679
-
4680
- .diagram-preview-placeholder-copy strong {
4681
- font-size: var(--text-sm);
4682
- }
4683
-
4684
- .diagram-preview-placeholder-copy span {
4685
- color: var(--color-text-muted);
4686
- font-size: var(--text-xs);
4687
- }
4688
-
4689
- .diagram-preview-placeholder-btn {
4690
- flex-shrink: 0;
4691
- appearance: none;
4692
- border: 1px solid var(--color-border);
4693
- background: var(--color-surface-2);
4694
- color: var(--color-text);
4695
- font-size: var(--text-xs);
4696
- padding: 4px 10px;
4697
- border-radius: 4px;
4698
- cursor: pointer;
4699
- }
4700
-
4701
- .diagram-preview-placeholder-btn:hover {
4702
- background: var(--color-surface-offset);
4703
- }
4704
-
4705
- .diagram-preview-toolbar {
4706
- display: flex;
4707
- align-items: center;
4708
- gap: var(--space-2);
4709
- padding: var(--space-2) var(--space-3);
4710
- background: var(--color-surface-raised);
4711
- border-bottom: 1px solid var(--color-border);
4712
- font-size: var(--text-xs);
4713
- color: var(--color-text-muted);
4714
- user-select: none;
4715
- min-width: 0;
4716
- flex-wrap: wrap;
4717
- }
4718
-
4719
- .diagram-preview-action-btn {
4720
- flex-shrink: 0;
4721
- appearance: none;
4722
- border: 1px solid var(--color-border);
4723
- background: var(--color-surface-2);
4724
- color: var(--color-text);
4725
- font-size: var(--text-xs);
4726
- padding: 2px 8px;
4727
- border-radius: 4px;
4728
- cursor: pointer;
4729
- box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
4730
- transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease;
4731
- }
4732
-
4733
- .diagram-preview-action-btn.is-icon-only {
4734
- display: inline-flex;
4735
- align-items: center;
4736
- justify-content: center;
4737
- width: 30px;
4738
- min-width: 30px;
4739
- height: 30px;
4740
- padding: 0;
4741
- }
4742
-
4743
- .diagram-preview-action-btn.is-icon-only svg {
4744
- width: 14px;
4745
- height: 14px;
4746
- display: block;
4747
- }
4748
-
4749
- .diagram-preview-action-btn:hover:not(:disabled) {
4750
- background: var(--color-surface-offset);
4751
- border-color: oklch(from var(--color-border) calc(l + 0.08) c h);
4752
- }
4753
-
4754
- .diagram-preview-action-btn:disabled {
4755
- opacity: 0.5;
4756
- cursor: not-allowed;
4757
- }
4758
-
4759
- .diagram-preview-zoom-label {
4760
- min-width: 52px;
4761
- text-align: center;
4762
- color: var(--color-text-muted);
4763
- font-size: var(--text-xs);
4764
- font-weight: 500;
4765
- font-variant-numeric: tabular-nums;
4766
- }
4767
-
4768
- .diagram-preview-frame {
4769
- overflow: auto;
4770
- padding: var(--space-3);
4771
- background: transparent;
4772
- overscroll-behavior: contain;
4773
- max-height: min(70vh, 720px);
4774
- min-width: 0;
4775
- max-width: 100%;
4776
- }
4777
-
4778
- .excalidraw-embed,
4779
- .excalidraw-embed-placeholder {
4780
- transition: box-shadow 0.18s ease;
4781
- display: block;
4782
- }
4783
-
4784
- .excalidraw-embed-overlay-root {
4785
- position: absolute;
4786
- inset: 0;
4787
- pointer-events: none;
4788
- z-index: 1;
4789
- }
4790
-
4791
- .excalidraw-maximized-root {
4792
- position: fixed;
4793
- inset: 0;
4794
- pointer-events: none;
4795
- z-index: 171;
4796
- }
4797
-
4798
- body.excalidraw-maximized-open {
4799
- overflow: hidden;
4800
- }
4801
-
4802
- body.excalidraw-maximized-open::before {
4803
- content: '';
4804
- position: fixed;
4805
- inset: 0;
4806
- background: oklch(0.1 0 0 / 0.42);
4807
- backdrop-filter: blur(2px);
4808
- z-index: 170;
4809
- }
4810
-
4811
- body.excalidraw-maximized-open .excalidraw-maximized-root {
4812
- z-index: 171;
4813
- }
4814
-
4815
- body.excalidraw-maximized-open .resizer {
4816
- opacity: 0;
4817
- pointer-events: none;
4818
- }
4819
-
4820
- .excalidraw-embed:hover {
4821
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
4822
- }
4823
-
4824
- [data-theme="dark"] .excalidraw-embed:hover {
4825
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
4826
- }
4827
-
4828
- .excalidraw-embed-placeholder.is-hydrated {
4829
- visibility: hidden;
4830
- }
4831
-
4832
- .excalidraw-embed-header {
4833
- gap: var(--space-2);
4834
- }
4835
-
4836
- .excalidraw-embed-icon {
4837
- display: flex;
4838
- align-items: center;
4839
- color: var(--color-primary);
4840
- flex-shrink: 0;
4841
- }
4842
-
4843
- .excalidraw-embed-label {
4844
- flex: 1;
4845
- min-width: 0;
4846
- overflow: hidden;
4847
- text-overflow: ellipsis;
4848
- white-space: nowrap;
4849
- font-weight: 500;
4850
- }
4851
-
4852
- .excalidraw-embed-iframe {
4853
- display: block;
4854
- width: 100%;
4855
- border: none;
4856
- background: white;
4857
- min-height: 200px;
4858
- }
4859
-
4860
- [data-theme="dark"] .excalidraw-embed-iframe {
4861
- background: #121212;
4862
- }
4863
-
4864
- .excalidraw-embed.is-maximized {
4865
- position: fixed;
4866
- inset: var(--space-4);
4867
- width: auto;
4868
- margin: 0;
4869
- z-index: 172;
4870
- max-width: none;
4871
- box-sizing: border-box;
4872
- border-radius: 10px;
4873
- box-shadow: 0 10px 40px rgba(0, 0, 0, 0.35);
4874
- display: flex;
4875
- flex-direction: column;
4876
- }
4877
-
4878
- .excalidraw-embed.is-maximized .excalidraw-embed-header {
4879
- flex-shrink: 0;
4880
- }
4881
-
4882
- .excalidraw-embed.is-maximized .excalidraw-embed-iframe {
4883
- height: auto !important;
4884
- min-height: 0;
4885
- flex: 1;
4886
- }
4887
-
4888
- .excalidraw-embed.is-maximized .excalidraw-embed-resizer {
4889
- display: none;
4890
- }
4891
-
4892
- [data-theme="dark"] .excalidraw-embed.is-maximized {
4893
- box-shadow: 0 16px 48px rgba(0, 0, 0, 0.6);
4894
- }
4895
-
4896
- @media (max-width: 768px) {
4897
- .excalidraw-embed.is-maximized {
4898
- inset: var(--space-3);
4899
- width: auto;
4900
- }
4901
-
4902
- .excalidraw-embed.is-maximized .excalidraw-embed-iframe {
4903
- height: auto !important;
4904
- }
4905
- }
4906
-
4907
- .excalidraw-embed-resizer {
4908
- height: 6px;
4909
- background: var(--color-border);
4910
- cursor: ns-resize;
4911
- transition: background 0.18s ease;
4912
- position: relative;
4913
- }
4914
-
4915
- .excalidraw-embed-resizer::after {
4916
- content: '';
4917
- position: absolute;
4918
- left: 50%;
4919
- top: 50%;
4920
- transform: translate(-50%, -50%);
4921
- width: 32px;
4922
- height: 3px;
4923
- border-radius: 2px;
4924
- background: var(--color-text-faint);
4925
- opacity: 0;
4926
- transition: opacity 0.18s ease;
4927
- }
4928
-
4929
- .excalidraw-embed-resizer:hover {
4930
- background: var(--color-primary);
4931
- }
4932
-
4933
- .excalidraw-embed-resizer:hover::after {
4934
- opacity: 1;
4935
- }
4936
-
4937
- /* File tree — excalidraw file icon */
4938
-
4939
- .file-tree-file.is-excalidraw .file-tree-icon {
4940
- color: var(--color-primary);
4941
- }
4942
-
4943
- .file-tree-file.is-mermaid .file-tree-icon {
4944
- color: oklch(from var(--color-primary) calc(l * 0.96) calc(c * 0.86) 215);
4945
- }
1
+ @import './foundation/tokens.css';
2
+ @import './foundation/themes.css';
3
+ @import './foundation/utilities.css';
4
+ @import './primitives/controls.css';
5
+ @import './layout/overlays.css';
6
+ @import './layout/sidebar.css';
7
+ @import './layout/editor-page.css';
8
+ @import './layout/shell.css';
9
+ @import './components/navigation.css';
10
+ @import './components/actions.css';
11
+ @import './components/surfaces.css';
12
+ @import './components/states.css';
13
+ @import './components/scrollbars.css';
14
+ @import './features/git.css';
15
+ @import './features/diff.css';
16
+ @import './features/collaboration-ui.css';
17
+ @import './features/preview-content.css';
18
+ @import './features/comments.css';
19
+ @import './features/preview-sidebars.css';
20
+ @import './layout/view-modes.css';
21
+ @import './components/feedback.css';
22
+ @import './layout/responsive.css';
23
+ @import './overrides/vendor.css';
24
+ @import './features/quick-switcher.css';
25
+ @import './features/diagram-preview.css';