@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.
- package/catalog/demand-input.json +133 -0
- package/dist/boot-screen.d.ts +2 -0
- package/dist/boot-screen.d.ts.map +1 -1
- package/dist/boot-screen.js +1 -1
- package/dist/boot-screen.js.map +1 -1
- package/dist/cli/archive.d.ts +1 -0
- package/dist/cli/archive.d.ts.map +1 -1
- package/dist/cli/archive.js +4 -4
- package/dist/cli/archive.js.map +1 -1
- package/dist/cli/build.d.ts +5 -1
- package/dist/cli/build.d.ts.map +1 -1
- package/dist/cli/build.js +21 -2
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/cache-root.d.ts +7 -0
- package/dist/cli/cache-root.d.ts.map +1 -0
- package/dist/cli/cache-root.js +24 -0
- package/dist/cli/cache-root.js.map +1 -0
- package/dist/cli/companions.d.ts +1 -1
- package/dist/cli/companions.d.ts.map +1 -1
- package/dist/cli/companions.js +30 -16
- package/dist/cli/companions.js.map +1 -1
- package/dist/cli/dependency-plan-build.d.ts +4 -0
- package/dist/cli/dependency-plan-build.d.ts.map +1 -1
- package/dist/cli/dependency-plan-build.js +111 -30
- package/dist/cli/dependency-plan-build.js.map +1 -1
- package/dist/cli/docker-build.d.ts +1 -0
- package/dist/cli/docker-build.d.ts.map +1 -1
- package/dist/cli/docker-build.js +4 -4
- package/dist/cli/docker-build.js.map +1 -1
- package/dist/cli/dry-run.d.ts +4 -4
- package/dist/cli/dry-run.d.ts.map +1 -1
- package/dist/cli/dry-run.js +10 -9
- package/dist/cli/dry-run.js.map +1 -1
- package/dist/cli/generated-code.d.ts +2 -1
- package/dist/cli/generated-code.d.ts.map +1 -1
- package/dist/cli/generated-code.js +46 -16
- package/dist/cli/generated-code.js.map +1 -1
- package/dist/cli/host-build.d.ts +1 -0
- package/dist/cli/host-build.d.ts.map +1 -1
- package/dist/cli/host-build.js +10 -9
- package/dist/cli/host-build.js.map +1 -1
- package/dist/cli/host-managers.d.ts +3 -1
- package/dist/cli/host-managers.d.ts.map +1 -1
- package/dist/cli/host-managers.js +7 -3
- package/dist/cli/host-managers.js.map +1 -1
- package/dist/cli/image-layers.d.ts.map +1 -1
- package/dist/cli/image-layers.js +5 -2
- package/dist/cli/image-layers.js.map +1 -1
- package/dist/cli/main.d.ts +5 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +97 -34
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/pack-publication.d.ts +2 -2
- package/dist/cli/pack-publication.d.ts.map +1 -1
- package/dist/cli/pack-publication.js +3 -3
- package/dist/cli/pack-publication.js.map +1 -1
- package/dist/cli/package-pack.d.ts +1 -1
- package/dist/cli/package-pack.d.ts.map +1 -1
- package/dist/cli/package-pack.js +7 -4
- package/dist/cli/package-pack.js.map +1 -1
- package/dist/cli/package-packs.d.ts +1 -0
- package/dist/cli/package-packs.d.ts.map +1 -1
- package/dist/cli/package-packs.js +84 -14
- package/dist/cli/package-packs.js.map +1 -1
- package/dist/cli/plan-tarballs.d.ts +1 -0
- package/dist/cli/plan-tarballs.d.ts.map +1 -1
- package/dist/cli/plan-tarballs.js +6 -3
- package/dist/cli/plan-tarballs.js.map +1 -1
- package/dist/cli/preparation-memory.d.ts +17 -0
- package/dist/cli/preparation-memory.d.ts.map +1 -0
- package/dist/cli/preparation-memory.js +367 -0
- package/dist/cli/preparation-memory.js.map +1 -0
- package/dist/cli/project-build.d.ts +1 -0
- package/dist/cli/project-build.d.ts.map +1 -1
- package/dist/cli/project-build.js +100 -71
- package/dist/cli/project-build.js.map +1 -1
- package/dist/cli/provision-catalog.d.ts +49 -0
- package/dist/cli/provision-catalog.d.ts.map +1 -0
- package/dist/cli/provision-catalog.js +72 -0
- package/dist/cli/provision-catalog.js.map +1 -0
- package/dist/cli/provision-demand.d.ts +45 -0
- package/dist/cli/provision-demand.d.ts.map +1 -0
- package/dist/cli/provision-demand.js +208 -0
- package/dist/cli/provision-demand.js.map +1 -0
- package/dist/cli/rolldown-binding.d.ts +1 -1
- package/dist/cli/rolldown-binding.d.ts.map +1 -1
- package/dist/cli/rolldown-binding.js +8 -4
- package/dist/cli/rolldown-binding.js.map +1 -1
- package/dist/cli/serve.d.ts +3 -0
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +9 -2
- package/dist/cli/serve.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -31
- package/dist/index.js.map +1 -1
- package/dist/origin-reset.d.ts +4 -0
- package/dist/origin-reset.d.ts.map +1 -0
- package/dist/origin-reset.js +76 -0
- package/dist/origin-reset.js.map +1 -0
- package/dist/program-dom.d.ts +2 -0
- package/dist/program-dom.d.ts.map +1 -1
- package/dist/program-dom.js +11 -1
- package/dist/program-dom.js.map +1 -1
- package/dist/program-types.d.ts +2 -0
- package/dist/program-types.d.ts.map +1 -1
- package/dist/shell/assets/browser-opfs-filesystem-worker-CmF6UKMW.js +3 -0
- package/dist/shell/assets/browser-sandbox-bridge-C8nlSsT2.js +237 -0
- package/dist/shell/assets/{filesystem-host-DJbFuokb.js → filesystem-host-BzPlXSri.js} +1 -1
- package/dist/shell/assets/filesystem-host-Pq9IHKRx.js +3 -0
- package/dist/shell/assets/filesystem-worker-CC3pSXUP.js +5 -0
- package/dist/shell/assets/{fork-worker-BXY2kfdX.js → fork-worker-4YKQ4KTo.js} +1 -1
- package/dist/shell/assets/{node-execution-worker-7e8e0c5321ca0d10.js → node-execution-worker-3ddf5efbaa427e9d.js} +8 -8
- package/dist/shell/assets/{sandbox-bMeKqKBn.js → sandbox-mhFzIWaQ.js} +1 -1
- package/dist/shell/assets/{shell-DLIQ6jHu.js → shell-BZbhxnju.js} +763 -757
- package/dist/shell/assets/worker-BmHEnCyv.js +816 -0
- package/dist/shell/assets/{worker-program-worker-B4OcKVtV.js → worker-program-worker-DueMwljE.js} +10 -10
- package/dist/shell/brand/fonts/Geist-Variable.woff2 +0 -0
- package/dist/shell/brand/fonts/GeistMono-Variable.woff2 +0 -0
- package/dist/shell/brand/fonts/InstrumentSerif-Italic.woff2 +0 -0
- package/dist/shell/brand/fonts/InstrumentSerif-Regular.woff2 +0 -0
- package/dist/shell/brand/icons/app-window.svg +1 -0
- package/dist/shell/brand/icons/at-sign.svg +1 -0
- package/dist/shell/brand/icons/box.svg +1 -0
- package/dist/shell/brand/icons/chevron-right.svg +1 -0
- package/dist/shell/brand/icons/folder.svg +1 -0
- package/dist/shell/brand/icons/info.svg +1 -0
- package/dist/shell/brand/icons/key-round.svg +1 -0
- package/dist/shell/brand/icons/link.svg +1 -0
- package/dist/shell/brand/icons/monitor.svg +1 -0
- package/dist/shell/brand/icons/plus.svg +1 -0
- package/dist/shell/brand/icons/rotate-ccw.svg +1 -0
- package/dist/shell/brand/icons/share-2.svg +1 -0
- package/dist/shell/brand/icons/square-arrow-out-up-right.svg +1 -0
- package/dist/shell/brand/icons/terminal.svg +1 -0
- package/dist/shell/brand/icons/x.svg +1 -0
- package/dist/shell/brand/substrate.svg +1 -0
- package/dist/shell/brand/tokens.css +211 -0
- package/dist/shell/brand/wordmark.svg +1 -0
- package/dist/shell/index.html +5 -3
- package/dist/shell/node-execution-worker.js +16 -13
- package/dist/shell/node-host.html +2 -0
- package/dist/shell/python-execution-worker.js +15 -12
- package/dist/shell/python-host.html +2 -0
- package/dist/shell/python-runtime-snapshot.bin +0 -0
- package/dist/shell/python-runtime-snapshot.json +1 -1
- package/dist/shell/sandbox.html +4 -2
- package/dist/toolbar-styles.generated.d.ts +1 -1
- package/dist/toolbar-styles.generated.d.ts.map +1 -1
- package/dist/toolbar-styles.generated.js +1 -1
- package/dist/toolbar-styles.generated.js.map +1 -1
- package/dist/toolbar.d.ts.map +1 -1
- package/dist/toolbar.js +3 -1
- package/dist/toolbar.js.map +1 -1
- package/package.json +1 -1
- package/dist/shell/assets/browser-opfs-filesystem-worker-k2CPzPBU.js +0 -3
- package/dist/shell/assets/browser-sandbox-bridge-BJbQoc4f.js +0 -237
- package/dist/shell/assets/filesystem-host-yMcJuvmT.js +0 -3
- package/dist/shell/assets/filesystem-worker-BbsBhZ9p.js +0 -5
- package/dist/shell/assets/worker-Ce8bBwSJ.js +0 -816
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const TOOLBAR_STYLES = ".bs-toolbar, .bs-toolbar-drawer { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-ready: var(--volter-status-healthy-base, light-dark(#3f7a55, #6fbf8e)); --bs-busy: var(--volter-status-attention-base, light-dark(#c7641a, #ec9a52)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; --bs-radius: 999px; font: 13px/1.4 -apple-system, BlinkMacSystemFont, \"Segoe UI\", Inter, system-ui, sans-serif; color: var(--bs-fg); }\n.bs-toolbar { position: fixed; z-index: 2147483000; display: flex; flex-direction: column-reverse; gap: 8px; touch-action: none; --bs-drawer: 0px; }\n.bs-toolbar[data-corner^=\"bottom\"] { bottom: calc(16px + var(--bs-drawer)); }\n.bs-toolbar[data-corner^=\"top\"] { top: 16px; flex-direction: column; }\n.bs-toolbar[data-corner$=\"right\"] { right: 16px; align-items: flex-end; }\n.bs-toolbar[data-corner$=\"left\"] { left: 16px; align-items: flex-start; }\n.bs-toolbar[data-corner$=\"center\"] { left: 50%; transform: translateX(-50%); align-items: center; }\n.bs-toolbar-dragging { transform: none !important; }\n.bs-toolbar-dragging { transition: none !important; opacity: 0.85; }\n.bs-toolbar-pill { display: flex; align-items: center; gap: 2px; height: 36px; padding: 0 6px 0 4px; background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: var(--bs-radius); box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: grab; user-select: none; -webkit-user-select: none; }\n.bs-toolbar-dragging .bs-toolbar-pill { cursor: grabbing; }\n.bs-toolbar-dot { position: relative; width: 28px; height: 28px; border: 0; border-radius: 50%; background: transparent; color: var(--bs-fg); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-dot:hover { background: var(--bs-hover); }\n.bs-toolbar-logo { width: 18px; height: 18px; display: block; }\n.bs-toolbar-badge { position: absolute; right: 2px; bottom: 2px; width: 8px; height: 8px; border-radius: 50%; box-shadow: 0 0 0 2px var(--bs-bg); display: none; }\n.bs-toolbar-dot[data-state=\"loading\"] .bs-toolbar-badge { display: block; background: var(--bs-busy); animation: bs-toolbar-pulse 2.4s ease-in-out infinite; }\n.bs-toolbar-dot[data-state=\"error\"] .bs-toolbar-badge { display: block; background: var(--bs-error); }\n@keyframes bs-toolbar-pulse { 50% { opacity: 0.3; } }\n@media (prefers-reduced-motion: reduce) { .bs-toolbar-badge { animation: none !important; } }\n\n.bs-toolbar-label { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--bs-muted); padding: 0 6px 0 2px; font-size: 12px; }\n.bs-toolbar-label[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-controls { display: flex; align-items: center; gap: 2px; }\n.bs-toolbar-controls-slot { display: contents; }\n.bs-toolbar-button { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border: 0; border-radius: 999px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; white-space: nowrap; }\n.bs-toolbar-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-button[aria-pressed=\"true\"], .bs-toolbar-button.bs-toolbar-on { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-toolbar-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text, .bs-toolbar-button[data-control=\"more\"] .bs-toolbar-button-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }\n.bs-toolbar-button[data-control=\"terminal\"], .bs-toolbar-button[data-control=\"more\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-collapsed .bs-toolbar-label, .bs-toolbar-collapsed .bs-toolbar-controls { display: none; }\n.bs-toolbar-collapsed .bs-toolbar-pill { padding: 0 3px; height: 34px; }\n.bs-toolbar-menu-head { display: flex; align-items: center; gap: 10px; }\n.bs-toolbar-menu-head .bs-toolbar-logo { flex: none; width: 22px; height: 22px; }\n.bs-toolbar-menu-head > div { min-width: 0; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-label { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"] .bs-toolbar-button-text, .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] .bs-toolbar-button-text { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"], .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-button[data-count]:not([data-count=\"\"])::after { content: attr(data-count); position: absolute; top: 1px; right: 1px; min-width: 14px; height: 14px; padding: 0 3px; box-sizing: border-box; border-radius: 7px; background: var(--bs-accent); color: var(--bs-on-accent); font-size: 10px; line-height: 14px; text-align: center; }\n.bs-toolbar-button { position: relative; }\n.bs-toolbar-button[hidden] { display: none; }\n.bs-toolbar-menu-section { padding: 8px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 4px; }\n.bs-toolbar-menu-section[hidden] { display: none; }\n.bs-toolbar-section-title { color: var(--bs-muted); font-size: 11px; margin-bottom: 2px; }\n.bs-toolbar[data-mode=\"bar\"] { top: 0 !important; left: 0 !important; right: 0 !important; bottom: auto !important; transform: none !important; flex-direction: column; align-items: stretch; gap: 0; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 34px; padding: 0 8px 0 6px; gap: 6px; border-radius: 0; border-width: 0 0 1px 0; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-label { max-width: none; flex: 1; font-size: 13px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] { width: auto; padding: 0 10px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text { position: static; width: auto; height: auto; clip: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-controls { margin-left: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-menu { position: absolute; top: 38px; right: 8px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot { cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot:hover { background: transparent; }\n.bs-toolbar-menu { width: 300px; max-width: calc(100vw - 32px); background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: 12px; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); overflow: hidden; }\n.bs-toolbar-menu[hidden] { display: none; }\n.bs-toolbar-menu-head { padding: 12px 14px 10px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-menu-name { font-weight: 600; }\n.bs-toolbar-menu-status { color: var(--bs-muted); font-size: 12px; margin-top: 2px; overflow-wrap: anywhere; }\n.bs-toolbar-menu-status[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-share-warning { font-size: 11px; color: var(--bs-busy); }\n.bs-toolbar-share-title { font-weight: 600; margin-bottom: 4px; }\n.bs-toolbar-share-form { display: flex; flex-direction: column; gap: 8px; margin: 0 0 4px; }\n.bs-toolbar-share-form[hidden], .bs-toolbar-share-form [hidden] { display: none !important; }\n.bs-toolbar-share-field { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-label { color: var(--bs-muted); width: 40px; flex: none; }\n.bs-toolbar-share-value { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }\n.bs-toolbar-share-input { flex: 1; min-width: 0; box-sizing: border-box; height: 28px; padding: 0 8px; border: 1px solid var(--bs-line); border-radius: 7px; background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); color: var(--bs-fg); font: inherit; font-size: 12px; }\n.bs-toolbar-share-input:focus { outline: none; border-color: var(--bs-accent); }\n.bs-toolbar-share-modes { display: flex; flex-direction: column; gap: 2px; }\n.bs-toolbar-share-mode { text-align: left; padding: 6px 8px 6px 26px; border: 0; border-radius: 7px; background: transparent; color: var(--bs-fg); font: inherit; font-size: 12px; cursor: pointer; position: relative; }\n.bs-toolbar-share-mode::before { content: \"\"; position: absolute; left: 8px; top: 50%; width: 10px; height: 10px; margin-top: -6px; border-radius: 50%; border: 1px solid var(--bs-muted); }\n.bs-toolbar-share-mode[aria-checked=\"true\"]::before { border-color: var(--bs-accent); background: radial-gradient(var(--bs-accent) 45%, transparent 50%); }\n.bs-toolbar-share-mode:hover { background: var(--bs-hover); }\n.bs-toolbar-share-recent { display: flex; flex-wrap: wrap; gap: 4px; }\n.bs-toolbar-share-chip { padding: 2px 8px; border: 1px solid var(--bs-line); border-radius: 999px; background: transparent; color: var(--bs-muted); font: inherit; font-size: 11px; cursor: pointer; }\n.bs-toolbar-share-chip:hover { color: var(--bs-fg); border-color: var(--bs-muted); }\n.bs-toolbar-share-note { font-size: 11px; color: var(--bs-muted); }\n.bs-toolbar-share-error { font-size: 11px; color: var(--bs-error); }\n.bs-toolbar-share-error:empty { display: none; }\n.bs-toolbar-share-actions { display: flex; justify-content: flex-end; gap: 6px; }\n.bs-toolbar-share-submit, .bs-toolbar-share-cancel { height: 28px; padding: 0 12px; border-radius: 7px; font: inherit; font-size: 12px; cursor: pointer; }\n.bs-toolbar-share-submit { border: 0; background: var(--bs-accent); color: var(--bs-on-accent); font-weight: 600; }\n.bs-toolbar-share-cancel { border: 1px solid var(--bs-line); background: transparent; color: var(--bs-fg); }\n.bs-toolbar-share-submit:disabled, .bs-toolbar-share-cancel:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-share-live { display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-share-live:empty { display: none; }\n.bs-toolbar-share-access { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-link-button { border: 0; background: transparent; color: var(--bs-accent); font: inherit; font-size: 12px; cursor: pointer; padding: 0; }\n.bs-toolbar-share-visitors { display: flex; flex-direction: column; gap: 3px; }\n.bs-toolbar-share-visitor { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-visitor::before { content: \"\"; width: 7px; height: 7px; border-radius: 50%; background: var(--bs-muted); opacity: 0.5; flex: none; }\n.bs-toolbar-share-visitor[data-here=\"true\"]::before { background: var(--bs-ready); opacity: 1; }\n.bs-toolbar-share-visitor-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-share-muted { color: var(--bs-muted); font-size: 11px; }\n.bs-toolbar-menu-share { padding: 10px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-menu-share[hidden] { display: none; }\n.bs-toolbar-share-row { display: flex; align-items: center; gap: 6px; }\n.bs-toolbar-share-link { color: var(--bs-accent); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; flex: 1; }\n.bs-toolbar-share-meta { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-menu-facts { padding: 8px 14px; display: flex; flex-direction: column; gap: 4px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-fact { display: flex; align-items: center; gap: 8px; min-height: 22px; font-size: 12px; }\n.bs-toolbar-fact-name { color: var(--bs-muted); width: 72px; flex: none; }\n.bs-toolbar-fact-value { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; display: flex; gap: 6px; }\n.bs-toolbar-port { color: var(--bs-accent); text-decoration: none; }\n.bs-toolbar-port:hover { text-decoration: underline; }\n.bs-toolbar-copy { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; flex: none; }\n.bs-toolbar-copy:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-copy.bs-toolbar-copied { color: var(--bs-ready); }\n.bs-toolbar-menu-items { display: flex; flex-direction: column; padding: 6px; }\n.bs-toolbar-menu-items:empty { display: none; }\n.bs-toolbar-menu-item[hidden] { display: none; }\n.bs-toolbar-menu-button { display: block; width: 100%; text-align: left; padding: 7px 8px; border: 0; border-radius: 8px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; }\n.bs-toolbar-menu-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-menu-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-menu-foot { padding: 8px 14px; color: var(--bs-muted); font-size: 11px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection { padding: 6px 12px 8px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection-focus { background: var(--bs-selected); }\n.bs-toolbar-connection-head { display: flex; align-items: baseline; gap: 8px; }\n.bs-toolbar-connection-name { font-weight: 600; }\n.bs-toolbar-connection-state { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-connection[data-state=\"connected\"] .bs-toolbar-connection-state { color: var(--bs-ready); }\n.bs-toolbar-connection[data-state=\"error\"] .bs-toolbar-connection-state { color: var(--bs-error); }\n.bs-toolbar-connection-detail { color: var(--bs-muted); font-size: 12px; margin-top: 2px; }\n.bs-toolbar-connection-actions { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }\n.bs-toolbar-connection-actions .bs-toolbar-menu-button { width: auto; padding: 3px 8px; }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"connected\"] { color: var(--bs-ready); }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"error\"] { color: var(--bs-error); }\n/* The files panel is light, as the file browser it holds (@volter/workbench-files) is light only. */\n.bs-toolbar-files { position: fixed; top: var(--bs-toolbar-top, 0px); right: 0; bottom: 0; width: min(560px, 92vw); z-index: 2147482998; display: flex; flex-direction: column; color-scheme: light; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); border-left: 1px solid var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-files[hidden] { display: none; }\n.bs-toolbar-files .bs-toolbar-drawer-head { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); }\n.bs-toolbar-files-body { flex: 1; min-height: 0; display: flex; }\n.bs-toolbar-files-body > .sysapp { flex: 1; min-width: 0; }\n.bs-toolbar-files-preview { margin: 0; max-height: 30%; overflow: auto; padding: 8px 12px; border-top: 1px solid var(--volter-border-subtle, light-dark(#e9e8e1, #223239)); background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }\n.bs-toolbar-drawer { position: fixed; left: 0; right: 0; bottom: 0; z-index: 2147482999; display: flex; flex-direction: column; color-scheme: dark; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); border-top: 1px solid var(--bs-line); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-drawer[hidden] { display: none; }\n.bs-toolbar-drawer-handle { height: 6px; cursor: ns-resize; flex: none; background: linear-gradient(to bottom, var(--bs-hover), transparent); }\n.bs-toolbar-drawer-head { display: flex; align-items: center; gap: 10px; height: 28px; padding: 0 12px; flex: none; font-size: 12px; }\n.bs-toolbar-drawer-title { font-weight: 600; }\n.bs-toolbar-drawer-note { color: var(--bs-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-icon { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-icon:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-drawer-body { position: relative; flex: 1; min-height: 0; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); }\n/* The workspace fills the body under the drawer's head, on the same roles as Volter Harness's own workspace, in the dark scheme as the drawer is dark. */\n.bs-toolbar-drawer .sctui-workspace { --scui-color-scheme: dark; color-scheme: dark; --sctui-terminal-background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); --sctui-bg-default: var(--volter-surface-page, light-dark(#f7f6f1, #0f1a1f)); --sctui-bg-raised-default: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --sctui-fill-default: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); --sctui-fill-strong-default: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); --sctui-fg-default: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --sctui-muted-default: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --sctui-border-default: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --sctui-border-strong-default: var(--volter-border-strong, light-dark(#c4c5bc, #3d5059)); --sctui-danger-default: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); }\n@media (max-width: 600px) { .bs-toolbar-label { display: none; } .bs-toolbar-menu { width: calc(100vw - 32px); } }\n\n/* ADR-0050: icons launch programs; programs own content, hosts own windows. */\n.bs-program, .bs-program-window { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; color: var(--bs-fg); background: var(--bs-bg); font: 13px/1.4 \"Geist\", sans-serif; box-sizing: border-box; }\n.bs-toolbar .bs-toolbar-button { width: 32px; height: 32px; padding: 0; justify-content: center; }\n.bs-toolbar .bs-toolbar-button-text { display: none !important; }\n.bs-toolbar[data-mode=\"bar\"] { inset: auto 16px 16px auto !important; width: max-content; align-items: flex-end; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 36px; border: 1px solid var(--bs-line); border-radius: 4px; }\n.bs-toolbar, .bs-toolbar-pill { font-family: \"Geist\", sans-serif; --bs-radius: 4px; }\n.bs-toolbar button:focus-visible, .bs-program-window button:focus-visible, .bs-program-title:focus-visible { outline: 2px solid var(--bs-accent); outline-offset: 2px; }\n.bs-program-window { position: fixed; display: flex; flex-direction: column; border: 1px solid var(--bs-line); border-radius: 4px; min-width: min(280px, 100vw); min-height: min(180px, 100vh); max-width: 100vw; max-height: 100vh; }\n.bs-program-window[hidden] { display: none; }\n.bs-program-window[data-active=\"true\"] { border-color: var(--bs-accent); }\n.bs-program-titlebar { flex: 0 0 36px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 8px 0 12px; border-bottom: 1px solid var(--bs-line); cursor: move; touch-action: none; user-select: none; }\n.bs-program-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-program-body { flex: 1; min-height: 0; min-width: 0; overflow: auto; display: flex; flex-direction: column; padding: 12px; gap: 8px; }\n.bs-program-window[data-program=\"terminal\"] .bs-program-body, .bs-program-window[data-program=\"files\"] .bs-program-body { padding: 0; overflow: hidden; }\n.bs-program-terminal { flex: 1; min-height: 0; height: 100%; }\n.bs-program .bs-toolbar-files-body { flex: 1; min-height: 0; }\n.bs-program .bs-toolbar-files-preview { flex: 0 1 40%; overflow: auto; margin: 0; white-space: pre-wrap; }\n.bs-program input, .bs-program select, .bs-program button { font: inherit; }\n.bs-program .bs-toolbar-share-row { flex-wrap: wrap; }\n.bs-program .bs-toolbar-share-link { overflow-wrap: anywhere; }\n.bs-program-edge { position: absolute; touch-action: none; z-index: 2; }\n.bs-program-edge-n, .bs-program-edge-s { left: 8px; right: 8px; height: 8px; cursor: ns-resize; }\n.bs-program-edge-n { top: -4px; } .bs-program-edge-s { bottom: -4px; }\n.bs-program-edge-e, .bs-program-edge-w { top: 8px; bottom: 8px; width: 8px; cursor: ew-resize; }\n.bs-program-edge-e { right: -4px; } .bs-program-edge-w { left: -4px; }\n.bs-program-edge-ne, .bs-program-edge-nw, .bs-program-edge-se, .bs-program-edge-sw { width: 12px; height: 12px; }\n.bs-program-edge-ne { right: -4px; top: -4px; cursor: nesw-resize; } .bs-program-edge-sw { left: -4px; bottom: -4px; cursor: nesw-resize; }\n.bs-program-edge-nw { left: -4px; top: -4px; cursor: nwse-resize; } .bs-program-edge-se { right: -4px; bottom: -4px; cursor: nwse-resize; }\n\n/* ADR-0059: macOS program structure with Volter semantic paint. */\n.bs-program { position: relative; min-height: 0; overflow: hidden; color-scheme: inherit; }\n.bs-program-body { padding: 0; gap: 0; }\n.bs-program button, .bs-program input, .bs-program select { box-sizing: border-box; }\n.bs-native-button { border: 1px solid var(--bs-line); border-radius: 5px; background: var(--bs-bg); color: var(--bs-fg); padding: 3px 10px; min-height: 24px; text-decoration: none; cursor: pointer; white-space: nowrap; }\n.bs-native-button:disabled { opacity: .5; cursor: default; }\n.bs-native-primary { background: var(--bs-accent); color: var(--bs-on-accent); border-color: var(--bs-accent); }\n.bs-native-icon-button, .bs-native-info { border: 0; background: transparent; color: inherit; display: inline-flex; align-items: center; justify-content: center; padding: 3px; cursor: pointer; }\n.bs-native-icon-button img, .bs-native-info img { width: 16px; height: 16px; }\n.bs-native-error { color: var(--bs-error); font-size: 12px; margin: 8px 0; overflow-wrap: anywhere; }\n.bs-native-error:empty { display: none; }\n.bs-settings { display: grid; grid-template-columns: 160px minmax(0,1fr); height: 100%; min-height: 0; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-settings-sidebar { background: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); border-right: 1px solid var(--bs-line); padding: 18px 10px; min-width: 0; }\n.bs-settings-sidebar h2 { color: var(--bs-muted); font-size: 11px; font-weight: 600; margin: 0 8px 14px; }\n.bs-settings-navigation { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 30px; padding: 5px 8px; margin: 2px 0; border: 0; border-radius: 5px; background: transparent; text-align: left; color: inherit; cursor: pointer; }\n.bs-settings-navigation img { width: 18px; height: 18px; }\n.bs-settings-navigation[aria-current=\"page\"], .bs-keychain-selected { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-settings-main { min-width: 0; overflow: auto; }\n.bs-settings-title { margin: 0; min-height: 48px; padding: 16px 20px 8px; box-sizing: border-box; font-size: 14px; font-weight: 650; }\n.bs-settings-content { padding: 8px 20px 24px; }\n.bs-settings-heading { margin: 22px 0 7px; font-size: 12px; font-weight: 600; }\n.bs-settings-heading:first-child { margin-top: 2px; }\n.bs-settings-group { border: 1px solid var(--bs-line); border-radius: 7px; overflow: hidden; background: var(--bs-bg); margin: 0 0 12px; }\n.bs-settings-group:empty { display: none; }\n.bs-settings-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 42px; padding: 8px 12px; box-sizing: border-box; border: 0; border-bottom: 1px solid var(--bs-line); color: inherit; font: inherit; }\n.bs-program [hidden] { display: none !important; }\n.bs-settings-row:last-child { border-bottom: 0; }\n.bs-settings-value { text-align: right; color: var(--bs-muted); overflow-wrap: anywhere; min-width: 0; }\n.bs-settings-account { width: 100%; text-align: left; background: transparent; cursor: pointer; }\n.bs-settings-account > span:first-of-type { flex: 1; }\n.bs-settings-account strong, .bs-settings-account small { display: block; }\n.bs-settings-account small { color: var(--bs-muted); margin-top: 3px; }\n.bs-settings-note { font-size: 12px; color: var(--bs-muted); line-height: 1.5; }\n.bs-settings-empty { font-size: 15px; font-weight: 600; margin: 30px 0 4px; }\n.bs-environment-identity { text-align: center; padding: 12px 0 14px; }\n.bs-environment-identity img { width: 76px; height: 76px; }\n.bs-environment-identity h2 { font-size: 20px; font-weight: 650; margin: 10px 0; }\n.bs-sharing-service { min-height: 48px; gap: 10px; }\n.bs-sharing-service-name { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }\n.bs-sharing-service-name img { width: 24px; height: 24px; }\n.bs-native-switch { position: relative; flex: 0 0 28px; height: 17px; border: 1px solid var(--bs-line); border-radius: 12px; background: var(--volter-control-track, light-dark(#b3b6ae, #3d5059)); padding: 0; cursor: pointer; }\n.bs-native-switch::after { content: ''; position: absolute; left: 1px; top: 1px; width: 13px; height: 13px; border-radius: 50%; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); }\n.bs-native-switch[aria-checked=\"true\"] { background: var(--bs-accent); border-color: var(--bs-accent); }\n.bs-native-switch[aria-checked=\"true\"]::after { left: 12px; }\n.bs-native-switch:disabled { opacity: .45; }\n.bs-settings-sheet-backdrop { position: absolute; inset: 0; z-index: 8; display: flex; align-items: center; justify-content: center; padding: 16px; background: var(--volter-overlay-scrim, light-dark(rgba(22, 37, 44, 0.38), rgba(0, 0, 0, 0.55))); }\n.bs-settings-sheet-backdrop[hidden] { display: none; }\n.bs-settings-sheet { width: 420px; max-width: 100%; max-height: 100%; overflow: auto; border: 1px solid var(--bs-line); border-radius: 10px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); padding: 20px; box-sizing: border-box; }\n.bs-settings-sheet h2 { font-size: 14px; margin: 0 0 12px; }\n.bs-settings-sheet input, .bs-settings-sheet select, .bs-keychain-toolbar input { min-width: 0; max-width: 100%; border: 1px solid var(--bs-line); border-radius: 4px; padding: 4px 6px; background: var(--bs-bg); color: inherit; }\n.bs-settings-sheet form > input { width: 100%; margin-top: 8px; }\n.bs-settings-sheet-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }\n.bs-sharing-address { display: flex; gap: 10px; align-items: center; padding: 12px; }\n.bs-sharing-address a { overflow-wrap: anywhere; min-width: 0; color: var(--bs-accent); }\n.bs-sharing-addresses > .bs-settings-group > button { margin: 0 0 10px 12px; }\n.bs-keychain { display: grid; grid-template-columns: 145px minmax(0,1fr); height: 100%; min-height: 0; }\n.bs-keychain-selected { display: flex; align-items: center; gap: 5px; padding: 6px; border-radius: 4px; font-size: 12px; }\n.bs-keychain-selected img { width: 16px; height: 16px; }\n.bs-keychain-main { min-width: 0; display: flex; flex-direction: column; }\n.bs-keychain-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 40px; padding: 8px 14px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-toolbar input { width: 45%; }\n.bs-keychain-attributes { min-height: 80px; padding: 18px 22px; box-sizing: border-box; }\n.bs-keychain-attributes p { margin: 5px 0; color: var(--bs-muted); font-size: 12px; }\n.bs-keychain-list { flex: 1; min-height: 0; overflow: auto; }\n.bs-keychain-list table { border-collapse: collapse; width: 100%; text-align: left; font-size: 12px; }\n.bs-keychain-list th { color: var(--bs-muted); font-weight: 500; border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-list th, .bs-keychain-list td { padding: 5px 10px; }\n.bs-keychain-list tbody tr:nth-child(even) { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-keychain-list tbody tr[aria-selected=\"true\"] { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-keychain-footer { display: flex; align-items: center; gap: 8px; padding: 8px 12px; min-height: 34px; color: var(--bs-muted); border-top: 1px solid var(--bs-line); }\n.bs-keychain-footer > span { flex: 1; }\n.bs-terminal { --bs-terminal-background: var(--volter-terminal-background, light-dark(#ffffff, #1e1e1e)); --bs-terminal-foreground: var(--volter-terminal-foreground, light-dark(#000000, #ffffff)); --bs-terminal-cursor: var(--volter-terminal-cursor, light-dark(#9d9d9d, #9d9d9d)); --bs-terminal-selection: var(--volter-terminal-selection, light-dark(#b3d7ff, #3f638b)); display: flex; flex-direction: column; position: relative; height: 100%; min-height: 0; background: var(--bs-terminal-background); color: var(--bs-terminal-foreground); }\n.bs-terminal-toolbar { display: flex; align-items: center; justify-content: center; min-height: 28px; padding: 0 8px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-title { flex: 1; text-align: center; font-size: 12px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }\n.bs-terminal-tabs { display: flex; flex: none; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-tabs[hidden] { display: none; }\n.bs-terminal-tab { display: flex; align-items: center; flex: 1; min-width: 0; border-right: 1px solid var(--bs-line); }\n.bs-terminal-tab[aria-selected=\"true\"] { background: var(--bs-terminal-background); }\n.bs-terminal-tab > button:first-child { flex: 1; border: 0; padding: 6px; background: transparent; font-size: 12px; color: inherit; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }\n.bs-terminal-screens { flex: 1; min-height: 0; position: relative; }\n.bs-terminal-screen { position: absolute; inset: 0; display: flex; flex-direction: column; }\n.bs-terminal-screen[hidden] { display: none; }\n.bs-terminal-canvas { flex: 1; min-height: 0; padding: 4px; overflow: hidden; }\n.bs-terminal-find { border: 1px solid var(--bs-line); border-radius: 4px; padding: 5px; margin: 5px; background: var(--bs-bg); color: inherit; }\n";
|
|
1
|
+
export declare const TOOLBAR_STYLES = ".bs-toolbar, .bs-toolbar-drawer { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-ready: var(--volter-status-healthy-base, light-dark(#3f7a55, #6fbf8e)); --bs-busy: var(--volter-status-attention-base, light-dark(#c7641a, #ec9a52)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; --bs-radius: 999px; font: 13px/1.4 -apple-system, BlinkMacSystemFont, \"Segoe UI\", Inter, system-ui, sans-serif; color: var(--bs-fg); }\n.bs-toolbar { position: fixed; z-index: 2147483000; display: flex; flex-direction: column-reverse; gap: 8px; touch-action: none; --bs-drawer: 0px; }\n.bs-toolbar[data-corner^=\"bottom\"] { bottom: calc(16px + var(--bs-drawer)); }\n.bs-toolbar[data-corner^=\"top\"] { top: 16px; flex-direction: column; }\n.bs-toolbar[data-corner$=\"right\"] { right: 16px; align-items: flex-end; }\n.bs-toolbar[data-corner$=\"left\"] { left: 16px; align-items: flex-start; }\n.bs-toolbar[data-corner$=\"center\"] { left: 50%; transform: translateX(-50%); align-items: center; }\n.bs-toolbar-dragging { transform: none !important; }\n.bs-toolbar-dragging { transition: none !important; opacity: 0.85; }\n.bs-toolbar-pill { display: flex; align-items: center; gap: 2px; height: 36px; padding: 0 6px 0 4px; background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: var(--bs-radius); box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: grab; user-select: none; -webkit-user-select: none; }\n.bs-toolbar-dragging .bs-toolbar-pill { cursor: grabbing; }\n.bs-toolbar-dot { position: relative; width: 28px; height: 28px; border: 0; border-radius: 50%; background: transparent; color: var(--bs-fg); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-dot:hover { background: var(--bs-hover); }\n.bs-toolbar-logo { width: 18px; height: 18px; display: block; }\n.bs-toolbar-badge { position: absolute; right: 2px; bottom: 2px; width: 8px; height: 8px; border-radius: 50%; box-shadow: 0 0 0 2px var(--bs-bg); display: none; }\n.bs-toolbar-dot[data-state=\"loading\"] .bs-toolbar-badge { display: block; background: var(--bs-busy); animation: bs-toolbar-pulse 2.4s ease-in-out infinite; }\n.bs-toolbar-dot[data-state=\"error\"] .bs-toolbar-badge { display: block; background: var(--bs-error); }\n@keyframes bs-toolbar-pulse { 50% { opacity: 0.3; } }\n@media (prefers-reduced-motion: reduce) { .bs-toolbar-badge { animation: none !important; } }\n\n.bs-toolbar-label { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--bs-muted); padding: 0 6px 0 2px; font-size: 12px; }\n.bs-toolbar-label[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-controls { display: flex; align-items: center; gap: 2px; }\n.bs-toolbar-controls-slot { display: contents; }\n.bs-toolbar-button { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border: 0; border-radius: 999px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; white-space: nowrap; }\n.bs-toolbar-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-button[aria-pressed=\"true\"], .bs-toolbar-button.bs-toolbar-on { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-toolbar-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text, .bs-toolbar-button[data-control=\"more\"] .bs-toolbar-button-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }\n.bs-toolbar-button[data-control=\"terminal\"], .bs-toolbar-button[data-control=\"more\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-collapsed .bs-toolbar-label, .bs-toolbar-collapsed .bs-toolbar-controls { display: none; }\n.bs-toolbar-collapsed .bs-toolbar-pill { padding: 0 3px; height: 34px; }\n.bs-toolbar-menu-head { display: flex; align-items: center; gap: 10px; }\n.bs-toolbar-menu-head .bs-toolbar-logo { flex: none; width: 22px; height: 22px; }\n.bs-toolbar-menu-head > div { min-width: 0; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-label { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"] .bs-toolbar-button-text, .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] .bs-toolbar-button-text { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"], .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-button[data-count]:not([data-count=\"\"])::after { content: attr(data-count); position: absolute; top: 1px; right: 1px; min-width: 14px; height: 14px; padding: 0 3px; box-sizing: border-box; border-radius: 7px; background: var(--bs-accent); color: var(--bs-on-accent); font-size: 10px; line-height: 14px; text-align: center; }\n.bs-toolbar-button { position: relative; }\n.bs-toolbar-button[hidden] { display: none; }\n.bs-toolbar-menu-section { padding: 8px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 4px; }\n.bs-toolbar-menu-section[hidden] { display: none; }\n.bs-toolbar-section-title { color: var(--bs-muted); font-size: 11px; margin-bottom: 2px; }\n.bs-toolbar[data-mode=\"bar\"] { top: 0 !important; left: 0 !important; right: 0 !important; bottom: auto !important; transform: none !important; flex-direction: column; align-items: stretch; gap: 0; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 34px; padding: 0 8px 0 6px; gap: 6px; border-radius: 0; border-width: 0 0 1px 0; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-label { max-width: none; flex: 1; font-size: 13px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] { width: auto; padding: 0 10px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text { position: static; width: auto; height: auto; clip: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-controls { margin-left: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-menu { position: absolute; top: 38px; right: 8px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot { cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot:hover { background: transparent; }\n.bs-toolbar-menu { width: 300px; max-width: calc(100vw - 32px); background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: 12px; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); overflow: hidden; }\n.bs-toolbar-menu[hidden] { display: none; }\n.bs-toolbar-menu-head { padding: 12px 14px 10px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-menu-name { font-weight: 600; }\n.bs-toolbar-menu-status { color: var(--bs-muted); font-size: 12px; margin-top: 2px; overflow-wrap: anywhere; }\n.bs-toolbar-menu-status[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-share-warning { font-size: 11px; color: var(--bs-busy); }\n.bs-toolbar-share-title { font-weight: 600; margin-bottom: 4px; }\n.bs-toolbar-share-form { display: flex; flex-direction: column; gap: 8px; margin: 0 0 4px; }\n.bs-toolbar-share-form[hidden], .bs-toolbar-share-form [hidden] { display: none !important; }\n.bs-toolbar-share-field { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-label { color: var(--bs-muted); width: 40px; flex: none; }\n.bs-toolbar-share-value { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }\n.bs-toolbar-share-input { flex: 1; min-width: 0; box-sizing: border-box; height: 28px; padding: 0 8px; border: 1px solid var(--bs-line); border-radius: 7px; background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); color: var(--bs-fg); font: inherit; font-size: 12px; }\n.bs-toolbar-share-input:focus { outline: none; border-color: var(--bs-accent); }\n.bs-toolbar-share-modes { display: flex; flex-direction: column; gap: 2px; }\n.bs-toolbar-share-mode { text-align: left; padding: 6px 8px 6px 26px; border: 0; border-radius: 7px; background: transparent; color: var(--bs-fg); font: inherit; font-size: 12px; cursor: pointer; position: relative; }\n.bs-toolbar-share-mode::before { content: \"\"; position: absolute; left: 8px; top: 50%; width: 10px; height: 10px; margin-top: -6px; border-radius: 50%; border: 1px solid var(--bs-muted); }\n.bs-toolbar-share-mode[aria-checked=\"true\"]::before { border-color: var(--bs-accent); background: radial-gradient(var(--bs-accent) 45%, transparent 50%); }\n.bs-toolbar-share-mode:hover { background: var(--bs-hover); }\n.bs-toolbar-share-recent { display: flex; flex-wrap: wrap; gap: 4px; }\n.bs-toolbar-share-chip { padding: 2px 8px; border: 1px solid var(--bs-line); border-radius: 999px; background: transparent; color: var(--bs-muted); font: inherit; font-size: 11px; cursor: pointer; }\n.bs-toolbar-share-chip:hover { color: var(--bs-fg); border-color: var(--bs-muted); }\n.bs-toolbar-share-note { font-size: 11px; color: var(--bs-muted); }\n.bs-toolbar-share-error { font-size: 11px; color: var(--bs-error); }\n.bs-toolbar-share-error:empty { display: none; }\n.bs-toolbar-share-actions { display: flex; justify-content: flex-end; gap: 6px; }\n.bs-toolbar-share-submit, .bs-toolbar-share-cancel { height: 28px; padding: 0 12px; border-radius: 7px; font: inherit; font-size: 12px; cursor: pointer; }\n.bs-toolbar-share-submit { border: 0; background: var(--bs-accent); color: var(--bs-on-accent); font-weight: 600; }\n.bs-toolbar-share-cancel { border: 1px solid var(--bs-line); background: transparent; color: var(--bs-fg); }\n.bs-toolbar-share-submit:disabled, .bs-toolbar-share-cancel:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-share-live { display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-share-live:empty { display: none; }\n.bs-toolbar-share-access { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-link-button { border: 0; background: transparent; color: var(--bs-accent); font: inherit; font-size: 12px; cursor: pointer; padding: 0; }\n.bs-toolbar-share-visitors { display: flex; flex-direction: column; gap: 3px; }\n.bs-toolbar-share-visitor { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-visitor::before { content: \"\"; width: 7px; height: 7px; border-radius: 50%; background: var(--bs-muted); opacity: 0.5; flex: none; }\n.bs-toolbar-share-visitor[data-here=\"true\"]::before { background: var(--bs-ready); opacity: 1; }\n.bs-toolbar-share-visitor-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-share-muted { color: var(--bs-muted); font-size: 11px; }\n.bs-toolbar-menu-share { padding: 10px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-menu-share[hidden] { display: none; }\n.bs-toolbar-share-row { display: flex; align-items: center; gap: 6px; }\n.bs-toolbar-share-link { color: var(--bs-accent); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; flex: 1; }\n.bs-toolbar-share-meta { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-menu-facts { padding: 8px 14px; display: flex; flex-direction: column; gap: 4px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-fact { display: flex; align-items: center; gap: 8px; min-height: 22px; font-size: 12px; }\n.bs-toolbar-fact-name { color: var(--bs-muted); width: 72px; flex: none; }\n.bs-toolbar-fact-value { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; display: flex; gap: 6px; }\n.bs-toolbar-port { color: var(--bs-accent); text-decoration: none; }\n.bs-toolbar-port:hover { text-decoration: underline; }\n.bs-toolbar-copy { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; flex: none; }\n.bs-toolbar-copy:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-copy.bs-toolbar-copied { color: var(--bs-ready); }\n.bs-toolbar-menu-items { display: flex; flex-direction: column; padding: 6px; }\n.bs-toolbar-menu-items:empty { display: none; }\n.bs-toolbar-menu-item[hidden] { display: none; }\n.bs-toolbar-menu-button { display: block; width: 100%; text-align: left; padding: 7px 8px; border: 0; border-radius: 8px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; }\n.bs-toolbar-menu-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-menu-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-menu-foot { padding: 8px 14px; color: var(--bs-muted); font-size: 11px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection { padding: 6px 12px 8px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection-focus { background: var(--bs-selected); }\n.bs-toolbar-connection-head { display: flex; align-items: baseline; gap: 8px; }\n.bs-toolbar-connection-name { font-weight: 600; }\n.bs-toolbar-connection-state { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-connection[data-state=\"connected\"] .bs-toolbar-connection-state { color: var(--bs-ready); }\n.bs-toolbar-connection[data-state=\"error\"] .bs-toolbar-connection-state { color: var(--bs-error); }\n.bs-toolbar-connection-detail { color: var(--bs-muted); font-size: 12px; margin-top: 2px; }\n.bs-toolbar-connection-actions { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }\n.bs-toolbar-connection-actions .bs-toolbar-menu-button { width: auto; padding: 3px 8px; }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"connected\"] { color: var(--bs-ready); }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"error\"] { color: var(--bs-error); }\n/* The files panel is light, as the file browser it holds (@volter/workbench-files) is light only. */\n.bs-toolbar-files { position: fixed; top: var(--bs-toolbar-top, 0px); right: 0; bottom: 0; width: min(560px, 92vw); z-index: 2147482998; display: flex; flex-direction: column; color-scheme: light; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); border-left: 1px solid var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-files[hidden] { display: none; }\n.bs-toolbar-files .bs-toolbar-drawer-head { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); }\n.bs-toolbar-files-body { flex: 1; min-height: 0; display: flex; }\n.bs-toolbar-files-body > .sysapp { flex: 1; min-width: 0; }\n.bs-toolbar-files-preview { margin: 0; max-height: 30%; overflow: auto; padding: 8px 12px; border-top: 1px solid var(--volter-border-subtle, light-dark(#e9e8e1, #223239)); background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }\n.bs-toolbar-drawer { position: fixed; left: 0; right: 0; bottom: 0; z-index: 2147482999; display: flex; flex-direction: column; color-scheme: dark; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); border-top: 1px solid var(--bs-line); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-drawer[hidden] { display: none; }\n.bs-origin-reset { inset: 0; margin: auto; width: min(560px, calc(100vw - 64px)); max-height: calc(100vh - 64px); padding: 24px; overflow: auto; border: 1px solid var(--bs-line); border-radius: 12px; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); color-scheme: light dark; }\n.bs-origin-reset:not([open]) { display: none; }\n.bs-origin-reset h1 { margin: 0; font-size: 20px; }\n.bs-origin-reset ol { padding-left: 24px; }\n.bs-origin-reset-controls { display: flex; justify-content: flex-end; gap: 8px; }\n.bs-toolbar-drawer-handle { height: 6px; cursor: ns-resize; flex: none; background: linear-gradient(to bottom, var(--bs-hover), transparent); }\n.bs-toolbar-drawer-head { display: flex; align-items: center; gap: 10px; height: 28px; padding: 0 12px; flex: none; font-size: 12px; }\n.bs-toolbar-drawer-title { font-weight: 600; }\n.bs-toolbar-drawer-note { color: var(--bs-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-icon { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-icon:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-drawer-body { position: relative; flex: 1; min-height: 0; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); }\n/* The workspace fills the body under the drawer's head, on the same roles as Volter Harness's own workspace, in the dark scheme as the drawer is dark. */\n.bs-toolbar-drawer .sctui-workspace { --scui-color-scheme: dark; color-scheme: dark; --sctui-terminal-background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); --sctui-bg-default: var(--volter-surface-page, light-dark(#f7f6f1, #0f1a1f)); --sctui-bg-raised-default: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --sctui-fill-default: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); --sctui-fill-strong-default: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); --sctui-fg-default: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --sctui-muted-default: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --sctui-border-default: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --sctui-border-strong-default: var(--volter-border-strong, light-dark(#c4c5bc, #3d5059)); --sctui-danger-default: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); }\n@media (max-width: 600px) { .bs-toolbar-label { display: none; } .bs-toolbar-menu { width: calc(100vw - 32px); } }\n\n/* ADR-0050: icons launch programs; programs own content, hosts own windows. */\n.bs-program, .bs-program-window { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; color: var(--bs-fg); background: var(--bs-bg); font: 13px/1.4 \"Geist\", sans-serif; box-sizing: border-box; }\n.bs-toolbar .bs-toolbar-button { width: 32px; height: 32px; padding: 0; justify-content: center; }\n.bs-toolbar .bs-toolbar-button-text { display: none !important; }\n.bs-toolbar[data-mode=\"bar\"] { inset: auto 16px 16px auto !important; width: max-content; align-items: flex-end; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 36px; border: 1px solid var(--bs-line); border-radius: 4px; }\n.bs-toolbar, .bs-toolbar-pill { font-family: \"Geist\", sans-serif; --bs-radius: 4px; }\n.bs-toolbar button:focus-visible, .bs-program-window button:focus-visible, .bs-program-title:focus-visible { outline: 2px solid var(--bs-accent); outline-offset: 2px; }\n.bs-program-window { position: fixed; display: flex; flex-direction: column; border: 1px solid var(--bs-line); border-radius: 4px; min-width: min(280px, 100vw); min-height: min(180px, 100vh); max-width: 100vw; max-height: 100vh; }\n.bs-program-window[hidden] { display: none; }\n.bs-program-window[data-active=\"true\"] { border-color: var(--bs-accent); }\n.bs-program-titlebar { flex: 0 0 36px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 8px 0 12px; border-bottom: 1px solid var(--bs-line); cursor: move; touch-action: none; user-select: none; }\n.bs-program-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-program-body { flex: 1; min-height: 0; min-width: 0; overflow: auto; display: flex; flex-direction: column; padding: 12px; gap: 8px; }\n.bs-program-window[data-program=\"terminal\"] .bs-program-body, .bs-program-window[data-program=\"files\"] .bs-program-body { padding: 0; overflow: hidden; }\n.bs-program-terminal { flex: 1; min-height: 0; height: 100%; }\n.bs-program .bs-toolbar-files-body { flex: 1; min-height: 0; }\n.bs-program .bs-toolbar-files-preview { flex: 0 1 40%; overflow: auto; margin: 0; white-space: pre-wrap; }\n.bs-program input, .bs-program select, .bs-program button { font: inherit; }\n.bs-program .bs-toolbar-share-row { flex-wrap: wrap; }\n.bs-program .bs-toolbar-share-link { overflow-wrap: anywhere; }\n.bs-program-edge { position: absolute; touch-action: none; z-index: 2; }\n.bs-program-edge-n, .bs-program-edge-s { left: 8px; right: 8px; height: 8px; cursor: ns-resize; }\n.bs-program-edge-n { top: -4px; } .bs-program-edge-s { bottom: -4px; }\n.bs-program-edge-e, .bs-program-edge-w { top: 8px; bottom: 8px; width: 8px; cursor: ew-resize; }\n.bs-program-edge-e { right: -4px; } .bs-program-edge-w { left: -4px; }\n.bs-program-edge-ne, .bs-program-edge-nw, .bs-program-edge-se, .bs-program-edge-sw { width: 12px; height: 12px; }\n.bs-program-edge-ne { right: -4px; top: -4px; cursor: nesw-resize; } .bs-program-edge-sw { left: -4px; bottom: -4px; cursor: nesw-resize; }\n.bs-program-edge-nw { left: -4px; top: -4px; cursor: nwse-resize; } .bs-program-edge-se { right: -4px; bottom: -4px; cursor: nwse-resize; }\n\n/* ADR-0059: macOS program structure with Volter semantic paint. */\n.bs-program { position: relative; min-height: 0; overflow: hidden; color-scheme: inherit; }\n.bs-program-body { padding: 0; gap: 0; }\n.bs-program button, .bs-program input, .bs-program select { box-sizing: border-box; }\n.bs-native-button { border: 1px solid var(--bs-line); border-radius: 5px; background: var(--bs-bg); color: var(--bs-fg); padding: 3px 10px; min-height: 24px; text-decoration: none; cursor: pointer; white-space: nowrap; }\n.bs-native-button:disabled { opacity: .5; cursor: default; }\n.bs-native-primary { background: var(--bs-accent); color: var(--bs-on-accent); border-color: var(--bs-accent); }\n.bs-native-icon-button, .bs-native-info { border: 0; background: transparent; color: inherit; display: inline-flex; align-items: center; justify-content: center; padding: 3px; cursor: pointer; }\n.bs-native-icon-button img, .bs-native-info img { width: 16px; height: 16px; }\n.bs-native-error { color: var(--bs-error); font-size: 12px; margin: 8px 0; overflow-wrap: anywhere; }\n.bs-native-error:empty { display: none; }\n.bs-settings { display: grid; grid-template-columns: 160px minmax(0,1fr); height: 100%; min-height: 0; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-settings-sidebar { background: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); border-right: 1px solid var(--bs-line); padding: 18px 10px; min-width: 0; }\n.bs-settings-sidebar h2 { color: var(--bs-muted); font-size: 11px; font-weight: 600; margin: 0 8px 14px; }\n.bs-settings-navigation { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 30px; padding: 5px 8px; margin: 2px 0; border: 0; border-radius: 5px; background: transparent; text-align: left; color: inherit; cursor: pointer; }\n.bs-settings-navigation img { width: 18px; height: 18px; }\n.bs-settings-navigation[aria-current=\"page\"], .bs-keychain-selected { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-settings-main { min-width: 0; overflow: auto; }\n.bs-settings-title { margin: 0; min-height: 48px; padding: 16px 20px 8px; box-sizing: border-box; font-size: 14px; font-weight: 650; }\n.bs-settings-content { padding: 8px 20px 24px; }\n.bs-settings-heading { margin: 22px 0 7px; font-size: 12px; font-weight: 600; }\n.bs-settings-heading:first-child { margin-top: 2px; }\n.bs-settings-group { border: 1px solid var(--bs-line); border-radius: 7px; overflow: hidden; background: var(--bs-bg); margin: 0 0 12px; }\n.bs-settings-group:empty { display: none; }\n.bs-settings-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 42px; padding: 8px 12px; box-sizing: border-box; border: 0; border-bottom: 1px solid var(--bs-line); color: inherit; font: inherit; }\n.bs-program [hidden] { display: none !important; }\n.bs-settings-row:last-child { border-bottom: 0; }\n.bs-settings-value { text-align: right; color: var(--bs-muted); overflow-wrap: anywhere; min-width: 0; }\n.bs-settings-account { width: 100%; text-align: left; background: transparent; cursor: pointer; }\n.bs-settings-account > span:first-of-type { flex: 1; }\n.bs-settings-account strong, .bs-settings-account small { display: block; }\n.bs-settings-account small { color: var(--bs-muted); margin-top: 3px; }\n.bs-settings-note { font-size: 12px; color: var(--bs-muted); line-height: 1.5; }\n.bs-settings-empty { font-size: 15px; font-weight: 600; margin: 30px 0 4px; }\n.bs-environment-identity { text-align: center; padding: 12px 0 14px; }\n.bs-environment-identity img { width: 76px; height: 76px; }\n.bs-environment-identity h2 { font-size: 20px; font-weight: 650; margin: 10px 0; }\n.bs-sharing-service { min-height: 48px; gap: 10px; }\n.bs-sharing-service-name { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }\n.bs-sharing-service-name img { width: 24px; height: 24px; }\n.bs-native-switch { position: relative; flex: 0 0 28px; height: 17px; border: 1px solid var(--bs-line); border-radius: 12px; background: var(--volter-control-track, light-dark(#b3b6ae, #3d5059)); padding: 0; cursor: pointer; }\n.bs-native-switch::after { content: ''; position: absolute; left: 1px; top: 1px; width: 13px; height: 13px; border-radius: 50%; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); }\n.bs-native-switch[aria-checked=\"true\"] { background: var(--bs-accent); border-color: var(--bs-accent); }\n.bs-native-switch[aria-checked=\"true\"]::after { left: 12px; }\n.bs-native-switch:disabled { opacity: .45; }\n.bs-settings-sheet-backdrop { position: absolute; inset: 0; z-index: 8; display: flex; align-items: center; justify-content: center; padding: 16px; background: var(--volter-overlay-scrim, light-dark(rgba(22, 37, 44, 0.38), rgba(0, 0, 0, 0.55))); }\n.bs-settings-sheet-backdrop[hidden] { display: none; }\n.bs-settings-sheet { width: 420px; max-width: 100%; max-height: 100%; overflow: auto; border: 1px solid var(--bs-line); border-radius: 10px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); padding: 20px; box-sizing: border-box; }\n.bs-settings-sheet h2 { font-size: 14px; margin: 0 0 12px; }\n.bs-settings-sheet input, .bs-settings-sheet select, .bs-keychain-toolbar input { min-width: 0; max-width: 100%; border: 1px solid var(--bs-line); border-radius: 4px; padding: 4px 6px; background: var(--bs-bg); color: inherit; }\n.bs-settings-sheet form > input { width: 100%; margin-top: 8px; }\n.bs-settings-sheet-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }\n.bs-sharing-address { display: flex; gap: 10px; align-items: center; padding: 12px; }\n.bs-sharing-address a { overflow-wrap: anywhere; min-width: 0; color: var(--bs-accent); }\n.bs-sharing-addresses > .bs-settings-group > button { margin: 0 0 10px 12px; }\n.bs-keychain { display: grid; grid-template-columns: 145px minmax(0,1fr); height: 100%; min-height: 0; }\n.bs-keychain-selected { display: flex; align-items: center; gap: 5px; padding: 6px; border-radius: 4px; font-size: 12px; }\n.bs-keychain-selected img { width: 16px; height: 16px; }\n.bs-keychain-main { min-width: 0; display: flex; flex-direction: column; }\n.bs-keychain-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 40px; padding: 8px 14px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-toolbar input { width: 45%; }\n.bs-keychain-attributes { min-height: 80px; padding: 18px 22px; box-sizing: border-box; }\n.bs-keychain-attributes p { margin: 5px 0; color: var(--bs-muted); font-size: 12px; }\n.bs-keychain-list { flex: 1; min-height: 0; overflow: auto; }\n.bs-keychain-list table { border-collapse: collapse; width: 100%; text-align: left; font-size: 12px; }\n.bs-keychain-list th { color: var(--bs-muted); font-weight: 500; border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-list th, .bs-keychain-list td { padding: 5px 10px; }\n.bs-keychain-list tbody tr:nth-child(even) { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-keychain-list tbody tr[aria-selected=\"true\"] { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-keychain-footer { display: flex; align-items: center; gap: 8px; padding: 8px 12px; min-height: 34px; color: var(--bs-muted); border-top: 1px solid var(--bs-line); }\n.bs-keychain-footer > span { flex: 1; }\n.bs-terminal { --bs-terminal-background: var(--volter-terminal-background, light-dark(#ffffff, #1e1e1e)); --bs-terminal-foreground: var(--volter-terminal-foreground, light-dark(#000000, #ffffff)); --bs-terminal-cursor: var(--volter-terminal-cursor, light-dark(#9d9d9d, #9d9d9d)); --bs-terminal-selection: var(--volter-terminal-selection, light-dark(#b3d7ff, #3f638b)); display: flex; flex-direction: column; position: relative; height: 100%; min-height: 0; background: var(--bs-terminal-background); color: var(--bs-terminal-foreground); }\n.bs-terminal-toolbar { display: flex; align-items: center; justify-content: center; min-height: 28px; padding: 0 8px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-title { flex: 1; text-align: center; font-size: 12px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }\n.bs-terminal-tabs { display: flex; flex: none; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-tabs[hidden] { display: none; }\n.bs-terminal-tab { display: flex; align-items: center; flex: 1; min-width: 0; border-right: 1px solid var(--bs-line); }\n.bs-terminal-tab[aria-selected=\"true\"] { background: var(--bs-terminal-background); }\n.bs-terminal-tab > button:first-child { flex: 1; border: 0; padding: 6px; background: transparent; font-size: 12px; color: inherit; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }\n.bs-terminal-screens { flex: 1; min-height: 0; position: relative; }\n.bs-terminal-screen { position: absolute; inset: 0; display: flex; flex-direction: column; }\n.bs-terminal-screen[hidden] { display: none; }\n.bs-terminal-canvas { flex: 1; min-height: 0; padding: 4px; overflow: hidden; }\n.bs-terminal-find { border: 1px solid var(--bs-line); border-radius: 4px; padding: 5px; margin: 5px; background: var(--bs-bg); color: inherit; }\n";
|
|
2
2
|
//# sourceMappingURL=toolbar-styles.generated.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-styles.generated.d.ts","sourceRoot":"","sources":["../src/toolbar-styles.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"toolbar-styles.generated.d.ts","sourceRoot":"","sources":["../src/toolbar-styles.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,cAAc,o5/BAAo5/B,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Generated from toolbar.css by scripts/build-brand-styles.mjs. Edit that file.
|
|
2
|
-
export const TOOLBAR_STYLES = ".bs-toolbar, .bs-toolbar-drawer { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-ready: var(--volter-status-healthy-base, light-dark(#3f7a55, #6fbf8e)); --bs-busy: var(--volter-status-attention-base, light-dark(#c7641a, #ec9a52)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; --bs-radius: 999px; font: 13px/1.4 -apple-system, BlinkMacSystemFont, \"Segoe UI\", Inter, system-ui, sans-serif; color: var(--bs-fg); }\n.bs-toolbar { position: fixed; z-index: 2147483000; display: flex; flex-direction: column-reverse; gap: 8px; touch-action: none; --bs-drawer: 0px; }\n.bs-toolbar[data-corner^=\"bottom\"] { bottom: calc(16px + var(--bs-drawer)); }\n.bs-toolbar[data-corner^=\"top\"] { top: 16px; flex-direction: column; }\n.bs-toolbar[data-corner$=\"right\"] { right: 16px; align-items: flex-end; }\n.bs-toolbar[data-corner$=\"left\"] { left: 16px; align-items: flex-start; }\n.bs-toolbar[data-corner$=\"center\"] { left: 50%; transform: translateX(-50%); align-items: center; }\n.bs-toolbar-dragging { transform: none !important; }\n.bs-toolbar-dragging { transition: none !important; opacity: 0.85; }\n.bs-toolbar-pill { display: flex; align-items: center; gap: 2px; height: 36px; padding: 0 6px 0 4px; background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: var(--bs-radius); box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: grab; user-select: none; -webkit-user-select: none; }\n.bs-toolbar-dragging .bs-toolbar-pill { cursor: grabbing; }\n.bs-toolbar-dot { position: relative; width: 28px; height: 28px; border: 0; border-radius: 50%; background: transparent; color: var(--bs-fg); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-dot:hover { background: var(--bs-hover); }\n.bs-toolbar-logo { width: 18px; height: 18px; display: block; }\n.bs-toolbar-badge { position: absolute; right: 2px; bottom: 2px; width: 8px; height: 8px; border-radius: 50%; box-shadow: 0 0 0 2px var(--bs-bg); display: none; }\n.bs-toolbar-dot[data-state=\"loading\"] .bs-toolbar-badge { display: block; background: var(--bs-busy); animation: bs-toolbar-pulse 2.4s ease-in-out infinite; }\n.bs-toolbar-dot[data-state=\"error\"] .bs-toolbar-badge { display: block; background: var(--bs-error); }\n@keyframes bs-toolbar-pulse { 50% { opacity: 0.3; } }\n@media (prefers-reduced-motion: reduce) { .bs-toolbar-badge { animation: none !important; } }\n\n.bs-toolbar-label { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--bs-muted); padding: 0 6px 0 2px; font-size: 12px; }\n.bs-toolbar-label[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-controls { display: flex; align-items: center; gap: 2px; }\n.bs-toolbar-controls-slot { display: contents; }\n.bs-toolbar-button { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border: 0; border-radius: 999px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; white-space: nowrap; }\n.bs-toolbar-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-button[aria-pressed=\"true\"], .bs-toolbar-button.bs-toolbar-on { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-toolbar-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text, .bs-toolbar-button[data-control=\"more\"] .bs-toolbar-button-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }\n.bs-toolbar-button[data-control=\"terminal\"], .bs-toolbar-button[data-control=\"more\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-collapsed .bs-toolbar-label, .bs-toolbar-collapsed .bs-toolbar-controls { display: none; }\n.bs-toolbar-collapsed .bs-toolbar-pill { padding: 0 3px; height: 34px; }\n.bs-toolbar-menu-head { display: flex; align-items: center; gap: 10px; }\n.bs-toolbar-menu-head .bs-toolbar-logo { flex: none; width: 22px; height: 22px; }\n.bs-toolbar-menu-head > div { min-width: 0; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-label { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"] .bs-toolbar-button-text, .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] .bs-toolbar-button-text { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"], .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-button[data-count]:not([data-count=\"\"])::after { content: attr(data-count); position: absolute; top: 1px; right: 1px; min-width: 14px; height: 14px; padding: 0 3px; box-sizing: border-box; border-radius: 7px; background: var(--bs-accent); color: var(--bs-on-accent); font-size: 10px; line-height: 14px; text-align: center; }\n.bs-toolbar-button { position: relative; }\n.bs-toolbar-button[hidden] { display: none; }\n.bs-toolbar-menu-section { padding: 8px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 4px; }\n.bs-toolbar-menu-section[hidden] { display: none; }\n.bs-toolbar-section-title { color: var(--bs-muted); font-size: 11px; margin-bottom: 2px; }\n.bs-toolbar[data-mode=\"bar\"] { top: 0 !important; left: 0 !important; right: 0 !important; bottom: auto !important; transform: none !important; flex-direction: column; align-items: stretch; gap: 0; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 34px; padding: 0 8px 0 6px; gap: 6px; border-radius: 0; border-width: 0 0 1px 0; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-label { max-width: none; flex: 1; font-size: 13px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] { width: auto; padding: 0 10px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text { position: static; width: auto; height: auto; clip: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-controls { margin-left: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-menu { position: absolute; top: 38px; right: 8px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot { cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot:hover { background: transparent; }\n.bs-toolbar-menu { width: 300px; max-width: calc(100vw - 32px); background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: 12px; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); overflow: hidden; }\n.bs-toolbar-menu[hidden] { display: none; }\n.bs-toolbar-menu-head { padding: 12px 14px 10px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-menu-name { font-weight: 600; }\n.bs-toolbar-menu-status { color: var(--bs-muted); font-size: 12px; margin-top: 2px; overflow-wrap: anywhere; }\n.bs-toolbar-menu-status[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-share-warning { font-size: 11px; color: var(--bs-busy); }\n.bs-toolbar-share-title { font-weight: 600; margin-bottom: 4px; }\n.bs-toolbar-share-form { display: flex; flex-direction: column; gap: 8px; margin: 0 0 4px; }\n.bs-toolbar-share-form[hidden], .bs-toolbar-share-form [hidden] { display: none !important; }\n.bs-toolbar-share-field { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-label { color: var(--bs-muted); width: 40px; flex: none; }\n.bs-toolbar-share-value { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }\n.bs-toolbar-share-input { flex: 1; min-width: 0; box-sizing: border-box; height: 28px; padding: 0 8px; border: 1px solid var(--bs-line); border-radius: 7px; background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); color: var(--bs-fg); font: inherit; font-size: 12px; }\n.bs-toolbar-share-input:focus { outline: none; border-color: var(--bs-accent); }\n.bs-toolbar-share-modes { display: flex; flex-direction: column; gap: 2px; }\n.bs-toolbar-share-mode { text-align: left; padding: 6px 8px 6px 26px; border: 0; border-radius: 7px; background: transparent; color: var(--bs-fg); font: inherit; font-size: 12px; cursor: pointer; position: relative; }\n.bs-toolbar-share-mode::before { content: \"\"; position: absolute; left: 8px; top: 50%; width: 10px; height: 10px; margin-top: -6px; border-radius: 50%; border: 1px solid var(--bs-muted); }\n.bs-toolbar-share-mode[aria-checked=\"true\"]::before { border-color: var(--bs-accent); background: radial-gradient(var(--bs-accent) 45%, transparent 50%); }\n.bs-toolbar-share-mode:hover { background: var(--bs-hover); }\n.bs-toolbar-share-recent { display: flex; flex-wrap: wrap; gap: 4px; }\n.bs-toolbar-share-chip { padding: 2px 8px; border: 1px solid var(--bs-line); border-radius: 999px; background: transparent; color: var(--bs-muted); font: inherit; font-size: 11px; cursor: pointer; }\n.bs-toolbar-share-chip:hover { color: var(--bs-fg); border-color: var(--bs-muted); }\n.bs-toolbar-share-note { font-size: 11px; color: var(--bs-muted); }\n.bs-toolbar-share-error { font-size: 11px; color: var(--bs-error); }\n.bs-toolbar-share-error:empty { display: none; }\n.bs-toolbar-share-actions { display: flex; justify-content: flex-end; gap: 6px; }\n.bs-toolbar-share-submit, .bs-toolbar-share-cancel { height: 28px; padding: 0 12px; border-radius: 7px; font: inherit; font-size: 12px; cursor: pointer; }\n.bs-toolbar-share-submit { border: 0; background: var(--bs-accent); color: var(--bs-on-accent); font-weight: 600; }\n.bs-toolbar-share-cancel { border: 1px solid var(--bs-line); background: transparent; color: var(--bs-fg); }\n.bs-toolbar-share-submit:disabled, .bs-toolbar-share-cancel:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-share-live { display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-share-live:empty { display: none; }\n.bs-toolbar-share-access { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-link-button { border: 0; background: transparent; color: var(--bs-accent); font: inherit; font-size: 12px; cursor: pointer; padding: 0; }\n.bs-toolbar-share-visitors { display: flex; flex-direction: column; gap: 3px; }\n.bs-toolbar-share-visitor { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-visitor::before { content: \"\"; width: 7px; height: 7px; border-radius: 50%; background: var(--bs-muted); opacity: 0.5; flex: none; }\n.bs-toolbar-share-visitor[data-here=\"true\"]::before { background: var(--bs-ready); opacity: 1; }\n.bs-toolbar-share-visitor-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-share-muted { color: var(--bs-muted); font-size: 11px; }\n.bs-toolbar-menu-share { padding: 10px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-menu-share[hidden] { display: none; }\n.bs-toolbar-share-row { display: flex; align-items: center; gap: 6px; }\n.bs-toolbar-share-link { color: var(--bs-accent); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; flex: 1; }\n.bs-toolbar-share-meta { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-menu-facts { padding: 8px 14px; display: flex; flex-direction: column; gap: 4px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-fact { display: flex; align-items: center; gap: 8px; min-height: 22px; font-size: 12px; }\n.bs-toolbar-fact-name { color: var(--bs-muted); width: 72px; flex: none; }\n.bs-toolbar-fact-value { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; display: flex; gap: 6px; }\n.bs-toolbar-port { color: var(--bs-accent); text-decoration: none; }\n.bs-toolbar-port:hover { text-decoration: underline; }\n.bs-toolbar-copy { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; flex: none; }\n.bs-toolbar-copy:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-copy.bs-toolbar-copied { color: var(--bs-ready); }\n.bs-toolbar-menu-items { display: flex; flex-direction: column; padding: 6px; }\n.bs-toolbar-menu-items:empty { display: none; }\n.bs-toolbar-menu-item[hidden] { display: none; }\n.bs-toolbar-menu-button { display: block; width: 100%; text-align: left; padding: 7px 8px; border: 0; border-radius: 8px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; }\n.bs-toolbar-menu-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-menu-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-menu-foot { padding: 8px 14px; color: var(--bs-muted); font-size: 11px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection { padding: 6px 12px 8px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection-focus { background: var(--bs-selected); }\n.bs-toolbar-connection-head { display: flex; align-items: baseline; gap: 8px; }\n.bs-toolbar-connection-name { font-weight: 600; }\n.bs-toolbar-connection-state { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-connection[data-state=\"connected\"] .bs-toolbar-connection-state { color: var(--bs-ready); }\n.bs-toolbar-connection[data-state=\"error\"] .bs-toolbar-connection-state { color: var(--bs-error); }\n.bs-toolbar-connection-detail { color: var(--bs-muted); font-size: 12px; margin-top: 2px; }\n.bs-toolbar-connection-actions { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }\n.bs-toolbar-connection-actions .bs-toolbar-menu-button { width: auto; padding: 3px 8px; }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"connected\"] { color: var(--bs-ready); }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"error\"] { color: var(--bs-error); }\n/* The files panel is light, as the file browser it holds (@volter/workbench-files) is light only. */\n.bs-toolbar-files { position: fixed; top: var(--bs-toolbar-top, 0px); right: 0; bottom: 0; width: min(560px, 92vw); z-index: 2147482998; display: flex; flex-direction: column; color-scheme: light; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); border-left: 1px solid var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-files[hidden] { display: none; }\n.bs-toolbar-files .bs-toolbar-drawer-head { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); }\n.bs-toolbar-files-body { flex: 1; min-height: 0; display: flex; }\n.bs-toolbar-files-body > .sysapp { flex: 1; min-width: 0; }\n.bs-toolbar-files-preview { margin: 0; max-height: 30%; overflow: auto; padding: 8px 12px; border-top: 1px solid var(--volter-border-subtle, light-dark(#e9e8e1, #223239)); background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }\n.bs-toolbar-drawer { position: fixed; left: 0; right: 0; bottom: 0; z-index: 2147482999; display: flex; flex-direction: column; color-scheme: dark; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); border-top: 1px solid var(--bs-line); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-drawer[hidden] { display: none; }\n.bs-toolbar-drawer-handle { height: 6px; cursor: ns-resize; flex: none; background: linear-gradient(to bottom, var(--bs-hover), transparent); }\n.bs-toolbar-drawer-head { display: flex; align-items: center; gap: 10px; height: 28px; padding: 0 12px; flex: none; font-size: 12px; }\n.bs-toolbar-drawer-title { font-weight: 600; }\n.bs-toolbar-drawer-note { color: var(--bs-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-icon { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-icon:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-drawer-body { position: relative; flex: 1; min-height: 0; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); }\n/* The workspace fills the body under the drawer's head, on the same roles as Volter Harness's own workspace, in the dark scheme as the drawer is dark. */\n.bs-toolbar-drawer .sctui-workspace { --scui-color-scheme: dark; color-scheme: dark; --sctui-terminal-background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); --sctui-bg-default: var(--volter-surface-page, light-dark(#f7f6f1, #0f1a1f)); --sctui-bg-raised-default: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --sctui-fill-default: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); --sctui-fill-strong-default: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); --sctui-fg-default: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --sctui-muted-default: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --sctui-border-default: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --sctui-border-strong-default: var(--volter-border-strong, light-dark(#c4c5bc, #3d5059)); --sctui-danger-default: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); }\n@media (max-width: 600px) { .bs-toolbar-label { display: none; } .bs-toolbar-menu { width: calc(100vw - 32px); } }\n\n/* ADR-0050: icons launch programs; programs own content, hosts own windows. */\n.bs-program, .bs-program-window { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; color: var(--bs-fg); background: var(--bs-bg); font: 13px/1.4 \"Geist\", sans-serif; box-sizing: border-box; }\n.bs-toolbar .bs-toolbar-button { width: 32px; height: 32px; padding: 0; justify-content: center; }\n.bs-toolbar .bs-toolbar-button-text { display: none !important; }\n.bs-toolbar[data-mode=\"bar\"] { inset: auto 16px 16px auto !important; width: max-content; align-items: flex-end; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 36px; border: 1px solid var(--bs-line); border-radius: 4px; }\n.bs-toolbar, .bs-toolbar-pill { font-family: \"Geist\", sans-serif; --bs-radius: 4px; }\n.bs-toolbar button:focus-visible, .bs-program-window button:focus-visible, .bs-program-title:focus-visible { outline: 2px solid var(--bs-accent); outline-offset: 2px; }\n.bs-program-window { position: fixed; display: flex; flex-direction: column; border: 1px solid var(--bs-line); border-radius: 4px; min-width: min(280px, 100vw); min-height: min(180px, 100vh); max-width: 100vw; max-height: 100vh; }\n.bs-program-window[hidden] { display: none; }\n.bs-program-window[data-active=\"true\"] { border-color: var(--bs-accent); }\n.bs-program-titlebar { flex: 0 0 36px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 8px 0 12px; border-bottom: 1px solid var(--bs-line); cursor: move; touch-action: none; user-select: none; }\n.bs-program-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-program-body { flex: 1; min-height: 0; min-width: 0; overflow: auto; display: flex; flex-direction: column; padding: 12px; gap: 8px; }\n.bs-program-window[data-program=\"terminal\"] .bs-program-body, .bs-program-window[data-program=\"files\"] .bs-program-body { padding: 0; overflow: hidden; }\n.bs-program-terminal { flex: 1; min-height: 0; height: 100%; }\n.bs-program .bs-toolbar-files-body { flex: 1; min-height: 0; }\n.bs-program .bs-toolbar-files-preview { flex: 0 1 40%; overflow: auto; margin: 0; white-space: pre-wrap; }\n.bs-program input, .bs-program select, .bs-program button { font: inherit; }\n.bs-program .bs-toolbar-share-row { flex-wrap: wrap; }\n.bs-program .bs-toolbar-share-link { overflow-wrap: anywhere; }\n.bs-program-edge { position: absolute; touch-action: none; z-index: 2; }\n.bs-program-edge-n, .bs-program-edge-s { left: 8px; right: 8px; height: 8px; cursor: ns-resize; }\n.bs-program-edge-n { top: -4px; } .bs-program-edge-s { bottom: -4px; }\n.bs-program-edge-e, .bs-program-edge-w { top: 8px; bottom: 8px; width: 8px; cursor: ew-resize; }\n.bs-program-edge-e { right: -4px; } .bs-program-edge-w { left: -4px; }\n.bs-program-edge-ne, .bs-program-edge-nw, .bs-program-edge-se, .bs-program-edge-sw { width: 12px; height: 12px; }\n.bs-program-edge-ne { right: -4px; top: -4px; cursor: nesw-resize; } .bs-program-edge-sw { left: -4px; bottom: -4px; cursor: nesw-resize; }\n.bs-program-edge-nw { left: -4px; top: -4px; cursor: nwse-resize; } .bs-program-edge-se { right: -4px; bottom: -4px; cursor: nwse-resize; }\n\n/* ADR-0059: macOS program structure with Volter semantic paint. */\n.bs-program { position: relative; min-height: 0; overflow: hidden; color-scheme: inherit; }\n.bs-program-body { padding: 0; gap: 0; }\n.bs-program button, .bs-program input, .bs-program select { box-sizing: border-box; }\n.bs-native-button { border: 1px solid var(--bs-line); border-radius: 5px; background: var(--bs-bg); color: var(--bs-fg); padding: 3px 10px; min-height: 24px; text-decoration: none; cursor: pointer; white-space: nowrap; }\n.bs-native-button:disabled { opacity: .5; cursor: default; }\n.bs-native-primary { background: var(--bs-accent); color: var(--bs-on-accent); border-color: var(--bs-accent); }\n.bs-native-icon-button, .bs-native-info { border: 0; background: transparent; color: inherit; display: inline-flex; align-items: center; justify-content: center; padding: 3px; cursor: pointer; }\n.bs-native-icon-button img, .bs-native-info img { width: 16px; height: 16px; }\n.bs-native-error { color: var(--bs-error); font-size: 12px; margin: 8px 0; overflow-wrap: anywhere; }\n.bs-native-error:empty { display: none; }\n.bs-settings { display: grid; grid-template-columns: 160px minmax(0,1fr); height: 100%; min-height: 0; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-settings-sidebar { background: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); border-right: 1px solid var(--bs-line); padding: 18px 10px; min-width: 0; }\n.bs-settings-sidebar h2 { color: var(--bs-muted); font-size: 11px; font-weight: 600; margin: 0 8px 14px; }\n.bs-settings-navigation { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 30px; padding: 5px 8px; margin: 2px 0; border: 0; border-radius: 5px; background: transparent; text-align: left; color: inherit; cursor: pointer; }\n.bs-settings-navigation img { width: 18px; height: 18px; }\n.bs-settings-navigation[aria-current=\"page\"], .bs-keychain-selected { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-settings-main { min-width: 0; overflow: auto; }\n.bs-settings-title { margin: 0; min-height: 48px; padding: 16px 20px 8px; box-sizing: border-box; font-size: 14px; font-weight: 650; }\n.bs-settings-content { padding: 8px 20px 24px; }\n.bs-settings-heading { margin: 22px 0 7px; font-size: 12px; font-weight: 600; }\n.bs-settings-heading:first-child { margin-top: 2px; }\n.bs-settings-group { border: 1px solid var(--bs-line); border-radius: 7px; overflow: hidden; background: var(--bs-bg); margin: 0 0 12px; }\n.bs-settings-group:empty { display: none; }\n.bs-settings-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 42px; padding: 8px 12px; box-sizing: border-box; border: 0; border-bottom: 1px solid var(--bs-line); color: inherit; font: inherit; }\n.bs-program [hidden] { display: none !important; }\n.bs-settings-row:last-child { border-bottom: 0; }\n.bs-settings-value { text-align: right; color: var(--bs-muted); overflow-wrap: anywhere; min-width: 0; }\n.bs-settings-account { width: 100%; text-align: left; background: transparent; cursor: pointer; }\n.bs-settings-account > span:first-of-type { flex: 1; }\n.bs-settings-account strong, .bs-settings-account small { display: block; }\n.bs-settings-account small { color: var(--bs-muted); margin-top: 3px; }\n.bs-settings-note { font-size: 12px; color: var(--bs-muted); line-height: 1.5; }\n.bs-settings-empty { font-size: 15px; font-weight: 600; margin: 30px 0 4px; }\n.bs-environment-identity { text-align: center; padding: 12px 0 14px; }\n.bs-environment-identity img { width: 76px; height: 76px; }\n.bs-environment-identity h2 { font-size: 20px; font-weight: 650; margin: 10px 0; }\n.bs-sharing-service { min-height: 48px; gap: 10px; }\n.bs-sharing-service-name { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }\n.bs-sharing-service-name img { width: 24px; height: 24px; }\n.bs-native-switch { position: relative; flex: 0 0 28px; height: 17px; border: 1px solid var(--bs-line); border-radius: 12px; background: var(--volter-control-track, light-dark(#b3b6ae, #3d5059)); padding: 0; cursor: pointer; }\n.bs-native-switch::after { content: ''; position: absolute; left: 1px; top: 1px; width: 13px; height: 13px; border-radius: 50%; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); }\n.bs-native-switch[aria-checked=\"true\"] { background: var(--bs-accent); border-color: var(--bs-accent); }\n.bs-native-switch[aria-checked=\"true\"]::after { left: 12px; }\n.bs-native-switch:disabled { opacity: .45; }\n.bs-settings-sheet-backdrop { position: absolute; inset: 0; z-index: 8; display: flex; align-items: center; justify-content: center; padding: 16px; background: var(--volter-overlay-scrim, light-dark(rgba(22, 37, 44, 0.38), rgba(0, 0, 0, 0.55))); }\n.bs-settings-sheet-backdrop[hidden] { display: none; }\n.bs-settings-sheet { width: 420px; max-width: 100%; max-height: 100%; overflow: auto; border: 1px solid var(--bs-line); border-radius: 10px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); padding: 20px; box-sizing: border-box; }\n.bs-settings-sheet h2 { font-size: 14px; margin: 0 0 12px; }\n.bs-settings-sheet input, .bs-settings-sheet select, .bs-keychain-toolbar input { min-width: 0; max-width: 100%; border: 1px solid var(--bs-line); border-radius: 4px; padding: 4px 6px; background: var(--bs-bg); color: inherit; }\n.bs-settings-sheet form > input { width: 100%; margin-top: 8px; }\n.bs-settings-sheet-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }\n.bs-sharing-address { display: flex; gap: 10px; align-items: center; padding: 12px; }\n.bs-sharing-address a { overflow-wrap: anywhere; min-width: 0; color: var(--bs-accent); }\n.bs-sharing-addresses > .bs-settings-group > button { margin: 0 0 10px 12px; }\n.bs-keychain { display: grid; grid-template-columns: 145px minmax(0,1fr); height: 100%; min-height: 0; }\n.bs-keychain-selected { display: flex; align-items: center; gap: 5px; padding: 6px; border-radius: 4px; font-size: 12px; }\n.bs-keychain-selected img { width: 16px; height: 16px; }\n.bs-keychain-main { min-width: 0; display: flex; flex-direction: column; }\n.bs-keychain-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 40px; padding: 8px 14px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-toolbar input { width: 45%; }\n.bs-keychain-attributes { min-height: 80px; padding: 18px 22px; box-sizing: border-box; }\n.bs-keychain-attributes p { margin: 5px 0; color: var(--bs-muted); font-size: 12px; }\n.bs-keychain-list { flex: 1; min-height: 0; overflow: auto; }\n.bs-keychain-list table { border-collapse: collapse; width: 100%; text-align: left; font-size: 12px; }\n.bs-keychain-list th { color: var(--bs-muted); font-weight: 500; border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-list th, .bs-keychain-list td { padding: 5px 10px; }\n.bs-keychain-list tbody tr:nth-child(even) { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-keychain-list tbody tr[aria-selected=\"true\"] { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-keychain-footer { display: flex; align-items: center; gap: 8px; padding: 8px 12px; min-height: 34px; color: var(--bs-muted); border-top: 1px solid var(--bs-line); }\n.bs-keychain-footer > span { flex: 1; }\n.bs-terminal { --bs-terminal-background: var(--volter-terminal-background, light-dark(#ffffff, #1e1e1e)); --bs-terminal-foreground: var(--volter-terminal-foreground, light-dark(#000000, #ffffff)); --bs-terminal-cursor: var(--volter-terminal-cursor, light-dark(#9d9d9d, #9d9d9d)); --bs-terminal-selection: var(--volter-terminal-selection, light-dark(#b3d7ff, #3f638b)); display: flex; flex-direction: column; position: relative; height: 100%; min-height: 0; background: var(--bs-terminal-background); color: var(--bs-terminal-foreground); }\n.bs-terminal-toolbar { display: flex; align-items: center; justify-content: center; min-height: 28px; padding: 0 8px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-title { flex: 1; text-align: center; font-size: 12px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }\n.bs-terminal-tabs { display: flex; flex: none; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-tabs[hidden] { display: none; }\n.bs-terminal-tab { display: flex; align-items: center; flex: 1; min-width: 0; border-right: 1px solid var(--bs-line); }\n.bs-terminal-tab[aria-selected=\"true\"] { background: var(--bs-terminal-background); }\n.bs-terminal-tab > button:first-child { flex: 1; border: 0; padding: 6px; background: transparent; font-size: 12px; color: inherit; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }\n.bs-terminal-screens { flex: 1; min-height: 0; position: relative; }\n.bs-terminal-screen { position: absolute; inset: 0; display: flex; flex-direction: column; }\n.bs-terminal-screen[hidden] { display: none; }\n.bs-terminal-canvas { flex: 1; min-height: 0; padding: 4px; overflow: hidden; }\n.bs-terminal-find { border: 1px solid var(--bs-line); border-radius: 4px; padding: 5px; margin: 5px; background: var(--bs-bg); color: inherit; }\n";
|
|
2
|
+
export const TOOLBAR_STYLES = ".bs-toolbar, .bs-toolbar-drawer { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-ready: var(--volter-status-healthy-base, light-dark(#3f7a55, #6fbf8e)); --bs-busy: var(--volter-status-attention-base, light-dark(#c7641a, #ec9a52)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; --bs-radius: 999px; font: 13px/1.4 -apple-system, BlinkMacSystemFont, \"Segoe UI\", Inter, system-ui, sans-serif; color: var(--bs-fg); }\n.bs-toolbar { position: fixed; z-index: 2147483000; display: flex; flex-direction: column-reverse; gap: 8px; touch-action: none; --bs-drawer: 0px; }\n.bs-toolbar[data-corner^=\"bottom\"] { bottom: calc(16px + var(--bs-drawer)); }\n.bs-toolbar[data-corner^=\"top\"] { top: 16px; flex-direction: column; }\n.bs-toolbar[data-corner$=\"right\"] { right: 16px; align-items: flex-end; }\n.bs-toolbar[data-corner$=\"left\"] { left: 16px; align-items: flex-start; }\n.bs-toolbar[data-corner$=\"center\"] { left: 50%; transform: translateX(-50%); align-items: center; }\n.bs-toolbar-dragging { transform: none !important; }\n.bs-toolbar-dragging { transition: none !important; opacity: 0.85; }\n.bs-toolbar-pill { display: flex; align-items: center; gap: 2px; height: 36px; padding: 0 6px 0 4px; background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: var(--bs-radius); box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: grab; user-select: none; -webkit-user-select: none; }\n.bs-toolbar-dragging .bs-toolbar-pill { cursor: grabbing; }\n.bs-toolbar-dot { position: relative; width: 28px; height: 28px; border: 0; border-radius: 50%; background: transparent; color: var(--bs-fg); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-dot:hover { background: var(--bs-hover); }\n.bs-toolbar-logo { width: 18px; height: 18px; display: block; }\n.bs-toolbar-badge { position: absolute; right: 2px; bottom: 2px; width: 8px; height: 8px; border-radius: 50%; box-shadow: 0 0 0 2px var(--bs-bg); display: none; }\n.bs-toolbar-dot[data-state=\"loading\"] .bs-toolbar-badge { display: block; background: var(--bs-busy); animation: bs-toolbar-pulse 2.4s ease-in-out infinite; }\n.bs-toolbar-dot[data-state=\"error\"] .bs-toolbar-badge { display: block; background: var(--bs-error); }\n@keyframes bs-toolbar-pulse { 50% { opacity: 0.3; } }\n@media (prefers-reduced-motion: reduce) { .bs-toolbar-badge { animation: none !important; } }\n\n.bs-toolbar-label { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--bs-muted); padding: 0 6px 0 2px; font-size: 12px; }\n.bs-toolbar-label[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-controls { display: flex; align-items: center; gap: 2px; }\n.bs-toolbar-controls-slot { display: contents; }\n.bs-toolbar-button { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border: 0; border-radius: 999px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; white-space: nowrap; }\n.bs-toolbar-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-button[aria-pressed=\"true\"], .bs-toolbar-button.bs-toolbar-on { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-toolbar-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text, .bs-toolbar-button[data-control=\"more\"] .bs-toolbar-button-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }\n.bs-toolbar-button[data-control=\"terminal\"], .bs-toolbar-button[data-control=\"more\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-collapsed .bs-toolbar-label, .bs-toolbar-collapsed .bs-toolbar-controls { display: none; }\n.bs-toolbar-collapsed .bs-toolbar-pill { padding: 0 3px; height: 34px; }\n.bs-toolbar-menu-head { display: flex; align-items: center; gap: 10px; }\n.bs-toolbar-menu-head .bs-toolbar-logo { flex: none; width: 22px; height: 22px; }\n.bs-toolbar-menu-head > div { min-width: 0; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-label { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"] .bs-toolbar-button-text, .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] .bs-toolbar-button-text { display: none; }\n.bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"share\"], .bs-toolbar[data-mode=\"fob\"] .bs-toolbar-button[data-control=\"keys\"] { width: 28px; padding: 0; justify-content: center; }\n.bs-toolbar-button[data-count]:not([data-count=\"\"])::after { content: attr(data-count); position: absolute; top: 1px; right: 1px; min-width: 14px; height: 14px; padding: 0 3px; box-sizing: border-box; border-radius: 7px; background: var(--bs-accent); color: var(--bs-on-accent); font-size: 10px; line-height: 14px; text-align: center; }\n.bs-toolbar-button { position: relative; }\n.bs-toolbar-button[hidden] { display: none; }\n.bs-toolbar-menu-section { padding: 8px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 4px; }\n.bs-toolbar-menu-section[hidden] { display: none; }\n.bs-toolbar-section-title { color: var(--bs-muted); font-size: 11px; margin-bottom: 2px; }\n.bs-toolbar[data-mode=\"bar\"] { top: 0 !important; left: 0 !important; right: 0 !important; bottom: auto !important; transform: none !important; flex-direction: column; align-items: stretch; gap: 0; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 34px; padding: 0 8px 0 6px; gap: 6px; border-radius: 0; border-width: 0 0 1px 0; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-label { max-width: none; flex: 1; font-size: 13px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] { width: auto; padding: 0 10px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-button[data-control=\"terminal\"] .bs-toolbar-button-text { position: static; width: auto; height: auto; clip: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-controls { margin-left: auto; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-menu { position: absolute; top: 38px; right: 8px; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot { cursor: default; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-dot:hover { background: transparent; }\n.bs-toolbar-menu { width: 300px; max-width: calc(100vw - 32px); background: var(--bs-bg); border: 1px solid var(--bs-line); border-radius: 12px; box-shadow: var(--volter-shadow-floating, 0 12px 32px rgba(21, 23, 22, 0.14), 0 2px 8px rgba(21, 23, 22, 0.08)); overflow: hidden; }\n.bs-toolbar-menu[hidden] { display: none; }\n.bs-toolbar-menu-head { padding: 12px 14px 10px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-menu-name { font-weight: 600; }\n.bs-toolbar-menu-status { color: var(--bs-muted); font-size: 12px; margin-top: 2px; overflow-wrap: anywhere; }\n.bs-toolbar-menu-status[data-state=\"error\"] { color: var(--bs-error); }\n.bs-toolbar-share-warning { font-size: 11px; color: var(--bs-busy); }\n.bs-toolbar-share-title { font-weight: 600; margin-bottom: 4px; }\n.bs-toolbar-share-form { display: flex; flex-direction: column; gap: 8px; margin: 0 0 4px; }\n.bs-toolbar-share-form[hidden], .bs-toolbar-share-form [hidden] { display: none !important; }\n.bs-toolbar-share-field { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-label { color: var(--bs-muted); width: 40px; flex: none; }\n.bs-toolbar-share-value { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }\n.bs-toolbar-share-input { flex: 1; min-width: 0; box-sizing: border-box; height: 28px; padding: 0 8px; border: 1px solid var(--bs-line); border-radius: 7px; background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); color: var(--bs-fg); font: inherit; font-size: 12px; }\n.bs-toolbar-share-input:focus { outline: none; border-color: var(--bs-accent); }\n.bs-toolbar-share-modes { display: flex; flex-direction: column; gap: 2px; }\n.bs-toolbar-share-mode { text-align: left; padding: 6px 8px 6px 26px; border: 0; border-radius: 7px; background: transparent; color: var(--bs-fg); font: inherit; font-size: 12px; cursor: pointer; position: relative; }\n.bs-toolbar-share-mode::before { content: \"\"; position: absolute; left: 8px; top: 50%; width: 10px; height: 10px; margin-top: -6px; border-radius: 50%; border: 1px solid var(--bs-muted); }\n.bs-toolbar-share-mode[aria-checked=\"true\"]::before { border-color: var(--bs-accent); background: radial-gradient(var(--bs-accent) 45%, transparent 50%); }\n.bs-toolbar-share-mode:hover { background: var(--bs-hover); }\n.bs-toolbar-share-recent { display: flex; flex-wrap: wrap; gap: 4px; }\n.bs-toolbar-share-chip { padding: 2px 8px; border: 1px solid var(--bs-line); border-radius: 999px; background: transparent; color: var(--bs-muted); font: inherit; font-size: 11px; cursor: pointer; }\n.bs-toolbar-share-chip:hover { color: var(--bs-fg); border-color: var(--bs-muted); }\n.bs-toolbar-share-note { font-size: 11px; color: var(--bs-muted); }\n.bs-toolbar-share-error { font-size: 11px; color: var(--bs-error); }\n.bs-toolbar-share-error:empty { display: none; }\n.bs-toolbar-share-actions { display: flex; justify-content: flex-end; gap: 6px; }\n.bs-toolbar-share-submit, .bs-toolbar-share-cancel { height: 28px; padding: 0 12px; border-radius: 7px; font: inherit; font-size: 12px; cursor: pointer; }\n.bs-toolbar-share-submit { border: 0; background: var(--bs-accent); color: var(--bs-on-accent); font-weight: 600; }\n.bs-toolbar-share-cancel { border: 1px solid var(--bs-line); background: transparent; color: var(--bs-fg); }\n.bs-toolbar-share-submit:disabled, .bs-toolbar-share-cancel:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-share-live { display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-share-live:empty { display: none; }\n.bs-toolbar-share-access { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-link-button { border: 0; background: transparent; color: var(--bs-accent); font: inherit; font-size: 12px; cursor: pointer; padding: 0; }\n.bs-toolbar-share-visitors { display: flex; flex-direction: column; gap: 3px; }\n.bs-toolbar-share-visitor { display: flex; align-items: center; gap: 8px; font-size: 12px; }\n.bs-toolbar-share-visitor::before { content: \"\"; width: 7px; height: 7px; border-radius: 50%; background: var(--bs-muted); opacity: 0.5; flex: none; }\n.bs-toolbar-share-visitor[data-here=\"true\"]::before { background: var(--bs-ready); opacity: 1; }\n.bs-toolbar-share-visitor-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-share-muted { color: var(--bs-muted); font-size: 11px; }\n.bs-toolbar-menu-share { padding: 10px 14px; border-bottom: 1px solid var(--bs-line); display: flex; flex-direction: column; gap: 6px; }\n.bs-toolbar-menu-share[hidden] { display: none; }\n.bs-toolbar-share-row { display: flex; align-items: center; gap: 6px; }\n.bs-toolbar-share-link { color: var(--bs-accent); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; flex: 1; }\n.bs-toolbar-share-meta { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-menu-facts { padding: 8px 14px; display: flex; flex-direction: column; gap: 4px; border-bottom: 1px solid var(--bs-line); }\n.bs-toolbar-fact { display: flex; align-items: center; gap: 8px; min-height: 22px; font-size: 12px; }\n.bs-toolbar-fact-name { color: var(--bs-muted); width: 72px; flex: none; }\n.bs-toolbar-fact-value { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; display: flex; gap: 6px; }\n.bs-toolbar-port { color: var(--bs-accent); text-decoration: none; }\n.bs-toolbar-port:hover { text-decoration: underline; }\n.bs-toolbar-copy { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; flex: none; }\n.bs-toolbar-copy:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-copy.bs-toolbar-copied { color: var(--bs-ready); }\n.bs-toolbar-menu-items { display: flex; flex-direction: column; padding: 6px; }\n.bs-toolbar-menu-items:empty { display: none; }\n.bs-toolbar-menu-item[hidden] { display: none; }\n.bs-toolbar-menu-button { display: block; width: 100%; text-align: left; padding: 7px 8px; border: 0; border-radius: 8px; background: transparent; color: var(--bs-fg); font: inherit; cursor: pointer; }\n.bs-toolbar-menu-button:hover:not(:disabled) { background: var(--bs-hover); }\n.bs-toolbar-menu-button:disabled { opacity: 0.5; cursor: default; }\n.bs-toolbar-menu-foot { padding: 8px 14px; color: var(--bs-muted); font-size: 11px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection { padding: 6px 12px 8px; border-top: 1px solid var(--bs-line); }\n.bs-toolbar-connection-focus { background: var(--bs-selected); }\n.bs-toolbar-connection-head { display: flex; align-items: baseline; gap: 8px; }\n.bs-toolbar-connection-name { font-weight: 600; }\n.bs-toolbar-connection-state { color: var(--bs-muted); font-size: 12px; }\n.bs-toolbar-connection[data-state=\"connected\"] .bs-toolbar-connection-state { color: var(--bs-ready); }\n.bs-toolbar-connection[data-state=\"error\"] .bs-toolbar-connection-state { color: var(--bs-error); }\n.bs-toolbar-connection-detail { color: var(--bs-muted); font-size: 12px; margin-top: 2px; }\n.bs-toolbar-connection-actions { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }\n.bs-toolbar-connection-actions .bs-toolbar-menu-button { width: auto; padding: 3px 8px; }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"connected\"] { color: var(--bs-ready); }\n.bs-toolbar-button[data-control^=\"connection-\"][data-state=\"error\"] { color: var(--bs-error); }\n/* The files panel is light, as the file browser it holds (@volter/workbench-files) is light only. */\n.bs-toolbar-files { position: fixed; top: var(--bs-toolbar-top, 0px); right: 0; bottom: 0; width: min(560px, 92vw); z-index: 2147482998; display: flex; flex-direction: column; color-scheme: light; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); border-left: 1px solid var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-files[hidden] { display: none; }\n.bs-toolbar-files .bs-toolbar-drawer-head { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); color: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); }\n.bs-toolbar-files-body { flex: 1; min-height: 0; display: flex; }\n.bs-toolbar-files-body > .sysapp { flex: 1; min-width: 0; }\n.bs-toolbar-files-preview { margin: 0; max-height: 30%; overflow: auto; padding: 8px 12px; border-top: 1px solid var(--volter-border-subtle, light-dark(#e9e8e1, #223239)); background: var(--volter-surface-sunken, light-dark(#efeee8, #0b141a)); font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre-wrap; }\n.bs-toolbar-drawer { position: fixed; left: 0; right: 0; bottom: 0; z-index: 2147482999; display: flex; flex-direction: column; color-scheme: dark; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); border-top: 1px solid var(--bs-line); box-shadow: var(--volter-shadow-dialog, 0 2px 6px rgba(27, 30, 28, 0.06), 0 12px 32px rgba(27, 30, 28, 0.1)); }\n.bs-toolbar-drawer[hidden] { display: none; }\n.bs-origin-reset { inset: 0; margin: auto; width: min(560px, calc(100vw - 64px)); max-height: calc(100vh - 64px); padding: 24px; overflow: auto; border: 1px solid var(--bs-line); border-radius: 12px; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); color-scheme: light dark; }\n.bs-origin-reset:not([open]) { display: none; }\n.bs-origin-reset h1 { margin: 0; font-size: 20px; }\n.bs-origin-reset ol { padding-left: 24px; }\n.bs-origin-reset-controls { display: flex; justify-content: flex-end; gap: 8px; }\n.bs-toolbar-drawer-handle { height: 6px; cursor: ns-resize; flex: none; background: linear-gradient(to bottom, var(--bs-hover), transparent); }\n.bs-toolbar-drawer-head { display: flex; align-items: center; gap: 10px; height: 28px; padding: 0 12px; flex: none; font-size: 12px; }\n.bs-toolbar-drawer-title { font-weight: 600; }\n.bs-toolbar-drawer-note { color: var(--bs-muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-toolbar-icon { width: 22px; height: 22px; border: 0; border-radius: 6px; background: transparent; color: var(--bs-muted); cursor: pointer; display: grid; place-items: center; padding: 0; }\n.bs-toolbar-icon:hover { background: var(--bs-hover); color: var(--bs-fg); }\n.bs-toolbar-drawer-body { position: relative; flex: 1; min-height: 0; background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); color: var(--bs-fg); }\n/* The workspace fills the body under the drawer's head, on the same roles as Volter Harness's own workspace, in the dark scheme as the drawer is dark. */\n.bs-toolbar-drawer .sctui-workspace { --scui-color-scheme: dark; color-scheme: dark; --sctui-terminal-background: var(--volter-surface-media, light-dark(#0f1a1f, #070d10)); --sctui-bg-default: var(--volter-surface-page, light-dark(#f7f6f1, #0f1a1f)); --sctui-bg-raised-default: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --sctui-fill-default: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); --sctui-fill-strong-default: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); --sctui-fg-default: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --sctui-muted-default: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --sctui-border-default: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --sctui-border-strong-default: var(--volter-border-strong, light-dark(#c4c5bc, #3d5059)); --sctui-danger-default: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); }\n@media (max-width: 600px) { .bs-toolbar-label { display: none; } .bs-toolbar-menu { width: calc(100vw - 32px); } }\n\n/* ADR-0050: icons launch programs; programs own content, hosts own windows. */\n.bs-program, .bs-program-window { --bs-bg: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); --bs-fg: var(--volter-text-primary, light-dark(#16252c, #f3f2ec)); --bs-muted: var(--volter-text-muted, light-dark(#5d6970, #a9b0ad)); --bs-line: var(--volter-border-default, light-dark(#d9dad3, #2c3d45)); --bs-accent: var(--volter-action-default, light-dark(#16252c, #e4f09c)); --bs-on-accent: var(--volter-text-on-strong, light-dark(#ffffff, #16252c)); --bs-error: var(--volter-status-danger-base, light-dark(#d24a1f, #f07650)); --bs-hover: var(--volter-overlay-hover, light-dark(rgba(22, 37, 44, 0.05), rgba(243, 242, 236, 0.06))); --bs-selected: var(--volter-selection-soft, light-dark(#eef4c4, rgba(228, 240, 156, 0.14))); --bs-selected-fg: var(--volter-selection-text, light-dark(#16252c, #f3f2ec)); color-scheme: light dark; color: var(--bs-fg); background: var(--bs-bg); font: 13px/1.4 \"Geist\", sans-serif; box-sizing: border-box; }\n.bs-toolbar .bs-toolbar-button { width: 32px; height: 32px; padding: 0; justify-content: center; }\n.bs-toolbar .bs-toolbar-button-text { display: none !important; }\n.bs-toolbar[data-mode=\"bar\"] { inset: auto 16px 16px auto !important; width: max-content; align-items: flex-end; }\n.bs-toolbar[data-mode=\"bar\"] .bs-toolbar-pill { height: 36px; border: 1px solid var(--bs-line); border-radius: 4px; }\n.bs-toolbar, .bs-toolbar-pill { font-family: \"Geist\", sans-serif; --bs-radius: 4px; }\n.bs-toolbar button:focus-visible, .bs-program-window button:focus-visible, .bs-program-title:focus-visible { outline: 2px solid var(--bs-accent); outline-offset: 2px; }\n.bs-program-window { position: fixed; display: flex; flex-direction: column; border: 1px solid var(--bs-line); border-radius: 4px; min-width: min(280px, 100vw); min-height: min(180px, 100vh); max-width: 100vw; max-height: 100vh; }\n.bs-program-window[hidden] { display: none; }\n.bs-program-window[data-active=\"true\"] { border-color: var(--bs-accent); }\n.bs-program-titlebar { flex: 0 0 36px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 0 8px 0 12px; border-bottom: 1px solid var(--bs-line); cursor: move; touch-action: none; user-select: none; }\n.bs-program-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bs-program-body { flex: 1; min-height: 0; min-width: 0; overflow: auto; display: flex; flex-direction: column; padding: 12px; gap: 8px; }\n.bs-program-window[data-program=\"terminal\"] .bs-program-body, .bs-program-window[data-program=\"files\"] .bs-program-body { padding: 0; overflow: hidden; }\n.bs-program-terminal { flex: 1; min-height: 0; height: 100%; }\n.bs-program .bs-toolbar-files-body { flex: 1; min-height: 0; }\n.bs-program .bs-toolbar-files-preview { flex: 0 1 40%; overflow: auto; margin: 0; white-space: pre-wrap; }\n.bs-program input, .bs-program select, .bs-program button { font: inherit; }\n.bs-program .bs-toolbar-share-row { flex-wrap: wrap; }\n.bs-program .bs-toolbar-share-link { overflow-wrap: anywhere; }\n.bs-program-edge { position: absolute; touch-action: none; z-index: 2; }\n.bs-program-edge-n, .bs-program-edge-s { left: 8px; right: 8px; height: 8px; cursor: ns-resize; }\n.bs-program-edge-n { top: -4px; } .bs-program-edge-s { bottom: -4px; }\n.bs-program-edge-e, .bs-program-edge-w { top: 8px; bottom: 8px; width: 8px; cursor: ew-resize; }\n.bs-program-edge-e { right: -4px; } .bs-program-edge-w { left: -4px; }\n.bs-program-edge-ne, .bs-program-edge-nw, .bs-program-edge-se, .bs-program-edge-sw { width: 12px; height: 12px; }\n.bs-program-edge-ne { right: -4px; top: -4px; cursor: nesw-resize; } .bs-program-edge-sw { left: -4px; bottom: -4px; cursor: nesw-resize; }\n.bs-program-edge-nw { left: -4px; top: -4px; cursor: nwse-resize; } .bs-program-edge-se { right: -4px; bottom: -4px; cursor: nwse-resize; }\n\n/* ADR-0059: macOS program structure with Volter semantic paint. */\n.bs-program { position: relative; min-height: 0; overflow: hidden; color-scheme: inherit; }\n.bs-program-body { padding: 0; gap: 0; }\n.bs-program button, .bs-program input, .bs-program select { box-sizing: border-box; }\n.bs-native-button { border: 1px solid var(--bs-line); border-radius: 5px; background: var(--bs-bg); color: var(--bs-fg); padding: 3px 10px; min-height: 24px; text-decoration: none; cursor: pointer; white-space: nowrap; }\n.bs-native-button:disabled { opacity: .5; cursor: default; }\n.bs-native-primary { background: var(--bs-accent); color: var(--bs-on-accent); border-color: var(--bs-accent); }\n.bs-native-icon-button, .bs-native-info { border: 0; background: transparent; color: inherit; display: inline-flex; align-items: center; justify-content: center; padding: 3px; cursor: pointer; }\n.bs-native-icon-button img, .bs-native-info img { width: 16px; height: 16px; }\n.bs-native-error { color: var(--bs-error); font-size: 12px; margin: 8px 0; overflow-wrap: anywhere; }\n.bs-native-error:empty { display: none; }\n.bs-settings { display: grid; grid-template-columns: 160px minmax(0,1fr); height: 100%; min-height: 0; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-settings-sidebar { background: var(--volter-surface-inset, light-dark(#e7e6df, #22343c)); border-right: 1px solid var(--bs-line); padding: 18px 10px; min-width: 0; }\n.bs-settings-sidebar h2 { color: var(--bs-muted); font-size: 11px; font-weight: 600; margin: 0 8px 14px; }\n.bs-settings-navigation { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 30px; padding: 5px 8px; margin: 2px 0; border: 0; border-radius: 5px; background: transparent; text-align: left; color: inherit; cursor: pointer; }\n.bs-settings-navigation img { width: 18px; height: 18px; }\n.bs-settings-navigation[aria-current=\"page\"], .bs-keychain-selected { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-settings-main { min-width: 0; overflow: auto; }\n.bs-settings-title { margin: 0; min-height: 48px; padding: 16px 20px 8px; box-sizing: border-box; font-size: 14px; font-weight: 650; }\n.bs-settings-content { padding: 8px 20px 24px; }\n.bs-settings-heading { margin: 22px 0 7px; font-size: 12px; font-weight: 600; }\n.bs-settings-heading:first-child { margin-top: 2px; }\n.bs-settings-group { border: 1px solid var(--bs-line); border-radius: 7px; overflow: hidden; background: var(--bs-bg); margin: 0 0 12px; }\n.bs-settings-group:empty { display: none; }\n.bs-settings-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 42px; padding: 8px 12px; box-sizing: border-box; border: 0; border-bottom: 1px solid var(--bs-line); color: inherit; font: inherit; }\n.bs-program [hidden] { display: none !important; }\n.bs-settings-row:last-child { border-bottom: 0; }\n.bs-settings-value { text-align: right; color: var(--bs-muted); overflow-wrap: anywhere; min-width: 0; }\n.bs-settings-account { width: 100%; text-align: left; background: transparent; cursor: pointer; }\n.bs-settings-account > span:first-of-type { flex: 1; }\n.bs-settings-account strong, .bs-settings-account small { display: block; }\n.bs-settings-account small { color: var(--bs-muted); margin-top: 3px; }\n.bs-settings-note { font-size: 12px; color: var(--bs-muted); line-height: 1.5; }\n.bs-settings-empty { font-size: 15px; font-weight: 600; margin: 30px 0 4px; }\n.bs-environment-identity { text-align: center; padding: 12px 0 14px; }\n.bs-environment-identity img { width: 76px; height: 76px; }\n.bs-environment-identity h2 { font-size: 20px; font-weight: 650; margin: 10px 0; }\n.bs-sharing-service { min-height: 48px; gap: 10px; }\n.bs-sharing-service-name { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0; }\n.bs-sharing-service-name img { width: 24px; height: 24px; }\n.bs-native-switch { position: relative; flex: 0 0 28px; height: 17px; border: 1px solid var(--bs-line); border-radius: 12px; background: var(--volter-control-track, light-dark(#b3b6ae, #3d5059)); padding: 0; cursor: pointer; }\n.bs-native-switch::after { content: ''; position: absolute; left: 1px; top: 1px; width: 13px; height: 13px; border-radius: 50%; background: var(--volter-surface-raised, light-dark(#fbfaf7, #16252c)); }\n.bs-native-switch[aria-checked=\"true\"] { background: var(--bs-accent); border-color: var(--bs-accent); }\n.bs-native-switch[aria-checked=\"true\"]::after { left: 12px; }\n.bs-native-switch:disabled { opacity: .45; }\n.bs-settings-sheet-backdrop { position: absolute; inset: 0; z-index: 8; display: flex; align-items: center; justify-content: center; padding: 16px; background: var(--volter-overlay-scrim, light-dark(rgba(22, 37, 44, 0.38), rgba(0, 0, 0, 0.55))); }\n.bs-settings-sheet-backdrop[hidden] { display: none; }\n.bs-settings-sheet { width: 420px; max-width: 100%; max-height: 100%; overflow: auto; border: 1px solid var(--bs-line); border-radius: 10px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); padding: 20px; box-sizing: border-box; }\n.bs-settings-sheet h2 { font-size: 14px; margin: 0 0 12px; }\n.bs-settings-sheet input, .bs-settings-sheet select, .bs-keychain-toolbar input { min-width: 0; max-width: 100%; border: 1px solid var(--bs-line); border-radius: 4px; padding: 4px 6px; background: var(--bs-bg); color: inherit; }\n.bs-settings-sheet form > input { width: 100%; margin-top: 8px; }\n.bs-settings-sheet-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }\n.bs-sharing-address { display: flex; gap: 10px; align-items: center; padding: 12px; }\n.bs-sharing-address a { overflow-wrap: anywhere; min-width: 0; color: var(--bs-accent); }\n.bs-sharing-addresses > .bs-settings-group > button { margin: 0 0 10px 12px; }\n.bs-keychain { display: grid; grid-template-columns: 145px minmax(0,1fr); height: 100%; min-height: 0; }\n.bs-keychain-selected { display: flex; align-items: center; gap: 5px; padding: 6px; border-radius: 4px; font-size: 12px; }\n.bs-keychain-selected img { width: 16px; height: 16px; }\n.bs-keychain-main { min-width: 0; display: flex; flex-direction: column; }\n.bs-keychain-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 40px; padding: 8px 14px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-toolbar input { width: 45%; }\n.bs-keychain-attributes { min-height: 80px; padding: 18px 22px; box-sizing: border-box; }\n.bs-keychain-attributes p { margin: 5px 0; color: var(--bs-muted); font-size: 12px; }\n.bs-keychain-list { flex: 1; min-height: 0; overflow: auto; }\n.bs-keychain-list table { border-collapse: collapse; width: 100%; text-align: left; font-size: 12px; }\n.bs-keychain-list th { color: var(--bs-muted); font-weight: 500; border-bottom: 1px solid var(--bs-line); }\n.bs-keychain-list th, .bs-keychain-list td { padding: 5px 10px; }\n.bs-keychain-list tbody tr:nth-child(even) { background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); }\n.bs-keychain-list tbody tr[aria-selected=\"true\"] { background: var(--bs-selected); color: var(--bs-selected-fg); }\n.bs-keychain-footer { display: flex; align-items: center; gap: 8px; padding: 8px 12px; min-height: 34px; color: var(--bs-muted); border-top: 1px solid var(--bs-line); }\n.bs-keychain-footer > span { flex: 1; }\n.bs-terminal { --bs-terminal-background: var(--volter-terminal-background, light-dark(#ffffff, #1e1e1e)); --bs-terminal-foreground: var(--volter-terminal-foreground, light-dark(#000000, #ffffff)); --bs-terminal-cursor: var(--volter-terminal-cursor, light-dark(#9d9d9d, #9d9d9d)); --bs-terminal-selection: var(--volter-terminal-selection, light-dark(#b3d7ff, #3f638b)); display: flex; flex-direction: column; position: relative; height: 100%; min-height: 0; background: var(--bs-terminal-background); color: var(--bs-terminal-foreground); }\n.bs-terminal-toolbar { display: flex; align-items: center; justify-content: center; min-height: 28px; padding: 0 8px; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-title { flex: 1; text-align: center; font-size: 12px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }\n.bs-terminal-tabs { display: flex; flex: none; background: var(--volter-surface-subtle, light-dark(#f2f1eb, #1d2d34)); border-bottom: 1px solid var(--bs-line); }\n.bs-terminal-tabs[hidden] { display: none; }\n.bs-terminal-tab { display: flex; align-items: center; flex: 1; min-width: 0; border-right: 1px solid var(--bs-line); }\n.bs-terminal-tab[aria-selected=\"true\"] { background: var(--bs-terminal-background); }\n.bs-terminal-tab > button:first-child { flex: 1; border: 0; padding: 6px; background: transparent; font-size: 12px; color: inherit; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }\n.bs-terminal-screens { flex: 1; min-height: 0; position: relative; }\n.bs-terminal-screen { position: absolute; inset: 0; display: flex; flex-direction: column; }\n.bs-terminal-screen[hidden] { display: none; }\n.bs-terminal-canvas { flex: 1; min-height: 0; padding: 4px; overflow: hidden; }\n.bs-terminal-find { border: 1px solid var(--bs-line); border-radius: 4px; padding: 5px; margin: 5px; background: var(--bs-bg); color: inherit; }\n";
|
|
3
3
|
//# sourceMappingURL=toolbar-styles.generated.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-styles.generated.js","sourceRoot":"","sources":["../src/toolbar-styles.generated.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"toolbar-styles.generated.js","sourceRoot":"","sources":["../src/toolbar-styles.generated.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,i5/BAAi5/B,CAAC"}
|
package/dist/toolbar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAiB,WAAW,EAAe,cAAc,EAAgB,MAAM,oBAAoB,CAAC;AAChJ,mBAAmB,oBAAoB,CAAC;AAExC,wBAAgB,YAAY,CAAC,OAAO,GAAE,cAAmB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAiB,WAAW,EAAe,cAAc,EAAgB,MAAM,oBAAoB,CAAC;AAChJ,mBAAmB,oBAAoB,CAAC;AAExC,wBAAgB,YAAY,CAAC,OAAO,GAAE,cAAmB,GAAG,cAAc,CAuDzE;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IACpG,GAAG,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;CACrG;AACD,8EAA8E;AAC9E,wBAAgB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAQ9D"}
|
package/dist/toolbar.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/** Icon launchers for the same programs the Workbench desktop mounts (ADR-0058). */
|
|
2
2
|
import { createWorkbenchPrograms } from "./programs.js";
|
|
3
3
|
import { createProgramWindows } from "./program-windows.js";
|
|
4
|
-
import { el, icon, installProgramStyles } from "./program-dom.js";
|
|
4
|
+
import { el, icon, installProgramStyles, setProgramIconBase } from "./program-dom.js";
|
|
5
5
|
export function mountToolbar(options = {}) {
|
|
6
6
|
const parent = options.parent ?? document.body;
|
|
7
7
|
const doc = parent.ownerDocument;
|
|
8
|
+
if (options.iconBaseUrl)
|
|
9
|
+
setProgramIconBase(doc, options.iconBaseUrl);
|
|
8
10
|
installProgramStyles(doc);
|
|
9
11
|
const lifetime = new AbortController();
|
|
10
12
|
const root = el("nav", "bs-toolbar");
|
package/dist/toolbar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const Gt=["file","directory","symlink"],bn=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u,kn=new TextEncoder,An=new TextDecoder;function Rr(m){let o=2166136261;for(let a=0;a<m.length;a+=1)o^=m.charCodeAt(a),o=Math.imul(o,16777619);return o>>>0}function Sr(m,o){const a=[...m.keys()];for(const T of a)if(bn.test(T))throw new Error("A path in the store is not well-formed UTF-16.");const d=new Map;for(let T=0;T<a.length;T+=1)d.set(a[T],T);for(const T of o.keys())d.has(T)||(d.set(T,a.length),a.push(T));const h=a.length,E=new Map,y=new Uint32Array(h);let S=0;for(let T=0;T<h;T+=1){const N=a[T];let G=!0;for(let oe=0;oe<N.length;oe+=1)if(N.charCodeAt(oe)>=128){G=!1;break}G||E.set(T,kn.encode(N)),y[T]=G?N.length:E.get(T).length,S+=y[T]}let P=0;for(const T of o.values())P+=T.size;let A=1;for(;A<h*2;)A<<=1;const I=24,x=Wt(I+h*6*4,8),M=x+h*3*8,F=M+A*4,w=F+P*4,C=new SharedArrayBuffer(Wt(w+S,8));new Uint32Array(C,0,6).set([2019846480,h,A,P,S,m.size]);const H=new Uint32Array(C,I,h*6),z=new Float64Array(C,x,h*3),_e=new Uint32Array(C,M,A),Ze=new Uint32Array(C,F,P),me=new Uint8Array(C,w,S);let ie=0,v=0;for(let T=0;T<h;T+=1){const N=a[T],G=T*6,oe=E.get(T);if(oe)me.set(oe,ie);else for(let b=0;b<N.length;b+=1)me[ie+b]=N.charCodeAt(b);const O=y[T];H[G+0]=ie,H[G+1]=O,ie+=O;let Y=oe?0:32;const q=m.get(N);if(q){Y|=1|Gt.indexOf(q.type)<<3,q.pack&&(Y|=4),H[G+3]=q.mode;const b=T*3;z[b+0]=q.mtimeMs,z[b+1]=q.offset,z[b+2]=q.length}const Ee=o.get(N);if(Ee){Y|=2,H[G+4]=v,H[G+5]=Ee.size;for(const b of Ee){const _=d.get(`${N}/${b}`);if(_===void 0)throw new Error(`The store's children name ${N}/${b}, which its index does not hold.`);Ze[v++]=_}}H[G+2]=Y;let we=Rr(N)&A-1;for(;_e[we]!==0;)we=we+1&A-1;_e[we]=T+1}if(v!==P)throw new Error("The shared index's children did not add up.");return C}function Wt(m,o){return Math.ceil(m/o)*o}class Ie{buffer;count;entryCount;records;numbers;table;childList;strings;mask;constructor(o){const a=new Uint32Array(o,0,6);if(a[0]!==2019846480)throw new Error("Not a shared store index.");const[,d,h,E,y,S]=a;this.buffer=o,this.count=d,this.entryCount=S;const P=24,A=Wt(P+d*6*4,8),I=A+d*3*8,x=I+h*4,M=x+E*4;this.records=new Uint32Array(o,P,d*6),this.numbers=new Float64Array(o,A,d*3),this.table=new Uint32Array(o,I,h),this.childList=new Uint32Array(o,x,E),this.strings=new Uint8Array(o,M,y),this.mask=h-1}find(o){let a=Rr(o)&this.mask;for(;;){const d=this.table[a];if(d===0)return-1;if(this.pathIs(d-1,o))return d-1;a=a+1&this.mask}}entry(o){const a=o*6,d=this.records[a+2];if(!(d&1))return;const h=o*3,E={type:Gt[d>>>3&3],mode:this.records[a+3],mtimeMs:this.numbers[h+0],offset:this.numbers[h+1],length:this.numbers[h+2]};return d&4&&(E.pack="packages"),E}typeAt(o){const a=this.records[o*6+2];return a&1?Gt[a>>>3&3]:void 0}hasEntry(o){return(this.records[o*6+2]&1)!==0}childNames(o){const a=o*6;if(!(this.records[a+2]&2))return;const d=this.records[a+4],h=this.records[a+1]+1,E=[];for(let y=0;y<this.records[a+5];y+=1){const S=this.childList[d+y]*6;E.push(this.decode(this.records[S+0]+h,this.records[S+1]-h,(this.records[S+2]&32)!==0))}return E}path(o){const a=o*6;return this.decode(this.records[a+0],this.records[a+1],(this.records[a+2]&32)!==0)}decode(o,a,d){if(!d)return An.decode(this.strings.slice(o,o+a));let h="";for(let E=o,y=o+a;E<y;E+=4096)h+=String.fromCharCode.apply(null,this.strings.subarray(E,Math.min(y,E+4096)));return h}pathIs(o,a){const d=o*6,h=this.records[d+0],E=this.records[d+1];if(!(this.records[d+2]&32))return this.path(o)===a;if(E!==a.length)return!1;for(let y=0;y<E;y+=1)if(this.strings[h+y]!==a.charCodeAt(y))return!1;return!0}}const re=Symbol("deleted");function _r(m,o){return m===o||!!m&&!!o&&m.type===o.type&&m.offset===o.offset&&m.length===o.length&&m.pack===o.pack&&m.mode===o.mode&&m.mtimeMs===o.mtimeMs&&m.capacity===o.capacity}class $e{base;overlay=new Map;delta=0;constructor(o){this.base=o}get[Symbol.toStringTag](){return"Map"}get size(){return this.base.entryCount+this.delta}get(o){const a=this.overlay.get(o);if(a!==void 0)return a===re?void 0:a;const d=this.base.find(o);return d<0?void 0:this.base.entry(d)}typeOf(o){const a=this.overlay.get(o);if(a!==void 0)return a===re?void 0:a.type;const d=this.base.find(o);return d<0?void 0:this.base.typeAt(d)}has(o){const a=this.overlay.get(o);if(a!==void 0)return a!==re;const d=this.base.find(o);return d>=0&&this.base.hasEntry(d)}set(o,a){this.has(o)||(this.delta+=1);const d=this.base.find(o);return d>=0&&_r(this.base.entry(d),a)?this.overlay.delete(o):this.overlay.set(o,a),this}delete(o){if(!this.has(o))return!1;const a=this.base.find(o);return a>=0&&this.base.hasEntry(a)?this.overlay.set(o,re):this.overlay.delete(o),this.delta-=1,!0}clear(){throw new Error("A reader's index is not cleared; it is replaced.")}*entries(){for(const[o,a]of this.overlay)a!==re&&(yield[o,a]);for(let o=0;o<this.base.count;o+=1){if(!this.base.hasEntry(o))continue;const a=this.base.path(o);this.overlay.has(a)||(yield[a,this.base.entry(o)])}}*keys(){for(const[o]of this.entries())yield o}*values(){for(const[,o]of this.entries())yield o}[Symbol.iterator](){return this.entries()}forEach(o,a){for(const[d,h]of this.entries())o.call(a,h,d,this)}*changed(){for(const[o,a]of this.overlay)a!==re&&(yield[o,a])}*changes(){for(const[o,a]of this.overlay)yield[o,a===re?null:a]}get overlaid(){return this.overlay.size}boundedChanges(){if(this.overlay.size>65536)return;const o=[];let a=0;for(const[d,h]of this.changes()){if(a+=d.length*2+128,a>8*1024*1024)return;o.push([d,h])}return o}}class Et{base;overlay=new Map;constructor(o){this.base=o}get(o){const a=this.overlay.get(o);if(a!==void 0)return a===re?void 0:a;const d=this.base.find(o),h=d<0?void 0:this.base.childNames(d);return h?new Set(h):void 0}mutable(o){const a=this.overlay.get(o);if(a!==void 0&&a!==re)return a;const d=new Set(a===re?[]:this.get(o)??[]);return this.overlay.set(o,d),d}delete(o){this.overlay.set(o,re)}}const On="supercode-browser-filesystems",xe="packages",Pn="state.json",br="/image-range-worker.js",kr="image-ranges.json",Tn=2;function Nt(m){const o=m;if(!o||o.version!==1||!Number.isSafeInteger(o.bytes)||o.bytes<0||!Array.isArray(o.parts)||o.image!==void 0&&(typeof o.image!="string"||!/^[a-f0-9]{16,64}$/u.test(o.image))||o.parts.length>1e5)throw new Error("Invalid immutable image ranges.");let a=0;for(const d of o.parts){if(!d||d.offset!==a||!Number.isSafeInteger(d.raw)||d.raw<0||!Number.isSafeInteger(d.bytes)||d.bytes<0||d.bytes>1024*1024*1024||d.raw>1024*1024*1024||typeof d.sha256!="string"||!/^[a-f0-9]{64}$/u.test(d.sha256)||typeof d.url!="string"||!/^\/substrate\/[A-Za-z0-9._/-]+$/u.test(d.url)||d.url.split("/").some(h=>h==="."||h===".."))throw new Error("Invalid immutable image part.");if(a+=d.raw,!Number.isSafeInteger(a))throw new Error("Immutable image ranges exceed the offset limit.")}if(a!==o.bytes)throw new Error("Immutable image ranges do not cover their reservation.");return o}class Fn{ranges;directory;identity;receiptKey;client;worker;port;prefetchers=[];state;completed;firstRead;closed=!1;ready=!1;startup;cancelStartup;sharedCompletion;blocked={ranges:0,ms:0};constructor(o,a,d,h,E,y){if(this.ranges=o,this.directory=a,this.identity=d,this.receiptKey=E,this.client=y,typeof Worker>"u"||typeof SharedArrayBuffer>"u")throw new Error("This browser cannot materialize an immutable image during a synchronous read.");if(this.state=new Int32Array(y?.state??new SharedArrayBuffer(o.parts.length*Int32Array.BYTES_PER_ELEMENT)),this.state.length!==o.parts.length)throw new Error("The image reader's line has the wrong range count.");const S=o.parts.length,P=h??new SharedArrayBuffer((2*S+1)*Int32Array.BYTES_PER_ELEMENT);if(P.byteLength!==S*Int32Array.BYTES_PER_ELEMENT&&P.byteLength!==(2*S+1)*Int32Array.BYTES_PER_ELEMENT)throw new Error("The image completion seed has the wrong range count.");this.completed=new Int32Array(P,0,S),this.firstRead=P.byteLength>S*Int32Array.BYTES_PER_ELEMENT?new Int32Array(P,S*Int32Array.BYTES_PER_ELEMENT,S+1):void 0,this.sharedCompletion=h!==void 0;for(const A of o.parts)Object.freeze(A);Object.freeze(o.parts),Object.freeze(o)}get completionBuffer(){return this.completed.buffer}get verifiedRanges(){return this.ranges}async initialize(){if(this.closed)throw new Error("This immutable image reader is closed.");if(this.ready)return;if(this.startup)return this.startup;let o=!1;for(let a=0;a<this.completed.length;a+=1)if(Atomics.load(this.completed,a)!==2){o=!0;break}if(!o){this.ready=!0,this.client?.port.close();return}if(this.client){const a=this.port=this.client.port;a.onmessage=d=>{d.data?.type!=="closing"||this.port!==a||(a.close(),this.port=void 0,this.closed||this.startMaterializer().catch(h=>console.warn("This process's image reader could not start its own materializer after its line closed.",h)))},a.start(),this.ready=!0;return}return this.startMaterializer()}startMaterializer(){const o=Date.now(),a=new Worker(br,{type:"module",name:"immutable-image-materializer"}),d=this.ready;return d||(this.worker=a),a.addEventListener("error",()=>this.fail()),a.addEventListener("messageerror",()=>this.fail()),this.startup=new Promise((h,E)=>{const y=()=>{clearTimeout(I),a.removeEventListener("message",A),a.removeEventListener("error",S),a.removeEventListener("messageerror",S),this.cancelStartup=void 0},S=()=>P(new Error("The immutable image materializer could not initialize; reload to retry.")),P=x=>{y(),a.terminate(),d||(this.closed=!0,this.fail()),E(x)},A=x=>{if(x.data?.identity===this.identity){if(x.data.type==="init-error"){P(new Error(`The immutable image materializer could not initialize: ${String(x.data.error)}`));return}x.data.type==="ready"&&(console.log(`[boot-trace] ${JSON.stringify({event:"materializer-ready",at:Date.now(),ms:Date.now()-o})}`),y(),this.ready=!0,this.worker=a,h())}},I=setTimeout(()=>P(new Error("The immutable image materializer did not initialize within 10 seconds; reload to retry.")),1e4);this.cancelStartup=P,a.addEventListener("message",A),a.addEventListener("error",S),a.addEventListener("messageerror",S);try{a.postMessage({type:"init",ranges:this.ranges,directory:this.directory,identity:this.identity,state:this.state.buffer,completed:this.completed.buffer,sharedCompletion:this.sharedCompletion,...this.receiptKey?{receiptKey:this.receiptKey}:{}})}catch(x){P(x instanceof Error?x:new Error(String(x)))}}),this.startup}readDigests(){const o=this.firstRead;if(!o)return;const a=this.ranges.parts.length,d=[];for(let h=0;h<a;h+=1){const E=Atomics.load(o,h),y=this.ranges.parts[h];E>0&&y.raw>0&&d.push([E,y.sha256])}return d.sort((h,E)=>h[0]-E[0]).map(([,h])=>h)}completedDigests(){const o=[];for(let a=0;a<this.completed.length;a+=1){const d=this.ranges.parts[a];d.raw>0&&Atomics.load(this.completed,a)===2&&o.push(d.sha256)}return o}prefetch(o,a=[]){if(this.closed||!this.ready||!this.worker)return{queued:0,done:Promise.resolve()};const d=new Map;for(let S=0;S<this.ranges.parts.length;S+=1){const P=this.ranges.parts[S];if(P.raw===0)continue;const A=d.get(P.sha256);A?A.push(S):d.set(P.sha256,[S])}const h=[];for(const S of new Set(o))for(const P of d.get(S)??[])Atomics.load(this.completed,P)!==2&&h.push(P);const E=a.length>0&&h.length>0?Math.min(a.length,8):Math.min(Tn,Math.ceil(h.length/32)),y=[];for(let S=0;S<E;S+=1){const P=h.filter((M,F)=>F%E===S),A=new Worker(br,{type:"module",name:"immutable-image-prefetch"});this.prefetchers.push(A);let I;y.push(new Promise(M=>{I=M}));const x=()=>{A.terminate(),this.prefetchers=this.prefetchers.filter(M=>M!==A),I()};A.addEventListener("error",x),A.addEventListener("messageerror",x),A.addEventListener("message",M=>{M.data?.identity===this.identity&&(M.data.type==="ready"?A.postMessage(a.length>0?{type:"prefetch-stream",url:a[S]}:{type:"prefetch",indices:P}):(M.data.type==="prefetched"||M.data.type==="init-error")&&x())}),A.postMessage({type:"init",ranges:this.ranges,directory:this.directory,identity:this.identity,state:new SharedArrayBuffer(this.state.byteLength),completed:this.completed.buffer,sharedCompletion:!0,...this.receiptKey?{receiptKey:this.receiptKey}:{}})}return{queued:h.length,done:Promise.all(y).then(()=>{})}}get blockedReads(){return{...this.blocked}}ensure(o,a){if(this.closed)throw new Error("This immutable image reader is closed.");if(!this.ready)throw new Error("This immutable image reader has not finished asynchronous initialization.");if(a===0||o>=this.ranges.bytes)return;const d=Math.min(o+a,this.ranges.bytes);let h=0,E=this.ranges.parts.length;for(;h<E;){const y=h+E>>>1,S=this.ranges.parts[y];S.offset+S.raw<=o?h=y+1:E=y}for(let y=h;y<this.ranges.parts.length;y+=1){const S=this.ranges.parts[y];if(S.offset>=d)break;const P=this.firstRead;if(P&&Atomics.load(P,y)===0&&Atomics.compareExchange(P,y,0,Atomics.add(P,this.ranges.parts.length,1)+1),Atomics.load(this.completed,y)===2)continue;const A=this.worker??this.port;if(!A)throw new Error("This immutable image reader's line closed and its own materializer is still starting; retry the read.");A.postMessage({type:"read",index:y});const I=performance.now(),x=I+3e4;for(;Atomics.load(this.state,y)===0;){const M=x-performance.now();if(M<=0||Atomics.wait(this.state,y,0,M)==="timed-out")throw this.close(),new Error(`The image's immutable part ${S.url} did not arrive within 30 seconds; reload to retry.`)}if(this.blocked.ranges+=1,this.blocked.ms+=performance.now()-I,Atomics.load(this.state,y)!==2)throw new Error(`The image's immutable part ${S.url} could not be verified or stored; see the worker error and reload to retry.`)}}lineForReader(){const o=this.worker??this.port;if(this.closed||!this.ready||!o)return;const a=new MessageChannel,d=new SharedArrayBuffer(this.ranges.parts.length*Int32Array.BYTES_PER_ELEMENT);return o.postMessage({type:"client",port:a.port1,state:d},[a.port1]),{port:a.port2,state:d}}fail(){for(let o=0;o<this.state.length;o+=1)Atomics.compareExchange(this.state,o,0,-1)===0&&Atomics.notify(this.state,o)}close(){if(this.closed)return;if(this.closed=!0,this.cancelStartup){this.cancelStartup(new Error("This immutable image reader closed during initialization."));return}this.fail(),this.port?.close();const o=this.worker;o&&(o.postMessage({type:"closing"}),setTimeout(()=>o.terminate(),250));for(const a of this.prefetchers)a.dispatchEvent(new Event("error"));this.prefetchers=[]}}const $t="/packages",St="supercode-browser-packages",Me=new TextEncoder,He=new TextDecoder("utf-8",{fatal:!0}),In=On,bt="generations",Ar="atomic-staging",Ue=Pn,ne="index.json",Ht="index-log.bin",Ge="pack.bin",kt=8,Or=64*1024*1024,Q=1024*1024*1024,Pr=4*1024*1024*1024,xn=["/workspace","/home","/opt"],Re=0,Tr=1,Ut=1e6,Fr=8*1024*1024,Ir=250,Mn=64*1024*1024,Rn=256*1024*1024,xr=4*1024*1024,We=493,At=420;function _n(m,o={}){const a=o.limits?.maxBytes??Pr,d=o.limits?.maxEntries??Ut;if(!Number.isSafeInteger(a)||a<1||a>Pr||!Number.isSafeInteger(d)||d<1||d>Ut)throw new Error("Invalid OPFS workspace limits.");let h,E=!1,y=!1,S=!1,P,A=0,I=0,x,M,F,w=new Map,C=new Ot,R,H,z,_e,Ze,me,ie=0,v,T=0;const N=new Map,G=256*1024,oe=32;let O=0,Y,q=-1/0,Ee=0,we=0,b=0,_=0,W=0,Se=0,be=0,ee,et,se,ve=!1,je,jt=Promise.resolve(),Le=0,$=!1,De=!1,U,ke=0,ae=!1;function tt(){if(!(!U||ae)){if(b>2147483647){rt();return}Atomics.store(U,Tr,b)}}function rt(){!U||ae||(ae=!0,(Atomics.load(U,Re)&1)===0&&Atomics.add(U,Re,1))}function Ye(){ke+=1,ke===1&&U&&!ae&&Atomics.add(U,Re,1)}function Ke(){ke-=1,!(ke>0||!U||ae)&&(tt(),ae||Atomics.add(U,Re,1))}function Yt(){if(y)throw new Error("A store open for reading follows its owner's clock; it has none of its own.");return U||(U=new Int32Array(new SharedArrayBuffer(2*Int32Array.BYTES_PER_ELEMENT)),U[Re]=ke>0||ae?1:0,tt()),U.buffer}let V;const vr=8*1024*1024;let Kt=!1;function Lr(e){if(y||!U||!F||ve||ke>0||ae||$)return;const t=Atomics.load(U,Re);if(t&1)return;if(e?.overlays&&w instanceof $e){const i=w.boundedChanges();if(i)return Tt({generation:F,index:w.base.buffer,changes:i,packBytes:O,logBytes:b,epoch:t,liveBytes:_,linked:A,linkedBytes:I})}if(V&&V.generation===F&&V.epoch===t&&b>=V.logBytes&&b-V.logBytes<=(e?.current?0:vr))return Tt(V);let r;try{r=Sr(w,Cr())}catch(i){console.warn(`[pack-store] no reader seed: ${i instanceof Error?i.message:String(i)}`);return}return V={generation:F,index:r,packBytes:O,logBytes:b,epoch:t,liveBytes:_,linked:A,linkedBytes:I},Br(r),Tt(V)}function Tt(e){const t=o.packages?.imageCompletionSeed();return t?{...e,packagesImage:t}:e}function Dr(){if(!(!z||!H||!F||ve||ke>0||$))return{generation:F,rangesDigest:H,completed:z.completionBuffer,...z.receiptKey?{metadata:{ranges:z.verifiedRanges,receiptKey:z.receiptKey}}:{}}}function Br(e){const t=[];if(w instanceof $e)for(const[i,n]of w.changed())n.capacity!==void 0&&t.push([i,n]);else for(const[i,n]of w)n.capacity!==void 0&&t.push([i,n]);const r=new Ie(e);w=new $e(r),C=new Et(r);for(const[i,n]of t)w.set(i,n)}function Cr(){if(C instanceof Ot)return C.map;const e=new Map;for(const t of w.keys()){const r=Te(t);if(r===t)continue;let i=e.get(r);i||(i=new Set,e.set(r,i)),i.add(t.slice(r.length+1))}return e}function zr(){!y||S||$||!v||at(b)}async function nt(e){if($)throw new Error("This OPFS workspace is closing.");Le+=1;let t,r=!1;try{return await e()}catch(i){throw r=!0,t=i,i}finally{if(Le-=1,$&&Le===0)try{gr()}catch(i){throw r?new AggregateError([t,i],"OPFS operation and deferred close both failed."):i}}}async function it(e){return ue(),Le!==0?Promise.reject(new Error("Wait for the current OPFS storage operation before replacing its generation.")):(De=!0,nt(async()=>{try{return await e()}finally{De=!1}}))}function Nr(e){if($)throw new Error("This OPFS workspace is closing.");const t=w.get(e);if(!t||t.type==="directory")throw new Error(`OPFS workspace file does not exist: ${e}`);return ot(t)}function $r(e,t,r){if($)throw new Error("This OPFS workspace is closing.");const i=w.get(e);if(!i||i.type==="directory")throw new Error(`OPFS workspace file does not exist: ${e}`);const n=Math.min(Math.max(0,t),i.length),s=Math.min(Math.max(0,r),i.length-n);if(i.pack){const c=o.packages;if(!c)throw new Error("This store has no shared package store to read from.");return c.readExtent(i.offset+n,s)}return st(i.offset+n,s)}function ot(e){if(e.pack){const t=o.packages;if(!t)throw new Error("This store has no shared package store to read from.");return t.readExtent(e.offset,e.length)}return st(e.offset,e.length)}function st(e,t){if($)throw new Error("This OPFS workspace is closing.");const r=R;if(!r)throw new Error("OPFS filesystem worker is not initialized.");const i=new Uint8Array(t);if(t>0&&t<=G&&e>=0&&e+t<=T){let n=0;for(;n<t;){const s=e+n,c=Math.floor(s/G)*G;let f=N.get(c);if(!f&&(f=new Uint8Array(Math.min(G,T-c)),z?.ensure(c,f.byteLength),r.read(f,{at:c})!==f.byteLength))throw new Error("An OPFS package range could not be read completely.");N.delete(c),N.set(c,f),N.size>oe&&N.delete(N.keys().next().value);const l=s-c,u=Math.min(t-n,f.byteLength-l);i.set(f.subarray(l,l+u),n),n+=u}return i}if(z?.ensure(e,t),t>0&&r.read(i,{at:e})!==t)throw new Error("An OPFS workspace file could not be read completely.");return i}async function Hr(e,t={}){if($&&h||!h&&Le!==0)throw new Error("Wait for this OPFS workspace to finish closing before opening it again.");if(ve)throw new Error("This OPFS store is already opening a workspace.");if(h){if(M!==Vt(e))throw new Error("Close this OPFS store before opening another workspace.");return w.size>0}ve=!0,$=!1;const r=new AbortController;je=r;try{w=new Map,C=new Ot,F=void 0,H=void 0,P=void 0,ee=void 0,se=void 0,O=b=_=W=A=I=0,fe=void 0,Se=be=Ee=we=0,q=-1/0,M=Vt(e),y=t.readOnly===!0,Ze=y?t.imageCompletion:void 0,me=y?t.imageLine:void 0,S=y&&t.extentsOnly===!0,E=t.shared===!0||y,E||await Yr(r.signal),r.signal.throwIfAborted();const i=await Gr();r.signal.throwIfAborted();try{const c=await i.getDirectoryHandle(In,{create:!y});r.signal.throwIfAborted(),h=await c.getDirectoryHandle(M,{create:!y})}catch(c){if(r.signal.throwIfAborted(),y&&Ne(c))return!1;throw c}r.signal.throwIfAborted();let n=gt(await Pe(h,Ue));if(r.signal.throwIfAborted(),!n&&y)return await It(),!1;if(!n&&E&&(await m.navigator.locks.request(St,{mode:"exclusive",signal:r.signal},async()=>{r.signal.throwIfAborted(),n=gt(await Pe(h,Ue)),r.signal.throwIfAborted(),n||(await It(),await ir({files:[],pack:new ArrayBuffer(0)}),await Ln(h))}),r.signal.throwIfAborted(),!n))return P=await ce(F,!1),r.signal.throwIfAborted(),!1;if(!n)return await It(),r.signal.throwIfAborted(),!1;const s=async c=>{let f;try{f=await ce(c.generation,!1)}catch(g){throw r.signal.throwIfAborted(),Ne(g)?new Error("The committed OPFS workspace generation is missing. Stored generations were retained.",{cause:g}):g}if(r.signal.throwIfAborted(),F=c.generation,ie=c.initializedAt,H=c.imageRanges,P=f,S)return M===xe&&m.navigator.locks?await m.navigator.locks.request(St,{mode:"shared",signal:r.signal},async()=>{await Be(f),T=R.getSize()}):await Be(f),r.signal.throwIfAborted(),!0;const l=y?t.seed:void 0;if(l&&l.generation===c.generation){const g=new Ie(l.index);return w=new $e(g),C=new Et(g),O=l.packBytes,l.changes&&qt({packBytes:l.packBytes,changes:l.changes}),await Be(f),r.signal.throwIfAborted(),b=l.logBytes,{liveBytes:_,linked:A,linkedBytes:I}=l,W=Math.max(0,O-_),Kt=!0,w.size>0}const u=y?void 0:await wn(f);if(r.signal.throwIfAborted(),u){const g=new Ie(u.index);w=new $e(g),C=new Et(g),{packBytes:O,liveBytes:_,linked:A,linkedBytes:I}=u;const p=Atomics.load(new Int32Array(Yt()),Re);V={generation:F,index:u.index,packBytes:O,liveBytes:_,linked:A,linkedBytes:I,logBytes:0,epoch:p}}else w=Bt(await Pe(f,ne)),r.signal.throwIfAborted(),ze(),O=Ft(w);await Be(f),r.signal.throwIfAborted();const k=u?await un(u):0;return r.signal.throwIfAborted(),k&&(fe={generation:F,bytes:k},V&&(V.logBytes=k)),at(k,!!u),u?W=Math.max(0,O-_):Je(),rr(),E&&!y&&!u&&w.size>=1e4&&(pe(),await Xe(f,w,{access:v,bytes:b,packBytes:O})),E||(R.truncate(O),await cr(h,Ar,!0),await xt(F),r.signal.throwIfAborted(),W>Mn&&W>_&&await rn()),r.signal.throwIfAborted(),w.size>0};return E&&!y?await m.navigator.locks.request(St,{mode:"exclusive",signal:r.signal},async()=>{if(n=gt(await Pe(h,Ue)),!n)throw new Error("The committed package store state is missing. Stored data was retained.");return s(n)}):await s(n)}catch(i){const n=[i];try{Ce()}catch(s){n.push(s)}try{x?.()}catch(s){n.push(s)}throw x=void 0,h=void 0,n.length>1?new AggregateError(n,"OPFS workspace open and cleanup failed."):i}finally{ve=!1,je=void 0}}function Ur(e){return nt(()=>Jt(e?.whole===!0))}async function Jt(e=!1){if(S)throw new Error("A store opened for its extents alone has no index to follow.");if(y&&h){const s=gt(await Pe(h,Ue));if(!s)throw new Error("The committed OPFS workspace state is missing. Stored data was retained.");if(s.generation!==F||e){const c=await ce(s.generation,!1),f=Bt(await Pe(c,ne));O=Ft(f),s.generation!==F&&(F=s.generation,ie=s.initializedAt,H=s.imageRanges,await Be(c)),F=s.generation,P=c,w=f,ze(),at(),Je();return}}const t=v;if(!t||!P)return;const r=t.getSize();let i=!1;r<b&&(w=Bt(await Pe(P,ne)),ze(),O=Ft(w),b=0,i=!0);const n=b;at(b),(i||b!==n)&&Je()}async function Gr(){let e;for(let t=0;t<10;t+=1){je?.signal.throwIfAborted();try{return await m.navigator.storage.getDirectory()}catch(r){e=r,await new Promise(i=>setTimeout(i,200))}}throw e instanceof Error?e:new Error("This browser workspace's storage is unavailable.")}const Wr=1e4;async function K(e,t){let r;const i=je?.signal;for(let s=0;s<2;s+=1){i?.throwIfAborted();const c=e.createSyncAccessHandle({mode:"readwrite-unsafe"});let f,l,u=!1;try{const k=new Promise((p,D)=>{l=()=>D(i?.reason??new DOMException("Workspace open was cancelled.","AbortError")),i?.addEventListener("abort",l,{once:!0}),i?.aborted&&l()}),g=await Promise.race([c.then(p=>({access:p})).catch(p=>{r=p}),new Promise(p=>{f=setTimeout(()=>p(void 0),Wr)}),k]);if(i?.throwIfAborted(),g)return u=!0,g.access}finally{f!==void 0&&clearTimeout(f),l&&i?.removeEventListener("abort",l),u||c.then(k=>k.close(),()=>{}).catch(k=>console.error("Late workspace handle cleanup failed.",k))}if(r instanceof TypeError)throw new Error(`This browser cannot share a workspace's files between pages: its file access handles have no readwrite-unsafe mode (Chrome 121 or newer has one). ${r.message}`);await new Promise(k=>setTimeout(k,500))}const n=r instanceof Error?` (${r.message})`:"";throw new Error(`This browser workspace's ${t} is held by another page${n}.`)}async function Be(e){Ce();const t=await e.getFileHandle(Ge);R=await K(t,"store");try{if(R.getSize()<O)throw new Error("The committed OPFS workspace pack is incomplete. Stored data was retained.");const r=await e.getFileHandle(Ht);if(v=await K(r,"record of changes"),b=v.getSize(),H){const i=Ze,n=i&&i.generation===F&&i.rangesDigest===H?i:void 0;let s,c;if(n?.metadata){if(s=Nt(n.metadata.ranges),c=n.metadata.receiptKey,!/^[a-f0-9]{64}$/u.test(c))throw new Error("The owner's immutable receipt key is invalid.")}else{const l=await(await e.getFileHandle(kr)).getFile(),u=new Uint8Array(await l.arrayBuffer());if(await de(u)!==H)throw new Error("The committed immutable image ranges have changed. Stored data was retained.");s=Nt(JSON.parse(He.decode(u))),c=await de(Me.encode(JSON.stringify(s)))}if(s.bytes>R.getSize())throw new Error("The immutable image reservation is incomplete. Stored data was retained.");const f=n?me:void 0;f||me?.port.close(),me=void 0,z=new Fn(s,e,`${M}.${F}`,n?.completed,c,f),await z.initialize(),_e=s.image}}catch(r){throw Ce(),r}}function Ce(){z?.close(),z=void 0,_e=void 0;const e=R,t=v;R=void 0,v=void 0,b=0,T=0,N.clear();try{e?.close()}finally{t?.close()}}function at(e=0,t=!1){const r=v;if(!r)throw new Error("OPFS filesystem worker is not initialized.");const i=r.getSize();if(i<=e){b=i;return}const n=new Uint8Array(i-e);if(r.read(n,{at:e})!==n.byteLength)throw new Error("The OPFS workspace index log could not be read.");const s=R?.getSize()??1/0,c=new DataView(n.buffer);let f=0;const l=n.byteLength;for(;f+kt<=l;){const u=c.getUint32(f,!0),k=c.getUint32(f+4,!0),g=f+kt;if(u===0||u>Or||g+u>l)break;const p=n.subarray(g,g+u);if(ur(p)!==k)break;let D;try{D=gn(JSON.parse(He.decode(p)))}catch{break}if(D.packBytes>s)break;qt(D,t),f=g+u}f!==l&&!E&&r.truncate(e+f),b=e+f}function qt(e,t=!1){for(const[r,i]of e.changes){const n=w.get(r);if(i&&_r(n,i)){ft(r);continue}t&&(n?.pack?(A-=1,I-=n.length):n&&(_-=n.length),i?.pack?(A+=1,I+=i.length):i&&(_+=i.length)),i===null?(w.delete(r),Qt(r)):(w.set(r,i),ft(r))}O=Math.max(O,e.packBytes)}function Je(){_=0,A=0,I=0;for(const e of w.values())e.pack?(A+=1,I+=e.length):_+=e.length;W=Math.max(0,O-_)}function Ft(e){let t=0;for(const r of e.values())r.pack||(t=Math.max(t,r.offset+r.length));return t}const jr=5e3;async function Yr(e){if(!m.navigator.locks)return;if(!M)throw new Error("OPFS filesystem project is not initialized.");const t=new AbortController,r=setTimeout(()=>t.abort(),jr);try{await new Promise((i,n)=>{m.navigator.locks.request(`supercode-browser-filesystem-${M}`,{mode:"exclusive",signal:e?AbortSignal.any([e,t.signal]):t.signal},async()=>{clearTimeout(r),i(),await new Promise(s=>{x=s})}).catch(()=>n(e?.aborted?e.reason:new Error("This browser workspace is already open in another tab.")))})}finally{clearTimeout(r)}}function Vt(e){if(typeof e!="string"||!/^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/u.test(e))throw new Error("OPFS filesystem projectId is invalid.");return e}async function Ae(){if(!h)throw new Error("OPFS filesystem worker is not initialized.");return h}async function ce(e,t){return(await(await Ae()).getDirectoryHandle(bt,{create:t})).getDirectoryHandle(e,{create:t})}async function It(){let e;try{e=await(await Ae()).getDirectoryHandle(bt)}catch(t){if(Ne(t))return;throw t}for await(const t of e.entries())throw new Error("OPFS workspace state is missing but stored generations exist. Stored data was retained.")}async function xt(e){const t=await Ae();let r;try{r=await t.getDirectoryHandle(bt)}catch(i){if(Ne(i))return;throw i}for await(const[i]of r.entries())i!==e&&await fr(r,i)}function ue(){if($)throw new Error("This OPFS workspace is closing.");if(De)throw new Error("This OPFS workspace is replacing its generation; wait for that operation before writing.");if(y)throw new Error("This store is open for reading; its owner writes it.");if(se)throw se}async function Kr(e){yr(e)}let Mt=!1,ct=0,fe,Rt=!1;function Xt(){if(ct>0)return;const e=fe&&fe.generation===F&&fe.bytes<=b?fe.bytes:0;b-e>Fr&&!Mt&&(Mt=!0,(E?m.navigator.locks.request(St,{mode:"exclusive"},async()=>{if(!h||$)return;await Jt();const r=fe,i=r&&r.generation===F&&r.bytes<=b?r.bytes:0;b-i>Fr&&await wt()}):wt()).catch(r=>console.error("The workspace's log could not be checkpointed; it is replayed at the next open.",r)).finally(()=>{Mt=!1})),!E&&!Rt&&W>Rn&&W>_&&(Rt=!0,nt(nn).catch(t=>console.error("The workspace could not be compacted; it keeps its generation.",t)).finally(()=>{Rt=!1}))}async function Jr(e){ue(),ct+=1;try{return await e()}finally{ct-=1,ct===0&&!$&&h&&Xt()}}function qr(e,t){const r=he(e.path);if(e.operation==="write"){if(w.get(r)?.type==="directory")throw new Error(`OPFS write target is a directory: ${r}`);if(!(e.content instanceof Uint8Array))throw new Error("OPFS write requires file content.");const n=e.content;if(n.byteLength>Q)throw new Error(`${r} is ${n.byteLength} bytes; an OPFS workspace file holds at most ${Q}.`);lt(r,n.byteLength),Oe(r,t);const s=ht(n);J(r,{type:e.symlink?"symlink":"file",mode:e.mode??w.get(r)?.mode??At,mtimeMs:e.mtimeMs??Date.now(),offset:s,length:n.byteLength},t);return}if(e.operation==="append"){const n=w.get(r);if(n&&n.type!=="file")throw new Error(`OPFS append target is not a file: ${r}`);if(!(e.content instanceof Uint8Array))throw new Error("OPFS append requires file content.");const s=e.content,c=(n?.length??0)+s.byteLength;if(c>Q)throw new Error(`${r} is ${c} bytes; an OPFS workspace file holds at most ${Q}.`);lt(r,c),Oe(r,t);const f=e.mode??n?.mode??At,l=e.mtimeMs??Date.now(),u=n&&!n.pack?n.capacity??n.length:0;if(M!==xe&&n&&!n.pack&&n.length>0&&(c<=u||n.offset+u===O)){dt(n.offset+n.length,s),J(r,{...n,mode:f,mtimeMs:l,length:c,capacity:Math.max(u,c)},t),W-=Math.max(n.length,n.capacity??0),Se-=1,be-=n.length;return}const k=new Uint8Array(c);n&&n.length>0&&k.set(ot(n),0),k.set(s,c-s.byteLength);const g=ht(k),p=Math.min(Q,Math.max(c,c*2,64*1024));p>c&&nr(g+p),J(r,{type:"file",mode:f,mtimeMs:l,offset:g,length:c,capacity:p},t);return}if(e.operation==="write-at"){const n=w.get(r);if(n&&n.type!=="file")throw new Error(`OPFS write target is not a file: ${r}`);if(!(e.content instanceof Uint8Array))throw new Error("OPFS write requires file content.");const s=e.content,c=e.position,f=n?.length??0;if(s.byteLength===0&&n)return;const l=s.byteLength===0?f:Math.max(f,c+s.byteLength);if(l>Q)throw new Error(`${r} is ${l} bytes; an OPFS workspace file holds at most ${Q}.`);lt(r,l),Oe(r,t);const u=e.mode??n?.mode??At,k=e.mtimeMs??Date.now(),g=n&&!n.pack?n.capacity??n.length:0;if(M!==xe&&n&&!n.pack&&f>0&&(l<=g||n.offset+g===O)){if(c>f&&dt(n.offset+f,new Uint8Array(c-f)),et&&c<f){const X=Math.min(f,c+s.byteLength);et.push([n.offset+c,st(n.offset+c,X-c)])}dt(n.offset+c,s),J(r,{...n,mode:u,mtimeMs:k,length:l,capacity:Math.max(g,l)},t),l!==f&&(W-=Math.max(n.length,n.capacity??0),Se-=1,be-=n.length);return}const p=new Uint8Array(l);n&&f>0&&p.set(ot(n),0),s.byteLength>0&&p.set(s,c);const D=ht(p),B=Math.min(Q,Math.max(l,l*2,64*1024));B>l&&nr(D+B),J(r,{type:"file",mode:u,mtimeMs:k,offset:D,length:l,capacity:B},t);return}if(e.operation==="mkdir"){Oe(r,t);const n=w.get(r);if(n&&n.type!=="directory")throw new Error(`OPFS path is a file: ${r}`);J(r,{type:"directory",mode:e.mode??n?.mode??We,mtimeMs:e.mtimeMs??n?.mtimeMs??Date.now(),offset:0,length:0},t);return}if(e.operation==="remove"){vt(r,t),ye().includes(r)&&J(r,{type:"directory",mode:We,mtimeMs:Date.now(),offset:0,length:0},t);return}if(e.operation==="link"){Vr(r,tr(e.source),t);return}if(e.operation==="rename"){Xr(r,he(e.destination),t);return}const i=w.get(r);if(!i)throw new Error(`OPFS metadata target does not exist: ${r}`);J(r,{...i,mode:e.mode??i.mode,mtimeMs:e.mtimeMs??i.mtimeMs},t)}function J(e,t,r){const i=w.get(e);ee&&!ee.has(e)&&ee.set(e,i);const n=i!==void 0&&i.type===t.type&&i.offset===t.offset&&i.length===t.length&&i.pack===t.pack;i&&!n&&(Zt(i),i.type!=="directory"&&t.type!=="directory"&&i.length>0&&!i.pack&&(Se+=1,be+=i.length)),w.set(e,t),ft(e),n||(t.pack?(A+=1,I+=t.length):_+=t.length),r.push([e,t])}function ft(e){const t=Te(e);t!==e&&C.mutable(t).add(e.slice(t.length+1))}function Qt(e){const t=Te(e);C.get(t)?.has(e.slice(t.length+1))&&C.mutable(t).delete(e.slice(t.length+1)),C.delete(e)}function ze(){C=new Ot;for(const e of w.keys())ft(e)}function _t(e){const t=[],r=i=>{const n=w.get(i);if(!n)return;t.push([i,n]);const s=C.get(i);if(s)for(const c of s)r(`${i}/${c}`)};return r(e),t}function Zt(e,t){if(e.pack){A-=1,I-=e.length;return}_-=e.length,W+=Math.max(e.length,e.capacity??0)}function er(e,t){const r=w.get(e);r&&(ee&&!ee.has(e)&&ee.set(e,r),w.delete(e),Qt(e),Zt(r),t.push([e,null]))}function Vr(e,t,r){const i=o.packages;if(!i)throw new Error("This store has no shared package store to link from.");const n=tr(t),s=i.descendants(n);if(s.length===0)throw new Error(`The shared package store does not hold ${t}.`);Oe(e,r),vt(e,r),le(w.size+s.length);for(const[c,f]of s){const l=c===n?e:`${e}${c.slice(n.length)}`;J(l,f.type==="directory"?{type:"directory",mode:f.mode,mtimeMs:f.mtimeMs,offset:0,length:0}:{type:f.type,mode:f.mode,mtimeMs:f.mtimeMs,offset:f.offset,length:f.length,pack:xe},r)}}function Oe(e,t){const r=Te(e);if(r!==e&&w.get(r)?.type==="directory"){le(w.size+(w.has(e)?0:1));return}const i=[];let n=qe(e)??ye()[0];if(w.has(n)||i.push(n),e!==n)for(const c of Ct(hr(Te(e)))){n=`${n}/${c}`;const f=w.get(n);if(f&&f.type!=="directory")throw new Error(`OPFS path parent is a file: ${n}`);f||i.push(n)}le(w.size+i.length+(w.has(e)?0:1));const s=Date.now();for(const c of i)J(c,{type:"directory",mode:We,mtimeMs:s,offset:0,length:0},t)}function vt(e,t){for(const[r]of _t(e))er(r,t)}function Xr(e,t,r){if(e===t)return;if(t.startsWith(`${e}/`))throw new Error("An OPFS rename cannot move a directory into itself.");const i=_t(e);if(i.length===0){if(w.has(t))return;throw new Error(`OPFS rename source does not exist: ${e}`)}Oe(t,r),vt(t,r);for(const[n]of i)er(n,r);for(const[n,s]of i)J(`${t}${n.slice(e.length)}`,s,r);le(w.size)}function tr(e){if(typeof e!="string"||!e.startsWith(`${$t}/`)||e.includes("\0")||e.length>4096)throw new Error("Invalid shared store path.");return Ct(e.slice($t.length+1)),e}function ye(){return M===xe?[$t]:xn}function qe(e){return ye().find(t=>e===t||e.startsWith(`${t}/`))}function lt(e,t){const r=w.get(e),i=r&&!r.pack?r.length:0;if(_-i+t>a)throw new Error(`OPFS workspace exceeds its byte limit: writing ${e} (${t} bytes) would take the project's own files past ${a} bytes.`)}function le(e){if(e>d)throw new Error("OPFS workspace exceeds its entry limit.")}function rr(){if(le(w.size),_>a)throw new Error(`OPFS workspace exceeds its byte limit: the project's own files hold ${_} bytes, past ${a}.`)}function dt(e,t){const r=R;if(!r)throw new Error("OPFS filesystem worker is not initialized.");let i=0;for(;i<t.byteLength;){const n=r.write(t.subarray(i),{at:e+i});if(n<=0)throw new Error("An OPFS workspace file could not be written completely.");i+=n}O=Math.max(O,e+t.byteLength)}function nr(e){const t=R;if(!t)throw new Error("OPFS filesystem worker is not initialized.");e<=O||(t.truncate(e),O=e)}function ht(e){const t=R;if(!t)throw new Error("OPFS filesystem worker is not initialized.");const r=O;let i=0;for(;i<e.byteLength;){const n=t.write(e.subarray(i),{at:r+i});if(n<=0)throw new Error("An OPFS workspace file could not be written completely.");i+=n}return O=r+e.byteLength,r}function Qr(e){const t=R;if(t.getSize()>=O&&e.getSize()>=b)return;t.flush(),e.flush();const r=t.getSize(),i=e.getSize();if(!(r>=O&&i>=b))throw Object.assign(new Error(`This browser is keeping less than the tab wrote (the store's pack holds ${r} of ${O} bytes, its log ${i} of ${b}): its storage is full, as a private window's is well below its quota.`),{name:"QuotaExceededError",code:"ENOSPC"})}function Zr(e,t={}){const r=v;if(!r||!R)throw new Error("OPFS filesystem worker is not initialized.");if(e.length===0)return;const i=Me.encode(JSON.stringify({packBytes:O,changes:e}));if(i.byteLength>Or)throw new Error("An OPFS workspace index record exceeds its size limit.");const n=new Uint8Array(kt+i.byteLength),s=new DataView(n.buffer);s.setUint32(0,i.byteLength,!0),s.setUint32(4,ur(i),!0),n.set(i,kt);let c=0;for(;c<n.byteLength;){const f=r.write(n.subarray(c),{at:b+c});if(f<=0)throw new Error("The OPFS workspace index log could not be written completely.");c+=f}b+=n.byteLength,Qr(r),t.publish!==!1&&tt(),performance.now()-q>=Ir?pe():Y===void 0&&(Y=setTimeout(pe,Ir))}function pe(){if(Y!==void 0&&(clearTimeout(Y),Y=void 0),se)throw se;const e=performance.now();R?.flush(),v?.flush(),q=performance.now(),Ee+=1,we+=q-e}function wt(){const e=jt,t=nt(()=>e.catch(()=>{}).then(en));return jt=t,t}async function en(){if(ue(),!F)return;const e=F,t=v,r=await ce(e,!1);if(!t||t!==v||e!==F)throw new Error("OPFS workspace changed generations before its checkpoint could start.");pe();const i=b;if(await Xe(r,w,{access:t,bytes:i,packBytes:O}),e===F&&(fe={generation:e,bytes:i}),t===v&&e===F&&i===b){Ye();try{t.truncate(0),t.flush(),b=0,fe={generation:e,bytes:0}}finally{Ke()}}}function ir(e){return it(()=>tn(Lt(e)))}async function tn(e){const t=crypto.randomUUID(),r=await ce(t,!0),i=await r.getFileHandle(Ge,{create:!0}),n=await K(i,"store"),s=new Map;let c=0;try{for(const l of e.files){let u=0,k=0;if(l.type!=="directory"){const g=new Uint8Array(e.pack,l.offset??0,l.length??0);u=c,k=g.byteLength;let p=0;for(;p<k;){const D=n.write(g.subarray(p),{at:u+p});if(D<=0)throw new Error("An OPFS workspace file could not be written completely.");p+=D}c+=k}s.set(l.path,{type:l.type,mode:l.mode??(l.type==="directory"?We:At),mtimeMs:l.mtimeMs??Date.now(),offset:u,length:k})}for(const l of ye())s.has(l)||s.set(l,{type:"directory",mode:We,mtimeMs:Date.now(),offset:0,length:0});le(s.size),n.truncate(c),n.flush()}finally{n.close()}const f=await Xe(r,s);await ut(t,r,s,c,f)}async function rn(){await or(()=>!0)}async function nn(){let e=!1,t=!1,r=!1;try{await on(()=>{e=!0},()=>{t=!0},()=>{r=!0})}finally{e&&(t||r)?Ke():e&&rt()}}async function on(e,t,r){const i=crypto.randomUUID(),n=await ce(i,!0),s=await K(await n.getFileHandle(Ge,{create:!0}),"store");let c,f=!1;try{c=await K(await n.getFileHandle(Ht,{create:!0}),"record of changes"),c.truncate(0);const l=new Uint8Array(xr);let u=0;const k=L=>{if(L.pack)return{...L};if(L.type==="directory"||L.length===0)return{...L,offset:0,length:0};const j=R;if(!j)throw new Error("OPFS filesystem worker is not initialized.");const Fe=u;let te=0;for(;te<L.length;){const Qe=Math.min(l.byteLength,L.length-te),mr=l.subarray(0,Qe);if(z?.ensure(L.offset+te,Qe),j.read(mr,{at:L.offset+te})!==Qe)throw new Error("An OPFS workspace file could not be read completely.");let mt=0;for(;mt<Qe;){const Er=s.write(mr.subarray(mt),{at:Fe+te+mt});if(Er<=0)throw new Error("An OPFS workspace file could not be written completely.");mt+=Er}te+=Qe}u+=L.length;const{capacity:zt,...Sn}=L;return{...Sn,offset:Fe}},g=new Map;let p=performance.now();for(const[L,j]of[...w]){if($||De)return;w.get(L)===j&&(g.set(j,k(j)),performance.now()-p>8&&(await new Promise(Fe=>setTimeout(Fe,0)),p=performance.now()))}if($||De||!R||!v)return;Ye(),e();const D=new Map;for(const[L,j]of w)D.set(L,g.get(j)??k(j));s.truncate(u),s.flush(),c.flush(),pe();const B={pack:R,log:v};R=s,v=c,b=0,w=D,ze(),O=u,F=i,P=n,Je(),f=!0;const X=new Map(D);try{B.pack.close()}finally{B.log.close()}try{await Xe(n,X);const L={storageVersion:4,generation:i,initializedAt:Date.now()};await Ve(await Ae(),Ue,L)}catch(L){throw se=new Error("The workspace moved to a compacted generation it could not record; it takes no more writes, which its next open would discard.",{cause:L}),se}t(),await xt(i)}finally{if(!f){r();try{s.close()}finally{c?.close()}await fr(await(await Ae()).getDirectoryHandle(bt),i)}}}async function sn(e){ue(),Ye();try{await an(e)}finally{Ke()}}async function an(e){let t=!1;for(const[r,i]of w){if(!i.pack||i.length===0)continue;const n=e.get(i.offset);if(n===void 0)throw new Error(`The shared store no longer holds the bytes of ${r}.`);n!==i.offset&&(w.set(r,{...i,offset:n}),t=!0)}t&&await wt()}function or(e){return it(()=>cn(e))}async function cn(e){const t=R;if(!t)throw new Error("OPFS filesystem worker is not initialized.");const r=new Map,i=crypto.randomUUID(),n=await ce(i,!0),s=await n.getFileHandle(Ge,{create:!0}),c=await K(s,"store"),f=new Map,l=new Uint8Array(xr);let u=0;try{for(const[g,p]of w){if(!e(g,p))continue;if(p.pack){f.set(g,{...p});continue}if(p.type==="directory"||p.length===0){f.set(g,{...p,offset:0,length:0});continue}const D=u;r.set(p.offset,D);let B=0;for(;B<p.length;){const j=Math.min(l.byteLength,p.length-B),Fe=l.subarray(0,j);if(z?.ensure(p.offset+B,j),t.read(Fe,{at:p.offset+B})!==j)throw new Error("An OPFS workspace file could not be read completely.");let te=0;for(;te<j;){const zt=c.write(Fe.subarray(te),{at:D+B+te});if(zt<=0)throw new Error("An OPFS workspace file could not be written completely.");te+=zt}B+=j}u+=p.length;const{capacity:X,...L}=p;f.set(g,{...L,offset:D,length:p.length})}c.truncate(u),c.flush()}finally{c.close()}const k=await Xe(n,f);return await ut(i,n,f,u,k),r}async function ut(e,t,r,i,n,s){Ye();try{await fn(e,t,r,i,n,s)}finally{Ke()}}async function fn(e,t,r,i,n,s){const c=await t.getFileHandle(Ht,{create:!0}),f=await K(c,"record of changes");try{f.truncate(0),f.flush()}finally{f.close()}const l={storageVersion:s?5:4,generation:e,initializedAt:Date.now(),...s?{imageRanges:s}:{}};if(await Ve(await Ae(),Ue,l),Ce(),F=e,ie=l.initializedAt,H=s,n){const u=new Ie(n.index);w=new $e(u),C=new Et(u),V=void 0}else w=r,ze();O=i,P=t,await Be(t),n?({liveBytes:_,linked:A,linkedBytes:I}=n,W=Math.max(0,O-_)):Je(),E||await xt(e)}async function ln(e,t,r,i,n=!1){if(ue(),!E||M!==xe)throw new Error("Only the shared package store can reserve immutable image extents.");if(O!==0||[...w.values()].some(g=>g.type!=="directory"))return!1;const s=Nt(i);if(s.bytes!==e.packBytes||e.entries>Ut||e.liveBytes>e.packBytes||t.byteLength!==e.json.raw||r.byteLength!==e.binary.raw||!await pt(t,e.json.sha256,n)||!await pt(r,e.binary.sha256,n))throw new Error("The image's prepared metadata does not match its document.");const c=t.subarray(0,4096).indexOf(10);if(c<0)throw new Error("The prepared index has no bounded retained header.");const f=JSON.parse(`${He.decode(t.subarray(0,c-1))}}`),l={packBytes:e.packBytes,liveBytes:e.liveBytes,linked:0,linkedBytes:0},u=f.retainedIndex;if(u.version!==1||u.digest!==await sr(e.binary.sha256,l)||u.packBytes!==l.packBytes||u.liveBytes!==l.liveBytes||u.linked!==0||u.linkedBytes!==0)throw new Error("The prepared index's retained measures are inconsistent.");const k=new SharedArrayBuffer(r.byteLength);if(new Uint8Array(k).set(r),new Ie(k).entryCount!==e.entries)throw new Error("The prepared index has the wrong number of entries.");return it(async()=>{const g=crypto.randomUUID(),p=await ce(g,!0),D=await p.getFileHandle(Ge,{create:!0}),B=await K(D,"immutable image reservation");try{B.truncate(e.packBytes),B.flush()}finally{B.close()}const X=Me.encode(JSON.stringify(s));return await ge(p,kr,X),await ge(p,yt,r),await ge(p,ne,t),await ut(g,p,new Map,e.packBytes,{index:k,...l},await de(X)),!0})}async function dn(e,t,r,i=!1,n){if(ue(),E||!o.packages||!n&&!o.packages.deferredImage)throw new Error("Prepared project paths require a verified shared image.");if(O!==0||[...w.values()].some(u=>u.type!=="directory"))return!1;if(t.byteLength!==e.json.raw||r.byteLength!==e.binary.raw||!await pt(t,e.json.sha256,i)||!await pt(r,e.binary.sha256,i))throw new Error("The image's prepared project does not match its descriptor.");const s=t.subarray(0,4096).indexOf(10);if(s<0)throw new Error("The prepared project has no bounded retained header.");const c=JSON.parse(`${He.decode(t.subarray(0,s-1))}}`).retainedIndex,f={packBytes:0,liveBytes:0,linked:e.linked,linkedBytes:e.linkedBytes};if(c.version!==1||c.digest!==await sr(e.binary.sha256,f)||c.packBytes!==0||c.liveBytes!==0||c.linked!==e.linked||c.linkedBytes!==e.linkedBytes)throw new Error("The prepared project's retained measures are inconsistent.");const l=new SharedArrayBuffer(r.byteLength);if(new Uint8Array(l).set(r),new Ie(l).entryCount!==e.entries||e.entries>d)throw new Error("The prepared project has invalid entry bounds.");return it(async()=>{const u=crypto.randomUUID(),k=await ce(u,!0),g=await k.getFileHandle(Ge,{create:!0}),p=await K(g,"prepared project");try{p.truncate(0),p.flush()}finally{p.close()}if(await ge(k,yt,r),await ge(k,ne,t),n&&!await n)return!1;if(!o.packages?.deferredImage)throw new Error("Prepared project paths require a verified shared image.");return await ut(u,k,new Map,0,{index:l,...f}),!0})}async function hn(){if($)throw new Error("This OPFS workspace is closing.");if(!R)throw new Error("OPFS filesystem worker is not initialized.");const e=[],t=[...w.keys()].sort((c,f)=>wr(c)-wr(f)||(c<f?-1:1));let r=0;for(const c of w.values())c.type!=="directory"&&(r+=c.length);const i=new ArrayBuffer(r),n=new Uint8Array(i);let s=0;for(const c of t){const f=w.get(c);if(f.type==="directory"){e.push({path:c,type:"directory",mode:f.mode,mtimeMs:f.mtimeMs});continue}f.length>0&&n.set(ot(f),s),e.push({path:c,type:f.type,offset:s,length:f.length,mode:f.mode,mtimeMs:f.mtimeMs}),s+=f.length}for(const c of[...ye()].reverse())w.has(c)||e.unshift({path:c,type:"directory",mode:We,mtimeMs:Date.now()});return Lt({files:e,pack:i})}async function Ve(e,t,r){await ge(e,t,Me.encode(JSON.stringify(r)))}async function ge(e,t,r){const i=await(await Ae()).getDirectoryHandle(Ar,{create:!0}),n=crypto.randomUUID(),s=await i.getFileHandle(n,{create:!0}),c=await K(s,"index");try{let f=0;for(;f<r.byteLength;){const l=c.write(r.subarray(f),{at:f});if(l<=0)throw new Error("An OPFS workspace file could not be written completely.");f+=l}c.truncate(r.byteLength),c.flush()}finally{c.close()}try{await s.move(e,t)}finally{await cr(i,n,!1)}}const yt="index.shared";async function de(e){const t=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(t),r=>r.toString(16).padStart(2,"0")).join("")}async function pt(e,t,r){return r||await de(e)===t}function sr(e,t){const{packBytes:r,liveBytes:i,linked:n,linkedBytes:s,journalPrefix:c}=t;return de(Me.encode(`${JSON.stringify({packBytes:r,liveBytes:i,linked:n,linkedBytes:s,...c?{journalPrefix:c}:{}})}:${e}`))}async function ar(e,t){const{packBytes:r,liveBytes:i,linked:n,linkedBytes:s,journalPrefix:c}=t;return de(Me.encode(`${JSON.stringify({packBytes:r,liveBytes:i,linked:n,linkedBytes:s,...c?{journalPrefix:c}:{}})}:${await de(e)}`))}async function Xe(e,t,r){const i=pn(t);if(typeof SharedArrayBuffer>"u"||t.size<1e4){await Ve(e,ne,i);return}const n=new Map(i.entries),s=new Map,c={packBytes:r?.packBytes??0,liveBytes:0,linked:0,linkedBytes:0};for(const[D,B]of n){const X=Te(D);if(X!==D){let L=s.get(X);L||(L=new Set,s.set(X,L)),L.add(D.slice(X.length+1))}B.pack?(c.linked+=1,c.linkedBytes+=B.length):(c.liveBytes+=B.length,c.packBytes=Math.max(c.packBytes,B.offset+B.length))}let f;try{f=Sr(n,s)}catch{await Ve(e,ne,i);return}const l=JSON.stringify(i.entries),u=r?new Uint8Array(r.bytes):void 0;if(u&&r.access.read(u,{at:0})!==u.byteLength)throw new Error("The checkpoint's journal prefix could not be read completely.");const k=u?{bytes:u.byteLength,digest:await de(u)}:void 0,g=new Uint8Array(f).slice(),p={version:k?2:1,digest:await ar(g,{...c,...k?{journalPrefix:k}:{}}),...c,...k?{journalPrefix:k}:{}};try{await ge(e,yt,g)}catch{await Ve(e,ne,{entries:JSON.parse(l)});return}return await ge(e,ne,Me.encode(`{"retainedIndex":${JSON.stringify(p)},
|
|
2
|
-
"entries":${l}}`)),{index:f,...c}}async function wn(e){if(!(typeof SharedArrayBuffer>"u"))try{const t=await e.getFileHandle(ne),r=await K(t,"index");let i;try{const g=new Uint8Array(Math.min(512,r.getSize())),p=r.read(g,{at:0});i=He.decode(g.subarray(0,p))}finally{r.close()}const n=i.split(`
|
|
3
|
-
`,1)[0];if(!n.startsWith('{"retainedIndex":')||!n.endsWith(","))return;const s=JSON.parse(n.slice(0,-1)+"}").retainedIndex;if(s.version!==1&&s.version!==2||!/^[a-f0-9]{64}$/u.test(s.digest)||![s.packBytes,s.liveBytes,s.linked,s.linkedBytes].every(g=>Number.isSafeInteger(g)&&g>=0)||s.version===1&&s.journalPrefix!==void 0||s.version===2&&(!s.journalPrefix||!Number.isSafeInteger(s.journalPrefix.bytes)||s.journalPrefix.bytes<0||!/^[a-f0-9]{64}$/u.test(s.journalPrefix.digest)))return;const c=await e.getFileHandle(yt),f=await K(c,"index");let l;try{const g=f.getSize();if(g>256*1024*1024||(l=new Uint8Array(g),f.read(l,{at:0})!==g))return}finally{f.close()}if(await ar(l,s)!==s.digest)return;const u=new SharedArrayBuffer(l.byteLength);new Uint8Array(u).set(l);const k=new Ie(u);return le(k.entryCount),{...s,index:u}}catch{return}}async function un(e){const t=e.journalPrefix;if(!t||!v||!R||t.bytes>v.getSize()||e.packBytes>R.getSize())return 0;const r=new Uint8Array(t.bytes);return v.read(r,{at:0})!==r.byteLength?0:await de(r)===t.digest?t.bytes:0}async function Pe(e,t){let r;try{r=await e.getFileHandle(t)}catch(s){if(Ne(s))return;throw s}let i;if(y){i=await(await r.getFile()).text();try{return JSON.parse(i)}catch(s){throw new Error(`Invalid OPFS workspace metadata (${t}). Stored data was retained.`,{cause:s})}}const n=await K(r,"index");try{const s=n.getSize(),c=new Uint8Array(s);if(s>0&&n.read(c,{at:0})!==s)throw new Error("An OPFS workspace file could not be read completely.");i=He.decode(c)}finally{n.close()}try{return JSON.parse(i)}catch(s){throw new Error(`Invalid OPFS workspace metadata (${t}). Stored data was retained.`,{cause:s})}}async function cr(e,t,r){try{await e.removeEntry(t,{recursive:r})}catch(i){if(!Ne(i))throw i}}async function fr(e,t){try{await e.removeEntry(t,{recursive:!0})}catch{}}function lr(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid OPFS filesystem mutation.");if(e.operation!=="write"&&e.operation!=="append"&&e.operation!=="write-at"&&e.operation!=="mkdir"&&e.operation!=="remove"&&e.operation!=="rename"&&e.operation!=="metadata"&&e.operation!=="link")throw new Error("Invalid OPFS filesystem mutation.");if(he(e.path),e.operation==="rename"&&he(e.destination),(e.operation==="write"||e.operation==="append"||e.operation==="write-at")&&!(e.content instanceof Uint8Array))throw new Error("Invalid OPFS file content.");if(e.operation==="write-at"&&(!Number.isSafeInteger(e.position)||e.position<0))throw new Error("Invalid OPFS write position.");return Dt(e),e}function yn(e){if(!Array.isArray(e)||e.length===0||e.length>128)throw new Error("Invalid OPFS filesystem mutation batch.");return e.map(t=>lr(t))}function Lt(e){if(!e||!Array.isArray(e.files)||e.files.length>d||!(e.pack instanceof ArrayBuffer))throw new Error("Invalid OPFS workspace snapshot.");const t=new Set,r=new Map(ye().map(n=>[n,"directory"]));let i=0;for(const n of e.files){if(!n||typeof n!="object")throw new Error("Invalid OPFS workspace snapshot entry.");if(he(n.path),n.type!=="file"&&n.type!=="directory"&&n.type!=="symlink"||t.has(n.path))throw new Error("Invalid or duplicate OPFS workspace entry.");if(t.add(n.path),r.set(n.path,n.type),ye().includes(n.path)&&n.type!=="directory")throw new Error("The OPFS workspace root must be a directory.");if(n.type!=="directory"){const s=n.offset??0,c=n.length??0;if(!Number.isSafeInteger(s)||!Number.isSafeInteger(c)||s<0||c<0||c>Q||s+c>e.pack.byteLength)throw new Error("Invalid OPFS workspace file.");if(i+=c,i>a)throw new Error("OPFS workspace exceeds its byte limit.")}else if((n.offset??0)!==0||(n.length??0)!==0)throw new Error("An OPFS workspace directory cannot contain file bytes.");Dt(n)}le(r.size);for(const n of e.files)if(!ye().includes(n.path)&&r.get(Te(n.path))!=="directory")throw new Error(`An OPFS workspace snapshot has no directory parent for ${n.path}.`);return e}function Dt(e){if(e.mode!==void 0&&(!Number.isSafeInteger(e.mode)||e.mode<0||e.mode>4095))throw new Error("Invalid OPFS file mode.");if(e.mtimeMs!==void 0&&(typeof e.mtimeMs!="number"||!Number.isFinite(e.mtimeMs)||e.mtimeMs<0))throw new Error("Invalid OPFS modification time.")}function pn(e){return{entries:[...e]}}function Bt(e){const t=new Map;if(e===void 0)throw new Error("The committed OPFS workspace index is missing. Stored data was retained.");if(!e||typeof e!="object"||!Array.isArray(e.entries))throw new Error("Invalid OPFS workspace index.");const r=e.entries;le(r.length);for(const i of r){if(!Array.isArray(i)||i.length!==2)throw new Error("Invalid OPFS workspace index entry.");const n=he(i[0]);if(t.has(n))throw new Error("Duplicate OPFS workspace index entry.");t.set(n,dr(i[1]))}return t}function dr(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid OPFS workspace index entry.");const t=e;if(t.type!=="file"&&t.type!=="directory"&&t.type!=="symlink")throw new Error("Invalid OPFS workspace index entry.");if(Dt(t),t.mode===void 0||t.mtimeMs===void 0)throw new Error("Invalid OPFS workspace index entry.");if(!Number.isSafeInteger(t.offset)||t.offset<0||!Number.isSafeInteger(t.length)||t.length<0||t.length>Q)throw new Error("Invalid OPFS workspace index extent.");if(t.pack!==void 0&&t.pack!==xe)throw new Error("Invalid OPFS workspace index entry.");return{type:t.type,mode:t.mode,mtimeMs:t.mtimeMs,offset:t.offset,length:t.length,...t.pack?{pack:t.pack}:{}}}function gn(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid OPFS workspace index record.");const t=e;if(!Number.isSafeInteger(t.packBytes)||t.packBytes<0||!Array.isArray(t.changes))throw new Error("Invalid OPFS workspace index record.");const r=[];for(const i of t.changes){if(!Array.isArray(i)||i.length!==2)throw new Error("Invalid OPFS workspace index record.");r.push([he(i[0]),i[1]===null?null:dr(i[1])])}return{packBytes:t.packBytes,changes:r}}function gt(e){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid OPFS workspace state. Stored data was retained.");const t=e;if(t.storageVersion!==4&&t.storageVersion!==5||t.storageVersion===5&&(typeof t.imageRanges!="string"||!/^[a-f0-9]{64}$/u.test(t.imageRanges))||t.storageVersion===4&&t.imageRanges!==void 0||typeof t.generation!="string"||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(t.generation)||typeof t.initializedAt!="number"||!Number.isFinite(t.initializedAt))throw new Error("Invalid or unsupported OPFS workspace state. Stored data was retained.");return t}function he(e){if(typeof e!="string"||qe(e)===void 0||e.includes("\0")||e.length>4096)throw new Error("Invalid OPFS workspace path.");return hr(e),e}function hr(e){const t=qe(e);if(t===void 0)throw new Error("Invalid OPFS workspace path.");const r=e===t?"":e.slice(t.length+1);return Ct(r),r}function Ct(e){const t=e===""?[]:e.split("/");if(t.some(r=>!r||r==="."||r===".."||r.includes("\0")))throw new Error("Invalid OPFS workspace path segment.");return t}function Te(e){const t=e.slice(0,e.lastIndexOf("/"));return t===""||qe(t)===void 0?qe(e)??e:t}function wr(e){let t=1;for(let r=0;r<e.length;r+=1)e.charCodeAt(r)===47&&(t+=1);return t}function Ne(e){return e instanceof DOMException&&e.name==="NotFoundError"}function ur(e){let t=2166136261;for(let r=0;r<e.byteLength;r+=1)t^=e[r],t=Math.imul(t,16777619);return t>>>0}typeof addEventListener=="function"&&addEventListener("close",()=>{R?.flush(),v?.flush(),Ce(),x?.()});function yr(e,t={}){if(ue(),ee)throw new Error("An OPFS mutation batch cannot be nested.");for(const r of e)lr(r);return e.length?pr(r=>{for(const i of e)qr(i,r)},t):[]}function mn(e,t,r={}){if(ue(),ee)throw new Error("An OPFS mutation batch cannot be nested.");for(const i of t){if(he(i.path),i.type!=="file"&&i.type!=="directory"&&i.type!=="symlink")throw new Error(`OPFS extent ${i.path} has no valid type.`);if(i.type==="directory")continue;const{offset:n,length:s}=i;if(n===void 0||s===void 0||!Number.isSafeInteger(n)||!Number.isSafeInteger(s)||n<0||s<0||n+s>e.byteLength)throw new Error(`OPFS extent ${i.path} lies outside its bytes.`);if(s>Q)throw new Error(`${i.path} is ${s} bytes; an OPFS workspace file holds at most ${Q}.`)}return t.length?pr(i=>{const n=e.byteLength>0?ht(e):O;for(const s of t){const c=he(s.path);Oe(c,i);const f=w.get(c);if(s.type==="directory"){if(f&&f.type!=="directory")throw new Error(`OPFS path is a file: ${c}`);J(c,{type:"directory",mode:s.mode,mtimeMs:s.mtimeMs,offset:0,length:0},i);continue}if(f?.type==="directory")throw new Error(`OPFS write target is a directory: ${c}`);lt(c,s.length),J(c,{type:s.type,mode:s.mode,mtimeMs:s.mtimeMs,offset:n+s.offset,length:s.length},i)}},r):[]}function pr(e,t){if(!R||!v)throw new Error("OPFS filesystem worker is not initialized.");const r={packBytes:O,logBytes:b,liveBytes:_,deadBytes:W,rewrites:Se,rewrittenBytes:be,linked:A,linkedBytes:I},i=new Map;ee=i;const n=[];et=n;const s=[];try{return e(s),rr(),Zr(s,{publish:!t.durable}),t.durable&&(pe(),tt()),Xt(),s}catch(c){const f=U!==void 0&&!ae&&Atomics.load(U,Tr)!==r.logBytes;f&&Ye();for(const[l,u]of i)u===void 0?w.delete(l):w.set(l,u);ze();try{for(let l=n.length-1;l>=0;l-=1)dt(n[l][0],n[l][1])}catch(l){c=new AggregateError([c,l],"OPFS could not restore bytes a failed batch wrote over.")}({packBytes:O,logBytes:b,liveBytes:_,deadBytes:W,rewrites:Se,rewrittenBytes:be,linked:A,linkedBytes:I}=r),Y!==void 0&&(clearTimeout(Y),Y=void 0);try{v.truncate(b),v.flush(),R.truncate(O),R.flush()}catch(l){throw rt(),se=new AggregateError([c,l],"OPFS could not roll back a failed batch; reopen this workspace before writing again."),se}throw f&&Ke(),c}finally{ee=void 0,et=void 0}}function En(){if(ve){je?.abort(new DOMException("The workspace was closed while opening.","AbortError"));return}$||($=!0,Le===0&&gr())}function gr(){rt();try{pe()}finally{try{Ce()}finally{const e=x;x=void 0,h=void 0;try{e?.()}finally{o.ownsPackages&&o.packages?.close()}}}}return{initialize:Hr,opened:()=>h!==void 0&&!$,stats:()=>({entries:w.size,liveBytes:_,deadBytes:W,packBytes:O,rewrites:Se,rewrittenBytes:be,linked:A,linkedBytes:I,flushes:Ee,flushMs:we}),applyNow:yr,applyExtentsNow:mn,close:En,readExtent:st,descendants:_t,retain:or,remapLinks:sn,childrenOf:e=>[...C.get(e)??[]].sort(),refresh:Ur,follow:zr,clock:Yt,readerSeed:Lr,imageCompletionSeed:Dr,imageLine:()=>z?.lineForReader()??o.packages?.imageLine(),imageStartupSet:()=>z?.readDigests()??z?.completedDigests()??[],prefetchImage:(e,t)=>z?.prefetch(e,t)??{queued:0,done:Promise.resolve()},imageBlockedReads:()=>{const e=z?.blockedReads??{ranges:0,ms:0},t=o.packages?.imageBlockedReads()??{ranges:0,ms:0};return{ranges:e.ranges+t.ranges,ms:e.ms+t.ms}},seeded:()=>Kt,get logBytes(){return b},checkpoint:wt,deferMaintenance:Jr,installPreparedImage:ln,installPreparedProject:dn,get deferredImage(){return _e},get imagePlacedAt(){return h&&H?ie:void 0},get entries(){return w},get packBytes(){return O},read:Nr,readRange:$r,snapshot:hn,replace:ir,apply:Kr,flush:()=>{if($||!h)throw new Error("This OPFS workspace is not open.");if(De)throw new Error("Wait for the OPFS generation replacement before flushing it.");pe()},validateSnapshot:Lt,validateMutationBatch:yn}}const vn="sweep.json";async function Ln(m){const a=await(await m.getFileHandle(vn,{create:!0})).createWritable();await a.write(JSON.stringify({at:Date.now()})),await a.close()}class Ot{map=new Map;get(o){return this.map.get(o)}mutable(o){let a=this.map.get(o);return a||(a=new Set,this.map.set(o,a)),a}delete(o){this.map.delete(o)}}const Pt=globalThis,Z=_n({navigator:Pt.navigator});let Mr=Promise.resolve();Pt.onmessage=m=>{Mr=Mr.catch(()=>{}).then(async()=>{try{const o=Date.now(),a=await Dn(m.data),d=Date.now()-o;if(d>5e3){const h=m.data.operation==="batch"?` of ${m.data.mutations?.length??0}`:"";console.warn(`The OPFS workspace worker took ${Math.round(d/1e3)} s on ${m.data.operation}${h}; the store holds ${Z.entries.size} entries and ${Math.round(Z.packBytes/1048576)} MiB.`)}Pt.postMessage({id:m.data.id,ok:!0,...a},a.snapshot?[a.snapshot.pack]:[])}catch(o){const a=o instanceof Error?o:new Error(String(o));console.error(`The OPFS workspace worker failed on ${m.data.operation}: ${a.message}`),Pt.postMessage({id:m.data.id,ok:!1,error:a.message,...a.stack?{errorStack:a.stack}:{}})}}).catch(()=>{})};async function Dn(m){if(m.operation==="initialize")return await Z.initialize(m.projectId)?{initialized:!0,snapshot:await Z.snapshot()}:{initialized:!1};if(!Z.opened())throw new Error("OPFS filesystem worker is not initialized.");if(m.operation==="flush")return Z.flush(),{};if(m.operation==="replace"){if(!m.snapshot)throw new Error("OPFS filesystem replacement requires a snapshot.");return await Z.replace(Z.validateSnapshot(m.snapshot)),{}}return m.operation==="batch"?(await Z.apply(Z.validateMutationBatch(m.mutations)),{}):(await Z.apply(Z.validateMutationBatch([m])),{})}
|