@walkhi/code-relax 0.1.0-beta.1 → 0.1.0-beta.10

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.
Files changed (91) hide show
  1. package/README.md +14 -15
  2. package/dist/bin/codex-remote.mjs +81 -26
  3. package/dist/bin/self-relay-admin.mjs +8 -0
  4. package/dist/bin/self-relay-demo.mjs +1 -1
  5. package/dist/bin/self-relay-server.mjs +5 -2
  6. package/dist/shared/app-server-events.cjs +50 -22
  7. package/dist/shared/p2p-data-channel.cjs +50 -0
  8. package/dist/skills/code-relax/SKILL.md +1 -1
  9. package/dist/src/desktop-launcher.mjs +11 -11
  10. package/dist/src/lan-socket-server.mjs +8 -2
  11. package/dist/src/managed-app-server.mjs +27 -7
  12. package/dist/src/message-images.mjs +0 -18
  13. package/dist/src/onboarding.mjs +3 -5
  14. package/dist/src/platform/README.md +1 -1
  15. package/dist/src/platform/windows/IsolatedProcess.cs +7 -3
  16. package/dist/src/platform/windows/background-process.mjs +7 -2
  17. package/dist/src/platform/windows/codex-runtime.mjs +117 -0
  18. package/dist/src/platform/windows/desktop-host.mjs +16 -1
  19. package/dist/src/platform/windows/desktop-info.ps1 +2 -4
  20. package/dist/src/platform/windows/desktop-shortcut-run.ps1 +1 -1
  21. package/dist/src/platform/windows/desktop-shortcuts.ps1 +1 -1
  22. package/dist/src/platform/windows/launch-worker.mjs +42 -0
  23. package/dist/src/platform/windows/resident-startup.ps1 +58 -18
  24. package/dist/src/platform/windows/service-host.mjs +4 -7
  25. package/dist/src/platform/windows/start-hidden-console.ps1 +18 -8
  26. package/dist/src/platform/windows/stop-desktop.ps1 +7 -4
  27. package/dist/src/runtime-discovery.mjs +43 -0
  28. package/dist/src/self-relay/admin-cloud.mjs +101 -0
  29. package/dist/src/self-relay/admin-page.mjs +71 -0
  30. package/dist/src/self-relay/admin-server.mjs +61 -0
  31. package/dist/src/self-relay/admin-state.mjs +122 -0
  32. package/dist/src/self-relay/client.mjs +2 -0
  33. package/dist/src/self-relay/connector.mjs +23 -8
  34. package/dist/src/self-relay/demo.mjs +4 -5
  35. package/dist/src/self-relay/lifecycle.mjs +53 -49
  36. package/dist/src/self-relay/p2p-probe.mjs +123 -83
  37. package/dist/src/self-relay/server.mjs +157 -17
  38. package/dist/src/server.mjs +484 -1274
  39. package/dist/src/service-doctor.mjs +13 -25
  40. package/dist/src/service-lifecycle.mjs +12 -12
  41. package/dist/src/shared-app-server.mjs +192 -34
  42. package/dist/src/shared-catalog.mjs +4 -14
  43. package/dist/src/shared-recovery.mjs +8 -6
  44. package/dist/src/shared-thread-stream.mjs +1 -1
  45. package/dist/web/activity-view.js +283 -0
  46. package/dist/web/capabilities.js +2 -9
  47. package/dist/web/chat-transport.js +21 -21
  48. package/dist/web/chat.css +148 -106
  49. package/dist/web/chat.js +1454 -2788
  50. package/dist/web/community.css +82 -0
  51. package/dist/web/community.html +36 -0
  52. package/dist/web/composer-controller.js +97 -0
  53. package/dist/web/conversation-controller.js +99 -0
  54. package/dist/web/disclosure-state-controller.js +95 -0
  55. package/dist/web/draft-controller.js +103 -0
  56. package/dist/web/harmony-platform.js +3 -2
  57. package/dist/web/history-cache.js +112 -18
  58. package/dist/web/history-controller.js +167 -0
  59. package/dist/web/index.html +113 -47
  60. package/dist/web/link-action-controller.js +212 -0
  61. package/dist/web/message-send-controller.js +177 -0
  62. package/dist/web/message-view.js +98 -0
  63. package/dist/web/p2p-data-channel.js +50 -0
  64. package/dist/web/p2p-probe.js +67 -27
  65. package/dist/web/page-resume.js +28 -0
  66. package/dist/web/pending-message-store.js +108 -0
  67. package/dist/web/queue-controller.js +82 -0
  68. package/dist/web/resources.json +1 -1
  69. package/dist/web/self-relay-session.js +28 -18
  70. package/dist/web/station-connection-controller.js +75 -0
  71. package/dist/web/task-list-view.js +289 -0
  72. package/dist/web/thread-attention-controller.js +124 -0
  73. package/dist/web/thread-context-controller.js +30 -0
  74. package/dist/web/thread-list-controller.js +61 -0
  75. package/dist/web/thread-list-sync.js +86 -0
  76. package/dist/web/thread-title-controller.js +57 -0
  77. package/dist/web/timeline-formatters.js +249 -0
  78. package/dist/web/timeline-reducer.js +77 -0
  79. package/dist/web/timeline-renderer.js +161 -0
  80. package/dist/web/timeline-scroll-controller.js +50 -0
  81. package/dist/web/usage-controller.js +258 -0
  82. package/dist/web/vendor/lucide.LICENSE.txt +17 -0
  83. package/package.json +16 -18
  84. package/tools/postinstall.mjs +140 -3
  85. package/dist/src/app-server-client.mjs +0 -468
  86. package/dist/src/app-server-tasks.mjs +0 -355
  87. package/dist/src/platform/windows/desktop-monitor.mjs +0 -34
  88. package/dist/src/platform/windows/desktop-tools.mjs +0 -48
  89. package/dist/src/platform/windows/launch-worker.ps1 +0 -13
  90. package/dist/src/thread-catalog.mjs +0 -42
  91. package/dist/tools/find-desktop-pipe.mjs +0 -10
package/dist/web/chat.css CHANGED
@@ -66,6 +66,7 @@
66
66
  .task-title { flex: 1; min-width: 0; overflow: hidden; font-size: 12px; font-weight: 400; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
67
67
  .running-status { width: 13px; height: 13px; flex: none; border: 1.5px solid #5e6962; border-top-color: #c2cbc5; border-radius: 50%; animation: status-spin .9s linear infinite; }
68
68
  .approval-status { display: inline-flex; align-items: center; flex: none; color: #f2b65a; font-size: 12px; font-weight: 650; line-height: 1.2; white-space: nowrap; }
69
+ .archive-status { display:inline-flex; align-items:center; flex:none; color:#d9a45f; font-size:12px; font-weight:600; line-height:1.2; white-space:nowrap; }
69
70
  .unread-status { width: 9px; height: 9px; flex: none; border-radius: 50%; background: #4285e8; }
70
71
  .project-header > :is(.approval-status, .running-status, .unread-status) { margin: 0 7px 0 auto; }
71
72
  .project-actions { display: flex; flex: none; align-items: center; gap: 1px; opacity: 0; pointer-events: none; }
@@ -103,7 +104,7 @@
103
104
  .turn-error-icon { display: grid; place-items: center; width: 16px; height: 16px; flex: none; margin-top: 1px; border: 1.5px solid currentColor; border-radius: 50%; font-size: 10px; font-weight: 750; line-height: 1; }
104
105
  .turn-error-message { min-width: 0; word-break: break-word; }
105
106
  .message { max-width: 88%; border-radius: 12px; padding: 10px 12px; font-size: 13px; line-height: 1.55; word-break: break-word; }
106
- .message.user { align-self: flex-end; background: #244a35; border: 1px solid #397655; }
107
+ .message.user { align-self: flex-end; padding: 5px 12px; background: #244a35; border: 1px solid #397655; }
107
108
  .pending-message { display: flex; flex-direction: column; align-self: stretch; min-width: 0; gap: 6px; }
108
109
  .pending-message-status { align-self:flex-end; color:#94a79a; font-size:12px; }
109
110
  .pending-message-actions { align-self:flex-end; display:flex; gap:8px; }
@@ -133,7 +134,8 @@
133
134
  .message-body .code-block-copy:hover { color: #e8eee9; background: #ffffff0d; }
134
135
  .message-body .code-block-copy[data-copy-state="copied"] { color: #e8eee9; }
135
136
  .message-body .code-block-copy-icon { display: block; width: 16px; height: 16px; }
136
- .message-body .code-block pre { margin: 0; padding: 0 16px 12px; border: 0; border-radius: 0; background: transparent; }
137
+ .message-body .code-block pre { margin: 0; padding: 0 16px 12px; border: 0; border-radius: 0; background: transparent; scrollbar-width: none; }
138
+ .message-body .code-block pre::-webkit-scrollbar { display: none; }
137
139
  .message-body .code-block code.hljs { color: #d9e3dc; }
138
140
  .message-body .hljs-comment, .message-body .hljs-quote { color: #789083; font-style: italic; }
139
141
  .message-body .hljs-keyword, .message-body .hljs-selector-tag, .message-body .hljs-literal,
@@ -152,13 +154,21 @@
152
154
  .message-body .hljs-strong { font-weight: 700; }
153
155
  .message-body a { color: #73d99a; text-decoration: none; }
154
156
  .message-body a:hover { text-decoration: underline; }
155
- .message-body table { display: block; max-width: 100%; overflow: auto; border-collapse: collapse; }
157
+ .message-body table { display: block; max-width: 100%; overflow: auto; scrollbar-width: none; border-collapse: collapse; }
158
+ .message-body table::-webkit-scrollbar { display: none; }
156
159
  .message-body th, .message-body td { border: 1px solid #35433a; padding: 6px 8px; }
157
160
  .message-body hr { border: 0; border-top: 1px solid #35433a; }
158
161
  .user-attachments { display: flex; align-self: flex-end; max-width: 88%; flex-wrap: wrap; justify-content: flex-end; gap: 7px; }
159
162
  .image-thumb { width: 72px; height: 72px; overflow: hidden; padding: 0; border: 1px solid #45564b; border-radius: 8px; background: #0b0e0c; }
160
- .image-thumb:hover { border-color: #6e8a78; background: #0b0e0c; }
161
- .image-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
163
+ .image-thumb:hover { border-color: #6e8a78; background: #0b0e0c; }
164
+ .image-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
165
+ .image-thumb.image-placeholder { position: relative; display: grid; place-items: center; color: #66746b; }
166
+ .image-placeholder-art { display: grid; place-items: center; width: 38px; height: 38px; }
167
+ .image-placeholder-art svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.35; stroke-linecap: round; stroke-linejoin: round; }
168
+ .image-placeholder-refresh { position: absolute; right: 5px; bottom: 5px; display: grid; place-items: center; width: 23px; height: 23px; border: 1px solid #4b5d52; border-radius: 50%; color: #b4c1b8; background: #151b17; }
169
+ .image-placeholder-refresh svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
170
+ .image-thumb.image-placeholder.loading .image-placeholder-refresh svg { animation: image-refresh-spin .8s linear infinite; }
171
+ @keyframes image-refresh-spin { to { transform: rotate(360deg); } }
162
172
  #draftImages .image-thumb { position: relative; margin-bottom: 8px; }
163
173
  .remove-image { position: absolute; right: 2px; top: 2px; width: 20px; height: 20px; border-radius: 50%; background: #101311dd; color: white; line-height: 18px; }
164
174
  .message.agent .message-image { display: block; max-width: min(100%, 640px); max-height: 380px; margin-top: 9px; border-radius: 8px; object-fit: contain; }
@@ -180,7 +190,8 @@
180
190
  .command-shell-command code { min-width: 0; padding: 3px 0; overflow-wrap: anywhere; white-space: pre-wrap; color: inherit; background: transparent; }
181
191
  .command-shell-prompt { padding-top: 3px; color: #76d395; user-select: none; }
182
192
  .command-shell-output { position: relative; overflow: hidden; padding: 9px 36px 9px 10px; }
183
- .command-shell-output pre { min-width: 0; min-height: 16px; max-height: 182px; padding: 0; overflow-x: hidden; overflow-y: auto; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; color: #c2ccc5; font-size: 10.5px; }
193
+ .command-shell-output pre { min-width: 0; min-height: 16px; max-height: 182px; padding: 0; overflow-x: hidden; overflow-y: auto; scrollbar-width: none; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; color: #c2ccc5; font-size: 10.5px; }
194
+ .command-shell-output pre::-webkit-scrollbar { display: none; }
184
195
  .command-shell-output pre.empty { color: #758279; font-style: italic; white-space: pre-wrap; }
185
196
  .command-shell-output .activity-copy { position: absolute; top: 5px; right: 5px; }
186
197
  .command-shell-footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 28px; padding: 5px 9px 5px 10px; border-top: 1px solid #2a352e; color: #7f8d84; font-size: 10.5px; }
@@ -193,7 +204,8 @@
193
204
  .tool-detail-fields dt { color: #7f8d84; }
194
205
  .tool-detail-fields dd { min-width: 0; margin: 0; overflow-wrap: anywhere; }
195
206
  .tool-detail-fields dd > .tool-detail-fields { margin-top: 4px; }
196
- .tool-detail .tool-detail-text { max-height: 200px; margin: 0; padding: 7px 8px; overflow: auto; white-space: pre-wrap; word-break: break-word; border-radius: 5px; background: #0b100d; color: #c2ccc5; font: 10.5px/1.5 "Cascadia Mono", Consolas, monospace; }
207
+ .tool-detail .tool-detail-text { max-height: 200px; margin: 0; padding: 7px 8px; overflow: auto; scrollbar-width: none; white-space: pre-wrap; word-break: break-word; border-radius: 5px; background: #0b100d; color: #c2ccc5; font: 10.5px/1.5 "Cascadia Mono", Consolas, monospace; }
208
+ .tool-detail .tool-detail-text::-webkit-scrollbar { display: none; }
197
209
  .tool-detail-list { display: flex; flex-direction: column; gap: 4px; margin: 0; padding-left: 18px; }
198
210
  .tool-detail-section.error { color: #ec8b83; }
199
211
  .tool-detail-footer { padding-top: 3px; border-top: 1px solid #2a352e; color: #7f8d84; text-align: right; font-size: 10px; }
@@ -224,7 +236,7 @@
224
236
  .process > summary[aria-disabled="true"] { cursor:default; pointer-events:none; }
225
237
  .disclosure-chevron { display: grid; place-items: center; width: 14px; height: 14px; flex: none; color: #758078; opacity: 0; transform: rotate(0deg); transition: transform .12s ease, opacity .12s ease; }
226
238
  .disclosure-chevron svg { display: block; width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
227
- :is(.process, .activity, .reasoning-history)[open] > summary > .disclosure-chevron { opacity: 1; }
239
+ :is(.process, .activity)[open] > summary > .disclosure-chevron { opacity: 1; }
228
240
  .process[open] > summary > .disclosure-chevron { transform: rotate(90deg); }
229
241
  .activity[open] > summary > .disclosure-chevron { transform: rotate(90deg); }
230
242
  .process.running > summary { color: #71d695; }
@@ -242,12 +254,6 @@
242
254
  .process-body .message.commentary .role { display: none; }
243
255
  .process-count { display: none; }
244
256
  .turn-duration { align-self: stretch; padding: 9px 2px 8px; border-bottom: 1px solid #252e28; color: #969f99; font-size: 12px; font-weight: 650; }
245
- .reasoning-history { color: #818c84; font-size: 12px; }
246
- .reasoning-history > summary { display: flex; align-items: center; gap: 5px; cursor: pointer; padding: 5px 2px; list-style: none; }
247
- .reasoning-history > summary::-webkit-details-marker { display: none; }
248
- .reasoning-history[open] > summary > .disclosure-chevron { transform: rotate(90deg); }
249
- .reasoning-history ol { margin: 3px 0 6px; padding-left: 23px; }
250
- .reasoning-history li { margin: 5px 0; line-height: 1.45; }
251
257
  .live-step { display: flex; align-items: center; gap: 8px; padding: 7px 2px 2px; color: #8f9a92; font-size: 12px; }
252
258
  .pulse { width: 7px; height: 7px; border-radius: 50%; background: #52cc7c; animation: pulse 1.2s ease-in-out infinite; }
253
259
  @keyframes pulse { 0%, 100% { opacity: .35; transform: scale(.85); } 50% { opacity: 1; transform: scale(1.1); } }
@@ -268,8 +274,9 @@
268
274
  .clear-pending-settings { display: grid; place-items: center; width: 18px; height: 18px; flex: none; border: 0; border-radius: 5px; padding: 0; color: #829087; background: transparent; font-size: 16px; line-height: 1; }
269
275
  .clear-pending-settings:hover { color: #e8eee9; background: #303632; }
270
276
  textarea { width: 100%; min-height: 62px; resize: none; border: 0; outline: 0; padding: 3px 1px; color: #eef4ef; background: transparent; font-size: 13px; }
271
- #prompt { width:calc(100% - 40px); height:48px; min-height:48px; overflow-y:auto; font-size:12px; line-height:1.5; }
272
- .voice-stop-popover { position:absolute; bottom:calc(100% + 6px); left:12px; z-index:20; padding:4px; border:1px solid #465149; border-radius:12px; background:#252d28; box-shadow:0 4px 16px #0003; }
277
+ #prompt { width:calc(100% - 40px); height:48px; min-height:48px; overflow-y:auto; scrollbar-width:none; font-size:12px; line-height:1.5; }
278
+ #prompt::-webkit-scrollbar { display:none; }
279
+ .voice-stop-popover { position:absolute; top:-48px; left:12px; z-index:20; padding:4px; border:1px solid #465149; border-radius:12px; background:#252d28; box-shadow:0 4px 16px #0003; }
273
280
  .voice-stop-popover[hidden] { display:none; }
274
281
  #stopVoiceToEdit { min-width:112px; min-height:36px; padding:6px 16px; border:0; border-radius:8px; background:transparent; color:#dce3de; font-size:13px; }
275
282
  #stopVoiceToEdit:disabled { opacity:.6; }
@@ -396,7 +403,6 @@
396
403
  .effort-panel.ultra .effort-option:not(:disabled)::before, .effort-panel.fast .effort-option.reached::before { opacity:0; }
397
404
  .setting-select { display: none; }
398
405
  .composer-icon-button { flex-shrink: 0; }
399
- #turnActions[hidden] { display: none; }
400
406
  .send-control { position:relative; display:grid; place-items:center; width:26px; height:26px; flex:none; }
401
407
  .queue-send-icon { position:absolute; right:0; bottom:calc(100% + 16px); color:#243029; background:#d4ded7; }
402
408
  .queue-send-icon[hidden] { display:none; }
@@ -423,8 +429,15 @@
423
429
  .image-viewer { max-width: min(94vw, 1200px); max-height: 92vh; padding: 0; border: 0; background: transparent; overflow: visible; }
424
430
  .image-viewer::backdrop { background: #000c; backdrop-filter: blur(3px); }
425
431
  .image-viewer-shell { position: relative; display: grid; place-items: center; max-width: 94vw; max-height: 92vh; }
426
- .image-viewer img { display: block; max-width: 94vw; max-height: 92vh; border-radius: 8px; object-fit: contain; box-shadow: 0 18px 60px #000a; }
427
- .image-viewer-close { position: absolute; top: 10px; right: 10px; width: 34px; height: 34px; padding: 0; border-radius: 50%; border-color: #ffffff55; background: #101311cc; font-size: 20px; line-height: 1; }
432
+ .image-viewer img { display: block; max-width: 94vw; max-height: 92vh; border-radius: 8px; object-fit: contain; box-shadow: 0 18px 60px #000a; }
433
+ .image-viewer-original, .image-viewer-download { position: absolute; bottom: 12px; display: inline-flex; align-items: center; justify-content: center; height: 38px; border-radius: 19px; border-color: #ffffff55; background: #101311cc; color: #fff; }
434
+ .image-viewer-original { left: 12px; gap: 7px; min-width: 112px; padding: 0 14px; }
435
+ .image-viewer-download { right: 12px; width: 38px; min-width: 38px; padding: 0; }
436
+ .image-viewer-original .codex-icon, .image-viewer-download .codex-icon { width: 18px; height: 18px; }
437
+ .image-viewer-download.loading .codex-icon { display: none; }
438
+ .image-viewer-download.loading::before { content: ""; width: 15px; height: 15px; border: 2px solid #ffffff55; border-top-color: currentColor; border-radius: 50%; animation: image-viewer-spin .8s linear infinite; }
439
+ @keyframes image-viewer-spin { to { transform: rotate(360deg); } }
440
+ .image-viewer-close { position: absolute; top: 10px; right: 10px; width: 34px; height: 34px; padding: 0; border-radius: 50%; border-color: #ffffff55; background: #101311cc; font-size: 20px; line-height: 1; }
428
441
  .new-chat-entry { display:flex; flex:none; align-items:center; gap:10px; margin:8px 0; padding:10px 8px; border:0; background:transparent; color:inherit; text-align:left; }
429
442
  #newThreadWelcome[hidden], #newThreadProjectBar[hidden], #timeline[hidden], .selected-heading[hidden] { display:none; }
430
443
  .new-thread-welcome { flex:1; min-height:0; overflow:auto; display:flex; flex-direction:column; gap:24px; align-items:center; justify-content:center; padding:24px 12px; }
@@ -445,18 +458,18 @@
445
458
  section { padding: 14px; }
446
459
  .scroll-to-bottom { right: 24px; bottom: 114px; }
447
460
  }
448
- body.embedded-client { min-height:0; height:100%; background:#101311; }
449
- .embedded-client header { display:none; }
450
- .embedded-client.native-title .selected-heading { display:none; }
461
+ body.embedded-terminal { --terminal-sidebar-width:280px; min-height:0; height:100%; background:#101311; }
462
+ .embedded-terminal header { display:none; }
463
+ .terminal-chat-header { display:none; }
451
464
  #connectionStatus { flex:none; font-size:12px; color:#42d17b; }
452
465
  #connectionStatus.failed { color:#e06c64; }
453
466
  .sidebar-brand { display:none; }
454
- .embedded-client .sidebar-brand { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:1px 8px 3px; font-size:18px; font-weight:600; }
455
- .embedded-client .new-chat-entry { margin:0; padding:5px 8px; font-size:12px; }
456
- .embedded-client .toolbar { min-height:20px; margin:0 4px 1px; }
457
- .embedded-client .project { margin-bottom:1px; }
458
- .embedded-client .task { margin:0; padding:4px 9px; }
459
- @media (max-width:760px) {
467
+ .embedded-terminal .sidebar-brand { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:1px 8px 3px; font-size:18px; font-weight:600; }
468
+ .embedded-terminal .new-chat-entry { margin:0; padding:5px 8px; font-size:12px; }
469
+ .embedded-terminal .toolbar { min-height:20px; margin:0 4px 1px; }
470
+ .embedded-terminal .project { margin-bottom:1px; }
471
+ .embedded-terminal .task { margin:0; padding:4px 9px; }
472
+ @media (max-width:760px) {
460
473
  .composer-row { min-width:0; }
461
474
  .composer-controls { flex:0 1 auto; min-width:0; }
462
475
  .model-control { flex:0 1 auto; }
@@ -469,39 +482,41 @@
469
482
  #permissionLabel { display:none; }
470
483
  .permission-trigger { width:26px; padding:0; justify-content:center; }
471
484
  }
472
- .embedded-client .status { margin-left:0; overflow:hidden; }
473
- .embedded-client #status { overflow:hidden; text-overflow:ellipsis; }
474
- .embedded-client .project-actions { opacity:1; pointer-events:auto; }
475
- #connectionSettings, #usageButton, #returnToComputer, #debugMenu, .app-actions { display:none; }
476
- .embedded-client .app-actions { position:relative; display:flex; align-items:stretch; gap:4px; flex-shrink:0; min-width:0; }
477
- .embedded-client .app-actions > :is(#returnToComputer:not([hidden]), #debugMenu:not([hidden])) { flex:1 1 0; min-width:0; width:auto; }
478
- .embedded-client #debugMenu:not([hidden]) { position:static; display:block; }
485
+ .embedded-terminal .status { margin-left:0; overflow:hidden; }
486
+ .embedded-terminal #status { overflow:hidden; text-overflow:ellipsis; }
487
+ .embedded-terminal .project-actions { opacity:1; pointer-events:auto; }
488
+ #connectionSettings, #usageButton, #announcementButton, #returnToComputer, #installedAppVersion, #debugMenu, .app-actions { display:none; }
489
+ .embedded-terminal .app-actions { position:relative; display:flex; align-items:stretch; gap:4px; flex-shrink:0; min-width:0; }
490
+ .embedded-terminal .app-actions > :is(#returnToComputer:not([hidden]), #debugMenu:not([hidden])) { flex:0 0 auto; min-width:0; width:auto; }
491
+ .embedded-terminal #installedAppVersion:not([hidden]) { display:block; flex:1 1 auto; align-self:center; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
492
+ .embedded-terminal #debugMenu:not([hidden]) { position:static; display:block; }
479
493
  #debugMenu > summary { display:flex; align-items:center; gap:9px; height:100%; box-sizing:border-box; padding:5px 8px; color:var(--muted, #94a79a); font-size:12px; cursor:pointer; list-style:none; }
480
494
  #debugMenu > summary::-webkit-details-marker { display:none; }
481
495
  #debugMenu > summary > span { flex:1; text-align:right; }
482
496
  #debugMenu[open] .debug-chevron { transform:rotate(90deg); }
483
497
  .debug-menu-items { position:absolute; z-index:30; right:0; bottom:calc(100% + 4px); box-sizing:border-box; width:260px; display:grid; gap:4px; padding:8px; border:1px solid #414a44; border-radius:10px; background:#202522; box-shadow:0 12px 32px #0008; }
484
- .debug-menu-items > button { width:100%; padding:8px; border:0; background:transparent; text-align:left; }
498
+ .debug-menu-items > button { width:100%; padding:8px; border:0; background:transparent; text-align:left; }
499
+ .installed-app-version { margin:0 2px; color:var(--muted, #94a79a); font-size:9px; line-height:1.4; text-align:center; }
485
500
  #sharedRecoveryConfirm, #sharedRecoveryResult { font-size:12px; line-height:1.5; overflow-wrap:anywhere; color:var(--muted, #94a79a); }
486
501
  #sharedRecoveryConfirm button { width:100%; margin-top:6px; text-align:left; }
487
- .embedded-client aside { display:flex; flex-direction:column; overflow:hidden; padding:2px 8px 6px; font-size:12px; }
488
- .embedded-client #tasks { flex:1; min-height:0; overflow-y:auto; overflow-anchor:none; }
489
- .embedded-client :is(#connectionSettings, #usageButton, #archivedThreads:not([hidden]), #returnToComputer:not([hidden])) { display:flex; align-items:center; gap:9px; flex-shrink:0; width:100%; padding:5px 8px; border:0; border-radius:0; background:transparent; color:#9eaca3; text-align:left; font-size:12px; }
490
- .embedded-client #archivedThreads { margin-top:3px; padding-top:5px; border-top:1px solid #ffffff12; }
491
- .embedded-client #usageButton { margin-top:0; }
492
- .embedded-client #archivedThreads[hidden] + #usageButton { margin-top:3px; padding-top:5px; border-top:1px solid #ffffff12; }
502
+ .embedded-terminal aside { display:flex; flex-direction:column; overflow:hidden; padding:2px 8px 6px; font-size:12px; }
503
+ .embedded-terminal #tasks { flex:1; min-height:0; overflow-y:auto; overflow-anchor:none; }
504
+ .embedded-terminal :is(#connectionSettings, #usageButton, #announcementButton, #archivedThreads:not([hidden]), #returnToComputer:not([hidden])) { display:flex; align-items:center; gap:9px; flex-shrink:0; width:100%; padding:5px 8px; border:0; border-radius:0; background:transparent; color:#9eaca3; text-align:left; font-size:12px; }
505
+ .embedded-terminal #archivedThreads { margin-top:3px; padding-top:5px; border-top:1px solid #ffffff12; }
506
+ .embedded-terminal #usageButton { margin-top:0; }
507
+ .embedded-terminal #archivedThreads[hidden] + #usageButton { margin-top:3px; padding-top:5px; border-top:1px solid #ffffff12; }
493
508
  .shared-service-notice { display:none; }
494
- .embedded-client .shared-service-notice:not([hidden]) { display:grid; grid-template-columns:minmax(0, 1fr) 15px; align-items:center; flex:none; gap:7px; min-width:0; margin:3px 0 2px; padding:8px; border:1px solid #d899494f; border-radius:9px; color:#e5b779; background:#d8994914; cursor:pointer; }
495
- .embedded-client .shared-service-copy { display:flex; flex-direction:column; min-width:0; gap:2px; }
496
- .embedded-client .shared-service-notice strong { font-size:12px; line-height:1.35; font-weight:650; white-space:normal; overflow-wrap:anywhere; }
497
- .embedded-client .shared-service-notice .shared-service-copy > span { color:#c8a77c; font-size:12px; line-height:1.35; white-space:normal; overflow-wrap:anywhere; }
498
- .embedded-client .shared-service-notice > .codex-icon { width:15px; height:15px; color:#c8a77c; }
509
+ .embedded-terminal .shared-service-notice:not([hidden]) { display:grid; grid-template-columns:minmax(0, 1fr) 15px; align-items:center; flex:none; gap:7px; min-width:0; margin:3px 0 2px; padding:8px; border:1px solid #d899494f; border-radius:9px; color:#e5b779; background:#d8994914; cursor:pointer; }
510
+ .embedded-terminal .shared-service-copy { display:flex; flex-direction:column; min-width:0; gap:2px; }
511
+ .embedded-terminal .shared-service-notice strong { font-size:12px; line-height:1.35; font-weight:650; white-space:normal; overflow-wrap:anywhere; }
512
+ .embedded-terminal .shared-service-notice .shared-service-copy > span { color:#c8a77c; font-size:12px; line-height:1.35; white-space:normal; overflow-wrap:anywhere; }
513
+ .embedded-terminal .shared-service-notice > .codex-icon { width:15px; height:15px; color:#c8a77c; }
499
514
  #connectionAddress { min-width:0; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
500
515
  .connection-control-mode { font-weight:600; }
501
516
  .connection-control-mode.complete { color:#42d17b; }
502
517
  .connection-control-mode.basic { color:#dc9b57; }
503
- .embedded-client :is(#connectionSettings, #usageButton, #archivedThreads, #returnToComputer):hover { color:#e8eee9; }
504
518
  #usageButton > span { flex:1; }
519
+ #announcementTitle { min-width:0; flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
505
520
  #usageSummary { display:flex; align-items:center; justify-content:space-between; gap:8px; min-width:0; }
506
521
  #returnToComputer { margin-top:0; }
507
522
  .usage-heading { display:flex; align-items:center; justify-content:space-between; }
@@ -544,13 +559,12 @@
544
559
  .usage-dialog-close { width:32px; height:32px; padding:0; border:0; background:transparent; font-size:20px; }
545
560
  #usageRows { display:grid; gap:9px; min-height:18px; color:#aeb9b2; font-size:12px; }
546
561
  @media (prefers-color-scheme:light) {
547
- .embedded-client :is(#connectionSettings, #usageButton, #archivedThreads, #returnToComputer) { color:#596c60; }
548
- .embedded-client #archivedThreads { border-top-color:#17212b18; }
549
- .embedded-client #archivedThreads[hidden] + #usageButton { border-top-color:#17212b18; }
550
- .embedded-client .shared-service-notice:not([hidden]) { color:#8b5318; background:#d8994914; border-color:#b66b2c45; }
551
- .embedded-client .shared-service-notice .shared-service-copy > span,
552
- .embedded-client .shared-service-notice > .codex-icon { color:#76512c; }
553
- .embedded-client :is(#connectionSettings, #usageButton, #archivedThreads, #returnToComputer):hover { color:#17212b; }
562
+ .embedded-terminal :is(#connectionSettings, #usageButton, #announcementButton, #archivedThreads, #returnToComputer) { color:#596c60; }
563
+ .embedded-terminal #archivedThreads { border-top-color:#17212b18; }
564
+ .embedded-terminal #archivedThreads[hidden] + #usageButton { border-top-color:#17212b18; }
565
+ .embedded-terminal .shared-service-notice:not([hidden]) { color:#8b5318; background:#d8994914; border-color:#b66b2c45; }
566
+ .embedded-terminal .shared-service-notice .shared-service-copy > span,
567
+ .embedded-terminal .shared-service-notice > .codex-icon { color:#76512c; }
554
568
  .composer-add-menu { color:#34443a; background:#f5f7f5; border-color:#d5ddd8; box-shadow:0 10px 28px #17212b24; }
555
569
  .file-action-menu { color:#17212b; background:#fff; border-color:#cfd8d2; box-shadow:0 10px 28px #17212b24; }
556
570
  .file-action-name { color:#65736a; border-color:#dce3df; }
@@ -568,34 +582,42 @@
568
582
  #wideSidebarToggle, #wideSidebarExpand { display:none; }
569
583
  #wideSidebarToggle .codex-icon, #wideSidebarExpand .codex-icon { width:24px; height:24px; stroke-width:1.8; }
570
584
  #wideSidebarToggle:hover, #wideSidebarExpand:hover { background:color-mix(in srgb, currentColor 8%, transparent); }
571
- .embedded-client #voice[aria-pressed="true"] { width:26px; height:26px; margin-inline:3px; color:#ef6868; background:#ef686814; box-shadow:inset 0 0 0 1px #ef686899; }
572
- .embedded-client #voice[aria-pressed="true"] .codex-icon { width:16px; height:16px; }
585
+ .embedded-terminal #voice[aria-pressed="true"] { width:26px; height:26px; margin-inline:3px; color:#ef6868; background:#ef686814; box-shadow:inset 0 0 0 1px #ef686899; }
586
+ .embedded-terminal #voice[aria-pressed="true"] .codex-icon { width:16px; height:16px; }
573
587
  @media (max-width:760px) {
574
- .embedded-client main { position:relative; display:grid; grid-template-columns:1fr; grid-template-rows:minmax(0,1fr); }
575
- .embedded-client aside { display:none; position:absolute; inset:0 auto 0 0; width:min(90%,320px); z-index:20; box-shadow:12px 0 30px #0008; }
576
- .embedded-client.sidebar-open aside { display:flex; }
577
- .embedded-client.sidebar-open #sidebarBackdrop { display:block; position:absolute; inset:0; z-index:19; background:#0008; border:0; border-radius:0; }
578
- .embedded-client section { padding:8px 12px; }
579
- .embedded-client .selected-heading { min-width:0; }
580
- .embedded-client textarea { font-size:16px; }
581
- .embedded-client #prompt { font-size:13px; }
582
- }
583
- @media (min-width:600px) {
584
- .embedded-client #wideSidebarToggle { display:grid; place-items:center; flex:none; align-self:center; width:40px; height:40px; padding:8px; border:0; background:transparent; color:inherit; }
585
- .embedded-client.sidebar-collapsed main { grid-template-columns:minmax(0,1fr); }
586
- .embedded-client.sidebar-collapsed aside { display:none; }
587
- .embedded-client.sidebar-collapsed #wideSidebarExpand { display:grid; place-items:center; position:absolute; top:2px; left:8px; width:32px; height:28px; padding:2px; border:0; background:transparent; color:inherit; z-index:9; }
588
- .embedded-client.sidebar-collapsed .selected-heading { padding-left:36px; }
589
- .embedded-client section { padding-top:2px; }
590
- .embedded-client.native-layout .selected-heading { display:flex; }
591
- .embedded-client.native-layout #selectedTitle { flex:1; }
592
- .embedded-client main { grid-template-columns: 280px minmax(0, 1fr); grid-template-rows:minmax(0,1fr); }
593
- .embedded-client aside { display:flex; position:static; width:auto; box-shadow:none; border-right:1px solid #2c3830; border-bottom:0; }
594
- .embedded-client.sidebar-open #sidebarBackdrop { display:none; }
588
+ .embedded-terminal main { position:relative; display:grid; grid-template-columns:1fr; grid-template-rows:minmax(0,1fr); }
589
+ .embedded-terminal aside { display:none; position:absolute; inset:0 auto 0 0; width:min(90%,var(--terminal-sidebar-width)); z-index:20; box-shadow:12px 0 30px #0008; }
590
+ .embedded-terminal.sidebar-open aside { display:flex; }
591
+ .embedded-terminal.sidebar-open #sidebarBackdrop { display:block; position:absolute; inset:0; z-index:19; background:#0008; border:0; border-radius:0; }
592
+ .embedded-terminal section { padding:8px 12px; }
593
+ .embedded-terminal .selected-heading { min-width:0; }
594
+ .embedded-terminal textarea { font-size:16px; }
595
+ .embedded-terminal #prompt { font-size:13px; }
596
+ }
597
+ @media (max-width:599px) {
598
+ .embedded-terminal .terminal-chat-header { display:flex; position:absolute; z-index:9; inset:0 0 auto; height:40px; align-items:center; background:#101311; }
599
+ .embedded-terminal #terminalSidebarToggle { display:grid; place-items:center; width:48px; height:40px; flex:none; border:0; padding:8px 12px; color:inherit; background:transparent; }
600
+ .embedded-terminal #terminalSidebarToggle .codex-icon { width:28px; height:28px; stroke-width:2; }
601
+ .embedded-terminal #terminalChatTitle { position:absolute; left:56px; right:56px; overflow:hidden; font-size:15px; font-weight:700; text-align:center; text-overflow:ellipsis; white-space:nowrap; touch-action:manipulation; user-select:none; }
602
+ .embedded-terminal .selected-heading { display:none; }
603
+ .embedded-terminal section { padding-top:48px; }
604
+ .embedded-terminal.sidebar-open #wideSidebarToggle { display:grid; place-items:center; flex:none; align-self:center; width:40px; height:40px; padding:8px; border:0; background:transparent; color:inherit; }
605
+ }
606
+ @media (min-width:600px) {
607
+ .embedded-terminal #wideSidebarToggle { display:grid; place-items:center; flex:none; align-self:center; width:40px; height:40px; padding:8px; border:0; background:transparent; color:inherit; }
608
+ .embedded-terminal.sidebar-collapsed main { grid-template-columns:minmax(0,1fr); }
609
+ .embedded-terminal.sidebar-collapsed aside { display:none; }
610
+ .embedded-terminal.sidebar-collapsed #wideSidebarExpand { display:grid; place-items:center; position:absolute; top:2px; left:8px; width:32px; height:28px; padding:2px; border:0; background:transparent; color:inherit; z-index:9; }
611
+ .embedded-terminal.sidebar-collapsed .selected-heading { padding-left:36px; }
612
+ .embedded-terminal section { padding-top:2px; }
613
+ .embedded-terminal main { grid-template-columns:var(--terminal-sidebar-width) minmax(0, 1fr); grid-template-rows:minmax(0,1fr); }
614
+ .embedded-terminal aside { display:flex; position:static; width:auto; box-shadow:none; border-right:1px solid #2c3830; border-bottom:0; }
615
+ .embedded-terminal.sidebar-open #sidebarBackdrop { display:none; }
595
616
  }
596
617
  @media (prefers-color-scheme: light) {
597
- :root { color-scheme:light; background:#f5f7fa; color:#17212b; }
598
- body, body.embedded-client { background:#f5f7fa; }
618
+ :root { color-scheme:light; background:#f5f7fa; color:#17212b; }
619
+ body, body.embedded-terminal { background:#f5f7fa; }
620
+ .embedded-terminal .terminal-chat-header { background:#f5f7fa; }
599
621
  aside, .composer, .model-menu, .new-thread-project { background:#fff; border-color:#d5ddd8; color:#17212b; }
600
622
  button, select, textarea { color:#17212b; }
601
623
  button { background:#eef2ef; border-color:#ccd6ce; }
@@ -625,7 +647,7 @@
625
647
  .message-body .hljs-addition { color:#2f7444; background:#78b98a24; }
626
648
  .message-body .hljs-deletion { color:#a23d3d; background:#d77a7a24; }
627
649
  .message-body a, .process.running > summary { color:#167343; }
628
- .activity, .activity-icon, .live-step, .reasoning-history, .turn-label, .turn-duration,
650
+ .activity, .activity-icon, .live-step, .turn-label, .turn-duration,
629
651
  .process > summary, .active-process > summary, .settled-process > summary,
630
652
  .toolbar, .refresh-icon, .project-folder, .project-action, .disclosure-chevron,
631
653
  .sub, .status, #empty, .pending-settings, .menu-title, .menu-hint, .model-option small, .chevron { color:#596c60; }
@@ -663,18 +685,26 @@
663
685
  .permission-option:hover, .permission-trigger:hover, .permission-trigger[aria-expanded="true"] { background:#00000008; }
664
686
  .permission-trigger.full-access, .permission-option[data-permission="full"], .permission-option[data-permission="full"] small { color:#bd5b16; }
665
687
  .attachment { color:#44564b; border-color:#b7c9be; }
666
- .image-viewer-close { color:#fff; background:#101311cc; }
688
+ .image-viewer-close, .image-viewer-original, .image-viewer-download { color:#fff; background:#101311cc; }
667
689
  }
668
690
 
669
691
 
670
- #connectionEntry { display:none; }
671
- body.connection-entry > header, body.connection-entry > main { display:none; }
672
- body.connection-entry #connectionEntry { display:flex; flex:1; align-items:center; justify-content:center; padding:24px; overflow:auto; }
673
- .connection-entry-card { width:100%; max-width:420px; }
674
- .connection-entry-card h1 { font-size:24px; }
675
- #entryMode { opacity:.65; }
676
- #entryStatus { white-space:pre-wrap; overflow-wrap:anywhere; }
677
- .connection-entry-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:24px; }
692
+ #connectionEntry { display:none; }
693
+ body.connection-entry > header, body.connection-entry > main { display:none; }
694
+ body.connection-entry #connectionEntry { display:flex; flex:1; min-height:0; overflow:hidden; }
695
+ .connection-entry-page { display:flex; flex-direction:column; width:100%; min-height:100%; }
696
+ .connection-entry-header { display:flex; flex:none; align-items:center; width:100%; height:52px; padding:0 8px; }
697
+ .connection-entry-header h1 { flex:1; margin:0; text-align:center; font-size:18px; font-weight:600; }
698
+ .connection-entry-back, .connection-entry-header-spacer { width:40px; height:40px; flex:none; }
699
+ .connection-entry-back { display:grid; place-items:center; padding:0; border:0; border-radius:10px; background:transparent; color:inherit; }
700
+ .connection-entry-back:active { background:#ffffff12; }
701
+ .connection-entry-back svg { width:22px; height:22px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
702
+ .connection-entry-content { display:flex; flex:1; min-height:0; align-items:center; justify-content:center; padding:24px; overflow:auto; }
703
+ .connection-entry-card { width:100%; max-width:420px; }
704
+ .entry-connection-mode { display:flex; align-items:baseline; gap:10px; margin:0 0 20px; }
705
+ .entry-connection-mode span { font-size:12px; opacity:.58; }
706
+ .entry-connection-mode strong { font-size:16px; font-weight:600; }
707
+ .connection-entry-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:24px; }
678
708
 
679
709
  #externalUiOption { align-items:center; justify-content:flex-start; gap:8px; flex-shrink:0; padding:8px; font-size:12px; color:var(--muted, #94a79a); }
680
710
  #externalUiOption:not([hidden]) { display:flex; }
@@ -689,26 +719,38 @@
689
719
  .model-menu[data-loading="true"] .menu-view { visibility:hidden; }
690
720
  .model-menu[data-loading="true"]::before { content:"正在读取模型设置…"; position:absolute; inset:0; display:grid; place-items:center; font-size:13px; color:inherit; }
691
721
 
692
- .entry-brand { font-size:12px; letter-spacing:.08em; opacity:.65; }
693
- .connection-entry-card { padding:24px; border:1px solid #ffffff18; border-radius:20px; background:#ffffff05; }
694
- .connection-entry-card h1 { margin:10px 0; }
695
- .entry-steps { display:flex; gap:8px; padding:0; margin:24px 0; list-style:none; }
696
- .entry-steps[hidden] { display:none; }
697
- .entry-steps li { flex:1; padding-top:10px; border-top:3px solid #7e898544; font-size:11px; opacity:.5; }
698
- .entry-steps li[data-state="current"] { border-color:#55bf8b; opacity:1; }
699
- .entry-steps li[data-state="done"] { border-color:#55bf8b; opacity:.7; }
700
- .entry-progress { display:flex; align-items:flex-start; gap:12px; margin-top:24px; min-height:94px; }
701
- .entry-indicator { flex:none; width:18px; height:18px; margin-top:3px; border:2px solid #7e898544; border-top-color:#55bf8b; border-radius:50%; animation:entry-spin 1s linear infinite; }
702
- #entryStatus { margin:0 0 8px; font-size:16px; font-weight:600; }
703
- #entryDetail { margin:0; font-size:13px; line-height:1.7; opacity:.7; overflow-wrap:anywhere; }
704
- .entry-progress[data-state="error"] .entry-indicator { animation:none; border-color:#e58a78; }
705
- .connection-entry-actions button { min-height:42px; }
722
+ .connection-entry-card { padding:8px 18px 24px; }
723
+ .entry-diagram { display:flex; width:100%; align-items:flex-start; margin:8px 0 28px; color:#3f5349; }
724
+ .entry-diagram-node { display:flex; flex:1; min-width:0; flex-direction:column; align-items:center; gap:4px; }
725
+ .entry-diagram-node > svg { width:28px; height:28px; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
726
+ .entry-diagram-node > span { min-height:24px; max-width:92px; font-size:10px; line-height:12px; text-align:center; opacity:.72; }
727
+ .entry-diagram-link { flex:none; width:26px; height:10px; margin-top:8px; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }
728
+ .entry-diagram-middle > svg { display:none; }
729
+ .entry-diagram[data-mode="lan"] [data-route="lan"],
730
+ .entry-diagram[data-mode="private"] [data-route="private"],
731
+ .entry-diagram[data-mode="official"] [data-route="official"] { display:block; }
732
+ .entry-steps { display:flex; flex-direction:column; gap:0; padding:0; margin:0; list-style:none; }
733
+ .entry-steps li { position:relative; min-height:44px; padding:0 0 16px 34px; font-size:13px; line-height:20px; opacity:.46; }
734
+ .entry-steps li::before { content:attr(data-number); position:absolute; left:0; top:0; display:grid; width:22px; height:22px; place-items:center; border:1px solid #7e898566; border-radius:50%; font-size:10px; }
735
+ .entry-steps li:not(:last-child)::after { content:""; position:absolute; left:11px; top:23px; bottom:1px; width:1px; background:#7e898544; }
736
+ .entry-steps li[data-state="current"] { color:inherit; opacity:1; font-weight:600; }
737
+ .entry-steps li[data-state="current"]::before { content:""; box-sizing:border-box; border:2px solid #7e898544; border-top-color:#55bf8b; animation:entry-spin 1s linear infinite; }
738
+ .entry-steps li[data-state="done"] { opacity:.72; }
739
+ .entry-steps li[data-state="done"]::before { content:"✓"; border-color:#55bf8b; background:#55bf8b22; color:#55bf8b; }
740
+ .entry-steps li[data-state="done"]::after { background:#55bf8b88; }
741
+ .entry-steps li[data-state="error"] { color:#e58a78; opacity:1; font-weight:600; }
742
+ .entry-steps li[data-state="error"]::before { content:"!"; border-color:#e58a78; color:#e58a78; }
743
+ .entry-step-detail { display:block; margin-top:4px; color:inherit; font-size:12px; font-weight:400; line-height:1.55; opacity:.78; overflow-wrap:anywhere; }
744
+ .connection-entry-actions button { min-height:42px; flex:1 1 160px; }
706
745
  .diagnostic-overview { font-size:17px; font-weight:600; margin-bottom:0; }
707
746
  .diagnostic-hint { opacity:.7; line-height:1.6; }
708
747
  .usage-dialog details summary { cursor:pointer; padding:10px 0; }
709
748
  @keyframes entry-spin { to { transform:rotate(360deg); } }
710
- @media(prefers-reduced-motion:reduce) { .entry-indicator { animation:none; } }
711
- @media(prefers-color-scheme:light) { .connection-entry-card { background:#fff; border-color:#d5ddd8; } }
749
+ @media(prefers-reduced-motion:reduce) { .entry-steps li[data-state="current"]::before { animation:none; } }
750
+ @media(prefers-color-scheme:light) {
751
+ .connection-entry-back:active { background:#1f2c240d; }
752
+ .entry-diagram { color:#3f5349; }
753
+ }
712
754
 
713
755
  .approval-panel { flex: 0 1 auto; min-height: 0; max-height: 42vh; overflow-y: auto; padding: 8px 12px; border-top: 1px solid #45564b; }
714
756
  .approval-panel[hidden] { display: none; }