trackops 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ui/styles.css ADDED
@@ -0,0 +1,688 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --bg: #f4efe6;
4
+ --panel: rgba(255, 251, 246, 0.92);
5
+ --panel-strong: rgba(251, 246, 238, 0.98);
6
+ --ink: #1f2430;
7
+ --muted: #5f6776;
8
+ --line: rgba(31, 36, 48, 0.1);
9
+ --accent: #0f8c82;
10
+ --accent-2: #155e87;
11
+ --warn: #bf6a32;
12
+ --danger: #a34737;
13
+ --success: #307159;
14
+ --shadow-lg: 0 24px 60px rgba(40, 36, 28, 0.12);
15
+ --shadow-md: 0 12px 28px rgba(40, 36, 28, 0.08);
16
+ --radius-xl: 28px;
17
+ --radius-lg: 22px;
18
+ --radius-md: 16px;
19
+ --font-ui: Aptos, "Segoe UI Variable", "Segoe UI", sans-serif;
20
+ --font-mono: "Cascadia Code", Consolas, "SFMono-Regular", monospace;
21
+ }
22
+
23
+ * {
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ html,
28
+ body {
29
+ margin: 0;
30
+ min-height: 100%;
31
+ }
32
+
33
+ body {
34
+ font-family: var(--font-ui);
35
+ color: var(--ink);
36
+ background:
37
+ radial-gradient(circle at top left, rgba(15, 140, 130, 0.16), transparent 28%),
38
+ radial-gradient(circle at top right, rgba(191, 106, 50, 0.14), transparent 24%),
39
+ linear-gradient(180deg, #fbf7f0 0%, #f1ebdf 56%, #f4efe6 100%);
40
+ }
41
+
42
+ button,
43
+ input,
44
+ textarea,
45
+ select {
46
+ font: inherit;
47
+ }
48
+
49
+ button {
50
+ cursor: pointer;
51
+ }
52
+
53
+ .sr-only {
54
+ position: absolute;
55
+ width: 1px;
56
+ height: 1px;
57
+ padding: 0;
58
+ margin: -1px;
59
+ overflow: hidden;
60
+ clip: rect(0, 0, 0, 0);
61
+ white-space: nowrap;
62
+ border: 0;
63
+ }
64
+
65
+ .app-shell {
66
+ min-height: 100vh;
67
+ padding: 24px;
68
+ }
69
+
70
+ .topbar,
71
+ .tabs,
72
+ .panel,
73
+ .inset-panel {
74
+ border: 1px solid rgba(255, 255, 255, 0.5);
75
+ background: linear-gradient(180deg, var(--panel-strong), var(--panel));
76
+ box-shadow: var(--shadow-md);
77
+ }
78
+
79
+ .topbar {
80
+ display: flex;
81
+ justify-content: space-between;
82
+ gap: 18px;
83
+ align-items: flex-start;
84
+ padding: 26px 28px;
85
+ border-radius: var(--radius-xl);
86
+ box-shadow: var(--shadow-lg);
87
+ backdrop-filter: blur(18px);
88
+ }
89
+
90
+ .brand-block h1,
91
+ .details-summary h2,
92
+ .panel-head h3 {
93
+ margin: 0;
94
+ letter-spacing: -0.04em;
95
+ }
96
+
97
+ .brand-block h1 {
98
+ font-size: clamp(2.1rem, 4vw, 3.2rem);
99
+ line-height: 0.95;
100
+ }
101
+
102
+ .eyebrow {
103
+ margin: 0 0 8px;
104
+ font-size: 0.76rem;
105
+ font-weight: 800;
106
+ letter-spacing: 0.16em;
107
+ text-transform: uppercase;
108
+ color: var(--accent);
109
+ }
110
+
111
+ .subtle,
112
+ .label,
113
+ .meta-text {
114
+ color: var(--muted);
115
+ }
116
+
117
+ .subtle,
118
+ .value-text {
119
+ margin: 10px 0 0;
120
+ }
121
+
122
+ .topbar-actions,
123
+ .project-switcher,
124
+ .action-strip,
125
+ .preset-row,
126
+ .session-list,
127
+ .form-actions,
128
+ .tag-row {
129
+ display: flex;
130
+ gap: 10px;
131
+ flex-wrap: wrap;
132
+ }
133
+
134
+ .topbar-actions {
135
+ align-items: center;
136
+ justify-content: flex-end;
137
+ }
138
+
139
+ .project-switcher select {
140
+ min-width: 280px;
141
+ }
142
+
143
+ .primary-button,
144
+ .ghost-button,
145
+ .chip-button,
146
+ .tab-button,
147
+ .session-button {
148
+ border: 1px solid transparent;
149
+ border-radius: 999px;
150
+ padding: 0.78rem 1.05rem;
151
+ transition: transform 150ms ease, background 150ms ease, border-color 150ms ease;
152
+ }
153
+
154
+ .primary-button {
155
+ color: white;
156
+ background: linear-gradient(135deg, var(--accent) 0%, var(--accent-2) 100%);
157
+ box-shadow: 0 12px 24px rgba(15, 140, 130, 0.22);
158
+ }
159
+
160
+ .ghost-button,
161
+ .chip-button,
162
+ .tab-button,
163
+ .session-button {
164
+ color: var(--ink);
165
+ background: rgba(255, 255, 255, 0.68);
166
+ border-color: rgba(31, 36, 48, 0.1);
167
+ }
168
+
169
+ .primary-button:hover,
170
+ .ghost-button:hover,
171
+ .chip-button:hover,
172
+ .tab-button:hover,
173
+ .task-card:hover,
174
+ .session-button:hover {
175
+ transform: translateY(-1px);
176
+ }
177
+
178
+ .primary-button:focus-visible,
179
+ .ghost-button:focus-visible,
180
+ .chip-button:focus-visible,
181
+ .tab-button:focus-visible,
182
+ .task-card:focus-visible,
183
+ .session-button:focus-visible,
184
+ input:focus-visible,
185
+ textarea:focus-visible,
186
+ select:focus-visible,
187
+ summary:focus-visible {
188
+ outline: 3px solid rgba(15, 140, 130, 0.24);
189
+ outline-offset: 2px;
190
+ }
191
+
192
+ .runtime-badge,
193
+ .secondary-badge,
194
+ .phase-badge,
195
+ .tag,
196
+ .task-chip,
197
+ .metric-pill {
198
+ display: inline-flex;
199
+ align-items: center;
200
+ min-height: 34px;
201
+ padding: 0 12px;
202
+ border-radius: 999px;
203
+ font-size: 0.82rem;
204
+ font-weight: 700;
205
+ border: 1px solid rgba(31, 36, 48, 0.08);
206
+ background: rgba(255, 255, 255, 0.72);
207
+ }
208
+
209
+ .runtime-badge.is-clean,
210
+ .phase-badge,
211
+ .tag.success {
212
+ color: var(--success);
213
+ }
214
+
215
+ .runtime-badge.is-dirty,
216
+ .tag.warn {
217
+ color: var(--warn);
218
+ background: rgba(255, 244, 236, 0.92);
219
+ }
220
+
221
+ .tabs {
222
+ display: flex;
223
+ gap: 10px;
224
+ padding: 10px;
225
+ margin-top: 18px;
226
+ border-radius: 999px;
227
+ overflow-x: auto;
228
+ }
229
+
230
+ .tab-button {
231
+ min-width: 132px;
232
+ font-weight: 700;
233
+ }
234
+
235
+ .tab-button.is-active {
236
+ color: white;
237
+ background: linear-gradient(135deg, var(--accent) 0%, var(--accent-2) 100%);
238
+ border-color: transparent;
239
+ }
240
+
241
+ .tab-shell {
242
+ margin-top: 20px;
243
+ }
244
+
245
+ .tab-panel {
246
+ display: grid;
247
+ gap: 18px;
248
+ }
249
+
250
+ .summary-grid,
251
+ .overview-grid,
252
+ .charts-grid,
253
+ .split-grid {
254
+ display: grid;
255
+ gap: 18px;
256
+ }
257
+
258
+ .summary-grid {
259
+ grid-template-columns: repeat(4, minmax(0, 1fr));
260
+ }
261
+
262
+ .overview-grid {
263
+ grid-template-columns: repeat(3, minmax(0, 1fr));
264
+ }
265
+
266
+ .charts-grid {
267
+ grid-template-columns: repeat(3, minmax(0, 1fr));
268
+ }
269
+
270
+ .split-grid {
271
+ grid-template-columns: minmax(0, 1.3fr) minmax(360px, 0.85fr);
272
+ }
273
+
274
+ .panel,
275
+ .inset-panel {
276
+ border-radius: var(--radius-xl);
277
+ overflow: hidden;
278
+ }
279
+
280
+ .inset-panel {
281
+ padding: 20px;
282
+ }
283
+
284
+ .panel-details > .details-summary {
285
+ list-style: none;
286
+ display: flex;
287
+ justify-content: space-between;
288
+ align-items: flex-start;
289
+ gap: 16px;
290
+ padding: 20px 22px;
291
+ cursor: pointer;
292
+ }
293
+
294
+ .panel-details > .details-summary::-webkit-details-marker {
295
+ display: none;
296
+ }
297
+
298
+ .details-body {
299
+ padding: 0 22px 22px;
300
+ }
301
+
302
+ .panel-head.compact {
303
+ padding: 0 0 14px;
304
+ }
305
+
306
+ .panel-head.compact h3 {
307
+ font-size: 1.18rem;
308
+ }
309
+
310
+ .metric-card,
311
+ .info-row,
312
+ .decision-item,
313
+ .activity-item,
314
+ .finding-item,
315
+ .task-snippet,
316
+ .project-row,
317
+ .chart-card,
318
+ .health-card {
319
+ padding: 16px;
320
+ border-radius: var(--radius-md);
321
+ background: rgba(255, 255, 255, 0.7);
322
+ border: 1px solid rgba(31, 36, 48, 0.08);
323
+ }
324
+
325
+ .metric-card {
326
+ position: relative;
327
+ }
328
+
329
+ .metric-card::after {
330
+ content: "";
331
+ position: absolute;
332
+ inset: auto 16px 12px 16px;
333
+ height: 3px;
334
+ border-radius: 999px;
335
+ background: linear-gradient(90deg, rgba(15, 140, 130, 0.26), rgba(21, 94, 135, 0.8));
336
+ }
337
+
338
+ .metric-value {
339
+ margin: 16px 0 8px;
340
+ font-size: clamp(1.9rem, 4vw, 2.6rem);
341
+ font-weight: 800;
342
+ letter-spacing: -0.06em;
343
+ }
344
+
345
+ .metric-support {
346
+ font-size: 0.92rem;
347
+ color: var(--muted);
348
+ }
349
+
350
+ .stack-list,
351
+ .stack-form {
352
+ display: grid;
353
+ gap: 12px;
354
+ }
355
+
356
+ .inline-form {
357
+ display: grid;
358
+ grid-template-columns: minmax(0, 1fr) auto;
359
+ gap: 10px;
360
+ }
361
+
362
+ .label {
363
+ margin: 0 0 8px;
364
+ font-size: 0.82rem;
365
+ font-weight: 800;
366
+ letter-spacing: 0.08em;
367
+ text-transform: uppercase;
368
+ }
369
+
370
+ .project-row {
371
+ display: flex;
372
+ justify-content: space-between;
373
+ gap: 14px;
374
+ align-items: center;
375
+ }
376
+
377
+ .project-row.is-active {
378
+ background: linear-gradient(180deg, rgba(229, 246, 243, 0.92), rgba(255, 255, 255, 0.9));
379
+ }
380
+
381
+ .project-row-meta {
382
+ min-width: 0;
383
+ }
384
+
385
+ .project-row-meta strong,
386
+ .task-title {
387
+ display: block;
388
+ margin-bottom: 6px;
389
+ }
390
+
391
+ .task-snippet strong,
392
+ .project-row strong,
393
+ .activity-item strong,
394
+ .finding-item strong {
395
+ font-weight: 800;
396
+ }
397
+
398
+ .chart-card {
399
+ min-height: 240px;
400
+ }
401
+
402
+ .chart-bars,
403
+ .chart-activity {
404
+ display: grid;
405
+ gap: 12px;
406
+ }
407
+
408
+ .chart-bar-row {
409
+ display: grid;
410
+ grid-template-columns: 120px minmax(0, 1fr) auto;
411
+ gap: 10px;
412
+ align-items: center;
413
+ }
414
+
415
+ .bar-track {
416
+ height: 10px;
417
+ border-radius: 999px;
418
+ overflow: hidden;
419
+ background: rgba(31, 36, 48, 0.08);
420
+ }
421
+
422
+ .bar-fill {
423
+ height: 100%;
424
+ border-radius: 999px;
425
+ background: linear-gradient(90deg, var(--accent), var(--accent-2));
426
+ }
427
+
428
+ .chart-activity {
429
+ grid-template-columns: repeat(10, minmax(0, 1fr));
430
+ align-items: end;
431
+ min-height: 170px;
432
+ }
433
+
434
+ .activity-bar-wrap {
435
+ display: grid;
436
+ gap: 8px;
437
+ align-items: end;
438
+ justify-items: center;
439
+ }
440
+
441
+ .activity-bar {
442
+ width: 100%;
443
+ min-height: 10px;
444
+ border-radius: 14px 14px 6px 6px;
445
+ background: linear-gradient(180deg, rgba(21, 94, 135, 0.94), rgba(15, 140, 130, 0.72));
446
+ }
447
+
448
+ .activity-label {
449
+ font-size: 0.76rem;
450
+ color: var(--muted);
451
+ }
452
+
453
+ .board-grid {
454
+ display: grid;
455
+ grid-auto-flow: column;
456
+ grid-auto-columns: minmax(280px, 1fr);
457
+ gap: 16px;
458
+ overflow-x: auto;
459
+ padding-bottom: 10px;
460
+ }
461
+
462
+ .board-column {
463
+ min-height: 520px;
464
+ padding: 16px;
465
+ border-radius: var(--radius-lg);
466
+ background: linear-gradient(180deg, rgba(245, 239, 230, 0.88), rgba(255, 252, 248, 0.62));
467
+ border: 1px solid rgba(31, 36, 48, 0.08);
468
+ }
469
+
470
+ .board-column.is-drop-target {
471
+ background: linear-gradient(180deg, rgba(227, 245, 241, 0.9), rgba(255, 252, 248, 0.8));
472
+ }
473
+
474
+ .column-head {
475
+ display: flex;
476
+ justify-content: space-between;
477
+ gap: 12px;
478
+ margin-bottom: 14px;
479
+ }
480
+
481
+ .column-title {
482
+ margin: 0;
483
+ font-size: 1rem;
484
+ font-weight: 800;
485
+ }
486
+
487
+ .column-count {
488
+ display: inline-flex;
489
+ align-items: center;
490
+ justify-content: center;
491
+ min-width: 34px;
492
+ height: 34px;
493
+ border-radius: 999px;
494
+ background: rgba(255, 255, 255, 0.84);
495
+ font-size: 0.84rem;
496
+ font-weight: 800;
497
+ }
498
+
499
+ .column-body {
500
+ display: grid;
501
+ gap: 12px;
502
+ }
503
+
504
+ .task-card {
505
+ width: 100%;
506
+ border: 1px solid rgba(31, 36, 48, 0.08);
507
+ border-radius: var(--radius-lg);
508
+ padding: 16px;
509
+ background: rgba(255, 255, 255, 0.82);
510
+ text-align: left;
511
+ }
512
+
513
+ .task-card.is-selected {
514
+ border-color: rgba(15, 140, 130, 0.24);
515
+ background: linear-gradient(180deg, rgba(229, 246, 243, 0.92), rgba(255, 255, 255, 0.88));
516
+ }
517
+
518
+ .task-card[data-status="blocked"] {
519
+ background: rgba(255, 244, 239, 0.92);
520
+ }
521
+
522
+ .task-card[data-status="completed"] {
523
+ background: rgba(244, 252, 248, 0.92);
524
+ }
525
+
526
+ .task-id {
527
+ display: inline-block;
528
+ margin-top: 6px;
529
+ font-family: var(--font-mono);
530
+ font-size: 0.77rem;
531
+ color: var(--muted);
532
+ }
533
+
534
+ .task-summary {
535
+ margin: 0 0 12px;
536
+ min-height: 3.2em;
537
+ font-size: 0.92rem;
538
+ color: var(--muted);
539
+ }
540
+
541
+ .task-meta {
542
+ display: flex;
543
+ flex-wrap: wrap;
544
+ gap: 8px;
545
+ }
546
+
547
+ .task-chip.priority-p0 {
548
+ color: var(--danger);
549
+ }
550
+
551
+ .task-chip.priority-p1 {
552
+ color: var(--warn);
553
+ }
554
+
555
+ .empty-state {
556
+ padding: 18px 16px;
557
+ border-radius: var(--radius-md);
558
+ border: 1px dashed rgba(31, 36, 48, 0.18);
559
+ text-align: center;
560
+ color: var(--muted);
561
+ background: rgba(255, 255, 255, 0.4);
562
+ }
563
+
564
+ .task-form,
565
+ .field,
566
+ .command-form,
567
+ .form-grid.two-up {
568
+ display: grid;
569
+ gap: 12px;
570
+ }
571
+
572
+ .form-grid.two-up {
573
+ grid-template-columns: repeat(2, minmax(0, 1fr));
574
+ }
575
+
576
+ .field label {
577
+ font-size: 0.9rem;
578
+ font-weight: 700;
579
+ }
580
+
581
+ .checkbox-field label {
582
+ display: flex;
583
+ gap: 10px;
584
+ align-items: center;
585
+ }
586
+
587
+ input,
588
+ textarea,
589
+ select {
590
+ width: 100%;
591
+ border: 1px solid rgba(31, 36, 48, 0.12);
592
+ border-radius: var(--radius-md);
593
+ padding: 0.9rem 1rem;
594
+ color: var(--ink);
595
+ background: rgba(255, 255, 255, 0.8);
596
+ }
597
+
598
+ textarea {
599
+ resize: vertical;
600
+ }
601
+
602
+ .command-form {
603
+ grid-template-columns: minmax(0, 1fr) auto;
604
+ }
605
+
606
+ .session-button.is-selected {
607
+ background: rgba(229, 246, 243, 0.94);
608
+ border-color: rgba(15, 140, 130, 0.24);
609
+ }
610
+
611
+ .terminal-surface {
612
+ margin-top: 14px;
613
+ border-radius: var(--radius-lg);
614
+ overflow: hidden;
615
+ border: 1px solid rgba(16, 24, 40, 0.08);
616
+ background:
617
+ radial-gradient(circle at top right, rgba(15, 140, 130, 0.14), transparent 24%),
618
+ linear-gradient(180deg, #10151d 0%, #151d27 100%);
619
+ }
620
+
621
+ .terminal-surface pre {
622
+ margin: 0;
623
+ min-height: 300px;
624
+ max-height: 420px;
625
+ overflow: auto;
626
+ padding: 20px;
627
+ font-family: var(--font-mono);
628
+ font-size: 0.87rem;
629
+ line-height: 1.55;
630
+ color: #ddf5ee;
631
+ }
632
+
633
+ .flash {
634
+ position: fixed;
635
+ right: 24px;
636
+ bottom: 24px;
637
+ display: none;
638
+ max-width: 420px;
639
+ padding: 14px 16px;
640
+ border-radius: 18px;
641
+ background: rgba(28, 35, 47, 0.96);
642
+ color: white;
643
+ box-shadow: var(--shadow-lg);
644
+ }
645
+
646
+ .flash.is-visible {
647
+ display: block;
648
+ }
649
+
650
+ .flash.is-error {
651
+ background: rgba(163, 71, 55, 0.96);
652
+ }
653
+
654
+ @media (max-width: 1400px) {
655
+ .overview-grid,
656
+ .charts-grid {
657
+ grid-template-columns: 1fr;
658
+ }
659
+
660
+ .split-grid {
661
+ grid-template-columns: 1fr;
662
+ }
663
+ }
664
+
665
+ @media (max-width: 980px) {
666
+ .app-shell {
667
+ padding: 16px;
668
+ }
669
+
670
+ .topbar {
671
+ flex-direction: column;
672
+ }
673
+
674
+ .summary-grid,
675
+ .form-grid.two-up,
676
+ .inline-form,
677
+ .command-form {
678
+ grid-template-columns: 1fr;
679
+ }
680
+
681
+ .project-switcher select {
682
+ min-width: 0;
683
+ }
684
+
685
+ .board-grid {
686
+ grid-auto-columns: minmax(260px, 88vw);
687
+ }
688
+ }