api_binding_ui 1.1.0 → 2.0.0

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 (78) hide show
  1. package/README.md +74 -394
  2. package/SKILL.md +49 -350
  3. package/dist/framework/contract.d.ts +268 -0
  4. package/dist/framework/engine.d.ts +88 -0
  5. package/dist/framework/expr.d.ts +34 -0
  6. package/dist/framework/loadCatalog.d.ts +6 -0
  7. package/dist/framework/names.d.ts +7 -0
  8. package/dist/framework/openapi.d.ts +7 -0
  9. package/dist/framework/runner.d.ts +33 -0
  10. package/dist/framework/schema.d.ts +22 -0
  11. package/dist/framework/store.d.ts +17 -0
  12. package/dist/framework/validate.d.ts +7 -0
  13. package/dist/index-e9twc25y.js +754 -0
  14. package/dist/index-e9twc25y.js.map +16 -0
  15. package/dist/index.d.ts +11 -29
  16. package/dist/index.js +345 -11932
  17. package/dist/index.js.map +14 -0
  18. package/dist/runtime/BindingProvider.d.ts +42 -0
  19. package/dist/runtime/BindingScreen.d.ts +23 -0
  20. package/dist/runtime/hooks.d.ts +22 -0
  21. package/dist/runtime/screenStore.d.ts +7 -0
  22. package/dist/studio/ApiPicker.d.ts +15 -0
  23. package/dist/studio/BindingStudio.d.ts +21 -0
  24. package/dist/studio/BindingWidget.d.ts +9 -0
  25. package/dist/studio/Collapse.d.ts +6 -0
  26. package/dist/studio/ComponentList.d.ts +10 -0
  27. package/dist/studio/FindAnything.d.ts +7 -0
  28. package/dist/studio/Inspector.d.ts +12 -0
  29. package/dist/studio/Navigator.d.ts +17 -0
  30. package/dist/studio/SettingsPanel.d.ts +15 -0
  31. package/dist/studio/Tip.d.ts +23 -0
  32. package/dist/studio/editors/ConsumeEditor.d.ts +4 -0
  33. package/dist/studio/editors/RequestInputs.d.ts +11 -0
  34. package/dist/studio/editors/ScopedEditor.d.ts +3 -0
  35. package/dist/studio/editors/SlotSection.d.ts +3 -0
  36. package/dist/studio/editors/SourceSelect.d.ts +10 -0
  37. package/dist/studio/editors/StepCard.d.ts +12 -0
  38. package/dist/studio/editors/TriggerEditor.d.ts +4 -0
  39. package/dist/studio/editors/types.d.ts +14 -0
  40. package/dist/studio/icons.d.ts +65 -0
  41. package/dist/studio/index.css +2021 -0
  42. package/dist/studio/index.d.ts +3 -0
  43. package/dist/studio/index.js +2806 -0
  44. package/dist/studio/index.js.map +33 -0
  45. package/dist/studio/useBindings.d.ts +20 -0
  46. package/dist/studio/useCatalog.d.ts +15 -0
  47. package/dist/studio/useGlide.d.ts +11 -0
  48. package/dist/studio/useSettings.d.ts +8 -0
  49. package/package.json +20 -14
  50. package/spec/FRAMEWORK.md +271 -0
  51. package/dist/api-binding-ui.css +0 -248
  52. package/dist/components/ApiBindingWorkspace.d.ts +0 -10
  53. package/dist/components/ApiMappings.d.ts +0 -21
  54. package/dist/components/BindApiButton.d.ts +0 -41
  55. package/dist/components/RequestPreview.d.ts +0 -7
  56. package/dist/components/SimulationDialog.d.ts +0 -8
  57. package/dist/components/ValidationDialog.d.ts +0 -8
  58. package/dist/components/WorkspaceContext.d.ts +0 -7
  59. package/dist/components/ui/AppGrid.d.ts +0 -27
  60. package/dist/components/ui/Badge.d.ts +0 -9
  61. package/dist/components/ui/Banner.d.ts +0 -8
  62. package/dist/components/ui/Button.d.ts +0 -31
  63. package/dist/components/ui/Card.d.ts +0 -14
  64. package/dist/components/ui/Dialog.d.ts +0 -61
  65. package/dist/components/ui/Icons.d.ts +0 -21
  66. package/dist/components/ui/Input.d.ts +0 -31
  67. package/dist/core/bindingContext.d.ts +0 -67
  68. package/dist/core/catalog.d.ts +0 -18
  69. package/dist/core/componentId.d.ts +0 -12
  70. package/dist/core/model.d.ts +0 -63
  71. package/dist/core/openapi.d.ts +0 -2
  72. package/dist/core/transport.d.ts +0 -33
  73. package/dist/core/validation.d.ts +0 -2
  74. package/dist/core/valueCoercion.d.ts +0 -17
  75. package/dist/hooks/useAppliedBinding.d.ts +0 -6
  76. package/dist/index.css +0 -248
  77. package/dist/style.css +0 -244
  78. package/dist/types.d.ts +0 -245
@@ -0,0 +1,2021 @@
1
+ /* src/studio/studio.css */
2
+ .abs-root {
3
+ --abs-bg: var(--ds-color-background, #fff);
4
+ --abs-surface: var(--ds-color-surface, #f8fafc);
5
+ --abs-muted-bg: var(--ds-color-muted, #f1f5f9);
6
+ --abs-fg: var(--ds-color-foreground, #0f172a);
7
+ --abs-fg-2: #334155;
8
+ --abs-muted: var(--ds-color-muted-foreground, #64748b);
9
+ --abs-faint: #94a3b8;
10
+ --abs-border: var(--ds-color-border, #e2e8f0);
11
+ --abs-border-strong: var(--ds-color-border-strong, #cbd5e1);
12
+ --abs-accent: var(--ds-color-primary, #3b82f6);
13
+ --abs-accent-hover: var(--ds-color-primary-hover, #2563eb);
14
+ --abs-accent-subtle: var(--ds-color-accent-subtle, #eff6ff);
15
+ --abs-accent-muted: var(--ds-color-accent-muted, #dbeafe);
16
+ --abs-ok: #16a34a;
17
+ --abs-ok-subtle: var(--ds-color-success-subtle, #f0fdf4);
18
+ --abs-warn: #d97706;
19
+ --abs-warn-subtle: #fffbeb;
20
+ --abs-bad: var(--ds-color-destructive, #dc2626);
21
+ --abs-bad-subtle: var(--ds-color-destructive-subtle, #fef2f2);
22
+ --abs-r-sm: 6px;
23
+ --abs-r: 8px;
24
+ --abs-r-lg: 10px;
25
+ --abs-shadow-sm: 0 1px 2px #0f172a0f;
26
+ --abs-shadow: 0 8px 24px -6px #0f172a24, 0 2px 6px #0f172a0f;
27
+ --abs-ease: cubic-bezier(.2, .7, .2, 1);
28
+ --abs-t: .16s;
29
+ --abs-sans: var(--ds-font-family-sans, "Inter", system-ui, -apple-system, "Segoe UI", sans-serif);
30
+ --abs-mono: var(--ds-font-family-mono, "JetBrains Mono", ui-monospace, "Cascadia Mono", monospace);
31
+ font-family: var(--abs-sans);
32
+ color: var(--abs-fg);
33
+ background: var(--abs-surface);
34
+ overflow: hidden;
35
+ display: flex;
36
+ -webkit-font-smoothing: antialiased;
37
+ flex-direction: column;
38
+ height: 100%;
39
+ font-size: 14px;
40
+ line-height: 1.45;
41
+ }
42
+
43
+ .abs-root *, .abs-root *:before, .abs-root *:after {
44
+ box-sizing: border-box;
45
+ }
46
+
47
+ .abs-root button, .abs-root input, .abs-root select {
48
+ font: inherit;
49
+ color: inherit;
50
+ }
51
+
52
+ .abs-root :focus-visible {
53
+ outline: 2px solid var(--abs-accent);
54
+ outline-offset: 1px;
55
+ }
56
+
57
+ .abs-root button, .abs-root .abs-opt, .abs-root .abs-select, .abs-root .abs-comp, .abs-root .abs-nav-item {
58
+ transition: background-color var(--abs-t) var(--abs-ease), border-color var(--abs-t) var(--abs-ease), color var(--abs-t) var(--abs-ease), box-shadow var(--abs-t) var(--abs-ease);
59
+ }
60
+
61
+ .abs-sr {
62
+ position: absolute;
63
+ overflow: hidden;
64
+ clip: rect(0 0 0 0);
65
+ white-space: nowrap;
66
+ width: 1px;
67
+ height: 1px;
68
+ }
69
+
70
+ .abs-ico {
71
+ display: block;
72
+ flex: none;
73
+ }
74
+
75
+ .abs-c-muted {
76
+ color: var(--abs-muted);
77
+ }
78
+
79
+ .abs-c-accent {
80
+ color: var(--abs-accent);
81
+ }
82
+
83
+ .abs-c-ok {
84
+ color: var(--abs-ok);
85
+ }
86
+
87
+ .abs-rot180 {
88
+ transform: rotate(180deg);
89
+ }
90
+
91
+ .abs-rot90 {
92
+ transform: rotate(90deg);
93
+ }
94
+
95
+ .abs-twist .abs-ico {
96
+ transition: transform .2s var(--abs-ease);
97
+ }
98
+
99
+ .abs-scroll {
100
+ overflow-y: auto;
101
+ scrollbar-gutter: stable;
102
+ scrollbar-width: thin;
103
+ scrollbar-color: transparent transparent;
104
+ }
105
+
106
+ .abs-scroll:hover {
107
+ scrollbar-color: var(--abs-border-strong) transparent;
108
+ }
109
+
110
+ .abs-scroll::-webkit-scrollbar {
111
+ width: 8px;
112
+ }
113
+
114
+ .abs-scroll::-webkit-scrollbar-thumb {
115
+ background: padding-box padding-box;
116
+ border: 2px solid #0000;
117
+ border-radius: 8px;
118
+ }
119
+
120
+ .abs-scroll:hover::-webkit-scrollbar-thumb {
121
+ background-color: var(--abs-border-strong);
122
+ }
123
+
124
+ @keyframes abs-in {
125
+ from {
126
+ opacity: 0;
127
+ transform: translateY(4px);
128
+ }
129
+
130
+ to {
131
+ opacity: 1;
132
+ transform: none;
133
+ }
134
+ }
135
+
136
+ @keyframes abs-slide {
137
+ from {
138
+ opacity: 0;
139
+ transform: translateX(10px);
140
+ }
141
+
142
+ to {
143
+ opacity: 1;
144
+ transform: none;
145
+ }
146
+ }
147
+
148
+ @keyframes abs-pop {
149
+ from {
150
+ opacity: 0;
151
+ transform: translateY(-4px)scale(.985);
152
+ }
153
+
154
+ to {
155
+ opacity: 1;
156
+ transform: none;
157
+ }
158
+ }
159
+
160
+ @keyframes abs-rot {
161
+ to {
162
+ transform: rotate(360deg);
163
+ }
164
+ }
165
+
166
+ .abs-enter {
167
+ animation: abs-slide .22s var(--abs-ease) backwards;
168
+ }
169
+
170
+ .abs-spin {
171
+ animation: .9s linear infinite abs-rot;
172
+ }
173
+
174
+ .abs-collapse {
175
+ display: grid;
176
+ grid-template-rows: 0fr;
177
+ opacity: 0;
178
+ transition: grid-template-rows .24s var(--abs-ease), opacity .2s var(--abs-ease);
179
+ }
180
+
181
+ .abs-collapse.is-open {
182
+ grid-template-rows: 1fr;
183
+ opacity: 1;
184
+ }
185
+
186
+ .abs-collapse-in {
187
+ overflow: hidden;
188
+ min-height: 0;
189
+ }
190
+
191
+ .abs-top {
192
+ display: grid;
193
+ grid-template-columns: 264px minmax(0, 1fr) auto;
194
+ background: var(--abs-bg);
195
+ border-bottom: 1px solid var(--abs-border);
196
+ flex: none;
197
+ align-items: center;
198
+ gap: 16px;
199
+ height: 56px;
200
+ padding: 0 16px 0 18px;
201
+ }
202
+
203
+ .abs-brand {
204
+ letter-spacing: -.01em;
205
+ white-space: nowrap;
206
+ font-size: 15px;
207
+ font-weight: 600;
208
+ }
209
+
210
+ .abs-top-meta {
211
+ display: flex;
212
+ color: var(--abs-muted);
213
+ align-items: center;
214
+ gap: 14px;
215
+ font-size: 13px;
216
+ }
217
+
218
+ .abs-overall {
219
+ color: var(--abs-muted);
220
+ font-variant-numeric: tabular-nums;
221
+ white-space: nowrap;
222
+ font-size: 13px;
223
+ }
224
+
225
+ .abs-overall b {
226
+ color: var(--abs-fg);
227
+ font-weight: 600;
228
+ }
229
+
230
+ .abs-saved {
231
+ display: flex;
232
+ justify-content: flex-end;
233
+ align-items: center;
234
+ min-width: 72px;
235
+ }
236
+
237
+ .abs-saved, .abs-saved button {
238
+ gap: 5px;
239
+ font-size: 12.5px;
240
+ }
241
+
242
+ .abs-saved > * {
243
+ animation: abs-in .2s var(--abs-ease) backwards;
244
+ }
245
+
246
+ .abs-saved.is-saved {
247
+ color: var(--abs-ok);
248
+ }
249
+
250
+ .abs-saved button {
251
+ display: flex;
252
+ border-radius: var(--abs-r-sm);
253
+ background: var(--abs-bad-subtle);
254
+ color: var(--abs-bad);
255
+ cursor: pointer;
256
+ border: 0;
257
+ align-items: center;
258
+ height: 28px;
259
+ padding: 0 10px;
260
+ font-weight: 500;
261
+ }
262
+
263
+ .abs-find {
264
+ position: relative;
265
+ justify-self: center;
266
+ width: 100%;
267
+ max-width: 560px;
268
+ }
269
+
270
+ .abs-find-box {
271
+ display: flex;
272
+ border: 1px solid var(--abs-border);
273
+ border-radius: var(--abs-r);
274
+ background: var(--abs-surface);
275
+ align-items: center;
276
+ gap: 8px;
277
+ height: 36px;
278
+ padding: 0 8px 0 12px;
279
+ }
280
+
281
+ .abs-find-box:hover {
282
+ border-color: var(--abs-border-strong);
283
+ }
284
+
285
+ .abs-find-box:focus-within {
286
+ background: var(--abs-bg);
287
+ border-color: var(--abs-accent);
288
+ box-shadow: 0 0 0 3px var(--abs-accent-muted);
289
+ }
290
+
291
+ .abs-find-box input {
292
+ outline: 0;
293
+ background: none;
294
+ border: 0;
295
+ flex: 1;
296
+ min-width: 0;
297
+ font-size: 13.5px;
298
+ }
299
+
300
+ .abs-find-box kbd {
301
+ font-family: var(--abs-sans);
302
+ color: var(--abs-muted);
303
+ border: 1px solid var(--abs-border);
304
+ background: var(--abs-bg);
305
+ border-radius: var(--abs-r-sm);
306
+ padding: 1px 6px;
307
+ font-size: 11px;
308
+ }
309
+
310
+ .abs-root .abs-find-pop {
311
+ overflow-y: auto;
312
+ scrollbar-width: thin;
313
+ animation: none;
314
+ visibility: hidden;
315
+ opacity: 0;
316
+ transition: opacity .14s var(--abs-ease), transform .14s var(--abs-ease), visibility 0s .14s;
317
+ max-height: 420px;
318
+ padding: 6px;
319
+ transform: translateY(-4px)scale(.985);
320
+ }
321
+
322
+ .abs-root .abs-find-pop.is-open {
323
+ visibility: visible;
324
+ opacity: 1;
325
+ transition: opacity .14s var(--abs-ease), transform .14s var(--abs-ease);
326
+ transform: none;
327
+ }
328
+
329
+ .abs-body {
330
+ display: grid;
331
+ grid-template-columns: 264px minmax(360px, 1fr) minmax(380px, 440px);
332
+ flex: 1;
333
+ min-height: 0;
334
+ }
335
+
336
+ .abs-nav {
337
+ background: var(--abs-bg);
338
+ border-right: 1px solid var(--abs-border);
339
+ display: flex;
340
+ flex-direction: column;
341
+ min-height: 0;
342
+ }
343
+
344
+ .abs-nav-head {
345
+ display: flex;
346
+ flex-direction: column;
347
+ gap: 8px;
348
+ padding: 16px 12px 8px;
349
+ }
350
+
351
+ .abs-search {
352
+ display: flex;
353
+ border: 1px solid var(--abs-border);
354
+ border-radius: var(--abs-r);
355
+ background: var(--abs-bg);
356
+ align-items: center;
357
+ gap: 8px;
358
+ height: 32px;
359
+ padding: 0 10px;
360
+ }
361
+
362
+ .abs-search:focus-within {
363
+ border-color: var(--abs-accent);
364
+ box-shadow: 0 0 0 3px var(--abs-accent-muted);
365
+ }
366
+
367
+ .abs-search input {
368
+ outline: 0;
369
+ background: none;
370
+ border: 0;
371
+ flex: 1;
372
+ min-width: 0;
373
+ font-size: 13px;
374
+ }
375
+
376
+ .abs-nav-scroll {
377
+ padding: 0 6px 16px 8px;
378
+ }
379
+
380
+ .abs-nav-group {
381
+ display: flex;
382
+ flex-direction: column;
383
+ gap: 2px;
384
+ margin-top: 8px;
385
+ }
386
+
387
+ .abs-eyebrow {
388
+ letter-spacing: .06em;
389
+ text-transform: uppercase;
390
+ color: var(--abs-muted);
391
+ padding: 0 2px;
392
+ font-size: 11px;
393
+ font-weight: 600;
394
+ }
395
+
396
+ .abs-eyebrow-sm {
397
+ color: var(--abs-faint);
398
+ padding: 4px 10px;
399
+ }
400
+
401
+ .abs-nav-item {
402
+ display: flex;
403
+ border-radius: var(--abs-r);
404
+ cursor: pointer;
405
+ text-align: left;
406
+ color: var(--abs-fg-2);
407
+ background: none;
408
+ border: 0;
409
+ align-items: center;
410
+ gap: 10px;
411
+ width: 100%;
412
+ height: 34px;
413
+ padding-right: 10px;
414
+ font-size: 13.5px;
415
+ }
416
+
417
+ .abs-nav-item > .abs-ico {
418
+ color: var(--abs-muted);
419
+ }
420
+
421
+ .abs-nav-item.is-on {
422
+ background: var(--abs-accent-subtle);
423
+ color: var(--abs-accent-hover);
424
+ font-weight: 500;
425
+ }
426
+
427
+ .abs-nav-item.is-on > .abs-ico {
428
+ color: var(--abs-accent);
429
+ }
430
+
431
+ .abs-nav-l {
432
+ overflow: hidden;
433
+ text-overflow: ellipsis;
434
+ white-space: nowrap;
435
+ flex: 1;
436
+ min-width: 0;
437
+ }
438
+
439
+ .abs-ring {
440
+ display: block;
441
+ flex: none;
442
+ }
443
+
444
+ .abs-ring-bg {
445
+ fill: none;
446
+ stroke: var(--abs-border);
447
+ }
448
+
449
+ .abs-ring-fg {
450
+ fill: none;
451
+ stroke: var(--abs-accent);
452
+ transition: stroke-dashoffset .5s var(--abs-ease), stroke var(--abs-t) var(--abs-ease);
453
+ }
454
+
455
+ .abs-ring.is-done .abs-ring-fg {
456
+ stroke: var(--abs-ok);
457
+ }
458
+
459
+ .abs-center {
460
+ display: flex;
461
+ flex-direction: column;
462
+ gap: 16px;
463
+ min-height: 0;
464
+ padding: 24px 24px 40px 28px;
465
+ }
466
+
467
+ .abs-screen-h {
468
+ display: flex;
469
+ animation: abs-in .22s var(--abs-ease) backwards;
470
+ flex-wrap: wrap;
471
+ justify-content: space-between;
472
+ align-items: center;
473
+ gap: 20px;
474
+ }
475
+
476
+ .abs-crumbs {
477
+ color: var(--abs-muted);
478
+ font-size: 12.5px;
479
+ }
480
+
481
+ .abs-screen-h h1 {
482
+ letter-spacing: -.01em;
483
+ text-wrap: balance;
484
+ margin: 2px 0 0;
485
+ font-size: 22px;
486
+ font-weight: 600;
487
+ }
488
+
489
+ .abs-progress {
490
+ display: flex;
491
+ font-variant-numeric: tabular-nums;
492
+ align-items: center;
493
+ gap: 10px;
494
+ }
495
+
496
+ .abs-progress > div {
497
+ display: flex;
498
+ flex-direction: column;
499
+ line-height: 1.15;
500
+ }
501
+
502
+ .abs-progress b {
503
+ font-size: 16px;
504
+ font-weight: 600;
505
+ }
506
+
507
+ .abs-progress b span {
508
+ color: var(--abs-faint);
509
+ font-weight: 500;
510
+ }
511
+
512
+ .abs-progress small {
513
+ color: var(--abs-muted);
514
+ font-size: 12px;
515
+ }
516
+
517
+ .abs-seg {
518
+ position: relative;
519
+ display: grid;
520
+ grid-template-columns: 1fr 1fr;
521
+ border-radius: var(--abs-r);
522
+ background: var(--abs-muted-bg);
523
+ align-self: flex-start;
524
+ padding: 3px;
525
+ }
526
+
527
+ .abs-seg-thumb {
528
+ position: absolute;
529
+ border-radius: var(--abs-r-sm);
530
+ background: var(--abs-bg);
531
+ box-shadow: var(--abs-shadow-sm);
532
+ transition: transform .22s var(--abs-ease);
533
+ width: calc(50% - 3px);
534
+ top: 3px;
535
+ bottom: 3px;
536
+ left: 3px;
537
+ }
538
+
539
+ .abs-seg button {
540
+ position: relative;
541
+ border-radius: var(--abs-r-sm);
542
+ color: var(--abs-muted);
543
+ cursor: pointer;
544
+ display: flex;
545
+ background: none;
546
+ border: 0;
547
+ justify-content: center;
548
+ align-items: center;
549
+ gap: 6px;
550
+ height: 28px;
551
+ padding: 0 12px;
552
+ font-size: 13px;
553
+ }
554
+
555
+ .abs-seg button span {
556
+ color: var(--abs-faint);
557
+ font-variant-numeric: tabular-nums;
558
+ text-align: left;
559
+ min-width: 2ch;
560
+ font-size: 12px;
561
+ }
562
+
563
+ .abs-seg button.is-on {
564
+ color: var(--abs-fg);
565
+ font-weight: 500;
566
+ }
567
+
568
+ .abs-seg button.is-on span {
569
+ color: var(--abs-muted);
570
+ }
571
+
572
+ .abs-comps {
573
+ background: var(--abs-bg);
574
+ border: 1px solid var(--abs-border);
575
+ border-radius: var(--abs-r-lg);
576
+ display: flex;
577
+ animation: abs-in .26s var(--abs-ease) backwards;
578
+ flex-direction: column;
579
+ padding: 6px;
580
+ }
581
+
582
+ .abs-comps > div + div, .abs-collapse-in > div {
583
+ margin-top: 2px;
584
+ }
585
+
586
+ .abs-comp {
587
+ display: flex;
588
+ border-radius: var(--abs-r);
589
+ align-items: center;
590
+ gap: 2px;
591
+ height: 42px;
592
+ }
593
+
594
+ .abs-comp.is-on {
595
+ background: var(--abs-accent-subtle);
596
+ }
597
+
598
+ .abs-twist, .abs-iconbtn.abs-twist {
599
+ display: grid;
600
+ flex: none;
601
+ place-items: center;
602
+ width: 24px;
603
+ height: 24px;
604
+ }
605
+
606
+ .abs-comp-main {
607
+ display: flex;
608
+ cursor: pointer;
609
+ text-align: left;
610
+ border-radius: var(--abs-r);
611
+ background: none;
612
+ border: 0;
613
+ flex: 1;
614
+ align-self: stretch;
615
+ align-items: center;
616
+ gap: 10px;
617
+ min-width: 0;
618
+ padding: 0 10px 0 4px;
619
+ }
620
+
621
+ .abs-comp-l {
622
+ overflow: hidden;
623
+ text-overflow: ellipsis;
624
+ white-space: nowrap;
625
+ flex: 1;
626
+ min-width: 0;
627
+ font-size: 14px;
628
+ font-weight: 500;
629
+ }
630
+
631
+ .abs-comp-k {
632
+ color: var(--abs-muted);
633
+ white-space: nowrap;
634
+ font-size: 12.5px;
635
+ }
636
+
637
+ .abs-kico {
638
+ display: grid;
639
+ border-radius: var(--abs-r-sm);
640
+ background: var(--abs-muted-bg);
641
+ color: var(--abs-fg-2);
642
+ transition: background-color var(--abs-t) var(--abs-ease), color var(--abs-t) var(--abs-ease);
643
+ flex: none;
644
+ place-items: center;
645
+ width: 28px;
646
+ height: 28px;
647
+ }
648
+
649
+ .abs-kico-m {
650
+ mask-size: contain;
651
+ mask-repeat: no-repeat;
652
+ mask-position: center;
653
+ -webkit-mask-size: contain;
654
+ -webkit-mask-repeat: no-repeat;
655
+ -webkit-mask-position: center;
656
+ background: currentColor;
657
+ width: 16px;
658
+ height: 16px;
659
+ }
660
+
661
+ .abs-comp.is-on .abs-kico {
662
+ background: var(--abs-bg);
663
+ color: var(--abs-accent);
664
+ }
665
+
666
+ .abs-done {
667
+ display: flex;
668
+ color: var(--abs-ok);
669
+ animation: abs-in .22s var(--abs-ease) backwards;
670
+ flex-direction: column;
671
+ align-items: center;
672
+ gap: 8px;
673
+ padding: 32px;
674
+ }
675
+
676
+ .abs-done b {
677
+ color: var(--abs-fg);
678
+ font-weight: 500;
679
+ }
680
+
681
+ .abs-state {
682
+ display: inline-flex;
683
+ transition: color var(--abs-t) var(--abs-ease);
684
+ }
685
+
686
+ .abs-state-bound {
687
+ color: var(--abs-ok);
688
+ }
689
+
690
+ .abs-state-suggested {
691
+ color: var(--abs-warn);
692
+ }
693
+
694
+ .abs-state-partial {
695
+ color: var(--abs-ok);
696
+ }
697
+
698
+ .abs-state-unbound {
699
+ color: var(--abs-border-strong);
700
+ }
701
+
702
+ .abs-insp {
703
+ background: var(--abs-bg);
704
+ border-left: 1px solid var(--abs-border);
705
+ display: flex;
706
+ flex-direction: column;
707
+ min-height: 0;
708
+ }
709
+
710
+ .abs-insp-empty {
711
+ text-align: center;
712
+ color: var(--abs-muted);
713
+ justify-content: center;
714
+ align-items: center;
715
+ gap: 6px;
716
+ padding: 32px;
717
+ }
718
+
719
+ .abs-insp-empty b {
720
+ color: var(--abs-fg);
721
+ margin-top: 6px;
722
+ font-weight: 500;
723
+ }
724
+
725
+ .abs-insp-empty span {
726
+ max-width: 26ch;
727
+ font-size: 13px;
728
+ }
729
+
730
+ .abs-insp-empty .abs-empty-ico {
731
+ display: grid;
732
+ border-radius: var(--abs-r-lg);
733
+ background: var(--abs-muted-bg);
734
+ color: var(--abs-muted);
735
+ place-items: center;
736
+ width: 44px;
737
+ max-width: none;
738
+ height: 44px;
739
+ }
740
+
741
+ .abs-insp-h {
742
+ display: flex;
743
+ border-bottom: 1px solid var(--abs-border);
744
+ align-items: center;
745
+ gap: 12px;
746
+ padding: 16px 14px 16px 20px;
747
+ }
748
+
749
+ .abs-insp-h > div {
750
+ flex: 1;
751
+ min-width: 0;
752
+ }
753
+
754
+ .abs-insp-h h2 {
755
+ margin: 0;
756
+ font-size: 16px;
757
+ font-weight: 600;
758
+ }
759
+
760
+ .abs-insp-h span {
761
+ color: var(--abs-muted);
762
+ font-size: 12.5px;
763
+ }
764
+
765
+ .abs-insp-h .abs-kico {
766
+ border-radius: var(--abs-r);
767
+ background: var(--abs-accent-subtle);
768
+ color: var(--abs-accent);
769
+ width: 36px;
770
+ height: 36px;
771
+ }
772
+
773
+ .abs-insp-b {
774
+ display: flex;
775
+ flex-direction: column;
776
+ flex: 1;
777
+ gap: 14px;
778
+ padding: 16px 14px 32px 20px;
779
+ }
780
+
781
+ .abs-slot {
782
+ border: 1px solid var(--abs-border);
783
+ border-radius: var(--abs-r-lg);
784
+ background: var(--abs-bg);
785
+ animation: abs-in .24s var(--abs-ease) backwards;
786
+ transition: border-color var(--abs-t) var(--abs-ease);
787
+ }
788
+
789
+ .abs-slot + .abs-slot {
790
+ animation-delay: 40ms;
791
+ }
792
+
793
+ .abs-slot-suggested {
794
+ border-color: color-mix(in srgb, var(--abs-warn) 35%, var(--abs-border));
795
+ }
796
+
797
+ .abs-slot-h {
798
+ display: flex;
799
+ align-items: center;
800
+ gap: 8px;
801
+ padding: 12px 14px 0;
802
+ }
803
+
804
+ .abs-slot-h h3 {
805
+ margin: 0;
806
+ font-size: 14px;
807
+ font-weight: 600;
808
+ }
809
+
810
+ .abs-slot-h .abs-tip {
811
+ margin-right: auto;
812
+ }
813
+
814
+ .abs-slot-d {
815
+ color: var(--abs-muted);
816
+ margin: 4px 14px 0 38px;
817
+ font-size: 12.5px;
818
+ }
819
+
820
+ .abs-slot-b {
821
+ display: flex;
822
+ flex-direction: column;
823
+ gap: 14px;
824
+ padding: 12px 14px 14px;
825
+ }
826
+
827
+ .abs-slot-f {
828
+ display: flex;
829
+ border-top: 1px solid var(--abs-border);
830
+ background: var(--abs-surface);
831
+ border-radius: 0 0 var(--abs-r-lg) var(--abs-r-lg);
832
+ gap: 8px;
833
+ padding: 10px 14px;
834
+ }
835
+
836
+ .abs-slot-f.is-plain {
837
+ background: none;
838
+ border-top: 0;
839
+ justify-content: flex-end;
840
+ padding-top: 0;
841
+ }
842
+
843
+ .abs-slot-f.is-plain .abs-btn {
844
+ color: var(--abs-muted);
845
+ height: 28px;
846
+ font-weight: 400;
847
+ }
848
+
849
+ .abs-slot-f.is-plain .abs-btn:hover {
850
+ color: var(--abs-bad);
851
+ background: var(--abs-bad-subtle);
852
+ }
853
+
854
+ .abs-req {
855
+ color: var(--abs-bad);
856
+ margin-left: 2px;
857
+ font-weight: 500;
858
+ }
859
+
860
+ .abs-pill {
861
+ display: inline-flex;
862
+ border-radius: var(--abs-r-sm);
863
+ white-space: nowrap;
864
+ transition: background-color var(--abs-t) var(--abs-ease), color var(--abs-t) var(--abs-ease);
865
+ align-items: center;
866
+ gap: 5px;
867
+ height: 24px;
868
+ padding: 0 8px 0 6px;
869
+ font-size: 12px;
870
+ font-weight: 500;
871
+ }
872
+
873
+ .abs-pill .abs-sr {
874
+ display: none;
875
+ }
876
+
877
+ .abs-pill-bound {
878
+ background: var(--abs-ok-subtle);
879
+ color: var(--abs-ok);
880
+ }
881
+
882
+ .abs-pill-suggested {
883
+ background: var(--abs-warn-subtle);
884
+ color: var(--abs-warn);
885
+ }
886
+
887
+ .abs-pill-unbound {
888
+ background: var(--abs-muted-bg);
889
+ color: var(--abs-muted);
890
+ }
891
+
892
+ .abs-pill .abs-state {
893
+ color: inherit;
894
+ }
895
+
896
+ .abs-btn {
897
+ border-radius: var(--abs-r-sm);
898
+ border: 1px solid var(--abs-border);
899
+ background: var(--abs-bg);
900
+ display: inline-flex;
901
+ cursor: pointer;
902
+ white-space: nowrap;
903
+ justify-content: center;
904
+ align-items: center;
905
+ gap: 6px;
906
+ height: 32px;
907
+ padding: 0 12px;
908
+ font-size: 13px;
909
+ font-weight: 500;
910
+ }
911
+
912
+ .abs-btn:hover {
913
+ background: var(--abs-muted-bg);
914
+ }
915
+
916
+ .abs-btn:active {
917
+ transform: translateY(.5px);
918
+ }
919
+
920
+ .abs-btn-primary {
921
+ background: var(--abs-accent);
922
+ border-color: var(--abs-accent);
923
+ color: #fff !important;
924
+ }
925
+
926
+ .abs-btn-primary:hover {
927
+ background: var(--abs-accent-hover);
928
+ border-color: var(--abs-accent-hover);
929
+ }
930
+
931
+ .abs-btn-ghost {
932
+ color: var(--abs-fg-2);
933
+ background: none;
934
+ border-color: #0000;
935
+ }
936
+
937
+ .abs-btn-dashed {
938
+ border-style: dashed;
939
+ border-color: var(--abs-border-strong);
940
+ color: var(--abs-accent-hover);
941
+ border-radius: var(--abs-r);
942
+ justify-content: flex-start;
943
+ width: 100%;
944
+ height: 40px;
945
+ padding: 0 14px;
946
+ }
947
+
948
+ .abs-btn-dashed:hover {
949
+ background: var(--abs-accent-subtle);
950
+ border-color: var(--abs-accent);
951
+ }
952
+
953
+ .abs-iconbtn {
954
+ border-radius: var(--abs-r-sm);
955
+ display: inline-grid;
956
+ color: var(--abs-muted);
957
+ cursor: pointer;
958
+ background: none;
959
+ border: 0;
960
+ flex: none;
961
+ place-items: center;
962
+ width: 28px;
963
+ height: 28px;
964
+ }
965
+
966
+ .abs-iconbtn:hover {
967
+ background: var(--abs-muted-bg);
968
+ color: var(--abs-fg);
969
+ }
970
+
971
+ .abs-root .abs-link {
972
+ color: var(--abs-accent-hover);
973
+ cursor: pointer;
974
+ display: inline-flex;
975
+ background: none;
976
+ border: 0;
977
+ align-items: center;
978
+ gap: 4px;
979
+ padding: 0;
980
+ font-size: 13px;
981
+ font-weight: 500;
982
+ }
983
+
984
+ .abs-root .abs-link:hover {
985
+ text-decoration: underline;
986
+ }
987
+
988
+ .abs-more {
989
+ align-self: flex-start;
990
+ margin-top: 2px;
991
+ }
992
+
993
+ .abs-picker {
994
+ position: relative;
995
+ }
996
+
997
+ .abs-picker:has(.abs-pop) {
998
+ z-index: 40;
999
+ }
1000
+
1001
+ .abs-opcard {
1002
+ display: flex;
1003
+ border: 1px solid var(--abs-border);
1004
+ border-radius: var(--abs-r);
1005
+ background: var(--abs-surface);
1006
+ cursor: pointer;
1007
+ text-align: left;
1008
+ align-items: center;
1009
+ gap: 10px;
1010
+ width: 100%;
1011
+ height: 56px;
1012
+ padding: 0 12px;
1013
+ }
1014
+
1015
+ .abs-opcard:hover {
1016
+ border-color: var(--abs-border-strong);
1017
+ }
1018
+
1019
+ .abs-opcard-t {
1020
+ display: flex;
1021
+ flex-direction: column;
1022
+ flex: 1;
1023
+ min-width: 0;
1024
+ }
1025
+
1026
+ .abs-opcard-t b {
1027
+ overflow: hidden;
1028
+ text-overflow: ellipsis;
1029
+ white-space: nowrap;
1030
+ font-size: 13.5px;
1031
+ font-weight: 500;
1032
+ }
1033
+
1034
+ .abs-opcard-t code, .abs-opt-t code {
1035
+ font-family: var(--abs-mono);
1036
+ color: var(--abs-muted);
1037
+ overflow: hidden;
1038
+ text-overflow: ellipsis;
1039
+ white-space: nowrap;
1040
+ font-size: 11.5px;
1041
+ }
1042
+
1043
+ .abs-method {
1044
+ font-family: var(--abs-mono);
1045
+ display: grid;
1046
+ border-radius: var(--abs-r-sm);
1047
+ background: var(--abs-muted-bg);
1048
+ color: var(--abs-fg-2);
1049
+ flex: none;
1050
+ place-items: center;
1051
+ width: 50px;
1052
+ height: 20px;
1053
+ font-size: 10.5px;
1054
+ font-weight: 600;
1055
+ }
1056
+
1057
+ .abs-method-get {
1058
+ background: var(--abs-ok-subtle);
1059
+ color: var(--abs-ok);
1060
+ }
1061
+
1062
+ .abs-method-post {
1063
+ background: var(--abs-accent-subtle);
1064
+ color: var(--abs-accent-hover);
1065
+ }
1066
+
1067
+ .abs-method-put, .abs-method-patch {
1068
+ background: var(--abs-warn-subtle);
1069
+ color: var(--abs-warn);
1070
+ }
1071
+
1072
+ .abs-method-delete {
1073
+ background: var(--abs-bad-subtle);
1074
+ color: var(--abs-bad);
1075
+ }
1076
+
1077
+ .abs-pop {
1078
+ position: absolute;
1079
+ z-index: 30;
1080
+ background: var(--abs-bg);
1081
+ border: 1px solid var(--abs-border);
1082
+ border-radius: var(--abs-r-lg);
1083
+ box-shadow: var(--abs-shadow);
1084
+ overflow: hidden;
1085
+ animation: abs-pop .15s var(--abs-ease) backwards;
1086
+ transform-origin: top center;
1087
+ top: calc(100% + 6px);
1088
+ left: 0;
1089
+ right: 0;
1090
+ }
1091
+
1092
+ .abs-pop-search {
1093
+ display: flex;
1094
+ border-bottom: 1px solid var(--abs-border);
1095
+ color: var(--abs-muted);
1096
+ align-items: center;
1097
+ gap: 8px;
1098
+ height: 42px;
1099
+ padding: 0 12px;
1100
+ }
1101
+
1102
+ .abs-pop-search:focus-within {
1103
+ color: var(--abs-accent);
1104
+ }
1105
+
1106
+ .abs-pop-search input {
1107
+ outline: 0;
1108
+ color: var(--abs-fg);
1109
+ background: none;
1110
+ border: 0;
1111
+ flex: 1;
1112
+ }
1113
+
1114
+ .abs-pop-search input:focus-visible {
1115
+ outline: 0;
1116
+ }
1117
+
1118
+ .abs-search input:focus-visible {
1119
+ outline: 0;
1120
+ }
1121
+
1122
+ .abs-find-box input:focus-visible {
1123
+ outline: 0;
1124
+ }
1125
+
1126
+ .abs-pop-list {
1127
+ overflow-y: auto;
1128
+ scrollbar-width: thin;
1129
+ max-height: 320px;
1130
+ padding: 6px;
1131
+ }
1132
+
1133
+ .abs-pop-group {
1134
+ display: flex;
1135
+ text-transform: uppercase;
1136
+ letter-spacing: .06em;
1137
+ color: var(--abs-muted);
1138
+ align-items: center;
1139
+ gap: 5px;
1140
+ height: 28px;
1141
+ margin-top: 4px;
1142
+ padding: 0 8px;
1143
+ font-size: 11px;
1144
+ font-weight: 600;
1145
+ }
1146
+
1147
+ .abs-pop-group:first-child {
1148
+ margin-top: 0;
1149
+ }
1150
+
1151
+ .abs-opt {
1152
+ display: flex;
1153
+ border-radius: var(--abs-r);
1154
+ cursor: pointer;
1155
+ align-items: center;
1156
+ gap: 10px;
1157
+ height: 48px;
1158
+ padding: 0 10px;
1159
+ }
1160
+
1161
+ .abs-opt-t {
1162
+ display: flex;
1163
+ flex-direction: column;
1164
+ flex: 1;
1165
+ min-width: 0;
1166
+ font-size: 13.5px;
1167
+ line-height: 1.3;
1168
+ }
1169
+
1170
+ .abs-opt-t > span {
1171
+ overflow: hidden;
1172
+ text-overflow: ellipsis;
1173
+ white-space: nowrap;
1174
+ }
1175
+
1176
+ .abs-empty-sm {
1177
+ color: var(--abs-muted);
1178
+ text-align: center;
1179
+ padding: 16px;
1180
+ font-size: 13px;
1181
+ }
1182
+
1183
+ .abs-field {
1184
+ display: flex;
1185
+ flex-direction: column;
1186
+ gap: 6px;
1187
+ }
1188
+
1189
+ .abs-field > label, .abs-block-h {
1190
+ color: var(--abs-muted);
1191
+ font-size: 12px;
1192
+ font-weight: 600;
1193
+ }
1194
+
1195
+ .abs-field-inline {
1196
+ flex-direction: row;
1197
+ justify-content: space-between;
1198
+ align-items: center;
1199
+ gap: 12px;
1200
+ }
1201
+
1202
+ .abs-block {
1203
+ display: flex;
1204
+ flex-direction: column;
1205
+ gap: 8px;
1206
+ }
1207
+
1208
+ .abs-block-h {
1209
+ display: flex;
1210
+ text-transform: uppercase;
1211
+ letter-spacing: .06em;
1212
+ justify-content: space-between;
1213
+ font-size: 11px;
1214
+ }
1215
+
1216
+ .abs-count {
1217
+ font-variant-numeric: tabular-nums;
1218
+ letter-spacing: 0;
1219
+ }
1220
+
1221
+ .abs-map {
1222
+ display: flex;
1223
+ flex-direction: column;
1224
+ gap: 6px;
1225
+ }
1226
+
1227
+ .abs-map-row {
1228
+ display: grid;
1229
+ grid-template-columns: minmax(0, 1fr) 14px minmax(0, 1.25fr);
1230
+ animation: abs-in .2s var(--abs-ease) backwards;
1231
+ align-items: center;
1232
+ gap: 8px;
1233
+ height: 32px;
1234
+ }
1235
+
1236
+ .abs-map-row label {
1237
+ color: var(--abs-fg-2);
1238
+ overflow: hidden;
1239
+ text-overflow: ellipsis;
1240
+ white-space: nowrap;
1241
+ font-size: 13px;
1242
+ }
1243
+
1244
+ .abs-select {
1245
+ border: 1px solid var(--abs-border);
1246
+ border-radius: var(--abs-r-sm);
1247
+ background: var(--abs-bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%2364748b' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4.75 6.5 3.25 3.25 3.25-3.25'/%3E%3C/svg%3E") no-repeat right 8px center;
1248
+ appearance: none;
1249
+ cursor: pointer;
1250
+ text-overflow: ellipsis;
1251
+ width: 100%;
1252
+ height: 32px;
1253
+ padding: 0 28px 0 10px;
1254
+ font-size: 13px;
1255
+ }
1256
+
1257
+ .abs-select:hover {
1258
+ border-color: var(--abs-border-strong);
1259
+ }
1260
+
1261
+ .abs-select:focus {
1262
+ outline: 0;
1263
+ border-color: var(--abs-accent);
1264
+ box-shadow: 0 0 0 3px var(--abs-accent-muted);
1265
+ }
1266
+
1267
+ .abs-select.is-empty {
1268
+ color: var(--abs-muted);
1269
+ border-style: dashed;
1270
+ }
1271
+
1272
+ .abs-select-sm {
1273
+ width: auto;
1274
+ min-width: 190px;
1275
+ }
1276
+
1277
+ .abs-hint {
1278
+ display: flex;
1279
+ border-radius: var(--abs-r);
1280
+ background: var(--abs-surface);
1281
+ color: var(--abs-fg-2);
1282
+ flex-wrap: wrap;
1283
+ align-items: center;
1284
+ gap: 8px;
1285
+ min-height: 40px;
1286
+ padding: 8px 12px;
1287
+ font-size: 13px;
1288
+ }
1289
+
1290
+ .abs-hint .abs-ico {
1291
+ color: var(--abs-muted);
1292
+ }
1293
+
1294
+ .abs-suggests {
1295
+ display: flex;
1296
+ flex-wrap: wrap;
1297
+ gap: 6px;
1298
+ }
1299
+
1300
+ .abs-suggest {
1301
+ display: inline-flex;
1302
+ border-radius: var(--abs-r-sm);
1303
+ border: 1px solid var(--abs-border);
1304
+ background: var(--abs-bg);
1305
+ color: var(--abs-fg-2);
1306
+ cursor: pointer;
1307
+ animation: abs-in .2s var(--abs-ease) backwards;
1308
+ align-items: center;
1309
+ gap: 6px;
1310
+ height: 28px;
1311
+ padding: 0 10px;
1312
+ font-size: 12.5px;
1313
+ }
1314
+
1315
+ .abs-suggest .abs-ico {
1316
+ color: var(--abs-accent);
1317
+ }
1318
+
1319
+ .abs-suggest:hover {
1320
+ border-color: var(--abs-accent);
1321
+ background: var(--abs-accent-subtle);
1322
+ }
1323
+
1324
+ .abs-steps {
1325
+ display: flex;
1326
+ flex-direction: column;
1327
+ gap: 10px;
1328
+ }
1329
+
1330
+ .abs-step {
1331
+ border: 1px solid var(--abs-border);
1332
+ border-radius: var(--abs-r);
1333
+ animation: abs-in .22s var(--abs-ease) backwards;
1334
+ }
1335
+
1336
+ .abs-step-h {
1337
+ display: flex;
1338
+ align-items: center;
1339
+ gap: 8px;
1340
+ height: 40px;
1341
+ padding: 0 6px 0 10px;
1342
+ }
1343
+
1344
+ .abs-step-n {
1345
+ border-radius: var(--abs-r-sm);
1346
+ background: var(--abs-muted-bg);
1347
+ display: grid;
1348
+ font-variant-numeric: tabular-nums;
1349
+ flex: none;
1350
+ place-items: center;
1351
+ width: 20px;
1352
+ height: 20px;
1353
+ font-size: 11px;
1354
+ font-weight: 600;
1355
+ }
1356
+
1357
+ .abs-step-t {
1358
+ color: var(--abs-muted);
1359
+ display: flex;
1360
+ overflow: hidden;
1361
+ white-space: nowrap;
1362
+ flex: 1;
1363
+ gap: 6px;
1364
+ min-width: 0;
1365
+ font-size: 13px;
1366
+ }
1367
+
1368
+ .abs-step-tools {
1369
+ display: flex;
1370
+ }
1371
+
1372
+ .abs-step-b {
1373
+ display: flex;
1374
+ flex-direction: column;
1375
+ gap: 12px;
1376
+ padding: 4px 10px 12px;
1377
+ }
1378
+
1379
+ .abs-addstep {
1380
+ display: flex;
1381
+ flex-direction: column;
1382
+ gap: 8px;
1383
+ }
1384
+
1385
+ .abs-toggle {
1386
+ display: flex;
1387
+ color: var(--abs-fg-2);
1388
+ cursor: pointer;
1389
+ align-items: center;
1390
+ gap: 8px;
1391
+ font-size: 13px;
1392
+ }
1393
+
1394
+ .abs-toggle input {
1395
+ position: absolute;
1396
+ opacity: 0;
1397
+ pointer-events: none;
1398
+ }
1399
+
1400
+ .abs-toggle-ui {
1401
+ border-radius: var(--abs-r-sm);
1402
+ background: var(--abs-border-strong);
1403
+ position: relative;
1404
+ transition: background-color .18s var(--abs-ease);
1405
+ flex: none;
1406
+ width: 30px;
1407
+ height: 18px;
1408
+ }
1409
+
1410
+ .abs-toggle-ui:after {
1411
+ content: "";
1412
+ position: absolute;
1413
+ transition: transform .2s var(--abs-ease);
1414
+ background: #fff;
1415
+ border-radius: 4px;
1416
+ width: 14px;
1417
+ height: 14px;
1418
+ top: 2px;
1419
+ left: 2px;
1420
+ box-shadow: 0 1px 2px #0003;
1421
+ }
1422
+
1423
+ .abs-toggle input:checked + .abs-toggle-ui {
1424
+ background: var(--abs-accent);
1425
+ }
1426
+
1427
+ .abs-toggle input:checked + .abs-toggle-ui:after {
1428
+ transform: translateX(12px);
1429
+ }
1430
+
1431
+ .abs-toggle input:focus-visible + .abs-toggle-ui {
1432
+ outline: 2px solid var(--abs-accent);
1433
+ outline-offset: 2px;
1434
+ }
1435
+
1436
+ .abs-empty {
1437
+ text-align: center;
1438
+ color: var(--abs-muted);
1439
+ padding: 48px;
1440
+ }
1441
+
1442
+ @media (max-width: 1100px) {
1443
+ .abs-top {
1444
+ grid-template-columns: auto minmax(0, 1fr) auto;
1445
+ }
1446
+
1447
+ .abs-body {
1448
+ grid-template-columns: 220px 1fr;
1449
+ }
1450
+
1451
+ .abs-body .abs-insp-empty {
1452
+ display: none;
1453
+ }
1454
+
1455
+ .abs-body.has-insp .abs-insp {
1456
+ position: fixed;
1457
+ z-index: 40;
1458
+ box-shadow: var(--abs-shadow);
1459
+ width: min(440px, 100%);
1460
+ top: 0;
1461
+ bottom: 0;
1462
+ right: 0;
1463
+ }
1464
+ }
1465
+
1466
+ @media (max-width: 700px) {
1467
+ .abs-top {
1468
+ grid-template-columns: auto 1fr;
1469
+ }
1470
+
1471
+ .abs-top-meta {
1472
+ display: none;
1473
+ }
1474
+
1475
+ .abs-body {
1476
+ grid-template-columns: 1fr;
1477
+ }
1478
+
1479
+ .abs-nav {
1480
+ border-right: 0;
1481
+ border-bottom: 1px solid var(--abs-border);
1482
+ max-height: 40vh;
1483
+ }
1484
+
1485
+ .abs-center {
1486
+ padding: 16px;
1487
+ }
1488
+ }
1489
+
1490
+ @media (prefers-reduced-motion: reduce) {
1491
+ .abs-root *, .abs-root *:before, .abs-root *:after {
1492
+ animation-duration: 1ms !important;
1493
+ transition-duration: 1ms !important;
1494
+ }
1495
+ }
1496
+
1497
+ .abs-pie .abs-ring-bg {
1498
+ stroke: var(--abs-border-strong);
1499
+ }
1500
+
1501
+ .abs-pie.is-done .abs-ring-bg {
1502
+ stroke: var(--abs-ok);
1503
+ }
1504
+
1505
+ .abs-pop-list, .abs-root .abs-find-pop {
1506
+ scrollbar-color: transparent transparent;
1507
+ }
1508
+
1509
+ .abs-pop-list:hover, .abs-root .abs-find-pop:hover {
1510
+ scrollbar-color: var(--abs-border-strong) transparent;
1511
+ }
1512
+
1513
+ .abs-tree + .abs-tree {
1514
+ margin-top: 2px;
1515
+ }
1516
+
1517
+ .abs-nav-group-h {
1518
+ display: flex;
1519
+ border-radius: var(--abs-r);
1520
+ cursor: pointer;
1521
+ text-align: left;
1522
+ color: var(--abs-fg-2);
1523
+ background: none;
1524
+ border: 0;
1525
+ align-items: center;
1526
+ gap: 8px;
1527
+ width: 100%;
1528
+ height: 36px;
1529
+ padding-right: 10px;
1530
+ font-size: 14px;
1531
+ }
1532
+
1533
+ .abs-nav-group-h:hover {
1534
+ color: var(--abs-fg);
1535
+ }
1536
+
1537
+ .abs-nav-group-h.has-current {
1538
+ color: var(--abs-fg);
1539
+ font-weight: 500;
1540
+ }
1541
+
1542
+ .abs-nav-count {
1543
+ color: var(--abs-faint);
1544
+ font-variant-numeric: tabular-nums;
1545
+ font-size: 12px;
1546
+ }
1547
+
1548
+ .abs-chev {
1549
+ color: var(--abs-muted);
1550
+ transition: transform .2s var(--abs-ease);
1551
+ }
1552
+
1553
+ .abs-tree .abs-collapse-in > div {
1554
+ display: flex;
1555
+ flex-direction: column;
1556
+ gap: 2px;
1557
+ padding-top: 2px;
1558
+ }
1559
+
1560
+ .abs-toast {
1561
+ position: fixed;
1562
+ z-index: 60;
1563
+ left: 50%;
1564
+ bottom: max(20px, env(safe-area-inset-bottom, 0px));
1565
+ display: flex;
1566
+ border-radius: var(--abs-r);
1567
+ background: var(--abs-fg);
1568
+ color: #fff;
1569
+ box-shadow: var(--abs-shadow);
1570
+ animation: abs-toast-in .2s var(--abs-ease) backwards;
1571
+ align-items: center;
1572
+ gap: 16px;
1573
+ height: 40px;
1574
+ padding: 0 6px 0 14px;
1575
+ font-size: 13px;
1576
+ transform: translateX(-50%);
1577
+ }
1578
+
1579
+ .abs-toast button {
1580
+ border-radius: var(--abs-r-sm);
1581
+ color: #fff;
1582
+ cursor: pointer;
1583
+ background: #ffffff1f;
1584
+ border: 0;
1585
+ height: 28px;
1586
+ padding: 0 10px;
1587
+ font-weight: 500;
1588
+ }
1589
+
1590
+ .abs-toast button:hover {
1591
+ background: #fff3;
1592
+ }
1593
+
1594
+ @keyframes abs-toast-in {
1595
+ from {
1596
+ opacity: 0;
1597
+ transform: translate(-50%, 8px);
1598
+ }
1599
+
1600
+ to {
1601
+ opacity: 1;
1602
+ transform: translateX(-50%);
1603
+ }
1604
+ }
1605
+
1606
+ .abs-fab {
1607
+ position: fixed;
1608
+ z-index: 2147480000;
1609
+ right: max(20px, env(safe-area-inset-right, 0px));
1610
+ bottom: max(20px, env(safe-area-inset-bottom, 0px));
1611
+ display: grid;
1612
+ grid-template-columns: auto 0fr;
1613
+ cursor: pointer;
1614
+ border: 1px solid var(--ds-color-border, #e2e8f0);
1615
+ background: var(--ds-color-background, #fff);
1616
+ color: var(--ds-color-foreground, #0f172a);
1617
+ font: 500 13px / 1 var(--ds-font-family-sans, "Inter", system-ui, -apple-system, sans-serif);
1618
+ animation: .36s cubic-bezier(.2,.7,.2,1) .3s backwards abs-fab-in;
1619
+ border-radius: 10px;
1620
+ align-items: center;
1621
+ height: 44px;
1622
+ padding: 0 13px;
1623
+ transition: grid-template-columns .24s cubic-bezier(.2,.7,.2,1), box-shadow .2s, transform .2s cubic-bezier(.2,.7,.2,1), border-color .2s;
1624
+ box-shadow: 0 1px 2px #0f172a0f, 0 6px 16px -6px #0f172a2e;
1625
+ }
1626
+
1627
+ .abs-fab-ico {
1628
+ display: grid;
1629
+ color: var(--ds-color-primary, #3b82f6);
1630
+ place-items: center;
1631
+ }
1632
+
1633
+ .abs-fab-label {
1634
+ overflow: hidden;
1635
+ }
1636
+
1637
+ .abs-fab-label > span {
1638
+ display: block;
1639
+ white-space: nowrap;
1640
+ opacity: 0;
1641
+ padding-left: 8px;
1642
+ transition: opacity .18s, transform .24s cubic-bezier(.2,.7,.2,1);
1643
+ transform: translateX(-4px);
1644
+ }
1645
+
1646
+ .abs-fab:hover {
1647
+ grid-template-columns: auto 1fr;
1648
+ border-color: var(--ds-color-border-strong, #cbd5e1);
1649
+ transform: translateY(-1px);
1650
+ box-shadow: 0 1px 2px #0f172a0f, 0 10px 24px -8px #0f172a3d;
1651
+ }
1652
+
1653
+ .abs-fab:focus-visible {
1654
+ grid-template-columns: auto 1fr;
1655
+ border-color: var(--ds-color-border-strong, #cbd5e1);
1656
+ transform: translateY(-1px);
1657
+ box-shadow: 0 1px 2px #0f172a0f, 0 10px 24px -8px #0f172a3d;
1658
+ }
1659
+
1660
+ .abs-fab:hover .abs-fab-label > span {
1661
+ opacity: 1;
1662
+ transition-delay: 60ms;
1663
+ transform: none;
1664
+ }
1665
+
1666
+ .abs-fab:focus-visible .abs-fab-label > span {
1667
+ opacity: 1;
1668
+ transition-delay: 60ms;
1669
+ transform: none;
1670
+ }
1671
+
1672
+ .abs-fab:active {
1673
+ transform: translateY(0)scale(.97);
1674
+ }
1675
+
1676
+ .abs-fab:focus-visible {
1677
+ outline: 2px solid var(--ds-color-primary, #3b82f6);
1678
+ outline-offset: 2px;
1679
+ }
1680
+
1681
+ .abs-fab[aria-expanded="true"] {
1682
+ opacity: 0;
1683
+ pointer-events: none;
1684
+ }
1685
+
1686
+ @keyframes abs-fab-in {
1687
+ from {
1688
+ opacity: 0;
1689
+ transform: translateY(8px);
1690
+ }
1691
+ }
1692
+
1693
+ .abs-widget {
1694
+ overflow: hidden;
1695
+ background: var(--ds-color-surface, #f8fafc);
1696
+ transform-origin: 100% 100%;
1697
+ animation: .24s cubic-bezier(.2,.7,.2,1) abs-widget-in;
1698
+ border: 0;
1699
+ border-radius: 12px;
1700
+ width: min(1440px, 100vw - 32px);
1701
+ max-width: none;
1702
+ height: min(920px, 100dvh - 32px);
1703
+ max-height: none;
1704
+ margin: auto;
1705
+ padding: 0;
1706
+ box-shadow: 0 24px 64px -16px #0f172a59;
1707
+ }
1708
+
1709
+ .abs-widget::backdrop {
1710
+ backdrop-filter: blur(2px);
1711
+ animation: .24s abs-fade-in;
1712
+ background: #0f172a52;
1713
+ }
1714
+
1715
+ .abs-widget.is-closing {
1716
+ animation: .16s ease-in forwards abs-widget-out;
1717
+ }
1718
+
1719
+ .abs-widget.is-closing::backdrop {
1720
+ animation: .16s ease-in reverse forwards abs-fade-in;
1721
+ }
1722
+
1723
+ @keyframes abs-widget-in {
1724
+ from {
1725
+ opacity: 0;
1726
+ transform: translateY(8px)scale(.985);
1727
+ }
1728
+ }
1729
+
1730
+ @keyframes abs-widget-out {
1731
+ to {
1732
+ opacity: 0;
1733
+ transform: translateY(6px)scale(.99);
1734
+ }
1735
+ }
1736
+
1737
+ @keyframes abs-fade-in {
1738
+ from {
1739
+ opacity: 0;
1740
+ }
1741
+ }
1742
+
1743
+ @media (prefers-reduced-motion: reduce) {
1744
+ .abs-fab, .abs-fab *, .abs-widget {
1745
+ animation-duration: 1ms !important;
1746
+ transition-duration: 1ms !important;
1747
+ }
1748
+
1749
+ .abs-widget::backdrop {
1750
+ animation-duration: 1ms !important;
1751
+ transition-duration: 1ms !important;
1752
+ }
1753
+ }
1754
+
1755
+ .abs-glide-box {
1756
+ isolation: isolate;
1757
+ }
1758
+
1759
+ .abs-glide-box:not(.abs-pop) {
1760
+ position: relative;
1761
+ }
1762
+
1763
+ .abs-glide {
1764
+ position: absolute;
1765
+ z-index: -1;
1766
+ border-radius: var(--abs-r);
1767
+ background: var(--abs-muted-bg);
1768
+ opacity: 0;
1769
+ pointer-events: none;
1770
+ will-change: transform;
1771
+ transition: transform .18s var(--abs-ease), width .18s var(--abs-ease), height .18s var(--abs-ease), opacity .16s ease;
1772
+ top: 0;
1773
+ left: 0;
1774
+ }
1775
+
1776
+ .abs-pop-list .abs-glide, .abs-find-pop .abs-glide {
1777
+ background: var(--abs-accent-subtle);
1778
+ }
1779
+
1780
+ .abs-comps .abs-glide {
1781
+ background: var(--abs-surface);
1782
+ }
1783
+
1784
+ .abs-nav-item, .abs-nav-group-h, .abs-comp, .abs-opt {
1785
+ position: relative;
1786
+ }
1787
+
1788
+ .abs-nav-item.is-on, .abs-comp.is-on {
1789
+ z-index: 0;
1790
+ }
1791
+
1792
+ .abs-tip {
1793
+ display: inline-flex;
1794
+ }
1795
+
1796
+ .abs-tip-btn {
1797
+ border-radius: var(--abs-r-sm);
1798
+ color: var(--abs-faint);
1799
+ display: grid;
1800
+ cursor: help;
1801
+ background: none;
1802
+ border: 0;
1803
+ place-items: center;
1804
+ width: 20px;
1805
+ height: 20px;
1806
+ padding: 0;
1807
+ }
1808
+
1809
+ .abs-tip-btn:hover {
1810
+ color: var(--abs-accent);
1811
+ background: var(--abs-accent-subtle);
1812
+ }
1813
+
1814
+ .abs-tip-btn:focus-visible {
1815
+ color: var(--abs-accent);
1816
+ background: var(--abs-accent-subtle);
1817
+ }
1818
+
1819
+ .abs-tip-body {
1820
+ position: fixed;
1821
+ border-radius: var(--abs-r);
1822
+ background: var(--abs-fg);
1823
+ color: #fff;
1824
+ font: 400 12.5px / 1.4 var(--abs-sans);
1825
+ text-align: left;
1826
+ overflow-wrap: anywhere;
1827
+ box-shadow: var(--abs-shadow);
1828
+ pointer-events: none;
1829
+ border: 0;
1830
+ width: max-content;
1831
+ max-width: min(260px, 100vw - 16px);
1832
+ margin: 0;
1833
+ padding: 8px 10px;
1834
+ inset: auto;
1835
+ }
1836
+
1837
+ .abs-tip-body:popover-open {
1838
+ animation: abs-tip-in .14s var(--abs-ease);
1839
+ }
1840
+
1841
+ .abs-tip-body[data-side="bottom"] {
1842
+ --abs-tip-from: -4px;
1843
+ }
1844
+
1845
+ @keyframes abs-tip-in {
1846
+ from {
1847
+ opacity: 0;
1848
+ transform: translateY(var(--abs-tip-from, 4px));
1849
+ }
1850
+ }
1851
+
1852
+ .abs-pop-why {
1853
+ display: flex;
1854
+ border-top: 1px solid var(--abs-border);
1855
+ background: var(--abs-surface);
1856
+ color: var(--abs-fg-2);
1857
+ align-items: flex-start;
1858
+ gap: 8px;
1859
+ padding: 10px 12px;
1860
+ font-size: 12.5px;
1861
+ }
1862
+
1863
+ .abs-pop-why .abs-ico {
1864
+ color: var(--abs-accent);
1865
+ margin-top: 1px;
1866
+ }
1867
+
1868
+ .abs-settings-wrap {
1869
+ position: relative;
1870
+ }
1871
+
1872
+ .abs-settings-btn.is-on {
1873
+ background: var(--abs-muted-bg);
1874
+ color: var(--abs-fg);
1875
+ }
1876
+
1877
+ .abs-dot-bad {
1878
+ position: absolute;
1879
+ background: var(--abs-bad);
1880
+ box-shadow: 0 0 0 2px var(--abs-bg);
1881
+ border-radius: 50%;
1882
+ width: 7px;
1883
+ height: 7px;
1884
+ top: 5px;
1885
+ right: 5px;
1886
+ }
1887
+
1888
+ .abs-root .abs-settings {
1889
+ overflow: visible;
1890
+ width: 400px;
1891
+ max-width: calc(100vw - 32px);
1892
+ padding: 4px 0;
1893
+ left: auto;
1894
+ right: 0;
1895
+ }
1896
+
1897
+ .abs-set-sec {
1898
+ display: flex;
1899
+ flex-direction: column;
1900
+ gap: 6px;
1901
+ padding: 14px 16px;
1902
+ }
1903
+
1904
+ .abs-set-sec + .abs-set-sec {
1905
+ border-top: 1px solid var(--abs-border);
1906
+ }
1907
+
1908
+ .abs-set-h {
1909
+ color: var(--abs-fg);
1910
+ font-size: 13px;
1911
+ font-weight: 600;
1912
+ }
1913
+
1914
+ .abs-set-d {
1915
+ color: var(--abs-muted);
1916
+ margin: 0;
1917
+ font-size: 12.5px;
1918
+ }
1919
+
1920
+ .abs-set-row {
1921
+ display: flex;
1922
+ flex-wrap: wrap;
1923
+ align-items: center;
1924
+ gap: 8px;
1925
+ margin-top: 4px;
1926
+ }
1927
+
1928
+ .abs-set-row .abs-input {
1929
+ flex: 1;
1930
+ min-width: 0;
1931
+ }
1932
+
1933
+ .abs-set-status {
1934
+ color: var(--abs-muted);
1935
+ overflow-wrap: anywhere;
1936
+ margin: 2px 0 0;
1937
+ font-size: 12.5px;
1938
+ }
1939
+
1940
+ .abs-set-status.is-error {
1941
+ color: var(--abs-bad);
1942
+ }
1943
+
1944
+ .abs-input {
1945
+ border: 1px solid var(--abs-border);
1946
+ border-radius: var(--abs-r-sm);
1947
+ background: var(--abs-bg);
1948
+ font-size: 13px;
1949
+ font-family: var(--abs-mono);
1950
+ height: 32px;
1951
+ padding: 0 10px;
1952
+ }
1953
+
1954
+ .abs-input:hover {
1955
+ border-color: var(--abs-border-strong);
1956
+ }
1957
+
1958
+ .abs-input:focus {
1959
+ outline: 0;
1960
+ border-color: var(--abs-accent);
1961
+ box-shadow: 0 0 0 3px var(--abs-accent-muted);
1962
+ }
1963
+
1964
+ .abs-input.is-invalid {
1965
+ border-color: var(--abs-bad);
1966
+ }
1967
+
1968
+ .abs-btn:disabled {
1969
+ opacity: .5;
1970
+ cursor: not-allowed;
1971
+ }
1972
+
1973
+ .abs-state-page {
1974
+ display: flex;
1975
+ text-align: center;
1976
+ color: var(--abs-muted);
1977
+ flex-direction: column;
1978
+ flex: 1;
1979
+ justify-content: center;
1980
+ align-items: center;
1981
+ gap: 8px;
1982
+ padding: 32px;
1983
+ }
1984
+
1985
+ .abs-state-page b {
1986
+ color: var(--abs-fg);
1987
+ margin-top: 4px;
1988
+ font-weight: 600;
1989
+ }
1990
+
1991
+ .abs-state-page > span:not(.abs-empty-ico):not(.abs-loader) {
1992
+ max-width: 52ch;
1993
+ font-size: 13px;
1994
+ }
1995
+
1996
+ .abs-empty-ico.is-bad {
1997
+ background: var(--abs-bad-subtle);
1998
+ color: var(--abs-bad);
1999
+ }
2000
+
2001
+ .abs-loader {
2002
+ border: 3px solid var(--abs-border);
2003
+ border-top-color: var(--abs-accent);
2004
+ animation: .8s linear infinite abs-rot;
2005
+ border-radius: 50%;
2006
+ width: 28px;
2007
+ height: 28px;
2008
+ }
2009
+
2010
+ .abs-state-page .abs-empty-ico {
2011
+ display: grid;
2012
+ border-radius: var(--abs-r-lg);
2013
+ place-items: center;
2014
+ width: 44px;
2015
+ height: 44px;
2016
+ }
2017
+
2018
+ .abs-pop-why b {
2019
+ color: var(--abs-fg);
2020
+ font-weight: 600;
2021
+ }