bgrun 3.11.0 → 3.12.1

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.
@@ -515,6 +515,33 @@ body::after {
515
515
  margin-left: 0.25rem;
516
516
  }
517
517
 
518
+ /* Group badge for process cards */
519
+ .group-badge {
520
+ font-size: 0.65rem;
521
+ margin-left: 0.35rem;
522
+ padding: 0.1rem 0.4rem;
523
+ border-radius: 999px;
524
+ background: rgba(139, 148, 158, 0.2);
525
+ color: var(--text-muted);
526
+ font-weight: 500;
527
+ }
528
+
529
+ /* Group filter dropdown */
530
+ .group-filter {
531
+ padding: 0.4rem 0.6rem;
532
+ border-radius: 6px;
533
+ border: 1px solid var(--border);
534
+ background: var(--bg-secondary);
535
+ color: var(--text);
536
+ font-size: 0.85rem;
537
+ cursor: pointer;
538
+ margin-left: 0.5rem;
539
+ }
540
+
541
+ .group-filter:hover {
542
+ border-color: var(--text-muted);
543
+ }
544
+
518
545
  /* Guard action button styling */
519
546
  .action-btn.guard {
520
547
  color: var(--text-muted);
@@ -675,6 +702,22 @@ body::after {
675
702
  opacity: 0;
676
703
  }
677
704
 
705
+ .search-count {
706
+ position: absolute;
707
+ right: 2rem;
708
+ top: 50%;
709
+ transform: translateY(-50%);
710
+ padding: 1px 6px;
711
+ font-size: 0.6rem;
712
+ font-family: var(--font-mono);
713
+ color: var(--accent);
714
+ border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
715
+ border-radius: 8px;
716
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
717
+ pointer-events: none;
718
+ letter-spacing: 0.3px;
719
+ }
720
+
678
721
  /* ─── Buttons ─── */
679
722
  .btn {
680
723
  display: inline-flex;
@@ -1984,19 +2027,33 @@ a.port-link:hover {
1984
2027
  text-align: center;
1985
2028
  }
1986
2029
 
1987
- /* ─── Config Editor Panel ─── */
1988
- .drawer-config {
1989
- flex: 1;
1990
- display: flex;
1991
- flex-direction: column;
1992
- min-height: 0;
1993
- }
1994
-
1995
- .config-toolbar {
1996
- display: flex;
1997
- align-items: center;
1998
- justify-content: space-between;
1999
- padding: 0.5rem 1rem;
2030
+ /* ─── Config Editor Panel ─── */
2031
+ .drawer-config {
2032
+ flex: 1;
2033
+ display: flex;
2034
+ flex-direction: column;
2035
+ min-height: 0;
2036
+ }
2037
+
2038
+ #config-panel-toml {
2039
+ flex: 1;
2040
+ display: flex;
2041
+ flex-direction: column;
2042
+ min-height: 0;
2043
+ }
2044
+
2045
+ #config-panel-env {
2046
+ flex: 1;
2047
+ display: flex;
2048
+ flex-direction: column;
2049
+ min-height: 0;
2050
+ }
2051
+
2052
+ .config-toolbar {
2053
+ display: flex;
2054
+ align-items: center;
2055
+ justify-content: space-between;
2056
+ padding: 0.5rem 1rem;
2000
2057
  border-bottom: 1px solid var(--border-glass);
2001
2058
  background: rgba(0, 0, 0, 0.12);
2002
2059
  flex-shrink: 0;
@@ -2014,21 +2071,21 @@ a.port-link:hover {
2014
2071
  min-width: 0;
2015
2072
  }
2016
2073
 
2017
- .config-editor {
2018
- flex: 1;
2019
- width: 100%;
2020
- resize: none;
2021
- background: rgba(0, 0, 0, 0.25);
2022
- color: var(--text-primary);
2023
- font-family: var(--font-mono);
2024
- font-size: 0.78rem;
2025
- line-height: 1.7;
2026
- padding: 1rem 1.5rem;
2027
- border: none;
2028
- outline: none;
2029
- min-height: 0;
2030
- tab-size: 4;
2031
- }
2074
+ .config-editor {
2075
+ flex: 1;
2076
+ width: 100%;
2077
+ resize: vertical;
2078
+ background: rgba(0, 0, 0, 0.25);
2079
+ color: var(--text-primary);
2080
+ font-family: var(--font-mono);
2081
+ font-size: 0.78rem;
2082
+ line-height: 1.7;
2083
+ padding: 1rem 1.5rem;
2084
+ border: none;
2085
+ outline: none;
2086
+ min-height: 220px;
2087
+ tab-size: 4;
2088
+ }
2032
2089
 
2033
2090
  .config-editor:focus {
2034
2091
  background: rgba(0, 0, 0, 0.3);
@@ -2040,6 +2097,14 @@ a.port-link:hover {
2040
2097
  white-space: nowrap;
2041
2098
  }
2042
2099
 
2100
+ /* ─── Virtual Scroll Spacers ─── */
2101
+ .log-virtual-top,
2102
+ .log-virtual-bottom {
2103
+ display: block;
2104
+ width: 100%;
2105
+ pointer-events: none;
2106
+ }
2107
+
2043
2108
  /* ─── Log Lines ─── */
2044
2109
  .log-line {
2045
2110
  padding: 0.1rem 0.5rem 0.1rem 0;
@@ -2446,4 +2511,455 @@ a.port-link:hover {
2446
2511
  .guard-sentinel-pill.stopped .guard-sentinel-dot {
2447
2512
  background: var(--danger);
2448
2513
  box-shadow: 0 0 4px rgba(239, 68, 68, 0.3);
2449
- }
2514
+ }
2515
+
2516
+ /* ─── Keyboard Navigation Focus ─── */
2517
+ tr.keyboard-focus {
2518
+ outline: 2px solid var(--accent-primary);
2519
+ outline-offset: -2px;
2520
+ background: rgba(168, 85, 247, 0.08) !important;
2521
+ border-radius: var(--radius-sm);
2522
+ }
2523
+
2524
+ tr.keyboard-focus td:first-child .process-name span {
2525
+ color: var(--accent-primary);
2526
+ }
2527
+
2528
+ /* ─── Keyboard Shortcuts Overlay ─── */
2529
+ .shortcuts-overlay {
2530
+ position: fixed;
2531
+ inset: 0;
2532
+ z-index: 2000;
2533
+ background: rgba(0, 0, 0, 0.6);
2534
+ backdrop-filter: blur(4px);
2535
+ display: flex;
2536
+ align-items: center;
2537
+ justify-content: center;
2538
+ opacity: 0;
2539
+ pointer-events: none;
2540
+ transition: opacity 0.2s ease;
2541
+ }
2542
+
2543
+ .shortcuts-overlay.active {
2544
+ opacity: 1;
2545
+ pointer-events: auto;
2546
+ }
2547
+
2548
+ .shortcuts-panel {
2549
+ background: var(--bg-secondary);
2550
+ border: 1px solid var(--border-glass);
2551
+ border-radius: var(--radius-lg);
2552
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.5), 0 0 60px rgba(0, 0, 0, 0.3);
2553
+ padding: 1.5rem;
2554
+ min-width: 440px;
2555
+ max-width: 520px;
2556
+ animation: scaleIn 0.2s ease;
2557
+ }
2558
+
2559
+ .shortcuts-overlay.active .shortcuts-panel {
2560
+ animation: scaleIn 0.2s ease;
2561
+ }
2562
+
2563
+ @keyframes scaleIn {
2564
+ from {
2565
+ transform: scale(0.95);
2566
+ opacity: 0;
2567
+ }
2568
+
2569
+ to {
2570
+ transform: scale(1);
2571
+ opacity: 1;
2572
+ }
2573
+ }
2574
+
2575
+ .shortcuts-header {
2576
+ display: flex;
2577
+ align-items: center;
2578
+ justify-content: space-between;
2579
+ margin-bottom: 1.25rem;
2580
+ padding-bottom: 0.75rem;
2581
+ border-bottom: 1px solid var(--border-glass);
2582
+ }
2583
+
2584
+ .shortcuts-header h3 {
2585
+ font-size: 1rem;
2586
+ font-weight: 600;
2587
+ color: var(--text-primary);
2588
+ margin: 0;
2589
+ }
2590
+
2591
+ .shortcuts-close {
2592
+ background: none;
2593
+ border: none;
2594
+ color: var(--text-muted);
2595
+ font-size: 1.1rem;
2596
+ cursor: pointer;
2597
+ padding: 0.25rem;
2598
+ line-height: 1;
2599
+ transition: color 0.15s;
2600
+ }
2601
+
2602
+ .shortcuts-close:hover {
2603
+ color: var(--text-primary);
2604
+ }
2605
+
2606
+ .shortcuts-grid {
2607
+ display: grid;
2608
+ grid-template-columns: 1fr 1fr;
2609
+ gap: 1.5rem;
2610
+ }
2611
+
2612
+ .shortcut-section h4 {
2613
+ font-size: 0.7rem;
2614
+ text-transform: uppercase;
2615
+ letter-spacing: 0.08em;
2616
+ color: var(--text-dim);
2617
+ font-weight: 600;
2618
+ margin: 0 0 0.6rem 0;
2619
+ }
2620
+
2621
+ .shortcut-row {
2622
+ display: flex;
2623
+ align-items: center;
2624
+ gap: 0.4rem;
2625
+ padding: 0.3rem 0;
2626
+ font-size: 0.8rem;
2627
+ color: var(--text-secondary);
2628
+ }
2629
+
2630
+ .shortcut-row span {
2631
+ flex: 1;
2632
+ }
2633
+
2634
+ .shortcut-row kbd {
2635
+ display: inline-flex;
2636
+ align-items: center;
2637
+ justify-content: center;
2638
+ min-width: 24px;
2639
+ height: 24px;
2640
+ padding: 0 6px;
2641
+ background: rgba(255, 255, 255, 0.06);
2642
+ border: 1px solid rgba(255, 255, 255, 0.12);
2643
+ border-radius: 5px;
2644
+ font-family: var(--font-mono);
2645
+ font-size: 0.68rem;
2646
+ font-weight: 600;
2647
+ color: var(--text-primary);
2648
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.06);
2649
+ line-height: 1;
2650
+ flex-shrink: 0;
2651
+ }
2652
+
2653
+ /* ─── Guard Activity Feed ─── */
2654
+ .guard-activity {
2655
+ margin: 16px 0 0 0;
2656
+ padding: 12px 16px;
2657
+ background: var(--bg-surface);
2658
+ border: 1px solid var(--border-glass);
2659
+ border-radius: var(--radius-md);
2660
+ }
2661
+
2662
+ .guard-activity-header {
2663
+ display: flex;
2664
+ align-items: center;
2665
+ justify-content: space-between;
2666
+ margin-bottom: 8px;
2667
+ }
2668
+
2669
+ .guard-activity-title {
2670
+ font-size: 0.8rem;
2671
+ font-weight: 600;
2672
+ color: var(--text-secondary);
2673
+ text-transform: uppercase;
2674
+ letter-spacing: 0.5px;
2675
+ }
2676
+
2677
+ .guard-activity-empty {
2678
+ font-size: 0.75rem;
2679
+ color: var(--text-muted);
2680
+ font-style: italic;
2681
+ }
2682
+
2683
+ .guard-activity-list {
2684
+ display: flex;
2685
+ flex-direction: column;
2686
+ gap: 6px;
2687
+ max-height: 120px;
2688
+ overflow-y: auto;
2689
+ }
2690
+
2691
+ .guard-event {
2692
+ display: flex;
2693
+ align-items: center;
2694
+ gap: 8px;
2695
+ padding: 6px 10px;
2696
+ background: var(--bg-glass);
2697
+ border-radius: var(--radius-sm);
2698
+ font-size: 0.8rem;
2699
+ }
2700
+
2701
+ .guard-event-time {
2702
+ font-size: 0.7rem;
2703
+ color: var(--text-muted);
2704
+ font-family: var(--font-mono);
2705
+ flex-shrink: 0;
2706
+ }
2707
+
2708
+ .guard-event-icon {
2709
+ font-size: 0.85rem;
2710
+ flex-shrink: 0;
2711
+ }
2712
+
2713
+ .guard-event.success .guard-event-icon { color: var(--success); }
2714
+ .guard-event.failed .guard-event-icon { color: var(--danger); }
2715
+
2716
+ .guard-event-name {
2717
+ font-weight: 500;
2718
+ color: var(--text-primary);
2719
+ }
2720
+
2721
+ .guard-event-action {
2722
+ color: var(--text-secondary);
2723
+ }
2724
+
2725
+ .guard-event.success { border-left: 2px solid var(--success); }
2726
+ .guard-event.failed { border-left: 2px solid var(--danger); }
2727
+
2728
+ /* Templates Modal */
2729
+ .modal-wide {
2730
+ max-width: 700px;
2731
+ }
2732
+
2733
+ .templates-form {
2734
+ margin-bottom: 1.5rem;
2735
+ padding-bottom: 1rem;
2736
+ border-bottom: 1px solid var(--border-subtle);
2737
+ }
2738
+
2739
+ .templates-form .form-row {
2740
+ display: flex;
2741
+ gap: 1rem;
2742
+ }
2743
+
2744
+ .templates-form .form-row .form-group {
2745
+ flex: 1;
2746
+ }
2747
+
2748
+ .templates-form .form-group {
2749
+ margin-bottom: 0.75rem;
2750
+ }
2751
+
2752
+ .templates-form label {
2753
+ display: block;
2754
+ font-size: 0.75rem;
2755
+ font-weight: 600;
2756
+ color: var(--text-secondary);
2757
+ margin-bottom: 0.3rem;
2758
+ text-transform: uppercase;
2759
+ letter-spacing: 0.04em;
2760
+ }
2761
+
2762
+ .templates-form input {
2763
+ width: 100%;
2764
+ padding: 0.5rem 0.65rem;
2765
+ border: 1px solid var(--border);
2766
+ border-radius: var(--radius-sm);
2767
+ background: var(--bg-secondary);
2768
+ color: var(--text);
2769
+ font-size: 0.85rem;
2770
+ outline: none;
2771
+ transition: border-color 0.2s;
2772
+ box-sizing: border-box;
2773
+ }
2774
+
2775
+ .templates-form input:focus {
2776
+ border-color: var(--accent);
2777
+ }
2778
+
2779
+ .templates-actions {
2780
+ margin-top: 0.75rem;
2781
+ }
2782
+
2783
+ .templates-list {
2784
+ max-height: 300px;
2785
+ overflow-y: auto;
2786
+ }
2787
+
2788
+ .templates-empty {
2789
+ text-align: center;
2790
+ color: var(--text-muted);
2791
+ padding: 2rem;
2792
+ font-size: 0.9rem;
2793
+ }
2794
+
2795
+ .template-item {
2796
+ display: flex;
2797
+ align-items: center;
2798
+ padding: 0.75rem;
2799
+ border-radius: var(--radius-sm);
2800
+ background: var(--bg-secondary);
2801
+ margin-bottom: 0.5rem;
2802
+ gap: 0.75rem;
2803
+ }
2804
+
2805
+ .template-item-info {
2806
+ flex: 1;
2807
+ min-width: 0;
2808
+ }
2809
+
2810
+ .template-item-name {
2811
+ font-weight: 600;
2812
+ color: var(--text-primary);
2813
+ margin-bottom: 0.2rem;
2814
+ }
2815
+
2816
+ .template-item-command {
2817
+ font-size: 0.8rem;
2818
+ color: var(--text-muted);
2819
+ font-family: var(--font-mono);
2820
+ white-space: nowrap;
2821
+ overflow: hidden;
2822
+ text-overflow: ellipsis;
2823
+ }
2824
+
2825
+ .template-item-group {
2826
+ font-size: 0.7rem;
2827
+ padding: 0.15rem 0.4rem;
2828
+ border-radius: 999px;
2829
+ background: rgba(139, 148, 158, 0.2);
2830
+ color: var(--text-muted);
2831
+ }
2832
+
2833
+ .template-item-actions {
2834
+ display: flex;
2835
+ gap: 0.35rem;
2836
+ }
2837
+
2838
+ .template-item-actions button {
2839
+ padding: 0.35rem 0.5rem;
2840
+ font-size: 0.7rem;
2841
+ border-radius: var(--radius-sm);
2842
+ border: 1px solid var(--border);
2843
+ background: var(--bg-primary);
2844
+ color: var(--text-secondary);
2845
+ cursor: pointer;
2846
+ transition: all 0.2s;
2847
+ }
2848
+
2849
+ .template-item-actions button:hover {
2850
+ background: var(--bg-secondary);
2851
+ color: var(--text);
2852
+ }
2853
+
2854
+ .template-item-actions button.use-btn {
2855
+ background: var(--accent);
2856
+ color: white;
2857
+ border-color: var(--accent);
2858
+ }
2859
+
2860
+ .template-item-actions button.use-btn:hover {
2861
+ background: var(--accent-hover, #3b82f6);
2862
+ }
2863
+
2864
+ .template-item-actions button.delete-btn:hover {
2865
+ border-color: var(--danger);
2866
+ color: var(--danger);
2867
+ }
2868
+
2869
+ /* History Modal */
2870
+ .history-filters {
2871
+ display: flex;
2872
+ gap: 0.75rem;
2873
+ margin-bottom: 1rem;
2874
+ }
2875
+
2876
+ .history-select {
2877
+ padding: 0.4rem 0.6rem;
2878
+ border-radius: 6px;
2879
+ border: 1px solid var(--border);
2880
+ background: var(--bg-secondary);
2881
+ color: var(--text);
2882
+ font-size: 0.85rem;
2883
+ cursor: pointer;
2884
+ }
2885
+
2886
+ .history-list {
2887
+ max-height: 400px;
2888
+ overflow-y: auto;
2889
+ }
2890
+
2891
+ .history-empty {
2892
+ text-align: center;
2893
+ color: var(--text-muted);
2894
+ padding: 2rem;
2895
+ font-size: 0.9rem;
2896
+ }
2897
+
2898
+ .history-item {
2899
+ display: flex;
2900
+ align-items: center;
2901
+ padding: 0.6rem 0.75rem;
2902
+ border-radius: var(--radius-sm);
2903
+ background: var(--bg-secondary);
2904
+ margin-bottom: 0.4rem;
2905
+ gap: 0.75rem;
2906
+ }
2907
+
2908
+ .history-item-time {
2909
+ font-size: 0.75rem;
2910
+ color: var(--text-muted);
2911
+ font-family: var(--font-mono);
2912
+ flex-shrink: 0;
2913
+ width: 85px;
2914
+ }
2915
+
2916
+ .history-item-process {
2917
+ font-weight: 600;
2918
+ color: var(--text-primary);
2919
+ flex: 1;
2920
+ min-width: 0;
2921
+ white-space: nowrap;
2922
+ overflow: hidden;
2923
+ text-overflow: ellipsis;
2924
+ }
2925
+
2926
+ .history-item-event {
2927
+ font-size: 0.75rem;
2928
+ padding: 0.2rem 0.5rem;
2929
+ border-radius: 999px;
2930
+ text-transform: uppercase;
2931
+ font-weight: 600;
2932
+ flex-shrink: 0;
2933
+ }
2934
+
2935
+ .history-item-event.start {
2936
+ background: rgba(34, 197, 94, 0.15);
2937
+ color: #22c55e;
2938
+ }
2939
+
2940
+ .history-item-event.stop {
2941
+ background: rgba(239, 68, 68, 0.15);
2942
+ color: #ef4444;
2943
+ }
2944
+
2945
+ .history-item-event.restart {
2946
+ background: rgba(251, 191, 36, 0.15);
2947
+ color: #fbbf24;
2948
+ }
2949
+
2950
+ .history-item-event.guard_on {
2951
+ background: rgba(59, 130, 246, 0.15);
2952
+ color: #3b82f6;
2953
+ }
2954
+
2955
+ .history-item-event.guard_off {
2956
+ background: rgba(139, 148, 158, 0.15);
2957
+ color: #8b949e;
2958
+ }
2959
+
2960
+ .history-item-pid {
2961
+ font-size: 0.7rem;
2962
+ color: var(--text-muted);
2963
+ font-family: var(--font-mono);
2964
+ flex-shrink: 0;
2965
+ }