babavoss 0.12.6 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/gui/babavoss-web.js +4 -1
  2. package/gui/{chunk-9gmmm54v.js → chunk-qgzmajan.js} +619 -574
  3. package/gui/gui.js +1538 -277
  4. package/gui/theme.css +2007 -1128
  5. package/index.ts +1 -1
  6. package/package.json +5 -5
  7. package/src/{promptware → agents}/compile.ts +23 -31
  8. package/src/{promptware → agents}/define.ts +2 -2
  9. package/src/{promptware → agents}/disk.ts +7 -4
  10. package/src/{promptware → agents}/sync.ts +2 -2
  11. package/src/{promptware → agents}/system.ts +17 -17
  12. package/src/baba/check.ts +3 -3
  13. package/src/baba/config.ts +5 -2
  14. package/src/baba/init.ts +13 -18
  15. package/src/baba/node.ts +2 -2
  16. package/src/baba/project.ts +2 -2
  17. package/src/baba/requirements.ts +39 -0
  18. package/src/baba/setup.ts +30 -0
  19. package/src/baba/worker.ts +13 -5
  20. package/src/build/mdx.ts +4 -4
  21. package/src/build/project.ts +6 -1
  22. package/src/build/views.ts +3 -3
  23. package/src/desktop/desktop.css +35 -39
  24. package/src/desktop/index.ts +9 -7
  25. package/src/desktop/keys.ts +153 -0
  26. package/src/desktop/view.tsx +174 -130
  27. package/src/door/core.ts +2 -2
  28. package/src/ecs/baba.ts +27 -17
  29. package/src/generated/build.ts +1 -1
  30. package/src/gui/gui.tsx +21 -31
  31. package/src/gui/index.ts +6 -2
  32. package/src/gui/{promptware.tsx → instructions.tsx} +12 -12
  33. package/src/gui/levels.tsx +241 -59
  34. package/src/gui/lockup.ts +11 -0
  35. package/src/gui/settings.tsx +241 -0
  36. package/src/gui/setup.tsx +77 -0
  37. package/src/gui/theme.css +205 -58
  38. package/src/gui/theme.ts +9 -5
  39. package/src/gui/voss-settings.ts +48 -0
  40. package/src/gui/wizard.tsx +17 -40
  41. package/src/guide/add-a-desktop.mdx +7 -7
  42. package/src/guide/index.ts +4 -4
  43. package/src/guide/write-a-system.mdx +3 -3
  44. package/src/guide/{write-promptware.mdx → write-agentic-instructions.mdx} +17 -24
  45. package/src/http/server.ts +140 -17
  46. package/src/{prompt → instructions}/evals.ts +1 -1
  47. package/src/{prompt → instructions}/index.ts +9 -8
  48. package/src/{prompt → instructions}/jsx-runtime.ts +3 -3
  49. package/src/mcp/main.ts +3 -3
  50. package/src/mcp/tools.ts +4 -4
  51. package/src/runtime/harness.ts +2 -2
  52. package/src/server/edge.ts +31 -3
  53. package/src/server/main.ts +2 -1
  54. package/src/server/messages.ts +47 -7
  55. package/src/shell/run.ts +18 -18
  56. package/src/spec/index.ts +1 -1
  57. package/src/web/core.tsx +2 -2
  58. package/src/web/index.tsx +1 -1
  59. package/src/desktop/bob.ts +0 -76
  60. /package/src/{promptware → agents}/markdown.d.ts +0 -0
  61. /package/src/{prompt → instructions}/jsx-dev-runtime.ts +0 -0
  62. /package/src/{prompt → instructions}/mdx.d.ts +0 -0
package/gui/theme.css CHANGED
@@ -17,7 +17,7 @@
17
17
  min-height: 320px;
18
18
  }
19
19
 
20
- .desktop button, .desktop input, .desktop select {
20
+ :where(.desktop) :where(button, input, select) {
21
21
  font: inherit;
22
22
  color: inherit;
23
23
  }
@@ -52,24 +52,13 @@
52
52
  padding: 6px 8px;
53
53
  }
54
54
 
55
- .desktop-logo {
56
- display: grid;
55
+ .desktop-pill-mark {
57
56
  color: var(--foreground);
58
- background: none;
59
- border: 0;
60
- border-radius: 999px;
61
- place-items: center;
62
- width: 28px;
63
- padding: 0;
64
- }
65
-
66
- .desktop-logo:hover {
67
- background: var(--desktop-ink);
68
57
  }
69
58
 
70
- .desktop-logo.is-selected {
71
- background: var(--desktop-ink-top);
72
- color: var(--primary);
59
+ .desktop-pill-mark:not(:has(.desktop-pill-close)) .desktop-pill-label > .desktop-pill-icon {
60
+ opacity: 1;
61
+ transform: none;
73
62
  }
74
63
 
75
64
  .desktop-eyes {
@@ -92,69 +81,6 @@
92
81
  transform: translateX(-21.5px);
93
82
  }
94
83
 
95
- .desktop-eyes circle {
96
- transform-box: fill-box;
97
- transform-origin: center;
98
- }
99
-
100
- .desktop-eyes.is-settling .desktop-eye-small {
101
- animation: .34s cubic-bezier(.3,1.6,.4,1) desktop-eye-home;
102
- }
103
-
104
- .desktop-eyes.is-settling .desktop-eye-large {
105
- animation: .34s cubic-bezier(.3,1.6,.4,1) desktop-eye-back;
106
- }
107
-
108
- @keyframes desktop-eye-home {
109
- from {
110
- transform: translateX(-21.5px);
111
- }
112
- }
113
-
114
- @keyframes desktop-eye-back {
115
- from {
116
- transform: scale(0);
117
- }
118
- }
119
-
120
- @media (prefers-reduced-motion: reduce) {
121
- .desktop-eyes.is-settling circle {
122
- animation: none;
123
- }
124
- }
125
-
126
- .desktop-bar-title {
127
- display: flex;
128
- color: var(--muted-foreground);
129
- white-space: pre;
130
- align-items: center;
131
- padding: 0 8px;
132
- }
133
-
134
- .desktop-bar-root {
135
- color: var(--muted-foreground);
136
- text-decoration: none;
137
- border-radius: 4px;
138
- margin: 0 -2px;
139
- padding: 0 2px;
140
- }
141
-
142
- .desktop-bar-root:hover {
143
- color: var(--foreground);
144
- background: var(--muted);
145
- outline: none;
146
- }
147
-
148
- .desktop-bar-root:focus-visible {
149
- color: var(--foreground);
150
- background: var(--muted);
151
- outline: none;
152
- }
153
-
154
- .desktop-bar-gap {
155
- flex: 1;
156
- }
157
-
158
84
  .desktop-pills {
159
85
  display: flex;
160
86
  overflow-x: auto;
@@ -335,6 +261,7 @@
335
261
  .desktop-content {
336
262
  overflow: hidden;
337
263
  display: flex;
264
+ isolation: isolate;
338
265
  flex-direction: column;
339
266
  flex: 1;
340
267
  min-width: 0;
@@ -353,22 +280,67 @@
353
280
  display: none;
354
281
  }
355
282
 
283
+ .desktop-app.is-behind {
284
+ visibility: hidden;
285
+ }
286
+
356
287
  .desktop-launcher {
357
288
  position: absolute;
358
289
  z-index: 5;
359
290
  display: flex;
291
+ background: var(--background);
292
+ border-top: 1px solid var(--border);
293
+ justify-content: center;
294
+ align-items: flex-start;
295
+ padding: max(16px, 14vh) 16px 16px;
296
+ inset: 40px 0 0;
297
+ }
298
+
299
+ .desktop-launcher.is-quick {
300
+ background: color-mix(in oklch, var(--desk) 55%, transparent);
301
+ border-top-color: #0000;
302
+ }
303
+
304
+ .desktop-launcher.is-quick .desktop-palette {
360
305
  background: var(--desk);
306
+ border-radius: 26px;
307
+ max-height: min(100%, 520px);
308
+ padding: 8px;
309
+ }
310
+
311
+ .desktop-palette {
312
+ display: flex;
361
313
  flex-direction: column;
362
- inset: 0;
314
+ gap: 8px;
315
+ width: min(560px, 100%);
316
+ max-height: 100%;
317
+ }
318
+
319
+ .desktop-launcher-search {
320
+ display: flex;
321
+ background: var(--desktop-ink);
322
+ color: var(--muted-foreground);
323
+ border: 1px solid #0000;
324
+ border-radius: 999px;
325
+ flex-shrink: 0;
326
+ align-items: center;
327
+ gap: 3px;
328
+ height: 36px;
329
+ padding: 0 4px 0 6px;
330
+ }
331
+
332
+ .desktop-launcher-search:focus-within {
333
+ border-color: var(--border);
363
334
  }
364
335
 
365
336
  .desktop-search {
337
+ color: var(--foreground);
366
338
  background: none;
367
339
  border: 0;
368
340
  flex: 1;
369
341
  min-width: 0;
370
342
  height: 100%;
371
- padding: 0 10px 0 6px;
343
+ padding: 0 10px 0 0;
372
344
  font-size: 13px;
373
345
  }
374
346
 
@@ -384,44 +356,24 @@
384
356
  overflow: auto;
385
357
  flex: 1;
386
358
  min-height: 0;
387
- padding: 4px 8px 24px 40px;
388
359
  }
389
360
 
390
- .desktop-dot {
391
- position: absolute;
392
- background: var(--primary);
393
- opacity: 0;
394
- pointer-events: none;
395
- will-change: transform;
396
- z-index: 1;
397
- border-radius: 50%;
398
- width: 6.5px;
399
- height: 6.5px;
400
- margin: -3.25px 0 0 -3.25px;
401
- transition: opacity .12s;
402
- top: 0;
403
- left: 0;
361
+ .desktop-launcher-body.is-faded-top {
362
+ mask-image: linear-gradient(#0000, #000 32px);
404
363
  }
405
364
 
406
- .desktop-string {
407
- position: absolute;
408
- transform-origin: 0 0;
409
- background: color-mix(in oklch, var(--foreground) 35%, transparent);
410
- opacity: 0;
411
- pointer-events: none;
412
- will-change: transform;
413
- width: 1px;
414
- height: 1px;
415
- margin-left: -.5px;
416
- transition: opacity .12s;
417
- top: 0;
418
- left: 0;
365
+ .desktop-launcher-body.is-faded-bottom {
366
+ mask-image: linear-gradient(#000 calc(100% - 32px), #0000);
367
+ }
368
+
369
+ .desktop-launcher-body.is-faded-top.is-faded-bottom {
370
+ mask-image: linear-gradient(#0000, #000 32px calc(100% - 32px), #0000);
419
371
  }
420
372
 
421
373
  .desktop-group {
422
374
  display: flex;
423
375
  flex-direction: column;
424
- gap: 4px;
376
+ gap: 2px;
425
377
  margin: 0 0 8px;
426
378
  }
427
379
 
@@ -429,7 +381,7 @@
429
381
  letter-spacing: .1em;
430
382
  text-transform: uppercase;
431
383
  color: var(--muted-foreground);
432
- margin: 10px 0 2px 6px;
384
+ margin: 10px 0 2px 28px;
433
385
  font-size: 10px;
434
386
  font-weight: 600;
435
387
  line-height: 16px;
@@ -443,11 +395,11 @@
443
395
  background: none;
444
396
  border: 0;
445
397
  border-radius: 999px;
398
+ flex-shrink: 0;
446
399
  align-items: center;
447
400
  width: 100%;
448
401
  height: 28px;
449
402
  padding: 0;
450
- transition: translate .18s cubic-bezier(.3,1.2,.3,1);
451
403
  }
452
404
 
453
405
  .desktop-row-app, .desktop-row-main {
@@ -470,7 +422,7 @@
470
422
 
471
423
  .desktop-row.is-cursor {
472
424
  color: var(--foreground);
473
- translate: -6px;
425
+ background: var(--desktop-ink-strong);
474
426
  }
475
427
 
476
428
  .desktop-row-label {
@@ -510,24 +462,8 @@
510
462
  transform: none;
511
463
  }
512
464
 
513
- .desktop-row, .desktop-group-title {
514
- animation: .16s cubic-bezier(.2,.7,.2,1) both desktop-arrive;
515
- animation-delay: calc(min(var(--i, 0), 14) * 14ms);
516
- }
517
-
518
- @keyframes desktop-arrive {
519
- from {
520
- opacity: 0;
521
- transform: translateY(-6px);
522
- }
523
- }
524
-
525
465
  @media (prefers-reduced-motion: reduce) {
526
- .desktop-row, .desktop-group-title {
527
- animation: none;
528
- }
529
-
530
- .desktop-eye-small, .desktop-row, .desktop-pill-icon, .desktop-pill-close {
466
+ .desktop-eye-small, .desktop-pill-icon, .desktop-pill-close {
531
467
  transition: none;
532
468
  }
533
469
  }
@@ -539,7 +475,7 @@
539
475
 
540
476
  .desktop-muted {
541
477
  color: var(--muted-foreground);
542
- margin: 8px 0 8px 6px;
478
+ margin: 8px 0 8px 28px;
543
479
  font-size: 11px;
544
480
  }
545
481
 
@@ -549,7 +485,7 @@
549
485
  flex-wrap: wrap;
550
486
  flex-shrink: 0;
551
487
  gap: 6px 16px;
552
- padding: 10px 16px 12px;
488
+ padding: 4px 3px;
553
489
  font-size: 11px;
554
490
  }
555
491
 
@@ -592,23 +528,23 @@
592
528
 
593
529
  @layer voss {
594
530
  :root, .desktop {
595
- --background: oklch(.968 .004 75);
596
- --surface: oklch(.992 .003 75);
531
+ --background: #f3ede4;
532
+ --surface: #f8f4ee;
597
533
  --card: var(--surface);
598
- --foreground: oklch(.29 .008 70);
599
- --popover: oklch(.995 .003 75);
600
- --muted: oklch(.945 .005 75);
601
- --muted-foreground: oklch(.53 .01 70);
602
- --accent: oklch(.935 .006 75);
603
- --primary: oklch(.52 .11 250);
604
- --primary-foreground: oklch(.985 .004 250);
605
- --destructive: oklch(.56 .14 28);
606
- --warning: oklch(.68 .11 75);
607
- --success: oklch(.58 .1 155);
608
- --border: oklch(.29 .008 70 / 11%);
609
- --input: oklch(.29 .008 70 / 16%);
610
- --desk: oklch(.925 .006 75);
611
- --chrome: oklch(.952 .005 75);
534
+ --foreground: #332922;
535
+ --popover: #faf7f2;
536
+ --muted: #e6ddd0;
537
+ --muted-foreground: #6f6356;
538
+ --accent: #e0d5c5;
539
+ --primary: #634a38;
540
+ --primary-foreground: #ece4d8;
541
+ --destructive: #a4472a;
542
+ --warning: #a4472a;
543
+ --success: #4f6b34;
544
+ --border: #3329221f;
545
+ --input: #3329222e;
546
+ --desk: #ece4d8;
547
+ --chrome: #e6ddd0;
612
548
  --radius: 4px;
613
549
  --row: 28px;
614
550
  --control: 24px;
@@ -622,22 +558,22 @@
622
558
 
623
559
  @media (prefers-color-scheme: dark) {
624
560
  :root:not([data-theme="light"]), .desktop[data-theme="system"] {
625
- --background: oklch(.2 .005 75);
626
- --surface: oklch(.228 .006 75);
627
- --foreground: oklch(.87 .012 80);
628
- --popover: oklch(.25 .006 75);
629
- --muted: oklch(.245 .006 75);
630
- --muted-foreground: oklch(.66 .012 78);
631
- --accent: oklch(.275 .007 75);
632
- --primary: oklch(.74 .075 245);
633
- --primary-foreground: oklch(.2 .01 245);
634
- --destructive: oklch(.71 .1 30);
635
- --warning: oklch(.79 .09 80);
636
- --success: oklch(.75 .085 155);
637
- --border: oklch(.87 .012 80 / 10%);
638
- --input: oklch(.87 .012 80 / 15%);
639
- --desk: oklch(.165 .005 75);
640
- --chrome: oklch(.185 .005 75);
561
+ --background: #1b1917;
562
+ --surface: #1f1c1a;
563
+ --foreground: #e3ddd6;
564
+ --popover: #262220;
565
+ --muted: #23201e;
566
+ --muted-foreground: #9c948c;
567
+ --accent: #2c2826;
568
+ --primary: #ae8d74;
569
+ --primary-foreground: #151312;
570
+ --destructive: #d9824a;
571
+ --warning: #d9824a;
572
+ --success: #a3b67e;
573
+ --border: #e3ddd61a;
574
+ --input: #e3ddd626;
575
+ --desk: #151312;
576
+ --chrome: #181614;
641
577
  --buncss-light: ;
642
578
  --buncss-dark: initial;
643
579
  color-scheme: dark;
@@ -645,22 +581,22 @@
645
581
  }
646
582
 
647
583
  :root[data-theme="dark"], .desktop[data-theme="dark"] {
648
- --background: oklch(.2 .005 75);
649
- --surface: oklch(.228 .006 75);
650
- --foreground: oklch(.87 .012 80);
651
- --popover: oklch(.25 .006 75);
652
- --muted: oklch(.245 .006 75);
653
- --muted-foreground: oklch(.66 .012 78);
654
- --accent: oklch(.275 .007 75);
655
- --primary: oklch(.74 .075 245);
656
- --primary-foreground: oklch(.2 .01 245);
657
- --destructive: oklch(.71 .1 30);
658
- --warning: oklch(.79 .09 80);
659
- --success: oklch(.75 .085 155);
660
- --border: oklch(.87 .012 80 / 10%);
661
- --input: oklch(.87 .012 80 / 15%);
662
- --desk: oklch(.165 .005 75);
663
- --chrome: oklch(.185 .005 75);
584
+ --background: #1b1917;
585
+ --surface: #1f1c1a;
586
+ --foreground: #e3ddd6;
587
+ --popover: #262220;
588
+ --muted: #23201e;
589
+ --muted-foreground: #9c948c;
590
+ --accent: #2c2826;
591
+ --primary: #ae8d74;
592
+ --primary-foreground: #151312;
593
+ --destructive: #d9824a;
594
+ --warning: #d9824a;
595
+ --success: #a3b67e;
596
+ --border: #e3ddd61a;
597
+ --input: #e3ddd626;
598
+ --desk: #151312;
599
+ --chrome: #181614;
664
600
  --buncss-light: ;
665
601
  --buncss-dark: initial;
666
602
  color-scheme: dark;
@@ -683,6 +619,24 @@
683
619
  margin: 0;
684
620
  }
685
621
 
622
+ @view-transition {
623
+ navigation: auto;
624
+ }
625
+
626
+ ::view-transition-old(root) {
627
+ animation-duration: .16s;
628
+ }
629
+
630
+ ::view-transition-new(root) {
631
+ animation-duration: .16s;
632
+ }
633
+
634
+ @media (prefers-reduced-motion: reduce) {
635
+ @view-transition {
636
+ navigation: none;
637
+ }
638
+ }
639
+
686
640
  #root {
687
641
  display: flex;
688
642
  overflow: hidden;
@@ -1537,55 +1491,6 @@
1537
1491
  font-size: 12px;
1538
1492
  }
1539
1493
 
1540
- .pk-field {
1541
- display: flex;
1542
- height: var(--control);
1543
- border: 1px solid var(--input);
1544
- border-radius: var(--radius);
1545
- background: var(--surface);
1546
- overflow: hidden;
1547
- align-items: center;
1548
- width: 150px;
1549
- min-width: 0;
1550
- }
1551
-
1552
- .pk-field.is-wide {
1553
- width: 190px;
1554
- }
1555
-
1556
- .pk-field:focus-within {
1557
- border-color: color-mix(in oklch, var(--primary) 55%, transparent);
1558
- }
1559
-
1560
- .pk-field span {
1561
- display: grid;
1562
- border-right: 1px solid var(--border);
1563
- background: var(--muted);
1564
- color: var(--muted-foreground);
1565
- flex: none;
1566
- align-self: stretch;
1567
- place-items: center;
1568
- padding: 0 7px;
1569
- font-size: 11px;
1570
- }
1571
-
1572
- .pk-field input {
1573
- outline: 0;
1574
- background: none;
1575
- border: 0;
1576
- flex: 1;
1577
- min-width: 0;
1578
- height: 100%;
1579
- padding: 0 7px;
1580
- }
1581
-
1582
- .pk-busy {
1583
- display: inline-flex;
1584
- color: var(--muted-foreground);
1585
- align-items: center;
1586
- gap: 8px;
1587
- }
1588
-
1589
1494
  .pk-primary {
1590
1495
  display: inline-flex;
1591
1496
  border-radius: var(--radius);
@@ -1658,10 +1563,6 @@
1658
1563
  flex-wrap: wrap;
1659
1564
  }
1660
1565
 
1661
- .pk-field, .pk-field.is-wide {
1662
- width: 100%;
1663
- }
1664
-
1665
1566
  .pk-filter, .pk-filter:focus-within {
1666
1567
  width: 120px;
1667
1568
  }
@@ -1786,1268 +1687,2246 @@
1786
1687
  .gui-choices {
1787
1688
  display: flex;
1788
1689
  gap: 6px;
1789
- margin-top: 8px;
1790
- }
1791
-
1792
- .gui-stale {
1793
- position: fixed;
1794
- z-index: 900;
1795
- display: flex;
1796
- border: 1px solid var(--border);
1797
- background: var(--card);
1798
- color: var(--foreground);
1799
- border-radius: 8px;
1800
- align-items: center;
1801
- gap: 12px;
1802
- max-width: min(640px, 100vw - 60px);
1803
- padding: 8px 12px;
1804
- font-size: 13px;
1805
- bottom: 10px;
1806
- left: 10px;
1807
- box-shadow: 0 8px 24px #00000040;
1808
- box-shadow: 0 8px 24px color(display-p3 0 0 0 / .25);
1809
- box-shadow: 0 8px 24px lab(0% 0 0 / .25);
1810
1690
  }
1811
1691
 
1812
- .bv-row {
1692
+ .gui-settings {
1813
1693
  display: flex;
1814
- align-items: center;
1815
- gap: 8px;
1816
- margin: 8px 0;
1817
- }
1818
-
1819
- .bv-between {
1820
- justify-content: space-between;
1694
+ height: 100%;
1821
1695
  }
1822
1696
 
1823
- .bv-object-card {
1697
+ .gui-settings-nav {
1824
1698
  display: flex;
1825
- border: 1px solid var(--border);
1826
- border-radius: var(--radius);
1827
- background: var(--surface);
1828
- overflow: hidden;
1699
+ border-right: 1px solid var(--border);
1829
1700
  flex-direction: column;
1830
- font-size: 12px;
1831
- line-height: 16px;
1701
+ flex-shrink: 0;
1702
+ gap: 2px;
1703
+ width: 200px;
1704
+ padding: 16px 8px;
1832
1705
  }
1833
1706
 
1834
- .bv-object-card-head {
1707
+ .gui-settings-link {
1835
1708
  display: flex;
1836
- background: var(--chrome);
1837
- border-bottom: 1px solid var(--border);
1838
- align-items: baseline;
1839
- gap: 8px;
1840
- min-width: 0;
1709
+ color: var(--muted-foreground);
1710
+ font: inherit;
1711
+ text-align: left;
1712
+ text-decoration: none;
1713
+ cursor: pointer;
1714
+ background: none;
1715
+ border: 0;
1716
+ border-radius: 999px;
1717
+ align-items: center;
1841
1718
  height: 28px;
1842
- padding: 4px 10px;
1843
- font-size: 13px;
1844
- line-height: 20px;
1719
+ padding: 0 12px;
1845
1720
  }
1846
1721
 
1847
- .bv-object-key {
1848
- overflow: hidden;
1849
- text-overflow: ellipsis;
1850
- white-space: nowrap;
1851
- color: var(--primary);
1852
- font-variant-numeric: tabular-nums;
1853
- min-width: 0;
1722
+ .gui-settings-link:hover {
1723
+ color: var(--foreground);
1724
+ background: color-mix(in oklch, var(--foreground) 6%, transparent);
1854
1725
  }
1855
1726
 
1856
- .bv-object-card-head .bv-muted {
1857
- margin-left: auto;
1858
- font-size: 11px;
1727
+ .gui-settings-link.is-active {
1728
+ color: var(--foreground);
1729
+ background: color-mix(in oklch, var(--foreground) 11%, transparent);
1859
1730
  }
1860
1731
 
1861
- .bv-object-fields {
1862
- display: grid;
1863
- grid-template-columns: minmax(72px, auto) 1fr;
1864
- gap: 2px 10px;
1865
- margin: 0;
1866
- padding: 6px 10px;
1732
+ .gui-settings-link:focus-visible {
1733
+ outline: 2px solid var(--primary);
1734
+ outline-offset: -2px;
1867
1735
  }
1868
1736
 
1869
- .bv-object-fields > div {
1870
- display: contents;
1871
- }
1872
-
1873
- .bv-object-fields dt {
1737
+ .gui-settings-level {
1738
+ letter-spacing: .1em;
1739
+ text-transform: uppercase;
1874
1740
  color: var(--muted-foreground);
1875
- overflow: hidden;
1876
- text-overflow: ellipsis;
1877
- white-space: nowrap;
1741
+ margin: 12px 12px 4px;
1742
+ font-size: 10px;
1743
+ font-weight: 600;
1744
+ line-height: 16px;
1878
1745
  }
1879
1746
 
1880
- .bv-object-fields dd {
1881
- overflow: hidden;
1882
- text-overflow: ellipsis;
1883
- white-space: nowrap;
1884
- min-width: 0;
1885
- margin: 0;
1747
+ .gui-settings-level:first-child {
1748
+ margin-top: 0;
1886
1749
  }
1887
1750
 
1888
- .bv-object-fields code {
1889
- font-size: 11px;
1751
+ .gui-name {
1752
+ border: 1px solid var(--border);
1753
+ background: color-mix(in oklch, var(--foreground) 4%, transparent);
1754
+ color: var(--foreground);
1755
+ font: inherit;
1756
+ font-family: var(--font-mono);
1757
+ outline: none;
1758
+ border-radius: 999px;
1759
+ width: 200px;
1760
+ height: 28px;
1761
+ padding: 0 12px;
1890
1762
  }
1891
1763
 
1892
- .bv-object-num {
1893
- font-variant-numeric: tabular-nums;
1764
+ .gui-name:focus {
1765
+ border-color: var(--primary);
1894
1766
  }
1895
1767
 
1896
- .bv-object-tag {
1897
- background: var(--muted);
1898
- color: var(--muted-foreground);
1899
- border-radius: 3px;
1900
- padding: 0 5px;
1901
- font-size: 11px;
1768
+ .gui-settings-page {
1769
+ overflow: auto;
1770
+ flex: 1;
1771
+ min-width: 0;
1772
+ padding: 24px 32px 48px;
1902
1773
  }
1903
1774
 
1904
- .bv-object-ref {
1905
- color: var(--primary);
1906
- cursor: pointer;
1907
- font: inherit;
1908
- background: none;
1909
- border: 0;
1910
- border-radius: 3px;
1911
- padding: 0 4px;
1775
+ .gui-settings-page > * {
1776
+ max-width: 720px;
1912
1777
  }
1913
1778
 
1914
- .bv-object-ref:hover {
1915
- background: color-mix(in oklch, var(--primary) 12%, transparent);
1779
+ .gui-settings-head h1 {
1780
+ margin: 0 0 16px;
1781
+ font-size: 18px;
1782
+ font-weight: 600;
1783
+ line-height: 28px;
1916
1784
  }
1917
1785
 
1918
- .bv-object-more {
1919
- color: var(--muted-foreground);
1920
- cursor: pointer;
1921
- font: inherit;
1922
- text-decoration: underline dotted;
1923
- background: none;
1924
- border: 0;
1925
- padding: 0;
1786
+ .gui-settings-list {
1787
+ display: flex;
1788
+ flex-direction: column;
1926
1789
  }
1927
1790
 
1928
- .bv-object-rider {
1791
+ .gui-setting {
1792
+ display: flex;
1929
1793
  border-top: 1px solid var(--border);
1794
+ align-items: center;
1795
+ gap: 24px;
1796
+ padding: 14px 0;
1930
1797
  }
1931
1798
 
1932
- .bv-object-rider h4 {
1933
- display: flex;
1934
- color: var(--muted-foreground);
1935
- gap: 8px;
1936
- margin: 0;
1937
- padding: 4px 10px 0;
1938
- font-size: 11px;
1939
- font-weight: 600;
1940
- line-height: 16px;
1799
+ .gui-setting-text {
1800
+ flex: 1;
1801
+ min-width: 0;
1941
1802
  }
1942
1803
 
1943
- .bv-object-actions {
1944
- display: flex;
1945
- border-top: 1px solid var(--border);
1946
- background: var(--chrome);
1947
- flex-wrap: wrap;
1948
- gap: 4px;
1949
- padding: 6px 10px;
1804
+ .gui-setting-title {
1805
+ font-weight: 500;
1950
1806
  }
1951
1807
 
1952
- .bv-object-actions .bv-button {
1953
- height: 20px;
1954
- padding: 0 8px;
1955
- font-size: 11px;
1808
+ .gui-setting-summary {
1809
+ color: var(--muted-foreground);
1810
+ font-size: 12px;
1956
1811
  }
1957
1812
 
1958
- .bv-object-needs {
1959
- border: 1px dashed var(--border);
1960
- border-radius: var(--radius);
1813
+ .gui-setting-note {
1814
+ display: block;
1961
1815
  color: var(--muted-foreground);
1962
- height: 20px;
1963
- padding: 0 6px;
1964
- font-size: 11px;
1965
- line-height: 20px;
1816
+ margin-top: 2px;
1817
+ font-style: italic;
1966
1818
  }
1967
1819
 
1968
- .bv-object-actions .is-open {
1969
- border-color: var(--primary);
1820
+ .gui-setting-note.is-error {
1821
+ color: var(--destructive);
1822
+ font-style: normal;
1970
1823
  }
1971
1824
 
1972
- .bv-object-form {
1825
+ .gui-setting-control {
1973
1826
  display: flex;
1974
- border-top: 1px solid var(--border);
1975
- background: var(--background);
1976
- flex-direction: column;
1827
+ flex-shrink: 0;
1828
+ align-items: center;
1977
1829
  gap: 6px;
1978
- padding: 8px 10px;
1979
1830
  }
1980
1831
 
1981
- .bv-object-form-head {
1982
- display: flex;
1983
- align-items: baseline;
1984
- gap: 8px;
1985
- font-size: 12px;
1832
+ .gui-setting-control .is-hidden {
1833
+ visibility: hidden;
1986
1834
  }
1987
1835
 
1988
- .bv-object-field {
1989
- display: grid;
1990
- grid-template-columns: 90px 1fr;
1836
+ .gui-settings-foot {
1837
+ display: flex;
1838
+ border-top: 1px solid var(--border);
1839
+ flex-wrap: wrap;
1991
1840
  align-items: center;
1992
1841
  gap: 8px;
1842
+ margin: 0;
1843
+ padding-top: 14px;
1993
1844
  font-size: 12px;
1994
1845
  }
1995
1846
 
1996
- .bv-object-field .bv-input, .bv-object-field select, .bv-object-field textarea {
1997
- font: inherit;
1998
- color: inherit;
1999
- background: var(--surface);
2000
- border: 1px solid var(--input);
2001
- border-radius: var(--radius);
2002
- width: 100%;
2003
- min-width: 0;
2004
- padding: 2px 6px;
1847
+ .gui-facts {
1848
+ margin-bottom: 20px;
2005
1849
  }
2006
1850
 
2007
- .bv-object-loose h4 {
2008
- display: flex;
2009
- gap: 8px;
2010
- margin: 0 0 6px;
2011
- font-size: 12px;
1851
+ .gui-facts h2 {
1852
+ letter-spacing: .1em;
1853
+ text-transform: uppercase;
1854
+ color: var(--muted-foreground);
1855
+ margin: 0 0 4px;
1856
+ font-size: 10px;
1857
+ font-weight: 600;
1858
+ line-height: 16px;
2012
1859
  }
2013
1860
 
2014
- .bv-proofs {
1861
+ .gui-facts dl {
1862
+ border-top: 1px solid var(--border);
1863
+ margin: 0;
1864
+ }
1865
+
1866
+ .gui-fact {
2015
1867
  display: grid;
2016
- grid-template-columns: 260px minmax(0, 1fr);
2017
- height: 100%;
2018
- min-height: 0;
1868
+ grid-template-columns: 140px minmax(0, 1fr);
1869
+ border-bottom: 1px solid var(--border);
1870
+ align-items: center;
1871
+ gap: 16px;
1872
+ min-height: 32px;
2019
1873
  }
2020
1874
 
2021
- .bv-rail {
2022
- display: flex;
2023
- overflow: auto;
2024
- scrollbar-gutter: stable;
2025
- border-right: 1px solid var(--border);
2026
- flex-direction: column;
2027
- min-width: 0;
2028
- min-height: 0;
1875
+ .gui-fact dt {
1876
+ color: var(--muted-foreground);
2029
1877
  }
2030
1878
 
2031
- .bv-rail-strip {
2032
- position: sticky;
2033
- z-index: 1;
1879
+ .gui-fact dd {
2034
1880
  display: flex;
2035
- background: var(--chrome);
2036
- border-bottom: 1px solid var(--border);
2037
- flex-shrink: 0;
2038
1881
  align-items: center;
2039
1882
  gap: 8px;
2040
- height: 28px;
2041
- padding: 0 8px;
2042
- top: 0;
1883
+ min-width: 0;
1884
+ margin: 0;
2043
1885
  }
2044
1886
 
2045
- .bv-rail-count {
1887
+ .gui-fact dd.is-mono .gui-fact-value {
1888
+ font-family: var(--font-mono);
1889
+ white-space: normal;
1890
+ overflow-wrap: anywhere;
1891
+ padding: 6px 0;
1892
+ font-size: 12px;
1893
+ }
1894
+
1895
+ .gui-fact-value {
2046
1896
  overflow: hidden;
2047
1897
  text-overflow: ellipsis;
2048
- color: var(--muted-foreground);
2049
- font-variant-numeric: tabular-nums;
2050
1898
  white-space: nowrap;
1899
+ flex: 1;
2051
1900
  min-width: 0;
2052
- margin-left: auto;
2053
- font-size: 11px;
2054
1901
  }
2055
1902
 
2056
- .bv-rail-strip .bv-button {
2057
- flex-shrink: 0;
2058
- height: 20px;
1903
+ .gui-fact-tag {
1904
+ background: color-mix(in oklch, var(--foreground) 6%, transparent);
1905
+ color: var(--muted-foreground);
1906
+ border-radius: 999px;
1907
+ margin-left: 8px;
2059
1908
  padding: 0 6px;
2060
1909
  font-size: 11px;
2061
1910
  }
2062
1911
 
2063
- .bv-lenses {
2064
- display: inline-flex;
2065
- gap: 2px;
1912
+ .gui-fact-tag.is-warn {
1913
+ color: var(--destructive);
2066
1914
  }
2067
1915
 
2068
- .bv-lens {
2069
- border-radius: var(--radius);
1916
+ .gui-fact-error {
1917
+ color: var(--destructive);
1918
+ white-space: normal;
1919
+ }
1920
+
1921
+ .gui-fact-copy {
2070
1922
  color: var(--muted-foreground);
2071
1923
  font: inherit;
2072
1924
  cursor: pointer;
1925
+ opacity: 0;
2073
1926
  background: none;
2074
1927
  border: 0;
2075
- height: 20px;
1928
+ border-radius: 999px;
1929
+ flex-shrink: 0;
1930
+ height: 22px;
2076
1931
  padding: 0 8px;
2077
- font-size: 12px;
1932
+ font-size: 11px;
2078
1933
  }
2079
1934
 
2080
- .bv-lens:hover {
2081
- color: var(--foreground);
1935
+ .gui-fact:hover .gui-fact-copy {
1936
+ opacity: 1;
2082
1937
  }
2083
1938
 
2084
- .bv-lens.is-open {
2085
- background: var(--accent);
1939
+ .gui-fact-copy:focus-visible {
1940
+ opacity: 1;
1941
+ }
1942
+
1943
+ .gui-fact-copy:hover {
2086
1944
  color: var(--foreground);
1945
+ background: color-mix(in oklch, var(--foreground) 6%, transparent);
2087
1946
  }
2088
1947
 
2089
- .bv-stage-card, .bv-object-col {
2090
- display: flex;
2091
- border: 0;
2092
- border-bottom: 1px solid var(--border);
2093
- color: inherit;
2094
- cursor: pointer;
1948
+ @media (max-width: 640px) {
1949
+ .gui-fact {
1950
+ grid-template-columns: 1fr;
1951
+ gap: 0;
1952
+ padding: 6px 0;
1953
+ }
1954
+ }
1955
+
1956
+ .gui-key {
1957
+ background: color-mix(in oklch, var(--foreground) 6%, transparent);
1958
+ color: var(--foreground);
2095
1959
  font: inherit;
2096
- text-align: left;
2097
- background: none;
2098
- border-radius: 0;
2099
- flex-shrink: 0;
2100
- align-items: center;
2101
- gap: 8px;
2102
- width: 100%;
2103
- min-width: 0;
1960
+ font-variant-numeric: tabular-nums;
1961
+ cursor: pointer;
1962
+ border: 1px solid #0000;
1963
+ border-radius: 999px;
1964
+ min-width: 88px;
2104
1965
  height: 28px;
2105
1966
  padding: 0 12px;
2106
1967
  }
2107
1968
 
2108
- .bv-stage-card:hover, .bv-object-col:hover {
2109
- background: var(--accent);
1969
+ .gui-key:hover {
1970
+ background: color-mix(in oklch, var(--foreground) 11%, transparent);
2110
1971
  }
2111
1972
 
2112
- .bv-stage-card.is-open, .bv-object-col.is-open {
2113
- background: color-mix(in oklch, var(--primary) 8%, transparent);
2114
- box-shadow: inset 2px 0 0 var(--primary);
1973
+ .gui-key-none {
1974
+ color: var(--muted-foreground);
2115
1975
  }
2116
1976
 
2117
- .bv-stage-text, .bv-object-head {
2118
- display: flex;
2119
- flex: 1;
2120
- align-items: baseline;
2121
- gap: 8px;
2122
- min-width: 0;
1977
+ .gui-key.is-recording {
1978
+ border-color: var(--primary);
1979
+ color: var(--primary);
2123
1980
  }
2124
1981
 
2125
- .bv-stage-text b, .bv-object-head b {
2126
- white-space: nowrap;
2127
- font-weight: 500;
1982
+ .gui-key:focus-visible {
1983
+ outline: 2px solid var(--primary);
1984
+ outline-offset: 1px;
2128
1985
  }
2129
1986
 
2130
- .bv-stage-text .bv-muted, .bv-object-head .bv-muted {
2131
- overflow: hidden;
2132
- text-overflow: ellipsis;
2133
- white-space: nowrap;
2134
- font-size: 11px;
2135
- }
1987
+ @media (max-width: 640px) {
1988
+ .gui-settings {
1989
+ flex-direction: column;
1990
+ height: auto;
1991
+ }
2136
1992
 
2137
- .bv-object-count {
2138
- color: var(--muted-foreground);
2139
- font-variant-numeric: tabular-nums;
2140
- font-size: 11px;
1993
+ .gui-settings-page {
1994
+ overflow: visible;
1995
+ }
1996
+
1997
+ .gui-settings-nav {
1998
+ border-right: 0;
1999
+ border-bottom: 1px solid var(--border);
2000
+ overflow-x: auto;
2001
+ flex-direction: row;
2002
+ width: auto;
2003
+ padding: 8px;
2004
+ }
2005
+
2006
+ .gui-settings-level {
2007
+ display: none;
2008
+ }
2009
+
2010
+ .gui-settings-page {
2011
+ padding: 16px;
2012
+ }
2013
+
2014
+ .gui-setting {
2015
+ flex-wrap: wrap;
2016
+ gap: 8px;
2017
+ }
2141
2018
  }
2142
2019
 
2143
- .bv-proof-dot {
2144
- border-radius: 50%;
2145
- flex: none;
2146
- width: 8px;
2147
- height: 8px;
2148
- margin: 0;
2020
+ .gui-stale {
2021
+ position: fixed;
2022
+ z-index: 900;
2023
+ display: flex;
2024
+ border: 1px solid var(--border);
2025
+ background: var(--card);
2026
+ color: var(--foreground);
2027
+ border-radius: 8px;
2028
+ align-items: center;
2029
+ gap: 12px;
2030
+ max-width: min(640px, 100vw - 60px);
2031
+ padding: 8px 12px;
2032
+ font-size: 13px;
2033
+ bottom: 10px;
2034
+ left: 10px;
2035
+ box-shadow: 0 8px 24px #00000040;
2036
+ box-shadow: 0 8px 24px color(display-p3 0 0 0 / .25);
2037
+ box-shadow: 0 8px 24px lab(0% 0 0 / .25);
2149
2038
  }
2150
2039
 
2151
- .bv-pane {
2040
+ .bv-row {
2152
2041
  display: flex;
2153
- overflow: auto;
2154
- scrollbar-gutter: stable;
2155
- flex-direction: column;
2156
- min-width: 0;
2157
- min-height: 0;
2042
+ align-items: center;
2043
+ gap: 8px;
2044
+ margin: 8px 0;
2158
2045
  }
2159
2046
 
2160
- .bv-pane-body {
2161
- margin: 0;
2162
- padding: 12px;
2047
+ .bv-between {
2048
+ justify-content: space-between;
2163
2049
  }
2164
2050
 
2165
- .bv-film-head {
2051
+ .bv-object-card {
2166
2052
  display: flex;
2167
- background: var(--chrome);
2168
- border-bottom: 1px solid var(--border);
2169
- flex-shrink: 0;
2170
- align-items: flex-start;
2171
- gap: 12px;
2172
- margin: 0;
2173
- padding: 4px 12px;
2053
+ border: 1px solid var(--border);
2054
+ border-radius: var(--radius);
2055
+ background: var(--surface);
2056
+ overflow: hidden;
2057
+ flex-direction: column;
2058
+ font-size: 12px;
2059
+ line-height: 16px;
2174
2060
  }
2175
2061
 
2176
- .bv-film-head > div {
2062
+ .bv-object-card-head {
2063
+ display: flex;
2064
+ background: var(--chrome);
2065
+ border-bottom: 1px solid var(--border);
2066
+ align-items: baseline;
2067
+ gap: 8px;
2177
2068
  min-width: 0;
2178
- }
2179
-
2180
- .bv-film-head h2, .bv-film-head h3 {
2181
- margin: 0;
2069
+ height: 28px;
2070
+ padding: 4px 10px;
2182
2071
  font-size: 13px;
2183
- font-weight: 600;
2184
2072
  line-height: 20px;
2185
2073
  }
2186
2074
 
2187
- .bv-film-intent {
2188
- color: var(--muted-foreground);
2189
- max-width: 90ch;
2190
- margin: 0;
2191
- font-size: 11px;
2192
- line-height: 16px;
2193
- }
2194
-
2195
- .bv-verdict {
2196
- border-radius: var(--radius);
2075
+ .bv-object-key {
2197
2076
  overflow: hidden;
2198
2077
  text-overflow: ellipsis;
2199
2078
  white-space: nowrap;
2200
- flex: none;
2201
- max-width: 40%;
2202
- height: 20px;
2079
+ color: var(--primary);
2080
+ font-variant-numeric: tabular-nums;
2081
+ min-width: 0;
2082
+ }
2083
+
2084
+ .bv-object-card-head .bv-muted {
2203
2085
  margin-left: auto;
2204
- padding: 0 6px;
2205
2086
  font-size: 11px;
2206
- font-weight: 500;
2207
- line-height: 20px;
2208
2087
  }
2209
2088
 
2210
- .bv-proof-chips {
2211
- display: flex;
2212
- border-bottom: 1px solid var(--border);
2213
- flex-wrap: wrap;
2214
- flex-shrink: 0;
2215
- gap: 4px;
2089
+ .bv-object-fields {
2090
+ display: grid;
2091
+ grid-template-columns: minmax(72px, auto) 1fr;
2092
+ gap: 2px 10px;
2216
2093
  margin: 0;
2217
- padding: 4px 12px;
2094
+ padding: 6px 10px;
2218
2095
  }
2219
2096
 
2220
- .bv-proof-chip {
2221
- display: inline-flex;
2222
- border-radius: var(--radius);
2097
+ .bv-object-fields > div {
2098
+ display: contents;
2099
+ }
2100
+
2101
+ .bv-object-fields dt {
2223
2102
  color: var(--muted-foreground);
2224
- font: inherit;
2225
- cursor: pointer;
2226
2103
  overflow: hidden;
2227
2104
  text-overflow: ellipsis;
2228
2105
  white-space: nowrap;
2229
- background: none;
2230
- border: 1px solid #0000;
2231
- align-items: center;
2232
- gap: 6px;
2233
- max-width: 360px;
2234
- height: 22px;
2235
- padding: 0 8px;
2236
- font-size: 12px;
2237
2106
  }
2238
2107
 
2239
- .bv-chip-text {
2108
+ .bv-object-fields dd {
2240
2109
  overflow: hidden;
2241
2110
  text-overflow: ellipsis;
2242
2111
  white-space: nowrap;
2243
2112
  min-width: 0;
2113
+ margin: 0;
2244
2114
  }
2245
2115
 
2246
- .bv-proof-chip:hover {
2247
- background: var(--accent);
2248
- color: var(--foreground);
2116
+ .bv-object-fields code {
2117
+ font-size: 11px;
2249
2118
  }
2250
2119
 
2251
- .bv-proof-chip.is-open {
2252
- background: color-mix(in oklch, var(--primary) 10%, transparent);
2253
- border-color: color-mix(in oklch, var(--primary) 40%, transparent);
2254
- color: var(--foreground);
2120
+ .bv-object-num {
2121
+ font-variant-numeric: tabular-nums;
2255
2122
  }
2256
2123
 
2257
- .bv-object-sheet {
2258
- display: grid;
2259
- grid-template-columns: 72px minmax(0, 1fr);
2260
- border-bottom: 1px solid var(--border);
2261
- gap: 0 12px;
2262
- margin: 0;
2263
- padding: 4px 12px;
2124
+ .bv-object-tag {
2125
+ background: var(--muted);
2126
+ color: var(--muted-foreground);
2127
+ border-radius: 3px;
2128
+ padding: 0 5px;
2264
2129
  font-size: 11px;
2265
- line-height: 16px;
2266
2130
  }
2267
2131
 
2268
- .bv-object-sheet dt {
2132
+ .bv-object-ref {
2133
+ color: var(--primary);
2134
+ cursor: pointer;
2135
+ font: inherit;
2136
+ background: none;
2137
+ border: 0;
2138
+ border-radius: 3px;
2139
+ padding: 0 4px;
2140
+ }
2141
+
2142
+ .bv-object-ref:hover {
2143
+ background: color-mix(in oklch, var(--primary) 12%, transparent);
2144
+ }
2145
+
2146
+ .bv-object-more {
2269
2147
  color: var(--muted-foreground);
2270
- opacity: .8;
2148
+ cursor: pointer;
2149
+ font: inherit;
2150
+ text-decoration: underline dotted;
2151
+ background: none;
2152
+ border: 0;
2153
+ padding: 0;
2271
2154
  }
2272
2155
 
2273
- .bv-object-sheet dd {
2274
- color: var(--foreground);
2275
- overflow: hidden;
2276
- text-overflow: ellipsis;
2277
- white-space: nowrap;
2278
- min-width: 0;
2279
- margin: 0;
2156
+ .bv-object-rider {
2157
+ border-top: 1px solid var(--border);
2280
2158
  }
2281
2159
 
2282
- .bv-object-sheet code {
2160
+ .bv-object-rider h4 {
2161
+ display: flex;
2162
+ color: var(--muted-foreground);
2163
+ gap: 8px;
2164
+ margin: 0;
2165
+ padding: 4px 10px 0;
2283
2166
  font-size: 11px;
2167
+ font-weight: 600;
2168
+ line-height: 16px;
2284
2169
  }
2285
2170
 
2286
- .bv-object-map {
2171
+ .bv-object-actions {
2287
2172
  display: flex;
2288
- flex-direction: column;
2173
+ border-top: 1px solid var(--border);
2174
+ background: var(--chrome);
2175
+ flex-wrap: wrap;
2176
+ gap: 4px;
2177
+ padding: 6px 10px;
2289
2178
  }
2290
2179
 
2291
- .bv-object-cards {
2292
- display: grid;
2293
- grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
2294
- gap: 8px;
2180
+ .bv-object-actions .bv-button {
2181
+ height: 20px;
2182
+ padding: 0 8px;
2183
+ font-size: 11px;
2295
2184
  }
2296
2185
 
2297
- .bv-object-loose {
2298
- margin-top: 16px;
2186
+ .bv-object-needs {
2187
+ border: 1px dashed var(--border);
2188
+ border-radius: var(--radius);
2189
+ color: var(--muted-foreground);
2190
+ height: 20px;
2191
+ padding: 0 6px;
2192
+ font-size: 11px;
2193
+ line-height: 20px;
2299
2194
  }
2300
2195
 
2301
- .bv-film > .bv-film-head {
2302
- border-top: 1px solid var(--border);
2196
+ .bv-object-actions .is-open {
2197
+ border-color: var(--primary);
2303
2198
  }
2304
2199
 
2305
- .bv-film {
2306
- --detail-row: 21px;
2200
+ .bv-object-form {
2307
2201
  display: flex;
2202
+ border-top: 1px solid var(--border);
2203
+ background: var(--background);
2308
2204
  flex-direction: column;
2205
+ gap: 6px;
2206
+ padding: 8px 10px;
2309
2207
  }
2310
2208
 
2311
- .bv-film-intent {
2312
- display: -webkit-box;
2313
- -webkit-line-clamp: 2;
2314
- overflow: hidden;
2315
- -webkit-box-orient: vertical;
2316
- min-height: 16px;
2209
+ .bv-object-form-head {
2210
+ display: flex;
2211
+ align-items: baseline;
2212
+ gap: 8px;
2213
+ font-size: 12px;
2317
2214
  }
2318
2215
 
2319
- .bv-verdict {
2320
- text-align: center;
2321
- min-width: 56px;
2216
+ .bv-object-field {
2217
+ display: grid;
2218
+ grid-template-columns: 90px 1fr;
2219
+ align-items: center;
2220
+ gap: 8px;
2221
+ font-size: 12px;
2322
2222
  }
2323
2223
 
2324
- .bv-film-transport {
2325
- position: sticky;
2326
- z-index: 2;
2327
- background: var(--background);
2328
- border-bottom: 1px solid var(--border);
2329
- flex-shrink: 0;
2330
- top: 0;
2224
+ .bv-object-field .bv-input, .bv-object-field select, .bv-object-field textarea {
2225
+ font: inherit;
2226
+ color: inherit;
2227
+ background: var(--surface);
2228
+ border: 1px solid var(--input);
2229
+ border-radius: var(--radius);
2230
+ width: 100%;
2231
+ min-width: 0;
2232
+ padding: 2px 6px;
2331
2233
  }
2332
2234
 
2333
- .bv-film-controls {
2235
+ .bv-object-loose h4 {
2334
2236
  display: flex;
2335
- flex-wrap: nowrap;
2336
- align-items: center;
2337
- gap: 6px;
2338
- height: 28px;
2339
- padding: 0 12px;
2340
- }
2341
-
2342
- .bv-film-controls .bv-button {
2343
- flex-shrink: 0;
2344
- height: 20px;
2345
- padding: 0 8px;
2346
- font-size: 11px;
2237
+ gap: 8px;
2238
+ margin: 0 0 6px;
2239
+ font-size: 12px;
2347
2240
  }
2348
2241
 
2349
- .bv-film-controls .bv-film-play {
2350
- justify-content: center;
2351
- min-width: 56px;
2242
+ .bv-proofs {
2243
+ display: grid;
2244
+ grid-template-columns: 260px minmax(0, 1fr);
2245
+ height: 100%;
2246
+ min-height: 0;
2352
2247
  }
2353
2248
 
2354
- .bv-film-controls .is-hidden {
2355
- visibility: hidden;
2249
+ .bv-rail {
2250
+ display: flex;
2251
+ overflow: auto;
2252
+ scrollbar-gutter: stable;
2253
+ border-right: 1px solid var(--border);
2254
+ flex-direction: column;
2255
+ min-width: 0;
2256
+ min-height: 0;
2356
2257
  }
2357
2258
 
2358
- .bv-film-controls input[type="range"] {
2359
- accent-color: var(--primary);
2360
- flex: 1;
2361
- min-width: 80px;
2259
+ .bv-rail-strip {
2260
+ position: sticky;
2261
+ z-index: 1;
2262
+ display: flex;
2263
+ background: var(--chrome);
2264
+ border-bottom: 1px solid var(--border);
2265
+ flex-shrink: 0;
2266
+ align-items: center;
2267
+ gap: 8px;
2268
+ height: 28px;
2269
+ padding: 0 8px;
2270
+ top: 0;
2362
2271
  }
2363
2272
 
2364
- .bv-film-time {
2273
+ .bv-rail-count {
2274
+ overflow: hidden;
2275
+ text-overflow: ellipsis;
2276
+ color: var(--muted-foreground);
2365
2277
  font-variant-numeric: tabular-nums;
2366
2278
  white-space: nowrap;
2367
- text-align: right;
2279
+ min-width: 0;
2280
+ margin-left: auto;
2281
+ font-size: 11px;
2282
+ }
2283
+
2284
+ .bv-rail-strip .bv-button {
2368
2285
  flex-shrink: 0;
2369
- min-width: 116px;
2286
+ height: 20px;
2287
+ padding: 0 6px;
2370
2288
  font-size: 11px;
2371
2289
  }
2372
2290
 
2373
- .bv-film-strip {
2374
- display: flex;
2375
- overflow-x: auto;
2376
- overflow-y: hidden;
2377
- scrollbar-width: none;
2378
- flex-wrap: nowrap;
2379
- align-items: center;
2291
+ .bv-lenses {
2292
+ display: inline-flex;
2380
2293
  gap: 2px;
2381
- height: 26px;
2382
- padding: 0 12px;
2383
2294
  }
2384
2295
 
2385
- .bv-film-frame {
2296
+ .bv-lens {
2297
+ border-radius: var(--radius);
2298
+ color: var(--muted-foreground);
2299
+ font: inherit;
2386
2300
  cursor: pointer;
2387
- background: var(--muted);
2388
- opacity: .7;
2301
+ background: none;
2389
2302
  border: 0;
2390
- border-radius: 2px;
2391
- flex: none;
2392
- width: 10px;
2393
- height: 16px;
2394
- padding: 0;
2303
+ height: 20px;
2304
+ padding: 0 8px;
2305
+ font-size: 12px;
2395
2306
  }
2396
2307
 
2397
- .bv-film-body {
2398
- display: grid;
2399
- grid-template-columns: minmax(0, 1fr) 300px;
2400
- align-items: start;
2308
+ .bv-lens:hover {
2309
+ color: var(--foreground);
2401
2310
  }
2402
2311
 
2403
- .bv-film-stage {
2404
- position: relative;
2405
- overflow-x: auto;
2406
- overflow-y: hidden;
2407
- min-width: 0;
2408
- margin: 0;
2409
- padding: 0;
2312
+ .bv-lens.is-open {
2313
+ background: var(--accent);
2314
+ color: var(--foreground);
2410
2315
  }
2411
2316
 
2412
- .bv-film-frame-box {
2413
- padding: 12px;
2317
+ .bv-stage-card, .bv-object-col {
2318
+ display: flex;
2319
+ border: 0;
2320
+ border-bottom: 1px solid var(--border);
2321
+ color: inherit;
2322
+ cursor: pointer;
2323
+ font: inherit;
2324
+ text-align: left;
2325
+ background: none;
2326
+ border-radius: 0;
2327
+ flex-shrink: 0;
2328
+ align-items: center;
2329
+ gap: 8px;
2330
+ width: 100%;
2331
+ min-width: 0;
2332
+ height: 28px;
2333
+ padding: 0 12px;
2414
2334
  }
2415
2335
 
2416
- .bv-film-probe {
2417
- position: absolute;
2418
- visibility: hidden;
2419
- pointer-events: none;
2420
- top: 0;
2421
- left: 0;
2422
- right: 0;
2336
+ .bv-stage-card:hover, .bv-object-col:hover {
2337
+ background: var(--accent);
2423
2338
  }
2424
2339
 
2425
- .bv-film-probe > div {
2426
- position: absolute;
2427
- top: 0;
2428
- left: 0;
2429
- right: 0;
2340
+ .bv-stage-card.is-open, .bv-object-col.is-open {
2341
+ background: color-mix(in oklch, var(--primary) 8%, transparent);
2342
+ box-shadow: inset 2px 0 0 var(--primary);
2430
2343
  }
2431
2344
 
2432
- .bv-film-detail {
2345
+ .bv-stage-text, .bv-object-head {
2433
2346
  display: flex;
2434
- border-left: 1px solid var(--border);
2435
- flex-direction: column;
2347
+ flex: 1;
2348
+ align-items: baseline;
2436
2349
  gap: 8px;
2437
- min-height: 100%;
2438
- margin: 0;
2439
- padding: 8px 12px;
2350
+ min-width: 0;
2440
2351
  }
2441
2352
 
2442
- .bv-film-steps, .bv-film-checks {
2443
- list-style: none;
2444
- margin: 0;
2445
- padding: 0;
2446
- font-size: 12px;
2447
- line-height: 16px;
2353
+ .bv-stage-text b, .bv-object-head b {
2354
+ white-space: nowrap;
2355
+ font-weight: 500;
2448
2356
  }
2449
2357
 
2450
- .bv-film-steps li, .bv-film-checks li {
2451
- border-top: 1px solid var(--border);
2358
+ .bv-stage-text .bv-muted, .bv-object-head .bv-muted {
2452
2359
  overflow: hidden;
2453
2360
  text-overflow: ellipsis;
2454
2361
  white-space: nowrap;
2455
- padding: 2px 0;
2362
+ font-size: 11px;
2456
2363
  }
2457
2364
 
2458
- .bv-film-steps li:first-child, .bv-film-checks li:first-child {
2459
- border-top: 0;
2365
+ .bv-object-count {
2366
+ color: var(--muted-foreground);
2367
+ font-variant-numeric: tabular-nums;
2368
+ font-size: 11px;
2460
2369
  }
2461
2370
 
2462
- @media (max-width: 900px) {
2463
- .bv-film-body {
2464
- grid-template-columns: minmax(0, 1fr);
2465
- }
2466
-
2467
- .bv-film-detail {
2468
- border-left: 0;
2469
- border-top: 1px solid var(--border);
2470
- }
2371
+ .bv-proof-dot {
2372
+ border-radius: 50%;
2373
+ flex: none;
2374
+ width: 8px;
2375
+ height: 8px;
2376
+ margin: 0;
2471
2377
  }
2472
2378
 
2473
- .bv-proof-dot.is-passed {
2474
- background: var(--success);
2379
+ .bv-pane {
2380
+ display: flex;
2381
+ overflow: auto;
2382
+ scrollbar-gutter: stable;
2383
+ flex-direction: column;
2384
+ min-width: 0;
2385
+ min-height: 0;
2475
2386
  }
2476
2387
 
2477
- .bv-proof-dot.is-failed {
2478
- background: var(--destructive);
2479
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--destructive) 25%, transparent);
2388
+ .bv-pane-body {
2389
+ margin: 0;
2390
+ padding: 12px;
2480
2391
  }
2481
2392
 
2482
- .bv-proof-dot.is-unproven {
2483
- background: var(--warning);
2393
+ .bv-film-head {
2394
+ display: flex;
2395
+ background: var(--chrome);
2396
+ border-bottom: 1px solid var(--border);
2397
+ flex-shrink: 0;
2398
+ align-items: flex-start;
2399
+ gap: 12px;
2400
+ margin: 0;
2401
+ padding: 4px 12px;
2484
2402
  }
2485
2403
 
2486
- .bv-proof-dot.is-undrawn {
2487
- border: 1.5px dashed var(--muted-foreground);
2488
- background: none;
2404
+ .bv-film-head > div {
2405
+ min-width: 0;
2489
2406
  }
2490
2407
 
2491
- .bv-proof-dot.is-sketch {
2492
- border: 1.5px solid var(--muted-foreground);
2493
- background: none;
2408
+ .bv-film-head h2, .bv-film-head h3 {
2409
+ margin: 0;
2410
+ font-size: 13px;
2411
+ font-weight: 600;
2412
+ line-height: 20px;
2494
2413
  }
2495
2414
 
2496
- .bv-proofs-output {
2497
- white-space: pre-wrap;
2498
- background: var(--muted);
2415
+ .bv-film-intent {
2499
2416
  color: var(--muted-foreground);
2500
- border-radius: 8px;
2501
- margin: 8px 0 0;
2502
- padding: 8px 10px;
2417
+ max-width: 90ch;
2418
+ margin: 0;
2503
2419
  font-size: 11px;
2504
- line-height: 1.4;
2420
+ line-height: 16px;
2505
2421
  }
2506
2422
 
2507
- .bv-proofs-output.is-bad {
2508
- color: var(--destructive);
2423
+ .bv-verdict {
2424
+ border-radius: var(--radius);
2425
+ overflow: hidden;
2426
+ text-overflow: ellipsis;
2427
+ white-space: nowrap;
2428
+ flex: none;
2429
+ max-width: 40%;
2430
+ height: 20px;
2431
+ margin-left: auto;
2432
+ padding: 0 6px;
2433
+ font-size: 11px;
2434
+ font-weight: 500;
2435
+ line-height: 20px;
2509
2436
  }
2510
2437
 
2511
- .bv-verdict.is-passed {
2512
- background: color-mix(in oklch, var(--success) 18%, transparent);
2513
- color: var(--success);
2438
+ .bv-proof-chips {
2439
+ display: flex;
2440
+ border-bottom: 1px solid var(--border);
2441
+ flex-wrap: wrap;
2442
+ flex-shrink: 0;
2443
+ gap: 4px;
2444
+ margin: 0;
2445
+ padding: 4px 12px;
2514
2446
  }
2515
2447
 
2516
- .bv-verdict.is-failed {
2517
- background: color-mix(in oklch, var(--destructive) 18%, transparent);
2518
- color: var(--destructive);
2448
+ .bv-proof-chip {
2449
+ display: inline-flex;
2450
+ border-radius: var(--radius);
2451
+ color: var(--muted-foreground);
2452
+ font: inherit;
2453
+ cursor: pointer;
2454
+ overflow: hidden;
2455
+ text-overflow: ellipsis;
2456
+ white-space: nowrap;
2457
+ background: none;
2458
+ border: 1px solid #0000;
2459
+ align-items: center;
2460
+ gap: 6px;
2461
+ max-width: 360px;
2462
+ height: 22px;
2463
+ padding: 0 8px;
2464
+ font-size: 12px;
2519
2465
  }
2520
2466
 
2521
- .bv-verdict.is-sketch {
2522
- background: var(--muted);
2523
- color: var(--muted-foreground);
2467
+ .bv-chip-text {
2468
+ overflow: hidden;
2469
+ text-overflow: ellipsis;
2470
+ white-space: nowrap;
2471
+ min-width: 0;
2524
2472
  }
2525
2473
 
2526
- .bv-verdict.is-live {
2527
- background: color-mix(in oklch, var(--primary) 18%, transparent);
2528
- color: var(--primary);
2474
+ .bv-proof-chip:hover {
2475
+ background: var(--accent);
2476
+ color: var(--foreground);
2529
2477
  }
2530
2478
 
2531
- .bv-film-frame.is-ok {
2532
- background: var(--success);
2479
+ .bv-proof-chip.is-open {
2480
+ background: color-mix(in oklch, var(--primary) 10%, transparent);
2481
+ border-color: color-mix(in oklch, var(--primary) 40%, transparent);
2482
+ color: var(--foreground);
2533
2483
  }
2534
2484
 
2535
- .bv-film-frame.is-bad {
2536
- background: var(--destructive);
2485
+ .bv-object-sheet {
2486
+ display: grid;
2487
+ grid-template-columns: 72px minmax(0, 1fr);
2488
+ border-bottom: 1px solid var(--border);
2489
+ gap: 0 12px;
2490
+ margin: 0;
2491
+ padding: 4px 12px;
2492
+ font-size: 11px;
2493
+ line-height: 16px;
2537
2494
  }
2538
2495
 
2539
- .bv-film-frame:hover {
2540
- opacity: 1;
2496
+ .bv-object-sheet dt {
2497
+ color: var(--muted-foreground);
2498
+ opacity: .8;
2541
2499
  }
2542
2500
 
2543
- .bv-film-frame.is-here {
2544
- opacity: 1;
2545
- outline: 2px solid var(--foreground);
2546
- outline-offset: 1px;
2501
+ .bv-object-sheet dd {
2502
+ color: var(--foreground);
2503
+ overflow: hidden;
2504
+ text-overflow: ellipsis;
2505
+ white-space: nowrap;
2506
+ min-width: 0;
2507
+ margin: 0;
2547
2508
  }
2548
2509
 
2549
- .bv-film-kind {
2550
- display: inline-block;
2551
- background: var(--muted);
2552
- color: var(--muted-foreground);
2553
- border-radius: 3px;
2554
- min-width: 40px;
2555
- margin-right: 4px;
2556
- padding: 0 5px;
2510
+ .bv-object-sheet code {
2557
2511
  font-size: 11px;
2558
- line-height: 16px;
2559
2512
  }
2560
2513
 
2561
- .bv-film-mark {
2562
- display: inline-block;
2563
- width: 16px;
2564
- font-weight: 700;
2514
+ .bv-object-map {
2515
+ display: flex;
2516
+ flex-direction: column;
2565
2517
  }
2566
2518
 
2567
- .bv-film-checks .is-ok .bv-film-mark {
2568
- color: var(--success);
2519
+ .bv-object-cards {
2520
+ display: grid;
2521
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
2522
+ gap: 8px;
2569
2523
  }
2570
2524
 
2571
- .bv-film-checks .is-bad, .bv-film-error {
2572
- color: var(--destructive);
2525
+ .bv-object-loose {
2526
+ margin-top: 16px;
2573
2527
  }
2574
2528
 
2575
- .bv-sandbox-code {
2576
- white-space: pre;
2577
- overflow: auto;
2578
- background: var(--muted);
2579
- color: var(--foreground);
2580
- border-radius: 8px;
2581
- margin: 12px 0 0;
2582
- padding: 10px 12px;
2583
- font-size: 12px;
2584
- line-height: 1.45;
2529
+ .bv-film > .bv-film-head {
2530
+ border-top: 1px solid var(--border);
2585
2531
  }
2586
2532
 
2587
- .bv-state-list {
2533
+ .bv-film {
2534
+ --detail-row: 21px;
2588
2535
  display: flex;
2589
2536
  flex-direction: column;
2590
- gap: 4px;
2591
2537
  }
2592
2538
 
2593
- .bv-state-entity {
2594
- display: flex;
2595
- border: 1px solid var(--border);
2596
- background: var(--card);
2597
- border-radius: 8px;
2598
- flex-wrap: wrap;
2599
- align-items: baseline;
2600
- gap: 10px;
2601
- padding: 6px 10px;
2602
- font-size: 13px;
2539
+ .bv-film-intent {
2540
+ display: -webkit-box;
2541
+ -webkit-line-clamp: 2;
2542
+ overflow: hidden;
2543
+ -webkit-box-orient: vertical;
2544
+ min-height: 16px;
2603
2545
  }
2604
2546
 
2605
- .bv-state-part b {
2606
- margin-right: 4px;
2547
+ .bv-verdict {
2548
+ text-align: center;
2549
+ min-width: 56px;
2607
2550
  }
2608
2551
 
2609
- .bv-state-part code {
2610
- color: var(--muted-foreground);
2611
- font-size: 12px;
2552
+ .bv-film-transport {
2553
+ position: sticky;
2554
+ z-index: 2;
2555
+ background: var(--background);
2556
+ border-bottom: 1px solid var(--border);
2557
+ flex-shrink: 0;
2558
+ top: 0;
2612
2559
  }
2613
- }
2614
2560
 
2615
- .bv-maker {
2616
- padding: 12px 16px;
2617
- font-size: 13px;
2618
- line-height: 20px;
2619
- }
2620
-
2621
- .bv-maker-head {
2622
- display: flex;
2623
- align-items: baseline;
2624
- gap: 12px;
2625
- margin-bottom: 8px;
2626
- }
2561
+ .bv-film-controls {
2562
+ display: flex;
2563
+ flex-wrap: nowrap;
2564
+ align-items: center;
2565
+ gap: 6px;
2566
+ height: 28px;
2567
+ padding: 0 12px;
2568
+ }
2627
2569
 
2628
- .bv-maker-head h2 {
2629
- margin: 0;
2630
- font-size: 15px;
2631
- }
2570
+ .bv-film-controls .bv-button {
2571
+ flex-shrink: 0;
2572
+ height: 20px;
2573
+ padding: 0 8px;
2574
+ font-size: 11px;
2575
+ }
2632
2576
 
2633
- .bv-maker-list {
2634
- list-style: none;
2635
- margin: 0;
2636
- padding: 0;
2637
- }
2577
+ .bv-film-controls .bv-film-play {
2578
+ justify-content: center;
2579
+ min-width: 56px;
2580
+ }
2638
2581
 
2639
- .bv-maker-spec {
2640
- display: flex;
2641
- border-top: 1px solid var(--border);
2642
- justify-content: space-between;
2643
- align-items: baseline;
2644
- gap: 12px;
2645
- padding: 6px 0;
2646
- }
2582
+ .bv-film-controls .is-hidden {
2583
+ visibility: hidden;
2584
+ }
2647
2585
 
2648
- .bv-maker-open {
2649
- color: var(--foreground);
2650
- font: inherit;
2651
- text-align: left;
2652
- cursor: pointer;
2653
- background: none;
2654
- border: 0;
2655
- padding: 0;
2656
- }
2586
+ .bv-film-controls input[type="range"] {
2587
+ accent-color: var(--primary);
2588
+ flex: 1;
2589
+ min-width: 80px;
2590
+ }
2657
2591
 
2658
- .bv-maker-open:hover b {
2659
- text-decoration: underline;
2660
- }
2592
+ .bv-film-time {
2593
+ font-variant-numeric: tabular-nums;
2594
+ white-space: nowrap;
2595
+ text-align: right;
2596
+ flex-shrink: 0;
2597
+ min-width: 116px;
2598
+ font-size: 11px;
2599
+ }
2661
2600
 
2662
- .bv-maker-facts {
2663
- display: flex;
2664
- white-space: nowrap;
2665
- align-items: center;
2666
- gap: 10px;
2601
+ .bv-film-strip {
2602
+ display: flex;
2603
+ overflow-x: auto;
2604
+ overflow-y: hidden;
2605
+ scrollbar-width: none;
2606
+ flex-wrap: nowrap;
2607
+ align-items: center;
2608
+ gap: 2px;
2609
+ height: 26px;
2610
+ padding: 0 12px;
2611
+ }
2612
+
2613
+ .bv-film-frame {
2614
+ cursor: pointer;
2615
+ background: var(--muted);
2616
+ opacity: .7;
2617
+ border: 0;
2618
+ border-radius: 2px;
2619
+ flex: none;
2620
+ width: 10px;
2621
+ height: 16px;
2622
+ padding: 0;
2623
+ }
2624
+
2625
+ .bv-film-body {
2626
+ display: grid;
2627
+ grid-template-columns: minmax(0, 1fr) 300px;
2628
+ align-items: start;
2629
+ }
2630
+
2631
+ .bv-film-stage {
2632
+ position: relative;
2633
+ overflow-x: auto;
2634
+ overflow-y: hidden;
2635
+ min-width: 0;
2636
+ margin: 0;
2637
+ padding: 0;
2638
+ }
2639
+
2640
+ .bv-film-frame-box {
2641
+ padding: 12px;
2642
+ }
2643
+
2644
+ .bv-film-probe {
2645
+ position: absolute;
2646
+ visibility: hidden;
2647
+ pointer-events: none;
2648
+ top: 0;
2649
+ left: 0;
2650
+ right: 0;
2651
+ }
2652
+
2653
+ .bv-film-probe > div {
2654
+ position: absolute;
2655
+ top: 0;
2656
+ left: 0;
2657
+ right: 0;
2658
+ }
2659
+
2660
+ .bv-film-detail {
2661
+ display: flex;
2662
+ border-left: 1px solid var(--border);
2663
+ flex-direction: column;
2664
+ gap: 8px;
2665
+ min-height: 100%;
2666
+ margin: 0;
2667
+ padding: 8px 12px;
2668
+ }
2669
+
2670
+ .bv-film-steps, .bv-film-checks {
2671
+ list-style: none;
2672
+ margin: 0;
2673
+ padding: 0;
2674
+ font-size: 12px;
2675
+ line-height: 16px;
2676
+ }
2677
+
2678
+ .bv-film-steps li, .bv-film-checks li {
2679
+ border-top: 1px solid var(--border);
2680
+ overflow: hidden;
2681
+ text-overflow: ellipsis;
2682
+ white-space: nowrap;
2683
+ padding: 2px 0;
2684
+ }
2685
+
2686
+ .bv-film-steps li:first-child, .bv-film-checks li:first-child {
2687
+ border-top: 0;
2688
+ }
2689
+
2690
+ @media (max-width: 900px) {
2691
+ .bv-film-body {
2692
+ grid-template-columns: minmax(0, 1fr);
2693
+ }
2694
+
2695
+ .bv-film-detail {
2696
+ border-left: 0;
2697
+ border-top: 1px solid var(--border);
2698
+ }
2699
+ }
2700
+
2701
+ .bv-proof-dot.is-passed {
2702
+ background: var(--success);
2703
+ }
2704
+
2705
+ .bv-proof-dot.is-failed {
2706
+ background: var(--destructive);
2707
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--destructive) 25%, transparent);
2708
+ }
2709
+
2710
+ .bv-proof-dot.is-unproven {
2711
+ background: var(--warning);
2712
+ }
2713
+
2714
+ .bv-proof-dot.is-undrawn {
2715
+ border: 1.5px dashed var(--muted-foreground);
2716
+ background: none;
2717
+ }
2718
+
2719
+ .bv-proof-dot.is-sketch {
2720
+ border: 1.5px solid var(--muted-foreground);
2721
+ background: none;
2722
+ }
2723
+
2724
+ .bv-proofs-output {
2725
+ white-space: pre-wrap;
2726
+ background: var(--muted);
2727
+ color: var(--muted-foreground);
2728
+ border-radius: 8px;
2729
+ margin: 8px 0 0;
2730
+ padding: 8px 10px;
2731
+ font-size: 11px;
2732
+ line-height: 1.4;
2733
+ }
2734
+
2735
+ .bv-proofs-output.is-bad {
2736
+ color: var(--destructive);
2737
+ }
2738
+
2739
+ .bv-verdict.is-passed {
2740
+ background: color-mix(in oklch, var(--success) 18%, transparent);
2741
+ color: var(--success);
2742
+ }
2743
+
2744
+ .bv-verdict.is-failed {
2745
+ background: color-mix(in oklch, var(--destructive) 18%, transparent);
2746
+ color: var(--destructive);
2747
+ }
2748
+
2749
+ .bv-verdict.is-sketch {
2750
+ background: var(--muted);
2751
+ color: var(--muted-foreground);
2752
+ }
2753
+
2754
+ .bv-verdict.is-live {
2755
+ background: color-mix(in oklch, var(--primary) 18%, transparent);
2756
+ color: var(--primary);
2757
+ }
2758
+
2759
+ .bv-film-frame.is-ok {
2760
+ background: var(--success);
2761
+ }
2762
+
2763
+ .bv-film-frame.is-bad {
2764
+ background: var(--destructive);
2765
+ }
2766
+
2767
+ .bv-film-frame:hover {
2768
+ opacity: 1;
2769
+ }
2770
+
2771
+ .bv-film-frame.is-here {
2772
+ opacity: 1;
2773
+ outline: 2px solid var(--foreground);
2774
+ outline-offset: 1px;
2775
+ }
2776
+
2777
+ .bv-film-kind {
2778
+ display: inline-block;
2779
+ background: var(--muted);
2780
+ color: var(--muted-foreground);
2781
+ border-radius: 3px;
2782
+ min-width: 40px;
2783
+ margin-right: 4px;
2784
+ padding: 0 5px;
2785
+ font-size: 11px;
2786
+ line-height: 16px;
2787
+ }
2788
+
2789
+ .bv-film-mark {
2790
+ display: inline-block;
2791
+ width: 16px;
2792
+ font-weight: 700;
2793
+ }
2794
+
2795
+ .bv-film-checks .is-ok .bv-film-mark {
2796
+ color: var(--success);
2797
+ }
2798
+
2799
+ .bv-film-checks .is-bad, .bv-film-error {
2800
+ color: var(--destructive);
2801
+ }
2802
+
2803
+ .bv-sandbox-code {
2804
+ white-space: pre;
2805
+ overflow: auto;
2806
+ background: var(--muted);
2807
+ color: var(--foreground);
2808
+ border-radius: 8px;
2809
+ margin: 12px 0 0;
2810
+ padding: 10px 12px;
2811
+ font-size: 12px;
2812
+ line-height: 1.45;
2813
+ }
2814
+
2815
+ .bv-state-list {
2816
+ display: flex;
2817
+ flex-direction: column;
2818
+ gap: 4px;
2819
+ }
2820
+
2821
+ .bv-state-entity {
2822
+ display: flex;
2823
+ border: 1px solid var(--border);
2824
+ background: var(--card);
2825
+ border-radius: 8px;
2826
+ flex-wrap: wrap;
2827
+ align-items: baseline;
2828
+ gap: 10px;
2829
+ padding: 6px 10px;
2830
+ font-size: 13px;
2831
+ }
2832
+
2833
+ .bv-state-part b {
2834
+ margin-right: 4px;
2835
+ }
2836
+
2837
+ .bv-state-part code {
2838
+ color: var(--muted-foreground);
2839
+ font-size: 12px;
2840
+ }
2841
+ }
2842
+
2843
+ .bv-maker {
2844
+ padding: 12px 16px;
2845
+ font-size: 13px;
2846
+ line-height: 20px;
2847
+ }
2848
+
2849
+ .bv-maker-head {
2850
+ display: flex;
2851
+ align-items: baseline;
2852
+ gap: 12px;
2853
+ margin-bottom: 8px;
2854
+ }
2855
+
2856
+ .bv-maker-head h2 {
2857
+ margin: 0;
2858
+ font-size: 15px;
2859
+ }
2860
+
2861
+ .bv-maker-list {
2862
+ list-style: none;
2863
+ margin: 0;
2864
+ padding: 0;
2865
+ }
2866
+
2867
+ .bv-maker-spec {
2868
+ display: flex;
2869
+ border-top: 1px solid var(--border);
2870
+ justify-content: space-between;
2871
+ align-items: baseline;
2872
+ gap: 12px;
2873
+ padding: 6px 0;
2874
+ }
2875
+
2876
+ .bv-maker-open {
2877
+ color: var(--foreground);
2878
+ font: inherit;
2879
+ text-align: left;
2880
+ cursor: pointer;
2881
+ background: none;
2882
+ border: 0;
2883
+ padding: 0;
2884
+ }
2885
+
2886
+ .bv-maker-open:hover b {
2887
+ text-decoration: underline;
2888
+ }
2889
+
2890
+ .bv-maker-facts {
2891
+ display: flex;
2892
+ white-space: nowrap;
2893
+ align-items: center;
2894
+ gap: 10px;
2895
+ }
2896
+
2897
+ .bv-maker-output {
2898
+ white-space: pre-wrap;
2899
+ background: var(--muted);
2900
+ color: var(--destructive);
2901
+ border-radius: 8px;
2902
+ margin: 8px 0;
2903
+ padding: 8px 10px;
2904
+ font-size: 12px;
2905
+ }
2906
+
2907
+ .bv-lab {
2908
+ display: flex;
2909
+ flex-direction: column;
2910
+ height: 100%;
2911
+ min-height: 0;
2912
+ font-size: 13px;
2913
+ line-height: 20px;
2914
+ }
2915
+
2916
+ .bv-lab-app {
2917
+ flex: 1;
2918
+ min-width: 0;
2919
+ min-height: 0;
2920
+ }
2921
+
2922
+ .bv-lab-frame {
2923
+ overflow: auto;
2924
+ background: var(--background);
2925
+ border: 1px solid #0000;
2926
+ height: 100%;
2927
+ min-height: 0;
2928
+ transition: border-color .15s;
2929
+ }
2930
+
2931
+ .bv-lab-frame.is-playing {
2932
+ border-color: var(--primary);
2933
+ }
2934
+
2935
+ .bv-lab-bare {
2936
+ padding: 12px;
2937
+ }
2938
+
2939
+ .bv-lab-views {
2940
+ list-style: none;
2941
+ display: flex;
2942
+ flex-direction: column;
2943
+ align-items: stretch;
2944
+ margin: 0;
2945
+ padding: 0;
2946
+ }
2947
+
2948
+ .bv-lab-views .is-open {
2949
+ font-weight: 600;
2950
+ }
2951
+
2952
+ .bv-bar {
2953
+ position: relative;
2954
+ z-index: 2;
2955
+ display: flex;
2956
+ border-top: 1px solid var(--border);
2957
+ background: var(--card);
2958
+ white-space: nowrap;
2959
+ align-items: stretch;
2960
+ gap: 2px;
2961
+ height: 30px;
2962
+ padding: 0 6px;
2963
+ font-size: 12px;
2964
+ line-height: 30px;
2965
+ }
2966
+
2967
+ .bv-bar-head {
2968
+ border-top: 0;
2969
+ border-bottom: 1px solid var(--border);
2970
+ }
2971
+
2972
+ .bv-bar-head .bv-popover {
2973
+ top: calc(100% + 4px);
2974
+ bottom: auto;
2975
+ }
2976
+
2977
+ .bv-bar-slot {
2978
+ position: relative;
2979
+ display: flex;
2980
+ }
2981
+
2982
+ .bv-bar-item {
2983
+ display: inline-flex;
2984
+ border-radius: var(--radius);
2985
+ color: var(--foreground);
2986
+ font: inherit;
2987
+ cursor: pointer;
2988
+ background: none;
2989
+ border: 0;
2990
+ align-items: center;
2991
+ gap: 6px;
2992
+ height: 30px;
2993
+ padding: 0 8px;
2994
+ line-height: 1;
2995
+ }
2996
+
2997
+ .bv-bar-icon {
2998
+ opacity: .85;
2999
+ flex: none;
3000
+ width: 14px;
3001
+ height: 14px;
3002
+ }
3003
+
3004
+ .bv-bar-item b {
3005
+ font-weight: 600;
3006
+ }
3007
+
3008
+ .bv-bar-time {
3009
+ font-variant-numeric: tabular-nums;
3010
+ text-align: right;
3011
+ min-width: 44px;
3012
+ }
3013
+
3014
+ .bv-bar-item:hover, .bv-bar-item.is-open {
3015
+ background: var(--accent);
3016
+ }
3017
+
3018
+ .bv-bar-item.is-ok {
3019
+ color: var(--success);
3020
+ }
3021
+
3022
+ .bv-bar-item.is-bad {
3023
+ color: var(--destructive);
3024
+ }
3025
+
3026
+ .bv-bar-item.is-warn {
3027
+ color: var(--warning);
3028
+ }
3029
+
3030
+ .bv-bar-item.is-here {
3031
+ color: var(--primary);
3032
+ }
3033
+
3034
+ .bv-bar-item .bv-muted {
3035
+ color: var(--muted-foreground);
3036
+ font-weight: 400;
3037
+ }
3038
+
3039
+ .bv-bar-slot {
3040
+ align-items: stretch;
3041
+ }
3042
+
3043
+ .bv-lab-answer .bv-button .bv-bar-icon {
3044
+ margin-right: 4px;
3045
+ }
3046
+
3047
+ .bv-bar-back {
3048
+ color: var(--muted-foreground);
3049
+ padding: 0 6px;
3050
+ }
3051
+
3052
+ .bv-bar-back:hover {
3053
+ color: var(--foreground);
3054
+ }
3055
+
3056
+ .bv-bar-play {
3057
+ justify-content: center;
3058
+ width: 30px;
3059
+ padding: 0;
3060
+ }
3061
+
3062
+ .bv-bar-play.is-on {
3063
+ color: var(--primary);
3064
+ }
3065
+
3066
+ .bv-bar-gap {
3067
+ flex: 1;
3068
+ }
3069
+
3070
+ .bv-bar-summary {
3071
+ margin: 0 0 4px;
3072
+ }
3073
+
3074
+ .bv-popover {
3075
+ position: absolute;
3076
+ overflow: auto;
3077
+ border: 1px solid var(--border);
3078
+ border-radius: var(--radius);
3079
+ background: var(--popover);
3080
+ box-shadow: 0 8px 24px color-mix(in oklch, var(--foreground) 14%, transparent);
3081
+ white-space: normal;
3082
+ width: 360px;
3083
+ max-width: calc(100vw - 24px);
3084
+ max-height: min(70vh, 640px);
3085
+ padding: 8px 12px;
3086
+ font-size: 12px;
3087
+ line-height: 16px;
3088
+ bottom: calc(100% + 4px);
3089
+ left: 0;
3090
+ }
3091
+
3092
+ .bv-popover.is-right {
3093
+ left: auto;
3094
+ right: 0;
3095
+ }
3096
+
3097
+ .bv-popover.is-wide {
3098
+ width: 460px;
3099
+ }
3100
+
3101
+ .bv-popover h3 {
3102
+ text-transform: uppercase;
3103
+ letter-spacing: .04em;
3104
+ color: var(--muted-foreground);
3105
+ margin: 8px 0 4px;
3106
+ font-size: 11px;
3107
+ font-weight: 600;
3108
+ }
3109
+
3110
+ .bv-popover h3:first-child {
3111
+ margin-top: 0;
3112
+ }
3113
+
3114
+ .bv-lab-transport {
3115
+ display: flex;
3116
+ align-items: center;
3117
+ gap: 10px;
3118
+ }
3119
+
3120
+ .bv-lab-transport select {
3121
+ font: inherit;
3122
+ background: var(--background);
3123
+ color: var(--foreground);
3124
+ border: 1px solid var(--border);
3125
+ border-radius: 4px;
3126
+ }
3127
+
3128
+ .bv-lab-scenarios, .bv-lab-jobs, .bv-lab-changes, .bv-lab-outside, .bv-lab-log {
3129
+ list-style: none;
3130
+ margin: 0;
3131
+ padding: 0;
3132
+ }
3133
+
3134
+ .bv-lab-scenarios > li, .bv-lab-jobs > li, .bv-lab-changes > li, .bv-lab-log > li {
3135
+ border-top: 1px solid var(--border);
3136
+ padding: 4px 0;
3137
+ }
3138
+
3139
+ .bv-lab-scenarios > li:first-child, .bv-lab-jobs > li:first-child, .bv-lab-changes > li:first-child, .bv-lab-log > li:first-child {
3140
+ border-top: 0;
3141
+ }
3142
+
3143
+ .bv-lab-scenario-row {
3144
+ display: flex;
3145
+ align-items: center;
3146
+ gap: 6px;
3147
+ }
3148
+
3149
+ .bv-lab-scenario-row b {
3150
+ overflow: hidden;
3151
+ text-overflow: ellipsis;
3152
+ white-space: nowrap;
3153
+ flex: 1;
3154
+ min-width: 0;
3155
+ }
3156
+
3157
+ .bv-lab-answer {
3158
+ display: flex;
3159
+ gap: 4px;
3160
+ margin-top: 4px;
3161
+ }
3162
+
3163
+ .bv-lab-answer input {
3164
+ font: inherit;
3165
+ border: 1px solid var(--border);
3166
+ background: var(--background);
3167
+ color: var(--foreground);
3168
+ border-radius: 4px;
3169
+ flex: 1;
3170
+ min-width: 0;
3171
+ padding: 2px 6px;
3172
+ }
3173
+
3174
+ .bv-lab-changes ul {
3175
+ list-style: none;
3176
+ margin: 2px 0 0 8px;
3177
+ padding: 0;
3178
+ }
3179
+
3180
+ .bv-film-checks .is-warn, .bv-film-checks .is-warn .bv-film-mark {
3181
+ color: var(--warning);
3182
+ }
3183
+
3184
+ .bv-lab-knobs {
3185
+ display: flex;
3186
+ flex-wrap: wrap;
3187
+ gap: 10px;
3188
+ margin: 6px 0;
3189
+ }
3190
+
3191
+ .bv-lab-knob {
3192
+ font: inherit;
3193
+ border: 1px solid var(--border);
3194
+ background: var(--background);
3195
+ color: var(--foreground);
3196
+ border-radius: 4px;
3197
+ width: 64px;
3198
+ padding: 1px 4px;
3199
+ }
3200
+
3201
+ .bv-lab-scenarios > li.is-open {
3202
+ background: color-mix(in oklch, var(--primary) 8%, transparent);
3203
+ margin: 0 -12px;
3204
+ padding: 4px 12px;
3205
+ }
3206
+
3207
+ .bv-lab-story-wrap {
3208
+ border-top: 1px solid var(--border);
3209
+ margin-top: 8px;
3210
+ padding-top: 8px;
3211
+ }
3212
+
3213
+ .bv-lab-story {
3214
+ list-style: none;
3215
+ margin: 4px 0 0;
3216
+ padding: 0;
3217
+ }
3218
+
3219
+ .bv-lab-story > li {
3220
+ display: grid;
3221
+ grid-template-columns: 14px 1fr;
3222
+ border-top: 1px solid var(--border);
3223
+ color: var(--muted-foreground);
3224
+ column-gap: 4px;
3225
+ padding: 3px 0;
3226
+ }
3227
+
3228
+ .bv-lab-story > li:first-child {
3229
+ border-top: 0;
3230
+ }
3231
+
3232
+ .bv-lab-story > li.is-done, .bv-lab-story > li.is-ok, .bv-lab-story > li.is-bad, .bv-lab-story > li.is-warn {
3233
+ color: var(--foreground);
2667
3234
  }
2668
3235
 
2669
- .bv-maker-output {
2670
- white-space: pre-wrap;
2671
- background: var(--muted);
2672
- color: var(--destructive);
2673
- border-radius: 8px;
2674
- margin: 8px 0;
2675
- padding: 8px 10px;
2676
- font-size: 12px;
3236
+ .bv-lab-story > li.is-here {
3237
+ color: var(--primary);
3238
+ font-weight: 500;
2677
3239
  }
2678
3240
 
2679
- .bv-lab {
2680
- display: flex;
2681
- flex-direction: column;
2682
- height: 100%;
2683
- min-height: 0;
2684
- font-size: 13px;
2685
- line-height: 20px;
3241
+ .bv-lab-story > li.is-ok .bv-film-mark {
3242
+ color: var(--success);
2686
3243
  }
2687
3244
 
2688
- .bv-lab-app {
2689
- flex: 1;
2690
- min-width: 0;
2691
- min-height: 0;
3245
+ .bv-lab-story > li.is-bad {
3246
+ color: var(--destructive);
2692
3247
  }
2693
3248
 
2694
- .bv-lab-frame {
2695
- overflow: auto;
2696
- background: var(--background);
2697
- border: 1px solid #0000;
2698
- height: 100%;
2699
- min-height: 0;
2700
- transition: border-color .15s;
3249
+ .bv-lab-story > li.is-warn {
3250
+ color: var(--warning);
2701
3251
  }
2702
3252
 
2703
- .bv-lab-frame.is-playing {
2704
- border-color: var(--primary);
3253
+ .bv-lab-story .bv-lab-changes {
3254
+ grid-column: 2;
3255
+ color: var(--muted-foreground);
3256
+ margin: 2px 0 0;
3257
+ font-size: 11px;
2705
3258
  }
2706
3259
 
2707
- .bv-lab-bare {
2708
- padding: 12px;
3260
+ .bv-lab-story-head {
3261
+ margin: 0 0 2px;
2709
3262
  }
2710
3263
 
2711
- .bv-lab-views {
3264
+ .bv-lab-take {
3265
+ margin-top: 4px;
3266
+ }
3267
+
3268
+ .bv-lab-tree {
2712
3269
  list-style: none;
2713
- display: flex;
2714
- flex-direction: column;
2715
- align-items: stretch;
2716
- margin: 0;
3270
+ margin: 2px 0 0 10px;
2717
3271
  padding: 0;
3272
+ font-size: 11px;
2718
3273
  }
2719
3274
 
2720
- .bv-lab-views .is-open {
2721
- font-weight: 600;
3275
+ .bv-lab-expect {
3276
+ margin: 4px 0;
2722
3277
  }
2723
3278
 
2724
- .bv-bar {
2725
- position: relative;
2726
- z-index: 2;
2727
- display: flex;
2728
- border-top: 1px solid var(--border);
2729
- background: var(--card);
2730
- white-space: nowrap;
2731
- align-items: stretch;
2732
- gap: 2px;
2733
- height: 30px;
2734
- padding: 0 6px;
2735
- font-size: 12px;
2736
- line-height: 30px;
3279
+ .bv-lab-model .bv-object-map {
3280
+ margin-bottom: 6px;
2737
3281
  }
2738
3282
 
2739
- .bv-bar-head {
2740
- border-top: 0;
2741
- border-bottom: 1px solid var(--border);
2742
- }
3283
+ @layer voss {
3284
+ .rt {
3285
+ display: flex;
3286
+ background: var(--desk);
3287
+ color: var(--foreground);
3288
+ --rt-ink: color-mix(in oklch, var(--foreground) 6%, transparent);
3289
+ --rt-ink-strong: color-mix(in oklch, var(--foreground) 11%, transparent);
3290
+ justify-content: center;
3291
+ font-size: 13px;
3292
+ line-height: 20px;
3293
+ }
3294
+
3295
+ .rt.rt-center {
3296
+ align-items: center;
3297
+ padding: 16px;
3298
+ }
3299
+
3300
+ :where(.rt) :where(button, input) {
3301
+ font: inherit;
3302
+ color: inherit;
3303
+ }
3304
+
3305
+ .rt-column {
3306
+ display: flex;
3307
+ flex-direction: column;
3308
+ gap: 8px;
3309
+ width: min(560px, 100%);
3310
+ padding: max(32px, 12vh) 16px 48px;
3311
+ }
3312
+
3313
+ .rt-mark {
3314
+ display: flex;
3315
+ color: var(--primary);
3316
+ justify-content: space-between;
3317
+ align-items: center;
3318
+ gap: 12px;
3319
+ margin-bottom: 24px;
3320
+ padding: 0 5px;
3321
+ }
3322
+
3323
+ .rt-mark h1 {
3324
+ margin: 0;
3325
+ line-height: 0;
3326
+ }
3327
+
3328
+ .rt-lockup {
3329
+ display: block;
3330
+ width: auto;
3331
+ height: 22px;
3332
+ }
3333
+
3334
+ .rt-version {
3335
+ display: flex;
3336
+ color: var(--muted-foreground);
3337
+ font: 12px / 20px var(--font-mono);
3338
+ font-variant-numeric: tabular-nums;
3339
+ align-items: center;
3340
+ }
3341
+
3342
+ .rt-version-text {
3343
+ display: block;
3344
+ text-box: trim-both cap alphabetic;
3345
+ }
3346
+
3347
+ .rt-version .rt-tag {
3348
+ display: flex;
3349
+ align-items: center;
3350
+ height: 18px;
3351
+ }
3352
+
3353
+ .rt-hidden {
3354
+ position: absolute;
3355
+ overflow: hidden;
3356
+ clip-path: inset(50%);
3357
+ white-space: nowrap;
3358
+ width: 1px;
3359
+ height: 1px;
3360
+ }
3361
+
3362
+ .rt-list {
3363
+ display: flex;
3364
+ list-style: none;
3365
+ flex-direction: column;
3366
+ gap: 2px;
3367
+ margin: 0;
3368
+ padding: 0;
3369
+ }
3370
+
3371
+ .rt-row {
3372
+ position: relative;
3373
+ display: flex;
3374
+ padding-left: calc(var(--depth, 0) * 20px);
3375
+ flex-wrap: wrap;
3376
+ align-items: center;
3377
+ }
3378
+
3379
+ .rt-row-main {
3380
+ display: flex;
3381
+ color: var(--muted-foreground);
3382
+ text-align: left;
3383
+ cursor: pointer;
3384
+ background: none;
3385
+ border: 0;
3386
+ border-radius: 999px;
3387
+ flex: 1;
3388
+ align-items: center;
3389
+ gap: 3px;
3390
+ min-width: 0;
3391
+ height: 32px;
3392
+ padding: 0 12px 0 5px;
3393
+ }
3394
+
3395
+ .rt-row-main:hover {
3396
+ background: var(--rt-ink-strong);
3397
+ color: var(--foreground);
3398
+ outline: none;
3399
+ }
3400
+
3401
+ .rt-row-main:focus-visible {
3402
+ background: var(--rt-ink-strong);
3403
+ color: var(--foreground);
3404
+ outline: none;
3405
+ }
3406
+
3407
+ .rt-row-icon {
3408
+ display: grid;
3409
+ flex-shrink: 0;
3410
+ place-items: center;
3411
+ width: 22px;
3412
+ height: 22px;
3413
+ }
3414
+
3415
+ .rt-row-label {
3416
+ overflow: hidden;
3417
+ text-overflow: ellipsis;
3418
+ white-space: nowrap;
3419
+ color: var(--foreground);
3420
+ flex-shrink: 0;
3421
+ max-width: 50%;
3422
+ }
3423
+
3424
+ .rt-row-note {
3425
+ overflow: hidden;
3426
+ text-overflow: ellipsis;
3427
+ white-space: nowrap;
3428
+ text-align: right;
3429
+ color: var(--muted-foreground);
3430
+ flex: 1;
3431
+ min-width: 0;
3432
+ padding-left: 8px;
3433
+ font-size: 11px;
3434
+ }
3435
+
3436
+ .rt-tag {
3437
+ background: var(--rt-ink-strong);
3438
+ color: var(--muted-foreground);
3439
+ border-radius: 999px;
3440
+ flex-shrink: 0;
3441
+ margin-left: 8px;
3442
+ padding: 0 7px;
3443
+ font-size: 11px;
3444
+ line-height: 18px;
3445
+ }
3446
+
3447
+ .rt-tag.is-failed {
3448
+ color: var(--destructive);
3449
+ }
3450
+
3451
+ .rt-row-forget {
3452
+ position: absolute;
3453
+ left: calc(var(--depth, 0) * 20px + 5px);
3454
+ display: grid;
3455
+ color: var(--foreground);
3456
+ cursor: pointer;
3457
+ opacity: 0;
3458
+ pointer-events: none;
3459
+ background: none;
3460
+ border: 0;
3461
+ border-radius: 999px;
3462
+ place-items: center;
3463
+ width: 22px;
3464
+ height: 22px;
3465
+ padding: 0;
3466
+ top: 5px;
3467
+ transform: scale(.5);
3468
+ }
3469
+
3470
+ .rt-row-icon, .rt-row-forget {
3471
+ transition: transform .26s cubic-bezier(.3,1.6,.4,1), opacity 80ms;
3472
+ }
3473
+
3474
+ .rt-row:hover .rt-row-main .rt-row-icon {
3475
+ opacity: 0;
3476
+ transform: scale(.5);
3477
+ }
3478
+
3479
+ .rt-row:has(:focus-visible) .rt-row-main .rt-row-icon {
3480
+ opacity: 0;
3481
+ transform: scale(.5);
3482
+ }
3483
+
3484
+ .rt-row:hover .rt-row-forget {
3485
+ opacity: 1;
3486
+ pointer-events: auto;
3487
+ transform: none;
3488
+ }
3489
+
3490
+ .rt-row:has(:focus-visible) .rt-row-forget {
3491
+ opacity: 1;
3492
+ pointer-events: auto;
3493
+ transform: none;
3494
+ }
3495
+
3496
+ .rt-row-forget:hover {
3497
+ background: var(--rt-ink-strong);
3498
+ }
3499
+
3500
+ @media (prefers-reduced-motion: reduce) {
3501
+ .rt-row-icon, .rt-row-forget {
3502
+ transition: none;
3503
+ }
3504
+ }
3505
+
3506
+ .rt-row-error {
3507
+ color: var(--destructive);
3508
+ white-space: pre-wrap;
3509
+ flex-basis: 100%;
3510
+ margin: 2px 0 6px 30px;
3511
+ font-size: 12px;
3512
+ }
3513
+
3514
+ .rt-empty {
3515
+ color: var(--muted-foreground);
3516
+ padding: 6px 30px;
3517
+ }
3518
+
3519
+ .rt-add {
3520
+ position: relative;
3521
+ margin-top: 12px;
3522
+ }
2743
3523
 
2744
- .bv-bar-head .bv-popover {
2745
- top: calc(100% + 4px);
2746
- bottom: auto;
2747
- }
3524
+ .rt-add-field {
3525
+ display: flex;
3526
+ background: var(--rt-ink);
3527
+ border: 1px solid #0000;
3528
+ border-radius: 999px;
3529
+ align-items: center;
3530
+ gap: 3px;
3531
+ height: 36px;
3532
+ padding: 0 4px 0 6px;
3533
+ }
2748
3534
 
2749
- .bv-bar-slot {
2750
- position: relative;
2751
- display: flex;
2752
- }
3535
+ .rt-add-field:focus-within {
3536
+ border-color: var(--border);
3537
+ }
2753
3538
 
2754
- .bv-bar-item {
2755
- display: inline-flex;
2756
- border-radius: var(--radius);
2757
- color: var(--foreground);
2758
- font: inherit;
2759
- cursor: pointer;
2760
- background: none;
2761
- border: 0;
2762
- align-items: center;
2763
- gap: 6px;
2764
- height: 30px;
2765
- padding: 0 8px;
2766
- line-height: 1;
2767
- }
3539
+ .rt-add-field input {
3540
+ outline: none;
3541
+ background: none;
3542
+ border: 0;
3543
+ flex: 1;
3544
+ min-width: 0;
3545
+ height: 100%;
3546
+ padding: 0 6px 0 0;
3547
+ }
2768
3548
 
2769
- .bv-bar-icon {
2770
- opacity: .85;
2771
- flex: none;
2772
- width: 14px;
2773
- height: 14px;
2774
- }
3549
+ .rt-add-field input::placeholder {
3550
+ color: var(--muted-foreground);
3551
+ }
2775
3552
 
2776
- .bv-bar-item b {
2777
- font-weight: 600;
2778
- }
3553
+ .rt-add-go, .rt-add-browse {
3554
+ color: var(--muted-foreground);
3555
+ cursor: pointer;
3556
+ background: none;
3557
+ border: 0;
3558
+ border-radius: 999px;
3559
+ flex-shrink: 0;
3560
+ height: 26px;
3561
+ padding: 0 12px;
3562
+ }
2779
3563
 
2780
- .bv-bar-time {
2781
- font-variant-numeric: tabular-nums;
2782
- text-align: right;
2783
- min-width: 44px;
2784
- }
3564
+ .rt-add-go {
3565
+ display: grid;
3566
+ background: var(--primary);
3567
+ color: var(--primary-foreground);
3568
+ place-items: center;
3569
+ width: 26px;
3570
+ padding: 0;
3571
+ }
2785
3572
 
2786
- .bv-bar-item:hover, .bv-bar-item.is-open {
2787
- background: var(--accent);
2788
- }
3573
+ .rt-add-go:disabled {
3574
+ background: var(--rt-ink-strong);
3575
+ color: var(--muted-foreground);
3576
+ cursor: default;
3577
+ }
2789
3578
 
2790
- .bv-bar-item.is-ok {
2791
- color: var(--success);
2792
- }
3579
+ .rt-add-browse:hover {
3580
+ background: var(--rt-ink-strong);
3581
+ color: var(--foreground);
3582
+ }
2793
3583
 
2794
- .bv-bar-item.is-bad {
2795
- color: var(--destructive);
2796
- }
3584
+ .rt-suggest {
3585
+ position: absolute;
3586
+ z-index: 2;
3587
+ display: flex;
3588
+ list-style: none;
3589
+ background: var(--desk);
3590
+ border-radius: 18px;
3591
+ flex-direction: column;
3592
+ gap: 2px;
3593
+ margin: 0;
3594
+ padding: 4px;
3595
+ top: 40px;
3596
+ left: 0;
3597
+ right: 0;
3598
+ box-shadow: 0 12px 32px -12px #00000073;
3599
+ box-shadow: 0 12px 32px -12px color(display-p3 0 0 0 / .45);
3600
+ box-shadow: 0 12px 32px -12px lab(0% 0 0 / .45);
3601
+ }
2797
3602
 
2798
- .bv-bar-item.is-warn {
2799
- color: var(--warning);
2800
- }
3603
+ .rt-suggest button {
3604
+ display: flex;
3605
+ color: var(--muted-foreground);
3606
+ text-align: left;
3607
+ cursor: pointer;
3608
+ background: none;
3609
+ border: 0;
3610
+ border-radius: 999px;
3611
+ align-items: center;
3612
+ gap: 3px;
3613
+ width: 100%;
3614
+ height: 28px;
3615
+ padding: 0 10px 0 3px;
3616
+ }
2801
3617
 
2802
- .bv-bar-item.is-here {
2803
- color: var(--primary);
2804
- }
3618
+ .rt-suggest button:hover, .rt-suggest button.is-active {
3619
+ background: var(--rt-ink-strong);
3620
+ color: var(--foreground);
3621
+ }
2805
3622
 
2806
- .bv-bar-item .bv-muted {
2807
- color: var(--muted-foreground);
2808
- font-weight: 400;
2809
- }
3623
+ .rt-suggest .rt-tag {
3624
+ margin-left: auto;
3625
+ }
2810
3626
 
2811
- .bv-bar-slot {
2812
- align-items: stretch;
2813
- }
3627
+ .rt-browse {
3628
+ display: flex;
3629
+ overflow: hidden;
3630
+ border: 1px solid var(--border);
3631
+ background: var(--background);
3632
+ border-radius: 14px;
3633
+ flex-direction: column;
3634
+ height: min(480px, 60vh);
3635
+ }
2814
3636
 
2815
- .bv-lab-answer .bv-button .bv-bar-icon {
2816
- margin-right: 4px;
2817
- }
3637
+ .rt-error {
3638
+ color: var(--destructive);
3639
+ margin: 8px 0 0;
3640
+ padding: 0 12px;
3641
+ font-size: 12px;
3642
+ }
2818
3643
 
2819
- .bv-bar-back {
2820
- color: var(--muted-foreground);
2821
- padding: 0 6px;
2822
- }
3644
+ .rt-toast {
3645
+ position: fixed;
3646
+ display: flex;
3647
+ background: var(--foreground);
3648
+ color: var(--background);
3649
+ border-radius: 999px;
3650
+ align-items: center;
3651
+ gap: 12px;
3652
+ padding: 6px 6px 6px 16px;
3653
+ font-size: 12px;
3654
+ bottom: 24px;
3655
+ left: 50%;
3656
+ transform: translateX(-50%);
3657
+ }
2823
3658
 
2824
- .bv-bar-back:hover {
2825
- color: var(--foreground);
2826
- }
3659
+ .rt-toast button {
3660
+ background: color-mix(in oklch, var(--background) 20%, transparent);
3661
+ color: inherit;
3662
+ cursor: pointer;
3663
+ border: 0;
3664
+ border-radius: 999px;
3665
+ height: 24px;
3666
+ padding: 0 12px;
3667
+ font-weight: 500;
3668
+ }
2827
3669
 
2828
- .bv-bar-play {
2829
- justify-content: center;
2830
- width: 30px;
2831
- padding: 0;
2832
- }
3670
+ .sw-card {
3671
+ display: flex;
3672
+ background: var(--background);
3673
+ border: 1px solid var(--border);
3674
+ overflow: hidden;
3675
+ border-radius: 22px;
3676
+ flex-direction: column;
3677
+ width: min(520px, 100%);
3678
+ height: min(440px, 100dvh - 32px);
3679
+ }
2833
3680
 
2834
- .bv-bar-play.is-on {
2835
- color: var(--primary);
2836
- }
3681
+ .sw-gone {
3682
+ align-items: flex-start;
3683
+ gap: 16px;
3684
+ height: auto;
3685
+ padding: 24px;
3686
+ }
2837
3687
 
2838
- .bv-bar-gap {
2839
- flex: 1;
2840
- }
3688
+ .sw-gone p {
3689
+ margin: 0;
3690
+ }
2841
3691
 
2842
- .bv-bar-summary {
2843
- margin: 0 0 4px;
2844
- }
3692
+ .sw-head {
3693
+ display: flex;
3694
+ align-items: center;
3695
+ gap: 12px;
3696
+ padding: 20px 24px 12px;
3697
+ }
2845
3698
 
2846
- .bv-popover {
2847
- position: absolute;
2848
- overflow: auto;
2849
- border: 1px solid var(--border);
2850
- border-radius: var(--radius);
2851
- background: var(--popover);
2852
- box-shadow: 0 8px 24px color-mix(in oklch, var(--foreground) 14%, transparent);
2853
- white-space: normal;
2854
- width: 360px;
2855
- max-width: calc(100vw - 24px);
2856
- max-height: min(70vh, 640px);
2857
- padding: 8px 12px;
2858
- font-size: 12px;
2859
- line-height: 16px;
2860
- bottom: calc(100% + 4px);
2861
- left: 0;
2862
- }
3699
+ .sw-head > svg, .rt-mark > svg {
3700
+ flex-shrink: 0;
3701
+ }
2863
3702
 
2864
- .bv-popover.is-right {
2865
- left: auto;
2866
- right: 0;
2867
- }
3703
+ .sw-head-text {
3704
+ min-width: 0;
3705
+ }
2868
3706
 
2869
- .bv-popover.is-wide {
2870
- width: 460px;
2871
- }
3707
+ .sw-head h1 {
3708
+ margin: 0;
3709
+ font-size: 15px;
3710
+ font-weight: 600;
3711
+ line-height: 22px;
3712
+ }
2872
3713
 
2873
- .bv-popover h3 {
2874
- text-transform: uppercase;
2875
- letter-spacing: .04em;
2876
- color: var(--muted-foreground);
2877
- margin: 8px 0 4px;
2878
- font-size: 11px;
2879
- font-weight: 600;
2880
- }
3714
+ .sw-head p {
3715
+ overflow: hidden;
3716
+ text-overflow: ellipsis;
3717
+ white-space: nowrap;
3718
+ color: var(--muted-foreground);
3719
+ font-size: 12px;
3720
+ font-family: var(--font-mono);
3721
+ margin: 0;
3722
+ }
3723
+
3724
+ .sw-steps {
3725
+ display: flex;
3726
+ list-style: none;
3727
+ border-bottom: 1px solid var(--border);
3728
+ gap: 4px;
3729
+ margin: 0;
3730
+ padding: 0 24px 12px;
3731
+ }
3732
+
3733
+ .sw-steps li {
3734
+ display: flex;
3735
+ color: var(--muted-foreground);
3736
+ border-radius: 999px;
3737
+ align-items: center;
3738
+ gap: 6px;
3739
+ height: 26px;
3740
+ padding: 0 10px 0 3px;
3741
+ font-size: 12px;
3742
+ }
2881
3743
 
2882
- .bv-popover h3:first-child {
2883
- margin-top: 0;
2884
- }
3744
+ .sw-steps li.is-here {
3745
+ background: color-mix(in oklch, var(--foreground) 8%, transparent);
3746
+ color: var(--foreground);
3747
+ }
2885
3748
 
2886
- .bv-lab-transport {
2887
- display: flex;
2888
- align-items: center;
2889
- gap: 10px;
2890
- }
3749
+ .sw-step-dot {
3750
+ display: grid;
3751
+ background: color-mix(in oklch, var(--foreground) 8%, transparent);
3752
+ font-variant-numeric: tabular-nums;
3753
+ border-radius: 999px;
3754
+ place-items: center;
3755
+ width: 20px;
3756
+ height: 20px;
3757
+ font-size: 11px;
3758
+ }
2891
3759
 
2892
- .bv-lab-transport select {
2893
- font: inherit;
2894
- background: var(--background);
2895
- color: var(--foreground);
2896
- border: 1px solid var(--border);
2897
- border-radius: 4px;
2898
- }
3760
+ .sw-steps li.is-here .sw-step-dot {
3761
+ background: var(--primary);
3762
+ color: var(--primary-foreground);
3763
+ }
2899
3764
 
2900
- .bv-lab-scenarios, .bv-lab-jobs, .bv-lab-changes, .bv-lab-outside, .bv-lab-log {
2901
- list-style: none;
2902
- margin: 0;
2903
- padding: 0;
2904
- }
3765
+ .sw-steps li.is-done .sw-step-dot {
3766
+ background: color-mix(in oklch, var(--primary) 25%, transparent);
3767
+ color: var(--foreground);
3768
+ }
2905
3769
 
2906
- .bv-lab-scenarios > li, .bv-lab-jobs > li, .bv-lab-changes > li, .bv-lab-log > li {
2907
- border-top: 1px solid var(--border);
2908
- padding: 4px 0;
2909
- }
3770
+ .sw-body {
3771
+ overflow: auto;
3772
+ flex: 1;
3773
+ min-height: 0;
3774
+ padding: 20px 24px;
3775
+ }
2910
3776
 
2911
- .bv-lab-scenarios > li:first-child, .bv-lab-jobs > li:first-child, .bv-lab-changes > li:first-child, .bv-lab-log > li:first-child {
2912
- border-top: 0;
2913
- }
3777
+ .sw-label {
3778
+ display: block;
3779
+ font-weight: 600;
3780
+ }
2914
3781
 
2915
- .bv-lab-scenario-row {
2916
- display: flex;
2917
- align-items: center;
2918
- gap: 6px;
2919
- }
3782
+ .sw-summary {
3783
+ color: var(--muted-foreground);
3784
+ margin: 2px 0 14px;
3785
+ }
2920
3786
 
2921
- .bv-lab-scenario-row b {
2922
- overflow: hidden;
2923
- text-overflow: ellipsis;
2924
- white-space: nowrap;
2925
- flex: 1;
2926
- min-width: 0;
2927
- }
3787
+ .sw-input {
3788
+ border: 1px solid var(--border);
3789
+ background: color-mix(in oklch, var(--foreground) 4%, transparent);
3790
+ color: var(--foreground);
3791
+ font: inherit;
3792
+ font-family: var(--font-mono);
3793
+ outline: none;
3794
+ border-radius: 999px;
3795
+ width: 100%;
3796
+ height: 36px;
3797
+ padding: 0 14px;
3798
+ }
2928
3799
 
2929
- .bv-lab-answer {
2930
- display: flex;
2931
- gap: 4px;
2932
- margin-top: 4px;
2933
- }
3800
+ .sw-input:focus {
3801
+ border-color: var(--primary);
3802
+ }
2934
3803
 
2935
- .bv-lab-answer input {
2936
- font: inherit;
2937
- border: 1px solid var(--border);
2938
- background: var(--background);
2939
- color: var(--foreground);
2940
- border-radius: 4px;
2941
- flex: 1;
2942
- min-width: 0;
2943
- padding: 2px 6px;
2944
- }
3804
+ .sw-input.is-wrong {
3805
+ border-color: var(--destructive);
3806
+ }
2945
3807
 
2946
- .bv-lab-changes ul {
2947
- list-style: none;
2948
- margin: 2px 0 0 8px;
2949
- padding: 0;
2950
- }
3808
+ .sw-hint {
3809
+ color: var(--muted-foreground);
3810
+ margin: 6px 14px 0;
3811
+ font-size: 12px;
3812
+ }
2951
3813
 
2952
- .bv-film-checks .is-warn, .bv-film-checks .is-warn .bv-film-mark {
2953
- color: var(--warning);
2954
- }
3814
+ .sw-hint.is-wrong {
3815
+ color: var(--destructive);
3816
+ }
2955
3817
 
2956
- .bv-lab-knobs {
2957
- display: flex;
2958
- flex-wrap: wrap;
2959
- gap: 10px;
2960
- margin: 6px 0;
2961
- }
3818
+ .sw-review {
3819
+ display: grid;
3820
+ grid-template-columns: auto 1fr;
3821
+ gap: 6px 16px;
3822
+ margin: 0;
3823
+ }
2962
3824
 
2963
- .bv-lab-knob {
2964
- font: inherit;
2965
- border: 1px solid var(--border);
2966
- background: var(--background);
2967
- color: var(--foreground);
2968
- border-radius: 4px;
2969
- width: 64px;
2970
- padding: 1px 4px;
2971
- }
3825
+ .sw-review > div {
3826
+ display: contents;
3827
+ }
2972
3828
 
2973
- .bv-lab-scenarios > li.is-open {
2974
- background: color-mix(in oklch, var(--primary) 8%, transparent);
2975
- margin: 0 -12px;
2976
- padding: 4px 12px;
2977
- }
3829
+ .sw-review dt {
3830
+ color: var(--muted-foreground);
3831
+ }
2978
3832
 
2979
- .bv-lab-story-wrap {
2980
- border-top: 1px solid var(--border);
2981
- margin-top: 8px;
2982
- padding-top: 8px;
2983
- }
3833
+ .sw-review dd {
3834
+ overflow-wrap: anywhere;
3835
+ min-width: 0;
3836
+ margin: 0;
3837
+ }
2984
3838
 
2985
- .bv-lab-story {
2986
- list-style: none;
2987
- margin: 4px 0 0;
2988
- padding: 0;
2989
- }
3839
+ .sw-error {
3840
+ color: var(--destructive);
3841
+ white-space: pre-wrap;
3842
+ margin: 12px 0 0;
3843
+ font-size: 12px;
3844
+ }
2990
3845
 
2991
- .bv-lab-story > li {
2992
- display: grid;
2993
- grid-template-columns: 14px 1fr;
2994
- border-top: 1px solid var(--border);
2995
- color: var(--muted-foreground);
2996
- column-gap: 4px;
2997
- padding: 3px 0;
2998
- }
3846
+ .sw-foot {
3847
+ display: flex;
3848
+ border-top: 1px solid var(--border);
3849
+ align-items: center;
3850
+ gap: 8px;
3851
+ padding: 12px 16px;
3852
+ }
2999
3853
 
3000
- .bv-lab-story > li:first-child {
3001
- border-top: 0;
3002
- }
3854
+ .sw-gap {
3855
+ flex: 1;
3856
+ }
3003
3857
 
3004
- .bv-lab-story > li.is-done, .bv-lab-story > li.is-ok, .bv-lab-story > li.is-bad, .bv-lab-story > li.is-warn {
3005
- color: var(--foreground);
3006
- }
3858
+ .sw-busy {
3859
+ display: flex;
3860
+ color: var(--muted-foreground);
3861
+ white-space: nowrap;
3862
+ align-items: center;
3863
+ gap: 8px;
3864
+ min-width: 0;
3865
+ font-size: 12px;
3866
+ }
3007
3867
 
3008
- .bv-lab-story > li.is-here {
3009
- color: var(--primary);
3010
- font-weight: 500;
3011
- }
3868
+ .sw-button {
3869
+ white-space: nowrap;
3870
+ background: color-mix(in oklch, var(--foreground) 8%, transparent);
3871
+ color: var(--foreground);
3872
+ font: inherit;
3873
+ cursor: pointer;
3874
+ border: 0;
3875
+ border-radius: 999px;
3876
+ flex-shrink: 0;
3877
+ height: 30px;
3878
+ padding: 0 14px;
3879
+ }
3012
3880
 
3013
- .bv-lab-story > li.is-ok .bv-film-mark {
3014
- color: var(--success);
3015
- }
3881
+ .sw-button.is-quiet {
3882
+ color: var(--muted-foreground);
3883
+ background: none;
3884
+ }
3016
3885
 
3017
- .bv-lab-story > li.is-bad {
3018
- color: var(--destructive);
3019
- }
3886
+ .sw-button.is-quiet:hover {
3887
+ color: var(--foreground);
3888
+ background: color-mix(in oklch, var(--foreground) 6%, transparent);
3889
+ }
3020
3890
 
3021
- .bv-lab-story > li.is-warn {
3022
- color: var(--warning);
3023
- }
3891
+ .sw-button.is-primary {
3892
+ background: var(--primary);
3893
+ color: var(--primary-foreground);
3894
+ font-weight: 500;
3895
+ }
3024
3896
 
3025
- .bv-lab-story .bv-lab-changes {
3026
- grid-column: 2;
3027
- color: var(--muted-foreground);
3028
- margin: 2px 0 0;
3029
- font-size: 11px;
3030
- }
3897
+ .sw-button:disabled {
3898
+ opacity: .5;
3899
+ cursor: default;
3900
+ }
3031
3901
 
3032
- .bv-lab-story-head {
3033
- margin: 0 0 2px;
3034
- }
3902
+ @media (max-width: 560px) {
3903
+ .rt-row-note {
3904
+ display: none;
3905
+ }
3906
+ }
3035
3907
 
3036
- .bv-lab-take {
3037
- margin-top: 4px;
3038
- }
3908
+ .sw-button:focus-visible {
3909
+ outline: 2px solid var(--primary);
3910
+ outline-offset: 2px;
3911
+ }
3039
3912
 
3040
- .bv-lab-tree {
3041
- list-style: none;
3042
- margin: 2px 0 0 10px;
3043
- padding: 0;
3044
- font-size: 11px;
3045
- }
3913
+ .rt-add-go:focus-visible {
3914
+ outline: 2px solid var(--primary);
3915
+ outline-offset: 2px;
3916
+ }
3046
3917
 
3047
- .bv-lab-expect {
3048
- margin: 4px 0;
3049
- }
3918
+ .rt-add-browse:focus-visible {
3919
+ outline: 2px solid var(--primary);
3920
+ outline-offset: 2px;
3921
+ }
3050
3922
 
3051
- .bv-lab-model .bv-object-map {
3052
- margin-bottom: 6px;
3923
+ .rt-row-forget:focus-visible {
3924
+ outline: 2px solid var(--primary);
3925
+ outline-offset: 2px;
3926
+ }
3927
+
3928
+ .rt-toast button:focus-visible {
3929
+ outline: 2px solid var(--primary);
3930
+ outline-offset: 2px;
3931
+ }
3053
3932
  }