collabmd 0.1.20 → 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 (120) hide show
  1. package/README.md +98 -9
  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/chunk-GFDM7YCF.js +1 -0
  8. package/public/assets/js/chunks/editor-session-S5AT7BMV.js +22 -0
  9. package/public/assets/js/chunks/{preview-render-compiler-UZ4SZDQQ.js → preview-render-compiler-6Y7TKXFJ.js} +1 -1
  10. package/public/assets/js/chunks/{quick-switcher-controller-J7I3CUET.js → quick-switcher-controller-A6SKH5HI.js} +1 -1
  11. package/public/assets/js/{excalidraw-editor-ZDYKMZOL.js → excalidraw-editor-5YWMGLKF.js} +145 -62
  12. package/public/assets/js/excalidraw-editor.js +1 -1
  13. package/public/assets/js/main.js +503 -182
  14. package/public/assets/js/preview-render-worker.js +15 -15
  15. package/public/index.html +104 -84
  16. package/src/client/application/app-shell/git-feature.js +304 -27
  17. package/src/client/application/app-shell/ui-feature.js +69 -7
  18. package/src/client/application/app-shell/workspace-feature.js +46 -0
  19. package/src/client/application/app-shell-elements.js +2 -0
  20. package/src/client/application/mermaid-preview-hydrator.js +1 -1
  21. package/src/client/application/plantuml-preview-hydrator.js +1 -1
  22. package/src/client/application/workspace-coordinator.js +147 -18
  23. package/src/client/application/workspace-preview-controller.js +34 -0
  24. package/src/client/application/workspace-route-controller.js +104 -0
  25. package/src/client/bootstrap/collabmd-app-shell.js +107 -0
  26. package/src/client/domain/runtime-paths.js +5 -0
  27. package/src/client/domain/vault-utils.js +2 -2
  28. package/src/client/excalidraw-editor.js +52 -3
  29. package/src/client/infrastructure/auth-client.js +219 -52
  30. package/src/client/infrastructure/browser-navigation-port.js +20 -0
  31. package/src/client/infrastructure/editor-collaboration-client.js +4 -0
  32. package/src/client/infrastructure/editor-session.js +51 -7
  33. package/src/client/infrastructure/editor-view-adapter.js +297 -53
  34. package/src/client/infrastructure/runtime-config.js +66 -0
  35. package/src/client/infrastructure/workspace-sync-client.js +324 -0
  36. package/src/client/presentation/comment-ui-controller.js +274 -31
  37. package/src/client/presentation/comments-panel.js +2 -2
  38. package/src/client/presentation/excalidraw-embed-controller.js +60 -2
  39. package/src/client/presentation/file-explorer-controller.js +15 -3
  40. package/src/client/presentation/file-explorer-view.js +152 -11
  41. package/src/client/presentation/file-history-view-controller.js +806 -0
  42. package/src/client/presentation/git-diff-view-controller.js +718 -121
  43. package/src/client/presentation/git-panel-controller.js +458 -66
  44. package/src/client/presentation/layout-controller.js +1 -1
  45. package/src/client/styles/components/actions.css +89 -0
  46. package/src/client/styles/components/feedback.css +43 -0
  47. package/src/client/styles/components/navigation.css +68 -0
  48. package/src/client/styles/components/scrollbars.css +104 -0
  49. package/src/client/styles/components/states.css +289 -0
  50. package/src/client/styles/components/surfaces.css +155 -0
  51. package/src/client/styles/features/backlinks.css +213 -0
  52. package/src/client/styles/features/collaboration-chat.css +228 -0
  53. package/src/client/styles/features/collaboration-dialogs.css +154 -0
  54. package/src/client/styles/features/collaboration-presence.css +103 -0
  55. package/src/client/styles/features/collaboration-ui.css +3 -0
  56. package/src/client/styles/features/comment-card.css +236 -0
  57. package/src/client/styles/features/comment-markdown.css +127 -0
  58. package/src/client/styles/features/comment-overlays.css +60 -0
  59. package/src/client/styles/features/comments-drawer.css +120 -0
  60. package/src/client/styles/features/comments.css +4 -0
  61. package/src/client/styles/features/diagram-preview.css +227 -0
  62. package/src/client/styles/features/diff-commit.css +268 -0
  63. package/src/client/styles/features/diff-lines.css +160 -0
  64. package/src/client/styles/features/diff-toolbar.css +98 -0
  65. package/src/client/styles/features/diff.css +3 -0
  66. package/src/client/styles/features/embedded-preview.css +218 -0
  67. package/src/client/styles/features/git-branch.css +155 -0
  68. package/src/client/styles/features/git-files.css +105 -0
  69. package/src/client/styles/features/git-history.css +339 -0
  70. package/src/client/styles/features/git.css +3 -0
  71. package/src/client/styles/features/media-lightbox.css +157 -0
  72. package/src/client/styles/features/outline.css +115 -0
  73. package/src/client/styles/features/preview-content.css +3 -0
  74. package/src/client/styles/features/preview-markdown.css +201 -0
  75. package/src/client/styles/features/preview-sidebars.css +2 -0
  76. package/src/client/styles/features/quick-switcher.css +167 -0
  77. package/src/client/styles/foundation/themes.css +347 -0
  78. package/src/client/styles/foundation/tokens.css +66 -0
  79. package/src/client/styles/foundation/utilities.css +36 -0
  80. package/src/client/styles/layout/editor-page.css +203 -0
  81. package/src/client/styles/layout/overlays.css +132 -0
  82. package/src/client/styles/layout/responsive.css +251 -0
  83. package/src/client/styles/layout/shell.css +314 -0
  84. package/src/client/styles/layout/sidebar.css +176 -0
  85. package/src/client/styles/layout/view-modes.css +92 -0
  86. package/src/client/styles/overrides/codemirror.css +53 -0
  87. package/src/client/styles/overrides/highlightjs.css +7 -0
  88. package/src/client/styles/overrides/vendor.css +2 -0
  89. package/src/client/styles/primitives/controls.css +276 -0
  90. package/src/client/styles/style.css +25 -4901
  91. package/src/domain/wiki-link-resolver.js +16 -5
  92. package/src/domain/workspace-change.js +68 -0
  93. package/src/domain/workspace-room.js +3 -0
  94. package/src/server/auth/create-auth-service.js +373 -15
  95. package/src/server/auth/session-cookie.js +30 -4
  96. package/src/server/config/env.js +121 -5
  97. package/src/server/create-app-server.js +49 -10
  98. package/src/server/domain/backlink-index.js +94 -1
  99. package/src/server/domain/collaboration/collaboration-room.js +281 -69
  100. package/src/server/domain/collaboration/room-registry.js +64 -10
  101. package/src/server/index.js +3 -1
  102. package/src/server/infrastructure/git/command-runner.js +2 -1
  103. package/src/server/infrastructure/git/git-service.js +48 -2
  104. package/src/server/infrastructure/git/history-service.js +683 -0
  105. package/src/server/infrastructure/git/parsers.js +30 -0
  106. package/src/server/infrastructure/git/responses.js +85 -19
  107. package/src/server/infrastructure/http/create-auth-api-handler.js +30 -2
  108. package/src/server/infrastructure/http/create-git-api-command-handler.js +55 -43
  109. package/src/server/infrastructure/http/create-git-api-handler.js +4 -0
  110. package/src/server/infrastructure/http/create-git-api-query-handler.js +61 -0
  111. package/src/server/infrastructure/http/create-request-handler.js +22 -0
  112. package/src/server/infrastructure/http/create-vault-api-command-handler.js +58 -14
  113. package/src/server/infrastructure/http/create-vault-api-handler.js +3 -0
  114. package/src/server/infrastructure/http/create-vault-api-query-handler.js +3 -1
  115. package/src/server/infrastructure/http/http-response.js +65 -28
  116. package/src/server/infrastructure/persistence/vault-file-store.js +163 -52
  117. package/src/server/infrastructure/workspace/file-system-sync-service.js +488 -0
  118. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +551 -0
  119. package/public/assets/js/chunks/chunk-R3DDMJHH.js +0 -1
  120. package/public/assets/js/chunks/editor-session-TAV2VXTA.js +0 -22
@@ -1,4901 +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
- display: flex;
2273
- flex: 1;
2274
- overflow: hidden;
2275
- min-height: 0;
2276
- position: relative;
2277
- }
2278
-
2279
- /* Preview container */
2280
- .preview-container {
2281
- flex: 1;
2282
- overflow-y: auto;
2283
- overflow-x: hidden;
2284
- background: var(--color-bg);
2285
- overscroll-behavior: contain;
2286
- min-width: 0;
2287
- }
2288
-
2289
- .preview-content {
2290
- padding: var(--space-6) var(--space-6) var(--space-12);
2291
- max-width: 720px;
2292
- margin: 0 auto;
2293
- min-width: 0;
2294
- overflow: hidden;
2295
- position: relative;
2296
- font-family: var(--font-body);
2297
- font-size: var(--text-sm);
2298
- line-height: 1.7;
2299
- color: var(--color-text);
2300
- }
2301
- .preview-content[data-render-phase="shell"] {
2302
- color: var(--color-text-muted);
2303
- }
2304
-
2305
- @media (min-width: 769px) {
2306
- .preview-content {
2307
- padding-bottom: calc(var(--space-12) + 96px);
2308
- }
2309
- }
2310
-
2311
- .preview-content.is-excalidraw-file-preview {
2312
- display: flex;
2313
- width: 100%;
2314
- min-height: 100%;
2315
- height: 100%;
2316
- margin: 0;
2317
- padding: var(--space-3);
2318
- position: relative;
2319
- box-sizing: border-box;
2320
- max-width: none;
2321
- }
2322
-
2323
- .preview-content.is-image-file-preview {
2324
- display: flex;
2325
- width: 100%;
2326
- min-height: 100%;
2327
- margin: 0;
2328
- padding: var(--space-4);
2329
- position: relative;
2330
- box-sizing: border-box;
2331
- max-width: none;
2332
- }
2333
-
2334
- .preview-content.is-plantuml-file-preview {
2335
- width: 100%;
2336
- min-height: 100%;
2337
- max-width: none;
2338
- }
2339
-
2340
- .preview-content.is-mermaid-file-preview {
2341
- width: 100%;
2342
- min-height: 100%;
2343
- max-width: none;
2344
- }
2345
-
2346
- .preview-content.is-mermaid-file-preview [data-preview-render-host="true"] {
2347
- min-height: 100%;
2348
- }
2349
-
2350
- .preview-content.is-plantuml-file-preview [data-preview-render-host="true"] {
2351
- min-height: 100%;
2352
- }
2353
-
2354
- .preview-content.is-excalidraw-file-preview [data-preview-render-host="true"] {
2355
- display: flex;
2356
- flex: 1;
2357
- min-width: 0;
2358
- min-height: 100%;
2359
- }
2360
-
2361
- .preview-content.is-image-file-preview [data-preview-render-host="true"] {
2362
- display: flex;
2363
- flex: 1;
2364
- min-width: 0;
2365
- min-height: 100%;
2366
- }
2367
-
2368
- .image-file-preview-shell {
2369
- width: 100%;
2370
- min-height: 100%;
2371
- margin: 0;
2372
- display: flex;
2373
- align-items: center;
2374
- justify-content: center;
2375
- }
2376
-
2377
- .image-file-preview-image {
2378
- max-width: min(100%, 1200px);
2379
- max-height: calc(100vh - 180px);
2380
- object-fit: contain;
2381
- border-radius: var(--radius-lg);
2382
- box-shadow: var(--shadow-lg);
2383
- background: var(--color-surface);
2384
- }
2385
-
2386
- .preview-content.is-mermaid-file-preview .mermaid-shell {
2387
- margin: 0;
2388
- min-height: 100%;
2389
- }
2390
-
2391
- .preview-content.is-plantuml-file-preview .plantuml-shell {
2392
- margin: 0;
2393
- min-height: 100%;
2394
- }
2395
-
2396
- .preview-content.is-excalidraw-file-preview .excalidraw-embed,
2397
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-placeholder {
2398
- margin: 0;
2399
- width: 100%;
2400
- min-height: 100%;
2401
- }
2402
-
2403
- .preview-content.is-excalidraw-file-preview .excalidraw-embed {
2404
- display: flex;
2405
- flex-direction: column;
2406
- height: 100%;
2407
- }
2408
-
2409
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-placeholder {
2410
- display: flex;
2411
- align-items: stretch;
2412
- }
2413
-
2414
- .preview-content.is-excalidraw-file-preview .preview-shell {
2415
- width: 100%;
2416
- min-height: 100%;
2417
- }
2418
-
2419
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-iframe {
2420
- flex: 1;
2421
- min-height: 0;
2422
- height: 100% !important;
2423
- }
2424
-
2425
- .preview-content.is-excalidraw-file-preview .excalidraw-embed-resizer {
2426
- display: none;
2427
- }
2428
-
2429
- .preview-content.is-excalidraw-file-preview .excalidraw-embed.is-maximized {
2430
- position: absolute;
2431
- inset: var(--space-3);
2432
- margin: 0;
2433
- z-index: 2;
2434
- max-width: calc(100% - (var(--space-3) * 2));
2435
- box-sizing: border-box;
2436
- }
2437
-
2438
- .preview-content.is-excalidraw-file-preview .excalidraw-embed.is-maximized .excalidraw-embed-iframe {
2439
- height: 100% !important;
2440
- }
2441
-
2442
- .preview-shell {
2443
- min-height: 60vh;
2444
- display: flex;
2445
- align-items: center;
2446
- justify-content: center;
2447
- font-size: var(--text-sm);
2448
- color: var(--color-text-muted);
2449
- }
2450
-
2451
- /* ===== MARKDOWN PREVIEW STYLES ===== */
2452
-
2453
- .preview-content h1 {
2454
- font-size: var(--text-xl);
2455
- font-weight: 700;
2456
- margin: var(--space-8) 0 var(--space-4);
2457
- padding-bottom: var(--space-2);
2458
- border-bottom: 1px solid var(--color-divider);
2459
- letter-spacing: -0.02em;
2460
- }
2461
- .preview-content h1:first-child {
2462
- margin-top: 0;
2463
- }
2464
- .preview-content h2 {
2465
- font-size: var(--text-lg);
2466
- font-weight: 600;
2467
- margin: var(--space-6) 0 var(--space-3);
2468
- letter-spacing: -0.01em;
2469
- }
2470
- .preview-content h3 {
2471
- font-size: var(--text-base);
2472
- font-weight: 600;
2473
- margin: var(--space-5) 0 var(--space-2);
2474
- }
2475
- .preview-content h4, .preview-content h5, .preview-content h6 {
2476
- font-size: var(--text-sm);
2477
- font-weight: 600;
2478
- margin: var(--space-4) 0 var(--space-2);
2479
- color: var(--color-text-muted);
2480
- }
2481
-
2482
- .preview-content p {
2483
- margin-bottom: var(--space-4);
2484
- max-width: 72ch;
2485
- }
2486
-
2487
- .preview-content p:has(> .excalidraw-embed-placeholder:only-child) {
2488
- max-width: none;
2489
- margin-bottom: 0;
2490
- }
2491
-
2492
- .preview-content p:has(> .video-embed-placeholder:only-child) {
2493
- max-width: none;
2494
- margin-bottom: 0;
2495
- }
2496
-
2497
- .preview-content p:has(> .plantuml-shell:only-child) {
2498
- max-width: none;
2499
- margin-bottom: 0;
2500
- }
2501
-
2502
- .preview-content a {
2503
- color: var(--color-primary);
2504
- text-decoration: none;
2505
- border-bottom: 1px solid oklch(from var(--color-primary) l c h / 0.3);
2506
- transition: border-color var(--transition-interactive);
2507
- }
2508
- .preview-content a:hover {
2509
- border-bottom-color: var(--color-primary);
2510
- }
2511
-
2512
- .preview-content strong { font-weight: 600; }
2513
- .preview-content em { font-style: italic; }
2514
- .preview-content del { text-decoration: line-through; color: var(--color-text-muted); }
2515
-
2516
- .preview-content ul,
2517
- .preview-content ol {
2518
- margin-bottom: var(--space-4);
2519
- padding-left: var(--space-6);
2520
- }
2521
- .preview-content li {
2522
- margin-bottom: var(--space-1);
2523
- }
2524
- .preview-content li > ul,
2525
- .preview-content li > ol {
2526
- margin-top: var(--space-1);
2527
- margin-bottom: 0;
2528
- }
2529
-
2530
- /* Task list checkboxes */
2531
- .preview-content .task-list-item {
2532
- list-style: none;
2533
- margin-left: calc(var(--space-6) * -1);
2534
- padding-left: var(--space-1);
2535
- }
2536
- .preview-content .task-list-item input[type="checkbox"] {
2537
- margin-right: var(--space-2);
2538
- accent-color: var(--color-primary);
2539
- vertical-align: middle;
2540
- }
2541
-
2542
- /* Blockquote */
2543
- .preview-content blockquote {
2544
- margin: var(--space-4) 0;
2545
- padding: var(--space-3) var(--space-5);
2546
- border-left: 3px solid var(--color-primary);
2547
- background: var(--color-surface);
2548
- border-radius: 0 var(--radius-md) var(--radius-md) 0;
2549
- color: var(--color-text-muted);
2550
- }
2551
- .preview-content blockquote p:last-child {
2552
- margin-bottom: 0;
2553
- }
2554
-
2555
- /* Inline code */
2556
- .preview-content code {
2557
- font-family: var(--font-mono);
2558
- font-size: 0.875em;
2559
- background: var(--color-surface-offset);
2560
- padding: 2px 6px;
2561
- border-radius: var(--radius-sm);
2562
- color: var(--color-primary);
2563
- }
2564
-
2565
- /* Code blocks */
2566
- .preview-content pre {
2567
- margin: var(--space-4) 0;
2568
- border-radius: var(--radius-lg);
2569
- overflow-x: auto;
2570
- -webkit-overflow-scrolling: touch;
2571
- border: 1px solid var(--color-border);
2572
- max-width: 100%;
2573
- background: var(--color-surface);
2574
- }
2575
- .preview-content pre code {
2576
- display: block;
2577
- padding: var(--space-4);
2578
- background: none;
2579
- color: var(--color-text);
2580
- font-size: 13px;
2581
- line-height: 1.6;
2582
- white-space: pre;
2583
- word-wrap: normal;
2584
- overflow-wrap: normal;
2585
- width: fit-content;
2586
- min-width: 100%;
2587
- }
2588
-
2589
- /* Tables */
2590
- .preview-content .table-wrapper {
2591
- margin: var(--space-4) 0;
2592
- border: 1px solid var(--color-border);
2593
- border-radius: var(--radius-md);
2594
- overflow-x: auto;
2595
- -webkit-overflow-scrolling: touch;
2596
- }
2597
- .preview-content table {
2598
- width: 100%;
2599
- min-width: 100%;
2600
- border-collapse: collapse;
2601
- white-space: nowrap;
2602
- }
2603
- .preview-content th,
2604
- .preview-content td {
2605
- padding: var(--space-2) var(--space-3);
2606
- text-align: left;
2607
- border-bottom: 1px solid var(--color-divider);
2608
- font-size: var(--text-sm);
2609
- }
2610
- .preview-content th {
2611
- background: var(--color-surface-offset);
2612
- font-weight: 600;
2613
- font-size: var(--text-xs);
2614
- text-transform: uppercase;
2615
- letter-spacing: 0.03em;
2616
- color: var(--color-text-muted);
2617
- }
2618
- .preview-content tr:last-child td {
2619
- border-bottom: none;
2620
- }
2621
- .preview-content tr:hover td {
2622
- background: var(--color-surface-offset);
2623
- }
2624
-
2625
- /* Horizontal rule */
2626
- .preview-content hr {
2627
- border: none;
2628
- height: 1px;
2629
- background: var(--color-divider);
2630
- margin: var(--space-8) 0;
2631
- }
2632
-
2633
- /* Images */
2634
- .preview-content img {
2635
- max-width: 100%;
2636
- height: auto;
2637
- border-radius: var(--radius-md);
2638
- margin: var(--space-4) 0;
2639
- cursor: zoom-in;
2640
- }
2641
-
2642
- .image-lightbox-root {
2643
- position: fixed;
2644
- inset: 0;
2645
- z-index: 220;
2646
- display: grid;
2647
- place-items: center;
2648
- pointer-events: auto;
2649
- }
2650
-
2651
- .image-lightbox-root[hidden] {
2652
- display: none !important;
2653
- }
2654
-
2655
- .image-lightbox-backdrop {
2656
- position: absolute;
2657
- inset: 0;
2658
- border: none;
2659
- background: oklch(0.08 0.01 260 / 0.82);
2660
- backdrop-filter: blur(10px);
2661
- cursor: zoom-out;
2662
- }
2663
-
2664
- .image-lightbox-shell {
2665
- position: absolute;
2666
- inset: 0;
2667
- z-index: 1;
2668
- }
2669
-
2670
- .image-lightbox-toolbar {
2671
- position: absolute;
2672
- top: var(--space-5);
2673
- left: var(--space-5);
2674
- right: var(--space-5);
2675
- z-index: 2;
2676
- display: flex;
2677
- align-items: center;
2678
- justify-content: space-between;
2679
- gap: var(--space-3);
2680
- pointer-events: none;
2681
- }
2682
-
2683
- .image-lightbox-title {
2684
- min-width: 0;
2685
- font-size: var(--text-xs);
2686
- font-weight: 600;
2687
- color: white;
2688
- overflow: hidden;
2689
- text-overflow: ellipsis;
2690
- white-space: nowrap;
2691
- padding: 8px 12px;
2692
- border-radius: 999px;
2693
- background: oklch(0.18 0.02 260 / 0.68);
2694
- backdrop-filter: blur(12px);
2695
- box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2696
- pointer-events: auto;
2697
- }
2698
-
2699
- .image-lightbox-controls {
2700
- display: inline-flex;
2701
- align-items: center;
2702
- gap: var(--space-2);
2703
- flex-wrap: wrap;
2704
- justify-content: flex-end;
2705
- pointer-events: auto;
2706
- }
2707
-
2708
- .image-lightbox-btn {
2709
- min-width: 0;
2710
- padding: 8px 12px;
2711
- border: none;
2712
- border-radius: 999px;
2713
- background: oklch(0.18 0.02 260 / 0.68);
2714
- color: white;
2715
- font-size: var(--text-xs);
2716
- font-weight: 600;
2717
- backdrop-filter: blur(12px);
2718
- box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2719
- transition: background 0.18s ease, transform 0.18s ease;
2720
- }
2721
-
2722
- .image-lightbox-btn:hover:not(:disabled) {
2723
- background: oklch(0.24 0.02 260 / 0.82);
2724
- }
2725
-
2726
- .image-lightbox-btn:disabled {
2727
- opacity: 0.45;
2728
- cursor: default;
2729
- }
2730
-
2731
- .image-lightbox-zoom-label {
2732
- min-width: 58px;
2733
- padding: 8px 12px;
2734
- border-radius: 999px;
2735
- background: oklch(0.18 0.02 260 / 0.68);
2736
- color: white;
2737
- font-size: var(--text-xs);
2738
- font-weight: 600;
2739
- font-variant-numeric: tabular-nums;
2740
- text-align: center;
2741
- backdrop-filter: blur(12px);
2742
- box-shadow: 0 16px 40px oklch(0 0 0 / 0.24);
2743
- }
2744
-
2745
- .image-lightbox-viewport {
2746
- position: absolute;
2747
- inset: 0;
2748
- overflow: hidden;
2749
- touch-action: none;
2750
- user-select: none;
2751
- }
2752
-
2753
- .image-lightbox-viewport.is-dragging .image-lightbox-image {
2754
- cursor: grabbing !important;
2755
- }
2756
-
2757
- .image-lightbox-image {
2758
- position: absolute;
2759
- inset: 0;
2760
- margin: auto;
2761
- max-width: calc(100vw - (var(--space-8) * 2));
2762
- max-height: calc(100vh - (var(--space-8) * 2));
2763
- width: auto;
2764
- height: auto;
2765
- object-fit: contain;
2766
- transform-origin: center center;
2767
- will-change: transform;
2768
- box-shadow: 0 28px 80px oklch(0 0 0 / 0.28);
2769
- }
2770
-
2771
- body.image-lightbox-open {
2772
- overflow: hidden;
2773
- }
2774
-
2775
- @media (max-width: 768px) {
2776
- .image-lightbox-toolbar {
2777
- top: var(--space-3);
2778
- left: var(--space-3);
2779
- right: var(--space-3);
2780
- align-items: flex-start;
2781
- flex-direction: column;
2782
- }
2783
-
2784
- .image-lightbox-controls {
2785
- justify-content: flex-start;
2786
- }
2787
-
2788
- .image-lightbox-btn {
2789
- flex: 0 0 auto;
2790
- }
2791
-
2792
- .image-lightbox-image {
2793
- max-width: calc(100vw - (var(--space-4) * 2));
2794
- max-height: calc(100vh - (var(--space-4) * 2));
2795
- }
2796
- }
2797
-
2798
- .preview-content .video-embed-shell {
2799
- display: block;
2800
- background: #000;
2801
- }
2802
-
2803
- .preview-content .video-embed,
2804
- .preview-content .video-embed-placeholder {
2805
- display: block;
2806
- transition: box-shadow 0.18s ease;
2807
- }
2808
-
2809
- .preview-content .video-embed-placeholder.is-hydrated {
2810
- visibility: hidden;
2811
- }
2812
-
2813
- .video-embed-overlay-root {
2814
- position: absolute;
2815
- inset: 0;
2816
- pointer-events: none;
2817
- z-index: 1;
2818
- }
2819
-
2820
- .preview-content .video-embed-frame,
2821
- .preview-content .video-embed,
2822
- .preview-content .video-embed-placeholder {
2823
- width: 100%;
2824
- max-width: 100%;
2825
- min-width: 0;
2826
- }
2827
-
2828
- .preview-content .video-embed-frame {
2829
- height: 100%;
2830
- }
2831
-
2832
- .preview-content .video-embed-placeholder-card {
2833
- border-radius: 0;
2834
- min-height: 100%;
2835
- }
2836
-
2837
- .preview-content .video-embed-placeholder-copy {
2838
- display: grid;
2839
- gap: 2px;
2840
- }
2841
-
2842
- .preview-content .video-embed-iframe,
2843
- .preview-content .video-embed-player {
2844
- display: block;
2845
- width: 100%;
2846
- height: 100%;
2847
- max-width: 100%;
2848
- border: none;
2849
- background: #000;
2850
- }
2851
-
2852
- .preview-content .video-embed-player {
2853
- object-fit: contain;
2854
- }
2855
-
2856
- /* Mermaid diagrams */
2857
- .preview-content .mermaid-shell {
2858
- display: grid;
2859
- gap: 0;
2860
- }
2861
- .preview-content .mermaid-placeholder-card {
2862
- border-radius: 0;
2863
- }
2864
- .preview-content .mermaid-toolbar {
2865
- justify-content: flex-end;
2866
- }
2867
- .preview-content .mermaid-zoom-btn {
2868
- min-width: 32px;
2869
- line-height: 1.5;
2870
- }
2871
- .preview-content .mermaid-zoom-btn:disabled {
2872
- opacity: 0.5;
2873
- cursor: not-allowed;
2874
- }
2875
- .preview-content .mermaid-frame {
2876
- max-width: none;
2877
- }
2878
- .preview-content .mermaid-frame.is-pannable {
2879
- cursor: grab;
2880
- }
2881
- .preview-content .mermaid-frame.is-dragging {
2882
- cursor: grabbing;
2883
- user-select: none;
2884
- }
2885
- .preview-content .mermaid-frame svg {
2886
- display: block;
2887
- }
2888
- body.mermaid-maximized-open {
2889
- overflow: hidden;
2890
- }
2891
- body.mermaid-maximized-open::before {
2892
- content: '';
2893
- position: fixed;
2894
- inset: 0;
2895
- background: oklch(0.1 0 0 / 0.42);
2896
- backdrop-filter: blur(2px);
2897
- z-index: 170;
2898
- }
2899
- .preview-content .mermaid-shell.is-maximized {
2900
- position: fixed;
2901
- inset: var(--space-4);
2902
- width: auto;
2903
- z-index: 171;
2904
- margin: 0;
2905
- max-width: none;
2906
- box-shadow: var(--shadow-lg);
2907
- grid-template-rows: auto minmax(0, 1fr);
2908
- }
2909
- .preview-content .mermaid-shell.is-maximized .mermaid-frame {
2910
- max-height: none;
2911
- height: 100%;
2912
- }
2913
-
2914
- /* PlantUML diagrams */
2915
- .preview-content .plantuml-shell,
2916
- .plantuml-maximized-root .plantuml-shell {
2917
- display: grid;
2918
- gap: 0;
2919
- }
2920
- .preview-content .plantuml-shell,
2921
- .plantuml-maximized-root .plantuml-shell {
2922
- min-width: 0;
2923
- width: 100%;
2924
- }
2925
- .preview-content .plantuml-placeholder-card,
2926
- .plantuml-maximized-root .plantuml-placeholder-card {
2927
- border-radius: 0;
2928
- }
2929
- .preview-content .plantuml-tool-btn:disabled,
2930
- .plantuml-maximized-root .plantuml-tool-btn:disabled {
2931
- opacity: 0.5;
2932
- cursor: not-allowed;
2933
- }
2934
- .preview-content .plantuml-toolbar,
2935
- .plantuml-maximized-root .plantuml-toolbar {
2936
- justify-content: flex-end;
2937
- }
2938
- .preview-content .plantuml-tool-btn,
2939
- .plantuml-maximized-root .plantuml-tool-btn {
2940
- min-width: 32px;
2941
- line-height: 1.5;
2942
- }
2943
- .preview-content .plantuml-frame,
2944
- .plantuml-maximized-root .plantuml-frame {
2945
- max-width: 100%;
2946
- }
2947
- .preview-content .plantuml-frame.is-pannable,
2948
- .plantuml-maximized-root .plantuml-frame.is-pannable {
2949
- cursor: grab;
2950
- }
2951
- .preview-content .plantuml-frame.is-dragging,
2952
- .plantuml-maximized-root .plantuml-frame.is-dragging {
2953
- cursor: grabbing;
2954
- user-select: none;
2955
- }
2956
- .preview-content .plantuml-frame svg,
2957
- .plantuml-maximized-root .plantuml-frame svg {
2958
- display: block;
2959
- }
2960
- body.plantuml-maximized-open {
2961
- overflow: hidden;
2962
- }
2963
- body.plantuml-maximized-open::before {
2964
- content: '';
2965
- position: fixed;
2966
- inset: 0;
2967
- background: oklch(0.1 0 0 / 0.42);
2968
- backdrop-filter: blur(2px);
2969
- z-index: 170;
2970
- }
2971
- .plantuml-maximized-root {
2972
- position: fixed;
2973
- inset: 0;
2974
- pointer-events: none;
2975
- z-index: 171;
2976
- }
2977
- .preview-content .plantuml-shell.is-maximized,
2978
- .plantuml-maximized-root .plantuml-shell.is-maximized {
2979
- position: fixed;
2980
- inset: var(--space-4);
2981
- width: auto;
2982
- z-index: 171;
2983
- margin: 0;
2984
- max-width: none;
2985
- box-shadow: var(--shadow-lg);
2986
- pointer-events: auto;
2987
- grid-template-rows: auto minmax(0, 1fr);
2988
- }
2989
- .preview-content .plantuml-shell.is-maximized .plantuml-frame,
2990
- .plantuml-maximized-root .plantuml-shell.is-maximized .plantuml-frame {
2991
- max-height: none;
2992
- height: 100%;
2993
- }
2994
-
2995
- /* ===== OUTLINE PANEL ===== */
2996
-
2997
- .pane-header-btn {
2998
- padding: 2px 6px;
2999
- border-radius: var(--radius-sm);
3000
- display: flex;
3001
- align-items: center;
3002
- gap: var(--space-1);
3003
- font-size: 11px;
3004
- color: var(--color-text-muted);
3005
- white-space: nowrap;
3006
- transition: color var(--transition-interactive), background var(--transition-interactive);
3007
- }
3008
- .pane-header-btn:hover {
3009
- color: var(--color-text);
3010
- background: var(--color-surface-dynamic);
3011
- }
3012
- .pane-header-btn.active {
3013
- color: var(--color-primary);
3014
- background: oklch(from var(--color-primary) l c h / 0.1);
3015
- }
3016
-
3017
- /* ===== COMMENTS ===== */
3018
-
3019
- .comments-drawer {
3020
- width: min(300px, 34vw);
3021
- min-width: 240px;
3022
- border-left: 1px solid var(--color-divider);
3023
- background:
3024
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.035), transparent 120px),
3025
- color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3026
- display: flex;
3027
- flex-direction: column;
3028
- min-height: 0;
3029
- box-shadow: inset 1px 0 0 oklch(from var(--color-comment) l c h / 0.06);
3030
- }
3031
-
3032
- .comments-drawer-header {
3033
- padding: var(--space-4);
3034
- border-bottom: 1px solid var(--color-divider);
3035
- background: color-mix(in srgb, var(--color-surface) 97%, var(--color-comment) 3%);
3036
- }
3037
-
3038
- .comments-drawer-title {
3039
- font-size: 12px;
3040
- font-weight: 700;
3041
- letter-spacing: 0.06em;
3042
- text-transform: uppercase;
3043
- color: var(--color-comment);
3044
- }
3045
-
3046
- .comments-drawer-empty {
3047
- padding: var(--space-4);
3048
- color: var(--color-text-muted);
3049
- font-size: 12px;
3050
- }
3051
-
3052
- .comments-drawer-list {
3053
- display: flex;
3054
- flex-direction: column;
3055
- gap: var(--space-3);
3056
- overflow: auto;
3057
- padding: var(--space-3);
3058
- }
3059
-
3060
- .comments-drawer-item {
3061
- width: 100%;
3062
- text-align: left;
3063
- border: 1px solid color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);
3064
- border-radius: calc(var(--radius-lg) + 4px);
3065
- padding: var(--space-4);
3066
- background:
3067
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.028), transparent 70%),
3068
- color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%);
3069
- transition: transform 140ms ease, border-color var(--transition-interactive), background var(--transition-interactive), box-shadow var(--transition-interactive);
3070
- }
3071
-
3072
- .comments-drawer-item:hover {
3073
- transform: translateY(-1px);
3074
- border-color: oklch(from var(--color-comment) l c h / 0.18);
3075
- background:
3076
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.042), transparent 70%),
3077
- color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);
3078
- box-shadow: var(--shadow-md);
3079
- }
3080
-
3081
- .comments-drawer-item.is-active {
3082
- border-color: color-mix(in srgb, var(--color-border) 78%, var(--color-comment) 22%);
3083
- background:
3084
- linear-gradient(180deg, oklch(from var(--color-comment) l c h / 0.055), transparent 72%),
3085
- color-mix(in srgb, var(--color-surface-2) 90%, var(--color-comment) 10%);
3086
- box-shadow: 0 0 0 1px oklch(from var(--color-comment) l c h / 0.14);
3087
- }
3088
-
3089
- .comments-drawer-item-header,
3090
- .comments-drawer-item-footer {
3091
- display: flex;
3092
- align-items: center;
3093
- justify-content: space-between;
3094
- gap: var(--space-2);
3095
- }
3096
-
3097
- .comments-drawer-item-title {
3098
- font-size: 11px;
3099
- font-weight: 700;
3100
- letter-spacing: 0.05em;
3101
- text-transform: uppercase;
3102
- color: var(--color-comment);
3103
- }
3104
-
3105
- .comments-drawer-item-count {
3106
- min-width: 20px;
3107
- height: 20px;
3108
- border-radius: var(--radius-full);
3109
- display: inline-flex;
3110
- align-items: center;
3111
- justify-content: center;
3112
- background: var(--color-comment-soft);
3113
- color: var(--color-comment);
3114
- font-size: 11px;
3115
- font-weight: 700;
3116
- border: 1px solid oklch(from var(--color-comment) l c h / 0.18);
3117
- }
3118
-
3119
- .comments-drawer-item-quote {
3120
- margin: var(--space-3) 0;
3121
- padding: var(--space-3);
3122
- border-radius: var(--radius-lg);
3123
- border: 1px solid color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);
3124
- background: color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);
3125
- color: var(--color-text-muted);
3126
- font-family: var(--font-mono);
3127
- font-size: 11.5px;
3128
- line-height: 1.65;
3129
- white-space: pre-wrap;
3130
- overflow: auto;
3131
- overflow-wrap: anywhere;
3132
- word-break: break-word;
3133
- max-height: 9.5rem;
3134
- scrollbar-width: thin;
3135
- padding-bottom: calc(var(--space-3) + 2px);
3136
- }
3137
-
3138
- .comments-drawer-item-preview {
3139
- position: relative;
3140
- max-height: 7.8rem;
3141
- overflow: hidden;
3142
- color: var(--color-text-muted);
3143
- }
3144
-
3145
- .comments-drawer-item-preview:after {
3146
- content: "";
3147
- position: absolute;
3148
- inset: auto 0 0 0;
3149
- height: 2.5rem;
3150
- background: linear-gradient(180deg, oklch(0 0 0 / 0), color-mix(in srgb, var(--color-surface-2) 95%, var(--color-comment) 5%));
3151
- pointer-events: none;
3152
- }
3153
-
3154
- .comments-drawer-item-footer {
3155
- font-size: 11px;
3156
- color: var(--color-text-muted);
3157
- font-weight: 600;
3158
- letter-spacing: 0.01em;
3159
- align-items: flex-end;
3160
- flex-wrap: wrap;
3161
- }
3162
-
3163
- .comments-drawer-item-updated {
3164
- color: var(--color-text-faint);
3165
- }
3166
-
3167
- .comment-editor-layer,
3168
- .comment-preview-layer,
3169
- .comment-preview-highlights {
3170
- position: absolute;
3171
- inset: 0;
3172
- pointer-events: none;
3173
- }
3174
-
3175
- .comment-editor-badge,
3176
- .comment-preview-badge {
3177
- position: absolute;
3178
- min-width: 28px;
3179
- height: 24px;
3180
- border-radius: var(--radius-full);
3181
- background: color-mix(in srgb, var(--color-surface) 68%, var(--color-comment) 32%);
3182
- color: var(--color-comment);
3183
- border: 1px solid oklch(from var(--color-comment) l c h / 0.24);
3184
- box-shadow: var(--shadow-md);
3185
- display: inline-flex;
3186
- align-items: center;
3187
- justify-content: center;
3188
- gap: 4px;
3189
- padding: 0 7px;
3190
- font-size: 10px;
3191
- font-weight: 700;
3192
- pointer-events: auto;
3193
- transition: transform 140ms ease, box-shadow 140ms ease, background-color 140ms ease, border-color 140ms ease;
3194
- }
3195
-
3196
- .comment-editor-badge.is-active,
3197
- .comment-preview-badge.is-active {
3198
- background: color-mix(in srgb, var(--color-surface) 42%, var(--color-comment) 58%);
3199
- border-color: oklch(from var(--color-comment) l c h / 0.32);
3200
- color: var(--color-text-inverse);
3201
- }
3202
-
3203
- .comment-marker-icon {
3204
- display: inline-flex;
3205
- width: 12px;
3206
- height: 12px;
3207
- flex: 0 0 auto;
3208
- }
3209
-
3210
- .comment-marker-icon svg {
3211
- width: 100%;
3212
- height: 100%;
3213
- display: block;
3214
- }
3215
-
3216
- .comment-marker-count {
3217
- line-height: 1;
3218
- }
3219
-
3220
- .comment-editor-badge:hover,
3221
- .comment-preview-badge:hover,
3222
- .comment-selection-chip:hover {
3223
- transform: translateY(-1px) scale(1.04);
3224
- box-shadow: var(--shadow-lg);
3225
- }
3226
-
3227
- .comment-selection-chip {
3228
- position: absolute;
3229
- border-radius: var(--radius-full);
3230
- padding: 6px 10px;
3231
- min-width: 96px;
3232
- background: color-mix(in srgb, var(--color-surface) 25%, var(--color-comment) 75%);
3233
- color: var(--color-text-inverse);
3234
- border: 1px solid oklch(from var(--color-comment) l c h / 0.22);
3235
- font-size: 11px;
3236
- font-weight: 700;
3237
- letter-spacing: 0.02em;
3238
- text-align: center;
3239
- box-shadow: var(--shadow-md);
3240
- pointer-events: auto;
3241
- transition: transform 140ms ease, box-shadow 140ms ease;
3242
- }
3243
-
3244
- .comment-preview-highlight {
3245
- position: absolute;
3246
- border-radius: 6px;
3247
- background: var(--color-comment-soft);
3248
- border: 1px solid oklch(from var(--color-comment) l c h / 0.16);
3249
- }
3250
-
3251
- .comment-card-root {
3252
- position: fixed;
3253
- z-index: 50;
3254
- }
3255
-
3256
- .comment-card {
3257
- width: min(100%, 520px);
3258
- border-radius: 18px;
3259
- border: 1px solid color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);
3260
- background: color-mix(in srgb, var(--color-surface) 94%, var(--color-comment) 6%);
3261
- box-shadow: 0 20px 56px oklch(0 0 0 / 0.24);
3262
- padding: var(--space-4);
3263
- display: flex;
3264
- flex-direction: column;
3265
- gap: var(--space-3);
3266
- max-height: min(78vh, 720px);
3267
- overflow: hidden;
3268
- animation: comment-card-in 140ms cubic-bezier(0.16, 1, 0.3, 1);
3269
- }
3270
-
3271
- .comment-card-header,
3272
- .comment-thread-card-header,
3273
- .comment-message-card-meta,
3274
- .comment-card-actions {
3275
- display: flex;
3276
- align-items: center;
3277
- gap: var(--space-2);
3278
- }
3279
-
3280
- .comment-card-header,
3281
- .comment-thread-card-header,
3282
- .comment-card-actions {
3283
- justify-content: space-between;
3284
- }
3285
-
3286
- .comment-card-header {
3287
- flex-shrink: 0;
3288
- }
3289
-
3290
- .comment-card-scroll {
3291
- display: flex;
3292
- flex-direction: column;
3293
- gap: var(--space-3);
3294
- min-height: 0;
3295
- overflow: auto;
3296
- padding-right: 2px;
3297
- }
3298
-
3299
- .comment-card-title {
3300
- font-size: 15px;
3301
- font-weight: 700;
3302
- letter-spacing: -0.01em;
3303
- }
3304
-
3305
- .comment-card-meta {
3306
- margin-top: 2px;
3307
- color: var(--color-comment);
3308
- font-size: 11px;
3309
- font-weight: 700;
3310
- letter-spacing: 0.05em;
3311
- text-transform: uppercase;
3312
- }
3313
-
3314
- .comment-card-close,
3315
- .comment-thread-card-action {
3316
- padding: 5px 8px;
3317
- border-radius: var(--radius-full);
3318
- font-size: 11px;
3319
- font-weight: 700;
3320
- color: var(--color-text-muted);
3321
- background: color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);
3322
- border: 1px solid transparent;
3323
- transition: color var(--transition-interactive), background var(--transition-interactive), border-color var(--transition-interactive);
3324
- }
3325
-
3326
- .comment-card-close:hover,
3327
- .comment-thread-card-action:hover {
3328
- color: var(--color-text);
3329
- border-color: oklch(from var(--color-comment) l c h / 0.16);
3330
- }
3331
-
3332
- .comment-thread-card-action.is-active {
3333
- color: var(--color-text);
3334
- background: color-mix(in srgb, var(--color-surface-offset) 72%, var(--color-comment) 28%);
3335
- border-color: oklch(from var(--color-comment) l c h / 0.2);
3336
- }
3337
-
3338
- .comment-thread-card-action.is-danger {
3339
- color: var(--color-error);
3340
- }
3341
-
3342
- .comment-card-quote,
3343
- .comment-thread-card-excerpt {
3344
- font-size: 12px;
3345
- color: var(--color-text-muted);
3346
- background: color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);
3347
- border-radius: var(--radius-md);
3348
- padding: var(--space-2) var(--space-3);
3349
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3350
- }
3351
-
3352
- .comment-card-quote {
3353
- white-space: pre-wrap;
3354
- overflow: auto;
3355
- overflow-wrap: anywhere;
3356
- word-break: break-word;
3357
- font-family: var(--font-mono);
3358
- font-size: 11.5px;
3359
- line-height: 1.65;
3360
- max-height: 11rem;
3361
- padding-bottom: calc(var(--space-3) + 2px);
3362
- scrollbar-width: thin;
3363
- }
3364
-
3365
- .comment-card-form,
3366
- .comment-reply-form {
3367
- display: flex;
3368
- flex-direction: column;
3369
- gap: var(--space-3);
3370
- }
3371
-
3372
- .comment-card-input {
3373
- resize: vertical;
3374
- min-height: 88px;
3375
- }
3376
-
3377
- .comment-thread-card {
3378
- display: flex;
3379
- flex-direction: column;
3380
- gap: var(--space-3);
3381
- padding-top: var(--space-3);
3382
- border-top: 1px solid var(--color-divider);
3383
- }
3384
-
3385
- .comment-thread-card-header {
3386
- align-items: flex-start;
3387
- flex-wrap: wrap;
3388
- }
3389
-
3390
- .comment-thread-card-heading {
3391
- display: flex;
3392
- flex: 1 1 160px;
3393
- flex-wrap: wrap;
3394
- gap: var(--space-1) var(--space-2);
3395
- min-width: 0;
3396
- }
3397
-
3398
- .comment-thread-card-author,
3399
- .comment-message-card-author {
3400
- font-size: 12px;
3401
- font-weight: 700;
3402
- }
3403
-
3404
- .comment-thread-card-time,
3405
- .comment-message-card-time {
3406
- font-size: 11px;
3407
- color: var(--color-text-faint);
3408
- }
3409
-
3410
- .comment-thread-card-actions {
3411
- display: inline-flex;
3412
- flex-wrap: wrap;
3413
- gap: var(--space-1);
3414
- margin-left: auto;
3415
- justify-content: flex-end;
3416
- }
3417
-
3418
- .comment-message-card {
3419
- border-radius: var(--radius-md);
3420
- background: color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);
3421
- border: 1px solid color-mix(in srgb, var(--color-divider) 90%, var(--color-comment) 10%);
3422
- padding: var(--space-2) var(--space-3);
3423
- }
3424
-
3425
- .comment-message-card-body {
3426
- margin-top: var(--space-1);
3427
- font-size: 12px;
3428
- line-height: 1.65;
3429
- }
3430
-
3431
- .comment-reaction-bar {
3432
- display: flex;
3433
- align-items: flex-start;
3434
- justify-content: space-between;
3435
- gap: var(--space-2);
3436
- flex-wrap: wrap;
3437
- margin-top: var(--space-2);
3438
- }
3439
-
3440
- .comment-reaction-chips {
3441
- display: flex;
3442
- flex-wrap: wrap;
3443
- gap: var(--space-2);
3444
- }
3445
-
3446
- .comment-reaction-actions {
3447
- display: flex;
3448
- align-items: center;
3449
- flex-wrap: wrap;
3450
- gap: var(--space-2);
3451
- }
3452
-
3453
- .comment-reaction-chip,
3454
- .comment-reaction-more-trigger {
3455
- display: inline-flex;
3456
- align-items: center;
3457
- justify-content: center;
3458
- gap: 6px;
3459
- min-height: 30px;
3460
- padding: 4px 10px;
3461
- border-radius: var(--radius-full);
3462
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3463
- background: color-mix(in srgb, var(--color-surface) 90%, var(--color-comment) 10%);
3464
- color: var(--color-text-muted);
3465
- font-size: 11px;
3466
- font-weight: 600;
3467
- transition: background var(--transition-interactive), border-color var(--transition-interactive), color var(--transition-interactive), transform 140ms ease;
3468
- }
3469
-
3470
- .comment-reaction-chip:hover,
3471
- .comment-reaction-more-trigger:hover {
3472
- color: var(--color-text);
3473
- border-color: oklch(from var(--color-comment) l c h / 0.22);
3474
- background: color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-comment) 24%);
3475
- }
3476
-
3477
- .comment-reaction-chip.is-active {
3478
- color: var(--color-comment);
3479
- border-color: oklch(from var(--color-comment) l c h / 0.28);
3480
- background: color-mix(in srgb, var(--color-surface-offset) 64%, var(--color-comment) 36%);
3481
- }
3482
-
3483
- .comment-reaction-chip-emoji,
3484
- .comment-reaction-chip-count {
3485
- line-height: 1;
3486
- }
3487
-
3488
- .comment-reaction-quick-add,
3489
- .comment-reaction-picker-btn {
3490
- display: inline-flex;
3491
- align-items: center;
3492
- justify-content: center;
3493
- min-width: 34px;
3494
- min-height: 34px;
3495
- padding: 0;
3496
- border-radius: var(--radius-md);
3497
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3498
- background: color-mix(in srgb, var(--color-surface-2) 92%, var(--color-comment) 8%);
3499
- font-size: 18px;
3500
- transition: background var(--transition-interactive), border-color var(--transition-interactive), transform 140ms ease;
3501
- }
3502
-
3503
- .comment-reaction-quick-add:hover,
3504
- .comment-reaction-picker-btn:hover {
3505
- border-color: oklch(from var(--color-comment) l c h / 0.24);
3506
- background: color-mix(in srgb, var(--color-surface-offset) 78%, var(--color-comment) 22%);
3507
- transform: translateY(-1px);
3508
- }
3509
-
3510
- .comment-reaction-picker-wrap {
3511
- position: relative;
3512
- display: inline-flex;
3513
- }
3514
-
3515
- .comment-reaction-picker {
3516
- position: absolute;
3517
- top: calc(100% + 8px);
3518
- right: 0;
3519
- z-index: 2;
3520
- min-width: 220px;
3521
- display: flex;
3522
- flex-direction: column;
3523
- gap: var(--space-2);
3524
- padding: var(--space-3);
3525
- border-radius: var(--radius-lg);
3526
- border: 1px solid color-mix(in srgb, var(--color-border) 82%, var(--color-comment) 18%);
3527
- background: color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3528
- box-shadow: var(--shadow-lg);
3529
- overflow: auto;
3530
- scrollbar-width: thin;
3531
- }
3532
-
3533
- .comment-reaction-picker.is-upward {
3534
- top: auto;
3535
- bottom: calc(100% + 8px);
3536
- }
3537
-
3538
- .comment-reaction-picker-grid {
3539
- display: grid;
3540
- grid-template-columns: repeat(5, minmax(0, 1fr));
3541
- gap: var(--space-2);
3542
- }
3543
-
3544
- .comment-markdown {
3545
- color: var(--color-text);
3546
- font-size: 12px;
3547
- line-height: 1.65;
3548
- }
3549
-
3550
- .comment-markdown > :first-child {
3551
- margin-top: 0;
3552
- }
3553
-
3554
- .comment-markdown > :last-child {
3555
- margin-bottom: 0;
3556
- }
3557
-
3558
- .comment-markdown p,
3559
- .comment-markdown ul,
3560
- .comment-markdown ol,
3561
- .comment-markdown blockquote,
3562
- .comment-markdown pre,
3563
- .comment-markdown .comment-markdown-table,
3564
- .comment-markdown table {
3565
- max-width: none;
3566
- }
3567
-
3568
- .comment-markdown p,
3569
- .comment-markdown ul,
3570
- .comment-markdown ol,
3571
- .comment-markdown blockquote,
3572
- .comment-markdown pre,
3573
- .comment-markdown .comment-markdown-table {
3574
- margin: var(--space-2) 0;
3575
- }
3576
-
3577
- .comment-markdown li + li {
3578
- margin-top: 4px;
3579
- }
3580
-
3581
- .comment-markdown ul,
3582
- .comment-markdown ol {
3583
- padding-left: var(--space-5);
3584
- }
3585
-
3586
- .comment-markdown a {
3587
- color: var(--color-primary);
3588
- overflow-wrap: anywhere;
3589
- text-decoration: underline;
3590
- }
3591
-
3592
- .comment-markdown blockquote {
3593
- padding: var(--space-2) var(--space-3);
3594
- border-left: 3px solid oklch(from var(--color-comment) l c h / 0.45);
3595
- border-radius: 0 var(--radius-md) var(--radius-md) 0;
3596
- background: color-mix(in srgb, var(--color-surface-offset) 84%, var(--color-comment) 16%);
3597
- color: var(--color-text-muted);
3598
- }
3599
-
3600
- .comment-markdown code {
3601
- font-family: var(--font-mono);
3602
- font-size: 0.9em;
3603
- background: color-mix(in srgb, var(--color-surface-offset) 88%, var(--color-comment) 12%);
3604
- padding: 2px 6px;
3605
- border-radius: var(--radius-sm);
3606
- color: var(--color-primary);
3607
- }
3608
-
3609
- .comment-markdown pre {
3610
- border-radius: var(--radius-lg);
3611
- overflow: auto;
3612
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3613
- background: color-mix(in srgb, var(--color-surface) 96%, var(--color-comment) 4%);
3614
- max-width: 100%;
3615
- }
3616
-
3617
- .comment-markdown pre code {
3618
- display: block;
3619
- padding: var(--space-3);
3620
- background: none;
3621
- color: var(--color-text);
3622
- font-size: 12px;
3623
- line-height: 1.6;
3624
- white-space: pre;
3625
- width: max-content;
3626
- min-width: 100%;
3627
- }
3628
-
3629
- .comment-markdown .comment-markdown-table {
3630
- border: 1px solid color-mix(in srgb, var(--color-divider) 88%, var(--color-comment) 12%);
3631
- border-radius: var(--radius-md);
3632
- overflow: auto;
3633
- }
3634
-
3635
- .comment-markdown table {
3636
- width: 100%;
3637
- border-collapse: collapse;
3638
- }
3639
-
3640
- .comment-markdown th,
3641
- .comment-markdown td {
3642
- padding: var(--space-2) var(--space-3);
3643
- text-align: left;
3644
- border-bottom: 1px solid var(--color-divider);
3645
- font-size: 12px;
3646
- }
3647
-
3648
- .comment-markdown th {
3649
- background: color-mix(in srgb, var(--color-surface-offset) 90%, var(--color-comment) 10%);
3650
- }
3651
-
3652
- .comment-markdown-preview > :not(pre):not(blockquote):not(.comment-markdown-table) {
3653
- display: -webkit-box;
3654
- -webkit-box-orient: vertical;
3655
- -webkit-line-clamp: 4;
3656
- overflow: hidden;
3657
- }
3658
-
3659
- .comment-markdown-preview pre code {
3660
- max-height: 6.6rem;
3661
- min-width: 0;
3662
- width: 100%;
3663
- overflow: hidden;
3664
- }
3665
-
3666
- .comment-markdown-preview .comment-markdown-table {
3667
- display: none;
3668
- }
3669
-
3670
- @keyframes comment-card-in {
3671
- from {
3672
- opacity: 0;
3673
- transform: translateY(6px) scale(0.98);
3674
- }
3675
- to {
3676
- opacity: 1;
3677
- transform: translateY(0) scale(1);
3678
- }
3679
- }
3680
-
3681
- /* ===== BACKLINKS PANEL ===== */
3682
-
3683
- .backlinks-panel.hidden,
3684
- .backlinks-panel-layer.hidden {
3685
- display: none;
3686
- }
3687
- .backlinks-panel {
3688
- min-width: 0;
3689
- }
3690
- .backlinks-panel-layer {
3691
- position: absolute;
3692
- left: max(
3693
- var(--space-4),
3694
- calc((100% - min(var(--preview-content-max-width), 100%)) / 2)
3695
- );
3696
- bottom: calc(var(--space-5) + env(safe-area-inset-bottom, 0px));
3697
- width: min(320px, calc(min(var(--preview-content-max-width), 100%) - var(--space-8)));
3698
- z-index: 14;
3699
- pointer-events: none;
3700
- }
3701
- .backlinks-panel-dock {
3702
- display: flex;
3703
- flex-direction: column-reverse;
3704
- border: 1px solid var(--color-divider);
3705
- border-radius: 18px;
3706
- background: color-mix(in srgb, var(--color-surface) 84%, var(--color-surface-offset) 16%);
3707
- box-shadow: 0 14px 34px oklch(0 0 0 / 0.18);
3708
- backdrop-filter: blur(16px);
3709
- overflow: hidden;
3710
- pointer-events: auto;
3711
- transition: box-shadow 160ms ease, transform 160ms ease, background-color 160ms ease, border-color 160ms ease;
3712
- }
3713
- .backlinks-panel-dock:hover {
3714
- transform: translateY(-1px);
3715
- box-shadow: 0 18px 40px oklch(0 0 0 / 0.2);
3716
- }
3717
- .backlinks-panel-inline {
3718
- border-top: 1px solid var(--color-divider);
3719
- margin-top: var(--space-6);
3720
- padding: 0 var(--space-4);
3721
- }
3722
- .backlinks-header {
3723
- display: flex;
3724
- align-items: center;
3725
- gap: var(--space-2);
3726
- padding: var(--space-3) 0;
3727
- cursor: pointer;
3728
- user-select: none;
3729
- font-size: var(--text-sm);
3730
- font-weight: 600;
3731
- color: var(--color-text-muted);
3732
- transition: color var(--transition-interactive);
3733
- }
3734
- .backlinks-header:hover {
3735
- color: var(--color-text);
3736
- }
3737
- .backlinks-panel-dock .backlinks-header {
3738
- padding: 11px 14px;
3739
- background: color-mix(in srgb, var(--color-surface-offset) 76%, var(--color-bg) 24%);
3740
- }
3741
- .backlinks-header-empty {
3742
- cursor: default;
3743
- opacity: 0.5;
3744
- }
3745
- .backlinks-header-empty:hover {
3746
- color: var(--color-text-muted);
3747
- }
3748
- .backlinks-chevron {
3749
- flex-shrink: 0;
3750
- transition: transform var(--transition-interactive);
3751
- }
3752
- .backlinks-panel.expanded .backlinks-chevron {
3753
- transform: rotate(90deg);
3754
- }
3755
- .backlinks-toggle {
3756
- flex: 1;
3757
- min-width: 0;
3758
- overflow: hidden;
3759
- text-overflow: ellipsis;
3760
- white-space: nowrap;
3761
- }
3762
- .backlinks-count {
3763
- font-size: var(--text-xs);
3764
- font-weight: 600;
3765
- color: var(--color-primary);
3766
- background: oklch(from var(--color-primary) l c h / 0.14);
3767
- border-radius: var(--radius-full);
3768
- padding: 1px 7px;
3769
- min-width: 22px;
3770
- text-align: center;
3771
- }
3772
- .backlinks-count:empty {
3773
- display: none;
3774
- }
3775
- .backlinks-body {
3776
- overflow: hidden;
3777
- max-height: 0;
3778
- transition: max-height 200ms ease;
3779
- }
3780
- .backlinks-panel-inline.expanded .backlinks-body {
3781
- max-height: 600px;
3782
- overflow-y: auto;
3783
- }
3784
- .backlinks-panel-dock .backlinks-body {
3785
- background: color-mix(in srgb, var(--color-surface) 94%, var(--color-surface-offset) 6%);
3786
- }
3787
- .backlinks-panel-dock.expanded .backlinks-body {
3788
- max-height: min(44vh, 400px);
3789
- overflow-y: auto;
3790
- border-bottom: 1px solid color-mix(in srgb, var(--color-divider) 78%, var(--color-primary) 22%);
3791
- }
3792
- .backlinks-panel-dock.expanded {
3793
- border-color: color-mix(in srgb, var(--color-divider) 72%, var(--color-primary) 28%);
3794
- background: color-mix(in srgb, var(--color-surface) 90%, var(--color-surface-offset) 10%);
3795
- }
3796
- .backlinks-list {
3797
- padding-bottom: var(--space-4);
3798
- display: flex;
3799
- flex-direction: column;
3800
- gap: var(--space-2);
3801
- }
3802
- .backlinks-panel-dock .backlinks-list {
3803
- padding: 10px;
3804
- }
3805
- .backlink-item {
3806
- display: block;
3807
- width: 100%;
3808
- text-align: left;
3809
- padding: var(--space-3);
3810
- border-radius: var(--radius-md);
3811
- border: 1px solid var(--color-divider);
3812
- background: var(--color-surface);
3813
- cursor: pointer;
3814
- transition: border-color var(--transition-interactive), background var(--transition-interactive);
3815
- }
3816
- .backlinks-panel-dock .backlink-item {
3817
- border-radius: 12px;
3818
- background: color-mix(in srgb, var(--color-surface) 88%, var(--color-surface-offset) 12%);
3819
- }
3820
- .backlink-item:hover {
3821
- border-color: var(--color-primary);
3822
- background: oklch(from var(--color-primary) l c h / 0.04);
3823
- }
3824
- .backlink-item:focus-visible {
3825
- outline: none;
3826
- box-shadow: 0 0 0 2px oklch(from var(--color-primary) l c h / 0.45);
3827
- }
3828
- .backlink-file-name {
3829
- display: flex;
3830
- align-items: center;
3831
- gap: var(--space-2);
3832
- font-size: var(--text-sm);
3833
- font-weight: 600;
3834
- color: var(--color-text);
3835
- margin-bottom: var(--space-1);
3836
- }
3837
- .backlink-icon {
3838
- flex-shrink: 0;
3839
- color: var(--color-text-muted);
3840
- }
3841
- .backlink-dir {
3842
- font-size: var(--text-xs);
3843
- font-weight: 400;
3844
- color: var(--color-text-faint);
3845
- margin-left: auto;
3846
- }
3847
- .backlink-context {
3848
- font-size: var(--text-xs);
3849
- color: var(--color-text-muted);
3850
- line-height: 1.6;
3851
- padding-left: 22px;
3852
- overflow: hidden;
3853
- text-overflow: ellipsis;
3854
- white-space: nowrap;
3855
- }
3856
- .backlink-more {
3857
- font-style: italic;
3858
- color: var(--color-text-faint);
3859
- }
3860
-
3861
- @media (min-width: 769px) {
3862
- .backlinks-panel-inline {
3863
- display: none !important;
3864
- }
3865
- }
3866
-
3867
- .outline-panel {
3868
- width: 220px;
3869
- flex-shrink: 0;
3870
- border-left: 1px solid var(--color-divider);
3871
- background: var(--color-surface-offset);
3872
- display: flex;
3873
- flex-direction: column;
3874
- overflow: hidden;
3875
- transition: width 0.2s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.15s ease;
3876
- }
3877
- .outline-panel.hidden {
3878
- width: 0;
3879
- border-left: none;
3880
- opacity: 0;
3881
- pointer-events: none;
3882
- }
3883
-
3884
- .outline-header {
3885
- padding: var(--space-2) var(--space-3);
3886
- border-bottom: 1px solid var(--color-divider);
3887
- flex-shrink: 0;
3888
- }
3889
- .outline-title {
3890
- font-size: 11px;
3891
- font-weight: 600;
3892
- text-transform: uppercase;
3893
- letter-spacing: 0.05em;
3894
- color: var(--color-text-muted);
3895
- }
3896
-
3897
- .outline-nav {
3898
- flex: 1;
3899
- overflow-y: auto;
3900
- overflow-x: hidden;
3901
- padding: var(--space-2) 0;
3902
- }
3903
- .outline-nav::-webkit-scrollbar {
3904
- width: 4px;
3905
- }
3906
- .outline-nav::-webkit-scrollbar-thumb {
3907
- background: var(--color-surface-dynamic);
3908
- border-radius: var(--radius-full);
3909
- }
3910
-
3911
- .outline-item {
3912
- display: block;
3913
- width: 100%;
3914
- text-align: left;
3915
- padding: 3px var(--space-3);
3916
- font-size: 12px;
3917
- line-height: 1.5;
3918
- color: var(--color-text-muted);
3919
- background: none;
3920
- border: none;
3921
- border-left: 2px solid transparent;
3922
- cursor: pointer;
3923
- white-space: nowrap;
3924
- overflow: hidden;
3925
- text-overflow: ellipsis;
3926
- transition: color var(--transition-interactive), border-color var(--transition-interactive), background var(--transition-interactive);
3927
- font-family: var(--font-body);
3928
- }
3929
- .outline-item:hover {
3930
- color: var(--color-text);
3931
- background: var(--color-surface-dynamic);
3932
- }
3933
- .outline-item.active {
3934
- color: var(--color-primary);
3935
- border-left-color: var(--color-primary);
3936
- background: oklch(from var(--color-primary) l c h / 0.06);
3937
- }
3938
-
3939
- .outline-item[data-level="1"] { padding-left: var(--space-3); font-weight: 600; }
3940
- .outline-item[data-level="2"] { padding-left: calc(var(--space-3) + 12px); }
3941
- .outline-item[data-level="3"] { padding-left: calc(var(--space-3) + 24px); font-size: 11px; }
3942
- .outline-item[data-level="4"] { padding-left: calc(var(--space-3) + 36px); font-size: 11px; }
3943
- .outline-item[data-level="5"] { padding-left: calc(var(--space-3) + 48px); font-size: 11px; }
3944
- .outline-item[data-level="6"] { padding-left: calc(var(--space-3) + 60px); font-size: 11px; }
3945
-
3946
- .outline-empty {
3947
- padding: var(--space-4) var(--space-3);
3948
- font-size: 12px;
3949
- color: var(--color-text-faint);
3950
- font-style: italic;
3951
- }
3952
-
3953
-
3954
- /* ===== VIEW MODES ===== */
3955
-
3956
- .editor-layout[data-view="editor"] .preview-pane,
3957
- .editor-layout[data-view="editor"] .resizer {
3958
- display: none;
3959
- }
3960
- .editor-layout[data-view="preview"] .editor-pane,
3961
- .editor-layout[data-view="preview"] .resizer {
3962
- display: none;
3963
- }
3964
- .editor-layout[data-view="preview"] .preview-pane {
3965
- flex: 1;
3966
- }
3967
- .editor-layout[data-view="preview"] .preview-body {
3968
- --preview-content-max-width: 1080px;
3969
- }
3970
- .editor-layout[data-view="preview"] .preview-content {
3971
- max-width: 1080px;
3972
- }
3973
- .editor-layout[data-view="preview"] .preview-content.is-excalidraw-file-preview {
3974
- max-width: none;
3975
- }
3976
- .editor-layout[data-view="preview"] .preview-content.is-image-file-preview {
3977
- max-width: none;
3978
- }
3979
- .editor-layout[data-view="preview"] .preview-content.is-mermaid-file-preview {
3980
- max-width: none;
3981
- }
3982
- .editor-layout[data-view="preview"] .preview-content.is-plantuml-file-preview {
3983
- max-width: none;
3984
- }
3985
- .editor-layout[data-view="preview"] .preview-content p {
3986
- max-width: 84ch;
3987
- }
3988
-
3989
- .editor-layout[data-view="preview"] .preview-content p:has(> .excalidraw-embed-placeholder:only-child) {
3990
- max-width: none;
3991
- }
3992
-
3993
- .editor-layout[data-view="preview"] .preview-content p:has(> .video-embed-placeholder:only-child) {
3994
- max-width: none;
3995
- }
3996
-
3997
- .editor-layout[data-view="preview"] .preview-content p:has(> .mermaid-shell:only-child) {
3998
- max-width: none;
3999
- }
4000
-
4001
- .editor-layout[data-view="preview"] .preview-content p:has(> .plantuml-shell:only-child) {
4002
- max-width: none;
4003
- }
4004
- @media (min-width: 769px) {
4005
- .preview-body > .comments-drawer,
4006
- .preview-body > .outline-panel {
4007
- position: absolute;
4008
- top: var(--preview-floating-sidebar-gap);
4009
- right: var(--preview-floating-sidebar-gap);
4010
- bottom: var(--preview-floating-sidebar-gap);
4011
- z-index: 20;
4012
- overflow: hidden;
4013
- border: 1px solid var(--color-divider);
4014
- border-radius: calc(var(--radius-lg) + 2px);
4015
- box-shadow: var(--shadow-lg);
4016
- backdrop-filter: blur(14px);
4017
- }
4018
-
4019
- .preview-body > .comments-drawer {
4020
- width: var(--preview-floating-comments-width);
4021
- min-width: 240px;
4022
- border-left: 1px solid var(--color-divider);
4023
- }
4024
-
4025
- .preview-body > .outline-panel {
4026
- width: var(--preview-floating-outline-width);
4027
- border-left: 1px solid var(--color-divider);
4028
- }
4029
-
4030
- .preview-body > .comments-drawer.hidden,
4031
- .preview-body > .outline-panel.hidden {
4032
- display: flex !important;
4033
- opacity: 0;
4034
- pointer-events: none;
4035
- transform: translateX(12px);
4036
- visibility: hidden;
4037
- }
4038
-
4039
- .preview-body > .comments-drawer:not(.hidden),
4040
- .preview-body > .outline-panel:not(.hidden) {
4041
- opacity: 1;
4042
- transform: translateX(0);
4043
- visibility: visible;
4044
- }
4045
-
4046
- .preview-body:has(> .outline-panel:not(.hidden)) > .comments-drawer:not(.hidden) {
4047
- right: calc(
4048
- var(--preview-floating-sidebar-gap) * 2
4049
- + var(--preview-floating-outline-width)
4050
- );
4051
- }
4052
- }
4053
- .editor-layout[data-view="editor"] .editor-pane {
4054
- flex: 1;
4055
- }
4056
-
4057
-
4058
- /* ===== TOAST ===== */
4059
-
4060
- .toast-container {
4061
- position: fixed;
4062
- bottom: var(--space-4);
4063
- right: var(--space-4);
4064
- display: flex;
4065
- flex-direction: column;
4066
- gap: var(--space-2);
4067
- z-index: 100;
4068
- pointer-events: none;
4069
- }
4070
- .toast {
4071
- pointer-events: auto;
4072
- padding: var(--space-2) var(--space-4);
4073
- background: var(--color-surface-2);
4074
- border: 1px solid var(--color-border);
4075
- border-radius: var(--radius-md);
4076
- font-size: var(--text-xs);
4077
- color: var(--color-text);
4078
- box-shadow: var(--shadow-md);
4079
- max-width: 320px;
4080
-
4081
- opacity: 1;
4082
- transform: translateX(0) scale(1);
4083
- 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;
4084
- }
4085
-
4086
- @starting-style {
4087
- .toast {
4088
- opacity: 0;
4089
- transform: translateX(8px) scale(0.96);
4090
- }
4091
- }
4092
-
4093
- .toast.leaving {
4094
- opacity: 0;
4095
- transform: translateX(8px) scale(0.96);
4096
- pointer-events: none;
4097
- }
4098
-
4099
-
4100
- /* ===== MOBILE / RESPONSIVE ===== */
4101
-
4102
- @media (max-width: 768px) {
4103
- /* Keep mobile text inputs at 16px to prevent iOS Safari focus zoom. */
4104
- .input,
4105
- .sidebar-search-input,
4106
- .qs-input,
4107
- .chat-input,
4108
- .editor-container .cm-editor {
4109
- font-size: 16px;
4110
- }
4111
-
4112
- .sidebar {
4113
- position: fixed;
4114
- top: 0;
4115
- left: 0;
4116
- bottom: 0;
4117
- z-index: 100;
4118
- box-shadow: var(--shadow-lg);
4119
- }
4120
-
4121
- .sidebar.collapsed {
4122
- display: none;
4123
- }
4124
-
4125
- .toolbar-btn-label { display: none; }
4126
- .toolbar-center { display: none; }
4127
- .mobile-view-toggle { display: flex !important; }
4128
- .toolbar-name-btn { max-width: none; }
4129
- .sidebar-close-btn { display: inline-flex; }
4130
- .sidebar-tabs { padding: 0 var(--space-1); }
4131
- .sidebar-tab { padding: var(--space-2); }
4132
-
4133
- .editor-layout {
4134
- flex-direction: column;
4135
- }
4136
- .resizer {
4137
- display: none !important;
4138
- }
4139
-
4140
- /* On mobile, hide the non-active pane */
4141
- .editor-layout[data-view="split"] .preview-pane {
4142
- display: none;
4143
- }
4144
- .editor-layout[data-view="split"] .editor-pane {
4145
- flex: 1;
4146
- }
4147
-
4148
- .preview-content {
4149
- padding: var(--space-4);
4150
- }
4151
-
4152
- .backlinks-panel-layer {
4153
- display: none !important;
4154
- }
4155
-
4156
- .diff-toolbar {
4157
- flex-wrap: wrap;
4158
- padding: var(--space-2) var(--space-3);
4159
- }
4160
-
4161
- .diff-toolbar-left,
4162
- .diff-toolbar-right {
4163
- width: 100%;
4164
- justify-content: space-between;
4165
- }
4166
-
4167
- .diff-toolbar-left {
4168
- flex-wrap: wrap;
4169
- }
4170
-
4171
- .diff-toolbar-actions {
4172
- width: 100%;
4173
- justify-content: space-between;
4174
- }
4175
-
4176
- .diff-toolbar-actions-group-git {
4177
- flex: 1;
4178
- }
4179
-
4180
- .diff-toolbar-actions-group-git .diff-action-btn {
4181
- flex: 1;
4182
- min-width: 0;
4183
- }
4184
-
4185
- .diff-toolbar-actions-divider {
4186
- display: none;
4187
- }
4188
-
4189
- .diff-mode-btn {
4190
- min-width: 74px;
4191
- }
4192
-
4193
- .diff-split-row {
4194
- grid-template-columns: 1fr;
4195
- }
4196
-
4197
- .diff-split-line:first-child {
4198
- border-right: none;
4199
- border-bottom: 1px solid var(--color-divider);
4200
- }
4201
-
4202
- .markdown-toolbar {
4203
- overflow-x: auto;
4204
- flex-wrap: nowrap;
4205
- scrollbar-width: thin;
4206
- }
4207
-
4208
- .outline-panel {
4209
- position: absolute;
4210
- top: 0;
4211
- right: 0;
4212
- bottom: 0;
4213
- left: 0;
4214
- width: auto;
4215
- border-left: none;
4216
- border-top: 1px solid var(--color-divider);
4217
- background: oklch(from var(--color-surface) l c h / 0.98);
4218
- backdrop-filter: blur(10px);
4219
- box-shadow: var(--shadow-lg);
4220
- z-index: 6;
4221
- }
4222
- .outline-panel.hidden {
4223
- display: none !important;
4224
- }
4225
- #outlineToggle {
4226
- display: inline-flex !important;
4227
- }
4228
-
4229
- .toolbar {
4230
- padding: 0 var(--space-2);
4231
- }
4232
- .toolbar-room-name {
4233
- font-size: var(--text-xs);
4234
- max-width: 120px;
4235
- }
4236
-
4237
- .chat-panel {
4238
- position: fixed;
4239
- top: calc(var(--toolbar-h) + var(--space-2));
4240
- right: var(--space-2);
4241
- left: var(--space-2);
4242
- width: auto;
4243
- max-height: calc(100vh - var(--toolbar-h) - var(--space-6));
4244
- }
4245
-
4246
- .chat-form {
4247
- align-items: stretch;
4248
- }
4249
-
4250
- .chat-send-btn {
4251
- padding-inline: var(--space-3);
4252
- }
4253
-
4254
- .comment-card {
4255
- width: min(100vw - 32px, 520px);
4256
- max-height: min(72vh, 680px);
4257
- }
4258
-
4259
- .comment-thread-card-actions {
4260
- width: 100%;
4261
- margin-left: 0;
4262
- justify-content: flex-start;
4263
- }
4264
-
4265
- .comment-reaction-picker {
4266
- left: 0;
4267
- right: auto;
4268
- min-width: min(240px, calc(100vw - 64px));
4269
- }
4270
- }
4271
-
4272
- @media (min-width: 769px) {
4273
- .mobile-view-toggle { display: none !important; }
4274
- }
4275
-
4276
-
4277
- /* ===== LIGHT MODE OVERRIDES ===== */
4278
-
4279
- [data-theme="light"] .preview-content pre,
4280
- [data-theme="light"] .preview-content pre code,
4281
- [data-theme="light"] .hljs {
4282
- background: var(--color-surface) !important;
4283
- }
4284
-
4285
-
4286
- /* ===== SCROLLBAR STYLING ===== */
4287
-
4288
- .preview-container,
4289
- .cm-scroller,
4290
- .file-tree,
4291
- .git-panel,
4292
- .diff-scroll,
4293
- .comments-drawer-list,
4294
- .comments-drawer-item-quote,
4295
- .comment-card-quote,
4296
- .comment-card-scroll,
4297
- .markdown-toolbar,
4298
- .comment-markdown pre,
4299
- .comment-markdown .comment-markdown-table,
4300
- .preview-content pre,
4301
- .preview-content .table-wrapper,
4302
- .preview-content .mermaid-frame,
4303
- .preview-content .plantuml-frame,
4304
- .plantuml-maximized-root .plantuml-frame {
4305
- scrollbar-width: thin;
4306
- scrollbar-color: var(--color-surface-dynamic) transparent;
4307
- }
4308
-
4309
- .preview-container::-webkit-scrollbar,
4310
- .cm-scroller::-webkit-scrollbar,
4311
- .file-tree::-webkit-scrollbar,
4312
- .git-panel::-webkit-scrollbar,
4313
- .diff-scroll::-webkit-scrollbar,
4314
- .comments-drawer-list::-webkit-scrollbar,
4315
- .comments-drawer-item-quote::-webkit-scrollbar,
4316
- .comment-card-quote::-webkit-scrollbar,
4317
- .comment-card-scroll::-webkit-scrollbar,
4318
- .markdown-toolbar::-webkit-scrollbar,
4319
- .comment-markdown pre::-webkit-scrollbar,
4320
- .comment-markdown .comment-markdown-table::-webkit-scrollbar,
4321
- .preview-content pre::-webkit-scrollbar,
4322
- .preview-content .table-wrapper::-webkit-scrollbar,
4323
- .preview-content .mermaid-frame::-webkit-scrollbar,
4324
- .preview-content .plantuml-frame::-webkit-scrollbar,
4325
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar {
4326
- width: 8px;
4327
- height: 8px;
4328
- }
4329
- .preview-container::-webkit-scrollbar-track,
4330
- .cm-scroller::-webkit-scrollbar-track,
4331
- .file-tree::-webkit-scrollbar-track,
4332
- .git-panel::-webkit-scrollbar-track,
4333
- .diff-scroll::-webkit-scrollbar-track,
4334
- .comments-drawer-list::-webkit-scrollbar-track,
4335
- .comments-drawer-item-quote::-webkit-scrollbar-track,
4336
- .comment-card-quote::-webkit-scrollbar-track,
4337
- .comment-card-scroll::-webkit-scrollbar-track,
4338
- .markdown-toolbar::-webkit-scrollbar-track,
4339
- .comment-markdown pre::-webkit-scrollbar-track,
4340
- .comment-markdown .comment-markdown-table::-webkit-scrollbar-track,
4341
- .preview-content pre::-webkit-scrollbar-track,
4342
- .preview-content .table-wrapper::-webkit-scrollbar-track,
4343
- .preview-content .mermaid-frame::-webkit-scrollbar-track,
4344
- .preview-content .plantuml-frame::-webkit-scrollbar-track,
4345
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar-track {
4346
- background: transparent;
4347
- }
4348
- .preview-container::-webkit-scrollbar-thumb,
4349
- .cm-scroller::-webkit-scrollbar-thumb,
4350
- .file-tree::-webkit-scrollbar-thumb,
4351
- .git-panel::-webkit-scrollbar-thumb,
4352
- .diff-scroll::-webkit-scrollbar-thumb,
4353
- .comments-drawer-list::-webkit-scrollbar-thumb,
4354
- .comments-drawer-item-quote::-webkit-scrollbar-thumb,
4355
- .comment-card-quote::-webkit-scrollbar-thumb,
4356
- .comment-card-scroll::-webkit-scrollbar-thumb,
4357
- .markdown-toolbar::-webkit-scrollbar-thumb,
4358
- .comment-markdown pre::-webkit-scrollbar-thumb,
4359
- .comment-markdown .comment-markdown-table::-webkit-scrollbar-thumb,
4360
- .preview-content pre::-webkit-scrollbar-thumb,
4361
- .preview-content .table-wrapper::-webkit-scrollbar-thumb,
4362
- .preview-content .mermaid-frame::-webkit-scrollbar-thumb,
4363
- .preview-content .plantuml-frame::-webkit-scrollbar-thumb,
4364
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar-thumb {
4365
- background: var(--color-surface-dynamic);
4366
- border-radius: var(--radius-full);
4367
- }
4368
- .preview-container::-webkit-scrollbar-thumb:hover,
4369
- .cm-scroller::-webkit-scrollbar-thumb:hover,
4370
- .file-tree::-webkit-scrollbar-thumb:hover,
4371
- .git-panel::-webkit-scrollbar-thumb:hover,
4372
- .diff-scroll::-webkit-scrollbar-thumb:hover,
4373
- .comments-drawer-list::-webkit-scrollbar-thumb:hover,
4374
- .comments-drawer-item-quote::-webkit-scrollbar-thumb:hover,
4375
- .comment-card-quote::-webkit-scrollbar-thumb:hover,
4376
- .comment-card-scroll::-webkit-scrollbar-thumb:hover,
4377
- .markdown-toolbar::-webkit-scrollbar-thumb:hover,
4378
- .comment-markdown pre::-webkit-scrollbar-thumb:hover,
4379
- .comment-markdown .comment-markdown-table::-webkit-scrollbar-thumb:hover,
4380
- .preview-content pre::-webkit-scrollbar-thumb:hover,
4381
- .preview-content .table-wrapper::-webkit-scrollbar-thumb:hover,
4382
- .preview-content .mermaid-frame::-webkit-scrollbar-thumb:hover,
4383
- .preview-content .plantuml-frame::-webkit-scrollbar-thumb:hover,
4384
- .plantuml-maximized-root .plantuml-frame::-webkit-scrollbar-thumb:hover {
4385
- background: var(--color-text-faint);
4386
- }
4387
-
4388
- /* ===== WIKI-LINK AUTOCOMPLETE ===== */
4389
-
4390
- .cm-tooltip-autocomplete {
4391
- background: var(--color-surface) !important;
4392
- border: 1px solid var(--color-divider) !important;
4393
- border-radius: var(--radius-md) !important;
4394
- box-shadow: var(--shadow-md) !important;
4395
- overflow: hidden;
4396
- font-family: var(--font-body);
4397
- font-size: var(--text-sm);
4398
- }
4399
-
4400
- .cm-tooltip-autocomplete > ul {
4401
- max-height: 240px !important;
4402
- padding: var(--space-1) 0;
4403
- }
4404
-
4405
- .cm-tooltip-autocomplete > ul > li {
4406
- padding: var(--space-2) var(--space-3) !important;
4407
- line-height: 1.4;
4408
- display: flex;
4409
- align-items: center;
4410
- gap: var(--space-2);
4411
- }
4412
-
4413
- .cm-tooltip-autocomplete > ul > li[aria-selected] {
4414
- background: var(--color-primary) !important;
4415
- color: var(--color-text-inverse) !important;
4416
- }
4417
-
4418
- .cm-tooltip-autocomplete .cm-completionLabel {
4419
- flex: 1;
4420
- overflow: hidden;
4421
- text-overflow: ellipsis;
4422
- white-space: nowrap;
4423
- }
4424
-
4425
- .cm-tooltip-autocomplete .cm-completionDetail {
4426
- font-size: var(--text-xs);
4427
- opacity: 0.6;
4428
- margin-left: auto;
4429
- white-space: nowrap;
4430
- }
4431
-
4432
- .cm-tooltip-autocomplete > ul > li[aria-selected] .cm-completionDetail {
4433
- opacity: 0.85;
4434
- }
4435
-
4436
- .cm-completionIcon-text::after {
4437
- content: '📄';
4438
- font-size: 13px;
4439
- }
4440
-
4441
- /* ===== QUICK SWITCHER (Cmd+K) ===== */
4442
-
4443
- .qs-overlay {
4444
- position: fixed;
4445
- inset: 0;
4446
- z-index: 9999;
4447
- display: flex;
4448
- justify-content: center;
4449
- padding-top: min(20vh, 160px);
4450
- background: oklch(0.1 0 0 / 0.5);
4451
- backdrop-filter: blur(4px);
4452
- opacity: 0;
4453
- visibility: hidden;
4454
- transition: opacity 120ms ease, visibility 120ms ease, display 120ms ease allow-discrete;
4455
- }
4456
-
4457
- .qs-overlay.visible {
4458
- opacity: 1;
4459
- visibility: visible;
4460
- }
4461
-
4462
- @starting-style {
4463
- .qs-overlay.visible {
4464
- opacity: 0;
4465
- }
4466
- }
4467
-
4468
- .qs-modal {
4469
- width: min(560px, calc(100vw - 32px));
4470
- max-height: min(440px, 60vh);
4471
- display: flex;
4472
- flex-direction: column;
4473
- background: var(--color-surface);
4474
- border: 1px solid var(--color-border);
4475
- border-radius: var(--radius-lg);
4476
- box-shadow: var(--shadow-lg);
4477
- overflow: hidden;
4478
- transform: translateY(-8px) scale(0.98);
4479
- transition: transform 120ms cubic-bezier(0.16, 1, 0.3, 1);
4480
- }
4481
-
4482
- .qs-overlay.visible .qs-modal {
4483
- transform: translateY(0) scale(1);
4484
- }
4485
-
4486
- @starting-style {
4487
- .qs-overlay.visible .qs-modal {
4488
- transform: translateY(-8px) scale(0.98);
4489
- }
4490
- }
4491
-
4492
- .qs-input-wrap {
4493
- display: flex;
4494
- align-items: center;
4495
- gap: var(--space-2);
4496
- padding: var(--space-3) var(--space-4);
4497
- border-bottom: 1px solid var(--color-divider);
4498
- }
4499
-
4500
- .qs-search-icon {
4501
- flex-shrink: 0;
4502
- color: var(--color-text-muted);
4503
- }
4504
-
4505
- .qs-input {
4506
- flex: 1;
4507
- border: none;
4508
- outline: none;
4509
- background: transparent;
4510
- font-size: var(--text-sm);
4511
- font-family: var(--font-body);
4512
- color: var(--color-text);
4513
- line-height: 1.5;
4514
- }
4515
-
4516
- .qs-input::placeholder {
4517
- color: var(--color-text-faint);
4518
- }
4519
-
4520
- .qs-kbd {
4521
- flex-shrink: 0;
4522
- font-family: var(--font-body);
4523
- font-size: 11px;
4524
- line-height: 1;
4525
- padding: 3px 6px;
4526
- border-radius: var(--radius-sm);
4527
- background: var(--color-surface-offset);
4528
- border: 1px solid var(--color-divider);
4529
- color: var(--color-text-muted);
4530
- text-transform: uppercase;
4531
- letter-spacing: 0.03em;
4532
- }
4533
-
4534
- .qs-results {
4535
- overflow-y: auto;
4536
- overscroll-behavior: contain;
4537
- padding: var(--space-1) 0;
4538
- }
4539
-
4540
- .qs-result-item {
4541
- display: flex;
4542
- align-items: center;
4543
- gap: var(--space-2);
4544
- width: 100%;
4545
- padding: var(--space-2) var(--space-4);
4546
- border: none;
4547
- background: transparent;
4548
- color: var(--color-text);
4549
- font-size: var(--text-sm);
4550
- font-family: var(--font-body);
4551
- text-align: left;
4552
- cursor: pointer;
4553
- transition: background 60ms ease;
4554
- }
4555
-
4556
- .qs-result-item:hover,
4557
- .qs-result-item.selected {
4558
- background: var(--color-surface-offset);
4559
- }
4560
-
4561
- .qs-result-item.selected {
4562
- background: var(--color-primary-highlight);
4563
- }
4564
-
4565
- [data-theme="dark"] .qs-result-item.selected {
4566
- background: oklch(from var(--color-primary) l c h / 0.18);
4567
- }
4568
-
4569
- .qs-result-icon {
4570
- flex-shrink: 0;
4571
- color: var(--color-text-muted);
4572
- }
4573
-
4574
- .qs-result-name {
4575
- flex: 1;
4576
- overflow: hidden;
4577
- text-overflow: ellipsis;
4578
- white-space: nowrap;
4579
- }
4580
-
4581
- .qs-result-name mark {
4582
- background: oklch(from var(--color-primary) l c h / 0.2);
4583
- color: var(--color-primary);
4584
- border-radius: 2px;
4585
- padding: 0 1px;
4586
- }
4587
-
4588
- .qs-result-path {
4589
- flex-shrink: 0;
4590
- font-size: var(--text-xs);
4591
- color: var(--color-text-faint);
4592
- max-width: 200px;
4593
- overflow: hidden;
4594
- text-overflow: ellipsis;
4595
- white-space: nowrap;
4596
- }
4597
-
4598
- .qs-hint {
4599
- padding: var(--space-4) var(--space-4);
4600
- text-align: center;
4601
- font-size: var(--text-xs);
4602
- color: var(--color-text-muted);
4603
- }
4604
-
4605
- .qs-hint.hidden {
4606
- display: none;
4607
- }
4608
-
4609
- /* ── Excalidraw Embeds ───────────────────────────────────────────── */
4610
-
4611
- .diagram-preview-shell {
4612
- margin: var(--space-4) 0;
4613
- border: 1px solid var(--color-border);
4614
- border-radius: 8px;
4615
- overflow: hidden;
4616
- background: var(--color-surface);
4617
- width: 100%;
4618
- max-width: 100%;
4619
- box-sizing: border-box;
4620
- }
4621
-
4622
- .diagram-preview-placeholder-card {
4623
- display: flex;
4624
- align-items: center;
4625
- justify-content: space-between;
4626
- gap: var(--space-3);
4627
- padding: var(--space-4);
4628
- background: var(--color-surface);
4629
- }
4630
-
4631
- .diagram-preview-placeholder-copy {
4632
- display: grid;
4633
- gap: 2px;
4634
- }
4635
-
4636
- .diagram-preview-placeholder-copy strong {
4637
- font-size: var(--text-sm);
4638
- }
4639
-
4640
- .diagram-preview-placeholder-copy span {
4641
- color: var(--color-text-muted);
4642
- font-size: var(--text-xs);
4643
- }
4644
-
4645
- .diagram-preview-placeholder-btn {
4646
- flex-shrink: 0;
4647
- appearance: none;
4648
- border: 1px solid var(--color-border);
4649
- background: var(--color-surface-2);
4650
- color: var(--color-text);
4651
- font-size: var(--text-xs);
4652
- padding: 4px 10px;
4653
- border-radius: 4px;
4654
- cursor: pointer;
4655
- }
4656
-
4657
- .diagram-preview-placeholder-btn:hover {
4658
- background: var(--color-surface-offset);
4659
- }
4660
-
4661
- .diagram-preview-toolbar {
4662
- display: flex;
4663
- align-items: center;
4664
- gap: var(--space-2);
4665
- padding: var(--space-2) var(--space-3);
4666
- background: var(--color-surface-raised);
4667
- border-bottom: 1px solid var(--color-border);
4668
- font-size: var(--text-xs);
4669
- color: var(--color-text-muted);
4670
- user-select: none;
4671
- min-width: 0;
4672
- flex-wrap: wrap;
4673
- }
4674
-
4675
- .diagram-preview-action-btn {
4676
- flex-shrink: 0;
4677
- appearance: none;
4678
- border: 1px solid var(--color-border);
4679
- background: var(--color-surface-2);
4680
- color: var(--color-text);
4681
- font-size: var(--text-xs);
4682
- padding: 2px 8px;
4683
- border-radius: 4px;
4684
- cursor: pointer;
4685
- box-shadow: inset 0 1px 0 oklch(from var(--color-text) l c h / 0.04);
4686
- transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease;
4687
- }
4688
-
4689
- .diagram-preview-action-btn.is-icon-only {
4690
- display: inline-flex;
4691
- align-items: center;
4692
- justify-content: center;
4693
- width: 30px;
4694
- min-width: 30px;
4695
- height: 30px;
4696
- padding: 0;
4697
- }
4698
-
4699
- .diagram-preview-action-btn.is-icon-only svg {
4700
- width: 14px;
4701
- height: 14px;
4702
- display: block;
4703
- }
4704
-
4705
- .diagram-preview-action-btn:hover:not(:disabled) {
4706
- background: var(--color-surface-offset);
4707
- border-color: oklch(from var(--color-border) calc(l + 0.08) c h);
4708
- }
4709
-
4710
- .diagram-preview-action-btn:disabled {
4711
- opacity: 0.5;
4712
- cursor: not-allowed;
4713
- }
4714
-
4715
- .diagram-preview-zoom-label {
4716
- min-width: 52px;
4717
- text-align: center;
4718
- color: var(--color-text-muted);
4719
- font-size: var(--text-xs);
4720
- font-weight: 500;
4721
- font-variant-numeric: tabular-nums;
4722
- }
4723
-
4724
- .diagram-preview-frame {
4725
- overflow: auto;
4726
- padding: var(--space-3);
4727
- background: transparent;
4728
- overscroll-behavior: contain;
4729
- max-height: min(70vh, 720px);
4730
- min-width: 0;
4731
- max-width: 100%;
4732
- }
4733
-
4734
- .excalidraw-embed,
4735
- .excalidraw-embed-placeholder {
4736
- transition: box-shadow 0.18s ease;
4737
- display: block;
4738
- }
4739
-
4740
- .excalidraw-embed-overlay-root {
4741
- position: absolute;
4742
- inset: 0;
4743
- pointer-events: none;
4744
- z-index: 1;
4745
- }
4746
-
4747
- .excalidraw-maximized-root {
4748
- position: fixed;
4749
- inset: 0;
4750
- pointer-events: none;
4751
- z-index: 171;
4752
- }
4753
-
4754
- body.excalidraw-maximized-open {
4755
- overflow: hidden;
4756
- }
4757
-
4758
- body.excalidraw-maximized-open::before {
4759
- content: '';
4760
- position: fixed;
4761
- inset: 0;
4762
- background: oklch(0.1 0 0 / 0.42);
4763
- backdrop-filter: blur(2px);
4764
- z-index: 170;
4765
- }
4766
-
4767
- body.excalidraw-maximized-open .excalidraw-maximized-root {
4768
- z-index: 171;
4769
- }
4770
-
4771
- body.excalidraw-maximized-open .resizer {
4772
- opacity: 0;
4773
- pointer-events: none;
4774
- }
4775
-
4776
- .excalidraw-embed:hover {
4777
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
4778
- }
4779
-
4780
- [data-theme="dark"] .excalidraw-embed:hover {
4781
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
4782
- }
4783
-
4784
- .excalidraw-embed-placeholder.is-hydrated {
4785
- visibility: hidden;
4786
- }
4787
-
4788
- .excalidraw-embed-header {
4789
- gap: var(--space-2);
4790
- }
4791
-
4792
- .excalidraw-embed-icon {
4793
- display: flex;
4794
- align-items: center;
4795
- color: var(--color-primary);
4796
- flex-shrink: 0;
4797
- }
4798
-
4799
- .excalidraw-embed-label {
4800
- flex: 1;
4801
- min-width: 0;
4802
- overflow: hidden;
4803
- text-overflow: ellipsis;
4804
- white-space: nowrap;
4805
- font-weight: 500;
4806
- }
4807
-
4808
- .excalidraw-embed-iframe {
4809
- display: block;
4810
- width: 100%;
4811
- border: none;
4812
- background: white;
4813
- min-height: 200px;
4814
- }
4815
-
4816
- [data-theme="dark"] .excalidraw-embed-iframe {
4817
- background: #121212;
4818
- }
4819
-
4820
- .excalidraw-embed.is-maximized {
4821
- position: fixed;
4822
- inset: var(--space-4);
4823
- width: auto;
4824
- margin: 0;
4825
- z-index: 172;
4826
- max-width: none;
4827
- box-sizing: border-box;
4828
- border-radius: 10px;
4829
- box-shadow: 0 10px 40px rgba(0, 0, 0, 0.35);
4830
- display: flex;
4831
- flex-direction: column;
4832
- }
4833
-
4834
- .excalidraw-embed.is-maximized .excalidraw-embed-header {
4835
- flex-shrink: 0;
4836
- }
4837
-
4838
- .excalidraw-embed.is-maximized .excalidraw-embed-iframe {
4839
- height: auto !important;
4840
- min-height: 0;
4841
- flex: 1;
4842
- }
4843
-
4844
- .excalidraw-embed.is-maximized .excalidraw-embed-resizer {
4845
- display: none;
4846
- }
4847
-
4848
- [data-theme="dark"] .excalidraw-embed.is-maximized {
4849
- box-shadow: 0 16px 48px rgba(0, 0, 0, 0.6);
4850
- }
4851
-
4852
- @media (max-width: 768px) {
4853
- .excalidraw-embed.is-maximized {
4854
- inset: var(--space-3);
4855
- width: auto;
4856
- }
4857
-
4858
- .excalidraw-embed.is-maximized .excalidraw-embed-iframe {
4859
- height: auto !important;
4860
- }
4861
- }
4862
-
4863
- .excalidraw-embed-resizer {
4864
- height: 6px;
4865
- background: var(--color-border);
4866
- cursor: ns-resize;
4867
- transition: background 0.18s ease;
4868
- position: relative;
4869
- }
4870
-
4871
- .excalidraw-embed-resizer::after {
4872
- content: '';
4873
- position: absolute;
4874
- left: 50%;
4875
- top: 50%;
4876
- transform: translate(-50%, -50%);
4877
- width: 32px;
4878
- height: 3px;
4879
- border-radius: 2px;
4880
- background: var(--color-text-faint);
4881
- opacity: 0;
4882
- transition: opacity 0.18s ease;
4883
- }
4884
-
4885
- .excalidraw-embed-resizer:hover {
4886
- background: var(--color-primary);
4887
- }
4888
-
4889
- .excalidraw-embed-resizer:hover::after {
4890
- opacity: 1;
4891
- }
4892
-
4893
- /* File tree — excalidraw file icon */
4894
-
4895
- .file-tree-file.is-excalidraw .file-tree-icon {
4896
- color: var(--color-primary);
4897
- }
4898
-
4899
- .file-tree-file.is-mermaid .file-tree-icon {
4900
- color: oklch(from var(--color-primary) calc(l * 0.96) calc(c * 0.86) 215);
4901
- }
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';