@crvouga/atlas 0.10.2 → 0.12.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 (114) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +7 -0
  3. package/dist/reports/src/catalog-health.d.ts +142 -0
  4. package/dist/reports/src/catalog-health.js +257 -0
  5. package/dist/reports/src/test-catalog.d.ts +8 -0
  6. package/dist/reports/src/test-catalog.js +5 -1
  7. package/dist/schema/src/api.d.ts +79 -0
  8. package/dist/schema/src/api.js +50 -0
  9. package/dist/server/src/app.js +9 -0
  10. package/dist/server/src/llms.js +1 -0
  11. package/dist/server/src/openapi.js +18 -2
  12. package/dist/server/src/settings-page.d.ts +4 -4
  13. package/dist/server/src/settings-page.js +17 -78
  14. package/docs/reference/http-api.md +34 -0
  15. package/docs/reference/reports.md +224 -0
  16. package/docs/reference/schema.md +10 -0
  17. package/docs/reference/server.md +4 -4
  18. package/docs/server.md +10 -0
  19. package/docs/ui.md +142 -0
  20. package/docs/workspaces.md +130 -0
  21. package/llms-full.txt +322 -0
  22. package/llms.txt +2 -0
  23. package/package.json +17 -10
  24. package/packages/schema/schemas/catalog-health.schema.json +400 -0
  25. package/packages/server/openapi.json +596 -0
  26. package/packages/visualizer/src/admin/SettingsPage.tsx +456 -0
  27. package/packages/visualizer/src/admin/main.tsx +11 -0
  28. package/packages/visualizer/src/app/AppShell.tsx +62 -38
  29. package/packages/visualizer/src/app/gazetteer.tsx +90 -83
  30. package/packages/visualizer/src/app/router.tsx +33 -15
  31. package/packages/visualizer/src/components/ActivityIndicator.tsx +4 -5
  32. package/packages/visualizer/src/components/DataIssues.tsx +36 -54
  33. package/packages/visualizer/src/components/Header.tsx +197 -125
  34. package/packages/visualizer/src/components/Legend.tsx +13 -41
  35. package/packages/visualizer/src/components/ProjectPicker.tsx +61 -26
  36. package/packages/visualizer/src/components/Screen.tsx +80 -71
  37. package/packages/visualizer/src/components/SpecLogo.tsx +15 -0
  38. package/packages/visualizer/src/components/Status.tsx +20 -34
  39. package/packages/visualizer/src/components/labels.tsx +8 -3
  40. package/packages/visualizer/src/components/spec-logos/APACHE-2.0.txt +206 -0
  41. package/packages/visualizer/src/components/spec-logos/CAMUNDA-MIT.txt +21 -0
  42. package/packages/visualizer/src/components/spec-logos/FILE-ICONS-ISC.txt +13 -0
  43. package/packages/visualizer/src/components/spec-logos/README.md +23 -0
  44. package/packages/visualizer/src/components/spec-logos/SIMPLE-ICONS-CC0.txt +30 -0
  45. package/packages/visualizer/src/components/spec-logos/alloy.svg +1 -0
  46. package/packages/visualizer/src/components/spec-logos/dmn.svg +3 -0
  47. package/packages/visualizer/src/components/spec-logos/gherkin.svg +1 -0
  48. package/packages/visualizer/src/components/spec-logos/openslo.svg +63 -0
  49. package/packages/visualizer/src/components/spec-logos/quint.svg +1 -0
  50. package/packages/visualizer/src/evidence/artifacts.tsx +263 -110
  51. package/packages/visualizer/src/evidence/chart-source.tsx +18 -0
  52. package/packages/visualizer/src/evidence/check-detail.tsx +283 -139
  53. package/packages/visualizer/src/evidence/decision-table.tsx +35 -26
  54. package/packages/visualizer/src/evidence/document-page.tsx +51 -29
  55. package/packages/visualizer/src/evidence/feature-page.tsx +121 -53
  56. package/packages/visualizer/src/evidence/marks.tsx +112 -79
  57. package/packages/visualizer/src/evidence/model-page.tsx +77 -46
  58. package/packages/visualizer/src/evidence/model-trace.tsx +55 -35
  59. package/packages/visualizer/src/evidence/overview.tsx +137 -69
  60. package/packages/visualizer/src/evidence/recording-page.tsx +70 -31
  61. package/packages/visualizer/src/evidence/recording.tsx +135 -68
  62. package/packages/visualizer/src/evidence/snapshot.tsx +99 -43
  63. package/packages/visualizer/src/evidence/source-text.tsx +33 -0
  64. package/packages/visualizer/src/evidence/sources-panel.tsx +138 -144
  65. package/packages/visualizer/src/evidence/spec-header.tsx +52 -36
  66. package/packages/visualizer/src/evidence/spec-index.tsx +61 -32
  67. package/packages/visualizer/src/evidence/spec-page.tsx +56 -25
  68. package/packages/visualizer/src/evidence/test-filter.tsx +38 -14
  69. package/packages/visualizer/src/explorer/Explorer.tsx +688 -261
  70. package/packages/visualizer/src/explorer/ExplorerIndex.tsx +136 -68
  71. package/packages/visualizer/src/explorer/RunsView.tsx +307 -94
  72. package/packages/visualizer/src/explorer/TestDetail.tsx +393 -118
  73. package/packages/visualizer/src/explorer/parts.tsx +35 -13
  74. package/packages/visualizer/src/find/Finder.tsx +106 -90
  75. package/packages/visualizer/src/find/open.ts +17 -20
  76. package/packages/visualizer/src/live/test-progress.tsx +60 -22
  77. package/packages/visualizer/src/looks/Stage.tsx +223 -110
  78. package/packages/visualizer/src/main.tsx +9 -11
  79. package/packages/visualizer/src/map/ChartMap.tsx +125 -69
  80. package/packages/visualizer/src/map/EventEdge.tsx +59 -37
  81. package/packages/visualizer/src/map/map.module.css +12 -546
  82. package/packages/visualizer/src/map/nodes.tsx +124 -70
  83. package/packages/visualizer/src/reachable.test.ts +3 -2
  84. package/packages/visualizer/src/spec-kind.ts +2 -2
  85. package/packages/visualizer/src/ui/grammars/ALLOY-MIT.txt +21 -0
  86. package/packages/visualizer/src/ui/grammars/QUINT-APACHE-2.0.txt +206 -0
  87. package/packages/visualizer/src/ui/grammars/README.md +14 -0
  88. package/packages/visualizer/src/ui/grammars/alloy.json +71 -0
  89. package/packages/visualizer/src/ui/grammars/quint.json +152 -0
  90. package/packages/visualizer/src/ui/highlight.ts +50 -0
  91. package/packages/visualizer/src/ui/theme.tsx +109 -0
  92. package/packages/visualizer/src/views/ChartPage.tsx +46 -26
  93. package/packages/visualizer/src/views/ChartTests.tsx +59 -22
  94. package/packages/visualizer/src/views/ProductPage.tsx +16 -15
  95. package/packages/visualizer/src/views/SidePanel.tsx +241 -131
  96. package/packages/visualizer/src/app/gazetteer.module.css +0 -107
  97. package/packages/visualizer/src/components/ActivityIndicator.module.css +0 -4
  98. package/packages/visualizer/src/components/DataIssues.module.css +0 -136
  99. package/packages/visualizer/src/components/Header.module.css +0 -114
  100. package/packages/visualizer/src/components/Legend.module.css +0 -84
  101. package/packages/visualizer/src/components/Screen.module.css +0 -312
  102. package/packages/visualizer/src/components/Status.module.css +0 -116
  103. package/packages/visualizer/src/components/icons.tsx +0 -156
  104. package/packages/visualizer/src/evidence/artifacts.module.css +0 -213
  105. package/packages/visualizer/src/evidence/evidence.module.css +0 -907
  106. package/packages/visualizer/src/evidence/recording.module.css +0 -460
  107. package/packages/visualizer/src/evidence/sources.module.css +0 -168
  108. package/packages/visualizer/src/evidence/spec-snapshot.tsx +0 -26
  109. package/packages/visualizer/src/explorer/explorer.module.css +0 -1238
  110. package/packages/visualizer/src/find/Finder.module.css +0 -168
  111. package/packages/visualizer/src/looks/stage.module.css +0 -300
  112. package/packages/visualizer/src/styles/global.css +0 -105
  113. package/packages/visualizer/src/styles/tokens.css +0 -80
  114. package/packages/visualizer/src/views/views.module.css +0 -546
@@ -1,907 +0,0 @@
1
- /* Marks */
2
-
3
- .mark {
4
- flex: none;
5
- color: var(--faint);
6
- }
7
-
8
- .mark[data-status='passed'] {
9
- color: var(--passed);
10
- }
11
-
12
- .mark[data-status='failed'] {
13
- color: var(--failed);
14
- }
15
-
16
- .mark[data-status='running'] {
17
- color: var(--place);
18
- animation: turn 1.8s linear infinite;
19
- opacity: .8;
20
- }
21
-
22
- @keyframes turn {
23
- to {
24
- transform: rotate(360deg);
25
- }
26
- }
27
-
28
- .tally {
29
- flex: none;
30
- color: var(--ink-3);
31
- font-size: 0.75rem;
32
- font-weight: 400;
33
- white-space: nowrap;
34
- font-variant-numeric: tabular-nums;
35
- }
36
-
37
- .tally[data-status='failed'] {
38
- color: var(--failed);
39
- font-weight: 600;
40
- }
41
-
42
- .tally[data-status='running'] {
43
- color: var(--place);
44
- }
45
-
46
- .tally[data-status='none'],
47
- .tally[data-status='not-run'] {
48
- color: var(--faint);
49
- }
50
-
51
- .meter {
52
- display: flex;
53
- gap: 2px;
54
- height: 6px;
55
- border-radius: var(--pill);
56
- background: var(--unrun);
57
- overflow: hidden;
58
- }
59
-
60
- .meter span[data-status='passed'] {
61
- background: var(--passed);
62
- }
63
-
64
- .meter span[data-status='failed'] {
65
- background: var(--failed);
66
- }
67
-
68
- .meter span[data-status='running'] {
69
- background: var(--place);
70
- }
71
-
72
- .meter span[data-status='not-run'],
73
- .meter span[data-status='none'] {
74
- background: var(--not-reached);
75
- }
76
-
77
- .countLine {
78
- display: inline-flex;
79
- flex-wrap: wrap;
80
- gap: 0 14px;
81
- }
82
-
83
- .failedText {
84
- color: var(--failed);
85
- font-weight: 600;
86
- }
87
-
88
- .origin {
89
- display: inline-flex;
90
- flex-wrap: wrap;
91
- align-items: baseline;
92
- gap: 0 10px;
93
- color: var(--ink-3);
94
- font-size: 0.8125rem;
95
- }
96
-
97
- .origin > * + *::before {
98
- content: '·';
99
- margin-right: 10px;
100
- color: var(--faint);
101
- }
102
-
103
- .origin code {
104
- font-size: 0.75rem;
105
- }
106
-
107
- .liveTag {
108
- flex: none;
109
- color: var(--place);
110
- font-size: 0.75rem;
111
- font-weight: 600;
112
- }
113
-
114
- .aside {
115
- margin: 0;
116
- color: var(--ink-3);
117
- font-size: 0.8125rem;
118
- font-weight: 400;
119
- }
120
-
121
- .link,
122
- .quiet {
123
- padding: 0;
124
- border: 0;
125
- background: none;
126
- color: var(--place);
127
- font-size: inherit;
128
- font-weight: 500;
129
- text-decoration: none;
130
- cursor: pointer;
131
- }
132
-
133
- .link:hover,
134
- .quiet:hover {
135
- text-decoration: underline;
136
- }
137
-
138
- .moreRow {
139
- padding: 10px 14px;
140
- font-size: 0.8125rem;
141
- }
142
-
143
- .notice,
144
- .note {
145
- margin: 12px 0;
146
- padding: 10px 12px;
147
- border-radius: 8px;
148
- background: var(--bg-2);
149
- color: var(--ink-2);
150
- font-size: 0.875rem;
151
- }
152
-
153
- .note {
154
- margin: 8px 0;
155
- padding: 6px 10px;
156
- font-size: 0.8125rem;
157
- }
158
-
159
- /* Index */
160
-
161
- .index {
162
- min-height: 0;
163
- overflow: auto;
164
- padding: 12px 8px 32px;
165
- background: var(--bg);
166
- border-right: 1px solid var(--line);
167
- }
168
-
169
- .filters {
170
- position: sticky;
171
- top: -12px;
172
- z-index: 1;
173
- display: grid;
174
- grid-template-columns: repeat(4, 1fr);
175
- gap: 2px;
176
- margin: -12px -8px 4px;
177
- padding: 12px 8px 8px;
178
- background: var(--bg);
179
- }
180
-
181
- .filters button {
182
- padding: 5px 2px;
183
- border: 0;
184
- border-radius: 8px;
185
- background: none;
186
- color: var(--ink-3);
187
- font-size: 0.8125rem;
188
- font-weight: 500;
189
- white-space: nowrap;
190
- cursor: pointer;
191
- }
192
-
193
- .filters button:hover {
194
- background: var(--bg-2);
195
- }
196
-
197
- .filters button[aria-pressed='true'] {
198
- background: var(--place-soft);
199
- color: var(--place);
200
- font-weight: 600;
201
- }
202
-
203
- .filters span {
204
- font-weight: 400;
205
- font-variant-numeric: tabular-nums;
206
- opacity: 0.8;
207
- }
208
-
209
- .index h3 {
210
- display: flex;
211
- justify-content: space-between;
212
- align-items: baseline;
213
- gap: 12px;
214
- margin: 14px 10px 4px;
215
- color: var(--ink-3);
216
- font-size: 0.75rem;
217
- font-weight: 600;
218
- }
219
-
220
- .index ul {
221
- list-style: none;
222
- margin: 0;
223
- padding: 0;
224
- }
225
-
226
- .indexRow {
227
- display: flex;
228
- align-items: baseline;
229
- gap: 8px;
230
- padding: 6px 10px;
231
- border-radius: 8px;
232
- color: var(--ink);
233
- font-size: 0.9rem;
234
- text-decoration: none;
235
- }
236
-
237
- .indexRow .mark {
238
- align-self: center;
239
- }
240
-
241
- .indexRow:hover {
242
- background: var(--bg-2);
243
- }
244
-
245
- .indexRow[aria-current='page'] {
246
- background: var(--place-soft);
247
- font-weight: 600;
248
- }
249
-
250
- /* A spec nothing has checked yet reads quieter than one with results. */
251
- .indexRow[data-result='none'] {
252
- color: var(--ink-3);
253
- }
254
-
255
- .indexName {
256
- display: -webkit-box;
257
- flex: 1;
258
- min-width: 0;
259
- overflow: hidden;
260
- line-height: 1.3;
261
- -webkit-box-orient: vertical;
262
- -webkit-line-clamp: 2;
263
- }
264
-
265
- .indexNote {
266
- margin: 12px 10px;
267
- color: var(--ink-3);
268
- font-size: 0.875rem;
269
- }
270
-
271
- /* Page */
272
-
273
- .page {
274
- height: 100%;
275
- overflow: auto;
276
- padding: 28px 40px 80px;
277
- background: var(--bg);
278
- }
279
-
280
- .page > * {
281
- max-width: 58rem;
282
- }
283
-
284
- .page[data-wide] > * {
285
- max-width: none;
286
- }
287
-
288
- .specHead {
289
- margin-bottom: 8px;
290
- }
291
-
292
- .path {
293
- margin: 0 0 6px;
294
- color: var(--ink-3);
295
- font-family: var(--mono);
296
- font-size: 0.75rem;
297
- }
298
-
299
- .title {
300
- margin: 0;
301
- font-size: 1.375rem;
302
- font-weight: 650;
303
- letter-spacing: -0.01em;
304
- line-height: 1.25;
305
- }
306
-
307
- .lead {
308
- margin: 8px 0 0;
309
- max-width: 68ch;
310
- color: var(--ink-2);
311
- white-space: pre-line;
312
- }
313
-
314
- .summary {
315
- display: grid;
316
- gap: 8px;
317
- margin-top: 16px;
318
- max-width: 34rem;
319
- }
320
-
321
- .summaryLine,
322
- .summaryOrigin {
323
- display: flex;
324
- flex-wrap: wrap;
325
- gap: 0 14px;
326
- margin: 0;
327
- color: var(--ink-2);
328
- font-size: 0.875rem;
329
- }
330
-
331
- .specSnapshot {
332
- width: min(100%, 58rem);
333
- margin: 20px 0 0;
334
- }
335
-
336
- .specSnapshot figcaption {
337
- display: flex;
338
- flex-wrap: wrap;
339
- gap: 4px 10px;
340
- margin-bottom: 7px;
341
- color: var(--ink);
342
- font-size: 0.8125rem;
343
- font-weight: 600;
344
- }
345
-
346
- .specSnapshot figcaption span {
347
- color: var(--ink-3);
348
- font-weight: 400;
349
- }
350
-
351
- .specSnapshotImage {
352
- display: block;
353
- width: 100%;
354
- height: auto;
355
- aspect-ratio: 24 / 6.5;
356
- border: 1px solid var(--line-2);
357
- border-radius: 12px;
358
- background: var(--bg-2);
359
- }
360
-
361
- .specSnapshotImage rect:first-child { fill: var(--bg-2); }
362
- .specSnapshotImage circle { fill: var(--place); }
363
- .specSnapshotImage .snapshotLine { fill: var(--card); stroke: var(--line); }
364
- .specSnapshotImage text { fill: var(--ink); font-family: var(--font); }
365
- .specSnapshotImage .snapshotTitle { font-size: 24px; font-weight: 650; }
366
- .specSnapshotImage .snapshotText { font-size: 15px; }
367
-
368
- .summaryOrigin {
369
- gap: 0 6px;
370
- color: var(--ink-3);
371
- font-size: 0.8125rem;
372
- }
373
-
374
- .back {
375
- display: inline-flex;
376
- gap: 6px;
377
- margin: 0 0 14px;
378
- padding: 0;
379
- border: 0;
380
- background: none;
381
- color: var(--place);
382
- font-size: 0.875rem;
383
- font-weight: 500;
384
- cursor: pointer;
385
- }
386
-
387
- .back:hover {
388
- text-decoration: underline;
389
- }
390
-
391
- .block {
392
- margin-top: 32px;
393
- }
394
-
395
- .blockTitle {
396
- display: flex;
397
- align-items: baseline;
398
- gap: 10px;
399
- margin: 0 0 4px;
400
- font-size: 1rem;
401
- font-weight: 600;
402
- }
403
-
404
- .blockLead {
405
- margin: 0 0 10px;
406
- max-width: 68ch;
407
- color: var(--ink-3);
408
- font-size: 0.875rem;
409
- white-space: pre-line;
410
- }
411
-
412
- .background {
413
- margin: 10px 0;
414
- padding: 10px 14px;
415
- border-radius: 8px;
416
- background: var(--bg-2);
417
- }
418
-
419
- .footLine {
420
- margin-top: 36px;
421
- color: var(--ink-3);
422
- font-size: 0.8125rem;
423
- }
424
-
425
- /* Result rows */
426
-
427
- .results,
428
- .list {
429
- list-style: none;
430
- margin: 10px 0 0;
431
- padding: 0;
432
- border: 1px solid var(--line-2);
433
- border-radius: 12px;
434
- overflow: hidden;
435
- }
436
-
437
- .result + .result,
438
- .list > li + li {
439
- border-top: 1px solid var(--line);
440
- }
441
-
442
- .resultHead {
443
- display: flex;
444
- align-items: center;
445
- gap: 10px;
446
- width: 100%;
447
- padding: 10px 14px;
448
- border: 0;
449
- background: none;
450
- text-align: left;
451
- cursor: pointer;
452
- }
453
-
454
- .resultHead:hover {
455
- background: var(--bg-2);
456
- }
457
-
458
- .resultName {
459
- display: flex;
460
- flex: 1;
461
- flex-direction: column;
462
- min-width: 0;
463
- font-weight: 500;
464
- }
465
-
466
- .envMarks {
467
- display: flex;
468
- flex-wrap: wrap;
469
- gap: 8px;
470
- margin-top: 2px;
471
- color: var(--ink-3);
472
- font-size: 0.75rem;
473
- font-weight: 400;
474
- }
475
-
476
- .envMarks span[data-status='passed'] {
477
- color: var(--passed-ink);
478
- }
479
-
480
- .envMarks span[data-status='failed'] {
481
- color: var(--failed-ink);
482
- }
483
-
484
- .result[data-status='none'] .resultName {
485
- color: var(--ink-3);
486
- font-weight: 400;
487
- }
488
-
489
- .resultAside {
490
- flex: none;
491
- color: var(--ink-3);
492
- font-size: 0.8125rem;
493
- white-space: nowrap;
494
- font-variant-numeric: tabular-nums;
495
- }
496
-
497
- .chevron {
498
- flex: none;
499
- width: 7px;
500
- height: 7px;
501
- margin: 0 2px 2px;
502
- border-right: 1.5px solid var(--faint);
503
- border-bottom: 1.5px solid var(--faint);
504
- transform: rotate(45deg);
505
- transition: transform var(--fade) var(--ease);
506
- }
507
-
508
- .result[data-open] .chevron {
509
- margin-bottom: -3px;
510
- transform: rotate(-135deg);
511
- }
512
-
513
- .excerpt[data-progress] {
514
- color: var(--ink-3);
515
- font-family: inherit;
516
- }
517
-
518
- .excerpt {
519
- margin: -4px 14px 10px 40px;
520
- overflow: hidden;
521
- color: var(--failed-ink);
522
- font-family: var(--mono);
523
- font-size: 0.75rem;
524
- text-overflow: ellipsis;
525
- white-space: nowrap;
526
- }
527
-
528
- .resultBody {
529
- padding: 2px 14px 16px 40px;
530
- }
531
-
532
- .detail {
533
- display: grid;
534
- gap: 10px;
535
- }
536
-
537
- .detail > * {
538
- margin: 0;
539
- }
540
-
541
- .detailMeta {
542
- display: flex;
543
- flex-wrap: wrap;
544
- align-items: center;
545
- gap: 2px 12px;
546
- margin: 6px 0 0;
547
- color: var(--ink-3);
548
- font-size: 0.8125rem;
549
- }
550
-
551
- .detailMeta strong {
552
- color: var(--ink);
553
- }
554
-
555
- .detailMeta strong[data-status='failed'] {
556
- color: var(--failed);
557
- }
558
-
559
- .detailMeta strong[data-status='passed'] {
560
- color: var(--passed-ink);
561
- }
562
-
563
- .variants {
564
- display: flex;
565
- flex-wrap: wrap;
566
- gap: 6px;
567
- }
568
-
569
- .variants button {
570
- display: inline-flex;
571
- align-items: center;
572
- gap: 6px;
573
- padding: 3px 10px;
574
- border: 1px solid var(--line-2);
575
- border-radius: var(--pill);
576
- background: var(--bg);
577
- font-size: 0.8125rem;
578
- cursor: pointer;
579
- }
580
-
581
- .variants button[aria-pressed='true'] {
582
- border-color: var(--place);
583
- background: var(--place-soft);
584
- color: var(--place);
585
- font-weight: 600;
586
- }
587
-
588
- .steps {
589
- list-style: none;
590
- margin: 0;
591
- padding: 0;
592
- font-size: 0.9rem;
593
- }
594
-
595
- .steps[data-nested] {
596
- margin: 2px 0 6px;
597
- padding-left: 22px;
598
- color: var(--ink-2);
599
- font-size: 0.8125rem;
600
- }
601
-
602
- .stepRow {
603
- display: flex;
604
- align-items: baseline;
605
- gap: 8px;
606
- padding: 3px 0;
607
- }
608
-
609
- .stepRow .mark {
610
- align-self: center;
611
- }
612
-
613
- .stepText {
614
- flex: 1;
615
- min-width: 0;
616
- }
617
-
618
- .keyword {
619
- color: var(--ink-3);
620
- font-weight: 600;
621
- }
622
-
623
- .steps li[data-status='failed'] > .stepRow .stepText {
624
- color: var(--failed-ink);
625
- font-weight: 600;
626
- }
627
-
628
- .stepTime {
629
- flex: none;
630
- color: var(--faint);
631
- font-size: 0.75rem;
632
- font-variant-numeric: tabular-nums;
633
- }
634
-
635
- .actions {
636
- margin-left: 22px;
637
- color: var(--ink-3);
638
- font-size: 0.75rem;
639
- }
640
-
641
- .actions summary {
642
- cursor: pointer;
643
- }
644
-
645
- .actions .steps[data-nested] {
646
- padding-left: 0;
647
- }
648
-
649
- .error,
650
- .pre {
651
- margin: 6px 0;
652
- padding: 10px 12px;
653
- border-radius: 8px;
654
- overflow: auto;
655
- max-height: 22rem;
656
- font-size: 0.75rem;
657
- line-height: 1.5;
658
- white-space: pre-wrap;
659
- overflow-wrap: anywhere;
660
- }
661
-
662
- .error {
663
- border-left: 3px solid var(--failed);
664
- background: var(--failed-soft);
665
- color: var(--failed-ink);
666
- }
667
-
668
- .pre {
669
- background: var(--bg-2);
670
- }
671
-
672
- .examples {
673
- margin-top: 10px;
674
- }
675
-
676
- .timingLine {
677
- color: var(--ink-3);
678
- font-size: 0.8125rem;
679
- }
680
-
681
- .timingLine strong {
682
- color: var(--ink-2);
683
- }
684
-
685
- .timingLine[data-over] strong {
686
- color: var(--flaky-ink);
687
- }
688
-
689
- .actionsLine {
690
- display: flex;
691
- flex-wrap: wrap;
692
- align-items: center;
693
- gap: 14px;
694
- font-size: 0.875rem;
695
- }
696
-
697
- .primary {
698
- display: inline-flex;
699
- align-items: baseline;
700
- gap: 8px;
701
- padding: 6px 14px;
702
- border: 0;
703
- border-radius: var(--pill);
704
- background: var(--place);
705
- color: #fff;
706
- font-size: 0.875rem;
707
- font-weight: 600;
708
- cursor: pointer;
709
- }
710
-
711
- .primary:hover {
712
- filter: brightness(0.94);
713
- }
714
-
715
- .primary span {
716
- font-weight: 400;
717
- opacity: 0.85;
718
- }
719
-
720
- .history {
721
- margin-top: 6px;
722
- padding-top: 12px;
723
- border-top: 1px solid var(--line);
724
- }
725
-
726
- .history h4 {
727
- margin: 0 0 4px;
728
- color: var(--ink-3);
729
- font-size: 0.75rem;
730
- font-weight: 600;
731
- }
732
-
733
- .history ul {
734
- list-style: none;
735
- margin: 0;
736
- padding: 0;
737
- }
738
-
739
- .history .moreRow {
740
- padding: 6px 8px;
741
- }
742
-
743
- .history li > button {
744
- display: flex;
745
- flex-wrap: wrap;
746
- align-items: center;
747
- gap: 2px 10px;
748
- width: 100%;
749
- padding: 5px 8px;
750
- border: 0;
751
- border-radius: 6px;
752
- background: none;
753
- font-size: 0.8125rem;
754
- text-align: left;
755
- cursor: pointer;
756
- }
757
-
758
- .history li > button:hover {
759
- background: var(--bg-2);
760
- }
761
-
762
- .history li > button[aria-current] {
763
- background: var(--place-soft);
764
- font-weight: 600;
765
- }
766
-
767
- /* Lists on the overview */
768
-
769
- .listRow {
770
- display: flex;
771
- align-items: center;
772
- gap: 10px;
773
- padding: 10px 14px;
774
- color: var(--ink);
775
- text-decoration: none;
776
- }
777
-
778
- a.listRow:hover {
779
- background: var(--bg-2);
780
- }
781
-
782
- .listName {
783
- display: flex;
784
- flex: 1;
785
- flex-wrap: wrap;
786
- align-items: baseline;
787
- gap: 0 10px;
788
- min-width: 0;
789
- font-weight: 500;
790
- }
791
-
792
- .listPath {
793
- color: var(--ink-3);
794
- font-size: 0.75rem;
795
- font-weight: 400;
796
- }
797
-
798
- .listTime {
799
- flex: none;
800
- width: 5.5rem;
801
- color: var(--ink-3);
802
- font-size: 0.75rem;
803
- text-align: right;
804
- white-space: nowrap;
805
- }
806
-
807
- /* Documents */
808
-
809
- .tableScroll {
810
- overflow-x: auto;
811
- }
812
-
813
- .table {
814
- border-collapse: collapse;
815
- font-size: 0.8125rem;
816
- }
817
-
818
- .table th,
819
- .table td {
820
- padding: 5px 10px;
821
- border: 1px solid var(--line-2);
822
- text-align: left;
823
- vertical-align: top;
824
- }
825
-
826
- .table th {
827
- background: var(--bg-2);
828
- font-weight: 600;
829
- }
830
-
831
- .table [data-output] {
832
- background: var(--place-soft);
833
- }
834
-
835
- .declarations {
836
- list-style: none;
837
- margin: 8px 0 0;
838
- padding: 0;
839
- }
840
-
841
- .declarations a {
842
- display: block;
843
- padding: 3px 0;
844
- color: var(--ink-2);
845
- text-decoration: none;
846
- }
847
-
848
- .declarations a:hover {
849
- color: var(--place);
850
- }
851
-
852
- .source {
853
- margin-top: 36px;
854
- border-top: 1px solid var(--line);
855
- padding-top: 14px;
856
- }
857
-
858
- .source summary {
859
- color: var(--ink-3);
860
- font-size: 0.875rem;
861
- font-weight: 600;
862
- cursor: pointer;
863
- }
864
-
865
- .code {
866
- margin: 12px 0 0;
867
- padding: 14px 16px;
868
- border-radius: 8px;
869
- background: var(--bg-2);
870
- overflow: auto;
871
- font-size: 0.75rem;
872
- line-height: 1.55;
873
- }
874
-
875
- @media (max-width: 760px) {
876
- .index {
877
- overflow: visible;
878
- border-right: 0;
879
- border-top: 1px solid var(--line);
880
- }
881
-
882
- .filters {
883
- position: static;
884
- }
885
-
886
- .page {
887
- height: auto;
888
- overflow: visible;
889
- padding: 20px 16px 48px;
890
- }
891
-
892
- .resultBody {
893
- padding-left: 14px;
894
- }
895
-
896
- .excerpt {
897
- margin-left: 14px;
898
- }
899
-
900
- .listTime {
901
- display: none;
902
- }
903
- }
904
-
905
- @media (prefers-reduced-motion: reduce) {
906
- .mark[data-status='running'] { animation: none; }
907
- }