@leejungkiin/awkit 1.1.0 → 1.1.2

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 (119) hide show
  1. package/README.md +3 -3
  2. package/VERSION +1 -1
  3. package/bin/awf.js +1 -1
  4. package/bin/awk.js +237 -26
  5. package/core/AGENTS.md +8 -9
  6. package/core/GEMINI.md +74 -199
  7. package/package.json +3 -2
  8. package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +2 -2
  9. package/skills/CATALOG.md +3 -2
  10. package/skills/README.md +109 -0
  11. package/skills/android-re-analyzer/SKILL.md +238 -0
  12. package/skills/android-re-analyzer/references/api-extraction-patterns.md +119 -0
  13. package/skills/android-re-analyzer/references/call-flow-analysis.md +176 -0
  14. package/skills/android-re-analyzer/references/fernflower-usage.md +115 -0
  15. package/skills/android-re-analyzer/references/jadx-usage.md +116 -0
  16. package/skills/android-re-analyzer/references/setup-guide.md +221 -0
  17. package/skills/android-re-analyzer/scripts/check-deps.sh +129 -0
  18. package/skills/android-re-analyzer/scripts/decompile.sh +375 -0
  19. package/skills/android-re-analyzer/scripts/find-api-calls.sh +118 -0
  20. package/skills/android-re-analyzer/scripts/install-dep.sh +448 -0
  21. package/skills/awf-session-restore/SKILL.md +108 -184
  22. package/skills/beads-manager/SKILL.md +2 -2
  23. package/skills/brainstorm-agent/SKILL.md +47 -2
  24. package/skills/gemini-conductor/SKILL.md +234 -0
  25. package/skills/memory-sync/SKILL.md +29 -1
  26. package/skills/nm-memory-sync/SKILL.md +2 -2
  27. package/skills/orchestrator/SKILL.md +29 -155
  28. package/skills/skills/nm-memory-sync/SKILL.md +2 -2
  29. package/skills/smali-to-kotlin/SKILL.md +1 -1
  30. package/skills/smali-to-swift/SKILL.md +1 -1
  31. package/skills/swiftui-pro/SKILL.md +108 -0
  32. package/skills/swiftui-pro/agents/openai.yaml +10 -0
  33. package/skills/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
  34. package/skills/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
  35. package/skills/swiftui-pro/references/accessibility.md +13 -0
  36. package/skills/swiftui-pro/references/api.md +39 -0
  37. package/skills/swiftui-pro/references/data.md +43 -0
  38. package/skills/swiftui-pro/references/design.md +31 -0
  39. package/skills/swiftui-pro/references/hygiene.md +9 -0
  40. package/skills/swiftui-pro/references/navigation.md +14 -0
  41. package/skills/swiftui-pro/references/performance.md +46 -0
  42. package/skills/swiftui-pro/references/swift.md +56 -0
  43. package/skills/swiftui-pro/references/views.md +35 -0
  44. package/skills/symphony-enforcer/SKILL.md +362 -0
  45. package/skills/symphony-orchestrator/SKILL.md +301 -0
  46. package/skills/telegram-notify/SKILL.md +57 -0
  47. package/symphony/LICENSE +21 -0
  48. package/symphony/README.md +178 -0
  49. package/symphony/app/api/agents/route.js +152 -0
  50. package/symphony/app/api/events/route.js +22 -0
  51. package/symphony/app/api/knowledge/route.js +253 -0
  52. package/symphony/app/api/locks/route.js +29 -0
  53. package/symphony/app/api/notes/route.js +125 -0
  54. package/symphony/app/api/preflight/route.js +23 -0
  55. package/symphony/app/api/projects/route.js +116 -0
  56. package/symphony/app/api/roles/route.js +134 -0
  57. package/symphony/app/api/skills/route.js +82 -0
  58. package/symphony/app/api/status/route.js +18 -0
  59. package/symphony/app/api/tasks/route.js +157 -0
  60. package/symphony/app/api/workflows/route.js +61 -0
  61. package/symphony/app/api/workspaces/route.js +15 -0
  62. package/symphony/app/globals.css +2605 -0
  63. package/symphony/app/layout.js +20 -0
  64. package/symphony/app/page.js +2122 -0
  65. package/symphony/cli/index.js +1060 -0
  66. package/symphony/core/agent-manager.js +357 -0
  67. package/symphony/core/context-bus.js +100 -0
  68. package/symphony/core/db.js +223 -0
  69. package/symphony/core/file-lock-manager.js +154 -0
  70. package/symphony/core/merge-pipeline.js +234 -0
  71. package/symphony/core/orchestrator.js +236 -0
  72. package/symphony/core/task-manager.js +335 -0
  73. package/symphony/core/workspace-manager.js +168 -0
  74. package/symphony/jsconfig.json +7 -0
  75. package/symphony/lib/core.mjs +1034 -0
  76. package/symphony/mcp/index.js +29 -0
  77. package/symphony/mcp/server.js +110 -0
  78. package/symphony/mcp/tools/context.js +80 -0
  79. package/symphony/mcp/tools/locks.js +99 -0
  80. package/symphony/mcp/tools/status.js +82 -0
  81. package/symphony/mcp/tools/tasks.js +216 -0
  82. package/symphony/mcp/tools/workspace.js +143 -0
  83. package/symphony/next.config.mjs +7 -0
  84. package/symphony/package.json +53 -0
  85. package/symphony/scripts/postinstall.js +49 -0
  86. package/symphony/symphony.config.js +41 -0
  87. package/templates/conductor-tracks.md +38 -0
  88. package/templates/specs/PROJECT.md +50 -0
  89. package/templates/specs/ROADMAP.md +79 -0
  90. package/templates/specs/TECH-SPEC.md +81 -0
  91. package/templates/specs/task-spec-template.xml +65 -0
  92. package/templates/workflow_dual_mode_template.md +5 -5
  93. package/workflows/_uncategorized/AGENTS.md +38 -0
  94. package/workflows/_uncategorized/decompile.md +67 -0
  95. package/workflows/_uncategorized/skill-health.md +7 -7
  96. package/workflows/ads/ads-audit.md +5 -5
  97. package/workflows/ads/ads-optimize.md +10 -10
  98. package/workflows/ads/adsExpert.md +7 -7
  99. package/workflows/conductor.md +97 -0
  100. package/workflows/context/auto-implement.md +4 -4
  101. package/workflows/context/codebase-sync.md +19 -8
  102. package/workflows/context/next.md +27 -27
  103. package/workflows/context/user-intent-analysis-workflow.md +4 -4
  104. package/workflows/expert/codeExpert.md +28 -31
  105. package/workflows/expert/debugExpert.md +11 -11
  106. package/workflows/expert/planExpert.md +21 -36
  107. package/workflows/git/smart-git-ops.md +49 -6
  108. package/workflows/lifecycle/debug.md +7 -7
  109. package/workflows/lifecycle/deploy.md +10 -10
  110. package/workflows/lifecycle/init.md +103 -91
  111. package/workflows/lifecycle/master-code-workflow.md +3 -3
  112. package/workflows/lifecycle/plan.md +19 -21
  113. package/workflows/quality/audit.md +1 -1
  114. package/workflows/quality/project-audit.md +1 -1
  115. package/workflows/roles/vibe-coding-master-workflow.md +2 -2
  116. package/workflows/smart-git-ops.md +146 -0
  117. package/workflows/ui/app-screen-analyzer.md +4 -4
  118. package/workflows/ui/create-feature.md +8 -8
  119. package/workflows/ui/create-spec-architect.md +11 -11
@@ -0,0 +1,2605 @@
1
+ :root {
2
+ --bg-primary: #0a0a0f;
3
+ --bg-secondary: #12121a;
4
+ --bg-card: #1a1a2e;
5
+ --bg-card-hover: #1f1f35;
6
+ --bg-column: #0f0f18;
7
+
8
+ --text-primary: #e8e8f0;
9
+ --text-secondary: #8888a0;
10
+ --text-muted: #555568;
11
+
12
+ --accent-blue: #4f7cff;
13
+ --accent-purple: #7c5cff;
14
+ --accent-green: #34d399;
15
+ --accent-yellow: #fbbf24;
16
+ --accent-red: #f87171;
17
+ --accent-orange: #fb923c;
18
+
19
+ --border: #2a2a40;
20
+ --border-light: #333350;
21
+
22
+ --gradient-1: linear-gradient(135deg, #4f7cff 0%, #7c5cff 100%);
23
+ --gradient-2: linear-gradient(135deg, #7c5cff 0%, #c084fc 100%);
24
+
25
+ --radius-sm: 6px;
26
+ --radius-md: 10px;
27
+ --radius-lg: 14px;
28
+ --radius-xl: 20px;
29
+
30
+ --shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
31
+ --shadow-lg: 0 8px 40px rgba(0, 0, 0, 0.4);
32
+ }
33
+
34
+ * {
35
+ margin: 0;
36
+ padding: 0;
37
+ box-sizing: border-box;
38
+ }
39
+
40
+ body {
41
+ font-family: 'Inter', -apple-system, sans-serif;
42
+ background: var(--bg-primary);
43
+ color: var(--text-primary);
44
+ min-height: 100vh;
45
+ -webkit-font-smoothing: antialiased;
46
+ }
47
+
48
+ /* ─── Header ──────────────────────────────────────────────────────────────── */
49
+
50
+ .header {
51
+ display: flex;
52
+ align-items: center;
53
+ justify-content: space-between;
54
+ padding: 16px 24px;
55
+ background: var(--bg-secondary);
56
+ border-bottom: 1px solid var(--border);
57
+ position: sticky;
58
+ top: 0;
59
+ z-index: 100;
60
+ backdrop-filter: blur(10px);
61
+ }
62
+
63
+ .header-left {
64
+ display: flex;
65
+ align-items: center;
66
+ gap: 12px;
67
+ }
68
+
69
+ .header-logo {
70
+ font-size: 24px;
71
+ }
72
+
73
+ .header-title {
74
+ font-size: 18px;
75
+ font-weight: 700;
76
+ background: var(--gradient-1);
77
+ -webkit-background-clip: text;
78
+ background-clip: text;
79
+ -webkit-text-fill-color: transparent;
80
+ }
81
+
82
+ .header-right {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: 16px;
86
+ }
87
+
88
+ .status-badge {
89
+ display: flex;
90
+ align-items: center;
91
+ gap: 6px;
92
+ padding: 6px 14px;
93
+ background: rgba(52, 211, 153, 0.12);
94
+ border: 1px solid rgba(52, 211, 153, 0.25);
95
+ border-radius: 20px;
96
+ font-size: 13px;
97
+ font-weight: 500;
98
+ color: var(--accent-green);
99
+ }
100
+
101
+ .status-dot {
102
+ width: 6px;
103
+ height: 6px;
104
+ border-radius: 50%;
105
+ background: var(--accent-green);
106
+ animation: pulse 2s ease-in-out infinite;
107
+ }
108
+
109
+ @keyframes pulse {
110
+
111
+ 0%,
112
+ 100% {
113
+ opacity: 1;
114
+ }
115
+
116
+ 50% {
117
+ opacity: 0.4;
118
+ }
119
+ }
120
+
121
+ /* ─── Stats Bar ───────────────────────────────────────────────────────────── */
122
+
123
+ .stats-bar {
124
+ display: flex;
125
+ gap: 12px;
126
+ padding: 16px 24px;
127
+ background: var(--bg-secondary);
128
+ border-bottom: 1px solid var(--border);
129
+ }
130
+
131
+ .stat-card {
132
+ display: flex;
133
+ align-items: center;
134
+ gap: 10px;
135
+ padding: 10px 16px;
136
+ background: var(--bg-card);
137
+ border: 1px solid var(--border);
138
+ border-radius: var(--radius-md);
139
+ min-width: 120px;
140
+ }
141
+
142
+ .stat-icon {
143
+ font-size: 20px;
144
+ }
145
+
146
+ .stat-info {
147
+ display: flex;
148
+ flex-direction: column;
149
+ }
150
+
151
+ .stat-value {
152
+ font-size: 20px;
153
+ font-weight: 700;
154
+ line-height: 1;
155
+ }
156
+
157
+ .stat-label {
158
+ font-size: 11px;
159
+ color: var(--text-secondary);
160
+ text-transform: uppercase;
161
+ letter-spacing: 0.5px;
162
+ }
163
+
164
+ /* ─── Main Content ────────────────────────────────────────────────────────── */
165
+
166
+ .main {
167
+ display: flex;
168
+ gap: 0;
169
+ height: calc(100vh - 140px);
170
+ }
171
+
172
+ /* ─── Kanban Board ────────────────────────────────────────────────────────── */
173
+
174
+ .kanban {
175
+ display: flex;
176
+ gap: 16px;
177
+ padding: 20px 24px;
178
+ flex: 1;
179
+ overflow-x: auto;
180
+ }
181
+
182
+ .kanban-column {
183
+ min-width: 280px;
184
+ max-width: 320px;
185
+ flex: 1;
186
+ display: flex;
187
+ flex-direction: column;
188
+ background: var(--bg-column);
189
+ border-radius: var(--radius-lg);
190
+ border: 1px solid var(--border);
191
+ overflow: hidden;
192
+ }
193
+
194
+ .column-header {
195
+ display: flex;
196
+ align-items: center;
197
+ justify-content: space-between;
198
+ padding: 14px 16px;
199
+ border-bottom: 1px solid var(--border);
200
+ }
201
+
202
+ .column-title {
203
+ display: flex;
204
+ align-items: center;
205
+ gap: 8px;
206
+ font-size: 13px;
207
+ font-weight: 600;
208
+ text-transform: uppercase;
209
+ letter-spacing: 0.5px;
210
+ color: var(--text-secondary);
211
+ }
212
+
213
+ .column-count {
214
+ background: var(--bg-card);
215
+ padding: 2px 8px;
216
+ border-radius: 10px;
217
+ font-size: 12px;
218
+ font-weight: 600;
219
+ color: var(--text-muted);
220
+ }
221
+
222
+ .column-body {
223
+ flex: 1;
224
+ padding: 12px;
225
+ overflow-y: auto;
226
+ display: flex;
227
+ flex-direction: column;
228
+ gap: 10px;
229
+ }
230
+
231
+ /* ─── Task Cards ──────────────────────────────────────────────────────────── */
232
+
233
+ .task-card {
234
+ background: var(--bg-card);
235
+ border: 1px solid var(--border);
236
+ border-radius: var(--radius-md);
237
+ padding: 14px;
238
+ cursor: pointer;
239
+ transition: all 0.2s ease;
240
+ }
241
+
242
+ .task-card:hover {
243
+ background: var(--bg-card-hover);
244
+ border-color: var(--border-light);
245
+ transform: translateY(-1px);
246
+ box-shadow: var(--shadow);
247
+ }
248
+
249
+ .task-card-title {
250
+ font-size: 14px;
251
+ font-weight: 600;
252
+ margin-bottom: 8px;
253
+ line-height: 1.4;
254
+ }
255
+
256
+ .task-card-meta {
257
+ display: flex;
258
+ align-items: center;
259
+ justify-content: space-between;
260
+ gap: 8px;
261
+ }
262
+
263
+ .task-card-id {
264
+ font-size: 11px;
265
+ color: var(--text-muted);
266
+ font-family: 'SF Mono', 'Fira Code', monospace;
267
+ }
268
+
269
+ .task-id-group {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: 4px;
273
+ }
274
+
275
+ .copy-id-btn {
276
+ background: transparent;
277
+ border: 1px solid transparent;
278
+ color: var(--text-muted);
279
+ font-size: 11px;
280
+ cursor: pointer;
281
+ padding: 1px 4px;
282
+ border-radius: 4px;
283
+ opacity: 0;
284
+ transition: all 0.2s ease;
285
+ line-height: 1;
286
+ }
287
+
288
+ .task-card:hover .copy-id-btn,
289
+ .detail-header .copy-id-btn {
290
+ opacity: 1;
291
+ }
292
+
293
+ .copy-id-btn:hover {
294
+ color: var(--accent-blue);
295
+ border-color: rgba(79, 124, 255, 0.3);
296
+ background: rgba(79, 124, 255, 0.1);
297
+ }
298
+
299
+ .task-card-priority {
300
+ font-size: 11px;
301
+ padding: 2px 8px;
302
+ border-radius: 10px;
303
+ font-weight: 600;
304
+ }
305
+
306
+ .priority-1 {
307
+ background: rgba(248, 113, 113, 0.15);
308
+ color: var(--accent-red);
309
+ }
310
+
311
+ .priority-2 {
312
+ background: rgba(251, 191, 36, 0.15);
313
+ color: var(--accent-yellow);
314
+ }
315
+
316
+ .priority-3 {
317
+ background: rgba(136, 136, 160, 0.15);
318
+ color: var(--text-secondary);
319
+ }
320
+
321
+ .task-card-agent {
322
+ display: flex;
323
+ align-items: center;
324
+ gap: 6px;
325
+ font-size: 12px;
326
+ color: var(--accent-blue);
327
+ margin-top: 8px;
328
+ }
329
+
330
+ .task-card-progress {
331
+ margin-top: 10px;
332
+ }
333
+
334
+ .progress-bar-bg {
335
+ height: 4px;
336
+ background: var(--border);
337
+ border-radius: 2px;
338
+ overflow: hidden;
339
+ }
340
+
341
+ .progress-bar-fill {
342
+ height: 100%;
343
+ background: var(--gradient-1);
344
+ border-radius: 2px;
345
+ transition: width 0.4s ease;
346
+ }
347
+
348
+ .progress-label {
349
+ font-size: 11px;
350
+ color: var(--text-muted);
351
+ margin-top: 4px;
352
+ text-align: right;
353
+ }
354
+
355
+ /* ─── Side Panel ──────────────────────────────────────────────────────────── */
356
+
357
+ .side-panel {
358
+ width: 360px;
359
+ border-left: 1px solid var(--border);
360
+ background: var(--bg-secondary);
361
+ display: flex;
362
+ flex-direction: column;
363
+ overflow: hidden;
364
+ }
365
+
366
+ .panel-tabs {
367
+ display: flex;
368
+ border-bottom: 1px solid var(--border);
369
+ }
370
+
371
+ .panel-tab {
372
+ flex: 1;
373
+ padding: 12px;
374
+ font-size: 12px;
375
+ font-weight: 600;
376
+ text-align: center;
377
+ text-transform: uppercase;
378
+ letter-spacing: 0.5px;
379
+ color: var(--text-muted);
380
+ cursor: pointer;
381
+ border-bottom: 2px solid transparent;
382
+ transition: all 0.2s ease;
383
+ }
384
+
385
+ .panel-tab.active {
386
+ color: var(--accent-blue);
387
+ border-bottom-color: var(--accent-blue);
388
+ }
389
+
390
+ .panel-tab:hover {
391
+ color: var(--text-secondary);
392
+ }
393
+
394
+ .panel-content {
395
+ flex: 1;
396
+ overflow-y: auto;
397
+ padding: 16px;
398
+ }
399
+
400
+ /* ─── Agent Cards ─────────────────────────────────────────────────────────── */
401
+
402
+ .agent-card {
403
+ background: var(--bg-card);
404
+ border: 1px solid var(--border);
405
+ border-radius: var(--radius-md);
406
+ padding: 14px;
407
+ margin-bottom: 10px;
408
+ transition: all 0.2s ease;
409
+ }
410
+
411
+ .agent-card:hover {
412
+ border-color: var(--border-light);
413
+ }
414
+
415
+ .agent-header {
416
+ display: flex;
417
+ align-items: center;
418
+ justify-content: space-between;
419
+ margin-bottom: 10px;
420
+ }
421
+
422
+ .agent-name {
423
+ display: flex;
424
+ align-items: center;
425
+ gap: 8px;
426
+ font-size: 14px;
427
+ font-weight: 600;
428
+ }
429
+
430
+ .agent-status {
431
+ font-size: 11px;
432
+ padding: 3px 10px;
433
+ border-radius: 10px;
434
+ font-weight: 500;
435
+ }
436
+
437
+ .agent-status.working {
438
+ background: rgba(79, 124, 255, 0.15);
439
+ color: var(--accent-blue);
440
+ }
441
+
442
+ .agent-status.idle {
443
+ background: rgba(136, 136, 160, 0.1);
444
+ color: var(--text-muted);
445
+ }
446
+
447
+ .agent-detail {
448
+ display: flex;
449
+ align-items: center;
450
+ gap: 6px;
451
+ font-size: 12px;
452
+ color: var(--text-secondary);
453
+ margin-top: 4px;
454
+ }
455
+
456
+ /* ─── File Lock Table ─────────────────────────────────────────────────────── */
457
+
458
+ .lock-item {
459
+ display: flex;
460
+ align-items: center;
461
+ gap: 10px;
462
+ padding: 10px 12px;
463
+ background: var(--bg-card);
464
+ border: 1px solid var(--border);
465
+ border-radius: var(--radius-sm);
466
+ margin-bottom: 8px;
467
+ font-size: 13px;
468
+ }
469
+
470
+ .lock-file {
471
+ font-family: 'SF Mono', 'Fira Code', monospace;
472
+ font-size: 12px;
473
+ color: var(--text-primary);
474
+ flex: 1;
475
+ overflow: hidden;
476
+ text-overflow: ellipsis;
477
+ white-space: nowrap;
478
+ }
479
+
480
+ .lock-agent {
481
+ font-size: 11px;
482
+ color: var(--accent-purple);
483
+ white-space: nowrap;
484
+ }
485
+
486
+ /* ─── Create Task Button ──────────────────────────────────────────────────── */
487
+
488
+ .create-btn {
489
+ display: flex;
490
+ align-items: center;
491
+ gap: 6px;
492
+ padding: 8px 16px;
493
+ background: var(--gradient-1);
494
+ border: none;
495
+ border-radius: var(--radius-md);
496
+ color: white;
497
+ font-size: 13px;
498
+ font-weight: 600;
499
+ cursor: pointer;
500
+ transition: all 0.2s ease;
501
+ font-family: inherit;
502
+ }
503
+
504
+ .create-btn:hover {
505
+ opacity: 0.9;
506
+ transform: translateY(-1px);
507
+ box-shadow: 0 4px 16px rgba(79, 124, 255, 0.3);
508
+ }
509
+
510
+ /* ─── Modal ───────────────────────────────────────────────────────────────── */
511
+
512
+ .modal-overlay {
513
+ position: fixed;
514
+ inset: 0;
515
+ background: rgba(0, 0, 0, 0.6);
516
+ backdrop-filter: blur(4px);
517
+ display: flex;
518
+ align-items: center;
519
+ justify-content: center;
520
+ z-index: 200;
521
+ animation: fadeIn 0.15s ease;
522
+ }
523
+
524
+ @keyframes fadeIn {
525
+ from {
526
+ opacity: 0;
527
+ }
528
+
529
+ to {
530
+ opacity: 1;
531
+ }
532
+ }
533
+
534
+ .modal {
535
+ background: var(--bg-secondary);
536
+ border: 1px solid var(--border);
537
+ border-radius: var(--radius-xl);
538
+ padding: 28px;
539
+ width: 460px;
540
+ max-width: 90vw;
541
+ max-height: 85vh;
542
+ overflow-y: auto;
543
+ box-shadow: var(--shadow-lg);
544
+ animation: slideUp 0.2s ease;
545
+ }
546
+
547
+ @keyframes slideUp {
548
+ from {
549
+ transform: translateY(20px);
550
+ opacity: 0;
551
+ }
552
+
553
+ to {
554
+ transform: translateY(0);
555
+ opacity: 1;
556
+ }
557
+ }
558
+
559
+ .modal-title {
560
+ font-size: 18px;
561
+ font-weight: 700;
562
+ margin-bottom: 20px;
563
+ }
564
+
565
+ .form-group {
566
+ margin-bottom: 16px;
567
+ }
568
+
569
+ .form-label {
570
+ display: block;
571
+ font-size: 12px;
572
+ font-weight: 600;
573
+ color: var(--text-secondary);
574
+ text-transform: uppercase;
575
+ letter-spacing: 0.5px;
576
+ margin-bottom: 6px;
577
+ }
578
+
579
+ .form-input,
580
+ .form-select,
581
+ .form-textarea {
582
+ width: 100%;
583
+ padding: 10px 14px;
584
+ background: var(--bg-card);
585
+ border: 1px solid var(--border);
586
+ border-radius: var(--radius-sm);
587
+ color: var(--text-primary);
588
+ font-family: inherit;
589
+ font-size: 14px;
590
+ outline: none;
591
+ transition: border-color 0.2s ease;
592
+ }
593
+
594
+ .form-input:focus,
595
+ .form-select:focus,
596
+ .form-textarea:focus {
597
+ border-color: var(--accent-blue);
598
+ }
599
+
600
+ .form-textarea {
601
+ resize: vertical;
602
+ min-height: 80px;
603
+ }
604
+
605
+ .modal-actions {
606
+ display: flex;
607
+ justify-content: flex-end;
608
+ gap: 10px;
609
+ margin-top: 24px;
610
+ }
611
+
612
+ .btn-cancel {
613
+ padding: 8px 18px;
614
+ background: transparent;
615
+ border: 1px solid var(--border);
616
+ border-radius: var(--radius-sm);
617
+ color: var(--text-secondary);
618
+ font-size: 13px;
619
+ cursor: pointer;
620
+ font-family: inherit;
621
+ transition: all 0.2s ease;
622
+ }
623
+
624
+ .btn-cancel:hover {
625
+ border-color: var(--text-muted);
626
+ color: var(--text-primary);
627
+ }
628
+
629
+ /* ─── Empty State ─────────────────────────────────────────────────────────── */
630
+
631
+ .empty-state {
632
+ text-align: center;
633
+ padding: 40px 20px;
634
+ color: var(--text-muted);
635
+ }
636
+
637
+ .empty-icon {
638
+ font-size: 32px;
639
+ margin-bottom: 12px;
640
+ }
641
+
642
+ .empty-text {
643
+ font-size: 13px;
644
+ }
645
+
646
+ /* ─── Event Items ─────────────────────────────────────────────────────────── */
647
+
648
+ .event-item {
649
+ background: var(--bg-card);
650
+ border: 1px solid var(--border);
651
+ border-radius: var(--radius-sm);
652
+ padding: 12px;
653
+ margin-bottom: 8px;
654
+ transition: all 0.2s ease;
655
+ }
656
+
657
+ .event-item:hover {
658
+ border-color: var(--border-light);
659
+ }
660
+
661
+ .event-header {
662
+ display: flex;
663
+ align-items: center;
664
+ gap: 8px;
665
+ margin-bottom: 6px;
666
+ }
667
+
668
+ .event-icon {
669
+ font-size: 14px;
670
+ }
671
+
672
+ .event-type {
673
+ font-size: 12px;
674
+ font-weight: 600;
675
+ text-transform: capitalize;
676
+ color: var(--text-primary);
677
+ flex: 1;
678
+ }
679
+
680
+ .event-time {
681
+ font-size: 11px;
682
+ color: var(--text-muted);
683
+ white-space: nowrap;
684
+ }
685
+
686
+ .event-desc {
687
+ font-size: 12px;
688
+ color: var(--text-secondary);
689
+ margin-bottom: 6px;
690
+ line-height: 1.4;
691
+ }
692
+
693
+ .event-footer {
694
+ display: flex;
695
+ align-items: center;
696
+ justify-content: space-between;
697
+ font-size: 11px;
698
+ }
699
+
700
+ .event-agent {
701
+ color: var(--accent-blue);
702
+ }
703
+
704
+ .event-impact {
705
+ font-weight: 600;
706
+ text-transform: uppercase;
707
+ letter-spacing: 0.5px;
708
+ font-size: 10px;
709
+ }
710
+
711
+ .event-files {
712
+ display: flex;
713
+ flex-wrap: wrap;
714
+ gap: 4px;
715
+ margin-top: 8px;
716
+ }
717
+
718
+ .event-file-tag {
719
+ font-size: 10px;
720
+ font-family: 'SF Mono', 'Fira Code', monospace;
721
+ padding: 2px 8px;
722
+ background: rgba(79, 124, 255, 0.1);
723
+ border: 1px solid rgba(79, 124, 255, 0.2);
724
+ border-radius: 4px;
725
+ color: var(--accent-blue);
726
+ overflow: hidden;
727
+ text-overflow: ellipsis;
728
+ white-space: nowrap;
729
+ max-width: 180px;
730
+ }
731
+
732
+ /* ─── Task Detail Modal ──────────────────────────────────────────────────── */
733
+
734
+ .task-detail-modal {
735
+ width: 520px;
736
+ max-height: 85vh;
737
+ display: flex;
738
+ flex-direction: column;
739
+ overflow: hidden;
740
+ }
741
+
742
+ .task-detail-modal .edit-form {
743
+ flex: 1;
744
+ overflow-y: auto;
745
+ min-height: 0;
746
+ padding-right: 4px;
747
+ }
748
+
749
+ .task-detail-modal .modal-actions {
750
+ flex-shrink: 0;
751
+ }
752
+
753
+ .detail-header {
754
+ display: flex;
755
+ align-items: flex-start;
756
+ justify-content: space-between;
757
+ gap: 12px;
758
+ margin-bottom: 20px;
759
+ }
760
+
761
+ .detail-grid {
762
+ display: grid;
763
+ grid-template-columns: 1fr 1fr;
764
+ gap: 12px;
765
+ }
766
+
767
+ .detail-row {
768
+ display: flex;
769
+ flex-direction: column;
770
+ gap: 4px;
771
+ }
772
+
773
+ .detail-row.full {
774
+ grid-column: 1 / -1;
775
+ }
776
+
777
+ .detail-label {
778
+ font-size: 11px;
779
+ font-weight: 600;
780
+ text-transform: uppercase;
781
+ letter-spacing: 0.5px;
782
+ color: var(--text-muted);
783
+ }
784
+
785
+ .detail-value {
786
+ font-size: 13px;
787
+ color: var(--text-primary);
788
+ line-height: 1.4;
789
+ }
790
+
791
+ .detail-value.mono {
792
+ font-family: 'SF Mono', 'Fira Code', monospace;
793
+ font-size: 12px;
794
+ }
795
+
796
+ /* ─── Lock Release Button ────────────────────────────────────────────────── */
797
+
798
+ .lock-release-btn {
799
+ background: transparent;
800
+ border: 1px solid transparent;
801
+ color: var(--text-muted);
802
+ font-size: 12px;
803
+ cursor: pointer;
804
+ padding: 2px 6px;
805
+ border-radius: 4px;
806
+ transition: all 0.2s ease;
807
+ line-height: 1;
808
+ }
809
+
810
+ .lock-release-btn:hover {
811
+ color: var(--accent-red);
812
+ border-color: rgba(248, 113, 113, 0.3);
813
+ background: rgba(248, 113, 113, 0.1);
814
+ }
815
+
816
+ /* ─── Scrollbar ───────────────────────────────────────────────────────────── */
817
+
818
+ ::-webkit-scrollbar {
819
+ width: 6px;
820
+ height: 6px;
821
+ }
822
+
823
+ ::-webkit-scrollbar-track {
824
+ background: transparent;
825
+ }
826
+
827
+ ::-webkit-scrollbar-thumb {
828
+ background: var(--border);
829
+ border-radius: 3px;
830
+ }
831
+
832
+ ::-webkit-scrollbar-thumb:hover {
833
+ background: var(--border-light);
834
+ }
835
+
836
+ /* ─── Drag & Drop ─────────────────────────────────────────────────────────── */
837
+
838
+ .kanban-column.drag-over {
839
+ background: rgba(79, 124, 255, 0.05);
840
+ border-color: var(--accent-blue);
841
+ }
842
+
843
+ .task-card.draggable {
844
+ cursor: grab;
845
+ }
846
+
847
+ .task-card.draggable:active {
848
+ cursor: grabbing;
849
+ }
850
+
851
+ .drop-indicator {
852
+ height: 3px;
853
+ background: var(--accent-blue);
854
+ border-radius: 2px;
855
+ margin: 4px 0;
856
+ animation: pulse-indicator 1s ease infinite;
857
+ }
858
+
859
+ @keyframes pulse-indicator {
860
+
861
+ 0%,
862
+ 100% {
863
+ opacity: 0.5;
864
+ }
865
+
866
+ 50% {
867
+ opacity: 1;
868
+ }
869
+ }
870
+
871
+ /* ─── Task Card Enhancements ──────────────────────────────────────────────── */
872
+
873
+ .task-card-header {
874
+ display: flex;
875
+ justify-content: space-between;
876
+ align-items: flex-start;
877
+ gap: 8px;
878
+ }
879
+
880
+ .task-card-actions {
881
+ display: flex;
882
+ gap: 2px;
883
+ flex-shrink: 0;
884
+ }
885
+
886
+ .card-action-btn {
887
+ background: transparent;
888
+ border: none;
889
+ cursor: pointer;
890
+ font-size: 14px;
891
+ padding: 2px 4px;
892
+ border-radius: 4px;
893
+ opacity: 0;
894
+ transition: all 0.2s ease;
895
+ line-height: 1;
896
+ }
897
+
898
+ .task-card:hover .card-action-btn {
899
+ opacity: 1;
900
+ }
901
+
902
+ .card-action-btn:hover {
903
+ background: rgba(255, 255, 255, 0.1);
904
+ transform: scale(1.15);
905
+ }
906
+
907
+ .task-card-priority-btn {
908
+ border: none;
909
+ cursor: pointer;
910
+ font-size: 10px;
911
+ font-weight: 700;
912
+ padding: 2px 6px;
913
+ border-radius: 4px;
914
+ letter-spacing: 0.5px;
915
+ transition: all 0.2s ease;
916
+ line-height: 1.2;
917
+ }
918
+
919
+ .task-card-priority-btn:hover {
920
+ transform: scale(1.1);
921
+ filter: brightness(1.2);
922
+ }
923
+
924
+ .task-card-phase {
925
+ margin-top: 6px;
926
+ }
927
+
928
+ .phase-tag {
929
+ display: inline-block;
930
+ font-size: 10px;
931
+ padding: 2px 8px;
932
+ border-radius: 10px;
933
+ background: rgba(79, 124, 255, 0.15);
934
+ color: var(--accent-blue);
935
+ font-weight: 500;
936
+ letter-spacing: 0.3px;
937
+ }
938
+
939
+ /* ─── Column Enhancements ─────────────────────────────────────────────────── */
940
+
941
+ .column-actions {
942
+ display: flex;
943
+ align-items: center;
944
+ gap: 8px;
945
+ }
946
+
947
+ .approve-all-btn {
948
+ font-size: 11px;
949
+ padding: 3px 10px;
950
+ border-radius: 6px;
951
+ border: 1px solid rgba(52, 211, 153, 0.3);
952
+ background: rgba(52, 211, 153, 0.1);
953
+ color: var(--accent-green);
954
+ cursor: pointer;
955
+ transition: all 0.2s ease;
956
+ font-weight: 500;
957
+ }
958
+
959
+ .approve-all-btn:hover {
960
+ background: rgba(52, 211, 153, 0.2);
961
+ border-color: rgba(52, 211, 153, 0.5);
962
+ }
963
+
964
+ /* ─── Agent Panel Enhanced ────────────────────────────────────────────────── */
965
+
966
+ .add-agent-btn {
967
+ background: transparent;
968
+ border: 1px solid var(--border);
969
+ color: var(--text-secondary);
970
+ font-size: 11px;
971
+ padding: 2px 10px;
972
+ border-radius: 6px;
973
+ cursor: pointer;
974
+ transition: all 0.2s ease;
975
+ }
976
+
977
+ .add-agent-btn:hover {
978
+ border-color: var(--accent-blue);
979
+ color: var(--accent-blue);
980
+ }
981
+
982
+ .agent-identity {
983
+ display: flex;
984
+ align-items: center;
985
+ gap: 8px;
986
+ }
987
+
988
+ .agent-avatar {
989
+ width: 28px;
990
+ height: 28px;
991
+ border-radius: 50%;
992
+ display: flex;
993
+ align-items: center;
994
+ justify-content: center;
995
+ font-size: 13px;
996
+ font-weight: 700;
997
+ color: #fff;
998
+ flex-shrink: 0;
999
+ }
1000
+
1001
+ .agent-header-actions {
1002
+ display: flex;
1003
+ align-items: center;
1004
+ gap: 4px;
1005
+ }
1006
+
1007
+ .agent-edit-btn,
1008
+ .agent-remove-btn {
1009
+ background: transparent;
1010
+ border: none;
1011
+ cursor: pointer;
1012
+ font-size: 12px;
1013
+ padding: 2px 4px;
1014
+ border-radius: 4px;
1015
+ opacity: 0;
1016
+ transition: all 0.2s ease;
1017
+ }
1018
+
1019
+ .agent-card:hover .agent-edit-btn,
1020
+ .agent-card:hover .agent-remove-btn {
1021
+ opacity: 1;
1022
+ }
1023
+
1024
+ .agent-edit-btn:hover {
1025
+ background: rgba(255, 255, 255, 0.1);
1026
+ }
1027
+
1028
+ .agent-remove-btn:hover {
1029
+ color: var(--accent-red);
1030
+ background: rgba(248, 113, 113, 0.1);
1031
+ }
1032
+
1033
+ .agent-specialties {
1034
+ display: flex;
1035
+ flex-wrap: wrap;
1036
+ gap: 4px;
1037
+ margin-top: 6px;
1038
+ }
1039
+
1040
+ .specialty-tag {
1041
+ font-size: 10px;
1042
+ padding: 2px 8px;
1043
+ border-radius: 10px;
1044
+ background: rgba(124, 92, 255, 0.15);
1045
+ color: var(--accent-purple);
1046
+ font-weight: 500;
1047
+ }
1048
+
1049
+ .create-btn.full-width {
1050
+ width: 100%;
1051
+ margin-top: 12px;
1052
+ }
1053
+
1054
+ /* ─── Edit Modal ──────────────────────────────────────────────────────────── */
1055
+
1056
+ .edit-form {
1057
+ display: flex;
1058
+ flex-direction: column;
1059
+ gap: 12px;
1060
+ margin: 16px 0;
1061
+ }
1062
+
1063
+ .form-row {
1064
+ display: flex;
1065
+ gap: 12px;
1066
+ }
1067
+
1068
+ .form-group.half {
1069
+ flex: 1;
1070
+ }
1071
+
1072
+ .form-value {
1073
+ font-size: 13px;
1074
+ color: var(--text-secondary);
1075
+ padding: 8px 0;
1076
+ }
1077
+
1078
+ .detail-header {
1079
+ display: flex;
1080
+ justify-content: space-between;
1081
+ align-items: center;
1082
+ margin-bottom: 8px;
1083
+ }
1084
+
1085
+ .detail-status-badge {
1086
+ font-size: 14px;
1087
+ font-weight: 600;
1088
+ }
1089
+
1090
+ .modal-actions {
1091
+ display: flex;
1092
+ justify-content: space-between;
1093
+ align-items: center;
1094
+ gap: 8px;
1095
+ margin-top: 16px;
1096
+ }
1097
+
1098
+ .modal-actions-left,
1099
+ .modal-actions-right {
1100
+ display: flex;
1101
+ gap: 8px;
1102
+ }
1103
+
1104
+ .btn-danger {
1105
+ background: rgba(248, 113, 113, 0.1);
1106
+ border: 1px solid rgba(248, 113, 113, 0.3);
1107
+ color: var(--accent-red);
1108
+ font-size: 13px;
1109
+ padding: 8px 14px;
1110
+ border-radius: var(--radius-sm);
1111
+ cursor: pointer;
1112
+ transition: all 0.2s ease;
1113
+ }
1114
+
1115
+ .btn-danger:hover {
1116
+ background: rgba(248, 113, 113, 0.2);
1117
+ border-color: rgba(248, 113, 113, 0.5);
1118
+ }
1119
+
1120
+ .btn-reopen {
1121
+ background: rgba(251, 191, 36, 0.1);
1122
+ border: 1px solid rgba(251, 191, 36, 0.3);
1123
+ color: var(--accent-yellow);
1124
+ font-size: 13px;
1125
+ padding: 8px 14px;
1126
+ border-radius: var(--radius-sm);
1127
+ cursor: pointer;
1128
+ transition: all 0.2s ease;
1129
+ }
1130
+
1131
+ .btn-reopen:hover {
1132
+ background: rgba(251, 191, 36, 0.2);
1133
+ border-color: rgba(251, 191, 36, 0.5);
1134
+ }
1135
+
1136
+ .btn-approve {
1137
+ background: rgba(52, 211, 153, 0.1);
1138
+ border: 1px solid rgba(52, 211, 153, 0.3);
1139
+ color: var(--accent-green);
1140
+ font-size: 13px;
1141
+ padding: 8px 14px;
1142
+ border-radius: var(--radius-sm);
1143
+ cursor: pointer;
1144
+ transition: all 0.2s ease;
1145
+ }
1146
+
1147
+ .btn-approve:hover {
1148
+ background: rgba(52, 211, 153, 0.2);
1149
+ border-color: rgba(52, 211, 153, 0.5);
1150
+ }
1151
+
1152
+ /* ─── Color Presets ───────────────────────────────────────────────────────── */
1153
+
1154
+ .color-presets {
1155
+ display: flex;
1156
+ gap: 8px;
1157
+ margin-top: 4px;
1158
+ }
1159
+
1160
+ .color-preset {
1161
+ width: 28px;
1162
+ height: 28px;
1163
+ border-radius: 50%;
1164
+ border: 2px solid transparent;
1165
+ cursor: pointer;
1166
+ transition: all 0.2s ease;
1167
+ }
1168
+
1169
+ .color-preset:hover {
1170
+ transform: scale(1.15);
1171
+ }
1172
+
1173
+ .color-preset.active {
1174
+ border-color: #fff;
1175
+ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.3);
1176
+ }
1177
+
1178
+ /* ── Role Badge on Task Cards ── */
1179
+
1180
+ .role-badge {
1181
+ display: inline-flex;
1182
+ align-items: center;
1183
+ gap: 4px;
1184
+ padding: 2px 8px;
1185
+ border-radius: 6px;
1186
+ font-size: 11px;
1187
+ border: 1px solid;
1188
+ background: rgba(0, 0, 0, 0.2);
1189
+ white-space: nowrap;
1190
+ }
1191
+
1192
+ /* ── Roles Panel ── */
1193
+
1194
+ .roles-list {
1195
+ display: flex;
1196
+ flex-direction: column;
1197
+ gap: 8px;
1198
+ }
1199
+
1200
+ .role-card {
1201
+ background: var(--bg-card);
1202
+ border-radius: 10px;
1203
+ padding: 12px;
1204
+ border: 1px solid var(--bg-card-hover);
1205
+ }
1206
+
1207
+ .role-header {
1208
+ display: flex;
1209
+ align-items: center;
1210
+ gap: 10px;
1211
+ margin-bottom: 8px;
1212
+ }
1213
+
1214
+ .role-icon {
1215
+ width: 36px;
1216
+ height: 36px;
1217
+ border-radius: 8px;
1218
+ display: flex;
1219
+ align-items: center;
1220
+ justify-content: center;
1221
+ font-size: 18px;
1222
+ flex-shrink: 0;
1223
+ }
1224
+
1225
+ .role-info {
1226
+ flex: 1;
1227
+ }
1228
+
1229
+ .role-name {
1230
+ font-size: 13px;
1231
+ font-weight: 600;
1232
+ color: var(--text-primary);
1233
+ }
1234
+
1235
+ .role-meta {
1236
+ display: flex;
1237
+ gap: 8px;
1238
+ font-size: 11px;
1239
+ color: var(--text-muted);
1240
+ }
1241
+
1242
+ .role-phases {
1243
+ display: flex;
1244
+ flex-wrap: wrap;
1245
+ gap: 4px;
1246
+ margin-bottom: 6px;
1247
+ }
1248
+
1249
+ .role-skills {
1250
+ display: flex;
1251
+ flex-wrap: wrap;
1252
+ gap: 4px;
1253
+ }
1254
+
1255
+ .skill-tag {
1256
+ display: inline-flex;
1257
+ align-items: center;
1258
+ gap: 3px;
1259
+ padding: 2px 7px;
1260
+ border-radius: 4px;
1261
+ font-size: 10px;
1262
+ background: rgba(127, 127, 160, 0.1);
1263
+ color: var(--text-secondary);
1264
+ border: 1px solid rgba(127, 127, 160, 0.15);
1265
+ }
1266
+
1267
+ .shared-card {
1268
+ border-style: dashed;
1269
+ opacity: 0.85;
1270
+ }
1271
+
1272
+ /* ── Role Actions ── */
1273
+
1274
+ .role-actions {
1275
+ display: flex;
1276
+ align-items: center;
1277
+ gap: 2px;
1278
+ flex-shrink: 0;
1279
+ }
1280
+
1281
+ .role-card:hover .agent-edit-btn,
1282
+ .role-card:hover .agent-remove-btn {
1283
+ opacity: 1;
1284
+ }
1285
+
1286
+ /* ── Keyword Tags ── */
1287
+
1288
+ .role-keywords {
1289
+ display: flex;
1290
+ flex-wrap: wrap;
1291
+ gap: 4px;
1292
+ margin-top: 4px;
1293
+ }
1294
+
1295
+ .keyword-tag {
1296
+ display: inline-block;
1297
+ font-size: 10px;
1298
+ padding: 1px 7px;
1299
+ border-radius: 4px;
1300
+ background: rgba(245, 158, 11, 0.1);
1301
+ color: var(--accent-yellow);
1302
+ font-family: 'SF Mono', 'Fira Code', monospace;
1303
+ }
1304
+
1305
+ /* ── Tag Input Component ── */
1306
+
1307
+ .tag-input-container {
1308
+ display: flex;
1309
+ flex-wrap: wrap;
1310
+ gap: 4px;
1311
+ padding: 6px 8px;
1312
+ background: var(--bg-card);
1313
+ border: 1px solid var(--border);
1314
+ border-radius: var(--radius-sm);
1315
+ min-height: 36px;
1316
+ align-items: center;
1317
+ transition: border-color 0.2s ease;
1318
+ cursor: text;
1319
+ }
1320
+
1321
+ .tag-input-container:focus-within {
1322
+ border-color: var(--accent-blue);
1323
+ box-shadow: 0 0 0 2px rgba(79, 124, 255, 0.15);
1324
+ }
1325
+
1326
+ .tag-input-tag {
1327
+ display: inline-flex;
1328
+ align-items: center;
1329
+ gap: 3px;
1330
+ padding: 2px 6px;
1331
+ border-radius: 4px;
1332
+ font-size: 11px;
1333
+ background: rgba(79, 124, 255, 0.12);
1334
+ color: var(--accent-blue);
1335
+ border: 1px solid rgba(79, 124, 255, 0.2);
1336
+ white-space: nowrap;
1337
+ }
1338
+
1339
+ .tag-remove {
1340
+ background: transparent;
1341
+ border: none;
1342
+ cursor: pointer;
1343
+ font-size: 9px;
1344
+ color: var(--text-muted);
1345
+ padding: 0 2px;
1346
+ line-height: 1;
1347
+ transition: color 0.15s ease;
1348
+ }
1349
+
1350
+ .tag-remove:hover {
1351
+ color: var(--accent-red);
1352
+ }
1353
+
1354
+ .tag-input-field {
1355
+ border: none;
1356
+ background: transparent;
1357
+ outline: none;
1358
+ font-size: 12px;
1359
+ color: var(--text-primary);
1360
+ flex: 1;
1361
+ min-width: 80px;
1362
+ font-family: inherit;
1363
+ padding: 2px 0;
1364
+ }
1365
+
1366
+ .tag-input-field::placeholder {
1367
+ color: var(--text-muted);
1368
+ }
1369
+
1370
+ /* ── Modal Wide Variant ── */
1371
+
1372
+ .modal.modal-wide {
1373
+ width: 520px;
1374
+ max-width: 95vw;
1375
+ }
1376
+
1377
+ /* ── Form Hint ── */
1378
+
1379
+ .form-hint {
1380
+ font-weight: 400;
1381
+ color: var(--text-muted);
1382
+ font-size: 11px;
1383
+ }
1384
+
1385
+ /* ─── Project Selector ───────────────────────────────────────────────────── */
1386
+
1387
+ .project-selector-btn {
1388
+ display: flex;
1389
+ align-items: center;
1390
+ gap: 8px;
1391
+ padding: 6px 14px;
1392
+ background: var(--bg-card);
1393
+ border: 1px solid var(--border);
1394
+ border-radius: var(--radius-md);
1395
+ color: var(--text-primary);
1396
+ font-size: 13px;
1397
+ font-weight: 600;
1398
+ cursor: pointer;
1399
+ transition: all 0.2s ease;
1400
+ font-family: inherit;
1401
+ }
1402
+
1403
+ .project-selector-btn:hover {
1404
+ border-color: var(--accent-blue);
1405
+ background: var(--bg-card-hover);
1406
+ }
1407
+
1408
+ .project-icon {
1409
+ font-size: 16px;
1410
+ }
1411
+
1412
+ .project-name {
1413
+ max-width: 200px;
1414
+ overflow: hidden;
1415
+ text-overflow: ellipsis;
1416
+ white-space: nowrap;
1417
+ }
1418
+
1419
+ .dropdown-arrow {
1420
+ font-size: 12px;
1421
+ color: var(--text-muted);
1422
+ margin-left: 2px;
1423
+ }
1424
+
1425
+ .project-dropdown {
1426
+ position: absolute;
1427
+ top: calc(100% + 6px);
1428
+ left: 0;
1429
+ min-width: 240px;
1430
+ background: var(--bg-secondary);
1431
+ border: 1px solid var(--border);
1432
+ border-radius: var(--radius-md);
1433
+ box-shadow: var(--shadow-lg);
1434
+ z-index: 150;
1435
+ animation: fadeIn 0.12s ease;
1436
+ overflow: hidden;
1437
+ }
1438
+
1439
+ .project-option {
1440
+ display: flex;
1441
+ align-items: center;
1442
+ gap: 10px;
1443
+ padding: 10px 14px;
1444
+ cursor: pointer;
1445
+ font-size: 13px;
1446
+ transition: background 0.15s ease;
1447
+ color: var(--text-primary);
1448
+ }
1449
+
1450
+ .project-option:hover {
1451
+ background: var(--bg-card-hover);
1452
+ }
1453
+
1454
+ .project-option.active {
1455
+ background: rgba(79, 124, 255, 0.1);
1456
+ color: var(--accent-blue);
1457
+ font-weight: 600;
1458
+ }
1459
+
1460
+ .project-option.add-project {
1461
+ color: var(--text-muted);
1462
+ font-weight: 500;
1463
+ }
1464
+
1465
+ .project-option.add-project:hover {
1466
+ color: var(--accent-blue);
1467
+ }
1468
+
1469
+ .project-task-count {
1470
+ margin-left: auto;
1471
+ font-size: 11px;
1472
+ color: var(--text-muted);
1473
+ background: var(--bg-card);
1474
+ padding: 2px 7px;
1475
+ border-radius: 8px;
1476
+ }
1477
+
1478
+ .project-divider {
1479
+ height: 1px;
1480
+ background: var(--border);
1481
+ margin: 2px 0;
1482
+ }
1483
+
1484
+ /* ─── All Projects Overview Bar ──────────────────────────────────────────── */
1485
+
1486
+ .all-projects-bar {
1487
+ display: flex;
1488
+ gap: 12px;
1489
+ padding: 16px 24px;
1490
+ background: var(--bg-secondary);
1491
+ border-bottom: 1px solid var(--border);
1492
+ overflow-x: auto;
1493
+ }
1494
+
1495
+ .project-summary-card {
1496
+ min-width: 220px;
1497
+ flex: 1;
1498
+ max-width: 320px;
1499
+ background: var(--bg-card);
1500
+ border: 1px solid var(--border);
1501
+ border-left: 3px solid;
1502
+ border-radius: var(--radius-md);
1503
+ padding: 14px;
1504
+ cursor: pointer;
1505
+ transition: all 0.2s ease;
1506
+ }
1507
+
1508
+ .project-summary-card:hover {
1509
+ border-color: var(--border-light);
1510
+ transform: translateY(-1px);
1511
+ box-shadow: var(--shadow);
1512
+ }
1513
+
1514
+ .project-summary-header {
1515
+ font-size: 14px;
1516
+ font-weight: 600;
1517
+ margin-bottom: 10px;
1518
+ }
1519
+
1520
+ .project-progress-row {
1521
+ display: flex;
1522
+ align-items: center;
1523
+ gap: 10px;
1524
+ margin-bottom: 8px;
1525
+ }
1526
+
1527
+ .project-pct {
1528
+ font-size: 12px;
1529
+ font-weight: 700;
1530
+ color: var(--text-secondary);
1531
+ min-width: 32px;
1532
+ text-align: right;
1533
+ }
1534
+
1535
+ .project-summary-stats {
1536
+ display: flex;
1537
+ gap: 12px;
1538
+ font-size: 11px;
1539
+ color: var(--text-muted);
1540
+ }
1541
+
1542
+ /* ─── Icon Presets ────────────────────────────────────────────────────────── */
1543
+
1544
+ .icon-preset {
1545
+ width: 36px;
1546
+ height: 36px;
1547
+ border: 2px solid var(--border);
1548
+ border-radius: var(--radius-sm);
1549
+ background: var(--bg-card);
1550
+ cursor: pointer;
1551
+ font-size: 18px;
1552
+ display: inline-flex;
1553
+ align-items: center;
1554
+ justify-content: center;
1555
+ transition: all 0.15s ease;
1556
+ }
1557
+
1558
+ .icon-preset:hover {
1559
+ border-color: var(--border-light);
1560
+ background: var(--bg-card-hover);
1561
+ }
1562
+
1563
+ .icon-preset.active {
1564
+ border-color: var(--accent-blue);
1565
+ background: rgba(79, 124, 255, 0.1);
1566
+ }
1567
+
1568
+ /* ─── Notes Panel ────────────────────────────────────────────────────────── */
1569
+
1570
+ .tab-badge {
1571
+ display: inline-flex;
1572
+ align-items: center;
1573
+ justify-content: center;
1574
+ min-width: 16px;
1575
+ height: 16px;
1576
+ padding: 0 4px;
1577
+ border-radius: 8px;
1578
+ background: var(--accent-blue);
1579
+ color: #fff;
1580
+ font-size: 10px;
1581
+ font-weight: 700;
1582
+ margin-left: 4px;
1583
+ }
1584
+
1585
+ .notes-panel {
1586
+ display: flex;
1587
+ flex-direction: column;
1588
+ gap: 12px;
1589
+ }
1590
+
1591
+ .notes-group-header {
1592
+ display: flex;
1593
+ justify-content: space-between;
1594
+ align-items: center;
1595
+ font-size: 12px;
1596
+ font-weight: 600;
1597
+ color: var(--text-secondary);
1598
+ padding: 4px 0;
1599
+ text-transform: capitalize;
1600
+ }
1601
+
1602
+ .notes-group-count {
1603
+ font-size: 11px;
1604
+ color: var(--text-muted);
1605
+ background: var(--bg-card);
1606
+ padding: 1px 7px;
1607
+ border-radius: 8px;
1608
+ }
1609
+
1610
+ .note-card {
1611
+ background: var(--bg-card);
1612
+ border: 1px solid var(--border);
1613
+ border-radius: var(--radius-sm);
1614
+ padding: 10px 12px;
1615
+ margin-bottom: 6px;
1616
+ transition: all 0.2s ease;
1617
+ }
1618
+
1619
+ .note-card:hover {
1620
+ border-color: var(--border-light);
1621
+ }
1622
+
1623
+ .note-card-header {
1624
+ display: flex;
1625
+ justify-content: space-between;
1626
+ align-items: flex-start;
1627
+ gap: 8px;
1628
+ margin-bottom: 6px;
1629
+ }
1630
+
1631
+ .note-title {
1632
+ font-size: 12px;
1633
+ font-weight: 600;
1634
+ color: var(--text-primary);
1635
+ line-height: 1.3;
1636
+ }
1637
+
1638
+ .note-action-btn {
1639
+ background: transparent;
1640
+ border: none;
1641
+ cursor: pointer;
1642
+ font-size: 11px;
1643
+ padding: 2px 4px;
1644
+ border-radius: 4px;
1645
+ opacity: 0;
1646
+ transition: all 0.15s ease;
1647
+ line-height: 1;
1648
+ }
1649
+
1650
+ .note-card:hover .note-action-btn {
1651
+ opacity: 1;
1652
+ }
1653
+
1654
+ .note-action-btn.danger {
1655
+ color: var(--accent-red);
1656
+ opacity: 1;
1657
+ font-weight: 700;
1658
+ }
1659
+
1660
+ .note-action-btn:hover {
1661
+ background: rgba(255, 255, 255, 0.08);
1662
+ }
1663
+
1664
+ .note-meta {
1665
+ display: flex;
1666
+ align-items: center;
1667
+ gap: 6px;
1668
+ font-size: 11px;
1669
+ color: var(--text-muted);
1670
+ margin-bottom: 3px;
1671
+ }
1672
+
1673
+ .note-meta-label {
1674
+ font-size: 10px;
1675
+ flex-shrink: 0;
1676
+ }
1677
+
1678
+ .note-meta-value {
1679
+ overflow: hidden;
1680
+ text-overflow: ellipsis;
1681
+ white-space: nowrap;
1682
+ }
1683
+
1684
+ .note-conv-id {
1685
+ font-family: 'SF Mono', 'Fira Code', monospace;
1686
+ font-size: 10px;
1687
+ padding: 1px 5px;
1688
+ background: rgba(79, 124, 255, 0.08);
1689
+ border: 1px solid rgba(79, 124, 255, 0.15);
1690
+ border-radius: 3px;
1691
+ color: var(--accent-blue);
1692
+ }
1693
+
1694
+ .note-time {
1695
+ font-size: 10px;
1696
+ color: var(--text-muted);
1697
+ margin-top: 4px;
1698
+ }
1699
+
1700
+ /* ─── Task Conversations ─────────────────────────────────────────────────── */
1701
+
1702
+ .task-conversations {
1703
+ display: flex;
1704
+ flex-direction: column;
1705
+ gap: 6px;
1706
+ margin-top: 4px;
1707
+ }
1708
+
1709
+ .conv-item {
1710
+ display: flex;
1711
+ align-items: center;
1712
+ gap: 6px;
1713
+ padding: 6px 8px;
1714
+ background: var(--bg-card);
1715
+ border: 1px solid var(--border);
1716
+ border-radius: var(--radius-sm);
1717
+ font-size: 11px;
1718
+ transition: all 0.15s ease;
1719
+ }
1720
+
1721
+ .conv-item:hover {
1722
+ border-color: var(--border-light);
1723
+ }
1724
+
1725
+ .conv-item.primary {
1726
+ border-left: 2px solid var(--accent-blue);
1727
+ }
1728
+
1729
+ .conv-label {
1730
+ font-size: 10px;
1731
+ font-weight: 600;
1732
+ color: var(--accent-blue);
1733
+ text-transform: uppercase;
1734
+ letter-spacing: 0.5px;
1735
+ flex-shrink: 0;
1736
+ }
1737
+
1738
+ .conv-type-icon {
1739
+ font-size: 12px;
1740
+ flex-shrink: 0;
1741
+ }
1742
+
1743
+ .conv-note-title {
1744
+ font-size: 11px;
1745
+ color: var(--text-secondary);
1746
+ overflow: hidden;
1747
+ text-overflow: ellipsis;
1748
+ white-space: nowrap;
1749
+ flex: 1;
1750
+ min-width: 0;
1751
+ }
1752
+
1753
+ .conv-remove-btn {
1754
+ background: transparent;
1755
+ border: none;
1756
+ color: var(--text-muted);
1757
+ cursor: pointer;
1758
+ font-size: 11px;
1759
+ padding: 2px 4px;
1760
+ border-radius: 4px;
1761
+ opacity: 0;
1762
+ transition: all 0.15s ease;
1763
+ flex-shrink: 0;
1764
+ }
1765
+
1766
+ .conv-item:hover .conv-remove-btn {
1767
+ opacity: 1;
1768
+ }
1769
+
1770
+ .conv-remove-btn:hover {
1771
+ color: var(--accent-red);
1772
+ background: rgba(248, 113, 113, 0.1);
1773
+ }
1774
+
1775
+ .conv-add-row {
1776
+ display: flex;
1777
+ gap: 4px;
1778
+ margin-top: 4px;
1779
+ }
1780
+
1781
+ .conv-add-input {
1782
+ flex: 1;
1783
+ padding: 5px 8px;
1784
+ background: var(--bg-primary);
1785
+ border: 1px solid var(--border);
1786
+ border-radius: var(--radius-sm);
1787
+ color: var(--text-primary);
1788
+ font-size: 11px;
1789
+ font-family: 'SF Mono', 'Fira Code', monospace;
1790
+ outline: none;
1791
+ transition: border-color 0.15s ease;
1792
+ }
1793
+
1794
+ .conv-add-input:focus {
1795
+ border-color: var(--accent-blue);
1796
+ }
1797
+
1798
+ .conv-add-input::placeholder {
1799
+ color: var(--text-muted);
1800
+ font-family: inherit;
1801
+ }
1802
+
1803
+ .conv-add-btn {
1804
+ padding: 4px 10px;
1805
+ background: rgba(79, 124, 255, 0.1);
1806
+ border: 1px solid rgba(79, 124, 255, 0.3);
1807
+ border-radius: var(--radius-sm);
1808
+ color: var(--accent-blue);
1809
+ font-size: 14px;
1810
+ cursor: pointer;
1811
+ transition: all 0.15s ease;
1812
+ flex-shrink: 0;
1813
+ }
1814
+
1815
+ .conv-add-btn:hover:not(:disabled) {
1816
+ background: rgba(79, 124, 255, 0.2);
1817
+ border-color: rgba(79, 124, 255, 0.5);
1818
+ }
1819
+
1820
+ .conv-add-btn:disabled {
1821
+ opacity: 0.4;
1822
+ cursor: default;
1823
+ }
1824
+
1825
+ /* ─── Side Panel Toggle Button ────────────────────────────────────────────── */
1826
+
1827
+ .side-panel-toggle {
1828
+ display: none;
1829
+ align-items: center;
1830
+ justify-content: center;
1831
+ width: 36px;
1832
+ height: 36px;
1833
+ background: var(--bg-card);
1834
+ border: 1px solid var(--border);
1835
+ border-radius: var(--radius-sm);
1836
+ color: var(--text-secondary);
1837
+ font-size: 18px;
1838
+ cursor: pointer;
1839
+ transition: all 0.2s ease;
1840
+ flex-shrink: 0;
1841
+ }
1842
+
1843
+ .side-panel-toggle:hover {
1844
+ border-color: var(--accent-blue);
1845
+ color: var(--accent-blue);
1846
+ background: rgba(79, 124, 255, 0.1);
1847
+ }
1848
+
1849
+ .side-panel-toggle.active {
1850
+ background: rgba(79, 124, 255, 0.15);
1851
+ border-color: var(--accent-blue);
1852
+ color: var(--accent-blue);
1853
+ }
1854
+
1855
+ /* ─── Responsive: ≤1200px (Small Laptop) ─────────────────────────────────── */
1856
+
1857
+ @media (max-width: 1200px) {
1858
+ .side-panel {
1859
+ width: 280px;
1860
+ }
1861
+
1862
+ .stat-card {
1863
+ min-width: 100px;
1864
+ padding: 8px 12px;
1865
+ }
1866
+
1867
+ .stat-value {
1868
+ font-size: 18px;
1869
+ }
1870
+
1871
+ .stat-icon {
1872
+ font-size: 18px;
1873
+ }
1874
+
1875
+ .kanban-column {
1876
+ min-width: 240px;
1877
+ max-width: 280px;
1878
+ }
1879
+
1880
+ .kanban {
1881
+ padding: 16px 16px;
1882
+ gap: 12px;
1883
+ }
1884
+
1885
+ .stats-bar {
1886
+ padding: 12px 16px;
1887
+ gap: 8px;
1888
+ }
1889
+
1890
+ .header {
1891
+ padding: 12px 16px;
1892
+ }
1893
+ }
1894
+
1895
+ /* ─── Responsive: ≤900px (Tablet / Small Window) ─────────────────────────── */
1896
+
1897
+ @media (max-width: 900px) {
1898
+ .side-panel-toggle {
1899
+ display: flex;
1900
+ }
1901
+
1902
+ .main {
1903
+ flex-direction: column;
1904
+ height: auto;
1905
+ min-height: calc(100vh - 140px);
1906
+ }
1907
+
1908
+ .kanban {
1909
+ flex: none;
1910
+ overflow-x: auto;
1911
+ -webkit-overflow-scrolling: touch;
1912
+ padding: 16px;
1913
+ min-height: 60vh;
1914
+ }
1915
+
1916
+ .kanban-column {
1917
+ min-width: 260px;
1918
+ max-width: 300px;
1919
+ flex-shrink: 0;
1920
+ }
1921
+
1922
+ /* Side panel: overlay on mobile */
1923
+ .side-panel {
1924
+ position: fixed;
1925
+ top: 0;
1926
+ right: -360px;
1927
+ width: 320px;
1928
+ height: 100vh;
1929
+ z-index: 150;
1930
+ border-left: 1px solid var(--border);
1931
+ box-shadow: -8px 0 32px rgba(0, 0, 0, 0.4);
1932
+ transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1933
+ }
1934
+
1935
+ .side-panel.visible {
1936
+ right: 0;
1937
+ }
1938
+
1939
+ .side-panel-overlay {
1940
+ display: none;
1941
+ position: fixed;
1942
+ inset: 0;
1943
+ background: rgba(0, 0, 0, 0.5);
1944
+ z-index: 140;
1945
+ animation: fadeIn 0.2s ease;
1946
+ }
1947
+
1948
+ .side-panel-overlay.visible {
1949
+ display: block;
1950
+ }
1951
+
1952
+ .stats-bar {
1953
+ flex-wrap: wrap;
1954
+ padding: 12px 16px;
1955
+ gap: 8px;
1956
+ }
1957
+
1958
+ .stat-card {
1959
+ min-width: 0;
1960
+ flex: 1 1 calc(33% - 8px);
1961
+ padding: 8px 10px;
1962
+ }
1963
+
1964
+ .stat-value {
1965
+ font-size: 16px;
1966
+ }
1967
+
1968
+ .stat-label {
1969
+ font-size: 10px;
1970
+ }
1971
+
1972
+ .header {
1973
+ padding: 10px 12px;
1974
+ gap: 8px;
1975
+ }
1976
+
1977
+ .header-logo {
1978
+ font-size: 20px;
1979
+ }
1980
+
1981
+ .header-title {
1982
+ font-size: 16px;
1983
+ }
1984
+
1985
+ .project-selector {
1986
+ margin-left: 8px !important;
1987
+ }
1988
+
1989
+ .project-name {
1990
+ max-width: 100px;
1991
+ overflow: hidden;
1992
+ text-overflow: ellipsis;
1993
+ white-space: nowrap;
1994
+ }
1995
+
1996
+ .all-projects-bar {
1997
+ flex-wrap: wrap;
1998
+ }
1999
+
2000
+ .project-summary-card {
2001
+ min-width: calc(50% - 8px);
2002
+ }
2003
+
2004
+ .panel-tab {
2005
+ padding: 10px 6px;
2006
+ font-size: 11px;
2007
+ }
2008
+ }
2009
+
2010
+ /* ─── Responsive: ≤600px (Mobile) ─────────────────────────────────────────── */
2011
+
2012
+ @media (max-width: 600px) {
2013
+ .header-left {
2014
+ gap: 6px;
2015
+ min-width: 0;
2016
+ flex: 1;
2017
+ }
2018
+
2019
+ .header-right {
2020
+ gap: 8px;
2021
+ flex-shrink: 0;
2022
+ }
2023
+
2024
+ .header-logo {
2025
+ font-size: 18px;
2026
+ }
2027
+
2028
+ .header-title {
2029
+ font-size: 14px;
2030
+ }
2031
+
2032
+ .status-badge {
2033
+ padding: 4px 8px;
2034
+ font-size: 0;
2035
+ gap: 0;
2036
+ }
2037
+
2038
+ .status-badge .status-dot {
2039
+ margin: 0;
2040
+ }
2041
+
2042
+ .create-btn {
2043
+ padding: 6px 12px;
2044
+ font-size: 12px;
2045
+ }
2046
+
2047
+ .project-name {
2048
+ max-width: 70px;
2049
+ }
2050
+
2051
+ .stats-bar {
2052
+ padding: 8px 12px;
2053
+ gap: 6px;
2054
+ }
2055
+
2056
+ .stat-card {
2057
+ flex: 1 1 calc(33.33% - 6px);
2058
+ padding: 6px 8px;
2059
+ gap: 6px;
2060
+ }
2061
+
2062
+ .stat-icon {
2063
+ font-size: 14px;
2064
+ }
2065
+
2066
+ .stat-value {
2067
+ font-size: 14px;
2068
+ }
2069
+
2070
+ .stat-label {
2071
+ font-size: 9px;
2072
+ }
2073
+
2074
+ .kanban {
2075
+ padding: 12px;
2076
+ gap: 10px;
2077
+ }
2078
+
2079
+ .kanban-column {
2080
+ min-width: 240px;
2081
+ }
2082
+
2083
+ .task-card {
2084
+ padding: 10px;
2085
+ }
2086
+
2087
+ .task-card-title {
2088
+ font-size: 13px;
2089
+ }
2090
+
2091
+ .side-panel {
2092
+ width: 100vw;
2093
+ right: -100vw;
2094
+ }
2095
+
2096
+ .side-panel.visible {
2097
+ right: 0;
2098
+ }
2099
+
2100
+ .panel-tab {
2101
+ padding: 10px 4px;
2102
+ font-size: 10px;
2103
+ letter-spacing: 0;
2104
+ }
2105
+
2106
+ /* Modals: full-screen on mobile */
2107
+ .modal-overlay {
2108
+ align-items: flex-end;
2109
+ }
2110
+
2111
+ .modal,
2112
+ .task-detail-modal {
2113
+ width: 100vw;
2114
+ max-width: 100vw;
2115
+ max-height: 90vh;
2116
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
2117
+ padding: 20px 16px;
2118
+ animation: slideUpMobile 0.25s ease;
2119
+ }
2120
+
2121
+ @keyframes slideUpMobile {
2122
+ from {
2123
+ transform: translateY(100%);
2124
+ opacity: 0.5;
2125
+ }
2126
+
2127
+ to {
2128
+ transform: translateY(0);
2129
+ opacity: 1;
2130
+ }
2131
+ }
2132
+
2133
+ .all-projects-bar {
2134
+ flex-direction: column;
2135
+ }
2136
+
2137
+ .project-summary-card {
2138
+ min-width: 100%;
2139
+ }
2140
+ }
2141
+
2142
+ /* ─── Knowledge Panel ─────────────────────────────────────────────────────── */
2143
+
2144
+ .knowledge-panel {
2145
+ display: flex;
2146
+ flex-direction: column;
2147
+ gap: 8px;
2148
+ }
2149
+
2150
+ .ki-search-bar {
2151
+ display: flex;
2152
+ gap: 6px;
2153
+ margin-bottom: 4px;
2154
+ }
2155
+
2156
+ .ki-search-input {
2157
+ flex: 1;
2158
+ padding: 8px 12px;
2159
+ background: var(--bg-card);
2160
+ border: 1px solid var(--border);
2161
+ border-radius: var(--radius-sm);
2162
+ color: var(--text-primary);
2163
+ font-size: 13px;
2164
+ font-family: inherit;
2165
+ outline: none;
2166
+ transition: border-color 0.2s;
2167
+ }
2168
+
2169
+ .ki-search-input:focus {
2170
+ border-color: var(--accent-blue);
2171
+ }
2172
+
2173
+ .ki-create-btn {
2174
+ padding: 8px 14px;
2175
+ background: var(--bg-card);
2176
+ border: 1px solid var(--border);
2177
+ border-radius: var(--radius-sm);
2178
+ color: var(--accent-blue);
2179
+ font-size: 16px;
2180
+ cursor: pointer;
2181
+ transition: all 0.2s;
2182
+ font-family: inherit;
2183
+ line-height: 1;
2184
+ }
2185
+
2186
+ .ki-create-btn:hover {
2187
+ border-color: var(--accent-blue);
2188
+ background: rgba(79, 124, 255, 0.1);
2189
+ }
2190
+
2191
+ .ki-create-btn.small {
2192
+ padding: 4px 8px;
2193
+ font-size: 14px;
2194
+ }
2195
+
2196
+ .ki-create-form {
2197
+ display: flex;
2198
+ flex-direction: column;
2199
+ gap: 6px;
2200
+ padding: 10px;
2201
+ background: var(--bg-card);
2202
+ border: 1px solid var(--border);
2203
+ border-radius: var(--radius-sm);
2204
+ margin-bottom: 4px;
2205
+ }
2206
+
2207
+ .ki-create-input {
2208
+ padding: 7px 10px;
2209
+ background: var(--bg-primary);
2210
+ border: 1px solid var(--border);
2211
+ border-radius: var(--radius-sm);
2212
+ color: var(--text-primary);
2213
+ font-size: 12px;
2214
+ font-family: inherit;
2215
+ outline: none;
2216
+ resize: vertical;
2217
+ }
2218
+
2219
+ .ki-create-input:focus {
2220
+ border-color: var(--accent-blue);
2221
+ }
2222
+
2223
+ .ki-create-input.small {
2224
+ padding: 5px 8px;
2225
+ font-size: 11px;
2226
+ }
2227
+
2228
+ .ki-create-submit {
2229
+ padding: 6px 14px;
2230
+ background: var(--gradient-1);
2231
+ border: none;
2232
+ border-radius: var(--radius-sm);
2233
+ color: white;
2234
+ font-size: 12px;
2235
+ font-weight: 600;
2236
+ cursor: pointer;
2237
+ font-family: inherit;
2238
+ }
2239
+
2240
+ .ki-create-submit.small {
2241
+ padding: 4px 10px;
2242
+ font-size: 11px;
2243
+ }
2244
+
2245
+ .ki-create-cancel {
2246
+ padding: 6px 14px;
2247
+ background: transparent;
2248
+ border: 1px solid var(--border);
2249
+ border-radius: var(--radius-sm);
2250
+ color: var(--text-secondary);
2251
+ font-size: 12px;
2252
+ cursor: pointer;
2253
+ font-family: inherit;
2254
+ }
2255
+
2256
+ .ki-project-group {
2257
+ margin-bottom: 4px;
2258
+ }
2259
+
2260
+ .ki-group-header {
2261
+ display: flex;
2262
+ align-items: center;
2263
+ justify-content: space-between;
2264
+ padding: 8px 10px;
2265
+ font-size: 12px;
2266
+ font-weight: 700;
2267
+ color: var(--text-secondary);
2268
+ text-transform: uppercase;
2269
+ letter-spacing: 0.5px;
2270
+ border-bottom: 1px solid var(--border);
2271
+ }
2272
+
2273
+ .ki-group-count {
2274
+ font-size: 11px;
2275
+ background: var(--bg-card);
2276
+ padding: 1px 8px;
2277
+ border-radius: 10px;
2278
+ color: var(--text-muted);
2279
+ }
2280
+
2281
+ .ki-card {
2282
+ background: var(--bg-card);
2283
+ border: 1px solid var(--border);
2284
+ border-radius: var(--radius-sm);
2285
+ padding: 10px 12px;
2286
+ margin: 4px 0;
2287
+ cursor: pointer;
2288
+ transition: all 0.2s;
2289
+ }
2290
+
2291
+ .ki-card:hover {
2292
+ border-color: var(--accent-blue);
2293
+ background: var(--bg-card-hover);
2294
+ }
2295
+
2296
+ .ki-card-title {
2297
+ font-size: 13px;
2298
+ font-weight: 600;
2299
+ margin-bottom: 4px;
2300
+ line-height: 1.3;
2301
+ }
2302
+
2303
+ .ki-card-meta {
2304
+ display: flex;
2305
+ gap: 12px;
2306
+ font-size: 11px;
2307
+ color: var(--text-muted);
2308
+ }
2309
+
2310
+ /* ─── Knowledge Editor Modal ──────────────────────────────────────────────── */
2311
+
2312
+ .ke-modal {
2313
+ background: var(--bg-secondary);
2314
+ border: 1px solid var(--border);
2315
+ border-radius: var(--radius-xl);
2316
+ width: 92vw;
2317
+ height: 85vh;
2318
+ max-width: 1200px;
2319
+ display: flex;
2320
+ flex-direction: column;
2321
+ overflow: hidden;
2322
+ box-shadow: var(--shadow-lg);
2323
+ animation: slideUp 0.2s ease;
2324
+ }
2325
+
2326
+ .ke-header {
2327
+ display: flex;
2328
+ align-items: flex-start;
2329
+ justify-content: space-between;
2330
+ padding: 16px 20px;
2331
+ border-bottom: 1px solid var(--border);
2332
+ gap: 12px;
2333
+ }
2334
+
2335
+ .ke-header-left {
2336
+ flex: 1;
2337
+ min-width: 0;
2338
+ }
2339
+
2340
+ .ke-title {
2341
+ font-size: 16px;
2342
+ font-weight: 700;
2343
+ margin: 0;
2344
+ cursor: pointer;
2345
+ transition: color 0.2s;
2346
+ }
2347
+
2348
+ .ke-title:hover {
2349
+ color: var(--accent-blue);
2350
+ }
2351
+
2352
+ .ke-summary {
2353
+ font-size: 12px;
2354
+ color: var(--text-secondary);
2355
+ margin-top: 4px;
2356
+ line-height: 1.4;
2357
+ overflow: hidden;
2358
+ text-overflow: ellipsis;
2359
+ display: -webkit-box;
2360
+ -webkit-line-clamp: 2;
2361
+ -webkit-box-orient: vertical;
2362
+ }
2363
+
2364
+ .ke-close {
2365
+ background: transparent;
2366
+ border: 1px solid var(--border);
2367
+ border-radius: var(--radius-sm);
2368
+ color: var(--text-secondary);
2369
+ font-size: 16px;
2370
+ cursor: pointer;
2371
+ padding: 4px 10px;
2372
+ transition: all 0.2s;
2373
+ font-family: inherit;
2374
+ flex-shrink: 0;
2375
+ }
2376
+
2377
+ .ke-close:hover {
2378
+ color: var(--accent-red);
2379
+ border-color: var(--accent-red);
2380
+ }
2381
+
2382
+ .ke-meta-edit {
2383
+ display: flex;
2384
+ flex-direction: column;
2385
+ gap: 6px;
2386
+ }
2387
+
2388
+ .ke-title-input {
2389
+ padding: 6px 10px;
2390
+ background: var(--bg-card);
2391
+ border: 1px solid var(--accent-blue);
2392
+ border-radius: var(--radius-sm);
2393
+ color: var(--text-primary);
2394
+ font-size: 15px;
2395
+ font-weight: 700;
2396
+ font-family: inherit;
2397
+ outline: none;
2398
+ }
2399
+
2400
+ .ke-summary-input {
2401
+ padding: 6px 10px;
2402
+ background: var(--bg-card);
2403
+ border: 1px solid var(--border);
2404
+ border-radius: var(--radius-sm);
2405
+ color: var(--text-primary);
2406
+ font-size: 12px;
2407
+ font-family: inherit;
2408
+ outline: none;
2409
+ resize: vertical;
2410
+ }
2411
+
2412
+ .ke-summary-input:focus {
2413
+ border-color: var(--accent-blue);
2414
+ }
2415
+
2416
+ .ke-body {
2417
+ display: flex;
2418
+ flex: 1;
2419
+ min-height: 0;
2420
+ }
2421
+
2422
+ .ke-sidebar {
2423
+ width: 220px;
2424
+ border-right: 1px solid var(--border);
2425
+ display: flex;
2426
+ flex-direction: column;
2427
+ overflow-y: auto;
2428
+ flex-shrink: 0;
2429
+ }
2430
+
2431
+ .ke-sidebar-header {
2432
+ display: flex;
2433
+ align-items: center;
2434
+ justify-content: space-between;
2435
+ padding: 10px 12px;
2436
+ font-size: 12px;
2437
+ font-weight: 700;
2438
+ color: var(--text-secondary);
2439
+ text-transform: uppercase;
2440
+ letter-spacing: 0.5px;
2441
+ border-bottom: 1px solid var(--border);
2442
+ }
2443
+
2444
+ .ke-new-file {
2445
+ display: flex;
2446
+ gap: 4px;
2447
+ padding: 6px 8px;
2448
+ border-bottom: 1px solid var(--border);
2449
+ }
2450
+
2451
+ .ke-file-list {
2452
+ flex: 1;
2453
+ overflow-y: auto;
2454
+ }
2455
+
2456
+ .ke-file-item {
2457
+ display: flex;
2458
+ align-items: center;
2459
+ justify-content: space-between;
2460
+ padding: 7px 12px;
2461
+ font-size: 12px;
2462
+ cursor: pointer;
2463
+ transition: all 0.15s;
2464
+ border-left: 2px solid transparent;
2465
+ color: var(--text-secondary);
2466
+ }
2467
+
2468
+ .ke-file-item:hover {
2469
+ background: var(--bg-card);
2470
+ color: var(--text-primary);
2471
+ }
2472
+
2473
+ .ke-file-item.active {
2474
+ background: rgba(79, 124, 255, 0.1);
2475
+ border-left-color: var(--accent-blue);
2476
+ color: var(--text-primary);
2477
+ }
2478
+
2479
+ .ke-file-item span {
2480
+ overflow: hidden;
2481
+ text-overflow: ellipsis;
2482
+ white-space: nowrap;
2483
+ }
2484
+
2485
+ .ke-file-delete {
2486
+ background: transparent;
2487
+ border: none;
2488
+ color: var(--text-muted);
2489
+ font-size: 11px;
2490
+ cursor: pointer;
2491
+ opacity: 0;
2492
+ transition: all 0.15s;
2493
+ padding: 2px 4px;
2494
+ }
2495
+
2496
+ .ke-file-item:hover .ke-file-delete {
2497
+ opacity: 1;
2498
+ }
2499
+
2500
+ .ke-file-delete:hover {
2501
+ color: var(--accent-red);
2502
+ }
2503
+
2504
+ .ke-refs {
2505
+ border-top: 1px solid var(--border);
2506
+ margin-top: auto;
2507
+ }
2508
+
2509
+ .ke-ref-item {
2510
+ display: flex;
2511
+ align-items: center;
2512
+ gap: 6px;
2513
+ padding: 5px 12px;
2514
+ font-size: 11px;
2515
+ color: var(--text-muted);
2516
+ }
2517
+
2518
+ .ke-ref-type {
2519
+ font-size: 12px;
2520
+ flex-shrink: 0;
2521
+ }
2522
+
2523
+ .ke-ref-value {
2524
+ overflow: hidden;
2525
+ text-overflow: ellipsis;
2526
+ white-space: nowrap;
2527
+ font-family: 'SF Mono', 'Fira Code', monospace;
2528
+ font-size: 10px;
2529
+ }
2530
+
2531
+ .ke-editor {
2532
+ flex: 1;
2533
+ display: flex;
2534
+ flex-direction: column;
2535
+ min-width: 0;
2536
+ }
2537
+
2538
+ .ke-editor-header {
2539
+ display: flex;
2540
+ align-items: center;
2541
+ justify-content: space-between;
2542
+ padding: 8px 16px;
2543
+ border-bottom: 1px solid var(--border);
2544
+ background: var(--bg-primary);
2545
+ }
2546
+
2547
+ .ke-editor-path {
2548
+ font-size: 12px;
2549
+ font-family: 'SF Mono', 'Fira Code', monospace;
2550
+ color: var(--text-secondary);
2551
+ }
2552
+
2553
+ .ke-unsaved {
2554
+ color: var(--accent-yellow);
2555
+ font-size: 16px;
2556
+ line-height: 1;
2557
+ }
2558
+
2559
+ .ke-save-btn {
2560
+ padding: 5px 14px;
2561
+ background: var(--bg-card);
2562
+ border: 1px solid var(--border);
2563
+ border-radius: var(--radius-sm);
2564
+ color: var(--text-muted);
2565
+ font-size: 12px;
2566
+ cursor: pointer;
2567
+ font-family: inherit;
2568
+ transition: all 0.2s;
2569
+ }
2570
+
2571
+ .ke-save-btn.active {
2572
+ background: var(--gradient-1);
2573
+ border-color: transparent;
2574
+ color: white;
2575
+ font-weight: 600;
2576
+ }
2577
+
2578
+ .ke-save-btn:disabled {
2579
+ opacity: 0.5;
2580
+ cursor: not-allowed;
2581
+ }
2582
+
2583
+ .ke-textarea {
2584
+ flex: 1;
2585
+ width: 100%;
2586
+ border: none;
2587
+ background: var(--bg-primary);
2588
+ color: var(--text-primary);
2589
+ font-family: 'SF Mono', 'Fira Code', 'Menlo', monospace;
2590
+ font-size: 13px;
2591
+ line-height: 1.6;
2592
+ padding: 16px;
2593
+ resize: none;
2594
+ outline: none;
2595
+ tab-size: 2;
2596
+ }
2597
+
2598
+ .ke-empty {
2599
+ flex: 1;
2600
+ display: flex;
2601
+ flex-direction: column;
2602
+ align-items: center;
2603
+ justify-content: center;
2604
+ color: var(--text-muted);
2605
+ }