@leejungkiin/awkit 1.1.7 → 1.1.9

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 (48) hide show
  1. package/README.md +36 -1
  2. package/bin/awk.js +2 -2
  3. package/package.json +6 -3
  4. package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +14 -1
  5. package/skills/gitnexus-intelligence/SKILL.md +224 -0
  6. package/skills/orchestrator/SKILL.md +9 -0
  7. package/skills/symphony-orchestrator/SKILL.md +9 -7
  8. package/workflows/gitnexus.md +123 -0
  9. package/symphony/LICENSE +0 -21
  10. package/symphony/README.md +0 -178
  11. package/symphony/app/api/agents/route.js +0 -152
  12. package/symphony/app/api/events/route.js +0 -22
  13. package/symphony/app/api/knowledge/route.js +0 -253
  14. package/symphony/app/api/locks/route.js +0 -29
  15. package/symphony/app/api/notes/route.js +0 -125
  16. package/symphony/app/api/preflight/route.js +0 -23
  17. package/symphony/app/api/projects/route.js +0 -116
  18. package/symphony/app/api/roles/route.js +0 -134
  19. package/symphony/app/api/skills/route.js +0 -82
  20. package/symphony/app/api/status/route.js +0 -18
  21. package/symphony/app/api/tasks/route.js +0 -157
  22. package/symphony/app/api/workflows/route.js +0 -61
  23. package/symphony/app/api/workspaces/route.js +0 -15
  24. package/symphony/app/globals.css +0 -2605
  25. package/symphony/app/layout.js +0 -20
  26. package/symphony/app/page.js +0 -2122
  27. package/symphony/cli/index.js +0 -1060
  28. package/symphony/core/agent-manager.js +0 -357
  29. package/symphony/core/context-bus.js +0 -100
  30. package/symphony/core/db.js +0 -223
  31. package/symphony/core/file-lock-manager.js +0 -154
  32. package/symphony/core/merge-pipeline.js +0 -234
  33. package/symphony/core/orchestrator.js +0 -236
  34. package/symphony/core/task-manager.js +0 -335
  35. package/symphony/core/workspace-manager.js +0 -168
  36. package/symphony/jsconfig.json +0 -7
  37. package/symphony/lib/core.mjs +0 -1034
  38. package/symphony/mcp/index.js +0 -29
  39. package/symphony/mcp/server.js +0 -110
  40. package/symphony/mcp/tools/context.js +0 -80
  41. package/symphony/mcp/tools/locks.js +0 -99
  42. package/symphony/mcp/tools/status.js +0 -82
  43. package/symphony/mcp/tools/tasks.js +0 -216
  44. package/symphony/mcp/tools/workspace.js +0 -143
  45. package/symphony/next.config.mjs +0 -7
  46. package/symphony/package.json +0 -53
  47. package/symphony/scripts/postinstall.js +0 -49
  48. package/symphony/symphony.config.js +0 -41
@@ -1,2605 +0,0 @@
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
- }