bgrun 3.12.0 → 3.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,6 +54,40 @@
54
54
  --transition-spring: 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
55
55
  }
56
56
 
57
+ /* ─── Light Theme ─── */
58
+ [data-theme="light"] {
59
+ --bg-primary: #f8fafc;
60
+ --bg-secondary: #f1f5f9;
61
+ --bg-surface: #e2e8f0;
62
+ --bg-card: rgba(255, 255, 255, 0.9);
63
+ --bg-glass: rgba(0, 0, 0, 0.03);
64
+ --bg-hover: rgba(0, 0, 0, 0.05);
65
+ --bg-elevated: rgba(0, 0, 0, 0.04);
66
+ --bg-deeper: #e2e8f0;
67
+ --border-glass: rgba(0, 0, 0, 0.1);
68
+ --border-hover: rgba(0, 0, 0, 0.18);
69
+ --border-subtle: rgba(0, 0, 0, 0.06);
70
+ --border: rgba(0, 0, 0, 0.12);
71
+ --text-primary: #0f172a;
72
+ --text-secondary: #475569;
73
+ --text-muted: #64748b;
74
+ --text-dim: #94a3b8;
75
+ --text: #1e293b;
76
+ --shadow-glow: 0 0 80px rgba(99, 102, 241, 0.06);
77
+ --shadow-card: 0 1px 3px rgba(0, 0, 0, 0.08), 0 4px 20px rgba(0, 0, 0, 0.04);
78
+ --shadow-elevated: 0 4px 24px rgba(0, 0, 0, 0.1), 0 1px 4px rgba(0, 0, 0, 0.06);
79
+ }
80
+
81
+ [data-theme="light"] body::before,
82
+ [data-theme="light"] body::after {
83
+ display: none;
84
+ }
85
+
86
+ [data-theme="light"] html {
87
+ background: var(--bg-primary);
88
+ color: var(--text-primary);
89
+ }
90
+
57
91
  * {
58
92
  margin: 0;
59
93
  padding: 0;
@@ -353,6 +387,50 @@ body::after {
353
387
  opacity: 1;
354
388
  }
355
389
 
390
+ .stat-clickable {
391
+ cursor: pointer;
392
+ }
393
+
394
+ .stat-clickable.stat-active {
395
+ box-shadow: inset 0 0 0 2px var(--accent-primary), var(--shadow-elevated);
396
+ transform: translateY(-2px);
397
+ }
398
+
399
+ .stat-filter-badge {
400
+ display: inline-flex;
401
+ align-items: center;
402
+ gap: 0.4rem;
403
+ padding: 0.3rem 0.55rem 0.3rem 0.7rem;
404
+ border-radius: 999px;
405
+ border: 1px solid rgba(99, 102, 241, 0.3);
406
+ background: rgba(99, 102, 241, 0.12);
407
+ color: #a5b4fc;
408
+ font-size: 0.72rem;
409
+ font-weight: 600;
410
+ white-space: nowrap;
411
+ animation: fadeIn 0.2s ease;
412
+ }
413
+
414
+ .stat-filter-badge-clear {
415
+ display: inline-flex;
416
+ align-items: center;
417
+ justify-content: center;
418
+ width: 1.2rem;
419
+ height: 1.2rem;
420
+ border-radius: 50%;
421
+ border: none;
422
+ background: rgba(255, 255, 255, 0.1);
423
+ color: inherit;
424
+ font-size: 0.6rem;
425
+ cursor: pointer;
426
+ line-height: 1;
427
+ }
428
+
429
+ .stat-filter-badge-clear:hover {
430
+ background: rgba(239, 68, 68, 0.3);
431
+ color: #fca5a5;
432
+ }
433
+
356
434
  .stat-card.running {
357
435
  border-left: 3px solid var(--success);
358
436
  }
@@ -463,6 +541,40 @@ body::after {
463
541
  color: var(--warning);
464
542
  }
465
543
 
544
+ .stat-card.uptime {
545
+ border-left: 3px solid var(--info);
546
+ }
547
+
548
+ .stat-card.uptime::before {
549
+ background: var(--info);
550
+ opacity: 0.08;
551
+ }
552
+
553
+ .stat-card.uptime:hover::before {
554
+ opacity: 0.12;
555
+ }
556
+
557
+ .stat-card.uptime .stat-value {
558
+ color: var(--info);
559
+ }
560
+
561
+ .stat-card.uptime-total {
562
+ border-left: 3px solid var(--accent-secondary);
563
+ }
564
+
565
+ .stat-card.uptime-total::before {
566
+ background: var(--accent-secondary);
567
+ opacity: 0.08;
568
+ }
569
+
570
+ .stat-card.uptime-total:hover::before {
571
+ opacity: 0.12;
572
+ }
573
+
574
+ .stat-card.uptime-total .stat-value {
575
+ color: var(--accent-secondary);
576
+ }
577
+
466
578
  /* ─── Guard Toggle (inline shield icon in process name) ─── */
467
579
  .guard-toggle {
468
580
  display: inline-flex;
@@ -515,6 +627,126 @@ body::after {
515
627
  margin-left: 0.25rem;
516
628
  }
517
629
 
630
+ /* Group badge for process cards */
631
+ .group-badge {
632
+ font-size: 0.65rem;
633
+ margin-left: 0.35rem;
634
+ padding: 0.1rem 0.4rem;
635
+ border-radius: 999px;
636
+ background: rgba(139, 148, 158, 0.2);
637
+ color: var(--text-muted);
638
+ font-weight: 500;
639
+ }
640
+
641
+ /* Group filter dropdown */
642
+ .group-filter {
643
+ padding: 0.4rem 0.6rem;
644
+ border-radius: 6px;
645
+ border: 1px solid var(--border);
646
+ background: var(--bg-secondary);
647
+ color: var(--text);
648
+ font-size: 0.85rem;
649
+ cursor: pointer;
650
+ margin-left: 0.5rem;
651
+ }
652
+
653
+ .group-filter:hover {
654
+ border-color: var(--text-muted);
655
+ }
656
+
657
+ .deploy-controls {
658
+ display: inline-flex;
659
+ align-items: center;
660
+ gap: 0.35rem;
661
+ }
662
+
663
+ .deploy-concurrency-wrap {
664
+ display: inline-flex;
665
+ align-items: center;
666
+ gap: 0.4rem;
667
+ padding: 0.35rem 0.55rem;
668
+ border: 1px solid var(--border);
669
+ border-radius: 8px;
670
+ background: var(--bg-secondary);
671
+ color: var(--text-secondary);
672
+ }
673
+
674
+ .deploy-concurrency-label {
675
+ font-size: 0.78rem;
676
+ color: var(--text-muted);
677
+ font-weight: 600;
678
+ }
679
+
680
+ .deploy-concurrency-select {
681
+ border: none;
682
+ background: transparent;
683
+ color: var(--text);
684
+ font-size: 0.82rem;
685
+ font-weight: 700;
686
+ cursor: pointer;
687
+ outline: none;
688
+ }
689
+
690
+ .deploy-concurrency-select:disabled {
691
+ opacity: 0.6;
692
+ cursor: wait;
693
+ }
694
+
695
+ #deploy-preset-reset-btn[disabled] {
696
+ opacity: 0.45;
697
+ cursor: not-allowed;
698
+ }
699
+
700
+ .deploy-preset-source {
701
+ display: inline-flex;
702
+ align-items: center;
703
+ justify-content: center;
704
+ min-width: 3.9rem;
705
+ padding: 0.22rem 0.5rem;
706
+ border-radius: 999px;
707
+ background: rgba(139, 148, 158, 0.16);
708
+ color: var(--text-muted);
709
+ font-size: 0.72rem;
710
+ font-weight: 700;
711
+ text-transform: uppercase;
712
+ letter-spacing: 0.03em;
713
+ }
714
+
715
+ .deploy-preset-source.is-preset {
716
+ background: rgba(34, 197, 94, 0.15);
717
+ color: #86efac;
718
+ }
719
+
720
+ .deploy-preset-scopes {
721
+ display: inline-flex;
722
+ align-items: center;
723
+ gap: 0.35rem;
724
+ flex-wrap: wrap;
725
+ }
726
+
727
+ .deploy-preset-scope {
728
+ display: inline-flex;
729
+ align-items: center;
730
+ padding: 0.18rem 0.45rem;
731
+ border-radius: 999px;
732
+ background: rgba(139, 148, 158, 0.14);
733
+ color: var(--text-muted);
734
+ font-size: 0.7rem;
735
+ font-weight: 700;
736
+ border: none;
737
+ cursor: pointer;
738
+ }
739
+
740
+ .deploy-preset-scope:hover {
741
+ color: var(--text);
742
+ background: rgba(139, 148, 158, 0.22);
743
+ }
744
+
745
+ .deploy-preset-scope.active {
746
+ background: rgba(34, 197, 94, 0.18);
747
+ color: #86efac;
748
+ }
749
+
518
750
  /* Guard action button styling */
519
751
  .action-btn.guard {
520
752
  color: var(--text-muted);
@@ -578,6 +810,7 @@ body::after {
578
810
  align-items: center;
579
811
  gap: 1rem;
580
812
  flex: 1;
813
+ flex-wrap: wrap;
581
814
  }
582
815
 
583
816
  .toolbar-right {
@@ -1445,6 +1678,61 @@ a.port-link:hover {
1445
1678
  color: var(--text-muted);
1446
1679
  }
1447
1680
 
1681
+ .port-input-wrap {
1682
+ display: flex;
1683
+ gap: 0.5rem;
1684
+ align-items: center;
1685
+ }
1686
+
1687
+ .port-input-wrap input {
1688
+ flex: 1;
1689
+ }
1690
+
1691
+ .port-input-wrap .btn {
1692
+ flex-shrink: 0;
1693
+ white-space: nowrap;
1694
+ }
1695
+
1696
+ .port-range-wrap {
1697
+ display: flex;
1698
+ align-items: center;
1699
+ gap: 0.4rem;
1700
+ margin-top: 0.45rem;
1701
+ }
1702
+
1703
+ .port-range-label {
1704
+ font-size: 0.72rem;
1705
+ color: var(--text-muted);
1706
+ font-weight: 600;
1707
+ white-space: nowrap;
1708
+ }
1709
+
1710
+ .port-range-input {
1711
+ width: 80px;
1712
+ padding: 0.3rem 0.5rem;
1713
+ border-radius: var(--radius-sm);
1714
+ border: 1px solid var(--border-glass);
1715
+ background: var(--bg-secondary);
1716
+ color: var(--text-primary);
1717
+ font-size: 0.78rem;
1718
+ font-family: var(--font-mono);
1719
+ }
1720
+
1721
+ .port-range-input:focus {
1722
+ border-color: var(--accent-primary);
1723
+ outline: none;
1724
+ }
1725
+
1726
+ .port-range-sep {
1727
+ color: var(--text-dim);
1728
+ font-size: 0.8rem;
1729
+ }
1730
+
1731
+ .port-conflict {
1732
+ border-color: var(--danger) !important;
1733
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15) !important;
1734
+ }
1735
+
1448
1736
  .modal-footer {
1449
1737
  padding: 1rem 1.5rem;
1450
1738
  border-top: 1px solid var(--border-glass);
@@ -2008,6 +2296,20 @@ a.port-link:hover {
2008
2296
  min-height: 0;
2009
2297
  }
2010
2298
 
2299
+ #config-panel-toml {
2300
+ flex: 1;
2301
+ display: flex;
2302
+ flex-direction: column;
2303
+ min-height: 0;
2304
+ }
2305
+
2306
+ #config-panel-env {
2307
+ flex: 1;
2308
+ display: flex;
2309
+ flex-direction: column;
2310
+ min-height: 0;
2311
+ }
2312
+
2011
2313
  .config-toolbar {
2012
2314
  display: flex;
2013
2315
  align-items: center;
@@ -2033,7 +2335,7 @@ a.port-link:hover {
2033
2335
  .config-editor {
2034
2336
  flex: 1;
2035
2337
  width: 100%;
2036
- resize: none;
2338
+ resize: vertical;
2037
2339
  background: rgba(0, 0, 0, 0.25);
2038
2340
  color: var(--text-primary);
2039
2341
  font-family: var(--font-mono);
@@ -2042,7 +2344,7 @@ a.port-link:hover {
2042
2344
  padding: 1rem 1.5rem;
2043
2345
  border: none;
2044
2346
  outline: none;
2045
- min-height: 0;
2347
+ min-height: 220px;
2046
2348
  tab-size: 4;
2047
2349
  }
2048
2350
 
@@ -2290,7 +2592,7 @@ a.port-link:hover {
2290
2592
 
2291
2593
  @media (max-width: 768px) {
2292
2594
  .container {
2293
- padding: 1rem;
2595
+ padding: 0.75rem;
2294
2596
  }
2295
2597
 
2296
2598
  .header {
@@ -2300,22 +2602,58 @@ a.port-link:hover {
2300
2602
  }
2301
2603
 
2302
2604
  .stats-grid {
2303
- grid-template-columns: repeat(3, 1fr);
2605
+ grid-template-columns: repeat(2, 1fr);
2606
+ gap: 0.6rem;
2607
+ margin-bottom: 1rem;
2608
+ }
2609
+
2610
+ .stat-card {
2611
+ padding: 0.85rem 1rem;
2612
+ border-radius: var(--radius-md);
2613
+ }
2614
+
2615
+ .stat-label {
2616
+ font-size: 0.62rem;
2617
+ }
2618
+
2619
+ .stat-value {
2620
+ font-size: 1.2rem;
2304
2621
  }
2305
2622
 
2306
2623
  .toolbar {
2307
2624
  flex-direction: column;
2625
+ gap: 0.6rem;
2308
2626
  }
2309
2627
 
2310
2628
  .toolbar-left {
2311
2629
  flex-direction: column;
2312
2630
  width: 100%;
2631
+ gap: 0.5rem;
2632
+ }
2633
+
2634
+ .toolbar-right {
2635
+ flex-wrap: wrap;
2636
+ gap: 0.4rem;
2637
+ justify-content: center;
2638
+ }
2639
+
2640
+ .toolbar-brand h2 {
2641
+ font-size: 1rem;
2313
2642
  }
2314
2643
 
2315
2644
  .search-wrapper {
2316
2645
  max-width: 100%;
2317
2646
  }
2318
2647
 
2648
+ .deploy-controls {
2649
+ flex-wrap: wrap;
2650
+ }
2651
+
2652
+ .guard-sentinel-pill {
2653
+ font-size: 0.62rem;
2654
+ padding: 3px 8px;
2655
+ }
2656
+
2319
2657
  /* Hide table, show cards */
2320
2658
  .table-container {
2321
2659
  display: none;
@@ -2332,6 +2670,61 @@ a.port-link:hover {
2332
2670
  max-width: 100%;
2333
2671
  }
2334
2672
 
2673
+ /* Modals full-width on mobile */
2674
+ .modal {
2675
+ width: 95vw;
2676
+ max-width: 95vw;
2677
+ max-height: 90vh;
2678
+ }
2679
+
2680
+ .modal-wide {
2681
+ width: 95vw;
2682
+ max-width: 95vw;
2683
+ }
2684
+
2685
+ /* History filters stack vertically */
2686
+ .history-filters {
2687
+ flex-direction: column;
2688
+ gap: 0.5rem;
2689
+ }
2690
+
2691
+ .history-search {
2692
+ min-width: unset;
2693
+ }
2694
+
2695
+ .history-hints-bar {
2696
+ flex-direction: column;
2697
+ gap: 0.4rem;
2698
+ align-items: flex-start;
2699
+ }
2700
+
2701
+ .history-hints-bar-left {
2702
+ flex-direction: column;
2703
+ gap: 0.4rem;
2704
+ align-items: flex-start;
2705
+ }
2706
+
2707
+ .history-keyboard-hints {
2708
+ gap: 0.35rem;
2709
+ }
2710
+
2711
+ /* Guard activity compact */
2712
+ .guard-activity {
2713
+ padding: 8px 10px;
2714
+ }
2715
+
2716
+ /* Shortcuts overlay compact */
2717
+ .shortcuts-panel {
2718
+ min-width: unset;
2719
+ max-width: 95vw;
2720
+ padding: 1rem;
2721
+ }
2722
+
2723
+ .shortcuts-grid {
2724
+ grid-template-columns: 1fr;
2725
+ gap: 1rem;
2726
+ }
2727
+
2335
2728
  /* ─── Process Card ─── */
2336
2729
  .process-card {
2337
2730
  background: var(--bg-card);
@@ -2607,4 +3000,1171 @@ tr.keyboard-focus td:first-child .process-name span {
2607
3000
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.06);
2608
3001
  line-height: 1;
2609
3002
  flex-shrink: 0;
2610
- }
3003
+ }
3004
+
3005
+ /* ─── Guard Activity Feed ─── */
3006
+ .guard-activity {
3007
+ margin: 16px 0 0 0;
3008
+ padding: 12px 16px;
3009
+ background: var(--bg-surface);
3010
+ border: 1px solid var(--border-glass);
3011
+ border-radius: var(--radius-md);
3012
+ }
3013
+
3014
+ .guard-activity-header {
3015
+ display: flex;
3016
+ align-items: center;
3017
+ justify-content: space-between;
3018
+ margin-bottom: 8px;
3019
+ }
3020
+
3021
+ .guard-activity-title {
3022
+ font-size: 0.8rem;
3023
+ font-weight: 600;
3024
+ color: var(--text-secondary);
3025
+ text-transform: uppercase;
3026
+ letter-spacing: 0.5px;
3027
+ }
3028
+
3029
+ .guard-activity-empty {
3030
+ font-size: 0.75rem;
3031
+ color: var(--text-muted);
3032
+ font-style: italic;
3033
+ }
3034
+
3035
+ .guard-activity-list {
3036
+ display: flex;
3037
+ flex-direction: column;
3038
+ gap: 6px;
3039
+ max-height: 120px;
3040
+ overflow-y: auto;
3041
+ }
3042
+
3043
+ .guard-event {
3044
+ display: flex;
3045
+ align-items: center;
3046
+ gap: 8px;
3047
+ padding: 6px 10px;
3048
+ background: var(--bg-glass);
3049
+ border-radius: var(--radius-sm);
3050
+ font-size: 0.8rem;
3051
+ }
3052
+
3053
+ .guard-event-time {
3054
+ font-size: 0.7rem;
3055
+ color: var(--text-muted);
3056
+ font-family: var(--font-mono);
3057
+ flex-shrink: 0;
3058
+ }
3059
+
3060
+ .guard-event-icon {
3061
+ font-size: 0.85rem;
3062
+ flex-shrink: 0;
3063
+ }
3064
+
3065
+ .guard-event.success .guard-event-icon { color: var(--success); }
3066
+ .guard-event.failed .guard-event-icon { color: var(--danger); }
3067
+
3068
+ .guard-event-name {
3069
+ font-weight: 500;
3070
+ color: var(--text-primary);
3071
+ }
3072
+
3073
+ .guard-event-action {
3074
+ color: var(--text-secondary);
3075
+ }
3076
+
3077
+ .guard-event.success { border-left: 2px solid var(--success); }
3078
+ .guard-event.failed { border-left: 2px solid var(--danger); }
3079
+
3080
+ /* Templates Modal */
3081
+ .modal-wide {
3082
+ max-width: 700px;
3083
+ }
3084
+
3085
+ .templates-form {
3086
+ margin-bottom: 1.5rem;
3087
+ padding-bottom: 1rem;
3088
+ border-bottom: 1px solid var(--border-subtle);
3089
+ }
3090
+
3091
+ .templates-form .form-row {
3092
+ display: flex;
3093
+ gap: 1rem;
3094
+ }
3095
+
3096
+ .templates-form .form-row .form-group {
3097
+ flex: 1;
3098
+ }
3099
+
3100
+ .templates-form .form-group {
3101
+ margin-bottom: 0.75rem;
3102
+ }
3103
+
3104
+ .templates-form label {
3105
+ display: block;
3106
+ font-size: 0.75rem;
3107
+ font-weight: 600;
3108
+ color: var(--text-secondary);
3109
+ margin-bottom: 0.3rem;
3110
+ text-transform: uppercase;
3111
+ letter-spacing: 0.04em;
3112
+ }
3113
+
3114
+ .templates-form input {
3115
+ width: 100%;
3116
+ padding: 0.5rem 0.65rem;
3117
+ border: 1px solid var(--border);
3118
+ border-radius: var(--radius-sm);
3119
+ background: var(--bg-secondary);
3120
+ color: var(--text);
3121
+ font-size: 0.85rem;
3122
+ outline: none;
3123
+ transition: border-color 0.2s;
3124
+ box-sizing: border-box;
3125
+ }
3126
+
3127
+ .templates-form input:focus {
3128
+ border-color: var(--accent);
3129
+ }
3130
+
3131
+ .templates-actions {
3132
+ margin-top: 0.75rem;
3133
+ }
3134
+
3135
+ .templates-list {
3136
+ max-height: 300px;
3137
+ overflow-y: auto;
3138
+ }
3139
+
3140
+ .templates-empty {
3141
+ text-align: center;
3142
+ color: var(--text-muted);
3143
+ padding: 2rem;
3144
+ font-size: 0.9rem;
3145
+ }
3146
+
3147
+ .template-item {
3148
+ display: flex;
3149
+ align-items: center;
3150
+ padding: 0.75rem;
3151
+ border-radius: var(--radius-sm);
3152
+ background: var(--bg-secondary);
3153
+ margin-bottom: 0.5rem;
3154
+ gap: 0.75rem;
3155
+ }
3156
+
3157
+ .template-item-info {
3158
+ flex: 1;
3159
+ min-width: 0;
3160
+ }
3161
+
3162
+ .template-item-name {
3163
+ font-weight: 600;
3164
+ color: var(--text-primary);
3165
+ margin-bottom: 0.2rem;
3166
+ }
3167
+
3168
+ .template-item-command {
3169
+ font-size: 0.8rem;
3170
+ color: var(--text-muted);
3171
+ font-family: var(--font-mono);
3172
+ white-space: nowrap;
3173
+ overflow: hidden;
3174
+ text-overflow: ellipsis;
3175
+ }
3176
+
3177
+ .template-item-group {
3178
+ font-size: 0.7rem;
3179
+ padding: 0.15rem 0.4rem;
3180
+ border-radius: 999px;
3181
+ background: rgba(139, 148, 158, 0.2);
3182
+ color: var(--text-muted);
3183
+ }
3184
+
3185
+ .template-item-actions {
3186
+ display: flex;
3187
+ gap: 0.35rem;
3188
+ }
3189
+
3190
+ .template-item-actions button {
3191
+ padding: 0.35rem 0.5rem;
3192
+ font-size: 0.7rem;
3193
+ border-radius: var(--radius-sm);
3194
+ border: 1px solid var(--border);
3195
+ background: var(--bg-primary);
3196
+ color: var(--text-secondary);
3197
+ cursor: pointer;
3198
+ transition: all 0.2s;
3199
+ }
3200
+
3201
+ .template-item-actions button:hover {
3202
+ background: var(--bg-secondary);
3203
+ color: var(--text);
3204
+ }
3205
+
3206
+ .template-item-actions button.use-btn {
3207
+ background: var(--accent);
3208
+ color: white;
3209
+ border-color: var(--accent);
3210
+ }
3211
+
3212
+ .template-item-actions button.use-btn:hover {
3213
+ background: var(--accent-hover, #3b82f6);
3214
+ }
3215
+
3216
+ .template-item-actions button.delete-btn:hover {
3217
+ border-color: var(--danger);
3218
+ color: var(--danger);
3219
+ }
3220
+
3221
+ /* History Modal */
3222
+ .history-filters {
3223
+ display: flex;
3224
+ gap: 0.75rem;
3225
+ margin-bottom: 1rem;
3226
+ }
3227
+
3228
+ .history-select {
3229
+ padding: 0.4rem 0.6rem;
3230
+ border-radius: 6px;
3231
+ border: 1px solid var(--border);
3232
+ background: var(--bg-secondary);
3233
+ color: var(--text);
3234
+ font-size: 0.85rem;
3235
+ cursor: pointer;
3236
+ }
3237
+
3238
+ .history-search {
3239
+ min-width: 220px;
3240
+ cursor: text;
3241
+ }
3242
+
3243
+ #history-clear-filters-btn[disabled] {
3244
+ opacity: 0.5;
3245
+ cursor: not-allowed;
3246
+ }
3247
+
3248
+ .history-density-wrap {
3249
+ display: inline-flex;
3250
+ align-items: center;
3251
+ gap: 0.45rem;
3252
+ padding: 0 0.15rem;
3253
+ color: var(--text-muted);
3254
+ font-size: 0.72rem;
3255
+ font-weight: 600;
3256
+ }
3257
+
3258
+ .history-density-label {
3259
+ white-space: nowrap;
3260
+ }
3261
+
3262
+ .history-density-select {
3263
+ min-width: 88px;
3264
+ }
3265
+
3266
+ .history-shortcuts-toggle {
3267
+ display: inline-flex;
3268
+ align-items: center;
3269
+ gap: 0.45rem;
3270
+ color: var(--text-muted);
3271
+ font-size: 0.72rem;
3272
+ font-weight: 600;
3273
+ user-select: none;
3274
+ cursor: pointer;
3275
+ }
3276
+
3277
+ .history-shortcuts-toggle input {
3278
+ margin: 0;
3279
+ accent-color: var(--accent-primary);
3280
+ }
3281
+
3282
+ .history-hints-bar {
3283
+ display: flex;
3284
+ align-items: center;
3285
+ justify-content: space-between;
3286
+ gap: 0.75rem;
3287
+ margin: 0.35rem 0 0.4rem;
3288
+ }
3289
+
3290
+ .history-hints-actions {
3291
+ display: inline-flex;
3292
+ align-items: center;
3293
+ gap: 0.5rem;
3294
+ flex-wrap: wrap;
3295
+ justify-content: flex-end;
3296
+ }
3297
+
3298
+ .history-hint-groups-menu {
3299
+ position: relative;
3300
+ }
3301
+
3302
+ .history-hint-groups-panel {
3303
+ position: absolute;
3304
+ top: calc(100% + 0.35rem);
3305
+ right: 0;
3306
+ z-index: 10;
3307
+ display: flex;
3308
+ flex-direction: column;
3309
+ gap: 0.35rem;
3310
+ min-width: 150px;
3311
+ padding: 0.6rem;
3312
+ border-radius: 0.7rem;
3313
+ border: 1px solid var(--border-glass);
3314
+ background: rgba(15, 23, 42, 0.96);
3315
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.25);
3316
+ }
3317
+
3318
+ .history-hint-presets {
3319
+ display: flex;
3320
+ flex-wrap: wrap;
3321
+ gap: 0.35rem;
3322
+ margin-bottom: 0.2rem;
3323
+ }
3324
+
3325
+ .history-hint-preset {
3326
+ border: 1px solid rgba(139, 148, 158, 0.18);
3327
+ background: rgba(139, 148, 158, 0.1);
3328
+ color: var(--text-muted);
3329
+ border-radius: 999px;
3330
+ padding: 0.16rem 0.48rem;
3331
+ font-size: 0.66rem;
3332
+ font-weight: 700;
3333
+ cursor: pointer;
3334
+ }
3335
+
3336
+ .history-hint-preset:hover,
3337
+ .history-hint-preset.active {
3338
+ background: rgba(96, 165, 250, 0.18);
3339
+ color: #93c5fd;
3340
+ }
3341
+
3342
+ .history-hint-preset-state {
3343
+ display: inline-flex;
3344
+ align-items: center;
3345
+ padding: 0.16rem 0.48rem;
3346
+ border-radius: 999px;
3347
+ border: 1px solid rgba(139, 148, 158, 0.14);
3348
+ background: rgba(139, 148, 158, 0.08);
3349
+ color: var(--text-dim);
3350
+ font-size: 0.66rem;
3351
+ font-weight: 700;
3352
+ }
3353
+
3354
+ .history-hint-preset-state.custom {
3355
+ color: #fbbf24;
3356
+ border-color: rgba(251, 191, 36, 0.22);
3357
+ background: rgba(251, 191, 36, 0.12);
3358
+ }
3359
+
3360
+ .history-hint-group-option {
3361
+ display: inline-flex;
3362
+ align-items: center;
3363
+ gap: 0.45rem;
3364
+ color: var(--text-secondary);
3365
+ font-size: 0.72rem;
3366
+ user-select: none;
3367
+ white-space: nowrap;
3368
+ }
3369
+
3370
+ .history-hint-group-option input {
3371
+ margin: 0;
3372
+ accent-color: var(--accent-primary);
3373
+ }
3374
+
3375
+ .history-hint-density-wrap {
3376
+ display: inline-flex;
3377
+ align-items: center;
3378
+ gap: 0.4rem;
3379
+ color: var(--text-muted);
3380
+ font-size: 0.72rem;
3381
+ font-weight: 600;
3382
+ }
3383
+
3384
+ .history-hint-density-select {
3385
+ min-width: 84px;
3386
+ }
3387
+
3388
+ .history-hints-bar-left {
3389
+ display: flex;
3390
+ align-items: center;
3391
+ gap: 0.6rem;
3392
+ min-width: 0;
3393
+ flex-wrap: wrap;
3394
+ }
3395
+
3396
+ .history-auto-open-toggle {
3397
+ display: inline-flex;
3398
+ align-items: center;
3399
+ gap: 0.4rem;
3400
+ color: var(--text-muted);
3401
+ font-size: 0.72rem;
3402
+ font-weight: 600;
3403
+ user-select: none;
3404
+ cursor: pointer;
3405
+ }
3406
+
3407
+ .history-auto-open-toggle input {
3408
+ margin: 0;
3409
+ accent-color: var(--accent-primary);
3410
+ }
3411
+
3412
+ .history-hints-title {
3413
+ font-size: 0.72rem;
3414
+ font-weight: 700;
3415
+ color: var(--text-muted);
3416
+ text-transform: uppercase;
3417
+ letter-spacing: 0.04em;
3418
+ }
3419
+
3420
+ .history-focus-controls {
3421
+ display: inline-flex;
3422
+ align-items: center;
3423
+ gap: 0.35rem;
3424
+ min-width: 0;
3425
+ max-width: 100%;
3426
+ }
3427
+
3428
+ .history-focus-jump {
3429
+ width: 1.7rem;
3430
+ height: 1.7rem;
3431
+ border-radius: 999px;
3432
+ border: 1px solid rgba(139, 148, 158, 0.18);
3433
+ background: rgba(139, 148, 158, 0.1);
3434
+ color: var(--text-muted);
3435
+ font-size: 0.8rem;
3436
+ font-weight: 700;
3437
+ cursor: pointer;
3438
+ flex-shrink: 0;
3439
+ }
3440
+
3441
+ .history-focus-jump:hover:not(:disabled) {
3442
+ background: rgba(96, 165, 250, 0.18);
3443
+ color: #93c5fd;
3444
+ }
3445
+
3446
+ .history-focus-jump:disabled {
3447
+ opacity: 0.45;
3448
+ cursor: not-allowed;
3449
+ }
3450
+
3451
+ .history-focus-status {
3452
+ display: inline-flex;
3453
+ align-items: center;
3454
+ min-height: 1.5rem;
3455
+ padding: 0.2rem 0.55rem;
3456
+ border-radius: 999px;
3457
+ border: 1px solid rgba(139, 148, 158, 0.14);
3458
+ background: rgba(139, 148, 158, 0.08);
3459
+ color: var(--text-dim);
3460
+ font-size: 0.68rem;
3461
+ font-family: var(--font-mono);
3462
+ white-space: nowrap;
3463
+ max-width: 100%;
3464
+ overflow: hidden;
3465
+ text-overflow: ellipsis;
3466
+ }
3467
+
3468
+ .history-focus-status.active {
3469
+ color: #c4b5fd;
3470
+ border-color: rgba(168, 85, 247, 0.24);
3471
+ background: rgba(168, 85, 247, 0.12);
3472
+ }
3473
+
3474
+ .history-hints-toggle {
3475
+ border: 1px solid rgba(139, 148, 158, 0.18);
3476
+ background: rgba(139, 148, 158, 0.1);
3477
+ color: var(--text-muted);
3478
+ border-radius: 999px;
3479
+ padding: 0.18rem 0.55rem;
3480
+ font-size: 0.68rem;
3481
+ font-weight: 700;
3482
+ cursor: pointer;
3483
+ }
3484
+
3485
+ .history-hints-toggle:hover {
3486
+ background: rgba(96, 165, 250, 0.18);
3487
+ color: #93c5fd;
3488
+ }
3489
+
3490
+ .history-keyboard-hints {
3491
+ display: flex;
3492
+ flex-wrap: wrap;
3493
+ gap: 0.5rem;
3494
+ margin: 0.35rem 0 0.75rem;
3495
+ }
3496
+
3497
+ .history-keyboard-hints.compact {
3498
+ gap: 0.35rem;
3499
+ }
3500
+
3501
+ .history-keyboard-hints.compact .history-keyboard-hint {
3502
+ padding: 0.2rem 0.38rem;
3503
+ font-size: 0.66rem;
3504
+ }
3505
+
3506
+ .history-keyboard-hints.compact .history-keyboard-hint span {
3507
+ display: none;
3508
+ }
3509
+
3510
+ .history-keyboard-hints.compact .history-keyboard-hint kbd {
3511
+ min-width: 1.15rem;
3512
+ height: 1.15rem;
3513
+ font-size: 0.64rem;
3514
+ }
3515
+
3516
+ .history-keyboard-hint {
3517
+ display: inline-flex;
3518
+ align-items: center;
3519
+ gap: 0.35rem;
3520
+ padding: 0.28rem 0.5rem;
3521
+ border-radius: 999px;
3522
+ border: 1px solid rgba(139, 148, 158, 0.14);
3523
+ background: rgba(139, 148, 158, 0.08);
3524
+ color: var(--text-muted);
3525
+ font-size: 0.7rem;
3526
+ white-space: nowrap;
3527
+ }
3528
+
3529
+ .history-keyboard-hint kbd {
3530
+ display: inline-flex;
3531
+ align-items: center;
3532
+ justify-content: center;
3533
+ min-width: 1.3rem;
3534
+ height: 1.3rem;
3535
+ padding: 0 0.28rem;
3536
+ border-radius: 0.38rem;
3537
+ border: 1px solid rgba(139, 148, 158, 0.18);
3538
+ background: rgba(15, 23, 42, 0.75);
3539
+ color: var(--text-secondary);
3540
+ font-size: 0.68rem;
3541
+ font-family: var(--font-mono);
3542
+ box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.04);
3543
+ }
3544
+
3545
+ .history-list {
3546
+ max-height: 400px;
3547
+ overflow-y: auto;
3548
+ }
3549
+
3550
+ .history-empty {
3551
+ text-align: center;
3552
+ color: var(--text-muted);
3553
+ padding: 2rem;
3554
+ font-size: 0.9rem;
3555
+ }
3556
+
3557
+ .history-item {
3558
+ display: flex;
3559
+ align-items: center;
3560
+ flex-wrap: wrap;
3561
+ padding: 0.6rem 0.75rem;
3562
+ border-radius: var(--radius-sm);
3563
+ background: var(--bg-secondary);
3564
+ margin-bottom: 0.4rem;
3565
+ gap: 0.75rem;
3566
+ transition: box-shadow 0.2s ease, border-color 0.2s ease, background 0.2s ease;
3567
+ }
3568
+
3569
+ .history-item.jump-highlight {
3570
+ background: rgba(96, 165, 250, 0.12);
3571
+ box-shadow: inset 0 0 0 1px rgba(96, 165, 250, 0.35);
3572
+ }
3573
+
3574
+ .history-item.keyboard-focused {
3575
+ outline: none;
3576
+ box-shadow: inset 0 0 0 1px rgba(168, 85, 247, 0.45), 0 0 0 1px rgba(168, 85, 247, 0.12);
3577
+ background: rgba(168, 85, 247, 0.08);
3578
+ }
3579
+
3580
+ .history-list.history-density-compact .history-item {
3581
+ padding: 0.45rem 0.6rem;
3582
+ gap: 0.55rem;
3583
+ margin-bottom: 0.28rem;
3584
+ }
3585
+
3586
+ .history-list.history-density-compact .history-item-main {
3587
+ gap: 0.3rem;
3588
+ }
3589
+
3590
+ .history-list.history-density-compact .history-item-meta {
3591
+ gap: 0.4rem;
3592
+ }
3593
+
3594
+ .history-list.history-density-compact .history-item-time,
3595
+ .history-list.history-density-compact .history-item-event,
3596
+ .history-list.history-density-compact .history-item-pid,
3597
+ .history-list.history-density-compact .history-item-details-summary,
3598
+ .history-list.history-density-compact .history-item-detail {
3599
+ font-size: 0.68rem;
3600
+ }
3601
+
3602
+ .history-list.history-density-compact .history-item-actions {
3603
+ min-width: 200px;
3604
+ padding: 0.4rem;
3605
+ }
3606
+
3607
+ .history-list.history-density-compact .history-item-detail {
3608
+ padding: 0.14rem 0.28rem 0.14rem 0.38rem;
3609
+ }
3610
+
3611
+ .history-item-time {
3612
+ font-size: 0.75rem;
3613
+ color: var(--text-muted);
3614
+ font-family: var(--font-mono);
3615
+ flex-shrink: 0;
3616
+ width: 85px;
3617
+ }
3618
+
3619
+ .history-item-main {
3620
+ display: flex;
3621
+ flex-direction: column;
3622
+ gap: 0.45rem;
3623
+ flex: 1;
3624
+ min-width: 0;
3625
+ }
3626
+
3627
+ .history-item-meta {
3628
+ display: flex;
3629
+ align-items: center;
3630
+ flex-wrap: wrap;
3631
+ gap: 0.55rem;
3632
+ min-width: 0;
3633
+ }
3634
+
3635
+ .history-item-process {
3636
+ font-weight: 600;
3637
+ color: var(--text-primary);
3638
+ min-width: 0;
3639
+ white-space: nowrap;
3640
+ overflow: hidden;
3641
+ text-overflow: ellipsis;
3642
+ }
3643
+
3644
+ .history-static-label {
3645
+ cursor: default;
3646
+ }
3647
+
3648
+ .history-item-actions-menu {
3649
+ position: relative;
3650
+ margin-left: auto;
3651
+ flex-shrink: 0;
3652
+ }
3653
+
3654
+ .history-item-actions {
3655
+ position: absolute;
3656
+ top: calc(100% + 0.35rem);
3657
+ right: 0;
3658
+ z-index: 10;
3659
+ display: flex;
3660
+ align-items: center;
3661
+ flex-wrap: wrap;
3662
+ justify-content: flex-end;
3663
+ gap: 0.35rem;
3664
+ padding: 0.5rem;
3665
+ border-radius: 0.7rem;
3666
+ border: 1px solid var(--border-glass);
3667
+ background: rgba(15, 23, 42, 0.96);
3668
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.25);
3669
+ min-width: 220px;
3670
+ }
3671
+
3672
+ .history-filter-shortcut {
3673
+ border: none;
3674
+ background: transparent;
3675
+ padding: 0;
3676
+ font: inherit;
3677
+ cursor: pointer;
3678
+ text-align: left;
3679
+ }
3680
+
3681
+ .history-filter-shortcut:hover {
3682
+ opacity: 0.85;
3683
+ text-decoration: underline;
3684
+ }
3685
+
3686
+ .history-item-actions-toggle {
3687
+ list-style: none;
3688
+ display: inline-flex;
3689
+ align-items: center;
3690
+ border: 1px solid rgba(139, 148, 158, 0.18);
3691
+ background: rgba(139, 148, 158, 0.1);
3692
+ color: var(--text-muted);
3693
+ border-radius: 999px;
3694
+ padding: 0.12rem 0.5rem;
3695
+ font-size: 0.66rem;
3696
+ font-weight: 700;
3697
+ cursor: pointer;
3698
+ user-select: none;
3699
+ }
3700
+
3701
+ .history-item-actions-toggle::-webkit-details-marker {
3702
+ display: none;
3703
+ }
3704
+
3705
+ .history-item-actions-toggle:hover,
3706
+ .history-item-actions-menu[open] .history-item-actions-toggle {
3707
+ background: rgba(96, 165, 250, 0.18);
3708
+ color: #93c5fd;
3709
+ }
3710
+
3711
+ .history-action-btn,
3712
+ .history-item-copy {
3713
+ border: 1px solid rgba(139, 148, 158, 0.18);
3714
+ background: rgba(139, 148, 158, 0.1);
3715
+ color: var(--text-muted);
3716
+ border-radius: 999px;
3717
+ padding: 0.12rem 0.42rem;
3718
+ font-size: 0.66rem;
3719
+ font-weight: 700;
3720
+ cursor: pointer;
3721
+ flex-shrink: 0;
3722
+ }
3723
+
3724
+ .history-action-btn:hover,
3725
+ .history-item-copy:hover {
3726
+ background: rgba(96, 165, 250, 0.18);
3727
+ color: #93c5fd;
3728
+ }
3729
+
3730
+ .history-item-event {
3731
+ font-size: 0.75rem;
3732
+ padding: 0.2rem 0.5rem;
3733
+ border-radius: 999px;
3734
+ text-transform: uppercase;
3735
+ font-weight: 600;
3736
+ flex-shrink: 0;
3737
+ }
3738
+
3739
+ .history-item-event.start {
3740
+ background: rgba(34, 197, 94, 0.15);
3741
+ color: #22c55e;
3742
+ }
3743
+
3744
+ .history-item-event.stop {
3745
+ background: rgba(239, 68, 68, 0.15);
3746
+ color: #ef4444;
3747
+ }
3748
+
3749
+ .history-item-event.restart {
3750
+ background: rgba(251, 191, 36, 0.15);
3751
+ color: #fbbf24;
3752
+ }
3753
+
3754
+ .history-item-event.guard_on {
3755
+ background: rgba(59, 130, 246, 0.15);
3756
+ color: #3b82f6;
3757
+ }
3758
+
3759
+ .history-item-event.guard_off {
3760
+ background: rgba(139, 148, 158, 0.15);
3761
+ color: #8b949e;
3762
+ }
3763
+
3764
+ .history-item-event.deploy {
3765
+ background: rgba(168, 85, 247, 0.15);
3766
+ color: #a855f7;
3767
+ }
3768
+
3769
+ .history-item-pid {
3770
+ font-size: 0.7rem;
3771
+ color: var(--text-muted);
3772
+ font-family: var(--font-mono);
3773
+ flex-shrink: 0;
3774
+ }
3775
+
3776
+ .history-item-details-wrap {
3777
+ width: 100%;
3778
+ }
3779
+
3780
+ .history-item-details-summary {
3781
+ display: inline-flex;
3782
+ align-items: center;
3783
+ gap: 0.45rem;
3784
+ cursor: pointer;
3785
+ color: var(--text-muted);
3786
+ font-size: 0.78rem;
3787
+ user-select: none;
3788
+ list-style: none;
3789
+ }
3790
+
3791
+ .history-item-details-summary::-webkit-details-marker {
3792
+ display: none;
3793
+ }
3794
+
3795
+ .history-item-details-summary::before {
3796
+ content: '▸';
3797
+ font-size: 0.8rem;
3798
+ transition: transform 0.15s ease;
3799
+ }
3800
+
3801
+ .history-item-details-wrap[open] .history-item-details-summary::before {
3802
+ transform: rotate(90deg);
3803
+ }
3804
+
3805
+ .history-item-details-count {
3806
+ display: inline-flex;
3807
+ align-items: center;
3808
+ justify-content: center;
3809
+ min-width: 1.2rem;
3810
+ height: 1.2rem;
3811
+ padding: 0 0.3rem;
3812
+ border-radius: 999px;
3813
+ background: rgba(139, 148, 158, 0.18);
3814
+ color: var(--text-secondary);
3815
+ font-size: 0.7rem;
3816
+ font-weight: 700;
3817
+ }
3818
+
3819
+ .history-item-details {
3820
+ display: flex;
3821
+ flex-wrap: wrap;
3822
+ gap: 0.4rem;
3823
+ width: 100%;
3824
+ margin-top: 0.45rem;
3825
+ }
3826
+
3827
+ .history-item-detail {
3828
+ display: inline-flex;
3829
+ align-items: center;
3830
+ gap: 0.35rem;
3831
+ font-size: 0.72rem;
3832
+ color: var(--text-muted);
3833
+ font-family: var(--font-mono);
3834
+ padding: 0.18rem 0.3rem 0.18rem 0.45rem;
3835
+ border-radius: 999px;
3836
+ background: rgba(139, 148, 158, 0.12);
3837
+ border: 1px solid rgba(139, 148, 158, 0.18);
3838
+ }
3839
+
3840
+ .history-item-detail-text {
3841
+ min-width: 0;
3842
+ }
3843
+
3844
+ .history-item-filter-chip {
3845
+ border: none;
3846
+ background: transparent;
3847
+ color: inherit;
3848
+ font: inherit;
3849
+ padding: 0;
3850
+ cursor: pointer;
3851
+ text-align: left;
3852
+ }
3853
+
3854
+ .history-item-filter-chip:hover {
3855
+ color: #93c5fd;
3856
+ }
3857
+
3858
+
3859
+ /* Deploy Results Modal */
3860
+ .deploy-results-summary {
3861
+ display: flex;
3862
+ flex-wrap: wrap;
3863
+ gap: 0.75rem;
3864
+ margin-bottom: 1rem;
3865
+ padding: 0.8rem 0.9rem;
3866
+ border: 1px solid var(--border);
3867
+ border-radius: 10px;
3868
+ background: var(--bg-secondary);
3869
+ color: var(--text-secondary);
3870
+ font-size: 0.9rem;
3871
+ }
3872
+
3873
+ .deploy-results-list {
3874
+ max-height: 420px;
3875
+ overflow-y: auto;
3876
+ display: flex;
3877
+ flex-direction: column;
3878
+ gap: 0.75rem;
3879
+ }
3880
+
3881
+ .deploy-result-item {
3882
+ border: 1px solid var(--border);
3883
+ border-radius: 10px;
3884
+ background: var(--bg-secondary);
3885
+ padding: 0.85rem 0.95rem;
3886
+ }
3887
+
3888
+ .deploy-result-item.ok {
3889
+ border-color: rgba(34, 197, 94, 0.35);
3890
+ }
3891
+
3892
+ .deploy-result-item.skipped {
3893
+ border-color: rgba(245, 158, 11, 0.35);
3894
+ }
3895
+
3896
+ .deploy-result-item.failed {
3897
+ border-color: rgba(239, 68, 68, 0.35);
3898
+ }
3899
+
3900
+ .deploy-result-item.running {
3901
+ border-color: rgba(59, 130, 246, 0.35);
3902
+ }
3903
+
3904
+ .deploy-result-item.pending {
3905
+ border-color: rgba(139, 148, 158, 0.35);
3906
+ }
3907
+
3908
+ .deploy-result-head {
3909
+ display: flex;
3910
+ align-items: center;
3911
+ justify-content: space-between;
3912
+ gap: 0.75rem;
3913
+ margin-bottom: 0.5rem;
3914
+ }
3915
+
3916
+ .deploy-result-head-right {
3917
+ display: flex;
3918
+ align-items: center;
3919
+ gap: 0.6rem;
3920
+ }
3921
+
3922
+ .deploy-result-name {
3923
+ font-weight: 700;
3924
+ color: var(--text-primary);
3925
+ }
3926
+
3927
+ .deploy-result-status {
3928
+ font-size: 0.75rem;
3929
+ font-weight: 700;
3930
+ padding: 0.22rem 0.55rem;
3931
+ border-radius: 999px;
3932
+ text-transform: uppercase;
3933
+ }
3934
+
3935
+ .deploy-result-status.ok {
3936
+ background: rgba(34, 197, 94, 0.15);
3937
+ color: #22c55e;
3938
+ }
3939
+
3940
+ .deploy-result-status.skipped {
3941
+ background: rgba(245, 158, 11, 0.15);
3942
+ color: #f59e0b;
3943
+ }
3944
+
3945
+ .deploy-result-status.failed {
3946
+ background: rgba(239, 68, 68, 0.15);
3947
+ color: #ef4444;
3948
+ }
3949
+
3950
+ .deploy-result-status.running {
3951
+ background: rgba(59, 130, 246, 0.15);
3952
+ color: #3b82f6;
3953
+ }
3954
+
3955
+ .deploy-result-status.pending {
3956
+ background: rgba(139, 148, 158, 0.15);
3957
+ color: #8b949e;
3958
+ }
3959
+
3960
+ .deploy-result-meta {
3961
+ display: flex;
3962
+ flex-wrap: wrap;
3963
+ gap: 0.5rem 1rem;
3964
+ margin-bottom: 0.55rem;
3965
+ color: var(--text-muted);
3966
+ font-size: 0.82rem;
3967
+ }
3968
+
3969
+ .deploy-result-reason {
3970
+ color: var(--text-secondary);
3971
+ font-size: 0.9rem;
3972
+ margin-bottom: 0.5rem;
3973
+ }
3974
+
3975
+ .deploy-result-details summary {
3976
+ cursor: pointer;
3977
+ color: var(--text-accent);
3978
+ font-size: 0.85rem;
3979
+ margin-bottom: 0.45rem;
3980
+ }
3981
+
3982
+ .deploy-result-details pre {
3983
+ margin: 0;
3984
+ padding: 0.75rem;
3985
+ white-space: pre-wrap;
3986
+ word-break: break-word;
3987
+ border-radius: 8px;
3988
+ background: rgba(0, 0, 0, 0.22);
3989
+ color: var(--text-secondary);
3990
+ font-size: 0.8rem;
3991
+ font-family: var(--font-mono);
3992
+ }
3993
+
3994
+ .deploy-history-btn,
3995
+ .deploy-retry-btn {
3996
+ min-width: 78px;
3997
+ }
3998
+
3999
+ .deploy-retry-btn[disabled] {
4000
+ opacity: 0.6;
4001
+ cursor: wait;
4002
+ }
4003
+
4004
+ /* ─── Dependencies Graph ─── */
4005
+
4006
+ .deps-controls {
4007
+ display: flex;
4008
+ align-items: center;
4009
+ gap: 0.75rem;
4010
+ margin-bottom: 1.25rem;
4011
+ flex-wrap: wrap;
4012
+ }
4013
+
4014
+ .deps-arrow {
4015
+ color: var(--text-secondary);
4016
+ font-size: 0.85rem;
4017
+ white-space: nowrap;
4018
+ }
4019
+
4020
+ .deps-graph-container {
4021
+ background: rgba(0, 0, 0, 0.15);
4022
+ border-radius: 12px;
4023
+ border: 1px solid var(--border);
4024
+ margin-bottom: 1.25rem;
4025
+ overflow: hidden;
4026
+ min-height: 300px;
4027
+ position: relative;
4028
+ }
4029
+
4030
+ .deps-graph-container svg {
4031
+ display: block;
4032
+ }
4033
+
4034
+ .deps-node {
4035
+ cursor: pointer;
4036
+ }
4037
+
4038
+ .deps-node rect {
4039
+ rx: 8;
4040
+ ry: 8;
4041
+ stroke-width: 2;
4042
+ transition: filter 0.15s;
4043
+ }
4044
+
4045
+ .deps-node:hover rect {
4046
+ filter: brightness(1.3);
4047
+ }
4048
+
4049
+ .deps-node text {
4050
+ font-family: var(--font-mono);
4051
+ font-size: 12px;
4052
+ fill: var(--text-primary);
4053
+ pointer-events: none;
4054
+ }
4055
+
4056
+ .deps-edge {
4057
+ stroke: var(--text-secondary);
4058
+ stroke-width: 1.5;
4059
+ fill: none;
4060
+ opacity: 0.6;
4061
+ marker-end: url(#deps-arrowhead);
4062
+ }
4063
+
4064
+ .deps-edge-highlight {
4065
+ stroke: var(--accent);
4066
+ opacity: 1;
4067
+ stroke-width: 2;
4068
+ }
4069
+
4070
+ .deps-list {
4071
+ margin-bottom: 1rem;
4072
+ }
4073
+
4074
+ .deps-list-item {
4075
+ display: flex;
4076
+ align-items: center;
4077
+ gap: 0.5rem;
4078
+ padding: 0.5rem 0.75rem;
4079
+ border-bottom: 1px solid var(--border);
4080
+ font-size: 0.85rem;
4081
+ }
4082
+
4083
+ .deps-list-item:last-child {
4084
+ border-bottom: none;
4085
+ }
4086
+
4087
+ .deps-list-item .deps-item-process {
4088
+ font-weight: 600;
4089
+ color: var(--accent);
4090
+ font-family: var(--font-mono);
4091
+ }
4092
+
4093
+ .deps-list-item .deps-item-arrow {
4094
+ color: var(--text-secondary);
4095
+ }
4096
+
4097
+ .deps-list-item .deps-item-target {
4098
+ font-family: var(--font-mono);
4099
+ color: var(--text-primary);
4100
+ }
4101
+
4102
+ .deps-list-item .deps-remove-btn {
4103
+ margin-left: auto;
4104
+ background: none;
4105
+ border: none;
4106
+ color: var(--red);
4107
+ cursor: pointer;
4108
+ font-size: 1rem;
4109
+ padding: 0 0.25rem;
4110
+ opacity: 0.6;
4111
+ transition: opacity 0.15s;
4112
+ }
4113
+
4114
+ .deps-list-item .deps-remove-btn:hover {
4115
+ opacity: 1;
4116
+ }
4117
+
4118
+ .deps-start-order {
4119
+ padding: 0.75rem;
4120
+ background: rgba(0, 0, 0, 0.1);
4121
+ border-radius: 8px;
4122
+ font-size: 0.8rem;
4123
+ color: var(--text-secondary);
4124
+ }
4125
+
4126
+ .deps-start-order .deps-order-title {
4127
+ font-weight: 600;
4128
+ color: var(--text-primary);
4129
+ margin-bottom: 0.35rem;
4130
+ }
4131
+
4132
+ .deps-start-order .deps-order-list {
4133
+ display: flex;
4134
+ flex-wrap: wrap;
4135
+ gap: 0.35rem;
4136
+ }
4137
+
4138
+ .deps-order-badge {
4139
+ display: inline-flex;
4140
+ align-items: center;
4141
+ gap: 0.3rem;
4142
+ padding: 0.2rem 0.5rem;
4143
+ background: rgba(var(--accent-rgb, 99, 102, 241), 0.15);
4144
+ border-radius: 6px;
4145
+ font-family: var(--font-mono);
4146
+ font-size: 0.75rem;
4147
+ }
4148
+
4149
+ .deps-order-badge .deps-order-num {
4150
+ color: var(--accent);
4151
+ font-weight: 700;
4152
+ font-size: 0.7rem;
4153
+ }
4154
+
4155
+ .deps-empty {
4156
+ text-align: center;
4157
+ padding: 2rem;
4158
+ color: var(--text-secondary);
4159
+ font-size: 0.9rem;
4160
+ }
4161
+
4162
+ @media (max-width: 768px) {
4163
+ .deps-controls {
4164
+ flex-direction: column;
4165
+ align-items: stretch;
4166
+ }
4167
+ .deps-arrow {
4168
+ text-align: center;
4169
+ }
4170
+ }