claudeck 1.0.0

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 (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/cli.js +2 -0
  4. package/config/agent-chains.json +16 -0
  5. package/config/agent-dags.json +16 -0
  6. package/config/agents.json +46 -0
  7. package/config/bot-prompt.json +3 -0
  8. package/config/folders.json +66 -0
  9. package/config/prompts.json +92 -0
  10. package/config/repos.json +86 -0
  11. package/config/telegram-config.json +17 -0
  12. package/config/workflows.json +90 -0
  13. package/db.js +1198 -0
  14. package/package.json +55 -0
  15. package/plugins/claude-editor/client.css +171 -0
  16. package/plugins/claude-editor/client.js +183 -0
  17. package/plugins/event-stream/client.css +207 -0
  18. package/plugins/event-stream/client.js +271 -0
  19. package/plugins/linear/client.css +345 -0
  20. package/plugins/linear/client.js +380 -0
  21. package/plugins/linear/config.json +5 -0
  22. package/plugins/linear/server.js +312 -0
  23. package/plugins/repos/client.css +549 -0
  24. package/plugins/repos/client.js +663 -0
  25. package/plugins/repos/server.js +232 -0
  26. package/plugins/sudoku/client.css +196 -0
  27. package/plugins/sudoku/client.js +329 -0
  28. package/plugins/tasks/client.css +414 -0
  29. package/plugins/tasks/client.js +394 -0
  30. package/plugins/tasks/server.js +116 -0
  31. package/plugins/tic-tac-toe/client.css +167 -0
  32. package/plugins/tic-tac-toe/client.js +241 -0
  33. package/public/css/core/components.css +232 -0
  34. package/public/css/core/layout.css +330 -0
  35. package/public/css/core/print.css +18 -0
  36. package/public/css/core/reset.css +36 -0
  37. package/public/css/core/responsive.css +378 -0
  38. package/public/css/core/theme.css +116 -0
  39. package/public/css/core/variables.css +93 -0
  40. package/public/css/features/agent-monitor.css +297 -0
  41. package/public/css/features/agent-sidebar.css +525 -0
  42. package/public/css/features/agents.css +996 -0
  43. package/public/css/features/analytics.css +181 -0
  44. package/public/css/features/background-sessions.css +321 -0
  45. package/public/css/features/cost-dashboard.css +168 -0
  46. package/public/css/features/home.css +313 -0
  47. package/public/css/features/retro-terminal.css +88 -0
  48. package/public/css/features/telegram.css +127 -0
  49. package/public/css/features/tour.css +148 -0
  50. package/public/css/features/voice-input.css +60 -0
  51. package/public/css/features/welcome.css +241 -0
  52. package/public/css/panels/assistant-bot.css +442 -0
  53. package/public/css/panels/dev-docs.css +292 -0
  54. package/public/css/panels/file-explorer.css +322 -0
  55. package/public/css/panels/git-panel.css +221 -0
  56. package/public/css/panels/mcp-manager.css +199 -0
  57. package/public/css/panels/tips-feed.css +353 -0
  58. package/public/css/ui/commands.css +273 -0
  59. package/public/css/ui/context-gauge.css +76 -0
  60. package/public/css/ui/file-picker.css +69 -0
  61. package/public/css/ui/image-attachments.css +106 -0
  62. package/public/css/ui/messages.css +884 -0
  63. package/public/css/ui/modals.css +122 -0
  64. package/public/css/ui/parallel.css +217 -0
  65. package/public/css/ui/permissions.css +110 -0
  66. package/public/css/ui/right-panel.css +481 -0
  67. package/public/css/ui/sessions.css +689 -0
  68. package/public/css/ui/status-bar.css +425 -0
  69. package/public/css/ui/toolbox.css +206 -0
  70. package/public/data/tips.json +218 -0
  71. package/public/icons/favicon.png +0 -0
  72. package/public/icons/icon-192.png +0 -0
  73. package/public/icons/icon-512.png +0 -0
  74. package/public/icons/whaly.png +0 -0
  75. package/public/index.html +1140 -0
  76. package/public/js/core/api.js +591 -0
  77. package/public/js/core/constants.js +3 -0
  78. package/public/js/core/dom.js +270 -0
  79. package/public/js/core/events.js +10 -0
  80. package/public/js/core/plugin-loader.js +153 -0
  81. package/public/js/core/store.js +39 -0
  82. package/public/js/core/utils.js +25 -0
  83. package/public/js/core/ws.js +64 -0
  84. package/public/js/features/agent-monitor.js +222 -0
  85. package/public/js/features/agents.js +1209 -0
  86. package/public/js/features/analytics.js +397 -0
  87. package/public/js/features/attachments.js +251 -0
  88. package/public/js/features/background-sessions.js +475 -0
  89. package/public/js/features/chat.js +589 -0
  90. package/public/js/features/cost-dashboard.js +152 -0
  91. package/public/js/features/dag-editor.js +399 -0
  92. package/public/js/features/easter-egg.js +46 -0
  93. package/public/js/features/home.js +270 -0
  94. package/public/js/features/projects.js +372 -0
  95. package/public/js/features/prompts.js +228 -0
  96. package/public/js/features/sessions.js +332 -0
  97. package/public/js/features/telegram.js +131 -0
  98. package/public/js/features/tour.js +210 -0
  99. package/public/js/features/voice-input.js +185 -0
  100. package/public/js/features/welcome.js +43 -0
  101. package/public/js/features/workflows.js +277 -0
  102. package/public/js/main.js +51 -0
  103. package/public/js/panels/assistant-bot.js +445 -0
  104. package/public/js/panels/dev-docs.js +380 -0
  105. package/public/js/panels/file-explorer.js +486 -0
  106. package/public/js/panels/git-panel.js +285 -0
  107. package/public/js/panels/mcp-manager.js +311 -0
  108. package/public/js/panels/tips-feed.js +303 -0
  109. package/public/js/ui/commands.js +114 -0
  110. package/public/js/ui/context-gauge.js +100 -0
  111. package/public/js/ui/diff.js +124 -0
  112. package/public/js/ui/disabled-tools.js +36 -0
  113. package/public/js/ui/export.js +74 -0
  114. package/public/js/ui/formatting.js +206 -0
  115. package/public/js/ui/header-dropdowns.js +72 -0
  116. package/public/js/ui/input-meta.js +71 -0
  117. package/public/js/ui/max-turns.js +21 -0
  118. package/public/js/ui/messages.js +387 -0
  119. package/public/js/ui/model-selector.js +20 -0
  120. package/public/js/ui/notifications.js +232 -0
  121. package/public/js/ui/parallel.js +176 -0
  122. package/public/js/ui/permissions.js +168 -0
  123. package/public/js/ui/right-panel.js +173 -0
  124. package/public/js/ui/shortcuts.js +143 -0
  125. package/public/js/ui/sidebar-toggle.js +29 -0
  126. package/public/js/ui/status-bar.js +172 -0
  127. package/public/js/ui/tab-sdk.js +623 -0
  128. package/public/js/ui/theme.js +38 -0
  129. package/public/manifest.json +13 -0
  130. package/public/offline.html +190 -0
  131. package/public/style.css +42 -0
  132. package/public/sw.js +91 -0
  133. package/server/agent-loop.js +385 -0
  134. package/server/dag-executor.js +265 -0
  135. package/server/orchestrator.js +514 -0
  136. package/server/paths.js +61 -0
  137. package/server/plugin-mount.js +56 -0
  138. package/server/push-sender.js +31 -0
  139. package/server/routes/agents.js +294 -0
  140. package/server/routes/bot.js +45 -0
  141. package/server/routes/exec.js +35 -0
  142. package/server/routes/files.js +218 -0
  143. package/server/routes/mcp.js +82 -0
  144. package/server/routes/messages.js +36 -0
  145. package/server/routes/notifications.js +37 -0
  146. package/server/routes/projects.js +207 -0
  147. package/server/routes/prompts.js +53 -0
  148. package/server/routes/sessions.js +103 -0
  149. package/server/routes/stats.js +143 -0
  150. package/server/routes/telegram.js +71 -0
  151. package/server/routes/tips.js +135 -0
  152. package/server/routes/workflows.js +81 -0
  153. package/server/summarizer.js +55 -0
  154. package/server/telegram-poller.js +205 -0
  155. package/server/telegram-sender.js +304 -0
  156. package/server/ws-handler.js +926 -0
  157. package/server.js +179 -0
@@ -0,0 +1,689 @@
1
+ /* ── Sidebar ──────────────────────────────────────────── */
2
+ .sidebar {
3
+ width: var(--sidebar-w);
4
+ min-width: var(--sidebar-w);
5
+ background: var(--bg-secondary);
6
+ border-right: 1px solid var(--border);
7
+ display: flex;
8
+ flex-direction: column;
9
+ position: relative;
10
+ }
11
+
12
+ /* Ambient glow at bottom of sidebar */
13
+ .sidebar::after {
14
+ content: "";
15
+ position: absolute;
16
+ bottom: 0;
17
+ left: 0;
18
+ right: 0;
19
+ height: 80px;
20
+ background: linear-gradient(to top, var(--bg-secondary), transparent);
21
+ pointer-events: none;
22
+ z-index: 1;
23
+ }
24
+
25
+ .sidebar-header {
26
+ padding: 14px 16px;
27
+ border-bottom: 1px solid var(--border);
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: space-between;
31
+ }
32
+
33
+ .sidebar-header h1 {
34
+ font-size: 16px;
35
+ font-weight: 700;
36
+ color: var(--accent);
37
+ font-family: var(--font-display);
38
+ letter-spacing: 0.06em;
39
+ text-shadow: var(--glow);
40
+ text-transform: uppercase;
41
+ }
42
+
43
+ /* ── Logo split: Co·de·ck diagonal ─────────────────── */
44
+
45
+ .theme-toggle-btn {
46
+ background: none;
47
+ border: 1px solid var(--border);
48
+ color: var(--text-dim);
49
+ width: 28px;
50
+ height: 28px;
51
+ border-radius: var(--radius);
52
+ cursor: pointer;
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ flex-shrink: 0;
57
+ transition: all 0.2s var(--ease-smooth);
58
+ }
59
+
60
+ .theme-toggle-btn:hover {
61
+ color: var(--accent);
62
+ border-color: var(--accent);
63
+ background: var(--accent-dim);
64
+ box-shadow: var(--glow);
65
+ }
66
+
67
+ /* Folder picker */
68
+ .folder-picker {
69
+ padding: 14px 16px;
70
+ border-bottom: 1px solid var(--border);
71
+ }
72
+
73
+ .folder-picker-header {
74
+ display: flex;
75
+ align-items: center;
76
+ justify-content: space-between;
77
+ margin-bottom: 8px;
78
+ }
79
+
80
+ .folder-picker label {
81
+ display: flex;
82
+ align-items: center;
83
+ gap: 6px;
84
+ font-size: 10px;
85
+ font-weight: 600;
86
+ text-transform: uppercase;
87
+ letter-spacing: 0.08em;
88
+ color: var(--text-dim);
89
+ font-family: var(--font-display);
90
+ }
91
+
92
+ .system-prompt-badge {
93
+ font-size: 9px;
94
+ font-weight: 700;
95
+ color: var(--purple);
96
+ background: var(--purple-dim);
97
+ padding: 2px 6px;
98
+ border-radius: 4px;
99
+ letter-spacing: 0.3px;
100
+ border: 1px solid rgba(198,159,245,0.15);
101
+ }
102
+
103
+ .folder-picker-actions {
104
+ display: flex;
105
+ align-items: center;
106
+ gap: 2px;
107
+ }
108
+
109
+ .add-project-btn {
110
+ background: none;
111
+ border: none;
112
+ color: var(--text-dim);
113
+ font-size: 16px;
114
+ font-weight: 700;
115
+ cursor: pointer;
116
+ padding: 2px 6px;
117
+ border-radius: 4px;
118
+ line-height: 1;
119
+ transition: all 0.2s var(--ease-smooth);
120
+ }
121
+
122
+ .add-project-btn:hover {
123
+ color: var(--accent);
124
+ background: var(--accent-dim);
125
+ }
126
+
127
+ .system-prompt-edit-btn {
128
+ background: none;
129
+ border: none;
130
+ color: var(--text-dim);
131
+ font-size: 14px;
132
+ cursor: pointer;
133
+ padding: 2px 4px;
134
+ border-radius: 4px;
135
+ transition: all 0.2s var(--ease-smooth);
136
+ }
137
+
138
+ .system-prompt-edit-btn:hover {
139
+ color: var(--accent);
140
+ background: var(--accent-dim);
141
+ }
142
+
143
+ /* ── Sidebar Tooltips ─────────────────────────────────── */
144
+ .sidebar-tooltip {
145
+ position: relative;
146
+ }
147
+
148
+ .sidebar-tooltip::after {
149
+ content: attr(data-tooltip);
150
+ position: absolute;
151
+ top: calc(100% + 6px);
152
+ left: 50%;
153
+ transform: translateX(-50%) scale(0.9);
154
+ padding: 4px 10px;
155
+ font-family: var(--font-sans);
156
+ font-size: 11px;
157
+ font-weight: 500;
158
+ white-space: nowrap;
159
+ color: var(--text);
160
+ background: var(--bg-elevated);
161
+ border: 1px solid var(--border);
162
+ border-radius: var(--radius-md);
163
+ pointer-events: none;
164
+ opacity: 0;
165
+ transition: all 0.15s var(--ease-out-expo);
166
+ z-index: 100;
167
+ box-shadow: var(--shadow-sm);
168
+ }
169
+
170
+ .sidebar-tooltip:hover::after {
171
+ opacity: 1;
172
+ transform: translateX(-50%) scale(1);
173
+ }
174
+
175
+ /* ── Add Project Modal ──────────────────────────────── */
176
+ .add-project-modal {
177
+ width: 480px;
178
+ max-width: 90vw;
179
+ }
180
+
181
+ .add-project-body {
182
+ padding: 0 20px 20px;
183
+ }
184
+
185
+ .folder-breadcrumb {
186
+ display: flex;
187
+ align-items: center;
188
+ flex-wrap: wrap;
189
+ gap: 2px;
190
+ padding: 8px 0;
191
+ font-size: 11px;
192
+ font-family: var(--font-mono);
193
+ color: var(--text-dim);
194
+ min-height: 32px;
195
+ }
196
+
197
+ .folder-breadcrumb-seg {
198
+ cursor: pointer;
199
+ padding: 2px 6px;
200
+ border-radius: 4px;
201
+ color: var(--text-secondary);
202
+ transition: all 0.15s;
203
+ }
204
+
205
+ .folder-breadcrumb-seg:hover {
206
+ color: var(--accent);
207
+ background: var(--accent-dim);
208
+ }
209
+
210
+ .folder-breadcrumb-sep {
211
+ color: var(--text-dim);
212
+ font-size: 10px;
213
+ }
214
+
215
+ .folder-list {
216
+ border: 1px solid var(--border);
217
+ border-radius: var(--radius-md);
218
+ background: var(--bg);
219
+ max-height: 300px;
220
+ min-height: 150px;
221
+ overflow-y: auto;
222
+ margin-bottom: 12px;
223
+ }
224
+
225
+ .folder-list-item {
226
+ display: flex;
227
+ align-items: center;
228
+ gap: 8px;
229
+ padding: 8px 12px;
230
+ font-size: 12px;
231
+ font-family: var(--font-mono);
232
+ color: var(--text);
233
+ cursor: pointer;
234
+ border-bottom: 1px solid var(--border-subtle);
235
+ transition: all 0.15s;
236
+ }
237
+
238
+ .folder-list-item:last-child {
239
+ border-bottom: none;
240
+ }
241
+
242
+ .folder-list-item:hover {
243
+ background: var(--accent-dim);
244
+ color: var(--accent);
245
+ }
246
+
247
+ .folder-list-item .folder-icon {
248
+ font-size: 14px;
249
+ flex-shrink: 0;
250
+ }
251
+
252
+ .folder-list-empty {
253
+ padding: 20px;
254
+ text-align: center;
255
+ font-size: 12px;
256
+ color: var(--text-dim);
257
+ }
258
+
259
+ .folder-list-loading {
260
+ padding: 20px;
261
+ text-align: center;
262
+ font-size: 12px;
263
+ color: var(--text-dim);
264
+ }
265
+
266
+ .folder-select-row {
267
+ display: flex;
268
+ gap: 8px;
269
+ align-items: center;
270
+ }
271
+
272
+ .folder-select-row input {
273
+ flex: 1;
274
+ padding: 8px 10px;
275
+ font-size: 12px;
276
+ font-family: var(--font-mono);
277
+ }
278
+
279
+ .folder-select-row .modal-btn-save {
280
+ flex-shrink: 0;
281
+ }
282
+
283
+ .folder-picker select {
284
+ width: 100%;
285
+ padding: 8px 10px;
286
+ font-size: 12px;
287
+ font-family: var(--font-mono);
288
+ }
289
+
290
+ /* Sessions */
291
+ .sessions-section {
292
+ flex: 1;
293
+ display: flex;
294
+ flex-direction: column;
295
+ padding-top: 14px;
296
+ overflow: hidden;
297
+ }
298
+
299
+ .sessions-section h2 {
300
+ font-size: 10px;
301
+ font-weight: 600;
302
+ text-transform: uppercase;
303
+ letter-spacing: 0.1em;
304
+ color: var(--text-dim);
305
+ padding: 0 16px;
306
+ margin-bottom: 8px;
307
+ font-family: var(--font-display);
308
+ }
309
+
310
+ /* Session search */
311
+ .session-search-wrapper {
312
+ padding: 0 16px;
313
+ margin-bottom: 8px;
314
+ }
315
+
316
+ .session-search-wrapper input {
317
+ width: 100%;
318
+ padding: 7px 10px;
319
+ font-size: 12px;
320
+ font-family: var(--font-mono);
321
+ }
322
+
323
+ .session-title {
324
+ display: inline-block;
325
+ max-width: 170px;
326
+ white-space: nowrap;
327
+ overflow: hidden;
328
+ text-overflow: ellipsis;
329
+ vertical-align: middle;
330
+ font-family: var(--font-sans);
331
+ }
332
+
333
+ .btn-secondary {
334
+ display: block;
335
+ width: calc(100% - 32px);
336
+ margin: 0 16px 10px;
337
+ padding: 7px;
338
+ background: transparent;
339
+ color: var(--accent);
340
+ border: 1px dashed var(--border);
341
+ border-radius: var(--radius);
342
+ font-size: 12px;
343
+ font-family: var(--font-sans);
344
+ font-weight: 500;
345
+ cursor: pointer;
346
+ transition: all 0.2s var(--ease-smooth);
347
+ }
348
+
349
+ .btn-secondary:hover {
350
+ border-color: var(--accent);
351
+ background: var(--accent-dim);
352
+ text-shadow: var(--glow);
353
+ border-style: solid;
354
+ }
355
+
356
+ .session-list {
357
+ list-style: none;
358
+ flex: 1;
359
+ overflow-y: auto;
360
+ }
361
+
362
+ .session-list li {
363
+ position: relative;
364
+ padding: 10px 14px;
365
+ font-size: 12px;
366
+ cursor: pointer;
367
+ color: var(--text-secondary);
368
+ border-left: 2px solid transparent;
369
+ transition: all 0.15s var(--ease-smooth);
370
+ }
371
+
372
+ .session-list li:hover {
373
+ background: var(--bg-tertiary);
374
+ color: var(--text);
375
+ }
376
+
377
+ .session-list li.active {
378
+ border-left-color: var(--accent);
379
+ color: var(--accent);
380
+ background: var(--accent-dim);
381
+ }
382
+
383
+ /* Accent bar animation on active */
384
+ .session-list li.active::before {
385
+ content: "";
386
+ position: absolute;
387
+ left: 0;
388
+ top: 0;
389
+ width: 2px;
390
+ height: 100%;
391
+ background: var(--accent);
392
+ box-shadow: 0 0 8px var(--accent-glow);
393
+ }
394
+
395
+ /* Card header — title + badges + actions in one row */
396
+ .session-card-header {
397
+ display: flex;
398
+ align-items: center;
399
+ gap: 4px;
400
+ min-height: 22px;
401
+ }
402
+
403
+ .session-card-header .session-title {
404
+ flex: 1;
405
+ min-width: 0;
406
+ }
407
+
408
+ .session-card-actions {
409
+ display: flex;
410
+ align-items: center;
411
+ gap: 2px;
412
+ flex-shrink: 0;
413
+ opacity: 0;
414
+ transition: opacity 0.2s;
415
+ }
416
+
417
+ .session-list li:hover .session-card-actions {
418
+ opacity: 1;
419
+ }
420
+
421
+ /* Always show pin icon when pinned */
422
+ .session-card-actions:has(.session-pin.pinned) {
423
+ opacity: 1;
424
+ }
425
+
426
+ .session-pin {
427
+ width: 22px;
428
+ height: 22px;
429
+ background: none;
430
+ border: none;
431
+ color: var(--text-dim);
432
+ font-size: 14px;
433
+ cursor: pointer;
434
+ border-radius: 4px;
435
+ display: flex;
436
+ align-items: center;
437
+ justify-content: center;
438
+ line-height: 1;
439
+ transition: all 0.15s;
440
+ }
441
+
442
+ .session-pin.pinned {
443
+ color: var(--warning);
444
+ }
445
+
446
+ .session-pin:hover { background: var(--accent-dim); color: var(--accent); }
447
+ .session-pin.pinned:hover { background: var(--accent-dim); color: var(--accent); }
448
+
449
+ .session-delete {
450
+ width: 22px;
451
+ height: 22px;
452
+ background: none;
453
+ border: none;
454
+ color: var(--text-dim);
455
+ font-size: 14px;
456
+ cursor: pointer;
457
+ border-radius: 4px;
458
+ display: flex;
459
+ align-items: center;
460
+ justify-content: center;
461
+ line-height: 1;
462
+ transition: all 0.15s;
463
+ }
464
+
465
+ .session-delete:hover { background: var(--error); color: #fff; }
466
+
467
+ .session-list li .session-preview {
468
+ display: block;
469
+ font-size: 11px;
470
+ color: var(--text-dim);
471
+ white-space: nowrap;
472
+ overflow: hidden;
473
+ text-overflow: ellipsis;
474
+ margin-top: 3px;
475
+ font-family: var(--font-sans);
476
+ }
477
+
478
+ /* Summary tooltip on hover */
479
+ .session-list li[data-summary] {
480
+ position: relative;
481
+ }
482
+
483
+ .session-list li[data-summary]::after {
484
+ content: attr(data-summary);
485
+ position: absolute;
486
+ left: 16px;
487
+ top: 100%;
488
+ z-index: 1000;
489
+ max-width: 280px;
490
+ padding: 8px 12px;
491
+ background: var(--bg-elevated);
492
+ border: 1px solid var(--border);
493
+ border-radius: var(--radius-md);
494
+ box-shadow: var(--shadow-md);
495
+ font-size: 11px;
496
+ line-height: 1.5;
497
+ color: var(--text);
498
+ white-space: normal;
499
+ word-wrap: break-word;
500
+ pointer-events: none;
501
+ opacity: 0;
502
+ transform: translateY(4px);
503
+ transition: opacity 0.2s, transform 0.2s var(--ease-out-expo);
504
+ font-family: var(--font-sans);
505
+ }
506
+
507
+ .session-list li[data-summary]:hover::after {
508
+ opacity: 1;
509
+ transform: translateY(0);
510
+ }
511
+
512
+ .session-mode {
513
+ display: inline-block;
514
+ font-size: 9px;
515
+ font-weight: 600;
516
+ text-transform: uppercase;
517
+ letter-spacing: 0.04em;
518
+ padding: 1px 6px;
519
+ border-radius: 4px;
520
+ vertical-align: middle;
521
+ margin-left: 4px;
522
+ font-family: var(--font-display);
523
+ }
524
+
525
+ .session-mode.single {
526
+ color: var(--text-dim);
527
+ background: var(--bg-tertiary);
528
+ }
529
+
530
+ .session-mode.parallel {
531
+ color: var(--accent);
532
+ background: var(--accent-dim);
533
+ border: 1px solid var(--border-accent);
534
+ }
535
+
536
+ .session-mode.both {
537
+ color: var(--purple);
538
+ background: var(--purple-dim);
539
+ border: 1px solid rgba(198,159,245,0.12);
540
+ }
541
+
542
+ /* ── Mode Toggle Switch ──────────────────────────────── */
543
+ .mode-toggle {
544
+ padding: 0 16px;
545
+ margin-bottom: 10px;
546
+ }
547
+
548
+ .toggle-switch {
549
+ display: flex;
550
+ align-items: center;
551
+ gap: 10px;
552
+ cursor: pointer;
553
+ user-select: none;
554
+ padding: 7px 0;
555
+ }
556
+
557
+ .toggle-switch input {
558
+ display: none;
559
+ }
560
+
561
+ .toggle-slider {
562
+ position: relative;
563
+ width: 36px;
564
+ height: 20px;
565
+ background: var(--border);
566
+ border-radius: 10px;
567
+ flex-shrink: 0;
568
+ transition: background 0.3s var(--ease-smooth);
569
+ }
570
+
571
+ .toggle-slider::after {
572
+ content: "";
573
+ position: absolute;
574
+ top: 3px;
575
+ left: 3px;
576
+ width: 14px;
577
+ height: 14px;
578
+ background: var(--text-dim);
579
+ border-radius: 50%;
580
+ transition: transform 0.3s var(--ease-spring), background 0.3s;
581
+ }
582
+
583
+ .toggle-switch input:checked + .toggle-slider {
584
+ background: var(--accent-solid);
585
+ box-shadow: var(--glow);
586
+ }
587
+
588
+ .toggle-switch input:checked + .toggle-slider::after {
589
+ transform: translateX(16px);
590
+ background: #fff;
591
+ }
592
+
593
+ .toggle-label {
594
+ font-size: 12px;
595
+ color: var(--text-secondary);
596
+ font-weight: 500;
597
+ font-family: var(--font-sans);
598
+ transition: color 0.2s;
599
+ }
600
+
601
+ .toggle-switch input:checked ~ .toggle-label {
602
+ color: var(--accent);
603
+ }
604
+
605
+ /* ── Session Title Inline Edit ──────────────────────── */
606
+ .session-title-edit {
607
+ background: var(--bg);
608
+ border: 1px solid var(--accent);
609
+ border-radius: 4px;
610
+ padding: 2px 6px;
611
+ color: var(--text);
612
+ font-size: 13px;
613
+ font-family: var(--font-sans);
614
+ outline: none;
615
+ width: 160px;
616
+ }
617
+
618
+ /* ── Session Context Menu ──────────────────────────────── */
619
+ .session-ctx-menu {
620
+ position: fixed;
621
+ z-index: 1000;
622
+ background: var(--bg-elevated);
623
+ border: 1px solid var(--border);
624
+ border-radius: var(--radius-md);
625
+ padding: 4px;
626
+ box-shadow: var(--shadow-lg);
627
+ min-width: 220px;
628
+ max-width: 360px;
629
+ animation: fadeInUp 0.12s var(--ease-out-expo);
630
+ }
631
+
632
+ .session-ctx-menu button {
633
+ display: flex;
634
+ flex-direction: column;
635
+ width: 100%;
636
+ background: none;
637
+ border: none;
638
+ border-radius: var(--radius);
639
+ color: var(--text);
640
+ font-family: var(--font-sans);
641
+ padding: 8px 12px;
642
+ text-align: left;
643
+ cursor: pointer;
644
+ gap: 2px;
645
+ transition: all 0.15s;
646
+ }
647
+
648
+ .session-ctx-menu button:hover {
649
+ background: var(--accent-dim);
650
+ color: var(--accent);
651
+ }
652
+
653
+ .session-ctx-menu .ctx-label {
654
+ font-size: 12px;
655
+ font-weight: 500;
656
+ }
657
+
658
+ .session-ctx-menu .ctx-value {
659
+ font-size: 10px;
660
+ font-family: var(--font-mono);
661
+ color: var(--text-dim);
662
+ overflow: hidden;
663
+ text-overflow: ellipsis;
664
+ white-space: nowrap;
665
+ }
666
+
667
+ /* ── Session Empty State ──────────────────────────────── */
668
+ .session-empty {
669
+ display: flex;
670
+ flex-direction: column;
671
+ align-items: center;
672
+ justify-content: center;
673
+ padding: 40px 16px;
674
+ color: var(--text-dim);
675
+ font-size: 12px;
676
+ text-align: center;
677
+ gap: 10px;
678
+ font-family: var(--font-sans);
679
+ }
680
+
681
+ .session-empty svg {
682
+ opacity: 0.3;
683
+ }
684
+
685
+ .session-empty-hint {
686
+ font-size: 11px;
687
+ opacity: 0.5;
688
+ line-height: 1.5;
689
+ }