@zackbart/connecta 0.7.9 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/README.md +47 -148
  3. package/dist/activity.d.ts +0 -8
  4. package/dist/activity.d.ts.map +1 -1
  5. package/dist/activity.js +0 -1
  6. package/dist/activity.js.map +1 -1
  7. package/dist/auth/bearer.d.ts +1 -7
  8. package/dist/auth/bearer.d.ts.map +1 -1
  9. package/dist/auth/bearer.js +3 -24
  10. package/dist/auth/bearer.js.map +1 -1
  11. package/dist/auth/clerk.d.ts +2 -11
  12. package/dist/auth/clerk.d.ts.map +1 -1
  13. package/dist/auth/clerk.js +31 -46
  14. package/dist/auth/clerk.js.map +1 -1
  15. package/dist/call-admission.d.ts.map +1 -1
  16. package/dist/call-admission.js +9 -4
  17. package/dist/call-admission.js.map +1 -1
  18. package/dist/catalog-fingerprint.d.ts +20 -0
  19. package/dist/catalog-fingerprint.d.ts.map +1 -0
  20. package/dist/catalog-fingerprint.js +34 -0
  21. package/dist/catalog-fingerprint.js.map +1 -0
  22. package/dist/catalog-limits.d.ts +10 -0
  23. package/dist/catalog-limits.d.ts.map +1 -0
  24. package/dist/catalog-limits.js +10 -0
  25. package/dist/catalog-limits.js.map +1 -0
  26. package/dist/catalog-service.d.ts +137 -0
  27. package/dist/catalog-service.d.ts.map +1 -0
  28. package/dist/catalog-service.js +401 -0
  29. package/dist/catalog-service.js.map +1 -0
  30. package/dist/catalog.d.ts +6 -0
  31. package/dist/catalog.d.ts.map +1 -1
  32. package/dist/catalog.js +53 -2
  33. package/dist/catalog.js.map +1 -1
  34. package/dist/concurrency.d.ts +4 -0
  35. package/dist/concurrency.d.ts.map +1 -0
  36. package/dist/concurrency.js +31 -0
  37. package/dist/concurrency.js.map +1 -0
  38. package/dist/connectors/api.d.ts.map +1 -1
  39. package/dist/connectors/api.js +22 -12
  40. package/dist/connectors/api.js.map +1 -1
  41. package/dist/connectors/remote-mcp.d.ts.map +1 -1
  42. package/dist/connectors/remote-mcp.js +53 -41
  43. package/dist/connectors/remote-mcp.js.map +1 -1
  44. package/dist/credentials.d.ts +3 -2
  45. package/dist/credentials.d.ts.map +1 -1
  46. package/dist/errors.d.ts +19 -1
  47. package/dist/errors.d.ts.map +1 -1
  48. package/dist/errors.js.map +1 -1
  49. package/dist/execute.d.ts +10 -16
  50. package/dist/execute.d.ts.map +1 -1
  51. package/dist/execute.js +143 -330
  52. package/dist/execute.js.map +1 -1
  53. package/dist/executor-result.d.ts +0 -3
  54. package/dist/executor-result.d.ts.map +1 -1
  55. package/dist/executor-result.js +3 -3
  56. package/dist/executor-result.js.map +1 -1
  57. package/dist/executors/quickjs-child.js +3 -3
  58. package/dist/executors/quickjs-child.js.map +1 -1
  59. package/dist/executors/quickjs-protocol.d.ts +4 -1
  60. package/dist/executors/quickjs-protocol.d.ts.map +1 -1
  61. package/dist/executors/quickjs-runtime.d.ts.map +1 -1
  62. package/dist/executors/quickjs-runtime.js +7 -2
  63. package/dist/executors/quickjs-runtime.js.map +1 -1
  64. package/dist/executors/quickjs.d.ts.map +1 -1
  65. package/dist/executors/quickjs.js +4 -1
  66. package/dist/executors/quickjs.js.map +1 -1
  67. package/dist/favicon.js +2 -2
  68. package/dist/favicon.js.map +1 -1
  69. package/dist/index.d.ts +8 -82
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +58 -104
  72. package/dist/index.js.map +1 -1
  73. package/dist/invocation.d.ts +101 -0
  74. package/dist/invocation.d.ts.map +1 -0
  75. package/dist/invocation.js +405 -0
  76. package/dist/invocation.js.map +1 -0
  77. package/dist/meta-tools.d.ts +9 -95
  78. package/dist/meta-tools.d.ts.map +1 -1
  79. package/dist/meta-tools.js +235 -725
  80. package/dist/meta-tools.js.map +1 -1
  81. package/dist/operator-ui/generated.d.ts +3 -0
  82. package/dist/operator-ui/generated.d.ts.map +1 -0
  83. package/dist/operator-ui/generated.js +5 -0
  84. package/dist/operator-ui/generated.js.map +1 -0
  85. package/dist/operator-ui/model.d.ts +73 -0
  86. package/dist/operator-ui/model.d.ts.map +1 -0
  87. package/dist/operator-ui/model.js +28 -0
  88. package/dist/operator-ui/model.js.map +1 -0
  89. package/dist/registry.d.ts +33 -184
  90. package/dist/registry.d.ts.map +1 -1
  91. package/dist/registry.js +345 -330
  92. package/dist/registry.js.map +1 -1
  93. package/dist/retired-toolkits.d.ts +3 -0
  94. package/dist/retired-toolkits.d.ts.map +1 -0
  95. package/dist/retired-toolkits.js +9 -0
  96. package/dist/retired-toolkits.js.map +1 -0
  97. package/dist/routes/activity.d.ts +3 -0
  98. package/dist/routes/activity.d.ts.map +1 -0
  99. package/dist/routes/activity.js +170 -0
  100. package/dist/routes/activity.js.map +1 -0
  101. package/dist/routes/credentials.d.ts +3 -0
  102. package/dist/routes/credentials.d.ts.map +1 -0
  103. package/dist/routes/credentials.js +170 -0
  104. package/dist/routes/credentials.js.map +1 -0
  105. package/dist/routes/mcp.d.ts +8 -0
  106. package/dist/routes/mcp.d.ts.map +1 -0
  107. package/dist/routes/mcp.js +270 -0
  108. package/dist/routes/mcp.js.map +1 -0
  109. package/dist/routes/oauth.d.ts +4 -0
  110. package/dist/routes/oauth.d.ts.map +1 -0
  111. package/dist/routes/oauth.js +263 -0
  112. package/dist/routes/oauth.js.map +1 -0
  113. package/dist/routes/shared.d.ts +76 -0
  114. package/dist/routes/shared.d.ts.map +1 -0
  115. package/dist/routes/shared.js +140 -0
  116. package/dist/routes/shared.js.map +1 -0
  117. package/dist/routes/ui.d.ts +3 -0
  118. package/dist/routes/ui.d.ts.map +1 -0
  119. package/dist/routes/ui.js +116 -0
  120. package/dist/routes/ui.js.map +1 -0
  121. package/dist/server.d.ts +9 -40
  122. package/dist/server.d.ts.map +1 -1
  123. package/dist/server.js +62 -1322
  124. package/dist/server.js.map +1 -1
  125. package/dist/skills.d.ts +3 -21
  126. package/dist/skills.d.ts.map +1 -1
  127. package/dist/skills.js +15 -43
  128. package/dist/skills.js.map +1 -1
  129. package/dist/storage/file.d.ts.map +1 -1
  130. package/dist/storage/file.js +3 -1
  131. package/dist/storage/file.js.map +1 -1
  132. package/dist/storage/memory.d.ts.map +1 -1
  133. package/dist/storage/memory.js +3 -1
  134. package/dist/storage/memory.js.map +1 -1
  135. package/dist/timeout.d.ts.map +1 -1
  136. package/dist/timeout.js +2 -4
  137. package/dist/timeout.js.map +1 -1
  138. package/dist/types.d.ts +9 -59
  139. package/dist/types.d.ts.map +1 -1
  140. package/dist/ui.d.ts +3 -94
  141. package/dist/ui.d.ts.map +1 -1
  142. package/dist/ui.js +30 -1427
  143. package/dist/ui.js.map +1 -1
  144. package/dist/version.d.ts +1 -1
  145. package/dist/version.js +1 -1
  146. package/package.json +15 -8
  147. package/src/activity.ts +0 -9
  148. package/src/auth/bearer.ts +4 -33
  149. package/src/auth/clerk.ts +35 -48
  150. package/src/call-admission.ts +8 -6
  151. package/src/catalog-fingerprint.ts +52 -0
  152. package/src/catalog-limits.ts +11 -0
  153. package/src/catalog-service.ts +601 -0
  154. package/src/catalog.ts +57 -2
  155. package/src/concurrency.ts +39 -0
  156. package/src/connectors/api.ts +22 -12
  157. package/src/connectors/remote-mcp.ts +63 -45
  158. package/src/credentials.ts +2 -2
  159. package/src/errors.ts +21 -1
  160. package/src/execute.ts +193 -423
  161. package/src/executor-result.ts +3 -3
  162. package/src/executors/quickjs-child.ts +8 -4
  163. package/src/executors/quickjs-protocol.ts +1 -1
  164. package/src/executors/quickjs-runtime.ts +5 -1
  165. package/src/executors/quickjs.ts +11 -8
  166. package/src/favicon.ts +2 -2
  167. package/src/index.ts +70 -222
  168. package/src/invocation.ts +580 -0
  169. package/src/meta-tools.ts +393 -985
  170. package/src/operator-ui/browser.css +360 -0
  171. package/src/operator-ui/browser.ts +987 -0
  172. package/src/operator-ui/generated.ts +4 -0
  173. package/src/operator-ui/model.ts +105 -0
  174. package/src/registry.ts +459 -439
  175. package/src/retired-toolkits.ts +14 -0
  176. package/src/routes/activity.ts +215 -0
  177. package/src/routes/credentials.ts +254 -0
  178. package/src/routes/mcp.ts +339 -0
  179. package/src/routes/oauth.ts +322 -0
  180. package/src/routes/shared.ts +240 -0
  181. package/src/routes/ui.ts +143 -0
  182. package/src/server.ts +64 -1731
  183. package/src/skills.ts +15 -43
  184. package/src/storage/file.ts +3 -1
  185. package/src/storage/memory.ts +3 -1
  186. package/src/timeout.ts +2 -4
  187. package/src/types.ts +8 -60
  188. package/src/ui.ts +60 -1538
  189. package/src/version.ts +1 -1
  190. package/dist/credential-health.d.ts +0 -227
  191. package/dist/credential-health.d.ts.map +0 -1
  192. package/dist/credential-health.js +0 -606
  193. package/dist/credential-health.js.map +0 -1
  194. package/dist/toolkits.d.ts +0 -146
  195. package/dist/toolkits.d.ts.map +0 -1
  196. package/dist/toolkits.js +0 -322
  197. package/dist/toolkits.js.map +0 -1
  198. package/src/credential-health.ts +0 -832
  199. package/src/toolkits.ts +0 -461
@@ -0,0 +1,360 @@
1
+ :root {
2
+ color-scheme: light;
3
+ --ink: #000;
4
+ --paper: #fff;
5
+ --rule: #ccc;
6
+ --muted: #666;
7
+ --trace: #f5f5f5;
8
+ --shell: 70rem;
9
+ --pad: 1rem;
10
+ --gap: 1.5rem;
11
+ --sans: "Helvetica Neue", Helvetica, Arial, sans-serif;
12
+ --mono: ui-monospace, "SF Mono", Menlo, Monaco, "Cascadia Code", Consolas,
13
+ monospace;
14
+ }
15
+ * { border-radius: 0; box-sizing: border-box; }
16
+ html {
17
+ background: var(--paper);
18
+ color: var(--ink);
19
+ font-family: var(--sans);
20
+ font-size: 16px;
21
+ line-height: 1.5;
22
+ -webkit-font-smoothing: antialiased;
23
+ text-rendering: optimizeLegibility;
24
+ }
25
+ body { margin: 0; min-height: 100vh; }
26
+ ::selection { background: var(--ink); color: var(--paper); }
27
+ :is(h1, h2, h3, p, ul, ol) { margin: 0; padding: 0; }
28
+ :is(h1, h2, h3) { font-size: inherit; font-weight: 400; }
29
+ :is(ul, ol) { list-style: none; }
30
+ a { color: inherit; }
31
+ button, input { font: inherit; }
32
+ button {
33
+ background: none;
34
+ border: 0;
35
+ color: inherit;
36
+ cursor: pointer;
37
+ margin: 0;
38
+ padding: 0;
39
+ text-align: left;
40
+ }
41
+ button:disabled { cursor: wait; opacity: .5; }
42
+ input {
43
+ background: var(--paper);
44
+ border: 1px solid var(--rule);
45
+ color: var(--ink);
46
+ min-height: 2rem;
47
+ padding: .2rem .5rem;
48
+ }
49
+ input:focus-visible { outline-offset: -1px; }
50
+ :is(a, button, input, summary):focus-visible {
51
+ outline: 1px solid var(--ink);
52
+ }
53
+ :is(a, button, summary):focus-visible { outline-offset: 2px; }
54
+ .skip-link {
55
+ background: var(--paper);
56
+ left: var(--pad);
57
+ padding: .5rem;
58
+ position: fixed;
59
+ top: -4rem;
60
+ z-index: 10;
61
+ }
62
+ .skip-link:focus { top: var(--pad); }
63
+
64
+ .shell {
65
+ margin: 0 auto;
66
+ max-width: var(--shell);
67
+ padding-left: var(--pad);
68
+ padding-right: var(--pad);
69
+ }
70
+ .pgrid {
71
+ column-gap: var(--gap);
72
+ display: grid;
73
+ grid-template-columns: repeat(3, minmax(0, 1fr));
74
+ row-gap: 1rem;
75
+ }
76
+ .pcap { grid-column: 1; }
77
+ .pbody { grid-column: 2 / -1; min-width: 0; }
78
+ .cap, .meta { color: var(--muted); font-size: .9em; }
79
+ .mono { font-family: var(--mono); font-size: .78rem; }
80
+ .hidden { display: none !important; }
81
+ .visually-hidden {
82
+ clip: rect(0 0 0 0);
83
+ clip-path: inset(50%);
84
+ height: 1px;
85
+ overflow: hidden;
86
+ position: absolute;
87
+ white-space: nowrap;
88
+ width: 1px;
89
+ }
90
+
91
+ .masthead {
92
+ align-items: start;
93
+ padding-bottom: var(--pad);
94
+ padding-top: var(--pad);
95
+ }
96
+ .brand {
97
+ font-weight: 500;
98
+ grid-column: 1;
99
+ text-decoration: none;
100
+ }
101
+ .mast-nav {
102
+ display: flex;
103
+ gap: var(--gap);
104
+ grid-column: 2 / -1;
105
+ justify-content: space-between;
106
+ min-width: 0;
107
+ }
108
+ .mast-actions {
109
+ display: flex;
110
+ gap: var(--gap);
111
+ justify-content: flex-end;
112
+ min-width: 0;
113
+ }
114
+ .page-nav,
115
+ .session-actions {
116
+ display: flex;
117
+ flex-wrap: wrap;
118
+ gap: .5rem var(--gap);
119
+ }
120
+ .mast-actions :is(a, button) {
121
+ align-items: center;
122
+ display: inline-flex;
123
+ min-height: 2rem;
124
+ }
125
+ .navlink,
126
+ .linklike {
127
+ text-decoration: underline;
128
+ text-decoration-thickness: 1.5px;
129
+ text-underline-offset: .22em;
130
+ }
131
+ .navlink { text-decoration-color: transparent; }
132
+ .navlink:hover,
133
+ .navlink:focus-visible,
134
+ .navlink[aria-current="page"] { text-decoration-color: currentColor; }
135
+ .linklike { text-decoration-color: currentColor; }
136
+ .linklike:hover,
137
+ .linklike:focus-visible { text-decoration-color: transparent; }
138
+
139
+ .page { padding-bottom: 5rem; }
140
+ .lead { margin-top: 6rem; }
141
+ .section,
142
+ .section + .section { margin-top: 3rem; }
143
+ .lead-copy,
144
+ .body-copy { max-width: 34em; }
145
+ .lead-copy > * + *,
146
+ .body-copy > * + * { margin-top: 1.5rem; }
147
+ .row,
148
+ .actions {
149
+ align-items: center;
150
+ display: flex;
151
+ flex-wrap: wrap;
152
+ gap: var(--gap);
153
+ }
154
+ .row input { flex: 1; min-width: 12rem; }
155
+
156
+ .gate-actions { margin-top: 1.5rem; }
157
+ #err { margin-top: 1.5rem; text-decoration: underline; }
158
+
159
+ .endpoint { border-bottom: 1px solid var(--rule); border-top: 1px solid var(--rule); }
160
+ .endpoint-row {
161
+ align-items: baseline;
162
+ display: flex;
163
+ gap: var(--gap);
164
+ min-width: 0;
165
+ padding: .75rem 0;
166
+ }
167
+ .endpoint-row code {
168
+ flex: 1;
169
+ min-width: 0;
170
+ overflow-x: auto;
171
+ white-space: nowrap;
172
+ }
173
+ .endpoint-row button { flex: none; }
174
+
175
+ .connector-tools { border-bottom: 1px solid var(--rule); }
176
+ .toolbar { margin-bottom: 1.5rem; }
177
+ .toolbar input { flex-basis: 18rem; }
178
+ #notice { margin-bottom: .75rem; }
179
+ #notice:empty { display: none; }
180
+ #notice:not(:empty) { text-decoration: underline; }
181
+ #oauthNotice { margin-bottom: .75rem; }
182
+ #oauthNotice:empty { display: none; }
183
+ .error-notice, .msg { text-decoration: underline; }
184
+ .card,
185
+ .credential-card,
186
+ .activity-item {
187
+ padding-left: 1.25rem;
188
+ position: relative;
189
+ }
190
+ .card::before,
191
+ .credential-card::before,
192
+ .activity-item::before {
193
+ background: var(--rule);
194
+ bottom: 0;
195
+ content: "";
196
+ left: .25rem;
197
+ position: absolute;
198
+ top: 0;
199
+ width: 1px;
200
+ }
201
+ .card { border-top: 1px solid var(--rule); padding-bottom: .75rem; padding-top: .75rem; }
202
+ .connector-head {
203
+ display: grid;
204
+ gap: var(--gap);
205
+ grid-template-columns: minmax(0, 2fr) minmax(10rem, 1fr);
206
+ }
207
+ .connector-title {
208
+ align-items: baseline;
209
+ display: flex;
210
+ gap: .5rem;
211
+ }
212
+ .connector-title .dot,
213
+ .activity-stamp .dot {
214
+ margin-left: -1.25rem;
215
+ }
216
+ .activity-stamp {
217
+ align-items: baseline;
218
+ display: flex;
219
+ gap: .75rem;
220
+ }
221
+ .card h2 { overflow-wrap: anywhere; }
222
+ .connector-state { text-align: right; }
223
+ .dot {
224
+ background: var(--paper);
225
+ border: 1px solid var(--ink);
226
+ display: inline-block;
227
+ flex: none;
228
+ height: .5rem;
229
+ width: .5rem;
230
+ z-index: 1;
231
+ }
232
+ .dot.ok { background: var(--ink); }
233
+ .dot.auth_required {
234
+ background: linear-gradient(90deg, var(--ink) 50%, var(--paper) 50%);
235
+ }
236
+ .connector-description { margin-top: .25rem; max-width: 40rem; }
237
+ .connector-message,
238
+ .connector-auth { margin-top: .75rem; }
239
+ .credential-ledger { border-bottom: 1px solid var(--rule); }
240
+ .credential-card { border-top: 1px solid var(--rule); padding-bottom: .75rem; padding-top: .75rem; }
241
+ .credential-head {
242
+ align-items: baseline;
243
+ display: flex;
244
+ flex-wrap: wrap;
245
+ gap: .25rem var(--gap);
246
+ justify-content: space-between;
247
+ }
248
+ .credential-copy { margin-top: .25rem; max-width: 40rem; }
249
+ .credential-field-summary {
250
+ border-top: 1px solid var(--rule);
251
+ margin-top: .75rem;
252
+ }
253
+ .credential-field-summary > div {
254
+ border-bottom: 1px solid var(--rule);
255
+ display: flex;
256
+ flex-wrap: wrap;
257
+ gap: .25rem var(--gap);
258
+ justify-content: space-between;
259
+ padding: .5rem 0;
260
+ }
261
+ .credential-actions { display: flex; flex-wrap: wrap; gap: var(--gap); margin-top: .75rem; }
262
+ .credential-actions button,
263
+ .credential-form button,
264
+ .activity-controls button,
265
+ .activity-more {
266
+ align-items: center;
267
+ display: inline-flex;
268
+ min-height: 2.75rem;
269
+ }
270
+ .credential-form {
271
+ align-items: center;
272
+ display: flex;
273
+ flex-wrap: wrap;
274
+ gap: .75rem var(--gap);
275
+ margin-top: .75rem;
276
+ }
277
+ .credential-form > input { flex: 1 1 18rem; }
278
+ .credential-fields { display: grid; flex: 1 1 100%; gap: .75rem; }
279
+ .credential-field {
280
+ align-items: center;
281
+ display: grid;
282
+ gap: var(--gap);
283
+ grid-template-columns: minmax(9rem, 12rem) 1fr;
284
+ }
285
+ .credential-field input { min-width: 0; width: 100%; }
286
+ .danger { text-decoration-style: double; }
287
+
288
+ details { margin-top: .75rem; }
289
+ summary { cursor: pointer; list-style: none; width: max-content; }
290
+ summary::-webkit-details-marker { display: none; }
291
+ .tool-list { border-bottom: 1px solid var(--rule); margin-top: .5rem; }
292
+ .tool {
293
+ border-top: 1px solid var(--rule);
294
+ display: grid;
295
+ gap: .25rem var(--gap);
296
+ grid-template-columns: minmax(12rem, 1fr) minmax(0, 2fr);
297
+ padding: .5rem 0;
298
+ }
299
+ .tool code { font-family: var(--mono); font-size: .78rem; overflow-wrap: anywhere; }
300
+ .tool .td { color: var(--muted); font-size: .9em; }
301
+ .empty { border-top: 1px solid var(--rule); padding: .75rem 0; }
302
+
303
+ .activity-copy { margin-bottom: 1.5rem; }
304
+ .activity-controls { margin-bottom: 1.5rem; }
305
+ .activity-controls input { flex: 1 1 18rem; }
306
+ #activityNotice { margin-bottom: .75rem; }
307
+ .activity-ledger { border-bottom: 1px solid var(--rule); }
308
+ .activity-item {
309
+ border-top: 1px solid var(--rule);
310
+ display: grid;
311
+ gap: .25rem var(--gap);
312
+ grid-template-columns: minmax(9rem, .85fr) minmax(12rem, 1.4fr) minmax(8rem, .9fr);
313
+ padding-bottom: .75rem;
314
+ padding-top: .75rem;
315
+ }
316
+ .activity-time,
317
+ .activity-actor,
318
+ .activity-detail { color: var(--muted); font-size: .82rem; }
319
+ .activity-actor-id { color: var(--muted); margin-top: .1rem; }
320
+ .activity-address { font-family: var(--mono); font-size: .78rem; overflow-wrap: anywhere; }
321
+ .activity-outcome { font-size: .9em; }
322
+ .activity-item.error .activity-outcome,
323
+ .activity-item.timeout .activity-outcome,
324
+ .activity-item.cancelled .activity-outcome { text-decoration: underline; }
325
+ .activity-empty { border-top: 1px solid var(--rule); padding: .75rem 0; }
326
+ .activity-more { margin-top: .75rem; }
327
+ .unavailable {
328
+ background: var(--trace);
329
+ border-bottom: 1px solid var(--rule);
330
+ border-top: 1px solid var(--rule);
331
+ padding: .75rem;
332
+ }
333
+
334
+ @media (prefers-reduced-motion: reduce) {
335
+ html:focus-within { scroll-behavior: auto; }
336
+ }
337
+
338
+ @media (max-width: 36.99rem) {
339
+ .pgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
340
+ .pcap,
341
+ .pbody { grid-column: 1 / -1; }
342
+ .masthead .brand { grid-column: 1; }
343
+ .mast-nav { grid-column: 1 / -1; grid-row: 2; justify-content: flex-start; }
344
+ .product { display: none; }
345
+ .mast-actions {
346
+ align-items: flex-start;
347
+ flex-direction: column;
348
+ font-size: .875rem;
349
+ gap: .25rem;
350
+ }
351
+ .lead { margin-top: 4rem; }
352
+ .section,
353
+ .section + .section { margin-top: 2.5rem; }
354
+ .connector-head,
355
+ .tool,
356
+ .activity-item { grid-template-columns: 1fr; }
357
+ .connector-state { text-align: left; }
358
+ .credential-field { align-items: start; grid-template-columns: 1fr; gap: .25rem; }
359
+ input { min-height: 2.75rem; }
360
+ }