executable-stories-formatters 0.17.0 → 1.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 (61) hide show
  1. package/README.md +6 -4
  2. package/dist/adapters.cjs.map +1 -1
  3. package/dist/adapters.d.cts +183 -1
  4. package/dist/adapters.d.ts +183 -1
  5. package/dist/adapters.js.map +1 -1
  6. package/dist/cli.js +2509 -16778
  7. package/dist/cli.js.map +1 -1
  8. package/dist/index.cjs +2324 -15956
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.d.cts +117 -1259
  11. package/dist/index.d.ts +117 -1259
  12. package/dist/index.js +2323 -15949
  13. package/dist/index.js.map +1 -1
  14. package/package.json +15 -11
  15. package/schemas/README.md +0 -1
  16. package/templates/astro-thin/astro.config.mjs +62 -0
  17. package/templates/astro-thin/executable-stories.config.mjs +47 -0
  18. package/templates/astro-thin/gitignore +3 -0
  19. package/templates/astro-thin/package.json +20 -0
  20. package/templates/astro-thin/reports/sample-run.json +133 -0
  21. package/templates/astro-thin/src/content/docs/404.md +20 -0
  22. package/templates/astro-thin/src/content/docs/guides/writing-docs.mdx +7 -0
  23. package/templates/astro-thin/src/content/docs/index.mdx +44 -0
  24. package/templates/astro-thin/src/content.config.ts +26 -0
  25. package/templates/astro-thin/src/styles/stories.css +32 -0
  26. package/templates/astro-thin/tsconfig.json +5 -0
  27. package/dist/index-CXrzCk9p.d.cts +0 -628
  28. package/dist/index-CXrzCk9p.d.ts +0 -628
  29. package/schemas/story-report-v1.json +0 -456
  30. package/templates/astro-starlight/astro.config.mjs +0 -57
  31. package/templates/astro-starlight/gitignore +0 -14
  32. package/templates/astro-starlight/package.json +0 -20
  33. package/templates/astro-starlight/public/stories/assets/.gitkeep +0 -0
  34. package/templates/astro-starlight/public/stories/notes-index.json +0 -4
  35. package/templates/astro-starlight/public/stories/story-report.json +0 -17
  36. package/templates/astro-starlight/src/components/ApiOperations.astro +0 -366
  37. package/templates/astro-starlight/src/components/Checklist.astro +0 -15
  38. package/templates/astro-starlight/src/components/HealthDashboard.astro +0 -171
  39. package/templates/astro-starlight/src/components/PageTitle.astro +0 -53
  40. package/templates/astro-starlight/src/components/VerifiedBy.astro +0 -281
  41. package/templates/astro-starlight/src/components/VerifiedStep.astro +0 -91
  42. package/templates/astro-starlight/src/content/docs/examples/example-adr.mdx +0 -45
  43. package/templates/astro-starlight/src/content/docs/guides/behavior-portal.mdx +0 -41
  44. package/templates/astro-starlight/src/content/docs/guides/writing-docs.mdx +0 -49
  45. package/templates/astro-starlight/src/content/docs/index.mdx +0 -49
  46. package/templates/astro-starlight/src/content/docs/stories/.gitkeep +0 -0
  47. package/templates/astro-starlight/src/content.config.ts +0 -18
  48. package/templates/astro-starlight/src/lib/config.ts +0 -50
  49. package/templates/astro-starlight/src/lib/render-doc-entry.ts +0 -154
  50. package/templates/astro-starlight/src/lib/report-health.ts +0 -61
  51. package/templates/astro-starlight/src/lib/verification.ts +0 -247
  52. package/templates/astro-starlight/src/pages/explorer/explorer.css +0 -729
  53. package/templates/astro-starlight/src/pages/explorer/index.astro +0 -404
  54. package/templates/astro-starlight/src/styles/global.css +0 -293
  55. package/templates/astro-starlight/src/styles/themes/corporate.css +0 -83
  56. package/templates/astro-starlight/src/styles/themes/dashboard.css +0 -76
  57. package/templates/astro-starlight/src/styles/themes/default.css +0 -86
  58. package/templates/astro-starlight/src/styles/themes/minimal.css +0 -87
  59. package/templates/astro-starlight/src/styles/themes/playful.css +0 -77
  60. package/templates/astro-starlight/src/styles/themes/terminal.css +0 -77
  61. package/templates/astro-starlight/tsconfig.json +0 -13
@@ -1,729 +0,0 @@
1
- .es-tool {
2
- --es-content-max: 1100px;
3
- --es-topbar-h: 48px;
4
- background: var(--es-bg);
5
- color: var(--es-text);
6
- font-family: var(--sl-font, ui-sans-serif, system-ui, sans-serif);
7
- }
8
-
9
- .es-tool * {
10
- box-sizing: border-box;
11
- }
12
-
13
- .es-tool button,
14
- .es-tool input,
15
- .es-tool select {
16
- font: inherit;
17
- }
18
-
19
- /* ---- Top bar (keeps the Explorer tied to the docs) ----------------- */
20
- .topbar {
21
- position: sticky;
22
- top: 0;
23
- z-index: 10;
24
- height: var(--es-topbar-h);
25
- display: flex;
26
- align-items: center;
27
- gap: 8px;
28
- padding: 0 16px;
29
- border-bottom: 1px solid var(--es-line);
30
- background: var(--es-surface);
31
- font-size: 13px;
32
- }
33
- .topbar__home {
34
- display: inline-flex;
35
- align-items: center;
36
- gap: 7px;
37
- color: var(--es-text);
38
- text-decoration: none;
39
- font-weight: 650;
40
- padding: 5px 9px;
41
- border-radius: var(--es-radius-sm);
42
- transition: background-color 120ms ease;
43
- }
44
- .topbar__home:hover {
45
- background: var(--es-surface-2);
46
- }
47
- .topbar__home::before {
48
- content: "←";
49
- color: var(--es-text-muted);
50
- }
51
- .topbar__sep {
52
- color: var(--es-line-strong);
53
- }
54
- .topbar__here {
55
- color: var(--es-text-muted);
56
- font-family: var(--es-mono);
57
- font-size: 12px;
58
- }
59
-
60
- .shell {
61
- display: grid;
62
- grid-template-columns: minmax(300px, 360px) minmax(0, 1fr);
63
- min-height: calc(100vh - var(--es-topbar-h));
64
- }
65
-
66
- /* ---- Sidebar ------------------------------------------------------- */
67
- .sidebar {
68
- border-right: 1px solid var(--es-line);
69
- background: var(--es-surface);
70
- padding: 18px 16px;
71
- position: sticky;
72
- top: var(--es-topbar-h);
73
- height: calc(100vh - var(--es-topbar-h));
74
- overflow: auto;
75
- display: flex;
76
- flex-direction: column;
77
- gap: 14px;
78
- }
79
-
80
- .brand {
81
- display: flex;
82
- align-items: baseline;
83
- justify-content: space-between;
84
- gap: 12px;
85
- }
86
-
87
- .brand h1 {
88
- font-size: 14px;
89
- font-weight: 700;
90
- letter-spacing: 0.02em;
91
- text-transform: uppercase;
92
- margin: 0;
93
- color: var(--es-text);
94
- }
95
-
96
- .meta {
97
- color: var(--es-text-muted);
98
- font-size: 11px;
99
- font-family: var(--es-mono);
100
- white-space: nowrap;
101
- }
102
-
103
- .controls {
104
- display: grid;
105
- gap: 8px;
106
- }
107
-
108
- .search,
109
- .select {
110
- width: 100%;
111
- border: 1px solid var(--es-line);
112
- border-radius: var(--es-radius-sm);
113
- background: var(--es-bg);
114
- color: var(--es-text);
115
- padding: 9px 11px;
116
- }
117
- .search:focus,
118
- .select:focus {
119
- outline: 2px solid var(--es-accent);
120
- outline-offset: 1px;
121
- }
122
-
123
- .summary {
124
- display: grid;
125
- grid-template-columns: repeat(2, minmax(0, 1fr));
126
- gap: 6px;
127
- }
128
-
129
- .metric {
130
- border: 1px solid var(--es-line);
131
- border-radius: var(--es-radius-sm);
132
- padding: 7px 9px;
133
- background: var(--es-bg);
134
- display: flex;
135
- align-items: baseline;
136
- gap: 6px;
137
- }
138
- .metric strong {
139
- font-size: 16px;
140
- line-height: 1;
141
- font-variant-numeric: tabular-nums;
142
- }
143
- .metric span {
144
- color: var(--es-text-muted);
145
- font-size: 10px;
146
- text-transform: uppercase;
147
- letter-spacing: 0.06em;
148
- }
149
- .metric--passed strong {
150
- color: var(--es-passed);
151
- }
152
- .metric--failed strong {
153
- color: var(--es-failed);
154
- }
155
- .metric--skipped strong {
156
- color: var(--es-skipped);
157
- }
158
- .metric--pending strong {
159
- color: var(--es-pending);
160
- }
161
-
162
- .scenario-list {
163
- display: flex;
164
- flex-direction: column;
165
- gap: 4px;
166
- margin-top: 2px;
167
- }
168
-
169
- .scenario-button {
170
- width: 100%;
171
- border: 1px solid transparent;
172
- border-radius: var(--es-radius-sm);
173
- background: none;
174
- color: var(--es-text);
175
- cursor: pointer;
176
- display: grid;
177
- grid-template-columns: auto minmax(0, 1fr) auto;
178
- column-gap: 9px;
179
- row-gap: 2px;
180
- padding: 8px 9px;
181
- text-align: left;
182
- transition: background-color 120ms ease, border-color 120ms ease;
183
- }
184
- .scenario-button:hover {
185
- background: var(--es-surface-2);
186
- }
187
- .scenario-button[aria-current="true"] {
188
- border-color: var(--es-accent);
189
- background: var(--es-accent-soft);
190
- }
191
-
192
- .row-dot {
193
- width: 8px;
194
- height: 8px;
195
- border-radius: 50%;
196
- margin-top: 5px;
197
- background: var(--dot, var(--es-text-muted));
198
- }
199
- .dot-passed {
200
- --dot: var(--es-passed);
201
- }
202
- .dot-failed {
203
- --dot: var(--es-failed);
204
- }
205
- .dot-skipped {
206
- --dot: var(--es-skipped);
207
- }
208
- .dot-pending {
209
- --dot: var(--es-pending);
210
- }
211
-
212
- .scenario-title {
213
- font-size: 13px;
214
- font-weight: 550;
215
- line-height: 1.35;
216
- }
217
-
218
- .scenario-context-flag {
219
- justify-self: end;
220
- align-self: start;
221
- background: var(--es-accent-soft);
222
- color: var(--es-accent);
223
- border: 1px solid color-mix(in oklab, var(--es-accent) 24%, var(--es-line));
224
- border-radius: var(--es-radius-pill);
225
- font-size: 10px;
226
- font-weight: 700;
227
- letter-spacing: 0.05em;
228
- padding: 2px 7px;
229
- text-transform: uppercase;
230
- }
231
-
232
- .scenario-source {
233
- grid-column: 2 / span 2;
234
- color: var(--es-text-muted);
235
- font-family: var(--es-mono);
236
- font-size: 11px;
237
- overflow: hidden;
238
- text-overflow: ellipsis;
239
- white-space: nowrap;
240
- }
241
-
242
- /* ---- Content ------------------------------------------------------- */
243
- .content {
244
- padding: 28px 32px;
245
- min-width: 0;
246
- }
247
-
248
- .scenario-card {
249
- max-width: var(--es-content-max);
250
- margin: 0 auto;
251
- }
252
-
253
- .status {
254
- align-items: center;
255
- border-radius: var(--es-radius-pill);
256
- display: inline-flex;
257
- font-size: 11px;
258
- font-weight: 700;
259
- gap: 6px;
260
- letter-spacing: 0.06em;
261
- padding: 4px 10px;
262
- text-transform: uppercase;
263
- border: 1px solid currentcolor;
264
- }
265
- .status::before {
266
- content: "";
267
- width: 7px;
268
- height: 7px;
269
- border-radius: 50%;
270
- background: currentcolor;
271
- }
272
- .status-passed {
273
- color: var(--es-passed);
274
- background: var(--es-passed-soft);
275
- }
276
- .status-failed {
277
- color: var(--es-failed);
278
- background: var(--es-failed-soft);
279
- }
280
- .status-skipped {
281
- color: var(--es-skipped);
282
- background: var(--es-skipped-soft);
283
- }
284
- .status-pending {
285
- color: var(--es-pending);
286
- background: var(--es-pending-soft);
287
- }
288
-
289
- .scenario-heading {
290
- position: sticky;
291
- top: var(--es-topbar-h);
292
- z-index: 2;
293
- background: linear-gradient(var(--es-bg) 78%, transparent);
294
- padding: 6px 0 16px;
295
- display: grid;
296
- gap: 11px;
297
- margin-bottom: 8px;
298
- }
299
- .scenario-heading h2 {
300
- font-size: clamp(24px, 3vw, 36px);
301
- line-height: 1.08;
302
- letter-spacing: -0.02em;
303
- margin: 0;
304
- color: var(--es-text);
305
- }
306
-
307
- .feature-line {
308
- color: var(--es-text-muted);
309
- font-size: 13px;
310
- display: flex;
311
- flex-wrap: wrap;
312
- align-items: center;
313
- gap: 8px;
314
- }
315
- .feature-line .sep {
316
- opacity: 0.5;
317
- }
318
- .source-link {
319
- color: var(--es-accent);
320
- text-decoration: none;
321
- font-family: var(--es-mono);
322
- font-size: 12px;
323
- border-bottom: 1px solid color-mix(in oklab, var(--es-accent) 40%, transparent);
324
- }
325
- .source-link:hover {
326
- border-bottom-color: var(--es-accent);
327
- }
328
- .source-text {
329
- font-family: var(--es-mono);
330
- font-size: 12px;
331
- color: var(--es-text-muted);
332
- }
333
-
334
- .context-row {
335
- display: flex;
336
- align-items: center;
337
- }
338
-
339
- .context-link {
340
- display: inline-flex;
341
- align-items: center;
342
- gap: 6px;
343
- color: var(--es-accent);
344
- font-size: 12px;
345
- font-weight: 600;
346
- text-decoration: none;
347
- }
348
-
349
- .context-link:hover {
350
- text-decoration: underline;
351
- }
352
-
353
- .tag-row {
354
- display: flex;
355
- flex-wrap: wrap;
356
- gap: 6px;
357
- }
358
- .pill {
359
- background: var(--es-surface);
360
- border: 1px solid var(--es-line);
361
- border-radius: var(--es-radius-pill);
362
- color: var(--es-text-muted);
363
- font-size: 12px;
364
- padding: 3px 9px;
365
- font-family: var(--es-mono);
366
- }
367
-
368
- .covers-row {
369
- color: var(--es-text-muted);
370
- font-size: 13px;
371
- }
372
- .covers-path {
373
- background: var(--es-surface);
374
- border: 1px solid var(--es-line);
375
- border-radius: 4px;
376
- font-family: var(--es-mono);
377
- font-size: 12px;
378
- padding: 2px 6px;
379
- }
380
-
381
- .section {
382
- border-top: 1px solid var(--es-line);
383
- padding-top: 20px;
384
- margin-top: 22px;
385
- }
386
- .section > h3 {
387
- font-size: 12px;
388
- letter-spacing: 0.08em;
389
- margin: 0 0 14px;
390
- text-transform: uppercase;
391
- color: var(--es-text-muted);
392
- }
393
-
394
- /* ---- Steps --------------------------------------------------------- */
395
- .steps {
396
- display: grid;
397
- gap: 6px;
398
- margin: 0;
399
- padding: 0;
400
- counter-reset: step;
401
- }
402
- .step {
403
- align-items: center;
404
- background: var(--es-surface);
405
- border: 1px solid var(--es-line);
406
- border-left: 3px solid var(--step-accent, var(--es-line-strong));
407
- border-radius: var(--es-radius-sm);
408
- display: grid;
409
- gap: 12px;
410
- grid-template-columns: 64px minmax(0, 1fr) auto;
411
- list-style: none;
412
- padding: 9px 12px;
413
- }
414
- .step--passed {
415
- --step-accent: var(--es-passed);
416
- }
417
- .step--failed {
418
- --step-accent: var(--es-failed);
419
- }
420
- .step--skipped {
421
- --step-accent: var(--es-skipped);
422
- }
423
- .step--pending {
424
- --step-accent: var(--es-pending);
425
- }
426
- .keyword {
427
- color: var(--es-accent);
428
- font-weight: 700;
429
- font-size: 13px;
430
- }
431
- .step-text {
432
- font-size: 14px;
433
- line-height: 1.45;
434
- }
435
- .step-status {
436
- font-family: var(--es-mono);
437
- font-size: 11px;
438
- text-transform: lowercase;
439
- color: var(--step-accent, var(--es-text-muted));
440
- }
441
-
442
- /* ---- Docs ---------------------------------------------------------- */
443
- .doc-grid {
444
- display: grid;
445
- gap: 12px;
446
- }
447
- .doc-entry {
448
- border: 1px solid var(--es-line);
449
- border-radius: var(--es-radius);
450
- background: var(--es-surface);
451
- overflow: hidden;
452
- }
453
- .doc-entry__label {
454
- font-size: 11px;
455
- font-weight: 600;
456
- text-transform: uppercase;
457
- letter-spacing: 0.06em;
458
- color: var(--es-text-muted);
459
- padding: 9px 12px;
460
- border-bottom: 1px solid var(--es-line);
461
- background: var(--es-surface-2);
462
- }
463
- .doc-entry__body {
464
- padding: 12px;
465
- }
466
-
467
- .doc-note {
468
- padding: 12px 14px;
469
- border-left: 3px solid var(--es-accent);
470
- color: var(--es-text-soft);
471
- font-size: 14px;
472
- line-height: 1.5;
473
- }
474
-
475
- .doc-kv {
476
- display: flex;
477
- gap: 8px;
478
- padding: 10px 12px;
479
- font-size: 13px;
480
- }
481
- .doc-kv__label {
482
- color: var(--es-text-muted);
483
- font-weight: 600;
484
- }
485
- .doc-kv__value {
486
- font-family: var(--es-mono);
487
- white-space: pre-wrap;
488
- word-break: break-word;
489
- }
490
-
491
- .doc-link-a {
492
- display: inline-flex;
493
- align-items: center;
494
- gap: 6px;
495
- padding: 11px 14px;
496
- color: var(--es-accent);
497
- text-decoration: none;
498
- font-weight: 550;
499
- }
500
- .doc-link-a:hover {
501
- text-decoration: underline;
502
- }
503
- .doc-link-a::after {
504
- content: "↗";
505
- font-size: 0.85em;
506
- opacity: 0.7;
507
- }
508
-
509
- .doc-entry pre {
510
- margin: 0;
511
- overflow: auto;
512
- font-family: var(--es-mono);
513
- font-size: 12.5px;
514
- line-height: 1.6;
515
- }
516
- .doc-entry pre code {
517
- font-family: inherit;
518
- }
519
- /* highlight.js — token-based theme so code colours adapt to light/dark
520
- from the same --es-* palette (no CDN stylesheet needed, works offline). */
521
- .hljs-comment,
522
- .hljs-quote {
523
- color: var(--es-text-muted);
524
- font-style: italic;
525
- }
526
- .hljs-keyword,
527
- .hljs-selector-tag,
528
- .hljs-literal,
529
- .hljs-section,
530
- .hljs-doctag,
531
- .hljs-name {
532
- color: var(--es-method-patch);
533
- }
534
- .hljs-string,
535
- .hljs-attr,
536
- .hljs-template-tag,
537
- .hljs-addition {
538
- color: var(--es-passed);
539
- }
540
- .hljs-number,
541
- .hljs-symbol,
542
- .hljs-bullet,
543
- .hljs-meta {
544
- color: var(--es-method-put);
545
- }
546
- .hljs-title,
547
- .hljs-built_in,
548
- .hljs-class .hljs-title,
549
- .hljs-function .hljs-title,
550
- .hljs-attribute {
551
- color: var(--es-method-post);
552
- }
553
- .hljs-type,
554
- .hljs-tag,
555
- .hljs-deletion,
556
- .hljs-variable {
557
- color: var(--es-failed);
558
- }
559
- .doc-entry__body table {
560
- border-collapse: collapse;
561
- width: 100%;
562
- font-size: 13px;
563
- }
564
- .doc-entry__body th,
565
- .doc-entry__body td {
566
- border: 1px solid var(--es-line);
567
- padding: 6px 10px;
568
- text-align: left;
569
- }
570
- .doc-entry__body th {
571
- background: var(--es-surface-2);
572
- font-weight: 600;
573
- text-transform: uppercase;
574
- font-size: 11px;
575
- letter-spacing: 0.04em;
576
- color: var(--es-text-muted);
577
- }
578
-
579
- .doc-section-content {
580
- font-size: 14px;
581
- line-height: 1.6;
582
- }
583
- .doc-section-content > :first-child {
584
- margin-top: 0;
585
- }
586
- .doc-section-content > :last-child {
587
- margin-bottom: 0;
588
- }
589
-
590
- .doc-media {
591
- display: grid;
592
- gap: 8px;
593
- }
594
- .doc-media img,
595
- .doc-media video {
596
- display: block;
597
- width: 100%;
598
- max-height: 70vh;
599
- border-radius: var(--es-radius-sm);
600
- background: #000;
601
- }
602
- .doc-media img {
603
- background: var(--es-surface-2);
604
- object-fit: contain;
605
- }
606
- .doc-media__caption {
607
- font-size: 12px;
608
- color: var(--es-text-muted);
609
- }
610
- .doc-media--broken {
611
- padding: 16px;
612
- border: 1px dashed var(--es-line-strong);
613
- border-radius: var(--es-radius-sm);
614
- text-align: center;
615
- color: var(--es-text-muted);
616
- font-size: 13px;
617
- }
618
- .doc-media--broken code {
619
- display: block;
620
- margin-top: 6px;
621
- font-family: var(--es-mono);
622
- font-size: 11px;
623
- word-break: break-all;
624
- }
625
-
626
- .mermaid {
627
- margin: 0;
628
- text-align: center;
629
- }
630
-
631
- .doc-visual-grid {
632
- display: grid;
633
- grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
634
- gap: 10px;
635
- }
636
- .doc-visual-item {
637
- display: grid;
638
- gap: 6px;
639
- }
640
- .doc-visual-item .doc-visual-label {
641
- font-size: 11px;
642
- color: var(--es-text-muted);
643
- text-transform: uppercase;
644
- letter-spacing: 0.04em;
645
- }
646
- .doc-visual-item img {
647
- width: 100%;
648
- border-radius: var(--es-radius-sm);
649
- border: 1px solid var(--es-line);
650
- }
651
-
652
- .doc-children {
653
- margin-top: 10px;
654
- padding-left: 12px;
655
- border-left: 2px solid var(--es-line);
656
- display: grid;
657
- gap: 10px;
658
- }
659
-
660
- .empty {
661
- color: var(--es-text-muted);
662
- display: grid;
663
- min-height: 60vh;
664
- place-items: center;
665
- text-align: center;
666
- font-size: 14px;
667
- }
668
- .error {
669
- color: var(--es-failed);
670
- white-space: pre-wrap;
671
- font-family: var(--es-mono);
672
- font-size: 13px;
673
- background: var(--es-failed-soft);
674
- border: 1px solid color-mix(in oklab, var(--es-failed) 30%, var(--es-line));
675
- border-radius: var(--es-radius-sm);
676
- padding: 12px 14px;
677
- margin: 0;
678
- }
679
-
680
- @media (max-width: 880px) {
681
- .shell {
682
- display: block;
683
- }
684
- .sidebar {
685
- /* Cap the list so the detail pane is reachable without scrolling past
686
- every scenario; the list scrolls within this panel. */
687
- max-height: 45vh;
688
- height: auto;
689
- position: sticky;
690
- top: var(--es-topbar-h);
691
- z-index: 5;
692
- box-shadow: 0 6px 12px -8px rgb(0 0 0 / 0.3);
693
- }
694
- .content {
695
- padding: 18px;
696
- }
697
- .step {
698
- grid-template-columns: 1fr;
699
- gap: 4px;
700
- }
701
- }
702
-
703
- /* ---- Accessibility -------------------------------------------------------- */
704
-
705
- /* Visible keyboard focus on every interactive element. */
706
- .scenario-button:focus-visible,
707
- .topbar__home:focus-visible,
708
- .source-link:focus-visible,
709
- .doc-link-a:focus-visible,
710
- .search:focus-visible,
711
- .select:focus-visible,
712
- .doc-media video:focus-visible {
713
- outline: 2px solid var(--es-accent);
714
- outline-offset: 2px;
715
- border-radius: var(--es-radius-sm);
716
- }
717
-
718
- /* Respect users who prefer reduced motion: no transitions, transforms, or
719
- smooth scrolling. */
720
- @media (prefers-reduced-motion: reduce) {
721
- *,
722
- *::before,
723
- *::after {
724
- animation-duration: 0.01ms !important;
725
- animation-iteration-count: 1 !important;
726
- transition-duration: 0.01ms !important;
727
- scroll-behavior: auto !important;
728
- }
729
- }