@co0ontty/wand 1.21.4 → 1.21.7

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.
@@ -890,88 +890,9 @@
890
890
  .session-group { margin-bottom: 20px; }
891
891
  .session-group:last-child { margin-bottom: 0; }
892
892
 
893
- .session-manage-bar {
894
- display: flex;
895
- align-items: center;
896
- justify-content: space-between;
897
- margin-bottom: 12px;
898
- padding: 6px 8px;
899
- border-radius: var(--radius-sm);
900
- background: rgba(150, 118, 85, 0.04);
901
- transition: all var(--transition-fast);
902
- }
903
-
904
- .session-manage-bar:hover {
905
- background: rgba(150, 118, 85, 0.07);
906
- }
907
-
908
- .session-manage-bar.active {
909
- flex-direction: column;
910
- align-items: stretch;
911
- gap: 8px;
912
- padding: 10px 12px;
913
- border: 1px solid var(--border-subtle);
914
- border-radius: var(--radius-md);
915
- background: var(--bg-surface);
916
- }
917
-
918
- .session-manage-summary {
919
- font-size: 0.75rem;
920
- color: var(--text-secondary);
921
- font-weight: 600;
922
- }
923
-
924
- .session-manage-actions {
925
- display: flex;
926
- flex-wrap: wrap;
927
- gap: 8px;
928
- }
929
-
930
- .session-manage-toggle {
931
- border: 1px solid rgba(197, 101, 61, 0.15);
932
- background: rgba(197, 101, 61, 0.05);
933
- color: var(--accent);
934
- border-radius: var(--radius-md);
935
- padding: 6px 10px;
936
- font-size: 0.75rem;
937
- font-weight: 600;
938
- cursor: pointer;
939
- transition: all var(--transition-fast);
940
- }
941
-
942
- .session-manage-toggle:hover {
943
- background: rgba(197, 101, 61, 0.12);
944
- border-color: rgba(197, 101, 61, 0.25);
945
- }
946
-
947
- .session-manage-btn {
948
- border: 1px solid var(--border-subtle);
949
- background: var(--bg-surface);
950
- color: var(--text-primary);
951
- border-radius: var(--radius-md);
952
- padding: 6px 10px;
953
- font-size: 0.75rem;
954
- font-weight: 600;
955
- cursor: pointer;
956
- }
957
-
958
- .session-manage-btn.compact {
959
- padding: 4px 8px;
960
- font-size: 0.6875rem;
961
- margin-left: 8px;
962
- }
963
-
964
- .session-manage-btn.danger,
965
- .session-manage-toggle.danger {
966
- color: #c84636;
967
- border-color: rgba(200, 70, 54, 0.25);
968
- background: rgba(200, 70, 54, 0.06);
969
- }
970
-
971
- .session-manage-btn:disabled {
972
- opacity: 0.45;
973
- cursor: not-allowed;
974
- }
893
+ /* Legacy .session-manage-bar / .session-manage-toggle / .session-manage-btn
894
+ styles removed — toolbar is now built from .btn variants and styled in
895
+ the "Liquid Glass — sidebar" section below. */
975
896
 
976
897
  .session-group-title {
977
898
  padding: 8px 8px 12px;
@@ -1439,17 +1360,7 @@
1439
1360
  font-family: inherit;
1440
1361
  }
1441
1362
 
1442
- .worktree-merge-actions .btn-secondary {
1443
- background: transparent;
1444
- }
1445
-
1446
- .worktree-merge-actions .btn-secondary:hover {
1447
- background: rgba(0, 0, 0, 0.04);
1448
- }
1449
-
1450
- .worktree-merge-actions .btn-secondary:active {
1451
- background: rgba(0, 0, 0, 0.07);
1452
- }
1363
+ /* worktree-merge cancel button uses the global .btn-secondary look */
1453
1364
 
1454
1365
  .worktree-merge-content .field-hint:last-child {
1455
1366
  margin-bottom: 0;
@@ -2043,172 +1954,239 @@
2043
1954
  }
2044
1955
 
2045
1956
  /* ===== 通用按钮组件 ===== */
1957
+ /* ============================================================ */
1958
+ /* ── Button system (shadcn/ui-inspired, warm palette) ── */
1959
+ /* Variants: primary (CTA) · secondary (utility filled) */
1960
+ /* ghost (toolbar/text) · outline (hairline) */
1961
+ /* danger (destructive) · success (positive done) */
1962
+ /* Sizes: xs · sm (default in toolbars) · md (default) */
1963
+ /* lg (major CTAs) */
1964
+ /* ============================================================ */
1965
+
2046
1966
  .btn {
2047
1967
  display: inline-flex;
2048
1968
  align-items: center;
2049
1969
  justify-content: center;
2050
- gap: 8px;
1970
+ gap: 6px;
2051
1971
  font-family: var(--font-sans);
2052
1972
  font-size: 0.875rem;
2053
- font-weight: 500;
2054
- padding: 10px 18px;
2055
- border-radius: var(--radius-md);
1973
+ font-weight: 600;
1974
+ letter-spacing: -0.005em;
1975
+ padding: 0 16px;
1976
+ height: 38px;
1977
+ min-height: 38px;
1978
+ border-radius: 10px;
2056
1979
  border: 1px solid transparent;
2057
1980
  cursor: pointer;
2058
- transition: all 0.25s var(--ease-out-expo);
2059
- min-height: 42px;
2060
1981
  white-space: nowrap;
2061
1982
  position: relative;
2062
- overflow: hidden;
1983
+ user-select: none;
1984
+ transition:
1985
+ background-color 0.15s ease,
1986
+ border-color 0.15s ease,
1987
+ color 0.15s ease,
1988
+ box-shadow 0.18s ease,
1989
+ transform 0.18s cubic-bezier(0.34, 1.4, 0.64, 1);
1990
+ -webkit-tap-highlight-color: transparent;
2063
1991
  }
2064
1992
 
2065
- .btn::before {
2066
- content: '';
2067
- position: absolute;
2068
- inset: 0;
2069
- background: radial-gradient(circle at center, rgba(255,255,255,0.4) 0%, transparent 70%);
2070
- opacity: 0;
2071
- transform: scale(0);
2072
- transition: transform 0.5s ease, opacity 0.3s ease;
2073
- border-radius: inherit;
1993
+ .btn:focus { outline: none; }
1994
+ .btn:focus-visible {
1995
+ outline: none;
1996
+ box-shadow:
1997
+ 0 0 0 2px var(--bg-primary),
1998
+ 0 0 0 4px var(--accent);
2074
1999
  }
2075
2000
 
2076
- .btn:active::before {
2077
- opacity: 1;
2078
- transform: scale(2.5);
2079
- transition-duration: 0s;
2001
+ .btn:disabled,
2002
+ .btn[disabled] {
2003
+ opacity: 0.45;
2004
+ cursor: not-allowed;
2005
+ pointer-events: none;
2006
+ transform: none !important;
2007
+ box-shadow: none !important;
2080
2008
  }
2081
2009
 
2082
- /* ----- 主要按钮 ----- */
2010
+ /* ── Primary: solid accent CTA (gradient + soft shadow) ── */
2083
2011
  .btn-primary {
2084
- background: linear-gradient(135deg, var(--accent) 0%, var(--accent-hover) 100%);
2012
+ background: linear-gradient(180deg, var(--accent-hover) 0%, var(--accent) 100%);
2085
2013
  color: var(--text-inverse);
2086
- box-shadow: 0 4px 14px rgba(197, 101, 61, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.15);
2014
+ box-shadow:
2015
+ 0 1px 2px rgba(197, 101, 61, 0.32),
2016
+ 0 4px 10px -2px rgba(197, 101, 61, 0.32),
2017
+ inset 0 1px 0 rgba(255, 255, 255, 0.22),
2018
+ inset 0 -1px 0 rgba(89, 58, 32, 0.18);
2087
2019
  }
2088
-
2089
2020
  .btn-primary:hover {
2090
- background: linear-gradient(135deg, var(--accent-hover) 0%, #c96b44 100%);
2091
- transform: translateY(-2px) scale(1.02);
2092
- box-shadow: 0 8px 24px rgba(197, 101, 61, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.2);
2021
+ background: linear-gradient(180deg, #d6855e 0%, var(--accent-hover) 100%);
2022
+ transform: translateY(-1px);
2023
+ box-shadow:
2024
+ 0 2px 4px rgba(197, 101, 61, 0.32),
2025
+ 0 8px 20px -4px rgba(197, 101, 61, 0.4),
2026
+ inset 0 1px 0 rgba(255, 255, 255, 0.28),
2027
+ inset 0 -1px 0 rgba(89, 58, 32, 0.18);
2093
2028
  }
2094
-
2095
2029
  .btn-primary:active {
2096
- transform: translateY(0) scale(0.98);
2097
- box-shadow: 0 2px 10px rgba(197, 101, 61, 0.2);
2098
- transition-duration: 0.1s;
2099
- }
2100
-
2101
- .btn-primary:focus-visible {
2102
- outline: 2px solid var(--accent);
2103
- outline-offset: 3px;
2030
+ transform: translateY(0);
2031
+ background: linear-gradient(180deg, var(--accent) 0%, var(--accent-active) 100%);
2032
+ box-shadow:
2033
+ 0 1px 2px rgba(197, 101, 61, 0.28),
2034
+ inset 0 1px 0 rgba(89, 58, 32, 0.18);
2035
+ transition-duration: 0.06s;
2104
2036
  }
2105
2037
 
2106
- /* ----- 次要按钮 ----- */
2038
+ /* ── Secondary: soft tinted fill (utility actions) ── */
2107
2039
  .btn-secondary {
2108
- background: var(--bg-surface);
2109
- color: var(--text-secondary);
2110
- border-color: var(--border-default);
2111
- box-shadow: var(--shadow-xs);
2040
+ background: rgba(125, 91, 57, 0.08);
2041
+ color: var(--text-primary);
2042
+ border-color: transparent;
2112
2043
  }
2113
-
2114
2044
  .btn-secondary:hover {
2115
- background: var(--bg-elevated);
2045
+ background: rgba(125, 91, 57, 0.14);
2116
2046
  color: var(--text-primary);
2117
- border-color: var(--accent-soft);
2118
- transform: translateY(-1px);
2119
- box-shadow: var(--shadow-sm);
2120
2047
  }
2121
-
2122
2048
  .btn-secondary:active {
2123
- transform: translateY(0);
2124
- transition-duration: 0.1s;
2049
+ background: rgba(125, 91, 57, 0.2);
2050
+ transition-duration: 0.06s;
2125
2051
  }
2126
2052
 
2127
- .btn-secondary:focus-visible {
2128
- outline: 2px solid var(--accent);
2129
- outline-offset: 3px;
2053
+ /* ── Outline: hairline border, transparent fill ── */
2054
+ .btn-outline {
2055
+ background: transparent;
2056
+ color: var(--text-primary);
2057
+ border-color: rgba(125, 91, 57, 0.2);
2058
+ }
2059
+ .btn-outline:hover {
2060
+ background: rgba(125, 91, 57, 0.06);
2061
+ border-color: rgba(125, 91, 57, 0.32);
2062
+ }
2063
+ .btn-outline:active {
2064
+ background: rgba(125, 91, 57, 0.12);
2065
+ transition-duration: 0.06s;
2130
2066
  }
2131
2067
 
2132
- /* ----- 幽灵按钮 ----- */
2068
+ /* ── Ghost: transparent, hover-revealed (toolbars / text actions) ── */
2133
2069
  .btn-ghost {
2134
2070
  background: transparent;
2135
2071
  color: var(--text-secondary);
2136
2072
  border-color: transparent;
2137
- box-shadow: none;
2138
2073
  }
2139
-
2140
2074
  .btn-ghost:hover {
2141
- background: var(--bg-tertiary);
2075
+ background: rgba(125, 91, 57, 0.08);
2142
2076
  color: var(--text-primary);
2143
- transform: translateY(-1px);
2144
2077
  }
2145
-
2146
2078
  .btn-ghost:active {
2147
- background: var(--bg-tertiary);
2148
- transform: translateY(0);
2149
- transition-duration: 0.1s;
2150
- }
2151
-
2152
- .btn-ghost:focus-visible {
2153
- outline: 2px solid var(--text-tertiary);
2154
- outline-offset: 3px;
2079
+ background: rgba(125, 91, 57, 0.14);
2080
+ transition-duration: 0.06s;
2155
2081
  }
2156
2082
 
2157
- /* ----- 危险按钮 ----- */
2083
+ /* ── Danger: soft red ghost-fill, hover deepens ── */
2158
2084
  .btn-danger {
2159
- background: var(--danger-muted);
2085
+ background: rgba(178, 79, 69, 0.08);
2160
2086
  color: var(--danger);
2161
2087
  border-color: transparent;
2162
2088
  }
2163
-
2164
2089
  .btn-danger:hover {
2165
- background: var(--danger);
2090
+ background: rgba(178, 79, 69, 0.16);
2091
+ color: var(--danger);
2092
+ }
2093
+ .btn-danger:active {
2094
+ background: rgba(178, 79, 69, 0.24);
2095
+ transition-duration: 0.06s;
2096
+ }
2097
+ .btn-danger.btn-danger-solid {
2098
+ background: linear-gradient(180deg, var(--danger-hover) 0%, var(--danger) 100%);
2166
2099
  color: var(--text-inverse);
2100
+ box-shadow:
2101
+ 0 1px 2px rgba(178, 79, 69, 0.32),
2102
+ 0 4px 10px -2px rgba(178, 79, 69, 0.32),
2103
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
2104
+ }
2105
+ .btn-danger.btn-danger-solid:hover {
2106
+ background: linear-gradient(180deg, #c4655a 0%, var(--danger-hover) 100%);
2167
2107
  transform: translateY(-1px);
2168
- box-shadow: 0 4px 14px rgba(178, 79, 69, 0.3);
2169
2108
  }
2170
-
2171
- .btn-danger:active {
2172
- transform: translateY(0);
2173
- transition-duration: 0.1s;
2109
+ .btn-danger:focus-visible {
2110
+ box-shadow:
2111
+ 0 0 0 2px var(--bg-primary),
2112
+ 0 0 0 4px var(--danger);
2174
2113
  }
2175
2114
 
2176
- .btn-danger:focus-visible {
2177
- outline: 2px solid var(--danger);
2178
- outline-offset: 3px;
2115
+ /* ── Success: soft green ── */
2116
+ .btn-success {
2117
+ background: rgba(79, 122, 88, 0.1);
2118
+ color: var(--success);
2119
+ border-color: transparent;
2120
+ }
2121
+ .btn-success:hover {
2122
+ background: rgba(79, 122, 88, 0.18);
2123
+ color: var(--success);
2124
+ }
2125
+ .btn-success:active {
2126
+ background: rgba(79, 122, 88, 0.26);
2127
+ transition-duration: 0.06s;
2128
+ }
2129
+ .btn-success:focus-visible {
2130
+ box-shadow:
2131
+ 0 0 0 2px var(--bg-primary),
2132
+ 0 0 0 4px var(--success);
2179
2133
  }
2180
2134
 
2181
- /* ----- 按钮尺寸变体 ----- */
2135
+ /* ── Sizes ── */
2182
2136
  .btn-block { width: 100%; }
2183
2137
 
2138
+ .btn-xs {
2139
+ height: 26px;
2140
+ min-height: 26px;
2141
+ padding: 0 10px;
2142
+ font-size: 0.75rem;
2143
+ border-radius: 7px;
2144
+ gap: 4px;
2145
+ }
2184
2146
  .btn-sm {
2147
+ height: 32px;
2148
+ min-height: 32px;
2149
+ padding: 0 12px;
2185
2150
  font-size: 0.8125rem;
2186
- padding: 6px 12px;
2187
- min-height: 34px;
2151
+ border-radius: 8px;
2152
+ gap: 5px;
2188
2153
  }
2189
-
2190
2154
  .btn-lg {
2155
+ height: 46px;
2156
+ min-height: 46px;
2157
+ padding: 0 22px;
2191
2158
  font-size: 0.9375rem;
2192
- padding: 12px 24px;
2193
- min-height: 48px;
2159
+ border-radius: 12px;
2160
+ gap: 8px;
2194
2161
  }
2195
2162
 
2163
+ /* ── Icon-only square button ── */
2196
2164
  .btn-icon {
2197
2165
  padding: 0;
2166
+ width: 36px;
2198
2167
  min-width: 36px;
2168
+ height: 36px;
2199
2169
  min-height: 36px;
2200
- border-radius: var(--radius-sm);
2170
+ border-radius: 8px;
2171
+ gap: 0;
2201
2172
  }
2202
-
2203
- .btn-icon.sm {
2204
- min-width: 28px;
2205
- min-height: 28px;
2173
+ .btn-icon.sm,
2174
+ .btn-icon.btn-sm {
2175
+ width: 30px;
2176
+ min-width: 30px;
2177
+ height: 30px;
2178
+ min-height: 30px;
2179
+ border-radius: 7px;
2206
2180
  }
2207
-
2208
- .btn-icon.lg {
2209
- min-width: 44px;
2210
- min-height: 44px;
2181
+ .btn-icon.lg,
2182
+ .btn-icon.btn-lg {
2183
+ width: 42px;
2184
+ min-width: 42px;
2185
+ height: 42px;
2186
+ min-height: 42px;
2187
+ border-radius: 10px;
2211
2188
  }
2189
+ .btn-icon svg { flex-shrink: 0; }
2212
2190
 
2213
2191
  .main-content {
2214
2192
  flex: 1;
@@ -6553,66 +6531,1200 @@
6553
6531
  }
6554
6532
  .field-input::placeholder { color: var(--text-muted); }
6555
6533
 
6534
+ /* ============================================================ */
6535
+ /* ── Liquid Glass dialog system ── */
6536
+ /* The MODAL itself is the glass. Internal elements stay flat, */
6537
+ /* clean, opaque-feeling — content sits ON the glass, not */
6538
+ /* INSIDE more glass. */
6539
+ /* ============================================================ */
6540
+
6556
6541
  .modal-backdrop {
6557
6542
  position: fixed;
6558
6543
  inset: 0;
6559
6544
  z-index: 500;
6560
- background: rgba(42, 28, 18, 0.52);
6561
- backdrop-filter: blur(12px);
6562
- -webkit-backdrop-filter: blur(12px);
6545
+ /* Quiet dark wash so the page beneath fades back. No warm tint
6546
+ here — the modal carries the warmth, the backdrop just dims */
6547
+ background: rgba(20, 14, 8, 0.34);
6548
+ backdrop-filter: blur(18px) saturate(140%);
6549
+ -webkit-backdrop-filter: blur(18px) saturate(140%);
6563
6550
  display: flex;
6564
6551
  align-items: center;
6565
6552
  justify-content: center;
6566
- padding: 24px;
6567
- animation: modalFadeIn 0.2s ease;
6553
+ padding: 32px;
6554
+ animation: liquidBackdropIn 0.28s var(--ease-out-expo, cubic-bezier(0.16, 1, 0.3, 1)) both;
6555
+ }
6556
+
6557
+ .modal-backdrop.closing {
6558
+ animation: liquidBackdropOut 0.18s var(--ease-in-out-smooth, cubic-bezier(0.4, 0, 0.2, 1)) both;
6559
+ pointer-events: none;
6568
6560
  }
6569
6561
 
6570
- @keyframes modalFadeIn {
6562
+ @keyframes liquidBackdropIn {
6571
6563
  from { opacity: 0; }
6572
- to { opacity: 1; }
6564
+ to { opacity: 1; }
6565
+ }
6566
+ @keyframes liquidBackdropOut {
6567
+ from { opacity: 1; }
6568
+ to { opacity: 0; }
6573
6569
  }
6574
6570
 
6575
6571
  .modal {
6572
+ position: relative;
6576
6573
  width: 100%;
6577
- max-width: 540px;
6578
- max-height: 90vh;
6574
+ max-width: 560px;
6575
+ max-height: 88vh;
6579
6576
  display: flex;
6580
6577
  flex-direction: column;
6581
- background: rgba(255, 251, 245, 0.98);
6582
- border: 1px solid rgba(150, 118, 85, 0.22);
6583
- border-radius: 20px;
6578
+ /* The actual glass material — single translucent layer, heavily
6579
+ blurred. NO ::before sheen, NO multi-layer rim lights. Just a
6580
+ clean piece of frosted glass. */
6581
+ background: rgba(255, 252, 247, 0.74);
6582
+ border: 0.5px solid rgba(255, 255, 255, 0.6);
6583
+ border-radius: 26px;
6584
6584
  overflow: hidden;
6585
- box-shadow: 0 32px 64px rgba(89, 58, 32, 0.18), 0 4px 16px rgba(89, 58, 32, 0.08);
6586
- animation: modalSlideIn 0.22s cubic-bezier(0.34, 1.3, 0.64, 1);
6585
+ backdrop-filter: blur(40px) saturate(180%);
6586
+ -webkit-backdrop-filter: blur(40px) saturate(180%);
6587
+ /* One large soft drop shadow + a single hairline rim. That's it. */
6588
+ box-shadow:
6589
+ 0 32px 80px -16px rgba(20, 14, 8, 0.34),
6590
+ 0 8px 24px -8px rgba(20, 14, 8, 0.18),
6591
+ 0 0 0 0.5px rgba(125, 91, 57, 0.08),
6592
+ inset 0 1px 0 rgba(255, 255, 255, 0.7);
6593
+ animation: liquidModalIn 0.32s cubic-bezier(0.34, 1.4, 0.64, 1) both;
6587
6594
  }
6588
6595
 
6589
- @keyframes modalSlideIn {
6590
- from { opacity: 0; transform: scale(0.94) translateY(12px); }
6591
- to { opacity: 1; transform: scale(1) translateY(0); }
6596
+ .modal-backdrop.closing .modal {
6597
+ animation: liquidModalOut 0.18s var(--ease-in-out-smooth, cubic-bezier(0.4, 0, 0.2, 1)) both;
6592
6598
  }
6593
6599
 
6594
- .modal-header {
6595
- display: flex;
6596
- align-items: center;
6597
- justify-content: space-between;
6598
- padding: 18px 22px 16px;
6599
- border-bottom: 1px solid var(--border-subtle);
6600
- flex-shrink: 0;
6601
- min-height: 56px;
6600
+ @keyframes liquidModalIn {
6601
+ from { opacity: 0; transform: scale(0.94) translateY(12px); }
6602
+ to { opacity: 1; transform: scale(1) translateY(0); }
6603
+ }
6604
+ @keyframes liquidModalOut {
6605
+ from { opacity: 1; transform: scale(1) translateY(0); }
6606
+ to { opacity: 0; transform: scale(0.97) translateY(4px); }
6602
6607
  }
6603
6608
 
6604
- .modal-title { font-size: 1.0625rem; font-weight: 600; color: var(--text-primary); letter-spacing: -0.01em; }
6605
- .modal-body { padding: 22px; overflow-y: auto; flex: 1 1 auto; min-height: 0; }
6606
- .modal-body .field { margin-bottom: 14px; }
6607
- .modal-body .field:last-of-type { margin-bottom: 16px; }
6608
- .session-kind-hint-row {
6609
- display: flex;
6610
- align-items: center;
6611
- justify-content: space-between;
6612
- gap: 12px;
6609
+ @media (prefers-reduced-motion: reduce) {
6610
+ .modal-backdrop,
6611
+ .modal-backdrop.closing,
6612
+ .modal,
6613
+ .modal-backdrop.closing .modal {
6614
+ animation: none !important;
6615
+ }
6613
6616
  }
6614
- .session-kind-hint-row #session-kind-description {
6615
- flex: 1 1 auto;
6617
+
6618
+ /* Fallback for browsers without backdrop-filter — solid surface */
6619
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
6620
+ .modal-backdrop { background: rgba(20, 14, 8, 0.6); }
6621
+ .modal { background: #fffaf2; border-color: rgba(125, 91, 57, 0.18); }
6622
+ }
6623
+
6624
+ @media (prefers-color-scheme: dark) {
6625
+ .modal-backdrop { background: rgba(8, 5, 2, 0.5); }
6626
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
6627
+ .modal-backdrop { background: rgba(8, 5, 2, 0.78); }
6628
+ }
6629
+ }
6630
+
6631
+ /* ============================================================ */
6632
+ /* ── Liquid Glass dialog internals (refined) ── */
6633
+ /* Philosophy: the modal IS the glass. Internal elements are */
6634
+ /* solid, flat, restrained — they sit on the glass surface. */
6635
+ /* Hierarchy comes from typography & shadow, not stacked blur. */
6636
+ /* Scoped to .session-modal / .settings-modal only. */
6637
+ /* ============================================================ */
6638
+
6639
+ /* ── Header — generous breathing room, big title, hairline ── */
6640
+ .session-modal .modal-header,
6641
+ .settings-modal .settings-modal-header {
6642
+ padding: 24px 28px 18px;
6643
+ border-bottom: 1px solid rgba(125, 91, 57, 0.08);
6644
+ align-items: flex-start;
6645
+ gap: 16px;
6646
+ min-height: 0;
6647
+ }
6648
+ .session-modal .modal-title,
6649
+ .settings-modal .settings-modal-title-group .modal-title {
6650
+ font-size: 1.3125rem;
6651
+ font-weight: 700;
6652
+ letter-spacing: -0.022em;
6653
+ color: var(--text-primary);
6654
+ line-height: 1.2;
6655
+ }
6656
+ .session-modal .modal-subtitle,
6657
+ .settings-modal .settings-modal-subtitle {
6658
+ margin-top: 5px;
6659
+ font-size: 0.8125rem;
6660
+ font-weight: 400;
6661
+ color: var(--text-muted);
6662
+ line-height: 1.5;
6663
+ max-width: 44ch;
6664
+ }
6665
+
6666
+ /* ── Modal close button (× → crisp SVG, rotate on hover) ── */
6667
+ .modal-close-btn,
6668
+ .session-modal .modal-header > .btn-icon.btn-ghost,
6669
+ .settings-modal .settings-modal-header > .btn-icon.btn-ghost {
6670
+ width: 32px;
6671
+ height: 32px;
6672
+ min-width: 32px;
6673
+ min-height: 32px;
6674
+ padding: 0;
6675
+ border-radius: 50%;
6676
+ background: rgba(125, 91, 57, 0.07);
6677
+ border: none;
6678
+ color: var(--text-tertiary);
6679
+ flex-shrink: 0;
6680
+ display: inline-flex;
6681
+ align-items: center;
6682
+ justify-content: center;
6683
+ transition:
6684
+ background 0.18s ease,
6685
+ color 0.18s ease,
6686
+ transform 0.28s cubic-bezier(0.34, 1.4, 0.64, 1),
6687
+ box-shadow 0.18s ease;
6688
+ }
6689
+ .modal-close-btn svg { display: block; pointer-events: none; }
6690
+ .modal-close-btn:hover,
6691
+ .session-modal .modal-header > .btn-icon.btn-ghost:hover,
6692
+ .settings-modal .settings-modal-header > .btn-icon.btn-ghost:hover {
6693
+ background: rgba(178, 79, 69, 0.12);
6694
+ color: var(--danger);
6695
+ transform: rotate(90deg);
6696
+ box-shadow: 0 2px 8px rgba(178, 79, 69, 0.18);
6697
+ }
6698
+ .modal-close-btn:active,
6699
+ .session-modal .modal-header > .btn-icon.btn-ghost:active,
6700
+ .settings-modal .settings-modal-header > .btn-icon.btn-ghost:active {
6701
+ background: rgba(178, 79, 69, 0.2);
6702
+ transform: rotate(90deg) scale(0.92);
6703
+ transition-duration: 0.06s;
6704
+ }
6705
+ .modal-close-btn:focus-visible {
6706
+ outline: 2px solid var(--accent);
6707
+ outline-offset: 3px;
6708
+ }
6709
+
6710
+ /* Body breathing room */
6711
+ .session-modal .modal-body,
6712
+ .settings-modal .settings-modal-body {
6713
+ padding: 20px 28px;
6714
+ }
6715
+ .session-modal .modal-footer {
6716
+ padding: 16px 28px 22px;
6717
+ border-top: 1px solid rgba(125, 91, 57, 0.08);
6718
+ }
6719
+
6720
+ /* ── Form inputs — solid, clean, single hairline ── */
6721
+ .session-modal .field-input,
6722
+ .settings-modal .field-input,
6723
+ .settings-modal .settings-card .field-input,
6724
+ .session-modal select.field-input,
6725
+ .settings-modal select.field-input {
6726
+ background: rgba(255, 255, 255, 0.78);
6727
+ border: 1px solid rgba(125, 91, 57, 0.14);
6728
+ border-radius: 12px;
6729
+ padding: 11px 14px;
6730
+ box-shadow: inset 0 1px 1.5px rgba(125, 91, 57, 0.04);
6731
+ transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
6732
+ backdrop-filter: none;
6733
+ -webkit-backdrop-filter: none;
6734
+ }
6735
+ .session-modal .field-input:hover,
6736
+ .settings-modal .field-input:hover {
6737
+ border-color: rgba(125, 91, 57, 0.24);
6738
+ background: rgba(255, 255, 255, 0.92);
6739
+ }
6740
+ .session-modal .field-input:focus,
6741
+ .settings-modal .field-input:focus,
6742
+ .settings-modal .settings-card .field-input:focus,
6743
+ .session-modal select.field-input:focus,
6744
+ .settings-modal select.field-input:focus {
6745
+ background: #ffffff;
6746
+ border-color: var(--accent);
6747
+ box-shadow:
6748
+ inset 0 1px 1.5px rgba(125, 91, 57, 0.04),
6749
+ 0 0 0 3px var(--accent-muted);
6750
+ }
6751
+
6752
+ /* ── Mode/segment cards — iOS-segmented look ── */
6753
+ .session-modal .mode-cards {
6754
+ gap: 8px;
6755
+ }
6756
+ .session-modal .mode-card {
6757
+ padding: 12px 10px;
6758
+ border: 1px solid rgba(125, 91, 57, 0.1);
6759
+ border-radius: 12px;
6760
+ background: rgba(255, 255, 255, 0.6);
6761
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
6762
+ transition: background 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
6763
+ backdrop-filter: none;
6764
+ -webkit-backdrop-filter: none;
6765
+ }
6766
+ .session-modal .mode-card:hover {
6767
+ background: rgba(255, 255, 255, 0.92);
6768
+ border-color: rgba(125, 91, 57, 0.2);
6769
+ transform: translateY(-1px);
6770
+ box-shadow: 0 4px 12px rgba(125, 91, 57, 0.08);
6771
+ }
6772
+ .session-modal .mode-card.active {
6773
+ background: linear-gradient(180deg, #fff7ef 0%, #ffeed8 100%);
6774
+ border-color: var(--accent);
6775
+ box-shadow:
6776
+ 0 0 0 3px var(--accent-muted),
6777
+ 0 4px 12px rgba(197, 101, 61, 0.12);
6778
+ transform: none;
6779
+ }
6780
+ .session-modal .mode-card.active .mode-card-label {
6781
+ color: var(--accent);
6782
+ }
6783
+
6784
+ /* ── Tool cards — same family, larger ── */
6785
+ .session-modal .tool-card {
6786
+ background: rgba(255, 255, 255, 0.7);
6787
+ border: 1px solid rgba(125, 91, 57, 0.12);
6788
+ border-radius: 14px;
6789
+ padding: 14px 16px;
6790
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
6791
+ transition: background 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
6792
+ backdrop-filter: none;
6793
+ -webkit-backdrop-filter: none;
6794
+ }
6795
+ .session-modal .tool-card:hover {
6796
+ background: #ffffff;
6797
+ border-color: rgba(125, 91, 57, 0.22);
6798
+ transform: translateY(-2px);
6799
+ box-shadow: 0 8px 20px rgba(125, 91, 57, 0.1);
6800
+ }
6801
+ .session-modal .tool-card.active {
6802
+ background: linear-gradient(180deg, #fff8f1 0%, #fff1de 100%);
6803
+ border-color: var(--accent);
6804
+ box-shadow:
6805
+ 0 0 0 3px var(--accent-muted),
6806
+ 0 6px 16px rgba(197, 101, 61, 0.12);
6807
+ transform: none;
6808
+ }
6809
+
6810
+ .session-modal .tool-chip {
6811
+ background: rgba(197, 101, 61, 0.12);
6812
+ border: none;
6813
+ color: var(--accent);
6814
+ font-weight: 600;
6815
+ letter-spacing: 0.02em;
6816
+ }
6817
+
6818
+ /* Recent path bubbles — quiet pills */
6819
+ .session-modal .recent-path-bubble {
6820
+ background: rgba(255, 255, 255, 0.55);
6821
+ border: 1px solid rgba(125, 91, 57, 0.12);
6822
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
6823
+ transition: background 0.16s ease, border-color 0.16s ease, color 0.16s ease, transform 0.16s ease;
6824
+ }
6825
+ .session-modal .recent-path-bubble:hover {
6826
+ background: #fff7ef;
6827
+ border-color: var(--accent);
6828
+ color: var(--accent);
6829
+ transform: translateY(-1px);
6830
+ }
6831
+
6832
+ /* ── Worktree inline toggle — iOS switch row ── */
6833
+ .session-modal .session-inline-toggle {
6834
+ position: relative;
6835
+ display: inline-flex;
6836
+ align-items: center;
6837
+ gap: 8px;
6838
+ padding: 6px 8px 6px 12px;
6839
+ border-radius: 999px;
6840
+ background: rgba(125, 91, 57, 0.05);
6841
+ border: 1px solid rgba(125, 91, 57, 0.08);
6842
+ cursor: pointer;
6843
+ user-select: none;
6844
+ transition:
6845
+ background 0.18s ease,
6846
+ border-color 0.18s ease,
6847
+ box-shadow 0.18s ease,
6848
+ color 0.18s ease;
6849
+ color: var(--text-secondary);
6850
+ }
6851
+ .session-modal .session-inline-toggle:hover {
6852
+ background: rgba(125, 91, 57, 0.09);
6853
+ border-color: rgba(125, 91, 57, 0.16);
6854
+ }
6855
+ /* When the hidden checkbox is on, glow the whole pill in accent color */
6856
+ .session-modal .session-inline-toggle:has(.switch-toggle:checked) {
6857
+ background: linear-gradient(180deg, #fff7ef 0%, #ffeed8 100%);
6858
+ border-color: var(--accent);
6859
+ color: var(--accent);
6860
+ box-shadow:
6861
+ 0 0 0 3px var(--accent-muted),
6862
+ 0 4px 12px rgba(197, 101, 61, 0.12);
6863
+ }
6864
+ .session-modal .session-inline-toggle-icon {
6865
+ flex-shrink: 0;
6866
+ color: var(--text-muted);
6867
+ transition: color 0.18s ease, transform 0.28s cubic-bezier(0.34, 1.4, 0.64, 1);
6868
+ }
6869
+ .session-modal .session-inline-toggle:has(.switch-toggle:checked) .session-inline-toggle-icon {
6870
+ color: var(--accent);
6871
+ transform: rotate(8deg);
6872
+ }
6873
+ .session-modal .session-inline-toggle-label {
6874
+ font-size: 0.75rem;
6875
+ font-weight: 600;
6876
+ letter-spacing: 0.005em;
6877
+ color: inherit;
6878
+ transition: color 0.18s ease;
6879
+ }
6880
+
6881
+ /* The hidden checkbox + visible iOS-style switch — scoped to inline toggle
6882
+ so it doesn't conflict with .switch-card-list switches. */
6883
+ .session-modal .session-inline-toggle .switch-toggle {
6884
+ position: absolute;
6885
+ opacity: 0;
6886
+ width: 0;
6887
+ height: 0;
6888
+ pointer-events: none;
6889
+ }
6890
+ .session-modal .session-inline-toggle .switch-slider {
6891
+ position: relative;
6892
+ display: inline-block;
6893
+ width: 32px;
6894
+ height: 20px;
6895
+ min-width: 32px;
6896
+ border-radius: 10px;
6897
+ background: rgba(125, 91, 57, 0.22);
6898
+ box-shadow: inset 0 1px 1px rgba(125, 91, 57, 0.18);
6899
+ transition: background 0.22s ease, box-shadow 0.22s ease;
6900
+ }
6901
+ .session-modal .session-inline-toggle .switch-slider::after {
6902
+ content: "";
6903
+ position: absolute;
6904
+ top: 2px;
6905
+ left: 2px;
6906
+ width: 16px;
6907
+ height: 16px;
6908
+ border-radius: 50%;
6909
+ background: #fff;
6910
+ box-shadow:
6911
+ 0 1.5px 3px rgba(20, 14, 8, 0.22),
6912
+ 0 0 0 0.5px rgba(125, 91, 57, 0.06);
6913
+ transition: transform 0.24s cubic-bezier(0.34, 1.4, 0.64, 1);
6914
+ }
6915
+ .session-modal .session-inline-toggle .switch-toggle:checked + .switch-slider {
6916
+ background: var(--accent);
6917
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
6918
+ }
6919
+ .session-modal .session-inline-toggle .switch-toggle:checked + .switch-slider::after {
6920
+ transform: translateX(12px);
6921
+ }
6922
+ .session-modal .session-inline-toggle .switch-toggle:focus-visible + .switch-slider {
6923
+ outline: 2px solid var(--accent);
6924
+ outline-offset: 2px;
6925
+ }
6926
+
6927
+ /* Layout — let the hint row breathe and align nicely */
6928
+ .session-modal .session-kind-hint-row {
6929
+ align-items: center;
6930
+ gap: 14px;
6931
+ }
6932
+
6933
+ /* Suggestions floating panel — clean white card */
6934
+ .session-modal .suggestions {
6935
+ background: rgba(255, 252, 247, 0.96);
6936
+ border: 1px solid rgba(125, 91, 57, 0.14);
6937
+ border-radius: 12px;
6938
+ box-shadow:
6939
+ 0 0 0 0.5px rgba(125, 91, 57, 0.05),
6940
+ 0 12px 28px -8px rgba(20, 14, 8, 0.18);
6941
+ backdrop-filter: blur(20px) saturate(180%);
6942
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
6943
+ overflow: hidden;
6944
+ }
6945
+ .session-modal .suggestion-item:hover {
6946
+ background: rgba(232, 197, 174, 0.32);
6947
+ }
6948
+
6949
+ /* Command preview — quiet code box */
6950
+ .session-modal .command-preview {
6951
+ background: rgba(125, 91, 57, 0.04);
6952
+ border: 1px dashed rgba(125, 91, 57, 0.2);
6953
+ border-radius: 10px;
6954
+ }
6955
+
6956
+ /* Error message */
6957
+ .session-modal .error-message,
6958
+ .settings-modal .error-message {
6959
+ background: rgba(178, 79, 69, 0.1);
6960
+ border: 1px solid rgba(178, 79, 69, 0.2);
6961
+ color: var(--danger);
6962
+ border-radius: 10px;
6963
+ padding: 10px 12px;
6964
+ backdrop-filter: none;
6965
+ -webkit-backdrop-filter: none;
6966
+ }
6967
+
6968
+ /* Field labels — softer & slightly upper-case feel */
6969
+ .session-modal .field-label,
6970
+ .settings-modal .field-label {
6971
+ color: var(--text-secondary);
6972
+ font-weight: 600;
6973
+ font-size: 0.8125rem;
6974
+ margin-bottom: 8px;
6975
+ }
6976
+
6977
+ /* ── Primary button — solid accent, soft shadow (no glass) ── */
6978
+ .session-modal .modal-footer .btn-primary,
6979
+ .settings-modal .btn-primary {
6980
+ box-shadow:
6981
+ 0 6px 16px -4px rgba(197, 101, 61, 0.4),
6982
+ 0 2px 6px -2px rgba(197, 101, 61, 0.3),
6983
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
6984
+ border-radius: 12px;
6985
+ }
6986
+ .session-modal .modal-footer .btn-primary:hover,
6987
+ .settings-modal .btn-primary:hover {
6988
+ box-shadow:
6989
+ 0 10px 24px -4px rgba(197, 101, 61, 0.46),
6990
+ 0 4px 10px -2px rgba(197, 101, 61, 0.34),
6991
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
6992
+ }
6993
+
6994
+ /* Secondary button — quiet white card */
6995
+ .session-modal .btn-secondary,
6996
+ .settings-modal .btn-secondary {
6997
+ background: rgba(255, 255, 255, 0.78);
6998
+ border: 1px solid rgba(125, 91, 57, 0.14);
6999
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.04);
7000
+ border-radius: 12px;
7001
+ }
7002
+ .session-modal .btn-secondary:hover,
7003
+ .settings-modal .btn-secondary:hover {
7004
+ background: #ffffff;
7005
+ border-color: rgba(125, 91, 57, 0.24);
7006
+ box-shadow: 0 4px 12px rgba(125, 91, 57, 0.08);
7007
+ }
7008
+
7009
+ /* ============================================================ */
7010
+ /* ── Settings modal — sidebar + content layout ── */
7011
+ /* ============================================================ */
7012
+
7013
+ /* Sidebar — clean column, soft hairline seam */
7014
+ .settings-modal .settings-sidebar {
7015
+ border-right: 1px solid rgba(125, 91, 57, 0.08);
7016
+ padding-right: 12px;
7017
+ }
7018
+ .settings-modal .settings-sidebar-title {
7019
+ font-size: 0.6875rem;
7020
+ font-weight: 600;
7021
+ text-transform: uppercase;
7022
+ letter-spacing: 0.08em;
7023
+ color: var(--text-muted);
7024
+ }
7025
+
7026
+ /* Sidebar tab — iOS Settings list row, clean and quiet */
7027
+ .settings-modal .settings-tabs { gap: 2px; }
7028
+ .settings-modal .settings-tab {
7029
+ padding: 11px 14px;
7030
+ border: none;
7031
+ border-radius: 10px;
7032
+ background: transparent;
7033
+ box-shadow: none;
7034
+ color: var(--text-secondary);
7035
+ transition: background 0.14s ease, color 0.14s ease, transform 0.14s ease;
7036
+ backdrop-filter: none;
7037
+ -webkit-backdrop-filter: none;
7038
+ }
7039
+ .settings-modal .settings-tab::before { display: none; }
7040
+ .settings-modal .settings-tab:hover {
7041
+ background: rgba(125, 91, 57, 0.06);
7042
+ color: var(--text-primary);
7043
+ transform: none;
7044
+ border-color: transparent;
7045
+ }
7046
+ .settings-modal .settings-tab.active {
7047
+ background: linear-gradient(180deg, #fff7ef 0%, #ffeed8 100%);
7048
+ color: var(--accent);
7049
+ box-shadow:
7050
+ inset 0 0 0 1px rgba(197, 101, 61, 0.22),
7051
+ 0 1px 3px rgba(197, 101, 61, 0.08);
7052
+ }
7053
+ .settings-modal .settings-tab.active .settings-tab-meta {
7054
+ color: var(--text-secondary);
7055
+ }
7056
+ .settings-modal .settings-tab-main {
7057
+ font-size: 0.875rem;
7058
+ font-weight: 600;
7059
+ letter-spacing: -0.005em;
7060
+ }
7061
+ .settings-modal .settings-tab-meta {
7062
+ font-size: 0.7125rem;
7063
+ color: var(--text-muted);
7064
+ }
7065
+
7066
+ /* Panel header — bigger title, softer divider */
7067
+ .settings-modal .settings-panel-header {
7068
+ margin: 0 0 16px;
7069
+ padding-bottom: 14px;
7070
+ border-bottom: 1px solid rgba(125, 91, 57, 0.08);
7071
+ }
7072
+ .settings-modal .settings-panel-title {
7073
+ font-size: 1.1875rem;
7074
+ font-weight: 700;
7075
+ letter-spacing: -0.02em;
7076
+ }
7077
+ .settings-modal .settings-panel-desc {
7078
+ font-size: 0.8125rem;
7079
+ color: var(--text-muted);
7080
+ }
7081
+
7082
+ /* Settings cards — solid white cards, single hairline, soft shadow */
7083
+ .settings-modal .settings-card,
7084
+ .settings-modal .settings-update-section,
7085
+ .settings-modal .settings-notification-section,
7086
+ .settings-modal .settings-about-info,
7087
+ .settings-modal .preset-item {
7088
+ background: rgba(255, 255, 255, 0.65);
7089
+ border: 1px solid rgba(125, 91, 57, 0.1);
7090
+ border-radius: 16px;
7091
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
7092
+ backdrop-filter: none;
7093
+ -webkit-backdrop-filter: none;
7094
+ }
7095
+
7096
+ .settings-modal .settings-about-row {
7097
+ border-bottom-color: rgba(125, 91, 57, 0.08);
7098
+ }
7099
+
7100
+ /* Switch card — clean clickable row */
7101
+ .settings-modal .switch-card-list { gap: 8px; }
7102
+ .settings-modal .switch-card {
7103
+ background: rgba(255, 255, 255, 0.6);
7104
+ border: 1px solid rgba(125, 91, 57, 0.1);
7105
+ border-radius: 14px;
7106
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
7107
+ transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease, box-shadow 0.16s ease;
7108
+ backdrop-filter: none;
7109
+ -webkit-backdrop-filter: none;
7110
+ }
7111
+ .settings-modal .switch-card:hover {
7112
+ background: rgba(255, 255, 255, 0.85);
7113
+ border-color: rgba(125, 91, 57, 0.18);
7114
+ transform: translateY(-1px);
7115
+ box-shadow: 0 4px 12px rgba(125, 91, 57, 0.06);
7116
+ }
7117
+ .settings-modal .switch-card:has(.switch-toggle:checked) {
7118
+ background: linear-gradient(180deg, #fff7ef 0%, #fff1de 100%);
7119
+ border-color: var(--accent);
7120
+ box-shadow:
7121
+ 0 0 0 1px var(--accent-muted),
7122
+ 0 4px 12px rgba(197, 101, 61, 0.1);
7123
+ }
7124
+
7125
+ /* iOS-style switch is now defined globally — no settings-modal override needed */
7126
+
7127
+ /* Toggle/range rows — quiet container row */
7128
+ .settings-modal .settings-toggle-row,
7129
+ .settings-modal .settings-range-row,
7130
+ .settings-modal .field-inline {
7131
+ background: rgba(255, 255, 255, 0.55);
7132
+ border: 1px solid rgba(125, 91, 57, 0.08);
7133
+ border-radius: 12px;
7134
+ box-shadow: 0 1px 1px rgba(125, 91, 57, 0.02);
7135
+ backdrop-filter: none;
7136
+ -webkit-backdrop-filter: none;
7137
+ }
7138
+
7139
+ /* Settings panel intro — subtle accent banner */
7140
+ .settings-modal .settings-panel-intro {
7141
+ background: rgba(197, 101, 61, 0.06);
7142
+ border: 1px solid rgba(197, 101, 61, 0.16);
7143
+ border-radius: 12px;
7144
+ backdrop-filter: none;
7145
+ -webkit-backdrop-filter: none;
7146
+ }
7147
+
7148
+ /* Card-head / section-head icon mini-badge */
7149
+ .settings-modal .settings-card-icon,
7150
+ .settings-modal .settings-section-icon {
7151
+ background: linear-gradient(180deg, rgba(197, 101, 61, 0.16), rgba(197, 101, 61, 0.06));
7152
+ border: 1px solid rgba(197, 101, 61, 0.18);
7153
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6);
7154
+ color: var(--accent);
7155
+ }
7156
+
7157
+ /* App-icon options — clean cards with crisp active state */
7158
+ .settings-modal .settings-app-icon-option {
7159
+ background: rgba(255, 255, 255, 0.65);
7160
+ border: 1px solid rgba(125, 91, 57, 0.1);
7161
+ border-radius: 14px;
7162
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
7163
+ transition: background 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
7164
+ backdrop-filter: none;
7165
+ -webkit-backdrop-filter: none;
7166
+ }
7167
+ .settings-modal .settings-app-icon-option:hover {
7168
+ background: #ffffff;
7169
+ border-color: rgba(125, 91, 57, 0.2);
7170
+ transform: translateY(-1px);
7171
+ box-shadow: 0 4px 12px rgba(125, 91, 57, 0.08);
7172
+ }
7173
+ .settings-modal .settings-app-icon-option.selected,
7174
+ .settings-modal .settings-app-icon-option[aria-pressed="true"] {
7175
+ background: linear-gradient(180deg, #fff7ef 0%, #fff1de 100%);
7176
+ border-color: var(--accent);
7177
+ box-shadow:
7178
+ 0 0 0 3px var(--accent-muted),
7179
+ 0 4px 12px rgba(197, 101, 61, 0.12);
7180
+ }
7181
+
7182
+ /* Connect URL box */
7183
+ .settings-modal .settings-connect-url-box {
7184
+ background: rgba(125, 91, 57, 0.05);
7185
+ border: 1px solid rgba(125, 91, 57, 0.12);
7186
+ border-radius: 12px;
7187
+ }
7188
+
7189
+ /* Sticky save bar — clean translucent footer */
7190
+ .settings-modal .settings-actions-sticky {
7191
+ background: linear-gradient(180deg, rgba(255, 252, 247, 0) 0%, rgba(255, 252, 247, 0.85) 28px);
7192
+ backdrop-filter: blur(8px);
7193
+ -webkit-backdrop-filter: blur(8px);
7194
+ }
7195
+
7196
+ /* Settings divider — soft hairline */
7197
+ .settings-modal .settings-divider {
7198
+ border-top: 1px solid rgba(125, 91, 57, 0.08);
7199
+ }
7200
+
7201
+ /* Section title — better letterspacing */
7202
+ .settings-modal .settings-section-title {
7203
+ font-size: 0.8125rem;
7204
+ font-weight: 700;
7205
+ letter-spacing: 0.005em;
7206
+ color: var(--text-primary);
7207
+ }
7208
+
7209
+ /* ── Mobile — keep generous spacing without overflowing ── */
7210
+ @media (max-width: 640px) {
7211
+ .session-modal .modal-header,
7212
+ .settings-modal .settings-modal-header {
7213
+ padding: 16px 18px 14px;
7214
+ }
7215
+ .session-modal .modal-body,
7216
+ .settings-modal .settings-modal-body {
7217
+ padding: 14px 18px;
7218
+ }
7219
+ .session-modal .modal-footer {
7220
+ padding: 12px 18px 18px;
7221
+ }
7222
+ .session-modal .modal-title,
7223
+ .settings-modal .settings-modal-title-group .modal-title {
7224
+ font-size: 1.125rem;
7225
+ }
7226
+ .settings-modal .settings-panel-title {
7227
+ font-size: 1.0625rem;
7228
+ }
7229
+ }
7230
+
7231
+ /* ============================================================ */
7232
+ /* ── Liquid Glass — sidebar (会话侧边栏) ── */
7233
+ /* Same hierarchy: the SIDEBAR is the glass surface, items */
7234
+ /* inside it are clean cards. No double-glass, no busy borders. */
7235
+ /* ============================================================ */
7236
+
7237
+ /* Sidebar shell — push the glass material */
7238
+ .sidebar {
7239
+ background: rgba(255, 252, 247, 0.72);
7240
+ border-right: 0.5px solid rgba(255, 255, 255, 0.55);
7241
+ backdrop-filter: blur(36px) saturate(180%);
7242
+ -webkit-backdrop-filter: blur(36px) saturate(180%);
7243
+ box-shadow:
7244
+ 0 0 0 0.5px rgba(125, 91, 57, 0.06),
7245
+ 4px 0 32px -8px rgba(20, 14, 8, 0.18);
7246
+ }
7247
+ .sidebar.open {
7248
+ box-shadow:
7249
+ 0 0 0 0.5px rgba(125, 91, 57, 0.06),
7250
+ 12px 0 48px -12px rgba(20, 14, 8, 0.28);
7251
+ }
7252
+ .sidebar.pinned {
7253
+ box-shadow:
7254
+ 0 0 0 0.5px rgba(125, 91, 57, 0.06),
7255
+ 2px 0 12px -8px rgba(20, 14, 8, 0.12);
7256
+ }
7257
+
7258
+ /* Drawer backdrop — calmer dark wash, matches modal-backdrop */
7259
+ .drawer-backdrop {
7260
+ background: rgba(20, 14, 8, 0.32);
7261
+ backdrop-filter: blur(12px);
7262
+ -webkit-backdrop-filter: blur(12px);
7263
+ }
7264
+ .drawer-backdrop.open {
7265
+ backdrop-filter: blur(18px) saturate(140%);
7266
+ -webkit-backdrop-filter: blur(18px) saturate(140%);
7267
+ }
7268
+
7269
+ /* Sidebar header — hairline divider, transparent so glass shows through */
7270
+ .sidebar-header {
7271
+ background: transparent;
7272
+ border-bottom: 1px solid rgba(125, 91, 57, 0.06);
7273
+ padding: 14px 16px;
7274
+ }
7275
+
7276
+ .sidebar-title {
7277
+ font-size: 0.9375rem;
7278
+ font-weight: 700;
7279
+ letter-spacing: -0.012em;
7280
+ color: var(--text-primary);
7281
+ }
7282
+
7283
+ /* Session count badge — quiet pill */
7284
+ .session-count {
7285
+ background: rgba(125, 91, 57, 0.08);
7286
+ color: var(--text-secondary);
7287
+ padding: 2px 9px;
7288
+ border-radius: 999px;
7289
+ font-size: 0.6875rem;
7290
+ font-weight: 700;
7291
+ font-variant-numeric: tabular-nums;
7292
+ line-height: 1.5;
7293
+ }
7294
+
7295
+ /* Sidebar header icon buttons — pin / more / close — uniform 32×32 ghost */
7296
+ .sidebar-header-actions .btn-ghost.btn-sm,
7297
+ .sidebar-pin-toggle,
7298
+ .drawer-close-btn {
7299
+ width: 32px;
7300
+ height: 32px;
7301
+ min-width: 32px;
7302
+ min-height: 32px;
7303
+ padding: 0;
7304
+ border-radius: 50%;
7305
+ display: inline-flex;
7306
+ align-items: center;
7307
+ justify-content: center;
7308
+ background: transparent;
7309
+ color: var(--text-tertiary);
7310
+ border: none;
7311
+ transition:
7312
+ background 0.16s ease,
7313
+ color 0.16s ease,
7314
+ transform 0.22s cubic-bezier(0.34, 1.4, 0.64, 1);
7315
+ }
7316
+ .sidebar-header-actions .btn-ghost.btn-sm:hover,
7317
+ .sidebar-pin-toggle:hover {
7318
+ background: rgba(125, 91, 57, 0.08);
7319
+ color: var(--text-primary);
7320
+ }
7321
+ .sidebar-pin-toggle.pinned {
7322
+ background: rgba(197, 101, 61, 0.12);
7323
+ color: var(--accent);
7324
+ }
7325
+
7326
+ /* Drawer close — same pattern as modal-close (rotate + danger tint) */
7327
+ .drawer-close-btn {
7328
+ background: rgba(125, 91, 57, 0.07);
7329
+ }
7330
+ .drawer-close-btn:hover {
7331
+ background: rgba(178, 79, 69, 0.12);
7332
+ color: var(--danger);
7333
+ transform: rotate(90deg);
7334
+ box-shadow: 0 2px 8px rgba(178, 79, 69, 0.16);
7335
+ }
7336
+ .drawer-close-btn:active {
7337
+ background: rgba(178, 79, 69, 0.2);
7338
+ transform: rotate(90deg) scale(0.92);
7339
+ transition-duration: 0.06s;
7340
+ }
7341
+ .drawer-close-btn:focus-visible {
7342
+ outline: 2px solid var(--accent);
7343
+ outline-offset: 3px;
7344
+ }
7345
+
7346
+ /* Sidebar overflow dropdown — frosted floating menu */
7347
+ .sidebar-header-overflow {
7348
+ background: rgba(255, 252, 247, 0.86);
7349
+ border: 0.5px solid rgba(255, 255, 255, 0.55);
7350
+ backdrop-filter: blur(24px) saturate(180%);
7351
+ -webkit-backdrop-filter: blur(24px) saturate(180%);
7352
+ box-shadow:
7353
+ 0 0 0 0.5px rgba(125, 91, 57, 0.08),
7354
+ 0 12px 28px -8px rgba(20, 14, 8, 0.22);
7355
+ border-radius: 12px;
7356
+ padding: 6px;
7357
+ }
7358
+ .sidebar-header-overflow .overflow-item {
7359
+ border-radius: 8px;
7360
+ padding: 9px 10px;
7361
+ font-size: 0.8125rem;
7362
+ font-weight: 500;
7363
+ }
7364
+ .sidebar-header-overflow .overflow-item:hover {
7365
+ background: rgba(125, 91, 57, 0.08);
7366
+ color: var(--text-primary);
7367
+ }
7368
+ .sidebar-header-overflow .overflow-item:active {
7369
+ background: rgba(125, 91, 57, 0.14);
7370
+ transform: scale(0.98);
7371
+ }
7372
+
7373
+ /* ── Manage bar — Linear-style toolbar ── */
7374
+ .session-manage-bar {
7375
+ display: flex;
7376
+ align-items: center;
7377
+ justify-content: space-between;
7378
+ padding: 4px 4px 4px 10px;
7379
+ border-radius: 10px;
7380
+ margin-bottom: 10px;
7381
+ background: transparent;
7382
+ transition: background 0.16s ease;
7383
+ }
7384
+ .session-manage-bar:hover {
7385
+ background: rgba(125, 91, 57, 0.05);
7386
+ }
7387
+ .session-manage-bar .sidebar-intro {
7388
+ font-size: 0.75rem;
7389
+ color: var(--text-muted);
7390
+ letter-spacing: 0.005em;
7391
+ }
7392
+
7393
+ /* Active toolbar — iOS toolbar look: card with hairline + summary + actions */
7394
+ .session-manage-bar.active {
7395
+ flex-direction: column;
7396
+ align-items: stretch;
7397
+ gap: 10px;
7398
+ padding: 10px 12px;
7399
+ background: rgba(255, 255, 255, 0.6);
7400
+ border: 1px solid rgba(125, 91, 57, 0.1);
7401
+ border-radius: 14px;
7402
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
7403
+ }
7404
+
7405
+ .session-manage-summary {
7406
+ display: inline-flex;
7407
+ align-items: center;
7408
+ gap: 8px;
7409
+ font-size: 0.75rem;
7410
+ color: var(--text-secondary);
7411
+ font-weight: 500;
7412
+ }
7413
+ .session-manage-count {
7414
+ display: inline-flex;
7415
+ align-items: center;
7416
+ justify-content: center;
7417
+ min-width: 22px;
7418
+ height: 22px;
7419
+ padding: 0 7px;
7420
+ background: var(--accent);
7421
+ color: var(--text-inverse);
7422
+ font-size: 0.6875rem;
7423
+ font-weight: 700;
7424
+ border-radius: 999px;
7425
+ font-variant-numeric: tabular-nums;
7426
+ box-shadow: 0 1px 2px rgba(197, 101, 61, 0.32);
7427
+ }
7428
+ .session-manage-summary-label {
7429
+ color: var(--text-secondary);
7430
+ font-weight: 600;
7431
+ }
7432
+
7433
+ .session-manage-actions {
7434
+ display: flex;
7435
+ align-items: center;
7436
+ gap: 4px;
7437
+ flex-wrap: wrap;
7438
+ }
7439
+ .session-manage-divider {
7440
+ width: 1px;
7441
+ height: 16px;
7442
+ background: rgba(125, 91, 57, 0.16);
7443
+ margin: 0 4px;
7444
+ flex-shrink: 0;
7445
+ }
7446
+
7447
+ /* Toggle button (the "管理" entry point) — show icon + label */
7448
+ .session-manage-toggle {
7449
+ gap: 5px;
7450
+ }
7451
+
7452
+ /* History inline clear buttons */
7453
+ .session-history-clear,
7454
+ .claude-history-directory-clear-btn {
7455
+ margin-left: auto;
7456
+ }
7457
+
7458
+ /* Group title — refine the dash + label */
7459
+ .session-group-title {
7460
+ padding: 10px 6px 8px;
7461
+ font-size: 0.6875rem;
7462
+ font-weight: 700;
7463
+ letter-spacing: 0.1em;
7464
+ color: var(--text-muted);
7465
+ }
7466
+ .session-group-title::before {
7467
+ width: 3px;
7468
+ height: 12px;
7469
+ border-radius: 999px;
7470
+ background: linear-gradient(180deg, var(--accent), rgba(197, 101, 61, 0.4));
7471
+ opacity: 1;
7472
+ }
7473
+
7474
+ /* ── Session item — clean card on glass ── */
7475
+ .session-item {
7476
+ background: rgba(255, 255, 255, 0.55);
7477
+ border: 1px solid rgba(125, 91, 57, 0.08);
7478
+ border-radius: 12px;
7479
+ padding: 11px 14px;
7480
+ margin-bottom: 6px;
7481
+ box-shadow: 0 1px 2px rgba(125, 91, 57, 0.03);
7482
+ transition:
7483
+ background 0.18s ease,
7484
+ border-color 0.18s ease,
7485
+ box-shadow 0.18s ease,
7486
+ transform 0.18s ease;
7487
+ }
7488
+ .session-item::before {
7489
+ left: 4px;
7490
+ top: 10px;
7491
+ bottom: 10px;
7492
+ width: 3px;
7493
+ border-radius: 2px;
7494
+ background: var(--accent);
7495
+ }
7496
+ .session-item:hover {
7497
+ background: rgba(255, 255, 255, 0.85);
7498
+ border-color: rgba(125, 91, 57, 0.16);
7499
+ transform: translateY(-1px);
7500
+ box-shadow: 0 4px 12px rgba(125, 91, 57, 0.08);
7501
+ }
7502
+ .session-item:hover::before {
7503
+ opacity: 0.45;
7504
+ transform: scaleY(1);
7505
+ }
7506
+ .session-item.active {
7507
+ background: linear-gradient(180deg, #fff7ef 0%, #fff1de 100%);
7508
+ border-color: var(--accent);
7509
+ box-shadow:
7510
+ 0 0 0 1px var(--accent-muted),
7511
+ 0 4px 14px rgba(197, 101, 61, 0.14);
7512
+ }
7513
+ .session-item.active::before {
7514
+ opacity: 1;
7515
+ transform: scaleY(1);
7516
+ }
7517
+ .session-item.selected {
7518
+ background: linear-gradient(180deg, #fff7ef 0%, #fff3e3 100%);
7519
+ border-color: rgba(197, 101, 61, 0.4);
7520
+ }
7521
+ .session-item.selected::before {
7522
+ opacity: 0.7;
7523
+ transform: scaleY(1);
7524
+ }
7525
+ .session-item:active {
7526
+ transform: translateY(0) scale(0.99);
7527
+ transition-duration: 0.08s;
7528
+ }
7529
+
7530
+ /* Title typography */
7531
+ .session-title,
7532
+ .session-command {
7533
+ font-size: 0.8125rem;
7534
+ font-weight: 600;
7535
+ letter-spacing: -0.005em;
7536
+ }
7537
+ .session-title-row { gap: 10px; }
7538
+
7539
+ /* Time stamp — lighter */
7540
+ .session-time {
7541
+ font-size: 0.6875rem;
7542
+ color: var(--text-muted);
7543
+ font-variant-numeric: tabular-nums;
7544
+ }
7545
+ .session-activity { opacity: 1; color: var(--accent); font-weight: 500; }
7546
+
7547
+ /* Status badge — keep functional colors but soften the pill */
7548
+ .session-status {
7549
+ padding: 2px 8px;
7550
+ font-size: 0.625rem;
7551
+ font-weight: 700;
7552
+ letter-spacing: 0.02em;
7553
+ }
7554
+
7555
+ /* ID chip — quiet mono */
7556
+ .session-id {
7557
+ background: rgba(125, 91, 57, 0.08);
7558
+ color: var(--text-tertiary);
7559
+ font-size: 0.625rem;
7560
+ padding: 1.5px 6px;
7561
+ border-radius: 4px;
7562
+ }
7563
+
7564
+ /* ── Session action mini-buttons (resume / merge / delete) ── */
7565
+ .session-action-btn {
7566
+ width: 28px;
7567
+ height: 28px;
7568
+ min-width: 28px;
7569
+ min-height: 28px;
7570
+ border-radius: 50%;
7571
+ background: rgba(125, 91, 57, 0.06);
7572
+ color: var(--text-tertiary);
7573
+ border: none;
7574
+ transition:
7575
+ background 0.16s ease,
7576
+ color 0.16s ease,
7577
+ transform 0.18s cubic-bezier(0.34, 1.4, 0.64, 1);
7578
+ }
7579
+ .session-action-btn:hover {
7580
+ background: rgba(125, 91, 57, 0.14);
7581
+ color: var(--text-primary);
7582
+ transform: translateY(-1px);
7583
+ }
7584
+ .session-action-btn.delete-btn:hover {
7585
+ background: rgba(178, 79, 69, 0.14);
7586
+ color: var(--danger);
7587
+ }
7588
+ .session-action-btn.merge-btn:hover {
7589
+ background: rgba(79, 122, 88, 0.16);
7590
+ color: var(--success);
7591
+ }
7592
+ .session-action-btn:active {
7593
+ transform: scale(0.9);
7594
+ transition-duration: 0.06s;
7595
+ }
7596
+ .session-action-btn:focus-visible {
7597
+ outline: 2px solid var(--accent);
7598
+ outline-offset: 2px;
7599
+ }
7600
+
7601
+ /* Session manage check — iOS-style mini checkbox */
7602
+ .session-manage-check span {
7603
+ width: 20px;
7604
+ height: 20px;
7605
+ border-radius: 6px;
7606
+ border: 1.5px solid rgba(125, 91, 57, 0.22);
7607
+ background: rgba(255, 255, 255, 0.6);
7608
+ box-shadow: inset 0 1px 1px rgba(125, 91, 57, 0.04);
7609
+ transition:
7610
+ background 0.16s ease,
7611
+ border-color 0.16s ease,
7612
+ box-shadow 0.16s ease;
7613
+ }
7614
+ .session-manage-check input:checked + span {
7615
+ background: var(--accent);
7616
+ border-color: var(--accent);
7617
+ box-shadow:
7618
+ 0 1px 3px rgba(197, 101, 61, 0.3),
7619
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
7620
+ }
7621
+ .session-manage-check input:checked + span::after {
7622
+ content: "";
7623
+ width: 6px;
7624
+ height: 10px;
7625
+ border-right: 2px solid #fff;
7626
+ border-bottom: 2px solid #fff;
7627
+ transform: rotate(45deg) translate(-1px, -1px);
7628
+ }
7629
+
7630
+ /* ── Sidebar footer — hairline + clean tile actions ── */
7631
+ .sidebar-footer {
7632
+ background: transparent;
7633
+ border-top: 1px solid rgba(125, 91, 57, 0.06);
7634
+ padding: 14px;
7635
+ }
7636
+ .sidebar-footer-actions .btn {
7637
+ background: rgba(255, 255, 255, 0.45);
7638
+ border: 1px solid rgba(125, 91, 57, 0.06);
7639
+ border-radius: 10px;
7640
+ padding: 8px 4px;
7641
+ gap: 4px;
7642
+ font-size: 0.625rem;
7643
+ font-weight: 600;
7644
+ letter-spacing: 0.01em;
7645
+ color: var(--text-tertiary);
7646
+ transition:
7647
+ background 0.16s ease,
7648
+ border-color 0.16s ease,
7649
+ color 0.16s ease,
7650
+ transform 0.16s ease,
7651
+ box-shadow 0.16s ease;
7652
+ }
7653
+ .sidebar-footer-actions .btn:hover {
7654
+ background: rgba(255, 255, 255, 0.85);
7655
+ border-color: rgba(125, 91, 57, 0.16);
7656
+ color: var(--text-primary);
7657
+ transform: translateY(-1px);
7658
+ box-shadow: 0 2px 8px rgba(125, 91, 57, 0.06);
7659
+ }
7660
+ .sidebar-footer-actions .btn:active {
7661
+ transform: scale(0.96);
7662
+ transition-duration: 0.06s;
7663
+ }
7664
+ .sidebar-footer-actions .btn.active {
7665
+ background: linear-gradient(180deg, #fff7ef 0%, #fff1de 100%);
7666
+ border-color: rgba(197, 101, 61, 0.32);
7667
+ color: var(--accent);
7668
+ box-shadow: 0 0 0 1px var(--accent-muted);
7669
+ }
7670
+ .sidebar-footer-actions .btn.sidebar-logout:hover {
7671
+ background: rgba(178, 79, 69, 0.08);
7672
+ border-color: rgba(178, 79, 69, 0.2);
7673
+ color: var(--danger);
7674
+ opacity: 1;
7675
+ }
7676
+
7677
+ /* New-session primary button — slightly larger shadow to distinguish */
7678
+ .sidebar-footer .btn-primary {
7679
+ box-shadow:
7680
+ 0 6px 16px -4px rgba(197, 101, 61, 0.4),
7681
+ 0 2px 6px -2px rgba(197, 101, 61, 0.3),
7682
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
7683
+ border-radius: 12px;
7684
+ }
7685
+ .sidebar-footer .btn-primary:hover {
7686
+ box-shadow:
7687
+ 0 10px 24px -4px rgba(197, 101, 61, 0.46),
7688
+ 0 4px 10px -2px rgba(197, 101, 61, 0.34),
7689
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
7690
+ }
7691
+
7692
+ /* Sidebar empty state */
7693
+ .sessions-list:empty::before {
7694
+ color: var(--text-muted);
7695
+ font-size: 0.8125rem;
7696
+ letter-spacing: 0.01em;
7697
+ }
7698
+
7699
+ /* Fallback for browsers without backdrop-filter */
7700
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
7701
+ .sidebar { background: rgba(255, 251, 245, 0.98); }
7702
+ .drawer-backdrop { background: rgba(20, 14, 8, 0.55); }
7703
+ .sidebar-header-overflow { background: #fffaf2; }
7704
+ }
7705
+
7706
+ .modal-header {
7707
+ display: flex;
7708
+ align-items: center;
7709
+ justify-content: space-between;
7710
+ padding: 18px 22px 16px;
7711
+ border-bottom: 1px solid var(--border-subtle);
7712
+ flex-shrink: 0;
7713
+ min-height: 56px;
7714
+ }
7715
+
7716
+ .modal-title { font-size: 1.0625rem; font-weight: 600; color: var(--text-primary); letter-spacing: -0.01em; }
7717
+ .modal-body { padding: 22px; overflow-y: auto; flex: 1 1 auto; min-height: 0; }
7718
+ .modal-body .field { margin-bottom: 14px; }
7719
+ .modal-body .field:last-of-type { margin-bottom: 16px; }
7720
+ .session-kind-hint-row {
7721
+ display: flex;
7722
+ align-items: center;
7723
+ justify-content: space-between;
7724
+ gap: 12px;
7725
+ }
7726
+ .session-kind-hint-row #session-kind-description {
7727
+ flex: 1 1 auto;
6616
7728
  }
6617
7729
  .session-inline-toggle {
6618
7730
  display: inline-flex;
@@ -6926,8 +8038,7 @@
6926
8038
  /* 平板触摸优化 - 44px触摸区域 */
6927
8039
  .session-item { min-height: 52px; padding: 12px 12px; }
6928
8040
  .session-action-btn { width: 36px; height: 36px; min-width: 36px; min-height: 36px; }
6929
- .session-manage-toggle,
6930
- .session-manage-btn { min-height: 36px; padding: 8px 12px; }
8041
+ .session-manage-bar .btn { min-height: 32px; }
6931
8042
  .claude-history-toggle { min-height: 40px; display: flex; align-items: center; }
6932
8043
  .sidebar-footer-actions .btn { min-height: 44px; }
6933
8044
  .tree-item { min-height: 44px; padding: 8px 12px; }
@@ -8046,15 +9157,7 @@
8046
9157
  filter: brightness(1.1);
8047
9158
  }
8048
9159
 
8049
- /* Settings restart button */
8050
- .btn-success {
8051
- background: var(--success);
8052
- color: white;
8053
- border-color: var(--success);
8054
- }
8055
- .btn-success:hover:not(:disabled) {
8056
- filter: brightness(1.1);
8057
- }
9160
+ /* .btn-success defined globally in the button system above */
8058
9161
 
8059
9162
  /* Restart overlay */
8060
9163
  .restart-overlay {
@@ -8902,7 +10005,8 @@
8902
10005
  background: color-mix(in srgb, var(--accent) 6%, var(--bg-secondary));
8903
10006
  }
8904
10007
 
8905
- /* Switch toggle (iOS style) */
10008
+ /* ── iOS-style switch — global default for any
10009
+ <input.switch-toggle> + <span.switch-slider> markup ── */
8906
10010
  .switch-toggle {
8907
10011
  position: absolute;
8908
10012
  opacity: 0;
@@ -8913,31 +10017,40 @@
8913
10017
  .switch-slider {
8914
10018
  position: relative;
8915
10019
  display: inline-block;
8916
- width: 40px;
8917
- height: 22px;
8918
- min-width: 40px;
8919
- background: #c4b8a8;
8920
- border-radius: 11px;
8921
- transition: background 0.25s;
10020
+ width: 44px;
10021
+ height: 26px;
10022
+ min-width: 44px;
10023
+ border-radius: 13px;
10024
+ background: rgba(125, 91, 57, 0.22);
10025
+ box-shadow: inset 0 1px 1px rgba(125, 91, 57, 0.18);
10026
+ transition: background 0.22s ease, box-shadow 0.22s ease;
10027
+ cursor: pointer;
8922
10028
  }
8923
10029
  .switch-slider::after {
8924
10030
  content: "";
8925
10031
  position: absolute;
8926
- top: 3px;
8927
- left: 3px;
8928
- width: 16px;
8929
- height: 16px;
10032
+ top: 2px;
10033
+ left: 2px;
10034
+ width: 22px;
10035
+ height: 22px;
8930
10036
  background: #fff;
8931
10037
  border-radius: 50%;
8932
- transition: transform 0.25s;
8933
- box-shadow: 0 1px 3px rgba(0,0,0,0.2);
10038
+ box-shadow:
10039
+ 0 2px 4px rgba(20, 14, 8, 0.18),
10040
+ 0 0 0 0.5px rgba(125, 91, 57, 0.06);
10041
+ transition: transform 0.24s cubic-bezier(0.34, 1.4, 0.64, 1);
8934
10042
  }
8935
10043
  .switch-toggle:checked + .switch-slider {
8936
10044
  background: var(--accent);
10045
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
8937
10046
  }
8938
10047
  .switch-toggle:checked + .switch-slider::after {
8939
10048
  transform: translateX(18px);
8940
10049
  }
10050
+ .switch-toggle:focus-visible + .switch-slider {
10051
+ outline: 2px solid var(--accent);
10052
+ outline-offset: 2px;
10053
+ }
8941
10054
 
8942
10055
  .field-file {
8943
10056
  font-size: 0.8rem;
@@ -10471,10 +11584,93 @@
10471
11584
  min-width: 0;
10472
11585
  accent-color: var(--accent);
10473
11586
  }
11587
+
11588
+ /* iOS-style custom range slider — works inside any modal/panel */
11589
+ input[type="range"].settings-range {
11590
+ -webkit-appearance: none;
11591
+ appearance: none;
11592
+ height: 22px;
11593
+ background: transparent;
11594
+ cursor: pointer;
11595
+ padding: 0;
11596
+ margin: 0;
11597
+ /* JS sets --range-fill on input/change so the filled portion follows the value */
11598
+ --range-fill: 50%;
11599
+ }
11600
+ /* WebKit / Blink */
11601
+ input[type="range"].settings-range::-webkit-slider-runnable-track {
11602
+ height: 4px;
11603
+ border-radius: 2px;
11604
+ background: linear-gradient(to right,
11605
+ var(--accent) 0%,
11606
+ var(--accent) var(--range-fill, 50%),
11607
+ rgba(125, 91, 57, 0.2) var(--range-fill, 50%),
11608
+ rgba(125, 91, 57, 0.2) 100%);
11609
+ border: none;
11610
+ }
11611
+ input[type="range"].settings-range::-webkit-slider-thumb {
11612
+ -webkit-appearance: none;
11613
+ appearance: none;
11614
+ width: 20px;
11615
+ height: 20px;
11616
+ border-radius: 50%;
11617
+ background: #fff;
11618
+ border: none;
11619
+ box-shadow:
11620
+ 0 2px 6px rgba(20, 14, 8, 0.22),
11621
+ 0 0 0 0.5px rgba(125, 91, 57, 0.1);
11622
+ margin-top: -8px;
11623
+ transition: transform 0.16s ease, box-shadow 0.16s ease;
11624
+ }
11625
+ input[type="range"].settings-range:hover::-webkit-slider-thumb {
11626
+ transform: scale(1.08);
11627
+ }
11628
+ input[type="range"].settings-range:active::-webkit-slider-thumb {
11629
+ transform: scale(1.16);
11630
+ box-shadow:
11631
+ 0 4px 10px rgba(20, 14, 8, 0.28),
11632
+ 0 0 0 8px rgba(197, 101, 61, 0.12),
11633
+ 0 0 0 0.5px rgba(125, 91, 57, 0.1);
11634
+ }
11635
+ input[type="range"].settings-range:focus-visible::-webkit-slider-thumb {
11636
+ box-shadow:
11637
+ 0 2px 6px rgba(20, 14, 8, 0.22),
11638
+ 0 0 0 4px var(--accent-muted),
11639
+ 0 0 0 0.5px rgba(125, 91, 57, 0.1);
11640
+ }
11641
+ /* Firefox */
11642
+ input[type="range"].settings-range::-moz-range-track {
11643
+ height: 4px;
11644
+ border-radius: 2px;
11645
+ background: rgba(125, 91, 57, 0.2);
11646
+ border: none;
11647
+ }
11648
+ input[type="range"].settings-range::-moz-range-progress {
11649
+ height: 4px;
11650
+ border-radius: 2px;
11651
+ background: var(--accent);
11652
+ border: none;
11653
+ }
11654
+ input[type="range"].settings-range::-moz-range-thumb {
11655
+ width: 20px;
11656
+ height: 20px;
11657
+ border: none;
11658
+ border-radius: 50%;
11659
+ background: #fff;
11660
+ cursor: pointer;
11661
+ box-shadow:
11662
+ 0 2px 6px rgba(20, 14, 8, 0.22),
11663
+ 0 0 0 0.5px rgba(125, 91, 57, 0.1);
11664
+ transition: transform 0.16s ease;
11665
+ }
11666
+ input[type="range"].settings-range:hover::-moz-range-thumb { transform: scale(1.08); }
11667
+ input[type="range"].settings-range:active::-moz-range-thumb { transform: scale(1.16); }
11668
+
10474
11669
  .settings-range-value {
10475
- flex: 0 0 36px;
11670
+ flex: 0 0 44px;
10476
11671
  text-align: right;
10477
- font-size: 0.75rem;
11672
+ font-size: 0.8125rem;
11673
+ font-weight: 600;
10478
11674
  color: var(--text-secondary);
10479
11675
  font-variant-numeric: tabular-nums;
10480
11676
  }
@@ -10802,18 +11998,39 @@
10802
11998
  letter-spacing: 0.02em;
10803
11999
  white-space: nowrap;
10804
12000
  }
12001
+ /* Switch row inside quick-commit modal — same iOS rhythm as settings */
10805
12002
  .qc-checkbox-row {
10806
12003
  display: flex;
10807
12004
  align-items: center;
10808
- gap: 8px;
10809
- font-size: 0.85rem;
12005
+ justify-content: space-between;
12006
+ gap: 12px;
12007
+ padding: 11px 14px;
12008
+ background: rgba(255, 255, 255, 0.55);
12009
+ border: 1px solid rgba(125, 91, 57, 0.08);
12010
+ border-radius: 12px;
12011
+ box-shadow: 0 1px 1px rgba(125, 91, 57, 0.02);
12012
+ transition: background 0.16s ease, border-color 0.16s ease;
12013
+ user-select: none;
12014
+ }
12015
+ .qc-checkbox-row:hover {
12016
+ background: rgba(255, 255, 255, 0.78);
12017
+ border-color: rgba(125, 91, 57, 0.16);
12018
+ }
12019
+ .qc-checkbox-row:has(.switch-toggle:checked) {
12020
+ background: linear-gradient(180deg, #fff7ef 0%, #fff1de 100%);
12021
+ border-color: rgba(197, 101, 61, 0.3);
12022
+ }
12023
+ .qc-checkbox-label {
12024
+ flex: 1;
12025
+ min-width: 0;
12026
+ font-size: 0.8125rem;
12027
+ font-weight: 600;
10810
12028
  color: var(--text-primary);
10811
12029
  cursor: pointer;
10812
- user-select: none;
12030
+ line-height: 1.4;
10813
12031
  }
10814
- .qc-checkbox-row input[type="checkbox"] {
10815
- width: 16px;
10816
- height: 16px;
12032
+ .qc-switch {
12033
+ flex-shrink: 0;
10817
12034
  cursor: pointer;
10818
12035
  }
10819
12036
  .qc-message-row,