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,442 @@
1
+ /* ── Assistant Bot (floating chat bubble) ──────────────── */
2
+
3
+ .bot-bubble {
4
+ position: fixed;
5
+ bottom: 44px;
6
+ left: 20px;
7
+ width: 48px;
8
+ height: 48px;
9
+ border-radius: 50%;
10
+ background: var(--bg-secondary);
11
+ border: 2px solid var(--border);
12
+ cursor: pointer;
13
+ z-index: 9000;
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ padding: 0;
18
+ overflow: hidden;
19
+ box-shadow: 0 2px 8px rgba(0,0,0,0.3);
20
+ transition: transform 0.15s, box-shadow 0.15s;
21
+ }
22
+ .bot-bubble img {
23
+ width: 36px;
24
+ height: auto;
25
+ object-fit: contain;
26
+ }
27
+ .bot-bubble:hover {
28
+ transform: scale(1.08);
29
+ box-shadow: var(--glow-strong), 0 4px 16px rgba(0,0,0,0.4);
30
+ }
31
+ .bot-bubble.hidden { display: none; }
32
+
33
+ /* ── Panel ─────────────────────────────────────────────── */
34
+ .bot-panel {
35
+ position: fixed;
36
+ bottom: 104px;
37
+ left: 20px;
38
+ width: 400px;
39
+ max-height: calc(100vh - 120px);
40
+ height: 560px;
41
+ background: var(--bg);
42
+ border: 1px solid var(--border);
43
+ border-radius: var(--radius-lg);
44
+ z-index: 9001;
45
+ display: none;
46
+ flex-direction: column;
47
+ box-shadow: 0 4px 24px rgba(0,0,0,0.4);
48
+ font-family: var(--font-mono);
49
+ font-size: 13px;
50
+ overflow: hidden;
51
+ }
52
+ .bot-panel.open {
53
+ display: flex;
54
+ }
55
+
56
+ /* ── Header ────────────────────────────────────────────── */
57
+ .bot-header {
58
+ display: flex;
59
+ align-items: center;
60
+ padding: 8px 12px;
61
+ background: var(--bg-secondary);
62
+ border-bottom: 1px solid var(--border);
63
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
64
+ gap: 6px;
65
+ min-height: 36px;
66
+ flex-shrink: 0;
67
+ }
68
+ .bot-header-title {
69
+ flex: 1;
70
+ color: var(--accent);
71
+ font-weight: 600;
72
+ font-size: 12px;
73
+ letter-spacing: 0.5px;
74
+ text-transform: uppercase;
75
+ }
76
+ .bot-header-btn {
77
+ background: none;
78
+ border: none;
79
+ color: var(--text-secondary);
80
+ cursor: pointer;
81
+ padding: 2px 6px;
82
+ font-size: 14px;
83
+ border-radius: var(--radius);
84
+ transition: color 0.15s, background 0.15s;
85
+ }
86
+ .bot-header-btn:hover {
87
+ color: var(--text);
88
+ background: var(--bg-tertiary);
89
+ }
90
+
91
+ /* ── Messages ──────────────────────────────────────────── */
92
+ .bot-messages {
93
+ flex: 1;
94
+ overflow-y: auto;
95
+ overflow-x: hidden;
96
+ padding: 10px 12px 16px;
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: 8px;
100
+ min-height: 0;
101
+ }
102
+ .bot-messages::-webkit-scrollbar { width: 4px; }
103
+ .bot-messages::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
104
+
105
+ .bot-msg {
106
+ max-width: 95%;
107
+ padding: 8px 10px;
108
+ border-radius: var(--radius);
109
+ line-height: 1.55;
110
+ word-wrap: break-word;
111
+ overflow-wrap: break-word;
112
+ flex-shrink: 0;
113
+ }
114
+ .bot-msg.user {
115
+ align-self: flex-end;
116
+ background: var(--accent-dim);
117
+ color: var(--text);
118
+ border: 1px solid rgba(51,209,122,0.2);
119
+ white-space: pre-wrap;
120
+ }
121
+ .bot-msg.assistant {
122
+ align-self: flex-start;
123
+ background: var(--bg-secondary);
124
+ color: var(--text);
125
+ border: 1px solid var(--border);
126
+ }
127
+ .bot-msg.tool-indicator {
128
+ align-self: flex-start;
129
+ background: var(--bg-tertiary);
130
+ color: var(--text-secondary);
131
+ border: 1px solid var(--border-subtle);
132
+ font-size: 11px;
133
+ padding: 4px 8px;
134
+ }
135
+ .bot-msg.tool-result-msg {
136
+ align-self: flex-start;
137
+ background: var(--bg-tertiary);
138
+ color: var(--text-dim);
139
+ border: 1px solid var(--border-subtle);
140
+ font-size: 11px;
141
+ padding: 4px 8px;
142
+ max-height: 120px;
143
+ overflow-y: auto;
144
+ }
145
+ .bot-msg.error {
146
+ align-self: flex-start;
147
+ background: rgba(237,51,59,0.08);
148
+ color: var(--error);
149
+ border: 1px solid rgba(237,51,59,0.2);
150
+ }
151
+
152
+ /* ── Markdown inside bot messages ──────────────────────── */
153
+ .bot-msg.assistant ol,
154
+ .bot-msg.assistant ul {
155
+ margin: 4px 0;
156
+ padding-left: 22px;
157
+ }
158
+ .bot-msg.assistant ol {
159
+ list-style-type: decimal;
160
+ }
161
+ .bot-msg.assistant ul {
162
+ list-style-type: disc;
163
+ }
164
+ .bot-msg.assistant li {
165
+ margin: 4px 0;
166
+ line-height: 1.5;
167
+ }
168
+ .bot-msg.assistant h1,
169
+ .bot-msg.assistant h2,
170
+ .bot-msg.assistant h3,
171
+ .bot-msg.assistant h4 {
172
+ margin: 8px 0 4px;
173
+ line-height: 1.3;
174
+ }
175
+ .bot-msg.assistant h1 { font-size: 16px; }
176
+ .bot-msg.assistant h2 { font-size: 15px; }
177
+ .bot-msg.assistant h3 { font-size: 14px; }
178
+ .bot-msg.assistant h4 { font-size: 13px; }
179
+ .bot-msg.assistant blockquote {
180
+ border-left: 3px solid var(--accent);
181
+ padding-left: 10px;
182
+ margin: 6px 0;
183
+ color: var(--text-secondary);
184
+ }
185
+ .bot-msg.assistant strong {
186
+ color: var(--text);
187
+ font-weight: 600;
188
+ }
189
+ .bot-msg.assistant em {
190
+ font-style: italic;
191
+ }
192
+ .bot-msg.assistant a {
193
+ color: var(--accent);
194
+ text-decoration: underline;
195
+ }
196
+ .bot-msg.assistant hr {
197
+ border: none;
198
+ border-top: 1px solid var(--border);
199
+ margin: 8px 0;
200
+ }
201
+ .bot-msg.assistant .inline-code {
202
+ background: var(--bg-tertiary);
203
+ padding: 1px 4px;
204
+ border-radius: 3px;
205
+ font-size: 12px;
206
+ }
207
+ .bot-msg.assistant pre {
208
+ margin: 6px 0;
209
+ overflow-x: auto;
210
+ }
211
+ .bot-msg.assistant code {
212
+ font-size: 12px;
213
+ }
214
+ .bot-msg.assistant .code-block-wrapper {
215
+ margin: 6px 0;
216
+ border-radius: var(--radius);
217
+ overflow: hidden;
218
+ }
219
+ .bot-msg.assistant .code-block-header {
220
+ padding: 2px 8px;
221
+ font-size: 10px;
222
+ }
223
+ .bot-msg.assistant .md-table-wrap {
224
+ overflow-x: auto;
225
+ margin: 6px 0;
226
+ }
227
+ .bot-msg.assistant table {
228
+ border-collapse: collapse;
229
+ font-size: 12px;
230
+ }
231
+ .bot-msg.assistant th,
232
+ .bot-msg.assistant td {
233
+ border: 1px solid var(--border);
234
+ padding: 4px 8px;
235
+ }
236
+ .bot-msg.assistant th {
237
+ background: var(--bg-tertiary);
238
+ }
239
+
240
+ /* Thinking indicator */
241
+ .bot-thinking {
242
+ align-self: flex-start;
243
+ color: var(--text-dim);
244
+ font-size: 12px;
245
+ padding: 4px 0;
246
+ font-style: italic;
247
+ flex-shrink: 0;
248
+ }
249
+
250
+ /* ── Input bar ─────────────────────────────────────────── */
251
+ .bot-input-bar {
252
+ display: flex;
253
+ align-items: flex-start;
254
+ padding: 8px;
255
+ border-top: 1px solid var(--border);
256
+ gap: 6px;
257
+ background: var(--bg-secondary);
258
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
259
+ flex-shrink: 0;
260
+ }
261
+ .bot-input {
262
+ flex: 1;
263
+ font-family: var(--font-mono);
264
+ font-size: 12px;
265
+ padding: 6px 8px;
266
+ resize: none;
267
+ min-height: 28px;
268
+ max-height: 100px;
269
+ line-height: 1.4;
270
+ }
271
+ .bot-send-btn {
272
+ background: var(--accent-solid);
273
+ border: none;
274
+ border-radius: var(--radius-md);
275
+ padding: 6px 12px;
276
+ color: #000;
277
+ font-size: 12px;
278
+ font-weight: 600;
279
+ font-family: var(--font-sans);
280
+ cursor: pointer;
281
+ transition: all 0.2s var(--ease-smooth);
282
+ }
283
+ .bot-send-btn:hover {
284
+ background: var(--accent);
285
+ box-shadow: var(--glow-strong);
286
+ transform: translateY(-1px);
287
+ }
288
+ .bot-send-btn:active {
289
+ transform: translateY(0);
290
+ }
291
+ .bot-send-btn:disabled {
292
+ opacity: 0.4;
293
+ cursor: not-allowed;
294
+ transform: none;
295
+ box-shadow: none;
296
+ }
297
+ .bot-stop-btn {
298
+ background: var(--error);
299
+ color: #fff;
300
+ border: none;
301
+ border-radius: var(--radius-md);
302
+ padding: 6px 10px;
303
+ font-family: var(--font-sans);
304
+ font-size: 12px;
305
+ cursor: pointer;
306
+ font-weight: 600;
307
+ display: none;
308
+ transition: all 0.2s var(--ease-smooth);
309
+ }
310
+ .bot-stop-btn:hover {
311
+ box-shadow: 0 0 12px rgba(237, 51, 59, 0.3);
312
+ transform: translateY(-1px);
313
+ }
314
+ .bot-stop-btn.visible { display: block; }
315
+
316
+ /* ── Whaly placeholder in bot ─────────────────────────── */
317
+ .bot-messages .whaly-placeholder {
318
+ gap: 10px;
319
+ opacity: 0.6;
320
+ }
321
+ .bot-messages .whaly-placeholder img {
322
+ width: 72px;
323
+ }
324
+ .bot-messages .whaly-placeholder .whaly-text {
325
+ font-size: 11px;
326
+ }
327
+
328
+ /* ── Settings overlay ──────────────────────────────────── */
329
+ .bot-settings-overlay {
330
+ position: absolute;
331
+ inset: 0;
332
+ background: var(--bg);
333
+ border-radius: var(--radius-lg);
334
+ display: none;
335
+ flex-direction: column;
336
+ z-index: 10;
337
+ }
338
+ .bot-settings-overlay.open {
339
+ display: flex;
340
+ }
341
+ .bot-settings-header {
342
+ display: flex;
343
+ align-items: center;
344
+ padding: 8px 12px;
345
+ background: var(--bg-secondary);
346
+ border-bottom: 1px solid var(--border);
347
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
348
+ }
349
+ .bot-settings-header span {
350
+ flex: 1;
351
+ color: var(--accent);
352
+ font-weight: 600;
353
+ font-size: 12px;
354
+ text-transform: uppercase;
355
+ }
356
+ .bot-settings-body {
357
+ flex: 1;
358
+ padding: 12px;
359
+ display: flex;
360
+ flex-direction: column;
361
+ gap: 8px;
362
+ }
363
+ .bot-settings-body label {
364
+ color: var(--text-secondary);
365
+ font-size: 11px;
366
+ text-transform: uppercase;
367
+ letter-spacing: 0.5px;
368
+ }
369
+ .bot-settings-body textarea {
370
+ flex: 1;
371
+ font-family: var(--font-mono);
372
+ font-size: 12px;
373
+ padding: 8px;
374
+ resize: none;
375
+ }
376
+ .bot-settings-actions {
377
+ display: flex;
378
+ gap: 8px;
379
+ justify-content: flex-end;
380
+ padding: 8px 12px;
381
+ border-top: 1px solid var(--border);
382
+ }
383
+ .bot-settings-actions button {
384
+ padding: 6px 14px;
385
+ border-radius: var(--radius-md);
386
+ font-family: var(--font-sans);
387
+ font-size: 12px;
388
+ cursor: pointer;
389
+ border: 1px solid var(--border);
390
+ background: var(--bg-secondary);
391
+ color: var(--text);
392
+ transition: all 0.2s var(--ease-smooth);
393
+ }
394
+ .bot-settings-actions button.primary {
395
+ background: var(--accent-solid);
396
+ color: #000;
397
+ border-color: var(--accent-solid);
398
+ font-weight: 600;
399
+ }
400
+ .bot-settings-actions button.primary:hover {
401
+ background: var(--accent);
402
+ box-shadow: var(--glow-strong);
403
+ }
404
+
405
+ /* ── Responsive ────────────────────────────────────────── */
406
+
407
+ /* Desktop: clear the sidebar */
408
+ @media (min-width: 1025px) {
409
+ .bot-bubble {
410
+ left: calc(var(--sidebar-w) + 20px);
411
+ }
412
+ .bot-panel {
413
+ left: calc(var(--sidebar-w) + 20px);
414
+ }
415
+ }
416
+
417
+ /* Tablet: sidebar is hidden, snap back to left edge */
418
+ @media (max-width: 1024px) {
419
+ .bot-bubble {
420
+ left: 20px;
421
+ }
422
+ .bot-panel {
423
+ left: 20px;
424
+ }
425
+ }
426
+
427
+ /* Mobile: full-screen panel */
428
+ @media (max-width: 640px) {
429
+ .bot-panel {
430
+ left: 0;
431
+ right: 0;
432
+ bottom: 0;
433
+ width: 100%;
434
+ height: 100%;
435
+ max-height: 100%;
436
+ border-radius: 0;
437
+ }
438
+ .bot-bubble {
439
+ bottom: 36px;
440
+ left: 12px;
441
+ }
442
+ }
@@ -0,0 +1,292 @@
1
+ /* ── Developer Documentation Modal ────────────────────── */
2
+ .dev-docs-overlay {
3
+ position: fixed;
4
+ inset: 0;
5
+ background: rgba(0, 0, 0, 0.75);
6
+ backdrop-filter: blur(8px);
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ z-index: 100;
11
+ animation: fadeIn 0.12s ease;
12
+ }
13
+
14
+ .dev-docs-modal {
15
+ background: var(--bg-secondary);
16
+ border: 1px solid var(--border);
17
+ border-radius: var(--radius-lg);
18
+ width: 820px;
19
+ max-width: 92vw;
20
+ height: 70vh;
21
+ max-height: 680px;
22
+ display: flex;
23
+ overflow: hidden;
24
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.6), var(--glow);
25
+ animation: slideUp 0.15s ease;
26
+ }
27
+
28
+ /* ── Sidebar nav ──────────────────────────────────────── */
29
+ .dev-docs-nav {
30
+ width: 190px;
31
+ min-width: 190px;
32
+ background: var(--bg-deep);
33
+ border-right: 1px solid var(--border);
34
+ display: flex;
35
+ flex-direction: column;
36
+ overflow-y: auto;
37
+ padding: 12px 0;
38
+ }
39
+
40
+ .dev-docs-nav-header {
41
+ padding: 6px 14px 12px;
42
+ font-size: 11px;
43
+ font-weight: 700;
44
+ text-transform: uppercase;
45
+ letter-spacing: 0.08em;
46
+ color: var(--accent);
47
+ font-family: var(--font-mono);
48
+ border-bottom: 1px solid var(--border);
49
+ margin-bottom: 6px;
50
+ display: flex;
51
+ align-items: center;
52
+ gap: 6px;
53
+ }
54
+
55
+ .dev-docs-nav-item {
56
+ display: flex;
57
+ align-items: center;
58
+ gap: 8px;
59
+ width: 100%;
60
+ padding: 7px 14px;
61
+ background: none;
62
+ border: none;
63
+ color: var(--text-secondary);
64
+ font-family: var(--font-mono);
65
+ font-size: 12px;
66
+ cursor: pointer;
67
+ text-align: left;
68
+ transition: background 0.1s, color 0.1s;
69
+ white-space: nowrap;
70
+ border-left: 2px solid transparent;
71
+ }
72
+
73
+ .dev-docs-nav-item:hover {
74
+ background: var(--bg-tertiary);
75
+ color: var(--text);
76
+ }
77
+
78
+ .dev-docs-nav-item.active {
79
+ background: var(--accent-dim);
80
+ color: var(--accent);
81
+ border-left-color: var(--accent);
82
+ }
83
+
84
+ .dev-docs-nav-item svg {
85
+ width: 14px;
86
+ height: 14px;
87
+ flex-shrink: 0;
88
+ opacity: 0.7;
89
+ }
90
+
91
+ .dev-docs-nav-item.active svg {
92
+ opacity: 1;
93
+ }
94
+
95
+ /* ── Content area ─────────────────────────────────────── */
96
+ .dev-docs-body {
97
+ flex: 1;
98
+ display: flex;
99
+ flex-direction: column;
100
+ overflow: hidden;
101
+ }
102
+
103
+ .dev-docs-header {
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: space-between;
107
+ padding: 12px 18px;
108
+ border-bottom: 1px solid var(--border);
109
+ flex-shrink: 0;
110
+ }
111
+
112
+ .dev-docs-title {
113
+ font-size: 14px;
114
+ font-weight: 600;
115
+ font-family: var(--font-mono);
116
+ color: var(--text);
117
+ }
118
+
119
+ .dev-docs-close {
120
+ background: none;
121
+ border: none;
122
+ color: var(--text-dim);
123
+ font-size: 20px;
124
+ cursor: pointer;
125
+ width: 28px;
126
+ height: 28px;
127
+ display: flex;
128
+ align-items: center;
129
+ justify-content: center;
130
+ border-radius: 6px;
131
+ transition: background 0.1s, color 0.1s;
132
+ }
133
+
134
+ .dev-docs-close:hover {
135
+ background: var(--bg-tertiary);
136
+ color: var(--text);
137
+ }
138
+
139
+ .dev-docs-content {
140
+ flex: 1;
141
+ overflow-y: auto;
142
+ padding: 20px 24px;
143
+ font-family: var(--font-mono);
144
+ font-size: 12.5px;
145
+ line-height: 1.7;
146
+ color: var(--text-secondary);
147
+ }
148
+
149
+ /* ── Section (hidden/shown by navigation) ─────────────── */
150
+ .dev-docs-section {
151
+ display: none;
152
+ }
153
+
154
+ .dev-docs-section.active {
155
+ display: block;
156
+ }
157
+
158
+ /* ── Typography inside docs ───────────────────────────── */
159
+ .dev-docs-content h2 {
160
+ font-size: 15px;
161
+ font-weight: 700;
162
+ color: var(--text);
163
+ margin: 0 0 14px;
164
+ padding-bottom: 8px;
165
+ border-bottom: 1px solid var(--border);
166
+ }
167
+
168
+ .dev-docs-content h3 {
169
+ font-size: 13px;
170
+ font-weight: 600;
171
+ color: var(--accent);
172
+ margin: 20px 0 8px;
173
+ }
174
+
175
+ .dev-docs-content p {
176
+ margin: 0 0 12px;
177
+ }
178
+
179
+ .dev-docs-content ul {
180
+ margin: 0 0 12px;
181
+ padding-left: 18px;
182
+ }
183
+
184
+ .dev-docs-content li {
185
+ margin-bottom: 4px;
186
+ }
187
+
188
+ .dev-docs-content code {
189
+ background: var(--bg-tertiary);
190
+ padding: 1px 5px;
191
+ border-radius: 3px;
192
+ font-size: 11.5px;
193
+ color: var(--accent);
194
+ }
195
+
196
+ .dev-docs-content pre {
197
+ background: var(--bg);
198
+ border: 1px solid var(--border);
199
+ border-radius: var(--radius);
200
+ padding: 14px 16px;
201
+ margin: 8px 0 16px;
202
+ overflow-x: auto;
203
+ font-size: 11.5px;
204
+ line-height: 1.6;
205
+ color: var(--text);
206
+ }
207
+
208
+ .dev-docs-content pre code {
209
+ background: none;
210
+ padding: 0;
211
+ color: inherit;
212
+ }
213
+
214
+ .dev-docs-content .param-table {
215
+ width: 100%;
216
+ border-collapse: collapse;
217
+ margin: 8px 0 16px;
218
+ font-size: 11.5px;
219
+ }
220
+
221
+ .dev-docs-content .param-table th {
222
+ text-align: left;
223
+ padding: 6px 10px;
224
+ background: var(--bg-tertiary);
225
+ color: var(--text-dim);
226
+ font-weight: 600;
227
+ text-transform: uppercase;
228
+ font-size: 10px;
229
+ letter-spacing: 0.05em;
230
+ border-bottom: 1px solid var(--border);
231
+ }
232
+
233
+ .dev-docs-content .param-table td {
234
+ padding: 6px 10px;
235
+ border-bottom: 1px solid var(--border);
236
+ vertical-align: top;
237
+ }
238
+
239
+ .dev-docs-content .param-table td:first-child {
240
+ color: var(--accent);
241
+ white-space: nowrap;
242
+ }
243
+
244
+ .dev-docs-content .param-table td:nth-child(2) {
245
+ color: var(--purple, #b392f0);
246
+ white-space: nowrap;
247
+ }
248
+
249
+ .dev-docs-content .tag {
250
+ display: inline-block;
251
+ padding: 1px 6px;
252
+ border-radius: 3px;
253
+ font-size: 10px;
254
+ font-weight: 600;
255
+ text-transform: uppercase;
256
+ letter-spacing: 0.03em;
257
+ }
258
+
259
+ .dev-docs-content .tag-required {
260
+ background: rgba(229, 83, 75, 0.15);
261
+ color: var(--error);
262
+ }
263
+
264
+ .dev-docs-content .tag-optional {
265
+ background: rgba(74, 158, 255, 0.15);
266
+ color: var(--info, #4a9eff);
267
+ }
268
+
269
+ .dev-docs-content .callout {
270
+ background: var(--accent-dim);
271
+ border-left: 3px solid var(--accent);
272
+ padding: 10px 14px;
273
+ margin: 12px 0;
274
+ border-radius: 0 var(--radius) var(--radius) 0;
275
+ font-size: 12px;
276
+ }
277
+
278
+ /* ── Responsive ───────────────────────────────────────── */
279
+ @media (max-width: 640px) {
280
+ .dev-docs-nav {
281
+ width: 44px;
282
+ min-width: 44px;
283
+ }
284
+ .dev-docs-nav-header span,
285
+ .dev-docs-nav-item span {
286
+ display: none;
287
+ }
288
+ .dev-docs-nav-item {
289
+ justify-content: center;
290
+ padding: 8px 0;
291
+ }
292
+ }