codexmate 0.0.16 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/web-ui/styles.css CHANGED
@@ -27,9 +27,7 @@
27
27
  --color-error: #C44536;
28
28
 
29
29
  --bg-warm-gradient:
30
- radial-gradient(circle at 16% 10%, rgba(201, 94, 75, 0.14), transparent 48%),
31
- radial-gradient(circle at 90% 6%, rgba(255, 255, 255, 0.9), transparent 42%),
32
- linear-gradient(135deg, #F8F2EA 0%, #F1E4D8 44%, #F8F2EA 100%);
30
+ linear-gradient(180deg, #F8F2EA 0%, #F8F2EA 100%);
33
31
 
34
32
  /* 字体系统 */
35
33
  --font-family-body: 'JetBrainsMono Nerd Font Mono', 'OPPO Sans 4.0', 'Fira Mono', 'JetBrains Mono', 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', monospace;
@@ -89,6 +87,145 @@
89
87
  --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
90
88
  }
91
89
 
90
+ /* ============================================
91
+ 手机桌面 UA 兜底:触控设备强制紧凑排版
92
+ ============================================ */
93
+ body.force-compact {
94
+ --font-size-title: 20px;
95
+ --font-size-body: 16px;
96
+ --font-size-secondary: 14px;
97
+ --font-size-caption: 12px;
98
+ }
99
+
100
+ body.force-compact .container {
101
+ max-width: 760px;
102
+ padding: 10px 10px 16px;
103
+ }
104
+
105
+ body.force-compact .provider-fast-switch {
106
+ position: sticky;
107
+ top: 8px;
108
+ z-index: 16;
109
+ }
110
+
111
+ body.force-compact .provider-fast-switch-select {
112
+ min-height: 44px;
113
+ font-size: 16px;
114
+ }
115
+
116
+ body.force-compact .app-shell {
117
+ grid-template-columns: 1fr;
118
+ gap: 12px;
119
+ }
120
+
121
+ body.force-compact .main-panel {
122
+ position: relative;
123
+ top: auto;
124
+ align-self: stretch;
125
+ width: 100%;
126
+ height: auto;
127
+ }
128
+
129
+ body.force-compact .side-rail,
130
+ body.force-compact .status-inspector {
131
+ display: none;
132
+ }
133
+
134
+ body.force-compact .top-tabs {
135
+ display: grid !important;
136
+ grid-template-columns: repeat(1, minmax(0, 1fr));
137
+ }
138
+
139
+ @media (min-width: 541px) {
140
+ body.force-compact .top-tabs {
141
+ grid-template-columns: repeat(2, minmax(0, 1fr));
142
+ }
143
+ }
144
+
145
+ body.force-compact .hero-logo {
146
+ display: block;
147
+ }
148
+
149
+ body.force-compact .hero-github {
150
+ display: flex;
151
+ }
152
+
153
+ body.force-compact .main-panel {
154
+ padding: 14px 12px;
155
+ }
156
+
157
+ body.force-compact .hero-title {
158
+ font-size: 34px;
159
+ }
160
+
161
+ body.force-compact .card {
162
+ display: flex;
163
+ flex-direction: column;
164
+ align-items: flex-start;
165
+ justify-content: flex-start;
166
+ padding: 12px;
167
+ gap: 8px;
168
+ }
169
+
170
+ body.force-compact .card-leading {
171
+ align-items: flex-start;
172
+ width: 100%;
173
+ }
174
+
175
+ body.force-compact .card-content {
176
+ width: 100%;
177
+ }
178
+
179
+ body.force-compact .card-title,
180
+ body.force-compact .card-title > span:first-child {
181
+ white-space: normal;
182
+ overflow: visible;
183
+ text-overflow: clip;
184
+ overflow-wrap: anywhere;
185
+ }
186
+
187
+ body.force-compact .card-subtitle {
188
+ white-space: normal;
189
+ overflow: hidden;
190
+ text-overflow: clip;
191
+ overflow-wrap: anywhere;
192
+ display: -webkit-box;
193
+ -webkit-line-clamp: 2;
194
+ -webkit-box-orient: vertical;
195
+ }
196
+
197
+ body.force-compact .card-trailing {
198
+ width: 100%;
199
+ margin-top: 0;
200
+ grid-auto-flow: row;
201
+ grid-auto-columns: 1fr;
202
+ justify-content: stretch;
203
+ justify-items: end;
204
+ }
205
+
206
+ body.force-compact .card-trailing .card-actions {
207
+ width: 100%;
208
+ justify-content: flex-end;
209
+ justify-self: stretch;
210
+ flex-wrap: wrap;
211
+ }
212
+
213
+ body.force-compact .card-actions {
214
+ opacity: 1;
215
+ transform: none;
216
+ }
217
+
218
+ body.force-compact .card-trailing .pill,
219
+ body.force-compact .card-trailing .latency {
220
+ justify-self: end;
221
+ }
222
+
223
+ body.force-compact .btn-add,
224
+ body.force-compact .btn-tool,
225
+ body.force-compact .card-action-btn {
226
+ min-height: 44px;
227
+ }
228
+
92
229
  /* ============================================
93
230
  基础重置
94
231
  ============================================ */
@@ -240,10 +377,8 @@ body::before {
240
377
  position: fixed;
241
378
  inset: 0;
242
379
  background-image:
243
- radial-gradient(circle at 12% 18%, rgba(201, 94, 75, 0.1), transparent 38%),
244
- repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.4) 0 1px, transparent 1px 120px),
245
- repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.35) 0 1px, transparent 1px 120px);
246
- opacity: 0.28;
380
+ linear-gradient(180deg, rgba(255, 255, 255, 0.18), rgba(255, 255, 255, 0));
381
+ opacity: 0.16;
247
382
  pointer-events: none;
248
383
  z-index: 0;
249
384
  }
@@ -254,10 +389,10 @@ body::after {
254
389
  position: fixed;
255
390
  inset: 0;
256
391
  background-image:
257
- linear-gradient(90deg, rgba(255, 255, 255, 0.15) 1px, transparent 1px),
258
- linear-gradient(0deg, rgba(255, 255, 255, 0.12) 1px, transparent 1px);
259
- background-size: 120px 120px;
260
- opacity: 0.22;
392
+ linear-gradient(90deg, rgba(255, 255, 255, 0.08) 1px, transparent 1px),
393
+ linear-gradient(0deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
394
+ background-size: 180px 180px;
395
+ opacity: 0.08;
261
396
  pointer-events: none;
262
397
  z-index: 0;
263
398
  }
@@ -267,7 +402,7 @@ body::after {
267
402
  ============================================ */
268
403
  .container {
269
404
  width: 100%;
270
- max-width: 1460px;
405
+ max-width: 2200px;
271
406
  margin: 0 auto;
272
407
  padding: 16px 12px 28px;
273
408
  position: relative;
@@ -331,7 +466,7 @@ body::after {
331
466
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 247, 240, 0.95) 100%);
332
467
  color: var(--color-text-secondary);
333
468
  cursor: pointer;
334
- transition: all var(--transition-normal) var(--ease-spring);
469
+ transition: none;
335
470
  display: flex;
336
471
  flex-direction: column;
337
472
  gap: 6px;
@@ -352,6 +487,21 @@ body::after {
352
487
  box-shadow: var(--shadow-float);
353
488
  }
354
489
 
490
+ .side-item.nav-intent-active {
491
+ border-color: var(--color-brand);
492
+ background: linear-gradient(135deg, rgba(201, 94, 75, 0.14), rgba(255, 255, 255, 0.96));
493
+ color: var(--color-text-primary);
494
+ box-shadow: var(--shadow-float);
495
+ }
496
+
497
+ .side-item.nav-intent-inactive,
498
+ .side-item.active.nav-intent-inactive {
499
+ border-color: var(--color-border-soft);
500
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 247, 240, 0.95) 100%);
501
+ color: var(--color-text-secondary);
502
+ box-shadow: var(--shadow-subtle);
503
+ }
504
+
355
505
  .side-item-title {
356
506
  font-size: var(--font-size-body);
357
507
  font-weight: var(--font-weight-secondary);
@@ -615,6 +765,47 @@ body::after {
615
765
  word-break: break-word;
616
766
  }
617
767
 
768
+ .provider-fast-switch {
769
+ margin: 0 0 var(--spacing-sm);
770
+ padding: 10px 12px;
771
+ border-radius: var(--radius-lg);
772
+ border: 1px solid rgba(216, 201, 184, 0.6);
773
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 249, 243, 0.96) 100%);
774
+ box-shadow: var(--shadow-subtle);
775
+ display: grid;
776
+ gap: 6px;
777
+ }
778
+
779
+ .provider-fast-switch-label {
780
+ font-size: var(--font-size-caption);
781
+ color: var(--color-text-tertiary);
782
+ letter-spacing: 0.02em;
783
+ }
784
+
785
+ .provider-fast-switch-select {
786
+ width: 100%;
787
+ min-height: 40px;
788
+ padding: 8px 12px;
789
+ padding-right: 38px;
790
+ border: 1px solid var(--color-border-soft);
791
+ border-radius: var(--radius-sm);
792
+ font-size: var(--font-size-body);
793
+ color: var(--color-text-primary);
794
+ background-color: var(--color-surface-alt);
795
+ outline: none;
796
+ cursor: pointer;
797
+ appearance: none;
798
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23505A66' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
799
+ background-repeat: no-repeat;
800
+ background-position: right 12px center;
801
+ background-size: 12px;
802
+ }
803
+
804
+ .provider-fast-switch-select:focus {
805
+ border-color: var(--color-brand);
806
+ box-shadow: var(--shadow-input-focus);
807
+ }
808
+
618
809
  .main-panel {
619
810
  min-width: 0;
620
811
  background: rgba(255, 255, 255, 0.95);
@@ -783,7 +974,7 @@ body::after {
783
974
  color: var(--color-text-secondary);
784
975
  text-align: center;
785
976
  cursor: pointer;
786
- transition: all var(--transition-normal) var(--ease-spring);
977
+ transition: none;
787
978
  box-shadow: var(--shadow-subtle);
788
979
  }
789
980
 
@@ -800,6 +991,25 @@ body::after {
800
991
  box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
801
992
  }
802
993
 
994
+ .top-tab.nav-intent-active {
995
+ border-color: var(--color-brand);
996
+ color: var(--color-text-primary);
997
+ background: linear-gradient(135deg, rgba(201, 94, 75, 0.12), rgba(255, 255, 255, 0.95));
998
+ box-shadow: 0 10px 24px rgba(27, 23, 20, 0.08);
999
+ }
1000
+
1001
+ .top-tab.nav-intent-inactive,
1002
+ .top-tab.active.nav-intent-inactive {
1003
+ border-color: rgba(216, 201, 184, 0.55);
1004
+ color: var(--color-text-secondary);
1005
+ background: rgba(255, 255, 255, 0.96);
1006
+ box-shadow: var(--shadow-subtle);
1007
+ }
1008
+
1009
+ #panel-sessions.session-panel-fast-hidden {
1010
+ display: none !important;
1011
+ }
1012
+
803
1013
  .config-subtabs {
804
1014
  display: flex;
805
1015
  gap: 8px;
@@ -836,6 +1046,25 @@ body::after {
836
1046
  box-shadow: var(--shadow-card);
837
1047
  }
838
1048
 
1049
+ .settings-subtabs {
1050
+ margin-bottom: var(--spacing-sm);
1051
+ }
1052
+
1053
+ .settings-tab-badge {
1054
+ display: inline-flex;
1055
+ align-items: center;
1056
+ justify-content: center;
1057
+ min-width: 18px;
1058
+ height: 18px;
1059
+ margin-left: 6px;
1060
+ padding: 0 6px;
1061
+ border-radius: 999px;
1062
+ background: rgba(210, 107, 90, 0.14);
1063
+ color: var(--color-text-secondary);
1064
+ font-size: 11px;
1065
+ line-height: 1;
1066
+ }
1067
+
839
1068
  .content-wrapper {
840
1069
  background: rgba(255, 255, 255, 0.94);
841
1070
  border: 1px solid rgba(216, 201, 184, 0.35);
@@ -1097,8 +1326,9 @@ body::after {
1097
1326
  grid-auto-columns: max-content;
1098
1327
  column-gap: var(--spacing-xs);
1099
1328
  row-gap: 6px;
1100
- align-items: center;
1329
+ align-items: start;
1101
1330
  justify-content: end;
1331
+ align-self: flex-start;
1102
1332
  }
1103
1333
 
1104
1334
  .card-trailing .card-actions {
@@ -1271,6 +1501,22 @@ body::after {
1271
1501
  margin-bottom: var(--spacing-xs);
1272
1502
  }
1273
1503
 
1504
+ .settings-tab-header {
1505
+ align-items: flex-start;
1506
+ }
1507
+
1508
+ .settings-tab-actions {
1509
+ display: flex;
1510
+ flex-wrap: wrap;
1511
+ gap: 8px;
1512
+ justify-content: flex-end;
1513
+ }
1514
+
1515
+ .settings-tab-actions .btn-tool,
1516
+ .settings-tab-actions .btn-tool-compact {
1517
+ width: auto;
1518
+ }
1519
+
1274
1520
  .selector-title {
1275
1521
  font-size: var(--font-size-caption);
1276
1522
  font-weight: var(--font-weight-secondary);
@@ -1645,11 +1891,11 @@ body::after {
1645
1891
 
1646
1892
  .session-source {
1647
1893
  font-size: var(--font-size-caption);
1648
- color: var(--color-brand);
1649
- border: 1px solid rgba(210, 107, 90, 0.25);
1894
+ color: var(--color-text-tertiary);
1895
+ border: 1px solid var(--color-border-soft);
1650
1896
  border-radius: 999px;
1651
1897
  padding: 2px 8px;
1652
- background: rgba(210, 107, 90, 0.08);
1898
+ background: var(--color-surface-alt);
1653
1899
  white-space: nowrap;
1654
1900
  }
1655
1901
 
@@ -1670,6 +1916,12 @@ body::after {
1670
1916
  flex-shrink: 0;
1671
1917
  }
1672
1918
 
1919
+ .trash-list-footer {
1920
+ display: flex;
1921
+ justify-content: center;
1922
+ margin-top: var(--spacing-sm);
1923
+ }
1924
+
1673
1925
  .btn-session-export,
1674
1926
  .btn-session-open,
1675
1927
  .btn-session-clone,
@@ -1775,9 +2027,113 @@ body::after {
1775
2027
  box-shadow: inset 0 0 0 6px rgba(255, 255, 255, 0.7);
1776
2028
  }
1777
2029
 
2030
+ .trash-list {
2031
+ display: grid;
2032
+ gap: 12px;
2033
+ margin-top: 12px;
2034
+ }
2035
+
2036
+ .trash-item.session-item {
2037
+ min-height: auto;
2038
+ height: auto;
2039
+ cursor: default;
2040
+ content-visibility: visible;
2041
+ contain-intrinsic-size: auto;
2042
+ }
2043
+
2044
+ .trash-item.session-item:hover,
2045
+ .trash-item.session-item:active {
2046
+ transform: none;
2047
+ border-color: var(--color-border-soft);
2048
+ background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
2049
+ box-shadow: var(--shadow-subtle);
2050
+ }
2051
+
2052
+ .trash-item.session-item::before {
2053
+ background: linear-gradient(180deg, rgba(70, 86, 110, 0.26), rgba(70, 86, 110, 0.08));
2054
+ }
2055
+
2056
+ .trash-item-main {
2057
+ min-width: 0;
2058
+ flex: 1;
2059
+ }
2060
+
2061
+ .trash-item-mainline {
2062
+ display: flex;
2063
+ align-items: flex-start;
2064
+ gap: 8px;
2065
+ }
2066
+
2067
+ .trash-item-title {
2068
+ flex: 1;
2069
+ font-size: var(--font-size-body);
2070
+ font-weight: var(--font-weight-secondary);
2071
+ color: var(--color-text-primary);
2072
+ line-height: 1.4;
2073
+ display: -webkit-box;
2074
+ -webkit-line-clamp: 2;
2075
+ -webkit-box-orient: vertical;
2076
+ white-space: normal;
2077
+ overflow: hidden;
2078
+ overflow-wrap: anywhere;
2079
+ }
2080
+
2081
+ .trash-item-meta {
2082
+ margin-top: 6px;
2083
+ }
2084
+
2085
+ .trash-item-side {
2086
+ display: flex;
2087
+ flex-direction: column;
2088
+ align-items: flex-end;
2089
+ gap: 8px;
2090
+ flex-shrink: 0;
2091
+ min-width: 132px;
2092
+ }
2093
+
2094
+ .trash-item-actions {
2095
+ display: flex;
2096
+ align-self: flex-end;
2097
+ justify-content: flex-end;
2098
+ flex-wrap: wrap;
2099
+ gap: 8px;
2100
+ }
2101
+
2102
+ .trash-item-time {
2103
+ width: 100%;
2104
+ text-align: right;
2105
+ white-space: nowrap;
2106
+ color: var(--color-text-tertiary);
2107
+ }
2108
+
2109
+ .trash-item-path {
2110
+ margin-top: 8px;
2111
+ display: grid;
2112
+ grid-template-columns: 48px minmax(0, 1fr);
2113
+ gap: 8px;
2114
+ align-items: start;
2115
+ white-space: normal;
2116
+ overflow-wrap: anywhere;
2117
+ }
2118
+
2119
+ .trash-item-label {
2120
+ display: inline-block;
2121
+ color: var(--color-text-secondary);
2122
+ font-weight: var(--font-weight-secondary);
2123
+ }
2124
+
2125
+ .trash-item-path span:last-child {
2126
+ min-width: 0;
2127
+ word-break: break-word;
2128
+ }
2129
+
2130
+ .trash-item .session-count-badge {
2131
+ margin-top: 2px;
2132
+ }
2133
+
1778
2134
  .session-layout {
1779
2135
  display: grid;
1780
- grid-template-columns: minmax(215px, 295px) minmax(0, 1fr);
2136
+ grid-template-columns: minmax(260px, 360px) minmax(0, 1fr);
1781
2137
  gap: var(--spacing-sm);
1782
2138
  align-items: start;
1783
2139
  height: min(72vh, 760px);
@@ -1855,14 +2211,16 @@ body::after {
1855
2211
  border: 1px solid var(--color-border-soft);
1856
2212
  border-radius: var(--radius-sm);
1857
2213
  background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.92) 100%);
1858
- padding: 14px 16px;
2214
+ padding: 16px;
1859
2215
  cursor: pointer;
1860
2216
  transition: all var(--transition-fast) var(--ease-spring);
1861
2217
  user-select: none;
1862
2218
  min-width: 0;
1863
2219
  position: relative;
1864
2220
  overflow: hidden;
1865
- min-height: 88px;
2221
+ min-height: 102px;
2222
+ content-visibility: auto;
2223
+ contain-intrinsic-size: 102px;
1866
2224
  }
1867
2225
 
1868
2226
  .session-item-header {
@@ -1909,6 +2267,16 @@ body::after {
1909
2267
  box-shadow: 0 6px 16px rgba(210, 107, 90, 0.12);
1910
2268
  }
1911
2269
 
2270
+ .session-item.pinned {
2271
+ border-color: rgba(208, 88, 58, 0.42);
2272
+ background: linear-gradient(to bottom, rgba(210, 107, 90, 0.12) 0%, rgba(255, 251, 247, 0.98) 100%);
2273
+ box-shadow: 0 8px 18px rgba(210, 107, 90, 0.10);
2274
+ }
2275
+
2276
+ .session-item.pinned::before {
2277
+ background: linear-gradient(180deg, rgba(201, 94, 75, 0.8), rgba(201, 94, 75, 0.32));
2278
+ }
2279
+
1912
2280
  .session-item.active::before {
1913
2281
  background: linear-gradient(180deg, rgba(201, 94, 75, 0.9), rgba(201, 94, 75, 0.4));
1914
2282
  }
@@ -1917,13 +2285,14 @@ body::after {
1917
2285
  font-size: var(--font-size-body);
1918
2286
  font-weight: var(--font-weight-secondary);
1919
2287
  color: var(--color-text-primary);
1920
- line-height: 1.5;
1921
- display: block;
1922
- white-space: nowrap;
2288
+ line-height: 1.4;
2289
+ display: -webkit-box;
2290
+ -webkit-line-clamp: 2;
2291
+ -webkit-box-orient: vertical;
2292
+ white-space: normal;
1923
2293
  overflow: hidden;
1924
- text-overflow: ellipsis;
1925
2294
  flex: 1;
1926
- max-width: 75%;
2295
+ max-width: none;
1927
2296
  }
1928
2297
 
1929
2298
  .session-item-actions {
@@ -1966,6 +2335,26 @@ body::after {
1966
2335
  height: 16px;
1967
2336
  }
1968
2337
 
2338
+ .session-item-pin {
2339
+ border-color: rgba(208, 88, 58, 0.24);
2340
+ }
2341
+
2342
+ .session-item-pin .pin-icon,
2343
+ .session-item-pin svg {
2344
+ color: rgba(208, 88, 58, 0.78);
2345
+ }
2346
+
2347
+ .session-item.pinned .session-item-pin {
2348
+ background: rgba(208, 88, 58, 0.16);
2349
+ border-color: rgba(208, 88, 58, 0.46);
2350
+ box-shadow: inset 0 0 0 1px rgba(208, 88, 58, 0.08);
2351
+ }
2352
+
2353
+ .session-item.pinned .session-item-pin .pin-icon,
2354
+ .session-item.pinned .session-item-pin svg {
2355
+ color: var(--color-brand-dark);
2356
+ }
2357
+
1969
2358
  .session-item-sub.session-item-snippet,
1970
2359
  .session-preview-meta,
1971
2360
  .session-preview-title {
@@ -2123,6 +2512,7 @@ body::after {
2123
2512
  display: flex;
2124
2513
  flex-direction: column;
2125
2514
  gap: 10px;
2515
+ contain: layout style;
2126
2516
  }
2127
2517
 
2128
2518
  .session-timeline {
@@ -2162,21 +2552,22 @@ body::after {
2162
2552
  transform: translate(-50%, -50%);
2163
2553
  cursor: pointer;
2164
2554
  padding: 0;
2165
- transition: transform var(--transition-fast) var(--ease-spring), background-color var(--transition-fast) var(--ease-spring), border-color var(--transition-fast) var(--ease-spring), box-shadow var(--transition-fast) var(--ease-spring);
2555
+ transition: none;
2556
+ will-change: auto;
2166
2557
  }
2167
2558
 
2168
2559
  .session-timeline-node:hover {
2169
- transform: translate(-50%, -50%) scale(1.2);
2560
+ transform: translate(-50%, -50%);
2170
2561
  border-color: rgba(201, 94, 75, 0.85);
2171
2562
  background: rgba(255, 255, 255, 1);
2172
- box-shadow: 0 0 0 3px rgba(201, 94, 75, 0.15);
2563
+ box-shadow: none;
2173
2564
  }
2174
2565
 
2175
2566
  .session-timeline-node.active {
2176
- transform: translate(-50%, -50%) scale(1.2);
2567
+ transform: translate(-50%, -50%);
2177
2568
  border-color: rgba(201, 94, 75, 0.95);
2178
2569
  background: rgba(201, 94, 75, 0.95);
2179
- box-shadow: 0 0 0 3px rgba(201, 94, 75, 0.2);
2570
+ box-shadow: none;
2180
2571
  }
2181
2572
 
2182
2573
  .session-timeline-current {
@@ -2200,6 +2591,7 @@ body::after {
2200
2591
  background: rgba(255, 255, 255, 0.75);
2201
2592
  position: relative;
2202
2593
  box-shadow: 0 2px 6px rgba(31, 26, 23, 0.04);
2594
+ contain: layout style paint;
2203
2595
  }
2204
2596
 
2205
2597
  .session-msg.user {
@@ -2371,6 +2763,44 @@ body::after {
2371
2763
  .session-toolbar-group.session-toolbar-actions .btn-tool {
2372
2764
  width: 100%;
2373
2765
  }
2766
+
2767
+ .trash-item-header {
2768
+ flex-direction: column;
2769
+ align-items: stretch;
2770
+ gap: 10px;
2771
+ }
2772
+
2773
+ .trash-item-mainline {
2774
+ flex-direction: column;
2775
+ align-items: flex-start;
2776
+ gap: 6px;
2777
+ }
2778
+
2779
+ .trash-item-side {
2780
+ width: 100%;
2781
+ min-width: 0;
2782
+ align-items: stretch;
2783
+ gap: 10px;
2784
+ }
2785
+
2786
+ .trash-item-actions {
2787
+ display: grid;
2788
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2789
+ justify-content: flex-start;
2790
+ width: 100%;
2791
+ }
2792
+
2793
+ .trash-item-actions .btn-mini {
2794
+ width: 100%;
2795
+ min-height: 40px;
2796
+ display: inline-flex;
2797
+ align-items: center;
2798
+ justify-content: center;
2799
+ }
2800
+
2801
+ .trash-item-time {
2802
+ text-align: right;
2803
+ }
2374
2804
  }
2375
2805
 
2376
2806
  .btn[disabled] {
@@ -2454,6 +2884,22 @@ body::after {
2454
2884
  letter-spacing: -0.01em;
2455
2885
  }
2456
2886
 
2887
+ .confirm-dialog {
2888
+ max-width: 460px;
2889
+ }
2890
+
2891
+ .confirm-dialog-message {
2892
+ font-size: var(--font-size-body);
2893
+ line-height: 1.7;
2894
+ color: var(--color-text-secondary);
2895
+ white-space: pre-wrap;
2896
+ }
2897
+
2898
+ .confirm-dialog-actions {
2899
+ margin-top: var(--spacing-lg);
2900
+ justify-content: flex-end;
2901
+ }
2902
+
2457
2903
  .install-list {
2458
2904
  display: flex;
2459
2905
  flex-direction: column;
@@ -2665,6 +3111,119 @@ body::after {
2665
3111
  line-height: 1.4;
2666
3112
  }
2667
3113
 
3114
+
3115
+ .agents-diff-hint {
3116
+ margin-top: 6px;
3117
+ color: var(--color-text-tertiary);
3118
+ font-size: var(--font-size-caption);
3119
+ }
3120
+
3121
+ .agents-diff-save-alert {
3122
+ margin-bottom: 8px;
3123
+ padding: 8px 10px;
3124
+ border-radius: var(--radius-sm);
3125
+ border: 1px solid rgba(238, 178, 90, 0.45);
3126
+ background: rgba(255, 236, 204, 0.72);
3127
+ color: #8d5b31;
3128
+ font-size: var(--font-size-caption);
3129
+ font-weight: var(--font-weight-secondary);
3130
+ }
3131
+
3132
+ .agents-diff-summary {
3133
+ display: flex;
3134
+ align-items: center;
3135
+ gap: 8px;
3136
+ margin-bottom: 8px;
3137
+ font-size: var(--font-size-caption);
3138
+ color: var(--color-text-tertiary);
3139
+ }
3140
+
3141
+ .agents-diff-stat {
3142
+ display: inline-flex;
3143
+ align-items: center;
3144
+ gap: 4px;
3145
+ padding: 2px 8px;
3146
+ border-radius: 999px;
3147
+ border: 1px solid transparent;
3148
+ font-weight: var(--font-weight-secondary);
3149
+ }
3150
+
3151
+ .agents-diff-stat.add {
3152
+ color: #2b6a3b;
3153
+ background: rgba(57, 181, 97, 0.12);
3154
+ border-color: rgba(57, 181, 97, 0.2);
3155
+ }
3156
+
3157
+ .agents-diff-stat.del {
3158
+ color: #8a2f36;
3159
+ background: rgba(220, 95, 108, 0.12);
3160
+ border-color: rgba(220, 95, 108, 0.2);
3161
+ }
3162
+
3163
+
3164
+ .agents-diff-empty {
3165
+ padding: 10px 12px;
3166
+ font-size: var(--font-size-caption);
3167
+ color: var(--color-text-tertiary);
3168
+ border: 1px dashed var(--color-border-soft);
3169
+ border-radius: var(--radius-sm);
3170
+ background: rgba(255, 255, 255, 0.6);
3171
+ }
3172
+
3173
+ .agents-diff-view {
3174
+ border: 1px solid var(--color-border-soft);
3175
+ border-radius: var(--radius-sm);
3176
+ background: rgba(255, 255, 255, 0.7);
3177
+ font-family: var(--font-family-mono);
3178
+ font-size: 12px;
3179
+ line-height: 1.55;
3180
+ max-height: min(32vh, 280px);
3181
+ overflow: auto;
3182
+ }
3183
+
3184
+
3185
+ .agents-diff-editor {
3186
+ min-height: min(60vh, 520px);
3187
+ max-height: min(65vh, 620px);
3188
+ }
3189
+
3190
+ .agents-diff-line {
3191
+ display: grid;
3192
+ grid-template-columns: 16px 1fr;
3193
+ gap: 8px;
3194
+ padding: 2px 10px;
3195
+ align-items: start;
3196
+ }
3197
+
3198
+ .agents-diff-line + .agents-diff-line {
3199
+ border-top: none;
3200
+ }
3201
+
3202
+ .agents-diff-line.add {
3203
+ background: rgba(57, 181, 97, 0.08);
3204
+ }
3205
+
3206
+ .agents-diff-line.del {
3207
+ background: rgba(220, 95, 108, 0.1);
3208
+ }
3209
+
3210
+ .agents-diff-line.context {
3211
+ background: transparent;
3212
+ }
3213
+
3214
+
3215
+ .agents-diff-line-sign {
3216
+ text-align: center;
3217
+ color: var(--color-text-tertiary);
3218
+ min-height: 20px;
3219
+ }
3220
+
3221
+ .agents-diff-line-text {
3222
+ white-space: pre-wrap;
3223
+ word-break: break-word;
3224
+ color: var(--color-text-primary);
3225
+ }
3226
+
2668
3227
  .form-input:disabled,
2669
3228
  .form-input[readonly] {
2670
3229
  background: linear-gradient(to right, var(--color-bg) 0%, rgba(247, 241, 232, 0.5) 100%);
@@ -3649,6 +4208,21 @@ textarea:focus-visible {
3649
4208
  }
3650
4209
 
3651
4210
  @media (max-width: 540px) {
4211
+ .session-item-copy.session-item-pin {
4212
+ width: 44px;
4213
+ height: 44px;
4214
+ min-width: 44px;
4215
+ min-height: 44px;
4216
+ padding: 10px;
4217
+ transform: none;
4218
+ }
4219
+
4220
+ .session-item-copy.session-item-pin svg,
4221
+ .session-item-copy.session-item-pin .pin-icon {
4222
+ width: 16px;
4223
+ height: 16px;
4224
+ }
4225
+
3652
4226
  body {
3653
4227
  padding: var(--spacing-md) var(--spacing-sm);
3654
4228
  }
@@ -3708,6 +4282,7 @@ textarea:focus-visible {
3708
4282
  .session-item {
3709
4283
  min-height: 75px;
3710
4284
  height: 75px;
4285
+ contain-intrinsic-size: 75px;
3711
4286
  padding: 12px 14px;
3712
4287
  }
3713
4288
 
@@ -3758,6 +4333,79 @@ textarea:focus-visible {
3758
4333
  align-items: center;
3759
4334
  }
3760
4335
 
4336
+ .trash-item.session-item {
4337
+ min-height: auto;
4338
+ height: auto;
4339
+ contain-intrinsic-size: auto;
4340
+ }
4341
+
4342
+ .trash-item-header {
4343
+ flex-direction: column;
4344
+ align-items: stretch;
4345
+ gap: 10px;
4346
+ }
4347
+
4348
+ .trash-item-mainline {
4349
+ flex-direction: column;
4350
+ align-items: flex-start;
4351
+ gap: 6px;
4352
+ }
4353
+
4354
+ .trash-item-side {
4355
+ width: 100%;
4356
+ min-width: 0;
4357
+ align-items: stretch;
4358
+ gap: 10px;
4359
+ padding-top: 8px;
4360
+ border-top: 1px dashed rgba(216, 201, 184, 0.55);
4361
+ }
4362
+
4363
+ .trash-item-actions {
4364
+ display: grid;
4365
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4366
+ justify-content: flex-start;
4367
+ width: 100%;
4368
+ }
4369
+
4370
+ .trash-item-actions .btn-mini {
4371
+ width: 100%;
4372
+ min-height: 44px;
4373
+ display: inline-flex;
4374
+ align-items: center;
4375
+ justify-content: center;
4376
+ }
4377
+
4378
+ .trash-item .session-count-badge {
4379
+ align-self: flex-start;
4380
+ margin-top: 0;
4381
+ }
4382
+
4383
+ .trash-item-title {
4384
+ -webkit-line-clamp: 3;
4385
+ max-height: none;
4386
+ white-space: normal;
4387
+ text-overflow: clip;
4388
+ overflow: hidden;
4389
+ }
4390
+
4391
+ .trash-item-meta {
4392
+ margin-top: 6px;
4393
+ margin-bottom: 0;
4394
+ gap: 6px;
4395
+ align-items: center;
4396
+ }
4397
+
4398
+ .trash-item-time {
4399
+ padding-top: 2px;
4400
+ line-height: 1.35;
4401
+ text-align: right;
4402
+ }
4403
+
4404
+ .trash-item-path {
4405
+ grid-template-columns: 1fr;
4406
+ gap: 4px;
4407
+ }
4408
+
3761
4409
  .card {
3762
4410
  padding: 8px;
3763
4411
  }