babavoss 0.0.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/NOTICE +7 -0
  2. package/bin/voss.ts +48 -0
  3. package/gui/babavoss-web.js +234 -0
  4. package/gui/chunk-5hpp1ypv.js +11710 -0
  5. package/gui/chunk-9rq662fd.js +8627 -0
  6. package/gui/chunk-k3cm8j6r.js +433 -0
  7. package/gui/chunk-pk09y98y.js +50 -0
  8. package/gui/chunk-smz02qa6.js +186 -0
  9. package/gui/chunk-wwqypxre.js +49 -0
  10. package/gui/gui.js +2015 -0
  11. package/gui/react-compiler-runtime.js +39 -0
  12. package/gui/react-dom-client.js +21 -0
  13. package/gui/react-dom.js +44 -0
  14. package/gui/react-jsx-runtime.js +19 -0
  15. package/gui/react.js +105 -0
  16. package/gui/theme.css +3053 -0
  17. package/index.ts +15 -0
  18. package/package.json +50 -4
  19. package/src/baba/check.ts +90 -0
  20. package/src/baba/config.ts +261 -0
  21. package/src/baba/find.ts +12 -0
  22. package/src/baba/init.ts +176 -0
  23. package/src/baba/node.ts +483 -0
  24. package/src/baba/project.ts +63 -0
  25. package/src/baba/registry.ts +35 -0
  26. package/src/baba/worker.ts +55 -0
  27. package/src/bench/index.ts +6 -0
  28. package/src/bench/measure.ts +132 -0
  29. package/src/bench/scenarios.ts +136 -0
  30. package/src/build/builder.ts +74 -0
  31. package/src/build/failure.ts +78 -0
  32. package/src/build/guard.ts +85 -0
  33. package/src/build/mdx-register.ts +3 -0
  34. package/src/build/mdx.ts +38 -0
  35. package/src/build/project.ts +38 -0
  36. package/src/build/views.ts +146 -0
  37. package/src/builder/main.ts +29 -0
  38. package/src/desktop/bob.ts +76 -0
  39. package/src/desktop/desktop.css +111 -0
  40. package/src/desktop/icons.ts +50 -0
  41. package/src/desktop/index.ts +323 -0
  42. package/src/desktop/routes.ts +98 -0
  43. package/src/desktop/view.tsx +673 -0
  44. package/src/door/core.ts +384 -0
  45. package/src/ecs/baba.ts +431 -0
  46. package/src/ecs/codec.ts +334 -0
  47. package/src/ecs/handles.ts +91 -0
  48. package/src/ecs/replica.ts +150 -0
  49. package/src/ecs/runtime.ts +603 -0
  50. package/src/ecs/scheduler.ts +75 -0
  51. package/src/ecs/snapshot.ts +102 -0
  52. package/src/ecs/state.ts +759 -0
  53. package/src/ecs/system.ts +256 -0
  54. package/src/ecs/table.ts +420 -0
  55. package/src/ecs/testbed.ts +97 -0
  56. package/src/exec/host.ts +177 -0
  57. package/src/exec/main.ts +98 -0
  58. package/src/exec/watch.ts +7 -0
  59. package/src/exec/wire.ts +29 -0
  60. package/src/generated/build.ts +4 -0
  61. package/src/gui/css.d.ts +1 -0
  62. package/src/gui/gui.tsx +245 -0
  63. package/src/gui/index.ts +51 -0
  64. package/src/gui/inspector.tsx +47 -0
  65. package/src/gui/levels.tsx +73 -0
  66. package/src/gui/promptware.tsx +68 -0
  67. package/src/gui/runner.tsx +118 -0
  68. package/src/gui/theme.css +498 -0
  69. package/src/gui/theme.ts +25 -0
  70. package/src/gui/wizard.tsx +227 -0
  71. package/src/guide/add-a-desktop.mdx +100 -0
  72. package/src/guide/compose-an-interface.mdx +84 -0
  73. package/src/guide/index.ts +13 -0
  74. package/src/guide/reach-outside.mdx +112 -0
  75. package/src/guide/spec-a-system.mdx +93 -0
  76. package/src/guide/systems-together.mdx +72 -0
  77. package/src/guide/write-a-system.mdx +183 -0
  78. package/src/guide/write-promptware.mdx +90 -0
  79. package/src/http/server.ts +310 -0
  80. package/src/kernel/build.ts +21 -0
  81. package/src/kernel/builder.ts +105 -0
  82. package/src/kernel/children.ts +117 -0
  83. package/src/kernel/context.ts +90 -0
  84. package/src/kernel/lock.ts +46 -0
  85. package/src/kernel/names.ts +14 -0
  86. package/src/kernel/schema.ts +130 -0
  87. package/src/kernel/where.ts +12 -0
  88. package/src/kit/index.ts +232 -0
  89. package/src/maker/system.ts +213 -0
  90. package/src/mcp/daemon.ts +61 -0
  91. package/src/mcp/main.ts +208 -0
  92. package/src/mcp/rpc.ts +64 -0
  93. package/src/mcp/tools.ts +125 -0
  94. package/src/prompt/evals.ts +42 -0
  95. package/src/prompt/index.ts +242 -0
  96. package/src/prompt/jsx-dev-runtime.ts +1 -0
  97. package/src/prompt/jsx-runtime.ts +49 -0
  98. package/src/prompt/mdx.d.ts +1 -0
  99. package/src/promptware/compile.ts +183 -0
  100. package/src/promptware/define.ts +16 -0
  101. package/src/promptware/disk.ts +72 -0
  102. package/src/promptware/markdown.d.ts +6 -0
  103. package/src/promptware/sync.ts +437 -0
  104. package/src/promptware/system.ts +215 -0
  105. package/src/runtime/bridge.ts +85 -0
  106. package/src/runtime/connect.ts +54 -0
  107. package/src/runtime/env.ts +35 -0
  108. package/src/runtime/harness.ts +80 -0
  109. package/src/runtime/main.ts +119 -0
  110. package/src/runtime/worker.ts +33 -0
  111. package/src/server/edge.ts +332 -0
  112. package/src/server/main.ts +45 -0
  113. package/src/server/messages.ts +97 -0
  114. package/src/server/protocol.ts +37 -0
  115. package/src/services/args.ts +45 -0
  116. package/src/services/exec.ts +69 -0
  117. package/src/services/fs.ts +139 -0
  118. package/src/services/http.ts +30 -0
  119. package/src/services/index.ts +113 -0
  120. package/src/services/secrets.ts +18 -0
  121. package/src/shell/address.ts +21 -0
  122. package/src/shell/args.ts +219 -0
  123. package/src/shell/client.ts +107 -0
  124. package/src/shell/codes.ts +26 -0
  125. package/src/shell/positional.ts +20 -0
  126. package/src/shell/run.ts +470 -0
  127. package/src/shell/service.ts +167 -0
  128. package/src/shell/state.ts +204 -0
  129. package/src/spec/adapters.ts +72 -0
  130. package/src/spec/diff.ts +26 -0
  131. package/src/spec/files.ts +17 -0
  132. package/src/spec/index.ts +155 -0
  133. package/src/spec/run.ts +97 -0
  134. package/src/spec/take.ts +54 -0
  135. package/src/test/index.ts +8 -0
  136. package/src/test/prove.ts +56 -0
  137. package/src/test/records.ts +23 -0
  138. package/src/test/specs.ts +56 -0
  139. package/src/test/steps.ts +100 -0
  140. package/src/test/voss-dir.ts +17 -0
  141. package/src/transport/messages.ts +110 -0
  142. package/src/transport/transport.ts +62 -0
  143. package/src/wall/probe.ts +67 -0
  144. package/src/wall/profile.ts +103 -0
  145. package/src/wall/spawn.ts +59 -0
  146. package/src/web/app.tsx +53 -0
  147. package/src/web/core.tsx +140 -0
  148. package/src/web/form.ts +155 -0
  149. package/src/web/hooks.ts +135 -0
  150. package/src/web/index.tsx +17 -0
  151. package/src/web/list.ts +19 -0
  152. package/src/web/maker.tsx +766 -0
  153. package/src/web/objects.tsx +213 -0
  154. package/src/web/socket.ts +84 -0
  155. package/src/web/state.tsx +69 -0
  156. package/src/web/store.ts +221 -0
  157. package/src/web/ui.tsx +135 -0
  158. package/README.md +0 -5
package/gui/theme.css ADDED
@@ -0,0 +1,3053 @@
1
+ /* src/desktop/desktop.css */
2
+ @layer theme, base, voss, components, utilities;
3
+
4
+ @layer voss {
5
+ .desktop {
6
+ position: relative;
7
+ display: flex;
8
+ overflow: hidden;
9
+ color: var(--foreground);
10
+ background: var(--desk);
11
+ font: 13px / 20px var(--font-sans, system-ui);
12
+ --desktop-ink: color-mix(in oklch, var(--foreground) 6%, transparent);
13
+ --desktop-ink-strong: color-mix(in oklch, var(--foreground) 11%, transparent);
14
+ --desktop-ink-top: color-mix(in oklch, var(--foreground) 20%, transparent);
15
+ flex-direction: column;
16
+ height: 100dvh;
17
+ min-height: 320px;
18
+ }
19
+
20
+ .desktop button, .desktop input, .desktop select {
21
+ font: inherit;
22
+ color: inherit;
23
+ }
24
+
25
+ .desktop button {
26
+ cursor: pointer;
27
+ }
28
+
29
+ .desktop button:disabled {
30
+ cursor: default;
31
+ }
32
+
33
+ .desktop button:focus-visible {
34
+ outline: 2px solid var(--primary);
35
+ outline-offset: -2px;
36
+ }
37
+
38
+ .desktop select:focus-visible {
39
+ outline: 2px solid var(--primary);
40
+ outline-offset: -2px;
41
+ }
42
+
43
+ .desktop-bar {
44
+ position: relative;
45
+ z-index: 3;
46
+ display: flex;
47
+ user-select: none;
48
+ flex-shrink: 0;
49
+ align-items: stretch;
50
+ gap: 4px;
51
+ height: 40px;
52
+ padding: 6px 8px;
53
+ }
54
+
55
+ .desktop-logo {
56
+ display: grid;
57
+ 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
+ }
69
+
70
+ .desktop-logo.is-selected {
71
+ background: var(--desktop-ink-top);
72
+ color: var(--primary);
73
+ }
74
+
75
+ .desktop-eyes {
76
+ display: block;
77
+ }
78
+
79
+ .desktop-eye-large {
80
+ transition: opacity .12s;
81
+ }
82
+
83
+ .desktop-eye-small {
84
+ transition: transform .22s cubic-bezier(.3,1.2,.3,1);
85
+ }
86
+
87
+ .desktop-eyes.is-alone .desktop-eye-large {
88
+ opacity: 0;
89
+ }
90
+
91
+ .desktop-eyes.is-alone .desktop-eye-small {
92
+ transform: translateX(-21.5px);
93
+ }
94
+
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
+ .desktop-pills {
159
+ display: flex;
160
+ overflow-x: auto;
161
+ scrollbar-width: none;
162
+ scroll-behavior: smooth;
163
+ align-items: stretch;
164
+ gap: 4px;
165
+ min-width: 0;
166
+ }
167
+
168
+ .desktop-pills::-webkit-scrollbar {
169
+ display: none;
170
+ }
171
+
172
+ .desktop-pills.is-faded-left {
173
+ mask-image: linear-gradient(to right, #0000, #000 32px);
174
+ }
175
+
176
+ .desktop-pills.is-faded-right {
177
+ mask-image: linear-gradient(to right, #000 calc(100% - 32px), #0000);
178
+ }
179
+
180
+ .desktop-pills.is-faded-left.is-faded-right {
181
+ mask-image: linear-gradient(to right, #0000, #000 32px calc(100% - 32px), #0000);
182
+ }
183
+
184
+ .desktop-pill {
185
+ position: relative;
186
+ display: flex;
187
+ color: var(--muted-foreground);
188
+ border-radius: 999px;
189
+ flex-shrink: 0;
190
+ align-items: center;
191
+ max-width: 180px;
192
+ }
193
+
194
+ .desktop-pill:hover, .desktop-pill.is-cursor {
195
+ background: var(--desktop-ink);
196
+ color: var(--foreground);
197
+ }
198
+
199
+ .desktop-pill.is-active {
200
+ background: var(--desktop-ink-strong);
201
+ color: var(--foreground);
202
+ }
203
+
204
+ .desktop-pill-label {
205
+ display: flex;
206
+ white-space: nowrap;
207
+ background: none;
208
+ border: 0;
209
+ border-radius: 999px;
210
+ align-items: center;
211
+ gap: 3px;
212
+ min-width: 0;
213
+ height: 100%;
214
+ padding: 0 10px 0 3px;
215
+ }
216
+
217
+ .desktop-pill-icon {
218
+ display: grid;
219
+ flex-shrink: 0;
220
+ place-items: center;
221
+ width: 22px;
222
+ height: 22px;
223
+ }
224
+
225
+ .desktop-pill-icon, .desktop-pill-close {
226
+ transition: transform .26s cubic-bezier(.3,1.6,.4,1), opacity 80ms;
227
+ }
228
+
229
+ .desktop-pill:hover .desktop-pill-label > .desktop-pill-icon {
230
+ opacity: 0;
231
+ transform: scale(.5);
232
+ }
233
+
234
+ .desktop-pill:has(:focus-visible) .desktop-pill-label > .desktop-pill-icon {
235
+ opacity: 0;
236
+ transform: scale(.5);
237
+ }
238
+
239
+ .desktop-pill-close {
240
+ position: absolute;
241
+ display: grid;
242
+ color: var(--foreground);
243
+ opacity: 0;
244
+ pointer-events: none;
245
+ background: none;
246
+ border: 0;
247
+ border-radius: 999px;
248
+ place-items: center;
249
+ width: 22px;
250
+ height: 22px;
251
+ padding: 0;
252
+ top: 3px;
253
+ left: 3px;
254
+ transform: scale(.5);
255
+ }
256
+
257
+ .desktop-pill-close svg {
258
+ display: block;
259
+ }
260
+
261
+ .desktop-pill:hover .desktop-pill-close {
262
+ opacity: 1;
263
+ pointer-events: auto;
264
+ transform: none;
265
+ }
266
+
267
+ .desktop-pill:has(:focus-visible) .desktop-pill-close {
268
+ opacity: 1;
269
+ pointer-events: auto;
270
+ transform: none;
271
+ }
272
+
273
+ .desktop-pill-close:hover {
274
+ background: var(--desktop-ink-strong);
275
+ }
276
+
277
+ .desktop-pill-text {
278
+ display: block;
279
+ overflow: hidden;
280
+ }
281
+
282
+ .desktop-pill-track {
283
+ display: flex;
284
+ gap: 24px;
285
+ }
286
+
287
+ .desktop-pill-track > span {
288
+ flex-shrink: 0;
289
+ }
290
+
291
+ @property --desktop-fade-left {
292
+ syntax: "<length>"; inherits: false; initial-value: 0px;
293
+ }
294
+
295
+ .desktop-pill-text.is-overflowing {
296
+ mask-image: linear-gradient(to right, transparent, #000 var(--desktop-fade-left), #000 calc(100% - 20px), transparent);
297
+ }
298
+
299
+ .desktop-pill:hover .desktop-pill-text.is-overflowing {
300
+ animation: .5s ease-out 1s forwards desktop-marquee-fade;
301
+ }
302
+
303
+ .desktop-pill:hover .desktop-pill-text.is-overflowing .desktop-pill-track {
304
+ animation: .6s cubic-bezier(.33,.66,.66,1) 1s forwards desktop-marquee-start;
305
+ }
306
+
307
+ .desktop-pill:hover .desktop-pill-text.is-overflowing .desktop-pill-track > span {
308
+ animation: desktop-marquee var(--scroll) linear 1s infinite;
309
+ }
310
+
311
+ @keyframes desktop-marquee {
312
+ to {
313
+ transform: translateX(var(--shift));
314
+ }
315
+ }
316
+
317
+ @keyframes desktop-marquee-start {
318
+ to {
319
+ transform: translateX(var(--ease));
320
+ }
321
+ }
322
+
323
+ @keyframes desktop-marquee-fade {
324
+ to {
325
+ --desktop-fade-left: 12px;
326
+ }
327
+ }
328
+
329
+ @media (prefers-reduced-motion: reduce) {
330
+ .desktop-pill:hover .desktop-pill-text.is-overflowing, .desktop-pill:hover .desktop-pill-text.is-overflowing .desktop-pill-track, .desktop-pill:hover .desktop-pill-text.is-overflowing .desktop-pill-track > span {
331
+ animation: none;
332
+ }
333
+ }
334
+
335
+ .desktop-content {
336
+ overflow: hidden;
337
+ display: flex;
338
+ flex-direction: column;
339
+ flex: 1;
340
+ min-width: 0;
341
+ min-height: 0;
342
+ }
343
+
344
+ .desktop-app {
345
+ overflow: auto;
346
+ background: var(--background);
347
+ border-top: 1px solid var(--border);
348
+ flex: 1;
349
+ min-height: 0;
350
+ }
351
+
352
+ .desktop-app[hidden] {
353
+ display: none;
354
+ }
355
+
356
+ .desktop-launcher {
357
+ position: absolute;
358
+ z-index: 5;
359
+ display: flex;
360
+ background: var(--desk);
361
+ flex-direction: column;
362
+ inset: 0;
363
+ }
364
+
365
+ .desktop-search {
366
+ background: none;
367
+ border: 0;
368
+ flex: 1;
369
+ min-width: 0;
370
+ height: 100%;
371
+ padding: 0 10px 0 6px;
372
+ font-size: 13px;
373
+ }
374
+
375
+ .desktop-search::placeholder {
376
+ color: var(--muted-foreground);
377
+ }
378
+
379
+ .desktop .desktop-search:focus {
380
+ outline: none;
381
+ }
382
+
383
+ .desktop-launcher-body {
384
+ overflow: auto;
385
+ flex: 1;
386
+ min-height: 0;
387
+ padding: 4px 8px 24px 40px;
388
+ }
389
+
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;
404
+ }
405
+
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;
419
+ }
420
+
421
+ .desktop-group {
422
+ display: flex;
423
+ flex-direction: column;
424
+ gap: 4px;
425
+ margin: 0 0 8px;
426
+ }
427
+
428
+ .desktop-group-title {
429
+ letter-spacing: .1em;
430
+ text-transform: uppercase;
431
+ color: var(--muted-foreground);
432
+ margin: 10px 0 2px 6px;
433
+ font-size: 10px;
434
+ font-weight: 600;
435
+ line-height: 16px;
436
+ }
437
+
438
+ .desktop-row {
439
+ position: relative;
440
+ display: flex;
441
+ color: var(--muted-foreground);
442
+ text-align: left;
443
+ background: none;
444
+ border: 0;
445
+ border-radius: 999px;
446
+ align-items: center;
447
+ width: 100%;
448
+ height: 28px;
449
+ padding: 0;
450
+ transition: translate .18s cubic-bezier(.3,1.2,.3,1);
451
+ }
452
+
453
+ .desktop-row-app, .desktop-row-main {
454
+ display: flex;
455
+ color: inherit;
456
+ text-align: left;
457
+ background: none;
458
+ border: 0;
459
+ border-radius: 999px;
460
+ align-items: center;
461
+ gap: 3px;
462
+ min-width: 0;
463
+ padding: 0 10px 0 3px;
464
+ }
465
+
466
+ .desktop-row-main {
467
+ flex: 1;
468
+ align-self: stretch;
469
+ }
470
+
471
+ .desktop-row.is-cursor {
472
+ color: var(--foreground);
473
+ translate: -6px;
474
+ }
475
+
476
+ .desktop-row-label {
477
+ overflow: hidden;
478
+ text-overflow: ellipsis;
479
+ white-space: nowrap;
480
+ flex: 1;
481
+ min-width: 0;
482
+ }
483
+
484
+ .desktop-row-note {
485
+ color: var(--muted-foreground);
486
+ white-space: nowrap;
487
+ padding-left: 8px;
488
+ font-size: 11px;
489
+ }
490
+
491
+ .desktop-row-window:hover .desktop-pill-icon {
492
+ opacity: 0;
493
+ transform: scale(.5);
494
+ }
495
+
496
+ .desktop-row-window:has(:focus-visible) .desktop-pill-icon {
497
+ opacity: 0;
498
+ transform: scale(.5);
499
+ }
500
+
501
+ .desktop-row-window:hover .desktop-pill-close {
502
+ opacity: 1;
503
+ pointer-events: auto;
504
+ transform: none;
505
+ }
506
+
507
+ .desktop-row-window:has(:focus-visible) .desktop-pill-close {
508
+ opacity: 1;
509
+ pointer-events: auto;
510
+ transform: none;
511
+ }
512
+
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
+ @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 {
531
+ transition: none;
532
+ }
533
+ }
534
+
535
+ .desktop-icon {
536
+ display: block;
537
+ flex-shrink: 0;
538
+ }
539
+
540
+ .desktop-muted {
541
+ color: var(--muted-foreground);
542
+ margin: 8px 0 8px 6px;
543
+ font-size: 11px;
544
+ }
545
+
546
+ .desktop-launcher-legend {
547
+ display: flex;
548
+ color: var(--muted-foreground);
549
+ flex-wrap: wrap;
550
+ flex-shrink: 0;
551
+ gap: 6px 16px;
552
+ padding: 10px 16px 12px;
553
+ font-size: 11px;
554
+ }
555
+
556
+ .desktop-launcher-legend span {
557
+ display: inline-flex;
558
+ align-items: center;
559
+ gap: 4px;
560
+ }
561
+
562
+ .desktop-launcher-legend kbd {
563
+ display: inline-grid;
564
+ background: var(--desktop-ink);
565
+ color: var(--foreground);
566
+ font: inherit;
567
+ border-radius: 999px;
568
+ place-items: center;
569
+ min-width: 18px;
570
+ height: 18px;
571
+ padding: 0 5px;
572
+ font-size: 10px;
573
+ }
574
+
575
+ .desktop-empty {
576
+ padding: 24px;
577
+ }
578
+
579
+ .desktop-error {
580
+ background: var(--muted);
581
+ color: var(--destructive);
582
+ padding: 8px 12px;
583
+ }
584
+
585
+ .desktop-error button {
586
+ margin-left: 12px;
587
+ }
588
+ }
589
+
590
+ /* src/gui/theme.css */
591
+ @layer theme, base, voss, components, utilities;
592
+
593
+ @layer voss {
594
+ :root, .desktop {
595
+ --background: oklch(.968 .004 75);
596
+ --surface: oklch(.992 .003 75);
597
+ --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);
612
+ --radius: 4px;
613
+ --row: 28px;
614
+ --control: 24px;
615
+ --gutter: 12px;
616
+ --font-sans: system-ui, -apple-system, "Segoe UI", sans-serif;
617
+ --font-mono: ui-monospace, Menlo, Consolas, monospace;
618
+ --buncss-light: initial;
619
+ --buncss-dark: ;
620
+ color-scheme: light;
621
+ }
622
+
623
+ @media (prefers-color-scheme: dark) {
624
+ :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);
641
+ --buncss-light: ;
642
+ --buncss-dark: initial;
643
+ color-scheme: dark;
644
+ }
645
+ }
646
+
647
+ :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);
664
+ --buncss-light: ;
665
+ --buncss-dark: initial;
666
+ color-scheme: dark;
667
+ }
668
+
669
+ *, *:before, *:after {
670
+ box-sizing: border-box;
671
+ }
672
+
673
+ html {
674
+ font: 13px / 20px var(--font-sans);
675
+ -webkit-font-smoothing: antialiased;
676
+ height: 100%;
677
+ }
678
+
679
+ body {
680
+ background: var(--desk);
681
+ color: var(--foreground);
682
+ height: 100%;
683
+ margin: 0;
684
+ }
685
+
686
+ #root {
687
+ display: flex;
688
+ overflow: hidden;
689
+ height: 100%;
690
+ }
691
+
692
+ * {
693
+ scrollbar-width: thin;
694
+ scrollbar-color: color-mix(in oklch, var(--foreground) 25%, transparent) transparent;
695
+ }
696
+
697
+ code, kbd, pre, samp {
698
+ font-family: var(--font-mono);
699
+ font-size: 12px;
700
+ line-height: 20px;
701
+ }
702
+
703
+ a {
704
+ color: var(--primary);
705
+ text-decoration: none;
706
+ }
707
+
708
+ a:hover {
709
+ text-decoration: underline;
710
+ }
711
+
712
+ :focus-visible {
713
+ outline: 2px solid color-mix(in oklch, var(--primary) 60%, transparent);
714
+ outline-offset: 1px;
715
+ }
716
+
717
+ [hidden] {
718
+ display: none !important;
719
+ }
720
+
721
+ h1, h2, h3 {
722
+ margin: 0;
723
+ font-weight: 600;
724
+ }
725
+
726
+ button, input, select, textarea {
727
+ font: inherit;
728
+ color: inherit;
729
+ }
730
+
731
+ .bv-muted {
732
+ color: var(--muted-foreground);
733
+ }
734
+
735
+ .bv-error {
736
+ color: var(--destructive);
737
+ }
738
+
739
+ .bv-button {
740
+ display: inline-flex;
741
+ height: var(--control);
742
+ border: 1px solid var(--input);
743
+ border-radius: var(--radius);
744
+ background: var(--muted);
745
+ cursor: pointer;
746
+ white-space: nowrap;
747
+ align-items: center;
748
+ gap: 6px;
749
+ padding: 0 10px;
750
+ }
751
+
752
+ .bv-button:hover {
753
+ background: var(--accent);
754
+ }
755
+
756
+ .bv-button:disabled {
757
+ opacity: .55;
758
+ cursor: default;
759
+ }
760
+
761
+ .bv-primary {
762
+ background: var(--primary);
763
+ color: var(--primary-foreground);
764
+ border-color: #0000;
765
+ }
766
+
767
+ .bv-primary:hover {
768
+ background: color-mix(in oklch, var(--primary) 88%, black);
769
+ }
770
+
771
+ .bv-quiet {
772
+ background: none;
773
+ border-color: #0000;
774
+ }
775
+
776
+ .bv-quiet:hover {
777
+ background: var(--accent);
778
+ }
779
+
780
+ .bv-danger {
781
+ background: var(--destructive);
782
+ color: #fff;
783
+ border-color: #0000;
784
+ }
785
+
786
+ .bv-input {
787
+ height: var(--control);
788
+ border: 1px solid var(--input);
789
+ border-radius: var(--radius);
790
+ background: var(--surface);
791
+ min-width: 0;
792
+ padding: 1px 8px;
793
+ }
794
+
795
+ .bv-input[aria-invalid="true"] {
796
+ border-color: var(--destructive);
797
+ }
798
+
799
+ .bv-textarea {
800
+ resize: vertical;
801
+ height: auto;
802
+ padding: 4px 8px;
803
+ }
804
+
805
+ .bv-select {
806
+ padding-right: 4px;
807
+ }
808
+
809
+ .bv-mono {
810
+ font-family: var(--font-mono);
811
+ font-size: 12px;
812
+ }
813
+
814
+ .bv-check {
815
+ accent-color: var(--primary);
816
+ width: 14px;
817
+ height: 14px;
818
+ margin: 0;
819
+ }
820
+
821
+ .bv-kbd {
822
+ display: inline-block;
823
+ border: 1px solid var(--border);
824
+ border-radius: var(--radius);
825
+ background: var(--surface);
826
+ text-align: center;
827
+ border-bottom-width: 2px;
828
+ min-width: 18px;
829
+ padding: 0 4px;
830
+ font-size: 11px;
831
+ line-height: 16px;
832
+ }
833
+
834
+ .bv-code {
835
+ border-radius: var(--radius);
836
+ background: color-mix(in oklch, var(--destructive) 12%, transparent);
837
+ padding: 0 4px;
838
+ }
839
+
840
+ .bv-panel {
841
+ border: 1px solid var(--border);
842
+ border-radius: var(--radius);
843
+ background: var(--surface);
844
+ }
845
+
846
+ .bv-panel-head {
847
+ display: flex;
848
+ height: var(--row);
849
+ padding: 0 var(--gutter);
850
+ border-bottom: 1px solid var(--border);
851
+ background: var(--chrome);
852
+ align-items: center;
853
+ gap: 8px;
854
+ }
855
+
856
+ .bv-panel-title {
857
+ flex: 1;
858
+ font-weight: 600;
859
+ }
860
+
861
+ .bv-panel-body {
862
+ padding: var(--gutter);
863
+ }
864
+
865
+ .bv-rows {
866
+ display: flex;
867
+ flex-direction: column;
868
+ }
869
+
870
+ .bv-row {
871
+ display: flex;
872
+ min-height: var(--row);
873
+ padding: 0 var(--gutter);
874
+ text-align: left;
875
+ background: none;
876
+ border: 0;
877
+ align-items: center;
878
+ gap: 8px;
879
+ width: 100%;
880
+ }
881
+
882
+ .bv-row-button {
883
+ cursor: pointer;
884
+ border-radius: var(--radius);
885
+ }
886
+
887
+ .bv-row-button:hover, .bv-row.bv-active {
888
+ background: var(--accent);
889
+ }
890
+
891
+ .bv-row-label {
892
+ flex: none;
893
+ }
894
+
895
+ .bv-row-hint {
896
+ overflow: hidden;
897
+ text-overflow: ellipsis;
898
+ white-space: nowrap;
899
+ color: var(--muted-foreground);
900
+ flex: 1;
901
+ min-width: 0;
902
+ }
903
+
904
+ .bv-table-wrap {
905
+ overflow: auto;
906
+ border: 1px solid var(--border);
907
+ border-radius: var(--radius);
908
+ }
909
+
910
+ .bv-table {
911
+ border-collapse: collapse;
912
+ width: 100%;
913
+ }
914
+
915
+ .bv-table th, .bv-table td {
916
+ height: var(--row);
917
+ padding: 0 var(--gutter);
918
+ text-align: left;
919
+ white-space: nowrap;
920
+ }
921
+
922
+ .bv-table th {
923
+ position: sticky;
924
+ background: var(--chrome);
925
+ border-bottom: 1px solid var(--border);
926
+ font-weight: 600;
927
+ top: 0;
928
+ }
929
+
930
+ .bv-table tbody tr:hover {
931
+ background: var(--muted);
932
+ }
933
+
934
+ .bv-overlay {
935
+ position: fixed;
936
+ z-index: 1000;
937
+ display: grid;
938
+ background: oklch(.2 .005 75 / 35%);
939
+ place-items: center;
940
+ inset: 0;
941
+ }
942
+
943
+ .bv-dialog {
944
+ display: flex;
945
+ border: 1px solid var(--border);
946
+ border-radius: var(--radius);
947
+ background: var(--popover);
948
+ outline: none;
949
+ flex-direction: column;
950
+ width: min(440px, 100vw - 32px);
951
+ max-height: calc(100vh - 64px);
952
+ }
953
+
954
+ .bv-dialog-head {
955
+ padding: var(--gutter);
956
+ border-bottom: 1px solid var(--border);
957
+ font-weight: 600;
958
+ }
959
+
960
+ .bv-dialog-body {
961
+ padding: var(--gutter);
962
+ overflow: auto;
963
+ }
964
+
965
+ .bv-dialog-body p {
966
+ margin: var(--gutter) 0 0;
967
+ }
968
+
969
+ .bv-dialog-foot {
970
+ display: flex;
971
+ padding: 8px var(--gutter);
972
+ border-top: 1px solid var(--border);
973
+ justify-content: flex-end;
974
+ gap: 8px;
975
+ }
976
+
977
+ .bv-cmd {
978
+ display: flex;
979
+ flex-direction: column;
980
+ min-height: 0;
981
+ }
982
+
983
+ .bv-cmd-input {
984
+ padding: 0 var(--gutter);
985
+ border: 0;
986
+ border-bottom: 1px solid var(--border);
987
+ outline: none;
988
+ background: none;
989
+ height: 36px;
990
+ }
991
+
992
+ .bv-cmd-list {
993
+ overflow: auto;
994
+ max-height: 60vh;
995
+ padding: 4px;
996
+ }
997
+
998
+ .bv-cmd-group {
999
+ color: var(--muted-foreground);
1000
+ padding: 8px 8px 2px;
1001
+ font-size: 11px;
1002
+ line-height: 16px;
1003
+ }
1004
+
1005
+ .bv-cmd-item {
1006
+ display: flex;
1007
+ height: var(--row);
1008
+ border-radius: var(--radius);
1009
+ cursor: pointer;
1010
+ align-items: center;
1011
+ gap: 8px;
1012
+ padding: 0 8px;
1013
+ }
1014
+
1015
+ .bv-cmd-item.bv-active {
1016
+ background: color-mix(in oklch, var(--primary) 15%, transparent);
1017
+ }
1018
+
1019
+ .bv-cmd-label {
1020
+ overflow: hidden;
1021
+ text-overflow: ellipsis;
1022
+ white-space: nowrap;
1023
+ flex: 1;
1024
+ min-width: 0;
1025
+ }
1026
+
1027
+ .bv-cmd-hint {
1028
+ overflow: hidden;
1029
+ text-overflow: ellipsis;
1030
+ white-space: nowrap;
1031
+ color: var(--muted-foreground);
1032
+ flex: none;
1033
+ max-width: 45%;
1034
+ font-size: 11px;
1035
+ }
1036
+
1037
+ .bv-cmd-empty {
1038
+ color: var(--muted-foreground);
1039
+ padding: 8px;
1040
+ }
1041
+
1042
+ .bv-runner {
1043
+ padding: 8px;
1044
+ }
1045
+
1046
+ .bv-runner > p {
1047
+ margin: 4px var(--gutter);
1048
+ }
1049
+
1050
+ .bv-runner-nav {
1051
+ margin: 0 0 4px;
1052
+ }
1053
+
1054
+ .bv-form {
1055
+ display: flex;
1056
+ gap: var(--gutter);
1057
+ flex-direction: column;
1058
+ padding: 4px;
1059
+ }
1060
+
1061
+ .bv-form-head {
1062
+ display: flex;
1063
+ flex-wrap: wrap;
1064
+ align-items: baseline;
1065
+ gap: 8px;
1066
+ }
1067
+
1068
+ .bv-form-name {
1069
+ font-size: 13px;
1070
+ font-weight: 600;
1071
+ }
1072
+
1073
+ .bv-field {
1074
+ display: flex;
1075
+ flex-direction: column;
1076
+ gap: 4px;
1077
+ }
1078
+
1079
+ .bv-field label {
1080
+ display: flex;
1081
+ align-items: baseline;
1082
+ gap: 6px;
1083
+ font-weight: 500;
1084
+ }
1085
+
1086
+ .bv-field-inline {
1087
+ flex-direction: row-reverse;
1088
+ justify-content: flex-end;
1089
+ align-items: center;
1090
+ gap: 8px;
1091
+ }
1092
+
1093
+ .bv-required {
1094
+ color: var(--destructive);
1095
+ margin-left: 1px;
1096
+ }
1097
+
1098
+ .bv-type {
1099
+ color: var(--muted-foreground);
1100
+ font-size: 11px;
1101
+ font-weight: 400;
1102
+ font-family: var(--font-mono);
1103
+ }
1104
+
1105
+ .bv-form-actions {
1106
+ display: flex;
1107
+ align-items: center;
1108
+ gap: 8px;
1109
+ }
1110
+
1111
+ .bv-output {
1112
+ margin: 0;
1113
+ }
1114
+
1115
+ .bv-json {
1116
+ padding: 8px var(--gutter);
1117
+ border: 1px solid var(--border);
1118
+ border-radius: var(--radius);
1119
+ background: var(--muted);
1120
+ white-space: pre-wrap;
1121
+ overflow-wrap: anywhere;
1122
+ }
1123
+
1124
+ .bv-error {
1125
+ margin: 0;
1126
+ }
1127
+
1128
+ .gui-page {
1129
+ max-width: 960px;
1130
+ margin: 0 auto;
1131
+ padding: 24px 16px;
1132
+ }
1133
+
1134
+ .gui-list {
1135
+ display: flex;
1136
+ flex-direction: column;
1137
+ gap: 8px;
1138
+ }
1139
+
1140
+ .gui-card {
1141
+ display: flex;
1142
+ border: 1px solid var(--border);
1143
+ border-radius: var(--radius);
1144
+ background: var(--card);
1145
+ align-items: center;
1146
+ gap: 12px;
1147
+ padding: 10px 12px;
1148
+ }
1149
+
1150
+ .gui-card h2 {
1151
+ flex: 1;
1152
+ font-size: 14px;
1153
+ }
1154
+
1155
+ .gui-card .gui-links {
1156
+ display: flex;
1157
+ gap: 10px;
1158
+ }
1159
+
1160
+ .pk-gap {
1161
+ flex: 1;
1162
+ }
1163
+
1164
+ .pk-pane {
1165
+ display: flex;
1166
+ flex-direction: column;
1167
+ flex: 1;
1168
+ min-height: 0;
1169
+ }
1170
+
1171
+ .pk-fade {
1172
+ animation: .14s ease-out pk-in;
1173
+ }
1174
+
1175
+ @keyframes pk-in {
1176
+ from {
1177
+ opacity: 0;
1178
+ transform: translateY(2px);
1179
+ }
1180
+
1181
+ to {
1182
+ opacity: 1;
1183
+ transform: none;
1184
+ }
1185
+ }
1186
+
1187
+ .pk-strip {
1188
+ display: flex;
1189
+ padding: 0 6px 0 var(--gutter);
1190
+ border-bottom: 1px solid var(--border);
1191
+ background: var(--chrome);
1192
+ flex: none;
1193
+ align-items: center;
1194
+ gap: 6px;
1195
+ height: 36px;
1196
+ }
1197
+
1198
+ .pk-strip-title {
1199
+ font-weight: 600;
1200
+ }
1201
+
1202
+ .pk-list {
1203
+ list-style: none;
1204
+ overflow: auto;
1205
+ flex: 1;
1206
+ min-height: 0;
1207
+ margin: 0;
1208
+ padding: 4px 0;
1209
+ }
1210
+
1211
+ .pk-list > li {
1212
+ margin: 0;
1213
+ }
1214
+
1215
+ .pk-tile {
1216
+ display: grid;
1217
+ background: color-mix(in oklch, oklch(.68 .14 var(--h, 250)) 20%, var(--surface));
1218
+ color: color-mix(in oklch, oklch(.62 .15 var(--h, 250)) 85%, var(--foreground));
1219
+ box-shadow: inset 0 0 0 1px color-mix(in oklch, oklch(.65 .14 var(--h, 250)) 28%, transparent);
1220
+ border-radius: 7px;
1221
+ flex: none;
1222
+ place-items: center;
1223
+ width: 30px;
1224
+ height: 30px;
1225
+ font-size: 13px;
1226
+ font-weight: 600;
1227
+ }
1228
+
1229
+ .pk-go {
1230
+ display: grid;
1231
+ color: var(--muted-foreground);
1232
+ opacity: 0;
1233
+ flex: none;
1234
+ place-items: center;
1235
+ transition: opacity .1s, transform .1s;
1236
+ transform: translateX(-3px);
1237
+ }
1238
+
1239
+ .is-active > .pk-go, .pk-baba.is-active .pk-go, .pk-folder.is-active .pk-go {
1240
+ opacity: 1;
1241
+ transform: none;
1242
+ }
1243
+
1244
+ .is-ghost {
1245
+ pointer-events: none;
1246
+ }
1247
+
1248
+ .pk-ghost-line {
1249
+ display: block;
1250
+ background: var(--muted);
1251
+ animation: 1.2s ease-in-out infinite alternate pk-breathe;
1252
+ border-radius: 4px;
1253
+ height: 8px;
1254
+ margin: 4px 0;
1255
+ }
1256
+
1257
+ .pk-ghost-line.is-sub {
1258
+ opacity: .7;
1259
+ height: 6px;
1260
+ }
1261
+
1262
+ @keyframes pk-breathe {
1263
+ from {
1264
+ opacity: .55;
1265
+ }
1266
+
1267
+ to {
1268
+ opacity: 1;
1269
+ }
1270
+ }
1271
+
1272
+ .pk-empty .pk-primary {
1273
+ margin-top: 12px;
1274
+ }
1275
+
1276
+ .pk-alert {
1277
+ padding: 6px var(--gutter);
1278
+ border-top: 1px solid color-mix(in oklch, var(--destructive) 30%, transparent);
1279
+ background: color-mix(in oklch, var(--destructive) 8%, var(--surface));
1280
+ color: var(--destructive);
1281
+ overflow-wrap: anywhere;
1282
+ margin: 0;
1283
+ font-size: 12px;
1284
+ }
1285
+
1286
+ .pk-list + .pk-alert, .pk-strip + .pk-alert {
1287
+ border-top: 0;
1288
+ border-bottom: 1px solid color-mix(in oklch, var(--destructive) 30%, transparent);
1289
+ }
1290
+
1291
+ .pk-path {
1292
+ display: flex;
1293
+ border-bottom: 1px solid var(--border);
1294
+ flex: none;
1295
+ align-items: center;
1296
+ gap: 8px;
1297
+ min-height: 36px;
1298
+ padding: 0 6px 0 8px;
1299
+ }
1300
+
1301
+ .pk-crumbs {
1302
+ display: flex;
1303
+ overflow: hidden;
1304
+ white-space: nowrap;
1305
+ flex: 1;
1306
+ align-items: center;
1307
+ min-width: 0;
1308
+ }
1309
+
1310
+ .pk-crumb-wrap:last-child {
1311
+ min-width: 0;
1312
+ }
1313
+
1314
+ .pk-crumb-wrap:last-child .pk-crumb {
1315
+ display: block;
1316
+ overflow: hidden;
1317
+ text-overflow: ellipsis;
1318
+ line-height: 22px;
1319
+ }
1320
+
1321
+ .pk-crumb-wrap {
1322
+ display: inline-flex;
1323
+ align-items: center;
1324
+ }
1325
+
1326
+ .pk-crumb {
1327
+ display: inline-flex;
1328
+ border-radius: var(--radius);
1329
+ color: var(--muted-foreground);
1330
+ font: inherit;
1331
+ cursor: pointer;
1332
+ background: none;
1333
+ border: 0;
1334
+ align-items: center;
1335
+ height: 22px;
1336
+ padding: 0 4px;
1337
+ }
1338
+
1339
+ button.pk-crumb:hover {
1340
+ background: var(--accent);
1341
+ color: var(--foreground);
1342
+ }
1343
+
1344
+ .pk-crumb.is-here {
1345
+ color: var(--foreground);
1346
+ cursor: default;
1347
+ font-weight: 600;
1348
+ }
1349
+
1350
+ .pk-crumb-sep {
1351
+ color: var(--muted-foreground);
1352
+ opacity: .5;
1353
+ padding: 0 1px;
1354
+ }
1355
+
1356
+ .pk-filter {
1357
+ display: flex;
1358
+ height: var(--control);
1359
+ border: 1px solid var(--input);
1360
+ border-radius: var(--radius);
1361
+ background: var(--background);
1362
+ color: var(--muted-foreground);
1363
+ flex: none;
1364
+ align-items: center;
1365
+ gap: 6px;
1366
+ width: 150px;
1367
+ padding: 0 8px;
1368
+ transition: width .14s, border-color .1s;
1369
+ }
1370
+
1371
+ .pk-filter:focus-within {
1372
+ border-color: color-mix(in oklch, var(--primary) 55%, transparent);
1373
+ color: var(--foreground);
1374
+ width: 190px;
1375
+ }
1376
+
1377
+ .pk-filter input {
1378
+ outline: 0;
1379
+ background: none;
1380
+ border: 0;
1381
+ flex: 1;
1382
+ min-width: 0;
1383
+ height: 100%;
1384
+ padding: 0;
1385
+ }
1386
+
1387
+ .pk-folders {
1388
+ transition: opacity .12s;
1389
+ }
1390
+
1391
+ .pk-folders.is-loading {
1392
+ opacity: .5;
1393
+ }
1394
+
1395
+ .pk-folder {
1396
+ position: relative;
1397
+ display: flex;
1398
+ height: var(--row);
1399
+ border-radius: var(--radius);
1400
+ color: inherit;
1401
+ text-align: left;
1402
+ cursor: pointer;
1403
+ background: none;
1404
+ border: 0;
1405
+ align-items: center;
1406
+ gap: 8px;
1407
+ width: calc(100% - 8px);
1408
+ margin: 0 4px;
1409
+ padding: 0 8px;
1410
+ }
1411
+
1412
+ .pk-folder.is-active {
1413
+ background: var(--accent);
1414
+ }
1415
+
1416
+ .pk-folder.is-active:before {
1417
+ content: "";
1418
+ position: absolute;
1419
+ background: var(--primary);
1420
+ border-radius: 1px;
1421
+ width: 2px;
1422
+ top: 6px;
1423
+ bottom: 6px;
1424
+ left: -4px;
1425
+ }
1426
+
1427
+ .pk-folder-icon {
1428
+ display: grid;
1429
+ color: var(--muted-foreground);
1430
+ flex: none;
1431
+ place-items: center;
1432
+ }
1433
+
1434
+ .pk-folder.is-baba .pk-folder-icon {
1435
+ color: var(--primary);
1436
+ }
1437
+
1438
+ .pk-folder.is-baba .pk-folder-name {
1439
+ font-weight: 600;
1440
+ }
1441
+
1442
+ .pk-folder.is-up .pk-folder-name {
1443
+ color: var(--muted-foreground);
1444
+ }
1445
+
1446
+ .pk-folder-name {
1447
+ overflow: hidden;
1448
+ text-overflow: ellipsis;
1449
+ white-space: nowrap;
1450
+ flex: 1;
1451
+ min-width: 0;
1452
+ }
1453
+
1454
+ .pk-folder-name mark {
1455
+ background: color-mix(in oklch, var(--primary) 22%, transparent);
1456
+ color: inherit;
1457
+ border-radius: 2px;
1458
+ }
1459
+
1460
+ .pk-folder-note {
1461
+ color: var(--muted-foreground);
1462
+ font-size: 11px;
1463
+ }
1464
+
1465
+ .pk-pill {
1466
+ color: var(--primary);
1467
+ background: color-mix(in oklch, var(--primary) 12%, transparent);
1468
+ border-radius: 8px;
1469
+ flex: none;
1470
+ padding: 0 6px;
1471
+ font-size: 11px;
1472
+ line-height: 16px;
1473
+ }
1474
+
1475
+ .pk-pill.is-known {
1476
+ color: var(--success);
1477
+ background: color-mix(in oklch, var(--success) 13%, transparent);
1478
+ }
1479
+
1480
+ .pk-none {
1481
+ padding: 12px var(--gutter);
1482
+ color: var(--muted-foreground);
1483
+ }
1484
+
1485
+ .pk-dock {
1486
+ display: flex;
1487
+ padding: 10px var(--gutter);
1488
+ border-top: 1px solid var(--border);
1489
+ background: var(--chrome);
1490
+ flex-direction: column;
1491
+ flex: none;
1492
+ gap: 8px;
1493
+ }
1494
+
1495
+ .pk-dock-line {
1496
+ display: flex;
1497
+ align-items: center;
1498
+ gap: 8px;
1499
+ min-width: 0;
1500
+ }
1501
+
1502
+ .pk-dock-line:empty {
1503
+ display: none;
1504
+ }
1505
+
1506
+ .pk-dock-icon {
1507
+ display: grid;
1508
+ color: var(--muted-foreground);
1509
+ flex: none;
1510
+ place-items: center;
1511
+ }
1512
+
1513
+ .pk-dock.is-baba .pk-dock-icon {
1514
+ color: var(--primary);
1515
+ }
1516
+
1517
+ .pk-dock.is-known .pk-dock-icon {
1518
+ color: var(--success);
1519
+ }
1520
+
1521
+ .pk-dock-text {
1522
+ color: var(--muted-foreground);
1523
+ overflow: hidden;
1524
+ text-overflow: ellipsis;
1525
+ white-space: nowrap;
1526
+ min-width: 0;
1527
+ }
1528
+
1529
+ .pk-here {
1530
+ color: var(--foreground);
1531
+ font-family: var(--font-mono);
1532
+ font-size: 12px;
1533
+ }
1534
+
1535
+ .pk-dock-text code {
1536
+ color: var(--foreground);
1537
+ font-size: 12px;
1538
+ }
1539
+
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
+ .pk-primary {
1590
+ display: inline-flex;
1591
+ border-radius: var(--radius);
1592
+ background: var(--primary);
1593
+ color: var(--primary-foreground);
1594
+ cursor: pointer;
1595
+ white-space: nowrap;
1596
+ border: 0;
1597
+ align-items: center;
1598
+ gap: 6px;
1599
+ height: 26px;
1600
+ padding: 0 6px 0 10px;
1601
+ transition: background .1s;
1602
+ font-weight: 500;
1603
+ }
1604
+
1605
+ .pk-empty .pk-primary {
1606
+ padding-right: 10px;
1607
+ }
1608
+
1609
+ .pk-primary:hover {
1610
+ background: color-mix(in oklch, var(--primary) 88%, var(--foreground));
1611
+ }
1612
+
1613
+ .pk-primary:disabled {
1614
+ opacity: .5;
1615
+ cursor: default;
1616
+ }
1617
+
1618
+ .pk-kbd {
1619
+ display: inline-grid;
1620
+ border: 1px solid var(--border);
1621
+ border-radius: var(--radius);
1622
+ background: var(--surface);
1623
+ color: var(--foreground);
1624
+ font-family: var(--font-sans);
1625
+ border-bottom-width: 2px;
1626
+ place-items: center;
1627
+ min-width: 18px;
1628
+ height: 18px;
1629
+ padding: 0 4px;
1630
+ font-size: 10px;
1631
+ line-height: 1;
1632
+ }
1633
+
1634
+ .pk-kbd.is-on-primary {
1635
+ background: color-mix(in oklch, var(--primary-foreground) 18%, transparent);
1636
+ color: var(--primary-foreground);
1637
+ border: 0;
1638
+ }
1639
+
1640
+ .pk-spin {
1641
+ display: inline-block;
1642
+ border: 1.5px solid color-mix(in oklch, var(--muted-foreground) 35%, transparent);
1643
+ border-top-color: var(--muted-foreground);
1644
+ animation: .7s linear infinite pk-turn;
1645
+ border-radius: 50%;
1646
+ width: 12px;
1647
+ height: 12px;
1648
+ }
1649
+
1650
+ @keyframes pk-turn {
1651
+ to {
1652
+ transform: rotate(360deg);
1653
+ }
1654
+ }
1655
+
1656
+ @media (max-width: 560px) {
1657
+ .pk-dock-line:not(.is-say) {
1658
+ flex-wrap: wrap;
1659
+ }
1660
+
1661
+ .pk-field, .pk-field.is-wide {
1662
+ width: 100%;
1663
+ }
1664
+
1665
+ .pk-filter, .pk-filter:focus-within {
1666
+ width: 120px;
1667
+ }
1668
+ }
1669
+
1670
+ @media (prefers-reduced-motion: reduce) {
1671
+ .pk-fade, .pk-ghost-line, .pk-spin {
1672
+ animation: none;
1673
+ }
1674
+
1675
+ .pk-go, .pk-filter, .pk-folders {
1676
+ transition: none;
1677
+ }
1678
+ }
1679
+
1680
+ .gui-view {
1681
+ position: fixed;
1682
+ overflow: auto;
1683
+ background: var(--background);
1684
+ inset: 0;
1685
+ }
1686
+
1687
+ .gui-notice {
1688
+ border-bottom: 1px solid var(--destructive);
1689
+ background: color-mix(in oklch, var(--destructive) 10%, var(--background));
1690
+ margin: 0;
1691
+ padding: 12px 16px;
1692
+ }
1693
+
1694
+ .gui-failure {
1695
+ white-space: pre-wrap;
1696
+ font-family: var(--font-mono);
1697
+ margin: 8px 0 0;
1698
+ font-size: 12px;
1699
+ }
1700
+
1701
+ .gui-section {
1702
+ margin: 16px 0;
1703
+ }
1704
+
1705
+ .gui-section h2 {
1706
+ color: var(--muted-foreground);
1707
+ text-transform: uppercase;
1708
+ letter-spacing: .04em;
1709
+ margin-bottom: 8px;
1710
+ font-size: 13px;
1711
+ }
1712
+
1713
+ .gui-entity {
1714
+ display: grid;
1715
+ grid-template-columns: 56px 1fr auto;
1716
+ border-bottom: 1px solid var(--border);
1717
+ align-items: start;
1718
+ gap: 8px;
1719
+ padding: 6px 0;
1720
+ }
1721
+
1722
+ .gui-entity code {
1723
+ color: var(--muted-foreground);
1724
+ }
1725
+
1726
+ .gui-parts {
1727
+ display: flex;
1728
+ flex-wrap: wrap;
1729
+ gap: 6px 12px;
1730
+ }
1731
+
1732
+ .gui-part {
1733
+ display: inline-flex;
1734
+ align-items: baseline;
1735
+ gap: 6px;
1736
+ }
1737
+
1738
+ .gui-part b {
1739
+ font-weight: 600;
1740
+ }
1741
+
1742
+ .gui-part pre {
1743
+ display: inline;
1744
+ white-space: pre-wrap;
1745
+ margin: 0;
1746
+ font-size: 12px;
1747
+ }
1748
+
1749
+ .gui-filter {
1750
+ display: flex;
1751
+ align-items: center;
1752
+ gap: 8px;
1753
+ margin-bottom: 8px;
1754
+ }
1755
+
1756
+ .gui-fade {
1757
+ animation: .1s ease-out gui-appear;
1758
+ }
1759
+
1760
+ @keyframes gui-appear {
1761
+ from {
1762
+ opacity: 0;
1763
+ }
1764
+
1765
+ to {
1766
+ opacity: 1;
1767
+ }
1768
+ }
1769
+
1770
+ @media (prefers-reduced-motion: reduce) {
1771
+ .gui-fade {
1772
+ animation: none;
1773
+ }
1774
+ }
1775
+
1776
+ .gui-app {
1777
+ max-width: 1100px;
1778
+ padding: 16px 20px 32px;
1779
+ }
1780
+
1781
+ .gui-app > h2 {
1782
+ margin: 16px 0 4px;
1783
+ font-size: 13px;
1784
+ }
1785
+
1786
+ .gui-choices {
1787
+ display: flex;
1788
+ 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
+ }
1811
+
1812
+ .bv-row {
1813
+ display: flex;
1814
+ align-items: center;
1815
+ gap: 8px;
1816
+ margin: 8px 0;
1817
+ }
1818
+
1819
+ .bv-between {
1820
+ justify-content: space-between;
1821
+ }
1822
+
1823
+ .bv-object-card {
1824
+ display: flex;
1825
+ border: 1px solid var(--border);
1826
+ border-radius: var(--radius);
1827
+ background: var(--surface);
1828
+ overflow: hidden;
1829
+ flex-direction: column;
1830
+ font-size: 12px;
1831
+ line-height: 16px;
1832
+ }
1833
+
1834
+ .bv-object-card-head {
1835
+ display: flex;
1836
+ background: var(--chrome);
1837
+ border-bottom: 1px solid var(--border);
1838
+ align-items: baseline;
1839
+ gap: 8px;
1840
+ min-width: 0;
1841
+ height: 28px;
1842
+ padding: 4px 10px;
1843
+ font-size: 13px;
1844
+ line-height: 20px;
1845
+ }
1846
+
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;
1854
+ }
1855
+
1856
+ .bv-object-card-head .bv-muted {
1857
+ margin-left: auto;
1858
+ font-size: 11px;
1859
+ }
1860
+
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;
1867
+ }
1868
+
1869
+ .bv-object-fields > div {
1870
+ display: contents;
1871
+ }
1872
+
1873
+ .bv-object-fields dt {
1874
+ color: var(--muted-foreground);
1875
+ overflow: hidden;
1876
+ text-overflow: ellipsis;
1877
+ white-space: nowrap;
1878
+ }
1879
+
1880
+ .bv-object-fields dd {
1881
+ overflow: hidden;
1882
+ text-overflow: ellipsis;
1883
+ white-space: nowrap;
1884
+ min-width: 0;
1885
+ margin: 0;
1886
+ }
1887
+
1888
+ .bv-object-fields code {
1889
+ font-size: 11px;
1890
+ }
1891
+
1892
+ .bv-object-num {
1893
+ font-variant-numeric: tabular-nums;
1894
+ }
1895
+
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;
1902
+ }
1903
+
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;
1912
+ }
1913
+
1914
+ .bv-object-ref:hover {
1915
+ background: color-mix(in oklch, var(--primary) 12%, transparent);
1916
+ }
1917
+
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;
1926
+ }
1927
+
1928
+ .bv-object-rider {
1929
+ border-top: 1px solid var(--border);
1930
+ }
1931
+
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;
1941
+ }
1942
+
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;
1950
+ }
1951
+
1952
+ .bv-object-actions .bv-button {
1953
+ height: 20px;
1954
+ padding: 0 8px;
1955
+ font-size: 11px;
1956
+ }
1957
+
1958
+ .bv-object-needs {
1959
+ border: 1px dashed var(--border);
1960
+ border-radius: var(--radius);
1961
+ color: var(--muted-foreground);
1962
+ height: 20px;
1963
+ padding: 0 6px;
1964
+ font-size: 11px;
1965
+ line-height: 20px;
1966
+ }
1967
+
1968
+ .bv-object-actions .is-open {
1969
+ border-color: var(--primary);
1970
+ }
1971
+
1972
+ .bv-object-form {
1973
+ display: flex;
1974
+ border-top: 1px solid var(--border);
1975
+ background: var(--background);
1976
+ flex-direction: column;
1977
+ gap: 6px;
1978
+ padding: 8px 10px;
1979
+ }
1980
+
1981
+ .bv-object-form-head {
1982
+ display: flex;
1983
+ align-items: baseline;
1984
+ gap: 8px;
1985
+ font-size: 12px;
1986
+ }
1987
+
1988
+ .bv-object-field {
1989
+ display: grid;
1990
+ grid-template-columns: 90px 1fr;
1991
+ align-items: center;
1992
+ gap: 8px;
1993
+ font-size: 12px;
1994
+ }
1995
+
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;
2005
+ }
2006
+
2007
+ .bv-object-loose h4 {
2008
+ display: flex;
2009
+ gap: 8px;
2010
+ margin: 0 0 6px;
2011
+ font-size: 12px;
2012
+ }
2013
+
2014
+ .bv-proofs {
2015
+ display: grid;
2016
+ grid-template-columns: 260px minmax(0, 1fr);
2017
+ height: 100%;
2018
+ min-height: 0;
2019
+ }
2020
+
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;
2029
+ }
2030
+
2031
+ .bv-rail-strip {
2032
+ position: sticky;
2033
+ z-index: 1;
2034
+ display: flex;
2035
+ background: var(--chrome);
2036
+ border-bottom: 1px solid var(--border);
2037
+ flex-shrink: 0;
2038
+ align-items: center;
2039
+ gap: 8px;
2040
+ height: 28px;
2041
+ padding: 0 8px;
2042
+ top: 0;
2043
+ }
2044
+
2045
+ .bv-rail-count {
2046
+ overflow: hidden;
2047
+ text-overflow: ellipsis;
2048
+ color: var(--muted-foreground);
2049
+ font-variant-numeric: tabular-nums;
2050
+ white-space: nowrap;
2051
+ min-width: 0;
2052
+ margin-left: auto;
2053
+ font-size: 11px;
2054
+ }
2055
+
2056
+ .bv-rail-strip .bv-button {
2057
+ flex-shrink: 0;
2058
+ height: 20px;
2059
+ padding: 0 6px;
2060
+ font-size: 11px;
2061
+ }
2062
+
2063
+ .bv-lenses {
2064
+ display: inline-flex;
2065
+ gap: 2px;
2066
+ }
2067
+
2068
+ .bv-lens {
2069
+ border-radius: var(--radius);
2070
+ color: var(--muted-foreground);
2071
+ font: inherit;
2072
+ cursor: pointer;
2073
+ background: none;
2074
+ border: 0;
2075
+ height: 20px;
2076
+ padding: 0 8px;
2077
+ font-size: 12px;
2078
+ }
2079
+
2080
+ .bv-lens:hover {
2081
+ color: var(--foreground);
2082
+ }
2083
+
2084
+ .bv-lens.is-open {
2085
+ background: var(--accent);
2086
+ color: var(--foreground);
2087
+ }
2088
+
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;
2095
+ 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;
2104
+ height: 28px;
2105
+ padding: 0 12px;
2106
+ }
2107
+
2108
+ .bv-stage-card:hover, .bv-object-col:hover {
2109
+ background: var(--accent);
2110
+ }
2111
+
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);
2115
+ }
2116
+
2117
+ .bv-stage-text, .bv-object-head {
2118
+ display: flex;
2119
+ flex: 1;
2120
+ align-items: baseline;
2121
+ gap: 8px;
2122
+ min-width: 0;
2123
+ }
2124
+
2125
+ .bv-stage-text b, .bv-object-head b {
2126
+ white-space: nowrap;
2127
+ font-weight: 500;
2128
+ }
2129
+
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
+ }
2136
+
2137
+ .bv-object-count {
2138
+ color: var(--muted-foreground);
2139
+ font-variant-numeric: tabular-nums;
2140
+ font-size: 11px;
2141
+ }
2142
+
2143
+ .bv-proof-dot {
2144
+ border-radius: 50%;
2145
+ flex: none;
2146
+ width: 8px;
2147
+ height: 8px;
2148
+ margin: 0;
2149
+ }
2150
+
2151
+ .bv-pane {
2152
+ display: flex;
2153
+ overflow: auto;
2154
+ scrollbar-gutter: stable;
2155
+ flex-direction: column;
2156
+ min-width: 0;
2157
+ min-height: 0;
2158
+ }
2159
+
2160
+ .bv-pane-body {
2161
+ margin: 0;
2162
+ padding: 12px;
2163
+ }
2164
+
2165
+ .bv-film-head {
2166
+ 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;
2174
+ }
2175
+
2176
+ .bv-film-head > div {
2177
+ min-width: 0;
2178
+ }
2179
+
2180
+ .bv-film-head h2, .bv-film-head h3 {
2181
+ margin: 0;
2182
+ font-size: 13px;
2183
+ font-weight: 600;
2184
+ line-height: 20px;
2185
+ }
2186
+
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);
2197
+ overflow: hidden;
2198
+ text-overflow: ellipsis;
2199
+ white-space: nowrap;
2200
+ flex: none;
2201
+ max-width: 40%;
2202
+ height: 20px;
2203
+ margin-left: auto;
2204
+ padding: 0 6px;
2205
+ font-size: 11px;
2206
+ font-weight: 500;
2207
+ line-height: 20px;
2208
+ }
2209
+
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;
2216
+ margin: 0;
2217
+ padding: 4px 12px;
2218
+ }
2219
+
2220
+ .bv-proof-chip {
2221
+ display: inline-flex;
2222
+ border-radius: var(--radius);
2223
+ color: var(--muted-foreground);
2224
+ font: inherit;
2225
+ cursor: pointer;
2226
+ overflow: hidden;
2227
+ text-overflow: ellipsis;
2228
+ 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
+ }
2238
+
2239
+ .bv-chip-text {
2240
+ overflow: hidden;
2241
+ text-overflow: ellipsis;
2242
+ white-space: nowrap;
2243
+ min-width: 0;
2244
+ }
2245
+
2246
+ .bv-proof-chip:hover {
2247
+ background: var(--accent);
2248
+ color: var(--foreground);
2249
+ }
2250
+
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);
2255
+ }
2256
+
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;
2264
+ font-size: 11px;
2265
+ line-height: 16px;
2266
+ }
2267
+
2268
+ .bv-object-sheet dt {
2269
+ color: var(--muted-foreground);
2270
+ opacity: .8;
2271
+ }
2272
+
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;
2280
+ }
2281
+
2282
+ .bv-object-sheet code {
2283
+ font-size: 11px;
2284
+ }
2285
+
2286
+ .bv-object-map {
2287
+ display: flex;
2288
+ flex-direction: column;
2289
+ }
2290
+
2291
+ .bv-object-cards {
2292
+ display: grid;
2293
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
2294
+ gap: 8px;
2295
+ }
2296
+
2297
+ .bv-object-loose {
2298
+ margin-top: 16px;
2299
+ }
2300
+
2301
+ .bv-film > .bv-film-head {
2302
+ border-top: 1px solid var(--border);
2303
+ }
2304
+
2305
+ .bv-film {
2306
+ --detail-row: 21px;
2307
+ display: flex;
2308
+ flex-direction: column;
2309
+ }
2310
+
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;
2317
+ }
2318
+
2319
+ .bv-verdict {
2320
+ text-align: center;
2321
+ min-width: 56px;
2322
+ }
2323
+
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;
2331
+ }
2332
+
2333
+ .bv-film-controls {
2334
+ 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;
2347
+ }
2348
+
2349
+ .bv-film-controls .bv-film-play {
2350
+ justify-content: center;
2351
+ min-width: 56px;
2352
+ }
2353
+
2354
+ .bv-film-controls .is-hidden {
2355
+ visibility: hidden;
2356
+ }
2357
+
2358
+ .bv-film-controls input[type="range"] {
2359
+ accent-color: var(--primary);
2360
+ flex: 1;
2361
+ min-width: 80px;
2362
+ }
2363
+
2364
+ .bv-film-time {
2365
+ font-variant-numeric: tabular-nums;
2366
+ white-space: nowrap;
2367
+ text-align: right;
2368
+ flex-shrink: 0;
2369
+ min-width: 116px;
2370
+ font-size: 11px;
2371
+ }
2372
+
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;
2380
+ gap: 2px;
2381
+ height: 26px;
2382
+ padding: 0 12px;
2383
+ }
2384
+
2385
+ .bv-film-frame {
2386
+ cursor: pointer;
2387
+ background: var(--muted);
2388
+ opacity: .7;
2389
+ border: 0;
2390
+ border-radius: 2px;
2391
+ flex: none;
2392
+ width: 10px;
2393
+ height: 16px;
2394
+ padding: 0;
2395
+ }
2396
+
2397
+ .bv-film-body {
2398
+ display: grid;
2399
+ grid-template-columns: minmax(0, 1fr) 300px;
2400
+ align-items: start;
2401
+ }
2402
+
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;
2410
+ }
2411
+
2412
+ .bv-film-frame-box {
2413
+ padding: 12px;
2414
+ }
2415
+
2416
+ .bv-film-probe {
2417
+ position: absolute;
2418
+ visibility: hidden;
2419
+ pointer-events: none;
2420
+ top: 0;
2421
+ left: 0;
2422
+ right: 0;
2423
+ }
2424
+
2425
+ .bv-film-probe > div {
2426
+ position: absolute;
2427
+ top: 0;
2428
+ left: 0;
2429
+ right: 0;
2430
+ }
2431
+
2432
+ .bv-film-detail {
2433
+ display: flex;
2434
+ border-left: 1px solid var(--border);
2435
+ flex-direction: column;
2436
+ gap: 8px;
2437
+ min-height: 100%;
2438
+ margin: 0;
2439
+ padding: 8px 12px;
2440
+ }
2441
+
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;
2448
+ }
2449
+
2450
+ .bv-film-steps li, .bv-film-checks li {
2451
+ border-top: 1px solid var(--border);
2452
+ overflow: hidden;
2453
+ text-overflow: ellipsis;
2454
+ white-space: nowrap;
2455
+ padding: 2px 0;
2456
+ }
2457
+
2458
+ .bv-film-steps li:first-child, .bv-film-checks li:first-child {
2459
+ border-top: 0;
2460
+ }
2461
+
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
+ }
2471
+ }
2472
+
2473
+ .bv-proof-dot.is-passed {
2474
+ background: var(--success);
2475
+ }
2476
+
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);
2480
+ }
2481
+
2482
+ .bv-proof-dot.is-unproven {
2483
+ background: var(--warning);
2484
+ }
2485
+
2486
+ .bv-proof-dot.is-undrawn {
2487
+ border: 1.5px dashed var(--muted-foreground);
2488
+ background: none;
2489
+ }
2490
+
2491
+ .bv-proof-dot.is-sketch {
2492
+ border: 1.5px solid var(--muted-foreground);
2493
+ background: none;
2494
+ }
2495
+
2496
+ .bv-proofs-output {
2497
+ white-space: pre-wrap;
2498
+ background: var(--muted);
2499
+ color: var(--muted-foreground);
2500
+ border-radius: 8px;
2501
+ margin: 8px 0 0;
2502
+ padding: 8px 10px;
2503
+ font-size: 11px;
2504
+ line-height: 1.4;
2505
+ }
2506
+
2507
+ .bv-proofs-output.is-bad {
2508
+ color: var(--destructive);
2509
+ }
2510
+
2511
+ .bv-verdict.is-passed {
2512
+ background: color-mix(in oklch, var(--success) 18%, transparent);
2513
+ color: var(--success);
2514
+ }
2515
+
2516
+ .bv-verdict.is-failed {
2517
+ background: color-mix(in oklch, var(--destructive) 18%, transparent);
2518
+ color: var(--destructive);
2519
+ }
2520
+
2521
+ .bv-verdict.is-sketch {
2522
+ background: var(--muted);
2523
+ color: var(--muted-foreground);
2524
+ }
2525
+
2526
+ .bv-verdict.is-live {
2527
+ background: color-mix(in oklch, var(--primary) 18%, transparent);
2528
+ color: var(--primary);
2529
+ }
2530
+
2531
+ .bv-film-frame.is-ok {
2532
+ background: var(--success);
2533
+ }
2534
+
2535
+ .bv-film-frame.is-bad {
2536
+ background: var(--destructive);
2537
+ }
2538
+
2539
+ .bv-film-frame:hover {
2540
+ opacity: 1;
2541
+ }
2542
+
2543
+ .bv-film-frame.is-here {
2544
+ opacity: 1;
2545
+ outline: 2px solid var(--foreground);
2546
+ outline-offset: 1px;
2547
+ }
2548
+
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;
2557
+ font-size: 11px;
2558
+ line-height: 16px;
2559
+ }
2560
+
2561
+ .bv-film-mark {
2562
+ display: inline-block;
2563
+ width: 16px;
2564
+ font-weight: 700;
2565
+ }
2566
+
2567
+ .bv-film-checks .is-ok .bv-film-mark {
2568
+ color: var(--success);
2569
+ }
2570
+
2571
+ .bv-film-checks .is-bad, .bv-film-error {
2572
+ color: var(--destructive);
2573
+ }
2574
+
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;
2585
+ }
2586
+
2587
+ .bv-state-list {
2588
+ display: flex;
2589
+ flex-direction: column;
2590
+ gap: 4px;
2591
+ }
2592
+
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;
2603
+ }
2604
+
2605
+ .bv-state-part b {
2606
+ margin-right: 4px;
2607
+ }
2608
+
2609
+ .bv-state-part code {
2610
+ color: var(--muted-foreground);
2611
+ font-size: 12px;
2612
+ }
2613
+ }
2614
+
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
+ }
2627
+
2628
+ .bv-maker-head h2 {
2629
+ margin: 0;
2630
+ font-size: 15px;
2631
+ }
2632
+
2633
+ .bv-maker-list {
2634
+ list-style: none;
2635
+ margin: 0;
2636
+ padding: 0;
2637
+ }
2638
+
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
+ }
2647
+
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
+ }
2657
+
2658
+ .bv-maker-open:hover b {
2659
+ text-decoration: underline;
2660
+ }
2661
+
2662
+ .bv-maker-facts {
2663
+ display: flex;
2664
+ white-space: nowrap;
2665
+ align-items: center;
2666
+ gap: 10px;
2667
+ }
2668
+
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;
2677
+ }
2678
+
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;
2686
+ }
2687
+
2688
+ .bv-lab-app {
2689
+ flex: 1;
2690
+ min-width: 0;
2691
+ min-height: 0;
2692
+ }
2693
+
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;
2701
+ }
2702
+
2703
+ .bv-lab-frame.is-playing {
2704
+ border-color: var(--primary);
2705
+ }
2706
+
2707
+ .bv-lab-bare {
2708
+ padding: 12px;
2709
+ }
2710
+
2711
+ .bv-lab-views {
2712
+ list-style: none;
2713
+ display: flex;
2714
+ flex-direction: column;
2715
+ align-items: stretch;
2716
+ margin: 0;
2717
+ padding: 0;
2718
+ }
2719
+
2720
+ .bv-lab-views .is-open {
2721
+ font-weight: 600;
2722
+ }
2723
+
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;
2737
+ }
2738
+
2739
+ .bv-bar-head {
2740
+ border-top: 0;
2741
+ border-bottom: 1px solid var(--border);
2742
+ }
2743
+
2744
+ .bv-bar-head .bv-popover {
2745
+ top: calc(100% + 4px);
2746
+ bottom: auto;
2747
+ }
2748
+
2749
+ .bv-bar-slot {
2750
+ position: relative;
2751
+ display: flex;
2752
+ }
2753
+
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
+ }
2768
+
2769
+ .bv-bar-icon {
2770
+ opacity: .85;
2771
+ flex: none;
2772
+ width: 14px;
2773
+ height: 14px;
2774
+ }
2775
+
2776
+ .bv-bar-item b {
2777
+ font-weight: 600;
2778
+ }
2779
+
2780
+ .bv-bar-time {
2781
+ font-variant-numeric: tabular-nums;
2782
+ text-align: right;
2783
+ min-width: 44px;
2784
+ }
2785
+
2786
+ .bv-bar-item:hover, .bv-bar-item.is-open {
2787
+ background: var(--accent);
2788
+ }
2789
+
2790
+ .bv-bar-item.is-ok {
2791
+ color: var(--success);
2792
+ }
2793
+
2794
+ .bv-bar-item.is-bad {
2795
+ color: var(--destructive);
2796
+ }
2797
+
2798
+ .bv-bar-item.is-warn {
2799
+ color: var(--warning);
2800
+ }
2801
+
2802
+ .bv-bar-item.is-here {
2803
+ color: var(--primary);
2804
+ }
2805
+
2806
+ .bv-bar-item .bv-muted {
2807
+ color: var(--muted-foreground);
2808
+ font-weight: 400;
2809
+ }
2810
+
2811
+ .bv-bar-slot {
2812
+ align-items: stretch;
2813
+ }
2814
+
2815
+ .bv-lab-answer .bv-button .bv-bar-icon {
2816
+ margin-right: 4px;
2817
+ }
2818
+
2819
+ .bv-bar-back {
2820
+ color: var(--muted-foreground);
2821
+ padding: 0 6px;
2822
+ }
2823
+
2824
+ .bv-bar-back:hover {
2825
+ color: var(--foreground);
2826
+ }
2827
+
2828
+ .bv-bar-play {
2829
+ justify-content: center;
2830
+ width: 30px;
2831
+ padding: 0;
2832
+ }
2833
+
2834
+ .bv-bar-play.is-on {
2835
+ color: var(--primary);
2836
+ }
2837
+
2838
+ .bv-bar-gap {
2839
+ flex: 1;
2840
+ }
2841
+
2842
+ .bv-bar-summary {
2843
+ margin: 0 0 4px;
2844
+ }
2845
+
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
+ }
2863
+
2864
+ .bv-popover.is-right {
2865
+ left: auto;
2866
+ right: 0;
2867
+ }
2868
+
2869
+ .bv-popover.is-wide {
2870
+ width: 460px;
2871
+ }
2872
+
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
+ }
2881
+
2882
+ .bv-popover h3:first-child {
2883
+ margin-top: 0;
2884
+ }
2885
+
2886
+ .bv-lab-transport {
2887
+ display: flex;
2888
+ align-items: center;
2889
+ gap: 10px;
2890
+ }
2891
+
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
+ }
2899
+
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
+ }
2905
+
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
+ }
2910
+
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
+ }
2914
+
2915
+ .bv-lab-scenario-row {
2916
+ display: flex;
2917
+ align-items: center;
2918
+ gap: 6px;
2919
+ }
2920
+
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
+ }
2928
+
2929
+ .bv-lab-answer {
2930
+ display: flex;
2931
+ gap: 4px;
2932
+ margin-top: 4px;
2933
+ }
2934
+
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
+ }
2945
+
2946
+ .bv-lab-changes ul {
2947
+ list-style: none;
2948
+ margin: 2px 0 0 8px;
2949
+ padding: 0;
2950
+ }
2951
+
2952
+ .bv-film-checks .is-warn, .bv-film-checks .is-warn .bv-film-mark {
2953
+ color: var(--warning);
2954
+ }
2955
+
2956
+ .bv-lab-knobs {
2957
+ display: flex;
2958
+ flex-wrap: wrap;
2959
+ gap: 10px;
2960
+ margin: 6px 0;
2961
+ }
2962
+
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
+ }
2972
+
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
+ }
2978
+
2979
+ .bv-lab-story-wrap {
2980
+ border-top: 1px solid var(--border);
2981
+ margin-top: 8px;
2982
+ padding-top: 8px;
2983
+ }
2984
+
2985
+ .bv-lab-story {
2986
+ list-style: none;
2987
+ margin: 4px 0 0;
2988
+ padding: 0;
2989
+ }
2990
+
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
+ }
2999
+
3000
+ .bv-lab-story > li:first-child {
3001
+ border-top: 0;
3002
+ }
3003
+
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
+ }
3007
+
3008
+ .bv-lab-story > li.is-here {
3009
+ color: var(--primary);
3010
+ font-weight: 500;
3011
+ }
3012
+
3013
+ .bv-lab-story > li.is-ok .bv-film-mark {
3014
+ color: var(--success);
3015
+ }
3016
+
3017
+ .bv-lab-story > li.is-bad {
3018
+ color: var(--destructive);
3019
+ }
3020
+
3021
+ .bv-lab-story > li.is-warn {
3022
+ color: var(--warning);
3023
+ }
3024
+
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
+ }
3031
+
3032
+ .bv-lab-story-head {
3033
+ margin: 0 0 2px;
3034
+ }
3035
+
3036
+ .bv-lab-take {
3037
+ margin-top: 4px;
3038
+ }
3039
+
3040
+ .bv-lab-tree {
3041
+ list-style: none;
3042
+ margin: 2px 0 0 10px;
3043
+ padding: 0;
3044
+ font-size: 11px;
3045
+ }
3046
+
3047
+ .bv-lab-expect {
3048
+ margin: 4px 0;
3049
+ }
3050
+
3051
+ .bv-lab-model .bv-object-map {
3052
+ margin-bottom: 6px;
3053
+ }