@volter/browser-substrate 0.1.103 → 0.1.105

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 (160) hide show
  1. package/catalog/demand-input.json +133 -0
  2. package/dist/boot-screen.d.ts +2 -0
  3. package/dist/boot-screen.d.ts.map +1 -1
  4. package/dist/boot-screen.js +1 -1
  5. package/dist/boot-screen.js.map +1 -1
  6. package/dist/cli/archive.d.ts +1 -0
  7. package/dist/cli/archive.d.ts.map +1 -1
  8. package/dist/cli/archive.js +4 -4
  9. package/dist/cli/archive.js.map +1 -1
  10. package/dist/cli/build.d.ts +5 -1
  11. package/dist/cli/build.d.ts.map +1 -1
  12. package/dist/cli/build.js +21 -2
  13. package/dist/cli/build.js.map +1 -1
  14. package/dist/cli/cache-root.d.ts +7 -0
  15. package/dist/cli/cache-root.d.ts.map +1 -0
  16. package/dist/cli/cache-root.js +24 -0
  17. package/dist/cli/cache-root.js.map +1 -0
  18. package/dist/cli/companions.d.ts +1 -1
  19. package/dist/cli/companions.d.ts.map +1 -1
  20. package/dist/cli/companions.js +30 -16
  21. package/dist/cli/companions.js.map +1 -1
  22. package/dist/cli/dependency-plan-build.d.ts +4 -0
  23. package/dist/cli/dependency-plan-build.d.ts.map +1 -1
  24. package/dist/cli/dependency-plan-build.js +111 -30
  25. package/dist/cli/dependency-plan-build.js.map +1 -1
  26. package/dist/cli/docker-build.d.ts +1 -0
  27. package/dist/cli/docker-build.d.ts.map +1 -1
  28. package/dist/cli/docker-build.js +4 -4
  29. package/dist/cli/docker-build.js.map +1 -1
  30. package/dist/cli/dry-run.d.ts +4 -4
  31. package/dist/cli/dry-run.d.ts.map +1 -1
  32. package/dist/cli/dry-run.js +10 -9
  33. package/dist/cli/dry-run.js.map +1 -1
  34. package/dist/cli/generated-code.d.ts +2 -1
  35. package/dist/cli/generated-code.d.ts.map +1 -1
  36. package/dist/cli/generated-code.js +46 -16
  37. package/dist/cli/generated-code.js.map +1 -1
  38. package/dist/cli/host-build.d.ts +1 -0
  39. package/dist/cli/host-build.d.ts.map +1 -1
  40. package/dist/cli/host-build.js +10 -9
  41. package/dist/cli/host-build.js.map +1 -1
  42. package/dist/cli/host-managers.d.ts +3 -1
  43. package/dist/cli/host-managers.d.ts.map +1 -1
  44. package/dist/cli/host-managers.js +7 -3
  45. package/dist/cli/host-managers.js.map +1 -1
  46. package/dist/cli/image-layers.d.ts.map +1 -1
  47. package/dist/cli/image-layers.js +5 -2
  48. package/dist/cli/image-layers.js.map +1 -1
  49. package/dist/cli/main.d.ts +5 -1
  50. package/dist/cli/main.d.ts.map +1 -1
  51. package/dist/cli/main.js +97 -34
  52. package/dist/cli/main.js.map +1 -1
  53. package/dist/cli/pack-publication.d.ts +2 -2
  54. package/dist/cli/pack-publication.d.ts.map +1 -1
  55. package/dist/cli/pack-publication.js +3 -3
  56. package/dist/cli/pack-publication.js.map +1 -1
  57. package/dist/cli/package-pack.d.ts +1 -1
  58. package/dist/cli/package-pack.d.ts.map +1 -1
  59. package/dist/cli/package-pack.js +7 -4
  60. package/dist/cli/package-pack.js.map +1 -1
  61. package/dist/cli/package-packs.d.ts +1 -0
  62. package/dist/cli/package-packs.d.ts.map +1 -1
  63. package/dist/cli/package-packs.js +84 -14
  64. package/dist/cli/package-packs.js.map +1 -1
  65. package/dist/cli/plan-tarballs.d.ts +1 -0
  66. package/dist/cli/plan-tarballs.d.ts.map +1 -1
  67. package/dist/cli/plan-tarballs.js +6 -3
  68. package/dist/cli/plan-tarballs.js.map +1 -1
  69. package/dist/cli/preparation-memory.d.ts +17 -0
  70. package/dist/cli/preparation-memory.d.ts.map +1 -0
  71. package/dist/cli/preparation-memory.js +367 -0
  72. package/dist/cli/preparation-memory.js.map +1 -0
  73. package/dist/cli/project-build.d.ts +1 -0
  74. package/dist/cli/project-build.d.ts.map +1 -1
  75. package/dist/cli/project-build.js +100 -71
  76. package/dist/cli/project-build.js.map +1 -1
  77. package/dist/cli/provision-catalog.d.ts +49 -0
  78. package/dist/cli/provision-catalog.d.ts.map +1 -0
  79. package/dist/cli/provision-catalog.js +72 -0
  80. package/dist/cli/provision-catalog.js.map +1 -0
  81. package/dist/cli/provision-demand.d.ts +45 -0
  82. package/dist/cli/provision-demand.d.ts.map +1 -0
  83. package/dist/cli/provision-demand.js +208 -0
  84. package/dist/cli/provision-demand.js.map +1 -0
  85. package/dist/cli/rolldown-binding.d.ts +1 -1
  86. package/dist/cli/rolldown-binding.d.ts.map +1 -1
  87. package/dist/cli/rolldown-binding.js +8 -4
  88. package/dist/cli/rolldown-binding.js.map +1 -1
  89. package/dist/cli/serve.d.ts +3 -0
  90. package/dist/cli/serve.d.ts.map +1 -1
  91. package/dist/cli/serve.js +9 -2
  92. package/dist/cli/serve.js.map +1 -1
  93. package/dist/index.d.ts +2 -0
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +75 -31
  96. package/dist/index.js.map +1 -1
  97. package/dist/origin-reset.d.ts +4 -0
  98. package/dist/origin-reset.d.ts.map +1 -0
  99. package/dist/origin-reset.js +76 -0
  100. package/dist/origin-reset.js.map +1 -0
  101. package/dist/program-dom.d.ts +2 -0
  102. package/dist/program-dom.d.ts.map +1 -1
  103. package/dist/program-dom.js +11 -1
  104. package/dist/program-dom.js.map +1 -1
  105. package/dist/program-types.d.ts +2 -0
  106. package/dist/program-types.d.ts.map +1 -1
  107. package/dist/shell/assets/browser-opfs-filesystem-worker-CmF6UKMW.js +3 -0
  108. package/dist/shell/assets/browser-sandbox-bridge-C8nlSsT2.js +237 -0
  109. package/dist/shell/assets/{filesystem-host-DJbFuokb.js → filesystem-host-BzPlXSri.js} +1 -1
  110. package/dist/shell/assets/filesystem-host-Pq9IHKRx.js +3 -0
  111. package/dist/shell/assets/filesystem-worker-CC3pSXUP.js +5 -0
  112. package/dist/shell/assets/{fork-worker-BXY2kfdX.js → fork-worker-4YKQ4KTo.js} +1 -1
  113. package/dist/shell/assets/{node-execution-worker-7e8e0c5321ca0d10.js → node-execution-worker-3ddf5efbaa427e9d.js} +8 -8
  114. package/dist/shell/assets/{sandbox-bMeKqKBn.js → sandbox-mhFzIWaQ.js} +1 -1
  115. package/dist/shell/assets/{shell-DLIQ6jHu.js → shell-BZbhxnju.js} +763 -757
  116. package/dist/shell/assets/worker-BmHEnCyv.js +816 -0
  117. package/dist/shell/assets/{worker-program-worker-B4OcKVtV.js → worker-program-worker-DueMwljE.js} +10 -10
  118. package/dist/shell/brand/fonts/Geist-Variable.woff2 +0 -0
  119. package/dist/shell/brand/fonts/GeistMono-Variable.woff2 +0 -0
  120. package/dist/shell/brand/fonts/InstrumentSerif-Italic.woff2 +0 -0
  121. package/dist/shell/brand/fonts/InstrumentSerif-Regular.woff2 +0 -0
  122. package/dist/shell/brand/icons/app-window.svg +1 -0
  123. package/dist/shell/brand/icons/at-sign.svg +1 -0
  124. package/dist/shell/brand/icons/box.svg +1 -0
  125. package/dist/shell/brand/icons/chevron-right.svg +1 -0
  126. package/dist/shell/brand/icons/folder.svg +1 -0
  127. package/dist/shell/brand/icons/info.svg +1 -0
  128. package/dist/shell/brand/icons/key-round.svg +1 -0
  129. package/dist/shell/brand/icons/link.svg +1 -0
  130. package/dist/shell/brand/icons/monitor.svg +1 -0
  131. package/dist/shell/brand/icons/plus.svg +1 -0
  132. package/dist/shell/brand/icons/rotate-ccw.svg +1 -0
  133. package/dist/shell/brand/icons/share-2.svg +1 -0
  134. package/dist/shell/brand/icons/square-arrow-out-up-right.svg +1 -0
  135. package/dist/shell/brand/icons/terminal.svg +1 -0
  136. package/dist/shell/brand/icons/x.svg +1 -0
  137. package/dist/shell/brand/substrate.svg +1 -0
  138. package/dist/shell/brand/tokens.css +211 -0
  139. package/dist/shell/brand/wordmark.svg +1 -0
  140. package/dist/shell/index.html +5 -3
  141. package/dist/shell/node-execution-worker.js +16 -13
  142. package/dist/shell/node-host.html +2 -0
  143. package/dist/shell/python-execution-worker.js +15 -12
  144. package/dist/shell/python-host.html +2 -0
  145. package/dist/shell/python-runtime-snapshot.bin +0 -0
  146. package/dist/shell/python-runtime-snapshot.json +1 -1
  147. package/dist/shell/sandbox.html +4 -2
  148. package/dist/toolbar-styles.generated.d.ts +1 -1
  149. package/dist/toolbar-styles.generated.d.ts.map +1 -1
  150. package/dist/toolbar-styles.generated.js +1 -1
  151. package/dist/toolbar-styles.generated.js.map +1 -1
  152. package/dist/toolbar.d.ts.map +1 -1
  153. package/dist/toolbar.js +3 -1
  154. package/dist/toolbar.js.map +1 -1
  155. package/package.json +1 -1
  156. package/dist/shell/assets/browser-opfs-filesystem-worker-k2CPzPBU.js +0 -3
  157. package/dist/shell/assets/browser-sandbox-bridge-BJbQoc4f.js +0 -237
  158. package/dist/shell/assets/filesystem-host-yMcJuvmT.js +0 -3
  159. package/dist/shell/assets/filesystem-worker-BbsBhZ9p.js +0 -5
  160. package/dist/shell/assets/worker-Ce8bBwSJ.js +0 -816
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><rect x="2" y="4" width="20" height="16"/><path d="M10 4v4"/><path d="M2 8h20"/><path d="M6 4v4"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M12 3l8 4.5v9L12 21l-8-4.5v-9z"/><path d="M4 7.5L12 12l8-4.5M12 12v9"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M9 5l7 7-7 7"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M3 5h6l2 2h10v12H3z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 11v6"/><rect x="11" y="6.5" width="2" height="2" fill="currentColor" stroke="none"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"/><rect x="15.3" y="6.3" width="2.4" height="2.4" fill="currentColor" stroke="none"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M9 15l6-6"/><path d="M11 6l2-2a4.2 4.2 0 0 1 6 6l-2 2M13 18l-2 2a4.2 4.2 0 0 1-6-6l2-2"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><rect x="3" y="4" width="18" height="13"/><path d="M8 21h8M12 17v4"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M12 4v16M4 12h16"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M4 12a8 8 0 1 0 2.3-5.6"/><path d="M4 4v5h5"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" x2="15.42" y1="13.51" y2="17.49"/><line x1="15.41" x2="8.59" y1="6.51" y2="10.49"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M21 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h6"/><path d="m21 3-9 9"/><path d="M15 3h6v6"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><rect x="3" y="4" width="18" height="16"/><path d="M7 9l3 3-3 3M12 15h5"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="64" height="64" role="img" aria-label="browser substrate"><title>browser substrate</title><path d="M58.3 66.4 L39.7 77.4 L60.3 77.4 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M58.3 66.4 L41.7 66.4 L39.7 77.4 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M41.7 66.4 L25.2 81.5 L39.7 77.4 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M60.3 77.4 L39.7 77.4 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M70.1 69.7 L58.3 66.4 L60.3 77.4 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M70.1 69.7 L60.3 77.4 L74.8 81.5 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M74.8 81.5 L60.3 77.4 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M39.7 77.4 L25.2 81.5 L49.9 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M41.7 66.4 L29.9 69.7 L25.2 81.5 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M50 72 L41.7 66.4 L58.3 66.4 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M60.3 77.4 L50 84.3 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M39.7 77.4 L49.9 84.3 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 72 L29.9 69.7 L41.7 66.4 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50.1 72 L58.3 66.4 L70.1 69.7 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M74.8 81.5 L50 84.3 L50.1 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M25.2 81.5 L49.9 84.3 L49.9 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 72 L50 72 L41.7 66.4 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50.1 72 L50 72 L58.3 66.4 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M29.9 69.7 L25.2 87.1 L25.2 81.5 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M70.1 74.3 L70.1 69.7 L74.8 81.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M74.8 87.1 L74.8 81.5 L50.1 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M25.2 81.5 L25.2 87.1 L49.9 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 72 L49.9 72 L29.9 69.7 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50.1 72 L50.1 72 L70.1 69.7 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M74.8 87.1 L50.1 84.3 L50.1 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M25.2 87.1 L50 84.3 L49.9 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M49.9 72 L29.9 74.3 L29.9 69.7 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50.1 72 L70.1 69.7 L70.1 74.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M70.1 74.3 L74.8 81.5 L74.8 87.1 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M29.9 69.7 L29.9 74.3 L25.2 87.1 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M49.9 72 L49.9 72 L29.9 74.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 72 L50.1 72 L70.1 74.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M60.3 91.2 L50.1 84.3 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M39.7 91.2 L50 84.3 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M49.9 72 L50 72 L41.7 77.6 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 72 L50 72 L58.3 77.6 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M60.3 91.2 L74.8 87.1 L50.1 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M25.2 87.1 L39.7 91.2 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M49.9 72 L41.7 77.6 L29.9 74.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 72 L70.1 74.3 L58.3 77.6 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M58.3 77.6 L70.1 74.3 L74.8 87.1 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M29.9 74.3 L39.7 91.2 L25.2 87.1 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M39.7 91.2 L60.3 91.2 L50 84.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 72 L58.3 77.6 L41.7 77.6 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M58.3 77.6 L74.8 87.1 L60.3 91.2 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M29.9 74.3 L41.7 77.6 L39.7 91.2 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M41.7 77.6 L58.3 77.6 L60.3 91.2 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M41.7 77.6 L60.3 91.2 L39.7 91.2 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><clipPath id="browser-substrate-brand-0-g"><polygon points="50 7 60.5 8.7 70 13.5 77.5 21 82.3 30.5 84 41 82.3 51.5 77.5 61 70 68.5 60.5 73.3 50 75 39.5 73.3 30 68.5 22.5 61 17.7 51.5 16 41 17.7 30.5 22.5 21 30 13.5 39.5 8.7"/></clipPath><polygon points="50 7 60.5 8.7 70 13.5 77.5 21 82.3 30.5 84 41 82.3 51.5 77.5 61 70 68.5 60.5 73.3 50 75 39.5 73.3 30 68.5 22.5 61 17.7 51.5 16 41 17.7 30.5 22.5 21 30 13.5 39.5 8.7" fill="#f7f6f1"/><g clip-path="url(#browser-substrate-brand-0-g)"><rect x="0" y="55" width="100" height="60" fill="#5d6970"/><path d="M79.9 50.5 L79.9 49 L72.3 47.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50.9 43 L51 48.8 L42.2 46.8 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M50.9 43 L57.2 46.6 L51 48.8 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M33.9 42 L35.7 47.4 L27.4 49 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M33.9 42 L42.2 46.8 L35.7 47.4 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M64.8 37.5 L72.3 47.5 L65 46.1 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M64.8 37.5 L65 46.1 L57.2 46.6 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M20.1 50.5 L27.4 48 L27.4 49 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M72.3 43.8 L79.9 50.5 L72.3 47.5 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M27.4 48 L33.9 42 L27.4 49 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M64.8 37.5 L72.3 43.8 L72.3 47.5 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M50.9 43 L57.4 42 L57.2 46.6 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M42 35.8 L50.9 43 L42.2 46.8 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M33.9 42 L42 35.8 L42.2 46.8 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M57.4 42 L64.8 37.5 L57.2 46.6 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M26.6 47.3 L27.4 48 L20.1 50.5 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M73.1 47.2 L79.9 50.5 L72.3 43.8 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M26.6 47.3 L33.9 42 L27.4 48 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M73.1 47.2 L72.3 43.8 L64.8 37.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M58.5 44.4 L57.4 42 L50.9 43 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M20.1 52 L26.6 47.3 L20.1 50.5 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M58.5 44.4 L64.8 37.5 L57.4 42 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M73.1 47.2 L79.9 52 L79.9 50.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M43.4 27.9 L50.9 43 L42 35.8 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M43.4 27.9 L42 35.8 L33.9 42 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M26.6 47.3 L35 38.5 L33.9 42 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M51.1 41.6 L58.5 44.4 L50.9 43 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M65.3 38.6 L73.1 47.2 L64.8 37.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M58.5 44.4 L65.3 38.6 L64.8 37.5 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M35 38.5 L43.4 27.9 L33.9 42 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M43.4 27.9 L51.1 41.6 L50.9 43 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M20.1 53.5 L26.6 47.3 L20.1 52 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M79.9 53.5 L79.9 52 L73.1 47.2 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M35.5 44.5 L35 38.5 L26.6 47.3 Z" fill="#16252c" stroke="#16252c" stroke-width="0.5"/><path d="M65.1 51.9 L73.1 47.2 L65.3 38.6 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M65.1 51.9 L65.3 38.6 L58.5 44.4 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M51.2 45.7 L58.5 44.4 L51.1 41.6 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M20.1 53.5 L26.3 52.4 L26.6 47.3 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M51.2 45.7 L51.1 41.6 L43.4 27.9 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M72.3 53 L79.9 53.5 L73.1 47.2 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M35.5 44.5 L43.4 27.9 L35 38.5 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M65.1 51.9 L72.3 53 L73.1 47.2 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M26.3 52.4 L35.5 44.5 L26.6 47.3 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M58.7 51.5 L65.1 51.9 L58.5 44.4 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M51.2 45.7 L58.7 51.5 L58.5 44.4 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M42.2 39.9 L51.2 45.7 L43.4 27.9 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M35.5 44.5 L42.2 39.9 L43.4 27.9 Z" fill="#f7f6f1" stroke="#16252c" stroke-width="0.7"/><path d="M72.4 55 L79.9 53.5 L72.3 53 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M27.6 55 L26.3 52.4 L20.1 53.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M72.4 55 L72.3 53 L65.1 51.9 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M57.5 55 L65.1 51.9 L58.7 51.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M57.5 55 L58.7 51.5 L51.2 45.7 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M27.6 55 L35.5 44.5 L26.3 52.4 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M42.5 55 L51.2 45.7 L42.2 39.9 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M42.5 55 L42.2 39.9 L35.5 44.5 Z" fill="#5d6970" stroke="#5d6970" stroke-width="0.5"/><path d="M57.5 55 L65 55 L65.1 51.9 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M65 55 L72.4 55 L65.1 51.9 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M42.5 55 L50 55 L51.2 45.7 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M50 55 L57.5 55 L51.2 45.7 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M27.6 55 L35.1 55 L35.5 44.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><path d="M35.1 55 L42.5 55 L35.5 44.5 Z" fill="#d8eb6a" stroke="#d8eb6a" stroke-width="0.5"/><rect x="70.7" y="44.5" width="1.6" height="1.6" fill="#5d6970"/><rect x="23.4" y="41.3" width="1.6" height="1.6" fill="#5d6970"/><rect x="68.0" y="33.7" width="1.6" height="1.6" fill="#5d6970"/><rect x="52.9" y="48.4" width="1.6" height="1.6" fill="#5d6970"/><rect x="51.2" y="45.9" width="1.6" height="1.6" fill="#5d6970"/><rect x="27.6" y="35.7" width="1.6" height="1.6" fill="#5d6970"/><rect x="44.6" y="16.5" width="1.6" height="1.6" fill="#5d6970"/><rect x="51.1" y="16.7" width="1.6" height="1.6" fill="#5d6970"/><rect x="25.8" y="39.4" width="1.6" height="1.6" fill="#5d6970"/><rect x="20.8" y="45.3" width="1.6" height="1.6" fill="#5d6970"/><rect x="43.1" y="51.2" width="1.6" height="1.6" fill="#5d6970"/><rect x="53.8" y="15.9" width="1.6" height="1.6" fill="#5d6970"/><rect x="24.3" y="49.7" width="1.6" height="1.6" fill="#5d6970"/><rect x="48.5" y="51.2" width="1.6" height="1.6" fill="#5d6970"/><rect x="47.7" y="44.9" width="1.6" height="1.6" fill="#5d6970"/><rect x="50.8" y="35.4" width="1.6" height="1.6" fill="#5d6970"/><rect x="65.3" y="47.1" width="1.6" height="1.6" fill="#5d6970"/><rect x="70.9" y="19.9" width="1.6" height="1.6" fill="#5d6970"/><rect x="32.0" y="40.5" width="1.6" height="1.6" fill="#5d6970"/><rect x="37.1" y="44.9" width="1.6" height="1.6" fill="#5d6970"/><rect x="58.2" y="28.6" width="1.6" height="1.6" fill="#5d6970"/></g><polygon points="50 7 60.5 8.7 70 13.5 77.5 21 82.3 30.5 84 41 82.3 51.5 77.5 61 70 68.5 60.5 73.3 50 75 39.5 73.3 30 68.5 22.5 61 17.7 51.5 16 41 17.7 30.5 22.5 21 30 13.5 39.5 8.7" fill="none" stroke="#16252c" stroke-width="4.2"/><path d="M28.9 29.1 Q31.3 18.6 41.5 15.8" fill="none" stroke="#fff" stroke-width="2.4"/></svg>
@@ -0,0 +1,211 @@
1
+ /* Volter brand tokens. Source: @volter-ai/brand (tokens/volter-tokens.mjs). Products read the
2
+ semantic roles (--volter-surface-*, --volter-text-*, --volter-status-*, ...); --volter-color-* are primitives. */
3
+ @font-face { font-family: "Geist"; src: url("/brand/fonts/Geist-Variable.woff2") format("woff2"); font-weight: 100 900; font-display: swap; }
4
+ @font-face { font-family: "Geist Mono"; src: url("/brand/fonts/GeistMono-Variable.woff2") format("woff2"); font-weight: 100 900; font-display: swap; }
5
+ @font-face { font-family: "Instrument Serif"; src: url("/brand/fonts/InstrumentSerif-Regular.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
6
+ @font-face { font-family: "Instrument Serif"; src: url("/brand/fonts/InstrumentSerif-Italic.woff2") format("woff2"); font-weight: 400; font-style: italic; font-display: swap; }
7
+ :root {
8
+ --volter-color-ink: #16252c;
9
+ --volter-color-paper: #f7f6f1;
10
+ --volter-color-surface: #fbfaf7;
11
+ --volter-color-stone: #eeede7;
12
+ --volter-color-rule: #d9dad3;
13
+ --volter-color-muted: #5d6970;
14
+ --volter-color-faint: #a3aaa9;
15
+ --volter-color-lime: #e4f09c;
16
+ --volter-color-lime-strong: #d8eb6a;
17
+ --volter-color-lilac: #dcd5e9;
18
+ --volter-color-lilac-strong: #c9bce3;
19
+ --volter-color-stone-strong: #dedbd2;
20
+ --volter-color-orange: #ff6a1f;
21
+ --volter-color-live: #5f9a2e;
22
+ --volter-color-live-soft: #eef4c4;
23
+ --volter-color-healthy: #3f7a55;
24
+ --volter-color-healthy-soft: #e8f0e6;
25
+ --volter-color-attention: #c7641a;
26
+ --volter-color-attention-soft: #fbede0;
27
+ --volter-color-danger: #d24a1f;
28
+ --volter-color-danger-soft: #fbebe4;
29
+ --volter-color-black: #000000;
30
+ --volter-color-white: #ffffff;
31
+ --volter-color-night: #0f1a1f;
32
+ --volter-color-ink-raised: #1d2d34;
33
+ --volter-color-ink-glow: #22343c;
34
+ --volter-color-stone-light: #f2f1eb;
35
+ --volter-color-stone-deep: #efeee8;
36
+ --volter-color-stone-inset: #e7e6df;
37
+ --volter-color-stone-disabled: #dad9d1;
38
+ --volter-color-rule-soft: #e9e8e1;
39
+ --volter-color-rule-strong: #c4c5bc;
40
+ --volter-color-track: #b3b6ae;
41
+ --volter-color-subdued: #66727a;
42
+ --volter-color-dim: #808b8f;
43
+ --volter-color-disabled: #8a918f;
44
+ --volter-color-paper-dim: #f3f2ec;
45
+ --volter-color-ink-muted: #a9b0ad;
46
+ --volter-color-slate: #4f6574;
47
+ --volter-color-slate-soft: #e9edef;
48
+ --volter-color-live-line: #d7e8a6;
49
+ --volter-color-live-text: #3f6b17;
50
+ --volter-color-healthy-text: #2f5f40;
51
+ --volter-color-attention-line: #f1d6bd;
52
+ --volter-color-attention-text: #8a3f0c;
53
+ --volter-color-danger-line: #f2cfc0;
54
+ --volter-color-danger-text: #9c3310;
55
+ --volter-color-violet: #6a5a92;
56
+ --volter-color-violet-soft: #ebe6f3;
57
+ --volter-color-violet-text: #4f4275;
58
+ --volter-color-violet-line: #d9d1ea;
59
+ --volter-color-ansi-blue: #3b5f8a;
60
+ --volter-font-ui: "Geist", "Segoe UI", system-ui, sans-serif;
61
+ --volter-font-data: "Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;
62
+ --volter-font-display: "Instrument Serif", Georgia, serif;
63
+ --volter-font-terminal: "SF Mono", SFMono-Regular, ui-monospace, Menlo, Consolas, monospace;
64
+ --volter-font-size-xs: 11px;
65
+ --volter-font-size-sm: 12.5px;
66
+ --volter-font-size-md: 14px;
67
+ --volter-font-size-lg: 16px;
68
+ --volter-font-size-xl: 20px;
69
+ --volter-font-size-2xl: 24px;
70
+ --volter-font-size-3xl: 32px;
71
+ --volter-font-size-display: 48px;
72
+ --volter-font-size-terminal: 11px;
73
+ --volter-space-1: 4px;
74
+ --volter-space-2: 8px;
75
+ --volter-space-3: 12px;
76
+ --volter-space-4: 16px;
77
+ --volter-space-5: 20px;
78
+ --volter-space-6: 24px;
79
+ --volter-space-8: 32px;
80
+ --volter-space-12: 48px;
81
+ --volter-space-16: 64px;
82
+ --volter-radius-control: 3px;
83
+ --volter-radius-panel: 4px;
84
+ --volter-measure-code: 7ch;
85
+ --volter-measure-short: 16ch;
86
+ --volter-measure-name: 28ch;
87
+ --volter-measure-line: 44ch;
88
+ --volter-measure-prose: 64ch;
89
+ --volter-line-hairline: 1px solid #d9dad3;
90
+ --volter-line-strong: 1px solid #16252c;
91
+ --volter-motion-fast: 120ms;
92
+ --volter-motion-medium: 240ms;
93
+ --volter-shadow-dialog: 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1);
94
+ --volter-shadow-floating: 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08);
95
+ --volter-shadow-player: 0 2px 8px rgba(27, 30, 28, 0.08), 0 18px 44px rgba(27, 30, 28, 0.14);
96
+ --volter-shadow-resting: none;
97
+ --volter-surface-page: light-dark(#f7f6f1, #0f1a1f);
98
+ --volter-surface-raised: light-dark(#fbfaf7, #16252c);
99
+ --volter-surface-subtle: light-dark(#f2f1eb, #1d2d34);
100
+ --volter-surface-sunken: light-dark(#efeee8, #0b141a);
101
+ --volter-surface-inset: light-dark(#e7e6df, #22343c);
102
+ --volter-surface-disabled: light-dark(#dad9d1, #2a3a42);
103
+ --volter-surface-overlay: light-dark(rgba(251, 250, 247, 0.97), rgba(22, 37, 44, 0.97));
104
+ --volter-surface-inverse: light-dark(#16252c, #f7f6f1);
105
+ --volter-surface-media: light-dark(#0f1a1f, #070d10);
106
+ --volter-surface-inverse-raised: light-dark(#1d2d34, #fbfaf7);
107
+ --volter-surface-inverse-glow: light-dark(#22343c, #ffffff);
108
+ --volter-border-default: light-dark(#d9dad3, #2c3d45);
109
+ --volter-border-subtle: light-dark(#e9e8e1, #223239);
110
+ --volter-border-strong: light-dark(#c4c5bc, #3d5059);
111
+ --volter-border-emphasis: light-dark(#16252c, #f3f2ec);
112
+ --volter-text-primary: light-dark(#16252c, #f3f2ec);
113
+ --volter-text-muted: light-dark(#5d6970, #a9b0ad);
114
+ --volter-text-tertiary: light-dark(#66727a, #8b979b);
115
+ --volter-text-faint: light-dark(#a3aaa9, #6c7a80);
116
+ --volter-text-disabled: light-dark(#8a918f, #56646a);
117
+ --volter-text-inverse: light-dark(#f3f2ec, #16252c);
118
+ --volter-text-inverse-muted: light-dark(#a9b0ad, #5d6970);
119
+ --volter-text-on-strong: light-dark(#ffffff, #16252c);
120
+ --volter-text-on-bright-muted: rgba(22, 37, 44, 0.78);
121
+ --volter-text-on-bright-dim: rgba(22, 37, 44, 0.6);
122
+ --volter-action-default: light-dark(#16252c, #e4f09c);
123
+ --volter-action-hover: light-dark(#000000, #d8eb6a);
124
+ --volter-action-soft: light-dark(#eef4c4, rgba(228, 240, 156, 0.14));
125
+ --volter-action-text: light-dark(#16252c, #e4f09c);
126
+ --volter-selection-default: light-dark(#16252c, #e4f09c);
127
+ --volter-selection-soft: light-dark(#eef4c4, rgba(228, 240, 156, 0.14));
128
+ --volter-selection-text: light-dark(#16252c, #f3f2ec);
129
+ --volter-selection-object: #ff6a1f;
130
+ --volter-selection-wash: light-dark(rgba(216, 235, 106, 0.55), rgba(216, 235, 106, 0.3));
131
+ --volter-status-live-base: light-dark(#5f9a2e, #9bcf62);
132
+ --volter-status-live-soft: light-dark(#eef4c4, rgba(155, 207, 98, 0.14));
133
+ --volter-status-live-line: light-dark(#d7e8a6, rgba(155, 207, 98, 0.35));
134
+ --volter-status-live-text: light-dark(#3f6b17, #b8e08a);
135
+ --volter-status-live-ring: light-dark(rgba(95, 154, 46, 0.18), rgba(155, 207, 98, 0.22));
136
+ --volter-status-live-wash: light-dark(rgba(228, 240, 156, 0.45), rgba(228, 240, 156, 0.16));
137
+ --volter-status-healthy-base: light-dark(#3f7a55, #6fbf8e);
138
+ --volter-status-healthy-soft: light-dark(#e8f0e6, rgba(111, 191, 142, 0.14));
139
+ --volter-status-healthy-text: light-dark(#2f5f40, #93d3aa);
140
+ --volter-status-success-base: light-dark(#6a5a92, #aa98d8);
141
+ --volter-status-success-soft: light-dark(#ebe6f3, rgba(170, 152, 216, 0.16));
142
+ --volter-status-success-line: light-dark(#d9d1ea, rgba(170, 152, 216, 0.38));
143
+ --volter-status-success-text: light-dark(#4f4275, #c4b7e6);
144
+ --volter-status-attention-base: light-dark(#c7641a, #ec9a52);
145
+ --volter-status-attention-soft: light-dark(#fbede0, rgba(236, 154, 82, 0.14));
146
+ --volter-status-attention-line: light-dark(#f1d6bd, rgba(236, 154, 82, 0.35));
147
+ --volter-status-attention-text: light-dark(#8a3f0c, #f3b87f);
148
+ --volter-status-danger-base: light-dark(#d24a1f, #f07650);
149
+ --volter-status-danger-soft: light-dark(#fbebe4, rgba(240, 118, 80, 0.14));
150
+ --volter-status-danger-line: light-dark(#f2cfc0, rgba(240, 118, 80, 0.38));
151
+ --volter-status-danger-text: light-dark(#9c3310, #f59a7d);
152
+ --volter-status-danger-faint: light-dark(rgba(210, 74, 31, 0.08), rgba(240, 118, 80, 0.08));
153
+ --volter-status-recording-base: light-dark(#d24a1f, #f07650);
154
+ --volter-status-recording-text: #ffffff;
155
+ --volter-data-base: light-dark(#4f6574, #8fa6b4);
156
+ --volter-data-soft: light-dark(#e9edef, rgba(143, 166, 180, 0.14));
157
+ --volter-data-violet: light-dark(#6a5a92, #aa98d8);
158
+ --volter-data-green: light-dark(#3f7a55, #6fbf8e);
159
+ --volter-data-amber: light-dark(#c7641a, #ec9a52);
160
+ --volter-data-blue: light-dark(#3b5f8a, #7ea6d8);
161
+ --volter-overlay-hover: light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06));
162
+ --volter-overlay-active: light-dark(rgba(22, 37, 44, 0.09), rgba(243, 242, 236, 0.1));
163
+ --volter-overlay-emboss: light-dark(rgba(22, 37, 44, 0.06), rgba(243, 242, 236, 0.06));
164
+ --volter-overlay-scrim: light-dark(rgba(22, 37, 44, 0.38), rgba(0, 0, 0, 0.55));
165
+ --volter-overlay-control: light-dark(rgba(22, 37, 44, 0.8), rgba(15, 26, 31, 0.8));
166
+ --volter-control-track: light-dark(#b3b6ae, #3d5059);
167
+ --volter-code-text: light-dark(#16252c, #f3f2ec);
168
+ --volter-code-comment: light-dark(#66727a, #8b979b);
169
+ --volter-code-keyword: light-dark(#d24a1f, #f59a7d);
170
+ --volter-code-variable: light-dark(#6a5a92, #c4b7e6);
171
+ --volter-code-string: light-dark(#3f7a55, #93d3aa);
172
+ --volter-code-constant: light-dark(#6a5a92, #c4b7e6);
173
+ --volter-code-function: light-dark(#16252c, #f3f2ec);
174
+ --volter-code-type: light-dark(#16252c, #f3f2ec);
175
+ --volter-code-tag: light-dark(#d24a1f, #f59a7d);
176
+ --volter-code-attribute: light-dark(#6a5a92, #c4b7e6);
177
+ --volter-code-punctuation: light-dark(#5d6970, #a9b0ad);
178
+ --volter-code-inline: light-dark(#6a5a92, #c4b7e6);
179
+ --volter-code-invalid: light-dark(#d24a1f, #f07650);
180
+ --volter-axis-x: light-dark(#d24a1f, #f07650);
181
+ --volter-axis-y: light-dark(#5f9a2e, #9bcf62);
182
+ --volter-axis-z: light-dark(#3b5f8a, #7ea6d8);
183
+ --volter-axis-grid: light-dark(#c4c5bc, #3d5059);
184
+ --volter-scene-dynamic: light-dark(#6a5a92, #aa98d8);
185
+ --volter-scene-dynamic-soft: light-dark(#dcd5e9, rgba(220, 213, 233, 0.3));
186
+ --volter-scene-instance: light-dark(#5f9a2e, #9bcf62);
187
+ --volter-terminal-background: light-dark(#ffffff, #1e1e1e);
188
+ --volter-terminal-foreground: light-dark(#000000, #ffffff);
189
+ --volter-terminal-cursor: #9d9d9d;
190
+ --volter-terminal-selection: light-dark(#b3d7ff, #3f638b);
191
+ --volter-terminal-black: #000000;
192
+ --volter-terminal-red: #990000;
193
+ --volter-terminal-green: #00a600;
194
+ --volter-terminal-yellow: #999900;
195
+ --volter-terminal-blue: #0000b3;
196
+ --volter-terminal-magenta: #b300b3;
197
+ --volter-terminal-cyan: #00a6b3;
198
+ --volter-terminal-white: #bfbfbf;
199
+ --volter-terminal-bright-black: #666666;
200
+ --volter-terminal-bright-red: #e60000;
201
+ --volter-terminal-bright-green: #00d900;
202
+ --volter-terminal-bright-yellow: #e6e600;
203
+ --volter-terminal-bright-blue: #0000ff;
204
+ --volter-terminal-bright-magenta: #e600e6;
205
+ --volter-terminal-bright-cyan: #00e6e6;
206
+ --volter-terminal-bright-white: #e6e6e6;
207
+ --volter-accent-lime: #e4f09c;
208
+ --volter-accent-lime-strong: #d8eb6a;
209
+ --volter-accent-lilac: #dcd5e9;
210
+ --volter-accent-orange: #ff6a1f;
211
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 126 32" width="126" height="32" role="img" aria-label="Volter"><title>Volter</title><g fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="square" stroke-linejoin="round"><path d="M2 9 11 27 20 9M44 18a9 9 0 1 1-18 0 9 9 0 1 1 18 0ZM51 3v24M61 4v18q0 5 5 5h7M57 10h15M79 18h19c0-12-19-12-19 0 0 9 11 11 18 6M106 27V10m0 8c0-6 6-8 14-8"/></g></svg>
@@ -1,16 +1,18 @@
1
1
  <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
+ <link rel="stylesheet" href="/brand/tokens.css">
5
+
4
6
  <meta charset="UTF-8" />
5
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
8
  <title>browser-substrate</title>
7
9
  <!-- The tab's icon is the toolbar's mark, from the brand; without it every open logged a 404 for /favicon.ico. -->
8
- <link rel="icon" type="image/svg+xml" href="https://brand.volter.ai/logo/browser-substrate/svg?size=64" />
10
+ <link rel="icon" type="image/svg+xml" href="/brand/substrate.svg" />
9
11
  <!-- Black glass from the first byte, before any script: the boot screen (boot-screen.js) comes on from here. Ready or failed, the page's own paper returns. -->
10
12
  <style>html:not([data-ready]):not([data-error]), html:not([data-ready]):not([data-error]) body { background: #0b0b0c; color-scheme: dark; }</style>
11
- <script type="module" crossorigin src="/assets/shell-DLIQ6jHu.js"></script>
13
+ <script type="module" crossorigin src="/assets/shell-BZbhxnju.js"></script>
12
14
  <link rel="modulepreload" crossorigin href="/assets/page-workers-BUcWBF51.js">
13
- <link rel="modulepreload" crossorigin href="/assets/browser-sandbox-bridge-BJbQoc4f.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/browser-sandbox-bridge-C8nlSsT2.js">
14
16
  <link rel="modulepreload" crossorigin href="/assets/cross-origin-container-protocol-hIp9vH-t.js">
15
17
  <link rel="stylesheet" crossorigin href="/assets/shell-BEKXfRsE.css">
16
18
  </head>
@@ -362,6 +362,7 @@ function validateImageRanges(candidate) {
362
362
  if (end !== value.bytes) throw new Error("Immutable image ranges do not cover their reservation.");
363
363
  return value;
364
364
  }
365
+ var realmBlockedReads = /* @__PURE__ */ new Map();
365
366
  var ImageRangeReader = class {
366
367
  constructor(ranges, directory, identity, completed, receiptKey, client) {
367
368
  this.ranges = ranges;
@@ -407,7 +408,6 @@ var ImageRangeReader = class {
407
408
  startup;
408
409
  cancelStartup;
409
410
  sharedCompletion;
410
- blocked = { ranges: 0, ms: 0 };
411
411
  get completionBuffer() {
412
412
  return this.completed.buffer;
413
413
  }
@@ -586,10 +586,6 @@ var ImageRangeReader = class {
586
586
  }
587
587
  return { queued: indices.length, done: Promise.all(finished).then(() => void 0) };
588
588
  }
589
- /** How many reads this process blocked on a range not yet held, and for how long in all. */
590
- get blockedReads() {
591
- return { ...this.blocked };
592
- }
593
589
  ensure(offset, length) {
594
590
  if (this.closed) throw new Error("This immutable image reader is closed.");
595
591
  if (!this.ready) throw new Error("This immutable image reader has not finished asynchronous initialization.");
@@ -620,8 +616,12 @@ var ImageRangeReader = class {
620
616
  throw new Error(`The image's immutable part ${part.url} did not arrive within 30 seconds; reload to retry.`);
621
617
  }
622
618
  }
623
- this.blocked.ranges += 1;
624
- this.blocked.ms += performance.now() - began;
619
+ const waited = performance.now() - began;
620
+ const realm = realmBlockedReads.get(this.identity) ?? { ranges: 0, ms: 0 };
621
+ realm.ranges += 1;
622
+ realm.ms += waited;
623
+ realmBlockedReads.set(this.identity, realm);
624
+ console.log(`[boot-trace] ${JSON.stringify({ event: "image-blocked", at: Date.now(), reader: this.identity, index, range: part.sha256.slice(0, 16), ms: Math.round(waited) })}`);
625
625
  if (Atomics.load(this.state, index) !== 2) {
626
626
  throw new Error(`The image's immutable part ${part.url} could not be verified or stored; see the worker error and reload to retry.`);
627
627
  }
@@ -1261,6 +1261,14 @@ function createPackStore(environment, options = {}) {
1261
1261
  if (!line) receivedImageLine?.port.close();
1262
1262
  receivedImageLine = void 0;
1263
1263
  imageReader = new ImageRangeReader(ranges, directory, `${projectId}.${generation}`, completion?.completed, receiptKey, line);
1264
+ console.log(`[boot-trace] ${JSON.stringify({
1265
+ event: "image-reader-open",
1266
+ at: Date.now(),
1267
+ reader: `${projectId}.${generation}`,
1268
+ offered: supplied !== void 0,
1269
+ shared: completion !== void 0,
1270
+ ...supplied && !completion ? { offeredGeneration: supplied.generation, generation, rangesMatch: supplied.rangesDigest === imageRangesDigest } : {}
1271
+ })}`);
1264
1272
  await imageReader.initialize();
1265
1273
  deferredImage = ranges.image;
1266
1274
  }
@@ -2728,11 +2736,6 @@ function createPackStore(environment, options = {}) {
2728
2736
  imageLine: () => imageReader?.lineForReader() ?? options.packages?.imageLine(),
2729
2737
  imageStartupSet: () => imageReader?.readDigests() ?? imageReader?.completedDigests() ?? [],
2730
2738
  prefetchImage: (digests, streams) => imageReader?.prefetch(digests, streams) ?? { queued: 0, done: Promise.resolve() },
2731
- imageBlockedReads: () => {
2732
- const own = imageReader?.blockedReads ?? { ranges: 0, ms: 0 };
2733
- const linked2 = options.packages?.imageBlockedReads() ?? { ranges: 0, ms: 0 };
2734
- return { ranges: own.ranges + linked2.ranges, ms: own.ms + linked2.ms };
2735
- },
2736
2739
  seeded: () => startedFromSeed,
2737
2740
  get logBytes() {
2738
2741
  return logBytes;
@@ -4319,4 +4322,4 @@ function serveStore(scope3, port, loadEngine) {
4319
4322
  }
4320
4323
 
4321
4324
  // <stdin>
4322
- startExecutionFront(self, () => import("/assets/node-execution-worker-7e8e0c5321ca0d10.js"));
4325
+ startExecutionFront(self, () => import("/assets/node-execution-worker-3ddf5efbaa427e9d.js"));
@@ -1,6 +1,8 @@
1
1
  <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
+ <link rel="stylesheet" href="/brand/tokens.css">
5
+
4
6
  <meta charset="UTF-8" />
5
7
  <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self' 'unsafe-eval' 'wasm-unsafe-eval'; worker-src 'self' blob:; connect-src 'none'; img-src 'none'; style-src 'none'; frame-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'" />
6
8
  <title>Browser Node execution host</title>
@@ -400,6 +400,7 @@ function validateImageRanges(candidate) {
400
400
  if (end !== value.bytes) throw new Error("Immutable image ranges do not cover their reservation.");
401
401
  return value;
402
402
  }
403
+ var realmBlockedReads = /* @__PURE__ */ new Map();
403
404
  var ImageRangeReader = class {
404
405
  constructor(ranges, directory, identity, completed, receiptKey, client) {
405
406
  this.ranges = ranges;
@@ -445,7 +446,6 @@ var ImageRangeReader = class {
445
446
  startup;
446
447
  cancelStartup;
447
448
  sharedCompletion;
448
- blocked = { ranges: 0, ms: 0 };
449
449
  get completionBuffer() {
450
450
  return this.completed.buffer;
451
451
  }
@@ -624,10 +624,6 @@ var ImageRangeReader = class {
624
624
  }
625
625
  return { queued: indices.length, done: Promise.all(finished).then(() => void 0) };
626
626
  }
627
- /** How many reads this process blocked on a range not yet held, and for how long in all. */
628
- get blockedReads() {
629
- return { ...this.blocked };
630
- }
631
627
  ensure(offset, length) {
632
628
  if (this.closed) throw new Error("This immutable image reader is closed.");
633
629
  if (!this.ready) throw new Error("This immutable image reader has not finished asynchronous initialization.");
@@ -658,8 +654,12 @@ var ImageRangeReader = class {
658
654
  throw new Error(`The image's immutable part ${part.url} did not arrive within 30 seconds; reload to retry.`);
659
655
  }
660
656
  }
661
- this.blocked.ranges += 1;
662
- this.blocked.ms += performance.now() - began;
657
+ const waited = performance.now() - began;
658
+ const realm = realmBlockedReads.get(this.identity) ?? { ranges: 0, ms: 0 };
659
+ realm.ranges += 1;
660
+ realm.ms += waited;
661
+ realmBlockedReads.set(this.identity, realm);
662
+ console.log(`[boot-trace] ${JSON.stringify({ event: "image-blocked", at: Date.now(), reader: this.identity, index, range: part.sha256.slice(0, 16), ms: Math.round(waited) })}`);
663
663
  if (Atomics.load(this.state, index) !== 2) {
664
664
  throw new Error(`The image's immutable part ${part.url} could not be verified or stored; see the worker error and reload to retry.`);
665
665
  }
@@ -1296,6 +1296,14 @@ function createPackStore(environment, options = {}) {
1296
1296
  if (!line) receivedImageLine?.port.close();
1297
1297
  receivedImageLine = void 0;
1298
1298
  imageReader = new ImageRangeReader(ranges, directory, `${projectId}.${generation}`, completion?.completed, receiptKey, line);
1299
+ console.log(`[boot-trace] ${JSON.stringify({
1300
+ event: "image-reader-open",
1301
+ at: Date.now(),
1302
+ reader: `${projectId}.${generation}`,
1303
+ offered: supplied !== void 0,
1304
+ shared: completion !== void 0,
1305
+ ...supplied && !completion ? { offeredGeneration: supplied.generation, generation, rangesMatch: supplied.rangesDigest === imageRangesDigest } : {}
1306
+ })}`);
1299
1307
  await imageReader.initialize();
1300
1308
  deferredImage = ranges.image;
1301
1309
  }
@@ -2763,11 +2771,6 @@ function createPackStore(environment, options = {}) {
2763
2771
  imageLine: () => imageReader?.lineForReader() ?? options.packages?.imageLine(),
2764
2772
  imageStartupSet: () => imageReader?.readDigests() ?? imageReader?.completedDigests() ?? [],
2765
2773
  prefetchImage: (digests, streams) => imageReader?.prefetch(digests, streams) ?? { queued: 0, done: Promise.resolve() },
2766
- imageBlockedReads: () => {
2767
- const own = imageReader?.blockedReads ?? { ranges: 0, ms: 0 };
2768
- const linked2 = options.packages?.imageBlockedReads() ?? { ranges: 0, ms: 0 };
2769
- return { ranges: own.ranges + linked2.ranges, ms: own.ms + linked2.ms };
2770
- },
2771
2774
  seeded: () => startedFromSeed,
2772
2775
  get logBytes() {
2773
2776
  return logBytes;
@@ -1,6 +1,8 @@
1
1
  <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
+ <link rel="stylesheet" href="/brand/tokens.css">
5
+
4
6
  <meta charset="UTF-8" />
5
7
  <meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; worker-src 'self'; connect-src 'none'; img-src 'none'; style-src 'none'; frame-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'" />
6
8
  <title>Browser Python execution host</title>
@@ -1 +1 @@
1
- {"format":1,"pyodide":"314.0.6","engine":"sha256-OgoA3+qjSKwg+e8JkEIz0y0z9kQzlmLUrzaPiiAQ83o=","preparation":"77987879a2949714bdec4de6bae2d0431adbc3549686414e4e13e051cf23bfae","integrity":"sha256-mvUmkLruetmW5mfg/qgs2grUYwbB86vpGJKPSIuYdtA=","bytes":6220153}
1
+ {"format":1,"pyodide":"314.0.6","engine":"sha256-OgoA3+qjSKwg+e8JkEIz0y0z9kQzlmLUrzaPiiAQ83o=","preparation":"77987879a2949714bdec4de6bae2d0431adbc3549686414e4e13e051cf23bfae","integrity":"sha256-d8YzcHxUAgy9LW6gCS2p4RD0xmSSqfr73iJMv3B3bTg=","bytes":6220905}
@@ -1,15 +1,17 @@
1
1
  <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
+ <link rel="stylesheet" href="/brand/tokens.css">
5
+
4
6
  <meta charset="UTF-8" />
5
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
8
  <!-- Applies to the preview's reloads as the frame's attribute below applies to its first load. -->
7
9
  <meta name="referrer" content="no-referrer" />
8
10
  <title>Generated application sandbox</title>
9
11
  <style>html,body,#generated-preview{border:0;height:100%;margin:0;padding:0;width:100%}body{overflow:hidden}</style>
10
- <script type="module" crossorigin src="/assets/sandbox-bMeKqKBn.js"></script>
12
+ <script type="module" crossorigin src="/assets/sandbox-mhFzIWaQ.js"></script>
11
13
  <link rel="modulepreload" crossorigin href="/assets/page-workers-BUcWBF51.js">
12
- <link rel="modulepreload" crossorigin href="/assets/browser-sandbox-bridge-BJbQoc4f.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/browser-sandbox-bridge-C8nlSsT2.js">
13
15
  </head>
14
16
  <body>
15
17
  <!-- The containing page is already a dedicated, credential-free origin.