@co0ontty/wand 1.17.6 → 1.18.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.
@@ -122,16 +122,19 @@
122
122
  }
123
123
 
124
124
  /* ===== PWA 独立窗口模式 ===== */
125
+ /* 顶部安全区:用 max() 保底,避免 iPad 横屏/Stage Manager 等 inset 为 0 的场景下贴顶,
126
+ 同时为 iPadOS Stage Manager 浮动控件预留视觉缓冲 */
125
127
  @media (display-mode: standalone) {
126
128
  :root {
127
129
  --safe-bottom: env(safe-area-inset-bottom, 0px);
130
+ --pwa-safe-top: max(env(safe-area-inset-top, 0px), 14px);
128
131
  }
129
132
  .app-container {
130
- --pwa-top-inset: env(safe-area-inset-top, 0px);
131
- padding-top: env(safe-area-inset-top, 0px);
133
+ --pwa-top-inset: var(--pwa-safe-top);
134
+ padding-top: var(--pwa-safe-top);
132
135
  }
133
136
  .sidebar-header {
134
- padding-top: calc(14px + env(safe-area-inset-top, 0px));
137
+ padding-top: calc(14px + var(--pwa-safe-top));
135
138
  }
136
139
  .main-content {
137
140
  padding-top: 0;
@@ -141,13 +144,14 @@
141
144
  /* iOS Safari PWA fallback (navigator.standalone adds .is-pwa via JS) */
142
145
  .is-pwa {
143
146
  --safe-bottom: env(safe-area-inset-bottom, 0px);
147
+ --pwa-safe-top: max(env(safe-area-inset-top, 0px), 14px);
144
148
  }
145
149
  .is-pwa .app-container {
146
- --pwa-top-inset: env(safe-area-inset-top, 0px);
147
- padding-top: env(safe-area-inset-top, 0px);
150
+ --pwa-top-inset: var(--pwa-safe-top);
151
+ padding-top: var(--pwa-safe-top);
148
152
  }
149
153
  .is-pwa .sidebar-header {
150
- padding-top: calc(14px + env(safe-area-inset-top, 0px));
154
+ padding-top: calc(14px + var(--pwa-safe-top));
151
155
  }
152
156
 
153
157
  /* ===== PWA 窗口控件覆盖模式 (Window Controls Overlay) ===== */
@@ -2220,12 +2224,22 @@
2220
2224
  display: flex;
2221
2225
  align-items: center;
2222
2226
  justify-content: flex-start;
2223
- padding: 4px 10px;
2227
+ padding: 6px 10px;
2224
2228
  flex-shrink: 0;
2225
- min-height: 0;
2229
+ min-height: 44px;
2226
2230
  gap: 8px;
2227
2231
  }
2228
2232
 
2233
+ /* PWA 模式额外留出顶部缓冲,避免与 iPadOS Stage Manager 等系统浮动控件视觉粘连 */
2234
+ @media (display-mode: standalone) {
2235
+ .main-header-row {
2236
+ padding-top: 10px;
2237
+ }
2238
+ }
2239
+ .is-pwa .main-header-row {
2240
+ padding-top: 10px;
2241
+ }
2242
+
2229
2243
  /* Current task indicator */
2230
2244
  .current-task {
2231
2245
  display: flex;
@@ -2603,38 +2617,66 @@
2603
2617
  .terminal-jump-bottom {
2604
2618
  position: absolute;
2605
2619
  right: 14px;
2606
- bottom: 18px;
2620
+ bottom: 16px;
2607
2621
  display: inline-flex;
2608
2622
  align-items: center;
2609
2623
  justify-content: center;
2610
- gap: 6px;
2611
- min-width: 78px;
2612
- height: 32px;
2613
- padding: 0 12px;
2614
- border: 1px solid rgba(255, 255, 255, 0.15);
2615
- border-radius: 999px;
2616
- background: rgba(24, 20, 17, 0.72);
2624
+ width: 34px;
2625
+ height: 34px;
2626
+ padding: 0;
2627
+ border: 1px solid rgba(255, 255, 255, 0.08);
2628
+ border-radius: 50%;
2629
+ background: rgba(28, 22, 18, 0.78);
2617
2630
  color: rgba(255, 247, 239, 0.92);
2618
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
2619
- backdrop-filter: blur(10px);
2631
+ box-shadow:
2632
+ 0 1px 2px rgba(0, 0, 0, 0.25),
2633
+ 0 8px 22px rgba(0, 0, 0, 0.32),
2634
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
2635
+ backdrop-filter: blur(12px);
2636
+ -webkit-backdrop-filter: blur(12px);
2620
2637
  cursor: pointer;
2621
2638
  z-index: 13;
2622
2639
  opacity: 0;
2623
- transform: translateY(12px) scale(0.92);
2640
+ transform: translateY(10px) scale(0.86);
2624
2641
  pointer-events: none;
2625
- transition: opacity 0.28s var(--ease-out-expo), transform 0.28s var(--ease-out-expo), background 0.18s ease, border-color 0.18s ease;
2642
+ transition:
2643
+ opacity 0.26s var(--ease-out-expo),
2644
+ transform 0.32s var(--ease-spring),
2645
+ background 0.18s ease,
2646
+ border-color 0.18s ease,
2647
+ box-shadow 0.2s ease;
2626
2648
  }
2627
2649
  .terminal-jump-bottom.visible {
2628
2650
  opacity: 1;
2629
2651
  transform: translateY(0) scale(1);
2630
2652
  pointer-events: auto;
2631
2653
  }
2654
+ .terminal-jump-bottom svg {
2655
+ transition: transform 0.2s var(--ease-out-expo);
2656
+ }
2632
2657
  .terminal-jump-bottom:hover {
2633
- background: rgba(38, 30, 24, 0.84);
2634
- border-color: rgba(214, 123, 82, 0.28);
2658
+ background: rgba(214, 123, 82, 0.92);
2659
+ border-color: rgba(255, 255, 255, 0.18);
2660
+ color: #fff;
2661
+ box-shadow:
2662
+ 0 1px 2px rgba(0, 0, 0, 0.28),
2663
+ 0 10px 26px rgba(184, 92, 55, 0.36),
2664
+ inset 0 1px 0 rgba(255, 255, 255, 0.18);
2665
+ }
2666
+ .terminal-jump-bottom:hover svg {
2667
+ transform: translateY(1.5px);
2635
2668
  }
2636
2669
  .terminal-jump-bottom:active {
2637
- transform: translateY(1px) scale(0.97);
2670
+ transform: translateY(0) scale(0.92);
2671
+ transition-duration: 0.08s;
2672
+ }
2673
+ .terminal-jump-bottom:focus-visible {
2674
+ outline: none;
2675
+ box-shadow:
2676
+ 0 1px 2px rgba(0, 0, 0, 0.28),
2677
+ 0 10px 26px rgba(184, 92, 55, 0.36),
2678
+ inset 0 1px 0 rgba(255, 255, 255, 0.18),
2679
+ 0 0 0 3px rgba(214, 123, 82, 0.35);
2638
2680
  }
2639
2681
 
2640
2682
  /* Terminal interactive mode indicator */
@@ -2919,76 +2961,117 @@
2919
2961
 
2920
2962
  .chat-overlay-controls {
2921
2963
  position: absolute;
2922
- top: 8px;
2923
- right: 8px;
2964
+ top: 10px;
2965
+ right: 10px;
2924
2966
  display: inline-flex;
2925
2967
  align-items: center;
2926
- gap: 6px;
2927
- padding: 2px;
2928
- border-radius: 7px;
2929
- border: 1px solid rgba(125, 91, 57, 0.12);
2930
- background: rgba(255, 250, 242, 0.72);
2931
- backdrop-filter: blur(8px);
2932
- box-shadow: 0 6px 18px rgba(89, 58, 32, 0.12);
2933
- opacity: 0.84;
2934
- transition: opacity 0.18s ease, background 0.18s ease, border-color 0.18s ease;
2935
2968
  z-index: 12;
2936
2969
  pointer-events: auto;
2970
+ opacity: 0;
2971
+ transform: translateY(-4px);
2972
+ transition: opacity 0.22s ease, transform 0.26s var(--ease-out-expo);
2937
2973
  }
2938
2974
 
2939
2975
  .chat-container:hover .chat-overlay-controls,
2940
2976
  .chat-overlay-controls:focus-within {
2941
2977
  opacity: 1;
2942
- background: rgba(255, 250, 242, 0.88);
2943
- border-color: rgba(197, 101, 61, 0.16);
2978
+ transform: translateY(0);
2944
2979
  }
2945
2980
 
2946
2981
  .chat-follow-toggle {
2947
- min-width: 52px;
2948
- padding: 0 10px;
2949
- font-size: 0.6875rem;
2950
- color: var(--text-secondary);
2951
- background: transparent;
2952
- border-color: transparent;
2982
+ display: inline-flex;
2983
+ align-items: center;
2984
+ justify-content: center;
2985
+ min-width: unset;
2986
+ padding: 6px 11px;
2987
+ color: var(--text-tertiary);
2988
+ background: rgba(255, 250, 242, 0.7);
2989
+ backdrop-filter: blur(12px);
2990
+ -webkit-backdrop-filter: blur(12px);
2991
+ border: 1px solid rgba(125, 91, 57, 0.1);
2992
+ border-radius: 999px;
2993
+ box-shadow: 0 1px 4px rgba(89, 58, 32, 0.06);
2994
+ cursor: pointer;
2995
+ transition: all 0.2s ease;
2996
+ }
2997
+
2998
+ .chat-follow-toggle svg {
2999
+ flex-shrink: 0;
3000
+ opacity: 0.7;
3001
+ transition: opacity 0.18s ease, transform 0.2s var(--ease-out-expo);
2953
3002
  }
2954
3003
 
2955
3004
  .chat-follow-toggle.active {
2956
- background: var(--accent-muted);
2957
3005
  color: var(--accent);
2958
- border-color: rgba(197, 101, 61, 0.2);
3006
+ background: rgba(255, 250, 242, 0.88);
3007
+ border-color: rgba(197, 101, 61, 0.18);
3008
+ box-shadow:
3009
+ 0 1px 4px rgba(89, 58, 32, 0.08),
3010
+ 0 0 0 1px rgba(197, 101, 61, 0.06);
3011
+ }
3012
+
3013
+ .chat-follow-toggle.active svg {
3014
+ opacity: 0.85;
3015
+ stroke: var(--accent);
2959
3016
  }
2960
3017
 
2961
3018
  .chat-follow-toggle:hover {
2962
- background: rgba(255, 255, 255, 0.7);
3019
+ color: var(--text-primary);
3020
+ background: rgba(255, 252, 248, 0.92);
3021
+ border-color: rgba(125, 91, 57, 0.16);
3022
+ box-shadow: 0 2px 8px rgba(89, 58, 32, 0.1);
3023
+ }
3024
+
3025
+ .chat-follow-toggle:hover svg {
3026
+ opacity: 0.8;
2963
3027
  }
2964
3028
 
2965
3029
  .chat-follow-toggle.active:hover {
2966
- background: rgba(197, 101, 61, 0.18);
3030
+ color: var(--accent-hover);
3031
+ background: rgba(255, 248, 240, 0.94);
3032
+ border-color: rgba(197, 101, 61, 0.24);
3033
+ box-shadow: 0 2px 8px rgba(184, 92, 55, 0.12);
3034
+ }
3035
+
3036
+ .chat-follow-toggle.active:hover svg {
3037
+ stroke: var(--accent-hover);
3038
+ transform: translateY(1px);
3039
+ }
3040
+
3041
+ .chat-follow-toggle:active {
3042
+ transform: scale(0.94);
3043
+ transition-duration: 0.06s;
2967
3044
  }
2968
3045
 
2969
3046
  .chat-jump-bottom {
2970
3047
  position: absolute;
2971
3048
  right: 14px;
2972
- bottom: 18px;
3049
+ bottom: 16px;
2973
3050
  display: inline-flex;
2974
3051
  align-items: center;
2975
3052
  justify-content: center;
2976
- gap: 6px;
2977
- min-width: 78px;
2978
- height: 32px;
2979
- padding: 0 12px;
2980
- border: 1px solid rgba(125, 91, 57, 0.16);
2981
- border-radius: 999px;
2982
- background: rgba(255, 250, 242, 0.9);
2983
- color: var(--text-primary);
2984
- box-shadow: 0 4px 12px rgba(89, 58, 32, 0.10);
2985
- backdrop-filter: blur(10px);
3053
+ width: 34px;
3054
+ height: 34px;
3055
+ padding: 0;
3056
+ border: 1px solid rgba(255, 255, 255, 0.65);
3057
+ border-radius: 50%;
3058
+ background: var(--accent);
3059
+ color: #fff;
3060
+ box-shadow:
3061
+ 0 1px 2px rgba(89, 58, 32, 0.18),
3062
+ 0 8px 22px rgba(184, 92, 55, 0.28),
3063
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
2986
3064
  cursor: pointer;
2987
3065
  z-index: 13;
2988
3066
  opacity: 0;
2989
- transform: translateY(12px) scale(0.92);
3067
+ transform: translateY(10px) scale(0.86);
2990
3068
  pointer-events: none;
2991
- transition: opacity 0.28s var(--ease-out-expo), transform 0.28s var(--ease-out-expo), background 0.18s ease, border-color 0.18s ease;
3069
+ transition:
3070
+ opacity 0.26s var(--ease-out-expo),
3071
+ transform 0.32s var(--ease-spring),
3072
+ background 0.18s ease,
3073
+ border-color 0.18s ease,
3074
+ box-shadow 0.2s ease;
2992
3075
  }
2993
3076
 
2994
3077
  .chat-jump-bottom.visible {
@@ -2997,13 +3080,36 @@
2997
3080
  pointer-events: auto;
2998
3081
  }
2999
3082
 
3083
+ .chat-jump-bottom svg {
3084
+ transition: transform 0.2s var(--ease-out-expo);
3085
+ }
3086
+
3000
3087
  .chat-jump-bottom:hover {
3001
- background: rgba(255, 255, 255, 0.98);
3002
- border-color: rgba(197, 101, 61, 0.24);
3088
+ background: var(--accent-hover);
3089
+ border-color: rgba(255, 255, 255, 0.85);
3090
+ box-shadow:
3091
+ 0 2px 4px rgba(89, 58, 32, 0.20),
3092
+ 0 12px 28px rgba(184, 92, 55, 0.38),
3093
+ inset 0 1px 0 rgba(255, 255, 255, 0.32);
3094
+ }
3095
+
3096
+ .chat-jump-bottom:hover svg {
3097
+ transform: translateY(1.5px);
3003
3098
  }
3004
3099
 
3005
3100
  .chat-jump-bottom:active {
3006
- transform: translateY(1px);
3101
+ transform: translateY(0) scale(0.92);
3102
+ background: var(--accent-active);
3103
+ transition-duration: 0.08s;
3104
+ }
3105
+
3106
+ .chat-jump-bottom:focus-visible {
3107
+ outline: none;
3108
+ box-shadow:
3109
+ 0 2px 4px rgba(89, 58, 32, 0.20),
3110
+ 0 12px 28px rgba(184, 92, 55, 0.38),
3111
+ inset 0 1px 0 rgba(255, 255, 255, 0.32),
3112
+ 0 0 0 3px rgba(197, 101, 61, 0.32);
3007
3113
  }
3008
3114
 
3009
3115
  .chat-container.active { display: flex; }
@@ -6720,12 +6826,11 @@
6720
6826
  /* 回到底部按钮 - 紧凑 */
6721
6827
  .terminal-jump-bottom,
6722
6828
  .chat-jump-bottom {
6723
- height: 28px;
6724
- min-width: 64px;
6725
- padding: 0 10px;
6726
- font-size: 0.6875rem;
6829
+ width: 32px;
6830
+ height: 32px;
6831
+ padding: 0;
6727
6832
  right: 10px;
6728
- bottom: 14px;
6833
+ bottom: 12px;
6729
6834
  }
6730
6835
 
6731
6836
  /* 小键盘 FAB */
@@ -8057,6 +8162,7 @@
8057
8162
  padding-top: 16px;
8058
8163
  background: linear-gradient(180deg, rgba(255, 251, 245, 0), rgba(255, 251, 245, 0.98) 28px);
8059
8164
  z-index: 1;
8165
+ justify-content: flex-end;
8060
8166
  }
8061
8167
 
8062
8168
  .settings-status-message {
@@ -9760,4 +9866,377 @@
9760
9866
  opacity: 1;
9761
9867
  }
9762
9868
 
9869
+ /* ============================================================ */
9870
+ /* Settings v2 — refined sections, file picker, toggle rows */
9871
+ /* ============================================================ */
9872
+
9873
+ /* 卡片头部(修改密码 / SSL 证书等) */
9874
+ .settings-card-head {
9875
+ display: flex;
9876
+ align-items: flex-start;
9877
+ gap: 12px;
9878
+ margin-bottom: 14px;
9879
+ }
9880
+ .settings-card-icon {
9881
+ flex: 0 0 auto;
9882
+ width: 36px;
9883
+ height: 36px;
9884
+ display: inline-flex;
9885
+ align-items: center;
9886
+ justify-content: center;
9887
+ border-radius: 10px;
9888
+ background: linear-gradient(135deg, rgba(197, 101, 61, 0.18), rgba(197, 101, 61, 0.06));
9889
+ color: var(--accent);
9890
+ font-size: 18px;
9891
+ box-shadow: inset 0 0 0 1px rgba(197, 101, 61, 0.18);
9892
+ }
9893
+ .settings-card-head-text {
9894
+ flex: 1;
9895
+ min-width: 0;
9896
+ display: flex;
9897
+ flex-direction: column;
9898
+ gap: 2px;
9899
+ }
9900
+ .settings-card-title {
9901
+ font-size: 0.9375rem;
9902
+ font-weight: 700;
9903
+ color: var(--text-primary);
9904
+ letter-spacing: 0.005em;
9905
+ line-height: 1.3;
9906
+ margin: 0;
9907
+ }
9908
+ .settings-card-desc {
9909
+ font-size: 0.75rem;
9910
+ color: var(--text-muted);
9911
+ line-height: 1.5;
9912
+ margin: 0;
9913
+ }
9914
+ .settings-card-actions {
9915
+ display: flex;
9916
+ justify-content: flex-end;
9917
+ align-items: center;
9918
+ gap: 10px;
9919
+ margin-top: 6px;
9920
+ }
9921
+ .settings-card-actions .btn {
9922
+ min-width: 120px;
9923
+ }
9924
+ .settings-success-message {
9925
+ color: var(--success);
9926
+ }
9927
+
9928
+ /* 区块头(关于 / 通知 tab 内的小段标题) */
9929
+ .settings-section-head {
9930
+ display: flex;
9931
+ align-items: flex-start;
9932
+ gap: 10px;
9933
+ margin-bottom: 12px;
9934
+ }
9935
+ .settings-section-icon {
9936
+ flex: 0 0 auto;
9937
+ width: 28px;
9938
+ height: 28px;
9939
+ display: inline-flex;
9940
+ align-items: center;
9941
+ justify-content: center;
9942
+ border-radius: 8px;
9943
+ background: rgba(197, 101, 61, 0.10);
9944
+ font-size: 14px;
9945
+ }
9946
+ .settings-section-head-text {
9947
+ flex: 1;
9948
+ min-width: 0;
9949
+ display: flex;
9950
+ flex-direction: column;
9951
+ gap: 2px;
9952
+ }
9953
+ .settings-section-heading {
9954
+ font-size: 0.875rem;
9955
+ font-weight: 700;
9956
+ color: var(--text-primary);
9957
+ letter-spacing: 0.005em;
9958
+ line-height: 1.3;
9959
+ margin: 0;
9960
+ }
9961
+ .settings-section-sub {
9962
+ font-size: 0.72rem;
9963
+ color: var(--text-muted);
9964
+ line-height: 1.5;
9965
+ margin: 0;
9966
+ }
9967
+
9968
+ /* Toggle 行(描述在左、开关在右) */
9969
+ .settings-toggle-row {
9970
+ display: flex;
9971
+ align-items: center;
9972
+ justify-content: space-between;
9973
+ gap: 14px;
9974
+ padding: 12px 14px;
9975
+ border-radius: 12px;
9976
+ background: rgba(255, 255, 255, 0.55);
9977
+ border: 1px solid rgba(125, 91, 57, 0.10);
9978
+ margin-top: 10px;
9979
+ }
9980
+ .settings-toggle-row + .settings-toggle-row,
9981
+ .settings-toggle-row + .settings-range-row,
9982
+ .settings-range-row + .settings-toggle-row {
9983
+ margin-top: 8px;
9984
+ }
9985
+ .settings-toggle-text {
9986
+ flex: 1;
9987
+ min-width: 0;
9988
+ display: flex;
9989
+ flex-direction: column;
9990
+ gap: 3px;
9991
+ }
9992
+ .settings-toggle-title {
9993
+ font-size: 0.8125rem;
9994
+ font-weight: 600;
9995
+ color: var(--text-primary);
9996
+ cursor: pointer;
9997
+ }
9998
+ .settings-toggle-desc {
9999
+ font-size: 0.72rem;
10000
+ color: var(--text-muted);
10001
+ line-height: 1.5;
10002
+ }
10003
+ .settings-switch {
10004
+ position: relative;
10005
+ flex: 0 0 auto;
10006
+ cursor: pointer;
10007
+ display: inline-block;
10008
+ }
10009
+
10010
+ /* Range 行(音量等) */
10011
+ .settings-range-row {
10012
+ display: flex;
10013
+ align-items: center;
10014
+ gap: 12px;
10015
+ padding: 12px 14px;
10016
+ border-radius: 12px;
10017
+ background: rgba(255, 255, 255, 0.55);
10018
+ border: 1px solid rgba(125, 91, 57, 0.10);
10019
+ margin-top: 8px;
10020
+ }
10021
+ .settings-range-label {
10022
+ font-size: 0.8125rem;
10023
+ font-weight: 600;
10024
+ color: var(--text-primary);
10025
+ flex: 0 0 auto;
10026
+ margin-bottom: 0;
10027
+ }
10028
+ .settings-range {
10029
+ flex: 1;
10030
+ min-width: 0;
10031
+ accent-color: var(--accent);
10032
+ }
10033
+ .settings-range-value {
10034
+ flex: 0 0 36px;
10035
+ text-align: right;
10036
+ font-size: 0.75rem;
10037
+ color: var(--text-secondary);
10038
+ font-variant-numeric: tabular-nums;
10039
+ }
10040
+
10041
+ /* 行内带操作的字段(select + 刷新等) */
10042
+ .settings-row-with-action {
10043
+ display: flex;
10044
+ gap: 8px;
10045
+ align-items: stretch;
10046
+ }
10047
+ .settings-row-with-action > .field-input,
10048
+ .settings-row-with-action > .field-select,
10049
+ .settings-row-with-action > select {
10050
+ flex: 1;
10051
+ min-width: 0;
10052
+ }
10053
+ .settings-row-with-action > .btn {
10054
+ flex-shrink: 0;
10055
+ }
10056
+
10057
+ /* settings-about-row 加按钮的变体 */
10058
+ .settings-about-row-action {
10059
+ flex-wrap: nowrap;
10060
+ }
10061
+ .settings-value-flex {
10062
+ flex: 1;
10063
+ text-align: right;
10064
+ }
10065
+
10066
+ /* ===== File picker ===== */
10067
+ .file-picker {
10068
+ position: relative;
10069
+ display: flex;
10070
+ align-items: center;
10071
+ gap: 12px;
10072
+ padding: 6px 12px 6px 6px;
10073
+ background: rgba(255, 255, 255, 0.72);
10074
+ border: 1px dashed rgba(125, 91, 57, 0.25);
10075
+ border-radius: 12px;
10076
+ transition: border-color 0.18s, background 0.18s;
10077
+ }
10078
+ .file-picker:hover {
10079
+ border-color: var(--accent-soft, rgba(197, 101, 61, 0.45));
10080
+ background: rgba(255, 255, 255, 0.9);
10081
+ }
10082
+ .file-picker.file-picker-has-file {
10083
+ border-style: solid;
10084
+ border-color: rgba(197, 101, 61, 0.35);
10085
+ background: linear-gradient(135deg, rgba(197, 101, 61, 0.08), rgba(255, 255, 255, 0.85));
10086
+ }
10087
+ .file-picker-input {
10088
+ position: absolute;
10089
+ width: 1px;
10090
+ height: 1px;
10091
+ opacity: 0;
10092
+ pointer-events: none;
10093
+ }
10094
+ .file-picker-trigger {
10095
+ display: inline-flex;
10096
+ align-items: center;
10097
+ gap: 6px;
10098
+ padding: 8px 14px;
10099
+ background: linear-gradient(135deg, var(--accent), color-mix(in srgb, var(--accent) 80%, #000 0%));
10100
+ color: #fff;
10101
+ font-size: 0.8125rem;
10102
+ font-weight: 600;
10103
+ border-radius: 9px;
10104
+ cursor: pointer;
10105
+ flex-shrink: 0;
10106
+ transition: filter 0.15s, transform 0.15s, box-shadow 0.15s;
10107
+ box-shadow: var(--shadow-xs);
10108
+ user-select: none;
10109
+ }
10110
+ .file-picker-trigger:hover {
10111
+ filter: brightness(1.05);
10112
+ transform: translateY(-1px);
10113
+ box-shadow: var(--shadow-sm);
10114
+ }
10115
+ .file-picker-trigger:active {
10116
+ transform: translateY(0);
10117
+ }
10118
+ .file-picker-input:focus-visible + .file-picker-trigger {
10119
+ outline: 2px solid var(--accent);
10120
+ outline-offset: 2px;
10121
+ }
10122
+ .file-picker-icon {
10123
+ width: 16px;
10124
+ height: 16px;
10125
+ flex-shrink: 0;
10126
+ }
10127
+ .file-picker-label {
10128
+ white-space: nowrap;
10129
+ }
10130
+ .file-picker-name {
10131
+ flex: 1;
10132
+ min-width: 0;
10133
+ font-size: 0.8125rem;
10134
+ color: var(--text-muted);
10135
+ overflow: hidden;
10136
+ text-overflow: ellipsis;
10137
+ white-space: nowrap;
10138
+ font-family: var(--font-mono);
10139
+ }
10140
+ .file-picker.file-picker-has-file .file-picker-name {
10141
+ color: var(--text-primary);
10142
+ font-weight: 500;
10143
+ }
10144
+
10145
+ /* ===== App icon picker (general tab) ===== */
10146
+ .settings-app-icon-block {
10147
+ margin-bottom: 18px;
10148
+ }
10149
+ .settings-app-icon-picker {
10150
+ display: flex;
10151
+ gap: 12px;
10152
+ flex-wrap: wrap;
10153
+ }
10154
+ .settings-app-icon-option {
10155
+ display: flex;
10156
+ flex-direction: column;
10157
+ align-items: center;
10158
+ gap: 6px;
10159
+ padding: 10px;
10160
+ border-radius: 14px;
10161
+ background: rgba(255, 255, 255, 0.55);
10162
+ border: 1px solid rgba(125, 91, 57, 0.12);
10163
+ cursor: pointer;
10164
+ transition: border-color 0.18s, background 0.18s, transform 0.18s, box-shadow 0.18s;
10165
+ min-width: 84px;
10166
+ }
10167
+ .settings-app-icon-option:hover {
10168
+ transform: translateY(-1px);
10169
+ border-color: rgba(197, 101, 61, 0.30);
10170
+ background: rgba(255, 255, 255, 0.78);
10171
+ box-shadow: var(--shadow-xs);
10172
+ }
10173
+ .settings-app-icon-option.selected,
10174
+ .settings-app-icon-option[aria-pressed="true"] {
10175
+ border-color: var(--accent);
10176
+ background: linear-gradient(135deg, rgba(197, 101, 61, 0.14), rgba(197, 101, 61, 0.04));
10177
+ box-shadow: inset 0 0 0 1px rgba(197, 101, 61, 0.20);
10178
+ }
10179
+ .settings-app-icon-preview {
10180
+ width: 56px;
10181
+ height: 56px;
10182
+ border-radius: 12px;
10183
+ overflow: hidden;
10184
+ background: var(--bg-tertiary);
10185
+ display: flex;
10186
+ align-items: center;
10187
+ justify-content: center;
10188
+ }
10189
+ .settings-app-icon-label {
10190
+ font-size: 0.72rem;
10191
+ color: var(--text-secondary);
10192
+ font-weight: 500;
10193
+ }
10194
+
10195
+ /* ===== Connect URL box refinements ===== */
10196
+ .settings-connect-url-text {
10197
+ font-family: var(--font-mono, monospace);
10198
+ font-size: 12px;
10199
+ color: var(--text-primary);
10200
+ word-break: break-all;
10201
+ user-select: all;
10202
+ -webkit-user-select: all;
10203
+ }
10204
+
10205
+ /* ===== Mobile tweaks ===== */
10206
+ @media (max-width: 640px) {
10207
+ .settings-toggle-row,
10208
+ .settings-range-row {
10209
+ padding: 10px 12px;
10210
+ }
10211
+ .settings-toggle-row {
10212
+ flex-wrap: wrap;
10213
+ }
10214
+ .settings-card-actions {
10215
+ justify-content: stretch;
10216
+ }
10217
+ .settings-card-actions .btn {
10218
+ flex: 1;
10219
+ min-width: 0;
10220
+ }
10221
+ .file-picker {
10222
+ flex-wrap: wrap;
10223
+ padding: 8px;
10224
+ }
10225
+ .file-picker-trigger {
10226
+ flex: 1 1 auto;
10227
+ justify-content: center;
10228
+ }
10229
+ .file-picker-name {
10230
+ flex: 1 1 100%;
10231
+ text-align: center;
10232
+ padding: 0 4px;
10233
+ }
10234
+ .settings-row-with-action {
10235
+ flex-wrap: wrap;
10236
+ }
10237
+ .settings-row-with-action > .btn {
10238
+ flex: 1;
10239
+ }
10240
+ }
10241
+
9763
10242
  /* 结束标记 */