@tenonhq/dovetail-dashboard 0.0.13

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.
@@ -0,0 +1,819 @@
1
+ :root {
2
+ --wood-dark: #2c1810;
3
+ --wood-medium: #4a3228;
4
+ --wood-light: #6b4c3b;
5
+ --wood-grain: #8b6f5e;
6
+ --wood-pale: #c4a882;
7
+ --wood-cream: #f5ead6;
8
+ --accent: #d4943a;
9
+ --accent-hover: #e5a84e;
10
+ --success: #4a8c5c;
11
+ --danger: #b54a4a;
12
+ --danger-hover: #c95c5c;
13
+ --text: #f5ead6;
14
+ --text-muted: #a89279;
15
+ --card-bg: #3a2519;
16
+ --input-bg: #2c1810;
17
+ --border: #5a3d2e;
18
+ --clickup-purple: #7b68ee;
19
+ --clickup-purple-hover: #9b8bff;
20
+ --sidebar-width: 340px;
21
+ }
22
+
23
+ * {
24
+ margin: 0;
25
+ padding: 0;
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ body {
30
+ font-family: "SF Mono", "Fira Code", "JetBrains Mono", monospace;
31
+ background: var(--wood-dark);
32
+ color: var(--text);
33
+ min-height: 100vh;
34
+ }
35
+
36
+ header {
37
+ background: var(--wood-medium);
38
+ border-bottom: 2px solid var(--accent);
39
+ padding: 16px 32px;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: space-between;
43
+ }
44
+
45
+ .header-left {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 12px;
49
+ }
50
+
51
+ .header-right {
52
+ display: flex;
53
+ align-items: center;
54
+ gap: 12px;
55
+ }
56
+
57
+ header h1 {
58
+ font-size: 18px;
59
+ font-weight: 600;
60
+ letter-spacing: 1px;
61
+ }
62
+
63
+ header h1 span {
64
+ color: var(--accent);
65
+ }
66
+
67
+ .btn-refresh {
68
+ font-family: inherit;
69
+ font-size: 12px;
70
+ font-weight: 600;
71
+ padding: 6px 14px;
72
+ background: var(--wood-light);
73
+ color: var(--text);
74
+ border: 1px solid var(--border);
75
+ border-radius: 4px;
76
+ cursor: pointer;
77
+ transition: background 0.15s, border-color 0.15s;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ .btn-refresh:hover {
82
+ background: var(--wood-grain);
83
+ border-color: var(--accent);
84
+ }
85
+
86
+ .btn-refresh:disabled {
87
+ opacity: 0.6;
88
+ cursor: default;
89
+ }
90
+
91
+ .instance-badge {
92
+ font-size: 12px;
93
+ color: var(--text-muted);
94
+ background: var(--wood-dark);
95
+ padding: 4px 12px;
96
+ border-radius: 4px;
97
+ border: 1px solid var(--border);
98
+ }
99
+
100
+ .active-task-chip {
101
+ font-size: 11px;
102
+ color: var(--clickup-purple);
103
+ background: rgba(123, 104, 238, 0.12);
104
+ padding: 4px 12px;
105
+ border-radius: 4px;
106
+ border: 1px solid var(--clickup-purple);
107
+ max-width: 300px;
108
+ overflow: hidden;
109
+ text-overflow: ellipsis;
110
+ white-space: nowrap;
111
+ cursor: pointer;
112
+ }
113
+
114
+ .active-task-chip:hover {
115
+ background: rgba(123, 104, 238, 0.2);
116
+ }
117
+
118
+ /* Layout */
119
+ .layout {
120
+ display: flex;
121
+ min-height: calc(100vh - 58px);
122
+ }
123
+
124
+ .main-content {
125
+ flex: 1;
126
+ max-width: 1200px;
127
+ margin: 0 auto;
128
+ padding: 24px;
129
+ transition: margin-left 0.25s ease;
130
+ }
131
+
132
+ /* Sidebar */
133
+ .sidebar {
134
+ width: var(--sidebar-width);
135
+ min-width: var(--sidebar-width);
136
+ background: var(--wood-medium);
137
+ border-right: 1px solid var(--border);
138
+ overflow-y: auto;
139
+ overflow-x: hidden;
140
+ transition: width 0.25s ease, min-width 0.25s ease;
141
+ display: flex;
142
+ flex-direction: column;
143
+ }
144
+
145
+ .sidebar.collapsed {
146
+ width: 0;
147
+ min-width: 0;
148
+ border-right: none;
149
+ }
150
+
151
+ .sidebar.collapsed > * {
152
+ display: none;
153
+ }
154
+
155
+ .sidebar-toggle {
156
+ font-family: inherit;
157
+ font-size: 12px;
158
+ font-weight: 600;
159
+ padding: 6px 14px;
160
+ background: var(--clickup-purple);
161
+ color: #fff;
162
+ border: none;
163
+ border-radius: 4px;
164
+ cursor: pointer;
165
+ transition: background 0.15s;
166
+ white-space: nowrap;
167
+ }
168
+
169
+ .sidebar-toggle:hover {
170
+ background: var(--clickup-purple-hover);
171
+ }
172
+
173
+ .sidebar-toggle.active {
174
+ background: var(--wood-light);
175
+ color: var(--text);
176
+ border: 1px solid var(--clickup-purple);
177
+ }
178
+
179
+ .sidebar-header {
180
+ display: flex;
181
+ align-items: center;
182
+ justify-content: space-between;
183
+ padding: 16px;
184
+ border-bottom: 1px solid var(--border);
185
+ }
186
+
187
+ .sidebar-header h2 {
188
+ font-size: 14px;
189
+ font-weight: 600;
190
+ color: var(--clickup-purple);
191
+ }
192
+
193
+ .sidebar-close {
194
+ background: none;
195
+ border: none;
196
+ color: var(--text-muted);
197
+ font-size: 20px;
198
+ cursor: pointer;
199
+ padding: 0 4px;
200
+ line-height: 1;
201
+ }
202
+
203
+ .sidebar-close:hover {
204
+ color: var(--text);
205
+ }
206
+
207
+ /* Active task banner */
208
+ .sidebar-active-task {
209
+ padding: 12px 16px;
210
+ background: rgba(123, 104, 238, 0.08);
211
+ border-left: 3px solid var(--clickup-purple);
212
+ border-bottom: 1px solid var(--border);
213
+ }
214
+
215
+ .active-task-name {
216
+ font-size: 13px;
217
+ font-weight: 600;
218
+ color: var(--text);
219
+ margin-bottom: 4px;
220
+ }
221
+
222
+ .active-task-us-name {
223
+ font-size: 11px;
224
+ color: var(--clickup-purple);
225
+ margin-bottom: 8px;
226
+ word-break: break-all;
227
+ }
228
+
229
+ .active-task-scopes {
230
+ font-size: 11px;
231
+ color: var(--text-muted);
232
+ margin-bottom: 8px;
233
+ }
234
+
235
+ .active-task-scopes span {
236
+ color: var(--success);
237
+ }
238
+
239
+ .btn-deselect {
240
+ font-family: inherit;
241
+ font-size: 11px;
242
+ padding: 4px 10px;
243
+ background: transparent;
244
+ color: var(--danger);
245
+ border: 1px solid var(--danger);
246
+ border-radius: 3px;
247
+ cursor: pointer;
248
+ }
249
+
250
+ .btn-deselect:hover {
251
+ background: var(--danger);
252
+ color: var(--text);
253
+ }
254
+
255
+ /* Status filter chips */
256
+ .sidebar-filters {
257
+ padding: 12px 16px;
258
+ display: flex;
259
+ flex-wrap: wrap;
260
+ gap: 6px;
261
+ border-bottom: 1px solid var(--border);
262
+ }
263
+
264
+ .filter-chip {
265
+ font-family: inherit;
266
+ font-size: 11px;
267
+ padding: 3px 10px;
268
+ background: var(--wood-dark);
269
+ color: var(--text-muted);
270
+ border: 1px solid var(--border);
271
+ border-radius: 12px;
272
+ cursor: pointer;
273
+ transition: all 0.15s;
274
+ text-transform: lowercase;
275
+ }
276
+
277
+ .filter-chip:hover {
278
+ border-color: var(--wood-grain);
279
+ color: var(--text);
280
+ }
281
+
282
+ .filter-chip.active {
283
+ background: var(--clickup-purple);
284
+ color: #fff;
285
+ border-color: var(--clickup-purple);
286
+ }
287
+
288
+ /* Task search */
289
+ .sidebar-search {
290
+ padding: 8px 16px;
291
+ border-bottom: 1px solid var(--border);
292
+ }
293
+
294
+ .task-search-input {
295
+ width: 100%;
296
+ font-family: inherit;
297
+ font-size: 12px;
298
+ padding: 6px 10px;
299
+ background: var(--input-bg);
300
+ color: var(--text);
301
+ border: 1px solid var(--border);
302
+ border-radius: 4px;
303
+ outline: none;
304
+ transition: border-color 0.15s;
305
+ }
306
+
307
+ .task-search-input:focus {
308
+ border-color: var(--clickup-purple);
309
+ }
310
+
311
+ .task-search-input::placeholder {
312
+ color: var(--text-muted);
313
+ }
314
+
315
+ /* Task toggles (My Tasks, etc.) */
316
+ .sidebar-task-toggles {
317
+ padding: 8px 16px;
318
+ display: flex;
319
+ flex-wrap: wrap;
320
+ gap: 6px;
321
+ border-bottom: 1px solid var(--border);
322
+ }
323
+
324
+ .sidebar-task-toggles:empty {
325
+ display: none;
326
+ }
327
+
328
+ /* Task assignee badge */
329
+ .task-card-assignee {
330
+ font-size: 9px;
331
+ color: var(--text-muted);
332
+ background: var(--wood-medium);
333
+ padding: 1px 6px;
334
+ border-radius: 8px;
335
+ margin-left: auto;
336
+ }
337
+
338
+ /* Task cards in sidebar */
339
+ .sidebar-tasks {
340
+ flex: 1;
341
+ overflow-y: auto;
342
+ padding: 8px 0;
343
+ }
344
+
345
+ .task-status-group {
346
+ padding: 0 16px;
347
+ margin-bottom: 8px;
348
+ }
349
+
350
+ .task-status-label {
351
+ font-size: 11px;
352
+ font-weight: 600;
353
+ text-transform: uppercase;
354
+ letter-spacing: 0.5px;
355
+ color: var(--text-muted);
356
+ padding: 8px 0 4px;
357
+ }
358
+
359
+ .task-card {
360
+ background: var(--card-bg);
361
+ border: 1px solid var(--border);
362
+ border-radius: 6px;
363
+ padding: 10px 12px;
364
+ margin-bottom: 6px;
365
+ cursor: pointer;
366
+ transition: all 0.15s;
367
+ }
368
+
369
+ .task-card:hover {
370
+ border-color: var(--wood-grain);
371
+ background: var(--wood-light);
372
+ }
373
+
374
+ .task-card.selected {
375
+ border-color: var(--clickup-purple);
376
+ box-shadow: 0 0 0 1px var(--clickup-purple);
377
+ }
378
+
379
+ .task-card-name {
380
+ font-size: 12px;
381
+ font-weight: 500;
382
+ color: var(--text);
383
+ margin-bottom: 4px;
384
+ line-height: 1.3;
385
+ }
386
+
387
+ .task-card-meta {
388
+ display: flex;
389
+ align-items: center;
390
+ gap: 8px;
391
+ font-size: 10px;
392
+ color: var(--text-muted);
393
+ }
394
+
395
+ .task-card-id {
396
+ color: var(--clickup-purple);
397
+ font-weight: 500;
398
+ }
399
+
400
+ .task-priority-dot {
401
+ width: 6px;
402
+ height: 6px;
403
+ border-radius: 50%;
404
+ display: inline-block;
405
+ }
406
+
407
+ /* Scope card activate button */
408
+ .btn-activate {
409
+ font-family: inherit;
410
+ font-size: 11px;
411
+ padding: 5px 10px;
412
+ background: rgba(123, 104, 238, 0.12);
413
+ color: var(--clickup-purple);
414
+ border: 1px solid var(--clickup-purple);
415
+ border-radius: 4px;
416
+ cursor: pointer;
417
+ transition: all 0.15s;
418
+ }
419
+
420
+ .btn-activate:hover {
421
+ background: var(--clickup-purple);
422
+ color: #fff;
423
+ }
424
+
425
+ .btn-activate:disabled {
426
+ opacity: 0.4;
427
+ cursor: not-allowed;
428
+ }
429
+
430
+ .btn-activate.activated {
431
+ background: var(--clickup-purple);
432
+ color: #fff;
433
+ cursor: default;
434
+ }
435
+
436
+ .scope-task-badge {
437
+ display: inline-block;
438
+ font-size: 10px;
439
+ color: var(--clickup-purple);
440
+ margin-top: 6px;
441
+ }
442
+
443
+ .sidebar-loading {
444
+ text-align: center;
445
+ padding: 20px;
446
+ color: var(--text-muted);
447
+ font-size: 12px;
448
+ }
449
+
450
+ .scope-grid {
451
+ display: grid;
452
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
453
+ gap: 16px;
454
+ margin-top: 8px;
455
+ }
456
+
457
+ .scope-card {
458
+ background: var(--card-bg);
459
+ border: 1px solid var(--border);
460
+ border-radius: 8px;
461
+ padding: 20px;
462
+ transition: border-color 0.2s;
463
+ }
464
+
465
+ .scope-card:hover {
466
+ border-color: var(--wood-grain);
467
+ }
468
+
469
+ .scope-card.has-selection {
470
+ border-color: var(--accent);
471
+ box-shadow: 0 0 0 1px var(--accent);
472
+ }
473
+
474
+ .scope-header {
475
+ display: flex;
476
+ align-items: center;
477
+ justify-content: space-between;
478
+ margin-bottom: 12px;
479
+ }
480
+
481
+ .scope-name {
482
+ font-size: 14px;
483
+ font-weight: 600;
484
+ color: var(--accent);
485
+ }
486
+
487
+ .scope-id {
488
+ font-size: 11px;
489
+ color: var(--text-muted);
490
+ }
491
+
492
+ .display-name {
493
+ font-size: 12px;
494
+ color: var(--text-muted);
495
+ margin-bottom: 16px;
496
+ }
497
+
498
+ .update-set-select {
499
+ width: 100%;
500
+ background: var(--input-bg);
501
+ color: var(--text);
502
+ border: 1px solid var(--border);
503
+ border-radius: 4px;
504
+ padding: 8px 12px;
505
+ font-family: inherit;
506
+ font-size: 13px;
507
+ cursor: pointer;
508
+ appearance: none;
509
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%23a89279' viewBox='0 0 16 16'%3E%3Cpath d='M8 11L3 6h10z'/%3E%3C/svg%3E");
510
+ background-repeat: no-repeat;
511
+ background-position: right 12px center;
512
+ }
513
+
514
+ .update-set-select:focus {
515
+ outline: none;
516
+ border-color: var(--accent);
517
+ }
518
+
519
+ .update-set-select option {
520
+ background: var(--wood-dark);
521
+ color: var(--text);
522
+ }
523
+
524
+ .card-actions {
525
+ display: flex;
526
+ gap: 8px;
527
+ margin-top: 12px;
528
+ }
529
+
530
+ .quick-create {
531
+ display: flex;
532
+ gap: 6px;
533
+ margin-top: 10px;
534
+ }
535
+
536
+ .quick-create-input {
537
+ flex: 1;
538
+ font-family: inherit;
539
+ font-size: 12px;
540
+ padding: 5px 10px;
541
+ background: var(--input-bg);
542
+ color: var(--text);
543
+ border: 1px solid var(--border);
544
+ border-radius: 4px;
545
+ outline: none;
546
+ transition: border-color 0.15s;
547
+ }
548
+
549
+ .quick-create-input:focus {
550
+ border-color: var(--accent);
551
+ }
552
+
553
+ .quick-create-input::placeholder {
554
+ color: var(--text-muted);
555
+ }
556
+
557
+ .btn-small {
558
+ font-size: 11px;
559
+ padding: 5px 10px;
560
+ }
561
+
562
+ .btn {
563
+ font-family: inherit;
564
+ font-size: 12px;
565
+ padding: 6px 14px;
566
+ border: 1px solid var(--border);
567
+ border-radius: 4px;
568
+ cursor: pointer;
569
+ transition: all 0.15s;
570
+ background: var(--wood-medium);
571
+ color: var(--text);
572
+ }
573
+
574
+ .btn:hover {
575
+ background: var(--wood-light);
576
+ border-color: var(--wood-grain);
577
+ }
578
+
579
+ .btn-primary {
580
+ background: var(--accent);
581
+ color: var(--wood-dark);
582
+ border-color: var(--accent);
583
+ font-weight: 600;
584
+ }
585
+
586
+ .btn-primary:hover {
587
+ background: var(--accent-hover);
588
+ }
589
+
590
+ .btn-danger {
591
+ color: var(--danger);
592
+ border-color: var(--danger);
593
+ }
594
+
595
+ .btn-danger:hover {
596
+ background: var(--danger);
597
+ color: var(--text);
598
+ }
599
+
600
+ .btn-clear {
601
+ color: var(--text-muted);
602
+ border-color: transparent;
603
+ background: transparent;
604
+ }
605
+
606
+ .btn-clear:hover {
607
+ color: var(--text);
608
+ border-color: var(--border);
609
+ }
610
+
611
+ .btn:disabled {
612
+ opacity: 0.4;
613
+ cursor: not-allowed;
614
+ }
615
+
616
+ .selected-badge {
617
+ display: inline-block;
618
+ font-size: 11px;
619
+ color: var(--success);
620
+ margin-top: 8px;
621
+ }
622
+
623
+ /* New update set modal */
624
+ .modal-overlay {
625
+ display: none;
626
+ position: fixed;
627
+ inset: 0;
628
+ background: rgba(0, 0, 0, 0.6);
629
+ z-index: 100;
630
+ align-items: center;
631
+ justify-content: center;
632
+ }
633
+
634
+ .modal-overlay.active {
635
+ display: flex;
636
+ }
637
+
638
+ .modal {
639
+ background: var(--card-bg);
640
+ border: 1px solid var(--accent);
641
+ border-radius: 8px;
642
+ padding: 24px;
643
+ width: 400px;
644
+ max-width: 90vw;
645
+ }
646
+
647
+ .modal h2 {
648
+ font-size: 16px;
649
+ margin-bottom: 16px;
650
+ color: var(--accent);
651
+ }
652
+
653
+ .modal label {
654
+ display: block;
655
+ font-size: 12px;
656
+ color: var(--text-muted);
657
+ margin-bottom: 4px;
658
+ margin-top: 12px;
659
+ }
660
+
661
+ .modal input,
662
+ .modal textarea {
663
+ width: 100%;
664
+ background: var(--input-bg);
665
+ color: var(--text);
666
+ border: 1px solid var(--border);
667
+ border-radius: 4px;
668
+ padding: 8px 12px;
669
+ font-family: inherit;
670
+ font-size: 13px;
671
+ }
672
+
673
+ .modal input:focus,
674
+ .modal textarea:focus {
675
+ outline: none;
676
+ border-color: var(--accent);
677
+ }
678
+
679
+ .modal textarea {
680
+ resize: vertical;
681
+ min-height: 60px;
682
+ }
683
+
684
+ .modal-actions {
685
+ display: flex;
686
+ gap: 8px;
687
+ justify-content: flex-end;
688
+ margin-top: 20px;
689
+ }
690
+
691
+ /* Toast notifications */
692
+ .toast-container {
693
+ position: fixed;
694
+ bottom: 20px;
695
+ right: 20px;
696
+ z-index: 200;
697
+ display: flex;
698
+ flex-direction: column;
699
+ gap: 8px;
700
+ }
701
+
702
+ .toast {
703
+ background: var(--wood-medium);
704
+ border: 1px solid var(--border);
705
+ border-radius: 6px;
706
+ padding: 10px 16px;
707
+ font-size: 13px;
708
+ animation: slideIn 0.2s ease-out;
709
+ max-width: 360px;
710
+ }
711
+
712
+ .toast.success {
713
+ border-color: var(--success);
714
+ }
715
+
716
+ .toast.error {
717
+ border-color: var(--danger);
718
+ }
719
+
720
+ @keyframes slideIn {
721
+ from {
722
+ opacity: 0;
723
+ transform: translateX(20px);
724
+ }
725
+ to {
726
+ opacity: 1;
727
+ transform: translateX(0);
728
+ }
729
+ }
730
+
731
+ /* Loading state */
732
+ .loading {
733
+ text-align: center;
734
+ padding: 40px;
735
+ color: var(--text-muted);
736
+ font-size: 14px;
737
+ }
738
+
739
+ .scope-card .spinner {
740
+ display: inline-block;
741
+ width: 14px;
742
+ height: 14px;
743
+ border: 2px solid var(--border);
744
+ border-top-color: var(--accent);
745
+ border-radius: 50%;
746
+ animation: spin 0.6s linear infinite;
747
+ }
748
+
749
+ @keyframes spin {
750
+ to {
751
+ transform: rotate(360deg);
752
+ }
753
+ }
754
+
755
+ /* --- Recent Edits Panel --- */
756
+
757
+ .recent-edits-panel {
758
+ margin-bottom: 24px;
759
+ }
760
+
761
+ .recent-edits-title {
762
+ font-size: 14px;
763
+ font-weight: 600;
764
+ color: var(--accent);
765
+ margin-bottom: 12px;
766
+ letter-spacing: 0.5px;
767
+ }
768
+
769
+ .recent-edits-list {
770
+ display: flex;
771
+ flex-direction: column;
772
+ gap: 6px;
773
+ }
774
+
775
+ .recent-edit-row {
776
+ display: flex;
777
+ align-items: center;
778
+ gap: 12px;
779
+ padding: 8px 14px;
780
+ background: var(--card-bg);
781
+ border: 1px solid var(--border);
782
+ border-radius: 6px;
783
+ font-size: 12px;
784
+ }
785
+
786
+ .recent-edit-name {
787
+ font-weight: 600;
788
+ color: var(--accent);
789
+ min-width: 0;
790
+ overflow: hidden;
791
+ text-overflow: ellipsis;
792
+ white-space: nowrap;
793
+ flex: 1;
794
+ }
795
+
796
+ .recent-edit-scope {
797
+ font-size: 10px;
798
+ color: var(--clickup-purple);
799
+ background: rgba(123, 104, 238, 0.12);
800
+ padding: 2px 8px;
801
+ border-radius: 10px;
802
+ white-space: nowrap;
803
+ }
804
+
805
+ .recent-edit-update-set {
806
+ font-size: 11px;
807
+ color: var(--success);
808
+ white-space: nowrap;
809
+ }
810
+
811
+ .recent-edit-update-set.warning {
812
+ color: var(--danger);
813
+ }
814
+
815
+ .recent-edit-time {
816
+ font-size: 10px;
817
+ color: var(--text-muted);
818
+ white-space: nowrap;
819
+ }