loadtoagent 1.1.0 → 1.3.2

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 (86) hide show
  1. package/README.ko.md +14 -5
  2. package/README.md +7 -0
  3. package/README.zh-CN.md +7 -0
  4. package/docs/PROVIDER-CONTRACTS.md +25 -1
  5. package/docs/UI-AUDIT-100.md +118 -0
  6. package/docs/UI-AUDIT-101-200.md +120 -0
  7. package/docs/UI-AUDIT-201-300.md +120 -0
  8. package/main.js +157 -38
  9. package/package.json +13 -4
  10. package/preload.js +13 -2
  11. package/renderer/app-agent-actions.js +125 -53
  12. package/renderer/app-bootstrap.js +54 -19
  13. package/renderer/app-dashboard.js +196 -55
  14. package/renderer/app-drawer-content.js +48 -44
  15. package/renderer/app-drawer-data.js +26 -13
  16. package/renderer/app-drawer.js +72 -54
  17. package/renderer/app-events-dialogs.js +146 -37
  18. package/renderer/app-events-filters.js +172 -13
  19. package/renderer/app-events-navigation.js +77 -30
  20. package/renderer/app-events-sessions.js +156 -9
  21. package/renderer/app-events.js +2 -1
  22. package/renderer/app-graph-model.js +20 -38
  23. package/renderer/app-graph-orchestration.js +15 -13
  24. package/renderer/app-graph-view.js +228 -113
  25. package/renderer/app-management.js +257 -0
  26. package/renderer/app-provider-visibility.js +124 -0
  27. package/renderer/app-quality.js +568 -0
  28. package/renderer/app-run-modal.js +104 -34
  29. package/renderer/app-runtime-overview.js +312 -0
  30. package/renderer/app-session-render.js +94 -37
  31. package/renderer/app-tmux-render.js +52 -44
  32. package/renderer/app.js +153 -75
  33. package/renderer/i18n-messages.js +867 -37
  34. package/renderer/i18n.js +104 -0
  35. package/renderer/index.html +154 -67
  36. package/renderer/shared.js +17 -0
  37. package/renderer/styles-agent-map.css +16 -10
  38. package/renderer/styles-cards.css +44 -18
  39. package/renderer/styles-collaboration.css +23 -23
  40. package/renderer/styles-components.css +122 -45
  41. package/renderer/styles-management.css +364 -0
  42. package/renderer/styles-onboarding.css +8 -8
  43. package/renderer/styles-overlays.css +13 -7
  44. package/renderer/styles-product.css +48 -40
  45. package/renderer/styles-quality.css +312 -0
  46. package/renderer/styles-readability.css +1040 -0
  47. package/renderer/styles-responsive-product.css +84 -12
  48. package/renderer/styles-responsive-runtime.css +25 -17
  49. package/renderer/styles-responsive-shell.css +44 -48
  50. package/renderer/styles-responsive-workflows.css +39 -5
  51. package/renderer/styles-run-composer.css +28 -23
  52. package/renderer/styles-runtime-overview.css +285 -0
  53. package/renderer/styles-settings.css +176 -16
  54. package/renderer/styles-terminal.css +374 -37
  55. package/renderer/styles-tmux.css +49 -49
  56. package/renderer/styles-workflow-map.css +362 -15
  57. package/renderer/styles-workflows.css +116 -49
  58. package/renderer/styles.css +34 -19
  59. package/renderer/terminal-agent.js +17 -13
  60. package/renderer/terminal-events.js +253 -37
  61. package/renderer/terminal-workbench.js +208 -89
  62. package/renderer/terminal.js +350 -35
  63. package/src/agentMonitor/claudeParser.js +96 -7
  64. package/src/agentMonitor/codexParser.js +59 -4
  65. package/src/agentMonitor/executionActivity.js +282 -0
  66. package/src/agentMonitor/genericParser.js +56 -13
  67. package/src/agentMonitor/hierarchy.js +17 -0
  68. package/src/agentMonitor/responseIntent.js +51 -0
  69. package/src/agentMonitor.js +21 -3
  70. package/src/agentRunner.js +66 -1
  71. package/src/attentionNotifier.js +14 -10
  72. package/src/automationMonitor.js +258 -0
  73. package/src/contracts.js +10 -1
  74. package/src/ipc/registerAgentIpc.js +9 -3
  75. package/src/ipc/registerAppIpc.js +4 -1
  76. package/src/ipc/registerTerminalIpc.js +12 -14
  77. package/src/macUpdateHelper.js +210 -0
  78. package/src/monitorWorker.js +65 -6
  79. package/src/platformPath.js +80 -0
  80. package/src/processMonitor.js +80 -22
  81. package/src/providerVisibilityStore.js +45 -0
  82. package/src/sessionIntelligence.js +261 -0
  83. package/src/terminalHost.js +453 -0
  84. package/src/terminalHostDaemon.js +61 -0
  85. package/src/terminalManager.js +218 -6
  86. package/src/updateInstaller.js +175 -0
@@ -0,0 +1,285 @@
1
+ /* Runtime schedules and loop observability */
2
+
3
+ .runtime-nav-item .runtime-nav-icon {
4
+ color: #5dd9b8;
5
+ font-weight: 800;
6
+ text-shadow: 0 0 12px rgba(93,217,184,.5);
7
+ }
8
+
9
+ .runtime-nav-item.active {
10
+ color: #e9fffa;
11
+ background: linear-gradient(90deg,rgba(75,213,173,.17),rgba(75,213,173,.04));
12
+ box-shadow: inset 2px 0 #4bd5ad;
13
+ }
14
+
15
+ .runtime-nav-item.active b { color: #7ce4c7; background: #123d36; }
16
+
17
+ .automation-overview {
18
+ position: relative;
19
+ margin-top: 0;
20
+ overflow: hidden;
21
+ border: 1px solid #254153;
22
+ border-radius: 22px;
23
+ background:
24
+ linear-gradient(90deg,rgba(83,216,181,.04) 1px,transparent 1px) 0 0/34px 34px,
25
+ linear-gradient(rgba(83,216,181,.035) 1px,transparent 1px) 0 0/34px 34px,
26
+ #08111b;
27
+ box-shadow: 0 22px 52px rgba(0,0,0,.22), inset 0 1px rgba(255,255,255,.025);
28
+ }
29
+
30
+ .automation-overview::before {
31
+ position: absolute;
32
+ inset: 0 auto 0 0;
33
+ width: 3px;
34
+ content: "";
35
+ background: #4bd5ad;
36
+ box-shadow: 0 0 22px rgba(75,213,173,.72);
37
+ }
38
+
39
+ .runtime-overview-head,.runtime-overview-title,.runtime-overview-counts,
40
+ .runtime-schedule-lane>header,.runtime-loop-lane-head,.runtime-loop-detail>header,
41
+ .runtime-loop-footer,.runtime-current-signal { display: flex; align-items: center; }
42
+
43
+ .runtime-overview-head {
44
+ position: relative;
45
+ z-index: 1;
46
+ justify-content: space-between;
47
+ gap: 24px;
48
+ padding: 20px 22px 18px 24px;
49
+ border-bottom: 1px solid #1d3342;
50
+ background: rgba(7,17,27,.88);
51
+ }
52
+
53
+ .runtime-overview-title { gap: 13px; min-width: 0; }
54
+ .runtime-overview-emblem {
55
+ position: relative;
56
+ display: grid;
57
+ flex: 0 0 46px;
58
+ width: 46px;
59
+ height: 46px;
60
+ place-items: center;
61
+ border: 1px solid #2f645b;
62
+ border-radius: 50%;
63
+ color: #72e0c2;
64
+ background: #0b2727;
65
+ }
66
+ .runtime-overview-emblem::before,.runtime-overview-emblem i { position: absolute; border: 1px solid rgba(114,224,194,.28); border-radius: 50%; content: ""; }
67
+ .runtime-overview-emblem::before { inset: 6px; }
68
+ .runtime-overview-emblem i { inset: 12px; }
69
+ .runtime-overview-emblem b { font-size: 16px; }
70
+
71
+ .runtime-overview-title p,.runtime-schedule-lane>header span,.runtime-loop-lane-head>div>span,
72
+ .runtime-loop-kicker,.runtime-current-signal small,.runtime-loop-footer dt {
73
+ margin: 0 0 3px;
74
+ color: #5cccad;
75
+ font-size: 12px;
76
+ font-weight: 800;
77
+ letter-spacing: .14em;
78
+ text-transform: uppercase;
79
+ }
80
+ .runtime-overview-title h2 { margin: 0; color: #edf7f6; font-size: 19px; letter-spacing: -.035em; }
81
+ .runtime-overview-title>div>span { display: block; margin-top: 4px; color: #8295a3; font-size: 12px; }
82
+ .runtime-overview-counts { flex: 0 0 auto; gap: 7px; }
83
+ .runtime-overview-counts>span,.runtime-overview-counts>b {
84
+ display: inline-flex;
85
+ align-items: center;
86
+ gap: 7px;
87
+ min-height: 28px;
88
+ padding: 0 10px;
89
+ border: 1px solid #294252;
90
+ border-radius: 999px;
91
+ color: #a2b2bc;
92
+ background: #0c1823;
93
+ font-size: 12px;
94
+ font-style: normal;
95
+ }
96
+ .runtime-overview-counts i { width: 5px; height: 5px; border-radius: 50%; background: #77909e; }
97
+ .runtime-overview-counts>span:last-of-type i,.runtime-overview-counts>b i { background: #4cd5ad; box-shadow: 0 0 9px rgba(76,213,173,.9); }
98
+ .runtime-overview-counts>span.paused i { background: #a38b65; box-shadow: none; }
99
+ .runtime-overview-counts>b { color: #64ddb9; border-color: #256950; background: #0b251f; letter-spacing: .12em; }
100
+
101
+ .runtime-overview-grid { display: grid; grid-template-columns: minmax(310px,.82fr) minmax(0,2fr); min-height: 520px; }
102
+ .runtime-schedule-lane { padding: 20px; border-right: 1px solid #274050; background: rgba(8,19,29,.9); }
103
+ .runtime-schedule-lane>header { justify-content: space-between; min-height: 37px; margin: 0 3px 13px; }
104
+ .runtime-schedule-lane>header b,.runtime-loop-lane-head>div>b { display: block; color: #e5eff1; font-size: 14px; }
105
+ .runtime-schedule-lane>header em { color: #365466; font: 700 25px/1 var(--font-mono, monospace); }
106
+ .runtime-schedule-list { display: grid; gap: 10px; max-height: 470px; padding-right: 6px; overflow-y: auto; scrollbar-color: #4a776c #0a1721; scrollbar-width: thin; }
107
+ .runtime-schedule-list:focus-visible { border-radius: 12px; outline: 2px solid #59d8b4; outline-offset: 3px; }
108
+
109
+ .runtime-schedule-card {
110
+ position: relative;
111
+ display: grid;
112
+ width: 100%;
113
+ min-height: 84px;
114
+ padding: 13px 38px 13px 16px;
115
+ overflow: hidden;
116
+ border: 1px solid #203a4a;
117
+ border-radius: 11px;
118
+ color: inherit;
119
+ text-align: left;
120
+ background: #0b1722;
121
+ transition: border-color .2s ease, transform .2s ease, background .2s ease;
122
+ }
123
+ button.runtime-schedule-card { cursor: pointer; }
124
+ button.runtime-schedule-card:hover,button.runtime-schedule-card:focus-visible { transform: translateX(3px); border-color: #3c7c6d; background: #0d211f; outline: none; }
125
+ .runtime-schedule-card.paused { border-color: #263944; background: #0a151c; opacity: .74; }
126
+ .runtime-schedule-card.paused .runtime-schedule-time { color: #a9916b; }
127
+ .runtime-schedule-card::before { position: absolute; inset: 0 auto 0 0; width: 2px; content: ""; background: #3e8e79; }
128
+ .runtime-schedule-card>i { position: absolute; top: 13px; right: 13px; color: #486878; font-size: 12px; font-style: normal; }
129
+ .runtime-schedule-time { margin-bottom: 6px; color: #7be7c7; font: 750 11px/1.2 var(--font-mono, monospace); letter-spacing: .04em; }
130
+ .runtime-schedule-card strong { overflow: hidden; color: #edf5f6; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; }
131
+ .runtime-schedule-card small { overflow: hidden; margin-top: 6px; color: #91a6b1; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
132
+
133
+ .runtime-schedule-empty,.runtime-loop-empty {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 12px;
137
+ min-height: 112px;
138
+ padding: 18px;
139
+ border: 1px dashed #294352;
140
+ border-radius: 13px;
141
+ color: #78909d;
142
+ background: rgba(11,23,34,.58);
143
+ }
144
+ .runtime-schedule-empty>span { color: #477383; font-size: 25px; font-weight: 200; }
145
+ .runtime-schedule-empty b,.runtime-loop-empty b { display: block; color: #a9bbc2; font-size: 12px; }
146
+ .runtime-schedule-empty small,.runtime-loop-empty p { display: block; margin: 4px 0 0; color: #7f949e; font-size: 12px; line-height: 1.5; }
147
+
148
+ .runtime-loop-lane { min-width: 0; padding: 20px 22px 22px; background: rgba(6,15,24,.82); }
149
+ .runtime-loop-lane-head { justify-content: space-between; gap: 18px; min-height: 47px; margin-bottom: 16px; }
150
+ .runtime-loop-lane-head>div>small { display: block; margin-top: 5px; color: #91a4ad; font-size: 12px; white-space: nowrap; }
151
+ .runtime-loop-tabs { display: flex; flex: 1; justify-content: flex-start; gap: 6px; min-width: 0; padding-bottom: 5px; overflow-x: auto; scrollbar-color: #3d6d63 #0a1721; scrollbar-width: thin; }
152
+ .runtime-loop-tab {
153
+ display: grid;
154
+ grid-template-columns: 30px minmax(0,148px) 6px;
155
+ align-items: center;
156
+ gap: 7px;
157
+ min-width: 194px;
158
+ padding: 8px 10px;
159
+ border: 1px solid #253b49;
160
+ border-radius: 9px;
161
+ color: #92a7b1;
162
+ text-align: left;
163
+ background: #0a151f;
164
+ cursor: pointer;
165
+ }
166
+ .runtime-loop-tab.selected { border-color: color-mix(in srgb,var(--provider) 62%,#274553); color: #d6e4e7; background: color-mix(in srgb,var(--provider) 8%,#0a151f); }
167
+ .runtime-loop-tab:focus-visible { outline: 2px solid var(--provider); outline-offset: 2px; }
168
+ .runtime-loop-tab-mark { display: grid; width: 30px; height: 30px; place-items: center; border: 1px solid color-mix(in srgb,var(--provider) 48%,#293c49); border-radius: 8px; color: var(--provider); font-size: 12px; font-weight: 800; }
169
+ .runtime-loop-tab b,.runtime-loop-tab small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
170
+ .runtime-loop-tab b { font-size: 12px; }
171
+ .runtime-loop-tab small { margin-top: 3px; color: #8fa4ad; font-size: 12px; }
172
+ .runtime-loop-tab>i { width: 5px; height: 5px; border-radius: 50%; background: #415866; }
173
+ .runtime-loop-tab.selected>i { background: #51d8b1; box-shadow: 0 0 8px #51d8b1; }
174
+
175
+ .runtime-loop-detail { overflow: hidden; border: 1px solid color-mix(in srgb,var(--provider) 32%,#203746); border-radius: 15px; background: #091620; box-shadow: inset 0 1px rgba(255,255,255,.025); }
176
+ .runtime-loop-detail>header { justify-content: space-between; gap: 18px; padding: 18px 19px 16px; border-bottom: 1px solid #243b48; }
177
+ .runtime-loop-detail>header>div { min-width: 0; }
178
+ .runtime-loop-kicker { display: inline-flex; align-items: center; gap: 7px; }
179
+ .runtime-loop-kicker i { width: 6px; height: 6px; border-radius: 50%; background: #50d8b1; box-shadow: 0 0 12px rgba(80,216,177,.95); animation: runtime-loop-pulse 1.7s ease-in-out infinite; }
180
+ .runtime-loop-detail h3 { overflow: hidden; margin: 5px 0 0; color: #f3f9f9; font-size: 18px; letter-spacing: -.025em; text-overflow: ellipsis; white-space: nowrap; }
181
+ .runtime-loop-detail header p { margin: 5px 0 0; color: #91a4ad; font-size: 12px; }
182
+ .runtime-open-task { min-height: 36px; flex: 0 0 auto; padding: 8px 10px; border: 1px solid #315563; border-radius: 8px; color: #a8bdc5; background: #0c1c27; font-size: 12px; cursor: pointer; }
183
+ .runtime-open-task:hover,.runtime-open-task:focus-visible { border-color: #4fae94; color: #70dfbf; outline: none; }
184
+ .runtime-open-task span { margin-left: 5px; }
185
+
186
+ .runtime-loop-header-actions { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; }
187
+ .runtime-active-phase { display: grid; min-width: 94px; min-height: 38px; align-content: center; padding: 6px 10px; border: 1px solid #2e5b51; border-radius: 9px; background: #0b2521; }
188
+ .runtime-active-phase small { color: #6e968d; font-size: 12px; font-weight: 750; letter-spacing: .08em; }
189
+ .runtime-active-phase b { margin-top: 2px; color: #70e2bf; font-size: 12px; }
190
+
191
+ .runtime-now-strip { display: grid; grid-template-columns: 46px minmax(0,1fr) auto; align-items: center; gap: 13px; min-height: 82px; padding: 13px 17px; border-bottom: 1px solid #203642; background: linear-gradient(90deg,rgba(48,179,139,.14),rgba(10,26,34,.78) 42%,#0a1721); }
192
+ .runtime-now-mark { display: grid; width: 42px; height: 42px; place-items: center; border: 1px solid #327562; border-radius: 11px; color: #8ff0cf; background: #0d3028; box-shadow: 0 0 0 4px rgba(74,209,169,.05); font: 800 10px/1 var(--font-mono,monospace); letter-spacing: .08em; }
193
+ .runtime-now-strip>div { min-width: 0; }
194
+ .runtime-now-strip small { display: block; color: #69dcb8; font-size: 12px; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; }
195
+ .runtime-now-strip b,.runtime-now-strip p { display: block; overflow: hidden; margin: 0; text-overflow: ellipsis; white-space: nowrap; }
196
+ .runtime-now-strip b { margin-top: 5px; color: #eef8f6; font-size: 14px; }
197
+ .runtime-now-strip p { margin-top: 4px; color: #9bb0b7; font-size: 12px; }
198
+ .runtime-now-strip time { align-self: start; padding: 4px 7px; border-radius: 999px; color: #789088; background: #0b1c21; font-size: 12px; white-space: nowrap; }
199
+
200
+ .runtime-loop-cycle { position: relative; display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 10px; min-height: 182px; padding: 22px 18px 32px; }
201
+ .runtime-loop-spine { position: absolute; top: 77px; right: 11%; left: 11%; height: 1px; background: #294a56; }
202
+ .runtime-loop-spine::after { position: absolute; top: -3px; right: -1px; width: 6px; height: 6px; border-top: 1px solid #4b8b82; border-right: 1px solid #4b8b82; content: ""; transform: rotate(45deg); }
203
+ .runtime-loop-spine span { display: block; width: var(--loop-progress,33%); height: 1px; background: #4acba8; box-shadow: 0 0 8px rgba(74,203,168,.72); }
204
+ .runtime-loop-phase { position: relative; display: grid; min-width: 0; justify-items: center; padding: 11px 9px 12px; border: 1px solid #213743; border-radius: 11px; text-align: center; background: rgba(8,20,28,.86); }
205
+ .runtime-loop-phase-index { display: flex; width: 100%; align-items: center; justify-content: space-between; margin-bottom: 11px; color: #879da6; font: 750 10px/1 var(--font-mono, monospace); }
206
+ .runtime-loop-phase-index em { padding: 3px 6px; border-radius: 999px; color: #657982; background: #111f28; font: 750 9px/1 Geist,"Segoe UI",sans-serif; font-style: normal; letter-spacing: 0; }
207
+ .runtime-loop-phase>i { position: relative; z-index: 1; display: grid; width: 32px; height: 32px; place-items: center; border: 1px solid #385967; border-radius: 50%; color: #6f8994; background: #0a1822; font-size: 12px; font-style: normal; }
208
+ .runtime-loop-phase>b { margin-top: 9px; color: #a0b3ba; font-size: 13px; }
209
+ .runtime-loop-phase>small { margin-top: 4px; color: #8499a2; font-size: 12px; }
210
+ .runtime-loop-phase.done { border-color: #285045; background: rgba(10,35,30,.7); }
211
+ .runtime-loop-phase.done>i { border-color: #31705f; color: #5ed8b6; background: #0b2621; }
212
+ .runtime-loop-phase.done>b { color: #99b6b4; }
213
+ .runtime-loop-phase.active { border-color: #3b876f; background: linear-gradient(180deg,rgba(27,83,66,.48),rgba(10,37,31,.78)); box-shadow: inset 0 2px #53d8ae,0 12px 28px rgba(0,0,0,.16); }
214
+ .runtime-loop-phase.active .runtime-loop-phase-index em { color: #8df0ce; background: #164638; }
215
+ .runtime-loop-phase.active>i { border-color: #5ae0ba; color: #65e4c0; background: #0b2d26; box-shadow: 0 0 0 5px rgba(72,211,174,.08),0 0 18px rgba(72,211,174,.35); }
216
+ .runtime-loop-phase.active>b { color: #64deb9; }
217
+ .runtime-loop-return { position: absolute; right: 13%; bottom: 7px; left: 13%; height: 15px; border-right: 1px solid #2e5e58; border-bottom: 1px solid #2e5e58; border-left: 1px solid #2e5e58; border-radius: 0 0 9px 9px; color: #4f9183; }
218
+ .runtime-loop-return>span { position: absolute; bottom: -7px; left: -5px; padding: 0 3px; background: #091620; font-size: 12px; }
219
+ .runtime-loop-return>b { position: absolute; right: 50%; bottom: -5px; padding: 0 7px; color: #7da39a; background: #091620; font-size: 12px; letter-spacing: .12em; text-transform: uppercase; transform: translateX(50%); }
220
+
221
+ .runtime-loop-footer { justify-content: flex-end; gap: 18px; padding: 13px 17px; border-top: 1px solid #243b48; background: #0b1821; }
222
+ .runtime-current-signal { gap: 10px; min-width: 0; }
223
+ .runtime-current-signal>span { display: grid; flex: 0 0 30px; width: 30px; height: 30px; place-items: center; border: 1px solid #28584f; border-radius: 8px; color: #54c7a7; background: #0b2621; }
224
+ .runtime-current-signal>div { min-width: 0; }
225
+ .runtime-current-signal small { display: block; }
226
+ .runtime-current-signal b,.runtime-current-signal p { display: block; overflow: hidden; margin: 0; text-overflow: ellipsis; white-space: nowrap; }
227
+ .runtime-current-signal b { max-width: 350px; color: #c5d5d8; font-size: 12px; }
228
+ .runtime-current-signal p { max-width: 350px; margin-top: 3px; color: #8398a2; font-size: 12px; }
229
+ .runtime-loop-footer dl { display: grid; width: 100%; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; margin: 0; }
230
+ .runtime-loop-footer dl>div { min-width: 0; padding: 8px 10px; border-left: 2px solid #2f5d54; background: #0b2022; }
231
+ .runtime-loop-footer dt { margin-bottom: 4px; color: #7ca29b; font-size: 12px; }
232
+ .runtime-loop-footer dd { margin: 0; color: #d0e1e1; font: 750 11px/1.2 var(--font-mono, monospace); }
233
+ .runtime-loop-empty { min-height: 228px; justify-content: center; }
234
+ .runtime-loop-empty-orbit { position: relative; display: grid; width: 46px; height: 46px; place-items: center; border: 1px solid #285044; border-radius: 50%; }
235
+ .runtime-loop-empty-orbit::before { position: absolute; inset: 8px; border: 1px solid #274541; border-radius: 50%; content: ""; }
236
+ .runtime-loop-empty-orbit i { width: 6px; height: 6px; border-radius: 50%; background: #3f7c6d; }
237
+
238
+ body[data-current-view="runtime"] .topbar {
239
+ align-items: center;
240
+ padding-bottom: 10px;
241
+ border-bottom: 1px solid #20303c;
242
+ }
243
+ body[data-current-view="runtime"] .topbar .eyebrow,
244
+ body[data-current-view="runtime"] .topbar .subtitle { display: none; }
245
+ body[data-current-view="runtime"] .topbar h1 { font-size: 22px; }
246
+ body[data-current-view="runtime"] .automation-overview { max-width: 1640px; margin: 18px auto 0; }
247
+
248
+ @keyframes runtime-loop-pulse { 50% { opacity: .45; transform: scale(.76); } }
249
+
250
+ @media (max-width:1100px) {
251
+ .runtime-overview-grid { grid-template-columns: 1fr; }
252
+ .runtime-schedule-lane { border-right: 0; border-bottom: 1px solid #1c3443; }
253
+ .runtime-schedule-list { grid-template-columns: repeat(2,minmax(0,1fr)); max-height: 260px; }
254
+ .runtime-loop-lane-head { align-items: flex-start; flex-direction: column; }
255
+ .runtime-loop-tabs { width: 100%; justify-content: flex-start; }
256
+ }
257
+
258
+ @media (max-width:720px) {
259
+ .automation-overview { margin-top: 15px; border-radius: 15px; }
260
+ .runtime-overview-head { align-items: flex-start; padding: 16px; flex-direction: column; }
261
+ .runtime-overview-emblem { width: 39px; height: 39px; flex-basis: 39px; }
262
+ .runtime-overview-title h2 { font-size: 16px; }
263
+ .runtime-overview-title>div>span { font-size: 12px; }
264
+ .runtime-overview-counts { width: 100%; }
265
+ .runtime-overview-counts>span,.runtime-overview-counts>b { flex: 1; justify-content: center; padding-inline: 6px; }
266
+ .runtime-schedule-lane,.runtime-loop-lane { padding: 14px; }
267
+ .runtime-schedule-list { grid-template-columns: 1fr; }
268
+ .runtime-loop-tab { min-width: 145px; }
269
+ .runtime-loop-detail>header { align-items: flex-start; }
270
+ .runtime-loop-header-actions { align-items: flex-end; flex-direction: column-reverse; }
271
+ .runtime-active-phase { min-width: 86px; }
272
+ .runtime-now-strip { grid-template-columns: 42px minmax(0,1fr); }
273
+ .runtime-now-strip time { grid-column: 2; justify-self: start; }
274
+ .runtime-loop-cycle { grid-template-columns: repeat(2,minmax(0,1fr)); gap: 20px 10px; padding-bottom: 31px; }
275
+ .runtime-loop-spine { display: none; }
276
+ .runtime-loop-return { right: 8%; left: 8%; }
277
+ .runtime-loop-footer { align-items: stretch; flex-direction: column; }
278
+ .runtime-current-signal b,.runtime-current-signal p { max-width: calc(100vw - 110px); }
279
+ .runtime-loop-footer dl { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; }
280
+ }
281
+
282
+ @media (prefers-reduced-motion:reduce) {
283
+ .runtime-loop-kicker i { animation: none; }
284
+ .runtime-schedule-card { transition: none; }
285
+ }
@@ -67,7 +67,7 @@
67
67
  display: block;
68
68
  margin-top: 4px;
69
69
  color: #718c85;
70
- font-size: 9px;
70
+ font-size: 12px;
71
71
  }
72
72
 
73
73
  .update-notice button {
@@ -77,7 +77,7 @@
77
77
  border-radius: 9px;
78
78
  background: #153d31;
79
79
  color: #88ebc8;
80
- font-size: 10px;
80
+ font-size: 12px;
81
81
  font-weight: 750;
82
82
  cursor: pointer;
83
83
  }
@@ -186,7 +186,7 @@
186
186
  .language-settings-copy>span {
187
187
  display: block;
188
188
  color: #5d857a;
189
- font-size: 8px;
189
+ font-size: 12px;
190
190
  font-weight: 850;
191
191
  letter-spacing: .13em;
192
192
  text-transform: uppercase;
@@ -195,7 +195,7 @@
195
195
  .language-select>span {
196
196
  display: block;
197
197
  color: #5d857a;
198
- font-size: 8px;
198
+ font-size: 12px;
199
199
  font-weight: 850;
200
200
  letter-spacing: .13em;
201
201
  text-transform: uppercase;
@@ -211,7 +211,7 @@
211
211
  .language-settings-copy p {
212
212
  margin: 6px 0 0;
213
213
  color: #71838c;
214
- font-size: 10px;
214
+ font-size: 12px;
215
215
  line-height: 1.55;
216
216
  }
217
217
 
@@ -243,6 +243,154 @@
243
243
  box-shadow: 0 0 0 3px rgba(94,221,181,.1);
244
244
  }
245
245
 
246
+ .provider-visibility-card {
247
+ display: grid;
248
+ grid-template-columns: minmax(240px,.72fr) minmax(0,1.28fr);
249
+ gap: 22px;
250
+ margin-bottom: 12px;
251
+ padding: 18px 19px;
252
+ border: 1px solid #2a403e;
253
+ border-radius: 16px;
254
+ background: radial-gradient(circle at 100% 0,rgba(73,216,171,.08),transparent 32%),linear-gradient(120deg,#0f1a20,#0a1219);
255
+ box-shadow: inset 0 1px rgba(255,255,255,.025);
256
+ }
257
+
258
+ .provider-visibility-copy>span {
259
+ color: #5d857a;
260
+ font-size: 12px;
261
+ font-weight: 850;
262
+ letter-spacing: .13em;
263
+ text-transform: uppercase;
264
+ }
265
+
266
+ .provider-visibility-copy h3 {
267
+ margin: 7px 0 0;
268
+ color: #e3eceb;
269
+ font-size: 16px;
270
+ }
271
+
272
+ .provider-visibility-copy p {
273
+ max-width: 420px;
274
+ margin: 7px 0 0;
275
+ color: #82959d;
276
+ font-size: 12px;
277
+ line-height: 1.65;
278
+ }
279
+
280
+ .provider-visibility-list {
281
+ display: grid;
282
+ grid-template-columns: repeat(2,minmax(0,1fr));
283
+ gap: 9px;
284
+ }
285
+
286
+ .provider-visibility-option {
287
+ position: relative;
288
+ min-width: 0;
289
+ display: grid;
290
+ grid-template-columns: 38px minmax(0,1fr) auto 38px;
291
+ align-items: center;
292
+ gap: 10px;
293
+ min-height: 62px;
294
+ padding: 10px 12px;
295
+ border: 1px solid color-mix(in srgb,var(--provider) 34%,#263740);
296
+ border-radius: 12px;
297
+ background: color-mix(in srgb,var(--provider) 7%,#0c151c);
298
+ cursor: pointer;
299
+ transition: border-color .18s ease,background .18s ease,opacity .18s ease,transform .18s ease;
300
+ }
301
+
302
+ .provider-visibility-option:hover {
303
+ border-color: color-mix(in srgb,var(--provider) 56%,#31454e);
304
+ transform: translateY(-1px);
305
+ }
306
+
307
+ .provider-visibility-option.disabled {
308
+ border-color: #29343c;
309
+ background: #0b1218;
310
+ opacity: .68;
311
+ }
312
+
313
+ .provider-visibility-option .provider-mark {
314
+ width: 36px;
315
+ height: 36px;
316
+ font-size: 12px;
317
+ }
318
+
319
+ .provider-visibility-name {
320
+ min-width: 0;
321
+ }
322
+
323
+ .provider-visibility-name b,
324
+ .provider-visibility-name small {
325
+ display: block;
326
+ overflow: hidden;
327
+ text-overflow: ellipsis;
328
+ white-space: nowrap;
329
+ }
330
+
331
+ .provider-visibility-name b {
332
+ color: #e3eceb;
333
+ font-size: 12px;
334
+ }
335
+
336
+ .provider-visibility-name small {
337
+ margin-top: 4px;
338
+ color: #6f818a;
339
+ font-size: 12px;
340
+ }
341
+
342
+ .provider-visibility-status {
343
+ color: color-mix(in srgb,var(--provider) 72%,#a8bbb9);
344
+ font-size: 12px;
345
+ font-weight: 750;
346
+ }
347
+
348
+ .provider-visibility-option.disabled .provider-visibility-status {
349
+ color: #72808a;
350
+ }
351
+
352
+ .provider-visibility-option input {
353
+ position: absolute;
354
+ width: 1px;
355
+ height: 1px;
356
+ opacity: 0;
357
+ pointer-events: none;
358
+ }
359
+
360
+ .provider-toggle {
361
+ width: 36px;
362
+ height: 20px;
363
+ padding: 2px;
364
+ border: 1px solid #3b4b54;
365
+ border-radius: 999px;
366
+ background: #172129;
367
+ transition: background .18s ease,border-color .18s ease;
368
+ }
369
+
370
+ .provider-toggle i {
371
+ display: block;
372
+ width: 14px;
373
+ height: 14px;
374
+ border-radius: 50%;
375
+ background: #72818a;
376
+ transition: transform .18s ease,background .18s ease;
377
+ }
378
+
379
+ .provider-visibility-option input:checked+.provider-toggle {
380
+ border-color: color-mix(in srgb,var(--provider) 70%,#4b776c);
381
+ background: color-mix(in srgb,var(--provider) 24%,#153029);
382
+ }
383
+
384
+ .provider-visibility-option input:checked+.provider-toggle i {
385
+ transform: translateX(16px);
386
+ background: var(--provider);
387
+ }
388
+
389
+ .provider-visibility-option:has(input:focus-visible) {
390
+ outline: 2px solid #74e1bd;
391
+ outline-offset: 2px;
392
+ }
393
+
246
394
  .update-panel {
247
395
  overflow: hidden;
248
396
  border: 1px solid #263740;
@@ -274,7 +422,7 @@
274
422
 
275
423
  .version-node span {
276
424
  color: #687b89;
277
- font-size: 9px;
425
+ font-size: 12px;
278
426
  font-weight: 800;
279
427
  letter-spacing: .1em;
280
428
  text-transform: uppercase;
@@ -316,7 +464,7 @@
316
464
  .version-connector span {
317
465
  color: #50786d;
318
466
  font-family: "Geist Mono","Cascadia Code",Consolas,monospace;
319
- font-size: 8px;
467
+ font-size: 12px;
320
468
  font-weight: 800;
321
469
  letter-spacing: .13em;
322
470
  white-space: nowrap;
@@ -344,7 +492,7 @@
344
492
 
345
493
  .update-state-copy span {
346
494
  color: #687c89;
347
- font-size: 8px;
495
+ font-size: 12px;
348
496
  font-weight: 850;
349
497
  letter-spacing: .13em;
350
498
  }
@@ -401,7 +549,7 @@
401
549
  align-items: center;
402
550
  justify-content: space-between;
403
551
  color: #83a79c;
404
- font-size: 9px;
552
+ font-size: 12px;
405
553
  }
406
554
 
407
555
  .update-progress>div:first-child b {
@@ -431,7 +579,7 @@
431
579
  display: block;
432
580
  margin-top: 7px;
433
581
  color: #58756c;
434
- font-size: 8px;
582
+ font-size: 12px;
435
583
  }
436
584
 
437
585
  .update-error {
@@ -441,7 +589,7 @@
441
589
  border-radius: 10px;
442
590
  background: #25171b;
443
591
  color: #e7959b;
444
- font-size: 9px;
592
+ font-size: 12px;
445
593
  line-height: 1.55;
446
594
  }
447
595
 
@@ -463,7 +611,7 @@
463
611
  border: 0;
464
612
  background: transparent;
465
613
  color: #67caa9;
466
- font-size: 9px;
614
+ font-size: 12px;
467
615
  cursor: pointer;
468
616
  }
469
617
 
@@ -528,22 +676,22 @@
528
676
  color: #57746b;
529
677
  font-weight: 850;
530
678
  letter-spacing: .11em;
531
- font-size: 10px;
679
+ font-size: 12px;
532
680
  }
533
681
 
534
682
  .version-node>span {
535
- font-size: 10px;
683
+ font-size: 12px;
536
684
  }
537
685
 
538
686
  .update-state-copy>span {
539
- font-size: 10px;
687
+ font-size: 12px;
540
688
  }
541
689
 
542
690
  .release-notes>div span {
543
691
  color: #5e756f;
544
692
  font-weight: 850;
545
693
  letter-spacing: .13em;
546
- font-size: 10px;
694
+ font-size: 12px;
547
695
  }
548
696
 
549
697
  .settings-meta-grid b {
@@ -604,3 +752,15 @@ body[data-current-view="settings"] .topbar h1 {
604
752
  transform: rotate(360deg);
605
753
  }
606
754
  }
755
+
756
+ @media (max-width: 880px) {
757
+ .provider-visibility-card {
758
+ grid-template-columns: 1fr;
759
+ }
760
+ }
761
+
762
+ @media (max-width: 560px) {
763
+ .provider-visibility-list {
764
+ grid-template-columns: 1fr;
765
+ }
766
+ }