bosun 0.28.2 → 0.28.4
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/.env.example +68 -0
- package/README.md +1 -1
- package/agent-prompts.mjs +12 -6
- package/agent-work-analyzer.mjs +39 -15
- package/cli.mjs +4 -1
- package/codex-config.mjs +7 -0
- package/monitor.mjs +83 -24
- package/package.json +2 -1
- package/preflight.mjs +3 -1
- package/primary-agent.mjs +5 -1
- package/pwsh-runtime.mjs +62 -0
- package/setup.mjs +70 -3
- package/task-executor.mjs +125 -2
- package/telegram-bot.mjs +45 -8
- package/ui/app.js +2 -16
- package/ui/components/workspace-switcher.js +25 -32
- package/ui/modules/settings-schema.js +7 -0
- package/ui/styles/base.css +3 -28
- package/ui/styles/components.css +309 -73
- package/ui/styles/kanban.css +10 -16
- package/ui/styles/layout.css +81 -101
- package/ui/styles/sessions.css +27 -32
- package/ui/styles/variables.css +8 -8
- package/ui/styles/workspace-switcher.css +2 -4
- package/ui/tabs/control.js +40 -71
- package/ui/tabs/settings.js +207 -0
- package/ui/tabs/tasks.js +116 -129
- package/ui-server.mjs +487 -0
- package/workspace-manager.mjs +57 -11
package/ui/styles/components.css
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
/* ─── Component Styles —
|
|
1
|
+
/* ─── Component Styles — iOS-style Clean Design ─── */
|
|
2
2
|
|
|
3
3
|
/* ─── Cards ─── */
|
|
4
4
|
.card {
|
|
5
5
|
background: var(--bg-card);
|
|
6
|
-
|
|
7
|
-
border-radius: var(--radius-lg);
|
|
6
|
+
border-radius: var(--radius-md);
|
|
8
7
|
padding: var(--space-md);
|
|
9
8
|
border: 1px solid var(--border);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
transition: background var(--transition-fast), border-color var(--transition-fast), box-shadow var(--transition-fast);
|
|
9
|
+
margin-bottom: 12px;
|
|
10
|
+
transition: background 0.15s ease, border-color 0.15s ease;
|
|
13
11
|
position: relative;
|
|
14
12
|
overflow: hidden;
|
|
13
|
+
min-width: 0;
|
|
15
14
|
}
|
|
16
15
|
|
|
17
16
|
.card:hover {
|
|
18
17
|
background: var(--bg-card-hover);
|
|
19
18
|
border-color: var(--border-strong);
|
|
20
|
-
box-shadow: var(--shadow-md), 0 0 20px rgba(59, 130, 246, 0.08);
|
|
21
19
|
}
|
|
22
20
|
|
|
23
21
|
.card-title {
|
|
@@ -144,7 +142,6 @@
|
|
|
144
142
|
.stat-card:hover {
|
|
145
143
|
border-color: var(--border-strong);
|
|
146
144
|
background: var(--bg-card-hover);
|
|
147
|
-
box-shadow: var(--shadow-md);
|
|
148
145
|
}
|
|
149
146
|
|
|
150
147
|
.stat-value {
|
|
@@ -387,12 +384,10 @@
|
|
|
387
384
|
.btn-primary {
|
|
388
385
|
background: var(--accent);
|
|
389
386
|
color: var(--accent-text);
|
|
390
|
-
box-shadow: var(--shadow-sm), 0 0 14px rgba(59, 130, 246, 0.28);
|
|
391
387
|
}
|
|
392
388
|
|
|
393
389
|
.btn-primary:hover {
|
|
394
390
|
background: var(--accent-hover);
|
|
395
|
-
box-shadow: var(--shadow-md), 0 0 18px rgba(59, 130, 246, 0.35);
|
|
396
391
|
}
|
|
397
392
|
|
|
398
393
|
.btn-secondary {
|
|
@@ -404,7 +399,6 @@
|
|
|
404
399
|
.btn-secondary:hover {
|
|
405
400
|
border-color: var(--border-strong);
|
|
406
401
|
background: var(--bg-card-hover);
|
|
407
|
-
box-shadow: var(--shadow-sm);
|
|
408
402
|
}
|
|
409
403
|
|
|
410
404
|
.btn-ghost {
|
|
@@ -477,7 +471,7 @@
|
|
|
477
471
|
|
|
478
472
|
.input:focus {
|
|
479
473
|
border-color: var(--accent);
|
|
480
|
-
box-shadow: 0 0 0 3px var(--accent-subtle)
|
|
474
|
+
box-shadow: 0 0 0 3px var(--accent-subtle);
|
|
481
475
|
}
|
|
482
476
|
|
|
483
477
|
.input-error {
|
|
@@ -978,7 +972,7 @@ select.input {
|
|
|
978
972
|
align-items: center;
|
|
979
973
|
justify-content: center;
|
|
980
974
|
border: none;
|
|
981
|
-
background: var(--
|
|
975
|
+
background: var(--bg-card);
|
|
982
976
|
border-radius: var(--radius-full, 50%);
|
|
983
977
|
color: var(--text-secondary);
|
|
984
978
|
cursor: pointer;
|
|
@@ -987,7 +981,7 @@ select.input {
|
|
|
987
981
|
}
|
|
988
982
|
|
|
989
983
|
.modal-close-btn:hover {
|
|
990
|
-
background: var(--bg-card-hover
|
|
984
|
+
background: var(--bg-card-hover);
|
|
991
985
|
color: var(--text-bright);
|
|
992
986
|
}
|
|
993
987
|
|
|
@@ -1017,7 +1011,7 @@ select.input {
|
|
|
1017
1011
|
font-size: 13px;
|
|
1018
1012
|
font-weight: 500;
|
|
1019
1013
|
color: #fff;
|
|
1020
|
-
backdrop-filter: blur(
|
|
1014
|
+
backdrop-filter: blur(8px);
|
|
1021
1015
|
box-shadow: 0 4px 16px rgba(0,0,0,0.3);
|
|
1022
1016
|
animation: toastIn 0.3s ease, toastOut 0.3s ease 2.7s forwards;
|
|
1023
1017
|
display: flex;
|
|
@@ -1266,12 +1260,11 @@ select.input {
|
|
|
1266
1260
|
display: flex;
|
|
1267
1261
|
align-items: center;
|
|
1268
1262
|
justify-content: center;
|
|
1269
|
-
background: var(--
|
|
1263
|
+
background: var(--accent);
|
|
1270
1264
|
color: var(--accent-text);
|
|
1271
1265
|
font-size: 14px;
|
|
1272
1266
|
font-weight: 600;
|
|
1273
1267
|
flex-shrink: 0;
|
|
1274
|
-
box-shadow: var(--shadow-glow-sm);
|
|
1275
1268
|
}
|
|
1276
1269
|
|
|
1277
1270
|
.avatar-initials {
|
|
@@ -1893,13 +1886,11 @@ select.input {
|
|
|
1893
1886
|
justify-content: center;
|
|
1894
1887
|
gap: var(--space-xs, 4px);
|
|
1895
1888
|
padding: var(--space-md, 14px) var(--space-sm, 8px);
|
|
1896
|
-
background: var(--
|
|
1897
|
-
backdrop-filter: blur(8px);
|
|
1898
|
-
-webkit-backdrop-filter: blur(8px);
|
|
1889
|
+
background: var(--bg-card);
|
|
1899
1890
|
border-radius: var(--radius-md);
|
|
1900
|
-
border: 1px solid var(--
|
|
1891
|
+
border: 1px solid var(--border);
|
|
1901
1892
|
cursor: pointer;
|
|
1902
|
-
transition: transform 0.15s ease, background 0.15s ease,
|
|
1893
|
+
transition: transform 0.15s ease, background 0.15s ease, border-color 0.15s ease;
|
|
1903
1894
|
-webkit-tap-highlight-color: transparent;
|
|
1904
1895
|
font-family: inherit;
|
|
1905
1896
|
}
|
|
@@ -1910,8 +1901,8 @@ select.input {
|
|
|
1910
1901
|
}
|
|
1911
1902
|
|
|
1912
1903
|
.quick-action-btn:hover {
|
|
1913
|
-
|
|
1914
|
-
|
|
1904
|
+
border-color: var(--border-strong);
|
|
1905
|
+
background: var(--bg-card-hover);
|
|
1915
1906
|
}
|
|
1916
1907
|
|
|
1917
1908
|
.quick-action-btn:focus-visible {
|
|
@@ -1944,30 +1935,14 @@ select.input {
|
|
|
1944
1935
|
gap: 8px;
|
|
1945
1936
|
padding: 16px 20px;
|
|
1946
1937
|
border-radius: var(--radius-lg);
|
|
1947
|
-
background:
|
|
1948
|
-
|
|
1949
|
-
rgba(59, 130, 246, 0.16) 0%,
|
|
1950
|
-
rgba(139, 92, 246, 0.10) 55%,
|
|
1951
|
-
rgba(16, 185, 129, 0.06) 100%
|
|
1952
|
-
);
|
|
1953
|
-
border: 1px solid rgba(59, 130, 246, 0.24);
|
|
1954
|
-
box-shadow: var(--shadow-sm), 0 0 28px rgba(59, 130, 246, 0.07);
|
|
1955
|
-
backdrop-filter: blur(14px);
|
|
1956
|
-
-webkit-backdrop-filter: blur(14px);
|
|
1938
|
+
background: var(--bg-card);
|
|
1939
|
+
border: 1px solid var(--border);
|
|
1957
1940
|
position: relative;
|
|
1958
1941
|
overflow: hidden;
|
|
1959
1942
|
}
|
|
1960
1943
|
|
|
1961
1944
|
.dashboard-header::before {
|
|
1962
|
-
|
|
1963
|
-
position: absolute;
|
|
1964
|
-
top: -50px;
|
|
1965
|
-
right: -30px;
|
|
1966
|
-
width: 190px;
|
|
1967
|
-
height: 190px;
|
|
1968
|
-
border-radius: 50%;
|
|
1969
|
-
background: radial-gradient(circle, rgba(59, 130, 246, 0.13), transparent 70%);
|
|
1970
|
-
pointer-events: none;
|
|
1945
|
+
display: none;
|
|
1971
1946
|
}
|
|
1972
1947
|
|
|
1973
1948
|
.dashboard-eyebrow {
|
|
@@ -2301,11 +2276,9 @@ select.input {
|
|
|
2301
2276
|
padding: 11px 14px;
|
|
2302
2277
|
border-radius: 14px;
|
|
2303
2278
|
border: 1px solid var(--border);
|
|
2304
|
-
background: var(--
|
|
2305
|
-
backdrop-filter: blur(6px);
|
|
2306
|
-
-webkit-backdrop-filter: blur(6px);
|
|
2279
|
+
background: var(--bg-card);
|
|
2307
2280
|
cursor: pointer;
|
|
2308
|
-
transition: transform 0.18s ease,
|
|
2281
|
+
transition: transform 0.18s ease, border-color 0.18s ease, background 0.18s ease;
|
|
2309
2282
|
text-align: left;
|
|
2310
2283
|
position: relative;
|
|
2311
2284
|
overflow: hidden;
|
|
@@ -2331,7 +2304,7 @@ select.input {
|
|
|
2331
2304
|
|
|
2332
2305
|
.dashboard-action-btn:hover {
|
|
2333
2306
|
border-color: var(--border-strong);
|
|
2334
|
-
|
|
2307
|
+
background: var(--bg-card-hover);
|
|
2335
2308
|
transform: translateY(-1px);
|
|
2336
2309
|
}
|
|
2337
2310
|
|
|
@@ -2533,11 +2506,9 @@ select.input {
|
|
|
2533
2506
|
left: 0;
|
|
2534
2507
|
right: 0;
|
|
2535
2508
|
background: var(--bg-elevated);
|
|
2536
|
-
|
|
2537
|
-
-webkit-backdrop-filter: blur(20px);
|
|
2538
|
-
border: 1px solid var(--glass-border);
|
|
2509
|
+
border: 1px solid var(--border);
|
|
2539
2510
|
border-radius: var(--radius-md);
|
|
2540
|
-
box-shadow:
|
|
2511
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
|
|
2541
2512
|
z-index: 50;
|
|
2542
2513
|
max-height: 200px;
|
|
2543
2514
|
overflow-y: auto;
|
|
@@ -2563,7 +2534,7 @@ select.input {
|
|
|
2563
2534
|
}
|
|
2564
2535
|
|
|
2565
2536
|
.cmd-history-item:not(:last-child) {
|
|
2566
|
-
border-bottom: 1px solid var(--
|
|
2537
|
+
border-bottom: 1px solid var(--border);
|
|
2567
2538
|
}
|
|
2568
2539
|
|
|
2569
2540
|
/* ─── Health Dot (Infra) ─── */
|
|
@@ -2580,7 +2551,6 @@ select.input {
|
|
|
2580
2551
|
.task-card-selected {
|
|
2581
2552
|
border-color: var(--accent);
|
|
2582
2553
|
background: rgba(59, 130, 246, 0.06);
|
|
2583
|
-
box-shadow: var(--shadow-glow-sm);
|
|
2584
2554
|
}
|
|
2585
2555
|
|
|
2586
2556
|
.task-card-expanded {
|
|
@@ -2601,13 +2571,11 @@ select.input {
|
|
|
2601
2571
|
|
|
2602
2572
|
/* ─── Batch Action Bar ─── */
|
|
2603
2573
|
.batch-action-bar {
|
|
2604
|
-
background: var(--
|
|
2605
|
-
backdrop-filter: blur(12px);
|
|
2606
|
-
-webkit-backdrop-filter: blur(12px);
|
|
2574
|
+
background: var(--bg-card);
|
|
2607
2575
|
border-radius: var(--radius-md);
|
|
2608
2576
|
padding: var(--space-sm, 8px) var(--space-md, 12px);
|
|
2609
2577
|
align-items: center;
|
|
2610
|
-
border: 1px solid var(--
|
|
2578
|
+
border: 1px solid var(--border);
|
|
2611
2579
|
}
|
|
2612
2580
|
|
|
2613
2581
|
/* ─── Sticky Search ─── */
|
|
@@ -2619,7 +2587,6 @@ select.input {
|
|
|
2619
2587
|
padding: 8px 0 12px;
|
|
2620
2588
|
margin-bottom: var(--space-sm, 8px);
|
|
2621
2589
|
border-bottom: 1px solid var(--border);
|
|
2622
|
-
backdrop-filter: blur(10px);
|
|
2623
2590
|
}
|
|
2624
2591
|
|
|
2625
2592
|
.sticky-search-row {
|
|
@@ -2701,7 +2668,6 @@ select.input {
|
|
|
2701
2668
|
|
|
2702
2669
|
.filter-toggle.active {
|
|
2703
2670
|
border-color: var(--accent);
|
|
2704
|
-
box-shadow: var(--shadow-glow-sm);
|
|
2705
2671
|
}
|
|
2706
2672
|
|
|
2707
2673
|
.filter-count {
|
|
@@ -2720,8 +2686,8 @@ select.input {
|
|
|
2720
2686
|
}
|
|
2721
2687
|
|
|
2722
2688
|
.tasks-filter-panel {
|
|
2723
|
-
background: var(--
|
|
2724
|
-
border: 1px solid var(--
|
|
2689
|
+
background: var(--bg-card);
|
|
2690
|
+
border: 1px solid var(--border);
|
|
2725
2691
|
border-radius: var(--radius-md);
|
|
2726
2692
|
padding: 10px 12px;
|
|
2727
2693
|
overflow: hidden;
|
|
@@ -2858,7 +2824,6 @@ select.input {
|
|
|
2858
2824
|
padding: 8px 0 10px;
|
|
2859
2825
|
margin-bottom: 8px;
|
|
2860
2826
|
border-bottom: 1px solid var(--border);
|
|
2861
|
-
backdrop-filter: blur(10px);
|
|
2862
2827
|
}
|
|
2863
2828
|
|
|
2864
2829
|
/* ─── Control Unit (sticky) ─── */
|
|
@@ -3035,10 +3000,8 @@ select.input {
|
|
|
3035
3000
|
/* ─── ConfirmDialog ─── */
|
|
3036
3001
|
.confirm-dialog {
|
|
3037
3002
|
background: var(--bg-elevated);
|
|
3038
|
-
backdrop-filter: blur(24px);
|
|
3039
|
-
-webkit-backdrop-filter: blur(24px);
|
|
3040
3003
|
border-radius: var(--radius-xl);
|
|
3041
|
-
border: 1px solid var(--
|
|
3004
|
+
border: 1px solid var(--border);
|
|
3042
3005
|
width: calc(100% - 48px);
|
|
3043
3006
|
max-width: 340px;
|
|
3044
3007
|
padding: 24px;
|
|
@@ -3079,9 +3042,9 @@ select.input {
|
|
|
3079
3042
|
}
|
|
3080
3043
|
|
|
3081
3044
|
.confirm-dialog-actions .btn-secondary {
|
|
3082
|
-
background: var(--
|
|
3045
|
+
background: var(--bg-card);
|
|
3083
3046
|
color: var(--text-primary);
|
|
3084
|
-
border: 1px solid var(--
|
|
3047
|
+
border: 1px solid var(--border);
|
|
3085
3048
|
}
|
|
3086
3049
|
|
|
3087
3050
|
.confirm-dialog-actions .btn-destructive {
|
|
@@ -3153,7 +3116,7 @@ select.input {
|
|
|
3153
3116
|
}
|
|
3154
3117
|
|
|
3155
3118
|
.fleet-overview-card {
|
|
3156
|
-
|
|
3119
|
+
/* clean — no gradient */
|
|
3157
3120
|
}
|
|
3158
3121
|
|
|
3159
3122
|
.fleet-hero {
|
|
@@ -3286,7 +3249,7 @@ select.input {
|
|
|
3286
3249
|
}
|
|
3287
3250
|
|
|
3288
3251
|
.control-hero {
|
|
3289
|
-
|
|
3252
|
+
/* clean — no gradient */
|
|
3290
3253
|
}
|
|
3291
3254
|
|
|
3292
3255
|
.control-hero-header {
|
|
@@ -3382,13 +3345,12 @@ select.input {
|
|
|
3382
3345
|
bottom: 100%;
|
|
3383
3346
|
left: 0;
|
|
3384
3347
|
right: 0;
|
|
3385
|
-
background: var(--
|
|
3386
|
-
border: 1px solid var(--
|
|
3348
|
+
background: var(--bg-elevated);
|
|
3349
|
+
border: 1px solid var(--border);
|
|
3387
3350
|
border-radius: 12px;
|
|
3388
3351
|
max-height: 240px;
|
|
3389
3352
|
overflow-y: auto;
|
|
3390
3353
|
z-index: 50;
|
|
3391
|
-
backdrop-filter: blur(12px);
|
|
3392
3354
|
}
|
|
3393
3355
|
|
|
3394
3356
|
.cmd-dropdown-item {
|
|
@@ -3529,3 +3491,277 @@ select.input {
|
|
|
3529
3491
|
margin-right: 6px;
|
|
3530
3492
|
font-size: 1.1em;
|
|
3531
3493
|
}
|
|
3494
|
+
|
|
3495
|
+
/* ═══════════════════════════════════════════════
|
|
3496
|
+
* Snapshot Bar (replaces Work Summary card)
|
|
3497
|
+
* ═══════════════════════════════════════════════ */
|
|
3498
|
+
|
|
3499
|
+
.snapshot-bar {
|
|
3500
|
+
display: flex;
|
|
3501
|
+
align-items: center;
|
|
3502
|
+
gap: 4px;
|
|
3503
|
+
flex-wrap: wrap;
|
|
3504
|
+
padding: 6px 10px;
|
|
3505
|
+
background: var(--bg-card);
|
|
3506
|
+
border: 1px solid var(--border);
|
|
3507
|
+
border-radius: var(--radius-md);
|
|
3508
|
+
margin-bottom: 10px;
|
|
3509
|
+
font-size: 12px;
|
|
3510
|
+
min-height: 36px;
|
|
3511
|
+
}
|
|
3512
|
+
|
|
3513
|
+
.snapshot-pill {
|
|
3514
|
+
display: inline-flex;
|
|
3515
|
+
align-items: center;
|
|
3516
|
+
gap: 5px;
|
|
3517
|
+
padding: 2px 8px 2px 6px;
|
|
3518
|
+
border-radius: 99px;
|
|
3519
|
+
background: var(--surface-1);
|
|
3520
|
+
border: 1px solid var(--border);
|
|
3521
|
+
white-space: nowrap;
|
|
3522
|
+
user-select: none;
|
|
3523
|
+
}
|
|
3524
|
+
|
|
3525
|
+
.snapshot-dot {
|
|
3526
|
+
display: inline-block;
|
|
3527
|
+
width: 8px;
|
|
3528
|
+
height: 8px;
|
|
3529
|
+
border-radius: 50%;
|
|
3530
|
+
flex-shrink: 0;
|
|
3531
|
+
}
|
|
3532
|
+
|
|
3533
|
+
.snapshot-val {
|
|
3534
|
+
font-variant-numeric: tabular-nums;
|
|
3535
|
+
font-weight: 600;
|
|
3536
|
+
color: var(--text-primary);
|
|
3537
|
+
}
|
|
3538
|
+
|
|
3539
|
+
.snapshot-lbl {
|
|
3540
|
+
color: var(--text-muted);
|
|
3541
|
+
font-size: 11px;
|
|
3542
|
+
}
|
|
3543
|
+
|
|
3544
|
+
.snapshot-view-tag {
|
|
3545
|
+
margin-left: auto;
|
|
3546
|
+
font-size: 11px;
|
|
3547
|
+
color: var(--text-hint);
|
|
3548
|
+
padding: 2px 6px;
|
|
3549
|
+
border-radius: 4px;
|
|
3550
|
+
background: var(--surface-1);
|
|
3551
|
+
border: 1px solid var(--border);
|
|
3552
|
+
white-space: nowrap;
|
|
3553
|
+
}
|
|
3554
|
+
|
|
3555
|
+
/* ═══════════════════════════════════════════════
|
|
3556
|
+
* Task Table (Jira-style list mode)
|
|
3557
|
+
* ═══════════════════════════════════════════════ */
|
|
3558
|
+
|
|
3559
|
+
.task-table-wrap {
|
|
3560
|
+
overflow-x: auto;
|
|
3561
|
+
margin-bottom: 8px;
|
|
3562
|
+
border-radius: var(--radius-md);
|
|
3563
|
+
border: 1px solid var(--border);
|
|
3564
|
+
background: var(--bg-card);
|
|
3565
|
+
}
|
|
3566
|
+
|
|
3567
|
+
.task-table {
|
|
3568
|
+
width: 100%;
|
|
3569
|
+
border-collapse: collapse;
|
|
3570
|
+
font-size: 13px;
|
|
3571
|
+
table-layout: fixed;
|
|
3572
|
+
}
|
|
3573
|
+
|
|
3574
|
+
/* Column widths via header cells */
|
|
3575
|
+
.task-th:nth-child(1) { width: 120px; } /* Status */
|
|
3576
|
+
.task-th:nth-child(2) { width: 76px; } /* Priority */
|
|
3577
|
+
.task-th:nth-child(3) { } /* Title — flex grows */
|
|
3578
|
+
.task-th:nth-child(4) { width: 140px; } /* Branch */
|
|
3579
|
+
.task-th:nth-child(5) { width: 110px; } /* Repo */
|
|
3580
|
+
.task-th:nth-child(6) { width: 90px; } /* Updated */
|
|
3581
|
+
|
|
3582
|
+
.task-th {
|
|
3583
|
+
padding: 9px 12px;
|
|
3584
|
+
text-align: left;
|
|
3585
|
+
font-size: 11px;
|
|
3586
|
+
font-weight: 600;
|
|
3587
|
+
letter-spacing: 0.06em;
|
|
3588
|
+
text-transform: uppercase;
|
|
3589
|
+
color: var(--text-hint);
|
|
3590
|
+
background: var(--surface-1);
|
|
3591
|
+
border-bottom: 1px solid var(--border);
|
|
3592
|
+
cursor: pointer;
|
|
3593
|
+
white-space: nowrap;
|
|
3594
|
+
user-select: none;
|
|
3595
|
+
transition: color 0.1s, background 0.1s;
|
|
3596
|
+
}
|
|
3597
|
+
|
|
3598
|
+
.task-th:hover {
|
|
3599
|
+
color: var(--text-primary);
|
|
3600
|
+
background: var(--bg-card-hover);
|
|
3601
|
+
}
|
|
3602
|
+
|
|
3603
|
+
.task-th-active {
|
|
3604
|
+
color: var(--accent);
|
|
3605
|
+
}
|
|
3606
|
+
|
|
3607
|
+
.task-th-grow {
|
|
3608
|
+
width: auto;
|
|
3609
|
+
}
|
|
3610
|
+
|
|
3611
|
+
.task-th-arrow {
|
|
3612
|
+
font-size: 10px;
|
|
3613
|
+
opacity: 0.5;
|
|
3614
|
+
margin-left: 2px;
|
|
3615
|
+
}
|
|
3616
|
+
|
|
3617
|
+
.task-th-arrow.active {
|
|
3618
|
+
opacity: 1;
|
|
3619
|
+
color: var(--accent);
|
|
3620
|
+
}
|
|
3621
|
+
|
|
3622
|
+
.task-tr {
|
|
3623
|
+
cursor: pointer;
|
|
3624
|
+
transition: background 0.1s;
|
|
3625
|
+
border-bottom: 1px solid var(--border);
|
|
3626
|
+
}
|
|
3627
|
+
|
|
3628
|
+
.task-tr:last-child {
|
|
3629
|
+
border-bottom: none;
|
|
3630
|
+
}
|
|
3631
|
+
|
|
3632
|
+
.task-tr:hover {
|
|
3633
|
+
background: var(--bg-card-hover);
|
|
3634
|
+
}
|
|
3635
|
+
|
|
3636
|
+
.task-tr[data-status="inprogress"] {
|
|
3637
|
+
border-left: 3px solid var(--color-inprogress);
|
|
3638
|
+
}
|
|
3639
|
+
.task-tr[data-status="inreview"] {
|
|
3640
|
+
border-left: 3px solid var(--color-inreview);
|
|
3641
|
+
}
|
|
3642
|
+
.task-tr[data-status="done"],
|
|
3643
|
+
.task-tr[data-status="completed"] {
|
|
3644
|
+
border-left: 3px solid var(--color-done);
|
|
3645
|
+
opacity: 0.75;
|
|
3646
|
+
}
|
|
3647
|
+
.task-tr[data-status="error"],
|
|
3648
|
+
.task-tr[data-status="failed"] {
|
|
3649
|
+
border-left: 3px solid var(--color-error);
|
|
3650
|
+
}
|
|
3651
|
+
.task-tr[data-status="todo"] {
|
|
3652
|
+
border-left: 3px solid var(--color-todo);
|
|
3653
|
+
}
|
|
3654
|
+
|
|
3655
|
+
.task-tr-selected {
|
|
3656
|
+
background: var(--accent-subtle) !important;
|
|
3657
|
+
}
|
|
3658
|
+
|
|
3659
|
+
.task-td {
|
|
3660
|
+
padding: 8px 12px;
|
|
3661
|
+
vertical-align: middle;
|
|
3662
|
+
overflow: hidden;
|
|
3663
|
+
text-overflow: ellipsis;
|
|
3664
|
+
white-space: nowrap;
|
|
3665
|
+
color: var(--text-primary);
|
|
3666
|
+
}
|
|
3667
|
+
|
|
3668
|
+
.task-td-status {
|
|
3669
|
+
display: table-cell;
|
|
3670
|
+
white-space: nowrap;
|
|
3671
|
+
}
|
|
3672
|
+
|
|
3673
|
+
.task-td-title {
|
|
3674
|
+
white-space: normal;
|
|
3675
|
+
}
|
|
3676
|
+
|
|
3677
|
+
.task-td-title-text {
|
|
3678
|
+
font-weight: 500;
|
|
3679
|
+
line-height: 1.35;
|
|
3680
|
+
color: var(--text-primary);
|
|
3681
|
+
word-break: break-word;
|
|
3682
|
+
}
|
|
3683
|
+
|
|
3684
|
+
.task-td-id {
|
|
3685
|
+
font-size: 10px;
|
|
3686
|
+
color: var(--text-hint);
|
|
3687
|
+
margin-top: 2px;
|
|
3688
|
+
font-family: var(--font-mono, monospace);
|
|
3689
|
+
}
|
|
3690
|
+
|
|
3691
|
+
.task-td-branch .task-td-code,
|
|
3692
|
+
.task-td-code {
|
|
3693
|
+
font-family: var(--font-mono, monospace);
|
|
3694
|
+
font-size: 11px;
|
|
3695
|
+
background: var(--surface-1);
|
|
3696
|
+
border: 1px solid var(--border);
|
|
3697
|
+
border-radius: 4px;
|
|
3698
|
+
padding: 1px 5px;
|
|
3699
|
+
max-width: 150px;
|
|
3700
|
+
display: inline-block;
|
|
3701
|
+
overflow: hidden;
|
|
3702
|
+
text-overflow: ellipsis;
|
|
3703
|
+
white-space: nowrap;
|
|
3704
|
+
vertical-align: middle;
|
|
3705
|
+
}
|
|
3706
|
+
|
|
3707
|
+
.task-td-repo {
|
|
3708
|
+
font-size: 12px;
|
|
3709
|
+
color: var(--text-muted);
|
|
3710
|
+
}
|
|
3711
|
+
|
|
3712
|
+
.task-td-date {
|
|
3713
|
+
font-size: 11px;
|
|
3714
|
+
color: var(--text-hint);
|
|
3715
|
+
white-space: nowrap;
|
|
3716
|
+
}
|
|
3717
|
+
|
|
3718
|
+
.task-td-updated {
|
|
3719
|
+
white-space: nowrap;
|
|
3720
|
+
}
|
|
3721
|
+
|
|
3722
|
+
.task-td-empty {
|
|
3723
|
+
color: var(--text-hint);
|
|
3724
|
+
font-size: 12px;
|
|
3725
|
+
}
|
|
3726
|
+
|
|
3727
|
+
@media (max-width: 640px) {
|
|
3728
|
+
.task-td-branch,
|
|
3729
|
+
.task-td-repo {
|
|
3730
|
+
display: none;
|
|
3731
|
+
}
|
|
3732
|
+
|
|
3733
|
+
.task-th:nth-child(4),
|
|
3734
|
+
.task-th:nth-child(5) {
|
|
3735
|
+
display: none;
|
|
3736
|
+
}
|
|
3737
|
+
}
|
|
3738
|
+
|
|
3739
|
+
/* ═══════════════════════════════════════════════
|
|
3740
|
+
* Workspace Manager modal toolbar
|
|
3741
|
+
* ═══════════════════════════════════════════════ */
|
|
3742
|
+
|
|
3743
|
+
.ws-manager-modal-toolbar {
|
|
3744
|
+
display: flex;
|
|
3745
|
+
justify-content: flex-end;
|
|
3746
|
+
margin-bottom: 12px;
|
|
3747
|
+
}
|
|
3748
|
+
|
|
3749
|
+
/* ═══════════════════════════════════════════════
|
|
3750
|
+
* Plan chips + inline count
|
|
3751
|
+
* ═══════════════════════════════════════════════ */
|
|
3752
|
+
|
|
3753
|
+
.plan-chips {
|
|
3754
|
+
display: flex;
|
|
3755
|
+
flex-wrap: wrap;
|
|
3756
|
+
gap: 6px;
|
|
3757
|
+
}
|
|
3758
|
+
|
|
3759
|
+
.plan-count-input {
|
|
3760
|
+
display: inline-block;
|
|
3761
|
+
width: 3.2rem;
|
|
3762
|
+
padding: 1px 6px;
|
|
3763
|
+
margin: 0 4px;
|
|
3764
|
+
text-align: center;
|
|
3765
|
+
vertical-align: baseline;
|
|
3766
|
+
font-size: inherit;
|
|
3767
|
+
}
|
package/ui/styles/kanban.css
CHANGED
|
@@ -35,16 +35,14 @@ body.kanban-dragging .kanban-card {
|
|
|
35
35
|
flex: 1 1 280px;
|
|
36
36
|
display: flex;
|
|
37
37
|
flex-direction: column;
|
|
38
|
-
background: var(--
|
|
39
|
-
backdrop-filter: blur(12px);
|
|
40
|
-
-webkit-backdrop-filter: blur(12px);
|
|
38
|
+
background: var(--bg-card);
|
|
41
39
|
border-radius: var(--radius-lg, 12px);
|
|
42
40
|
padding: 14px;
|
|
43
41
|
/* Use the Telegram stable viewport height, not raw 100vh which Telegram
|
|
44
42
|
overrides — prevents columns being too short or clipped on the web app */
|
|
45
43
|
max-height: calc(var(--viewport-stable-height, 100vh) - 180px);
|
|
46
44
|
position: relative;
|
|
47
|
-
border: 1px solid var(--
|
|
45
|
+
border: 1px solid var(--border);
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
.kanban-column.drag-over {
|
|
@@ -71,12 +69,12 @@ body.kanban-dragging .kanban-card {
|
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
.kanban-count {
|
|
74
|
-
background: var(--
|
|
72
|
+
background: var(--surface-1);
|
|
75
73
|
padding: 2px 8px;
|
|
76
74
|
border-radius: var(--radius-full, 999px);
|
|
77
75
|
font-size: 12px;
|
|
78
76
|
font-weight: 500;
|
|
79
|
-
border: 1px solid var(--
|
|
77
|
+
border: 1px solid var(--border);
|
|
80
78
|
}
|
|
81
79
|
|
|
82
80
|
.kanban-add-btn {
|
|
@@ -139,20 +137,17 @@ body.kanban-dragging .kanban-card {
|
|
|
139
137
|
}
|
|
140
138
|
|
|
141
139
|
.kanban-card {
|
|
142
|
-
background: var(--
|
|
143
|
-
|
|
144
|
-
-webkit-backdrop-filter: blur(8px);
|
|
145
|
-
border: 1px solid var(--glass-border, rgba(255, 255, 255, 0.06));
|
|
140
|
+
background: var(--bg-card);
|
|
141
|
+
border: 1px solid var(--border);
|
|
146
142
|
border-radius: var(--radius-md, 8px);
|
|
147
143
|
padding: 14px;
|
|
148
144
|
cursor: pointer;
|
|
149
|
-
transition: border-color 0.15s,
|
|
145
|
+
transition: border-color 0.15s, opacity 0.15s, transform 0.15s;
|
|
150
146
|
touch-action: pan-y;
|
|
151
147
|
}
|
|
152
148
|
|
|
153
149
|
.kanban-card:hover {
|
|
154
|
-
border-color: var(--border-
|
|
155
|
-
box-shadow: var(--shadow-glow-sm);
|
|
150
|
+
border-color: var(--border-strong);
|
|
156
151
|
transform: translateY(-1px);
|
|
157
152
|
}
|
|
158
153
|
|
|
@@ -278,7 +273,7 @@ body.kanban-dragging .kanban-card {
|
|
|
278
273
|
.kanban-scroll-fade {
|
|
279
274
|
height: 16px;
|
|
280
275
|
flex-shrink: 0;
|
|
281
|
-
background: linear-gradient(to top, var(--
|
|
276
|
+
background: linear-gradient(to top, var(--bg-card), transparent);
|
|
282
277
|
border-radius: 0 0 var(--radius-lg, 12px) var(--radius-lg, 12px);
|
|
283
278
|
pointer-events: none;
|
|
284
279
|
margin: 0 -12px -12px;
|
|
@@ -368,7 +363,6 @@ body.kanban-dragging .kanban-card {
|
|
|
368
363
|
}
|
|
369
364
|
|
|
370
365
|
.view-toggle-btn.active {
|
|
371
|
-
background: var(--
|
|
366
|
+
background: var(--accent);
|
|
372
367
|
color: var(--accent-text);
|
|
373
|
-
box-shadow: var(--shadow-glow-sm);
|
|
374
368
|
}
|