@dsh-workbench/core 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/bin/dsh-workbench +23 -0
  2. package/client.js +609 -84
  3. package/cordis.patch.yml +11 -3
  4. package/dist/client/client.body.js +609 -84
  5. package/dist/client/index.js +610 -85
  6. package/dist/host/index.js +406 -276
  7. package/dist/types/app/client.d.ts +140 -6
  8. package/dist/types/app/layouts/rightbar/BoardEmpty.d.ts +2 -1
  9. package/dist/types/app/layouts/rightbar/Rightbar.d.ts +1 -0
  10. package/dist/types/app/layouts/rightbar/board-plan.d.ts +2 -0
  11. package/dist/types/app/layouts/sidebar/ProjectSwitcher.d.ts +2 -2
  12. package/dist/types/app/layouts/sidebar/Sidebar.d.ts +1 -1
  13. package/dist/types/app/layouts/sidebar/WorkspaceRenameDialog.d.ts +8 -0
  14. package/dist/types/app/layouts/sidebar/WorkspaceRowAction.d.ts +7 -0
  15. package/dist/types/app/layouts/sidebar/WorkspaceRowLabel.d.ts +8 -0
  16. package/dist/types/app/layouts/sidebar/WorkspaceSearchField.d.ts +9 -0
  17. package/dist/types/app/layouts/sidebar/__tests__/workspace-name.test.d.ts +1 -0
  18. package/dist/types/app/layouts/sidebar/workspace-items.d.ts +11 -0
  19. package/dist/types/app/layouts/sidebar/workspace-name.d.ts +16 -0
  20. package/dist/types/app/units/__tests__/registry.test.d.ts +1 -0
  21. package/dist/types/app/units/fixture-unit-mock.d.ts +3 -1
  22. package/dist/types/modules/panels/__tests__/approval.test.d.ts +1 -0
  23. package/dist/types/modules/panels/model/approval.d.ts +2 -0
  24. package/dist/types/shared/api/diy.d.ts +3 -0
  25. package/dist/types/shared/api/diy.test.d.ts +1 -0
  26. package/dist/types/shared/api/host/__tests__/approval-legacy.test.d.ts +1 -0
  27. package/dist/types/shared/api/host/approval-legacy.d.ts +2 -0
  28. package/dist/types/shared/api/host/diy.d.ts +3 -0
  29. package/dist/types/shared/api/host/diy.test.d.ts +1 -0
  30. package/dist/types/shared/api/host/mount-units.d.ts +13 -6
  31. package/dist/types/shared/hooks/mock-mode.d.ts +1 -0
  32. package/package.json +13 -5
  33. package/preset/diy.patch.yml +156 -0
  34. package/scripts/seed-profile.sh +116 -0
  35. package/skills/workbench-module-diy/BUILD.md +179 -0
  36. package/skills/workbench-module-diy/DESIGN.md +81 -0
  37. package/skills/workbench-module-diy/LINKAGE.md +113 -0
  38. package/skills/workbench-module-diy/PANEL.md +124 -0
  39. package/skills/workbench-module-diy/REVIEW.md +31 -0
  40. package/skills/workbench-module-diy/SKILL.md +54 -0
  41. package/skills/workbench-module-diy/STEPS.md +93 -0
  42. package/skills/workbench-module-diy/TOOLS.md +112 -0
@@ -1,4 +1,4 @@
1
- import { Button, CodeBlock, DisclosureRow, IconCheckCircleFillRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSettingsOutlineRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Menu, Modal, RiskConfirmation, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
1
+ import { Button, CodeBlock, DisclosureRow, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Menu, Modal, RiskConfirmation, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
2
2
  //#region \0rolldown/runtime.js
3
3
  var __defProp = Object.defineProperty;
4
4
  var __exportAll = (all, no_symbols) => {
@@ -142,6 +142,14 @@ function blockerOfCapability(capability, t) {
142
142
  }] : [],
143
143
  ...capability.command === void 0 || sourceUnknown ? [] : [copyAction(t, capability.command)]
144
144
  ];
145
+ if (capability.status === "failed") return {
146
+ id: "unit-mount-failed",
147
+ severity: "block",
148
+ title: t("env.unit.failed"),
149
+ hint: t("env.unit.failedHint"),
150
+ ...capability.detail === void 0 ? {} : { detail: capability.detail },
151
+ actions: [retryAction(t)]
152
+ };
145
153
  if (capability.status === "missing-plugin") return {
146
154
  id: "unit-missing-plugin",
147
155
  severity: "block",
@@ -478,6 +486,7 @@ async function apiPost(route, body) {
478
486
  var react = __require("react");
479
487
  var h = react.createElement;
480
488
  var Fragment = react.Fragment;
489
+ var Component = react.Component;
481
490
  var useState = react.useState;
482
491
  var useEffect = react.useEffect;
483
492
  var useLayoutEffect = react.useLayoutEffect;
@@ -520,6 +529,46 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
520
529
  }));
521
530
  }
522
531
  //#endregion
532
+ //#region ../shared/dist/components/Note.js
533
+ function Note({ tone = "muted", as, children }) {
534
+ const className = tone === "problem" ? "wb-problem" : "wb-note";
535
+ return as === "span" ? h("span", { className }, children) : h("p", { className }, children);
536
+ }
537
+ //#endregion
538
+ //#region ../shared/dist/components/CardBoundary.js
539
+ function errorReasonOf(error) {
540
+ if (error instanceof Error) return error.message;
541
+ return typeof error === "string" ? error : JSON.stringify(error) ?? String(error);
542
+ }
543
+ var CardBoundary = class extends Component {
544
+ state = { reason: null };
545
+ static getDerivedStateFromError(error) {
546
+ return { reason: errorReasonOf(error) };
547
+ }
548
+ componentDidCatch(error) {
549
+ console.error(`[dsh-workbench] 模块 ${this.props.unit} 渲染失败:${errorReasonOf(error)}`, error);
550
+ }
551
+ componentDidUpdate(previous) {
552
+ if (previous.resetKey !== this.props.resetKey && this.state.reason !== null) this.setState({ reason: null });
553
+ }
554
+ retry = () => {
555
+ this.setState({ reason: null });
556
+ };
557
+ render() {
558
+ const { reason } = this.state;
559
+ if (reason === null) return this.props.children;
560
+ return h(Note, { tone: "problem" }, h("span", null, this.props.t("panels.cardBroken", {
561
+ unit: this.props.unit,
562
+ reason
563
+ })), " ", h(Button, {
564
+ type: "button",
565
+ variant: "outline",
566
+ size: "sm",
567
+ onClick: this.retry
568
+ }, this.props.t("panels.cardRetry")));
569
+ }
570
+ };
571
+ //#endregion
523
572
  //#region ../shared/dist/components/ApprovalDetail.js
524
573
  function callOf(snapshot, callId) {
525
574
  if (callId === void 0) return void 0;
@@ -550,10 +599,17 @@ function ApprovalDetail(props) {
550
599
  };
551
600
  const command = typeof args.command === "string" ? args.command : "";
552
601
  const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
553
- if (owner?.approval !== void 0) return h(owner.approval.render, {
554
- input,
555
- t
556
- });
602
+ if (owner?.approval !== void 0) {
603
+ const Render = owner.approval.render;
604
+ return h(CardBoundary, {
605
+ unit: owner.manifest.id,
606
+ resetKey: props.callId ?? "",
607
+ t
608
+ }, h(Render, {
609
+ input,
610
+ t
611
+ }));
612
+ }
557
613
  if (command === "") return null;
558
614
  return h(CodeBlock, {
559
615
  code: command,
@@ -716,12 +772,6 @@ function MockStrip({ mocks, index, onPick, note, real }) {
716
772
  }, mock.label)));
717
773
  }
718
774
  //#endregion
719
- //#region ../shared/dist/components/Note.js
720
- function Note({ tone = "muted", as, children }) {
721
- const className = tone === "problem" ? "wb-problem" : "wb-note";
722
- return as === "span" ? h("span", { className }, children) : h("p", { className }, children);
723
- }
724
- //#endregion
725
775
  //#region ../shared/dist/components/ResourceStates.js
726
776
  function SkeletonRows({ rows = 4 }) {
727
777
  return h("div", {
@@ -932,6 +982,20 @@ var en = {
932
982
  "project.none": "No project",
933
983
  "project.empty": "No projects yet. Use “Add project” below.",
934
984
  "project.add": "Add project…",
985
+ "project.search.label": "Search workspaces",
986
+ "project.search.placeholder": "Search workspaces (folder / name / path)",
987
+ "project.search.empty": "No workspace matches “{query}”.",
988
+ "project.rename.row": "Rename “{name}”",
989
+ "project.rename.current": "Give this workspace a display name…",
990
+ "project.rename.title": "Give “{name}” a display name",
991
+ "project.rename.description": "Shown after the folder name. It renames the workspace itself.",
992
+ "project.rename.field": "Display name",
993
+ "project.rename.placeholder": "e.g. Workbench shell",
994
+ "project.rename.hint": "Empty = folder name only",
995
+ "project.rename.save": "Save",
996
+ "project.rename.saving": "Saving…",
997
+ "project.rename.cancel": "Cancel",
998
+ "project.rename.failed": "Rename failed. Try again.",
935
999
  "session.new": "New session",
936
1000
  "session.new.label": "Start a session in the current project",
937
1001
  "session.empty": "No sessions in this project yet.",
@@ -955,11 +1019,13 @@ var en = {
955
1019
  "panels.enabled": "enabled in this project",
956
1020
  "panels.disabled": "not enabled in this project",
957
1021
  "panels.choose": "Choose modules",
1022
+ "panels.buildModule": "Build a module",
958
1023
  "panels.failed": "Could not save the change. Try again.",
959
1024
  "panels.hintEffect": "Disabling = the agent cannot reach that data",
960
1025
  "panels.dragHint": "Drag to reorder",
961
1026
  "panels.unknownStep": "No suite provides this view",
962
1027
  "panels.labelWithHint": "{label} ({hint})",
1028
+ "panels.dep.failed": "⚠ failed to start",
963
1029
  "panels.dep.missingPlugin": "⚠ not ready yet",
964
1030
  "panels.dep.missingCommands": "⚠ needs an update",
965
1031
  "panels.dep.unchecked": "⚠ cannot check",
@@ -1153,6 +1219,8 @@ var en = {
1153
1219
  "blocker.exec.hint": "Make sure opencli is installed and on PATH (which opencli).",
1154
1220
  "blocker.unknown.title": "Something went wrong",
1155
1221
  "panels.reading": "Reading the panel setup…",
1222
+ "panels.cardBroken": "This module will not render: {unit} ({reason})",
1223
+ "panels.cardRetry": "Retry",
1156
1224
  "panels.empty": "No modules on the panel yet",
1157
1225
  "panels.emptyHint": "You can also just tell the agent: “add a module to the panel”.",
1158
1226
  "env.title": "Preparing the workbench",
@@ -1191,6 +1259,8 @@ var en = {
1191
1259
  "env.step.warm": "Warming up site sessions",
1192
1260
  "env.warm.done": "{n} site(s) warmed up",
1193
1261
  "env.warm.short": "Not warmed this time — harmless; the panel heals on first read",
1262
+ "env.unit.failed": "This module cannot start",
1263
+ "env.unit.failedHint": "It failed while assembling itself; other modules are unaffected.",
1194
1264
  "env.unit.missingPlugin": "This module is not ready yet",
1195
1265
  "env.unit.missingCommandsHint": "Updating it should fix this.",
1196
1266
  "env.unit.unchecked": "Cannot check: no shell channel",
@@ -1224,6 +1294,20 @@ var zh = {
1224
1294
  "project.none": "未选择项目",
1225
1295
  "project.empty": "还没有项目。用下面的「添加项目」选一个目录。",
1226
1296
  "project.add": "添加项目…",
1297
+ "project.search.label": "搜索工作区",
1298
+ "project.search.placeholder": "搜索工作区(目录名 / 中文名 / 路径)",
1299
+ "project.search.empty": "没有匹配「{query}」的工作区。",
1300
+ "project.rename.row": "改「{name}」的中文名",
1301
+ "project.rename.current": "改当前工作区的中文名…",
1302
+ "project.rename.title": "给「{name}」配一个中文名",
1303
+ "project.rename.description": "显示在目录名后面。改的是工作区本身的名字。",
1304
+ "project.rename.field": "中文名",
1305
+ "project.rename.placeholder": "例如:工作台外壳",
1306
+ "project.rename.hint": "留空 = 只显示目录名",
1307
+ "project.rename.save": "保存",
1308
+ "project.rename.saving": "保存中…",
1309
+ "project.rename.cancel": "取消",
1310
+ "project.rename.failed": "改名失败了,再试一次。",
1227
1311
  "session.new": "新会话",
1228
1312
  "session.new.label": "在当前项目新建会话",
1229
1313
  "session.empty": "这个项目还没有会话。",
@@ -1247,11 +1331,13 @@ var zh = {
1247
1331
  "panels.enabled": "这个项目已启用",
1248
1332
  "panels.disabled": "这个项目未启用",
1249
1333
  "panels.choose": "选择模块",
1334
+ "panels.buildModule": "造一个模块",
1250
1335
  "panels.failed": "改配置失败了,再试一次。",
1251
1336
  "panels.hintEffect": "停用 = agent 拿不到相关数据",
1252
1337
  "panels.dragHint": "拖动调整顺序",
1253
1338
  "panels.unknownStep": "这一层没有套件提供",
1254
1339
  "panels.labelWithHint": "{label}({hint})",
1340
+ "panels.dep.failed": "⚠ 起不来",
1255
1341
  "panels.dep.missingPlugin": "⚠ 还没装好",
1256
1342
  "panels.dep.missingCommands": "⚠ 需要更新",
1257
1343
  "panels.dep.unchecked": "⚠ 检测不了",
@@ -1445,6 +1531,8 @@ var zh = {
1445
1531
  "blocker.exec.hint": "确认 opencli 已安装且在 PATH 里(which opencli)。",
1446
1532
  "blocker.unknown.title": "出了点问题",
1447
1533
  "panels.reading": "正在读取面板配置…",
1534
+ "panels.cardBroken": "这个模块起不来:{unit}({reason})",
1535
+ "panels.cardRetry": "重试",
1448
1536
  "panels.empty": "面板里还没有模块",
1449
1537
  "panels.emptyHint": "也可以直接跟 agent 说:「把某个模块加到面板」。",
1450
1538
  "env.title": "准备工作台",
@@ -1483,6 +1571,8 @@ var zh = {
1483
1571
  "env.step.warm": "预热站点登录态",
1484
1572
  "env.warm.done": "已预热 {n} 个站点",
1485
1573
  "env.warm.short": "这次没热上 —— 不影响用,面板第一次读取会自己补",
1574
+ "env.unit.failed": "这个模块起不来",
1575
+ "env.unit.failedHint": "它自己装配时报了错,别的模块不受影响。",
1486
1576
  "env.unit.missingPlugin": "这个模块还没装好",
1487
1577
  "env.unit.missingCommandsHint": "更新之后就能用了。",
1488
1578
  "env.unit.unchecked": "检测不了:拿不到执行通道",
@@ -1541,6 +1631,31 @@ function mergeMessages(base, contributions) {
1541
1631
  en
1542
1632
  };
1543
1633
  }
1634
+ function reasonOf(error) {
1635
+ if (error instanceof Error) return error.message;
1636
+ return typeof error === "string" ? error : String(error);
1637
+ }
1638
+ function mergeMessagesSkipping(base, contributions) {
1639
+ let dictionaries = base;
1640
+ const accepted = [];
1641
+ const problems = [];
1642
+ for (const item of contributions) {
1643
+ if (item.messages === void 0) continue;
1644
+ try {
1645
+ dictionaries = mergeMessages(base, [...accepted, item]);
1646
+ accepted.push(item);
1647
+ } catch (error) {
1648
+ problems.push({
1649
+ unit: item.unit,
1650
+ reason: reasonOf(error)
1651
+ });
1652
+ }
1653
+ }
1654
+ return {
1655
+ dictionaries,
1656
+ problems
1657
+ };
1658
+ }
1544
1659
  //#endregion
1545
1660
  //#region ../shared/dist/lib/blocker-action.js
1546
1661
  function blockerPending(busy, running) {
@@ -1616,9 +1731,11 @@ var dist_exports = /* @__PURE__ */ __exportAll({
1616
1731
  CODING_ISSUES_SERVICE: () => CODING_ISSUES_SERVICE,
1617
1732
  CONTEXT_MARKER_NAME: () => CONTEXT_MARKER_NAME,
1618
1733
  Card: () => Card,
1734
+ CardBoundary: () => CardBoundary,
1619
1735
  CardHead: () => CardHead,
1620
1736
  CenteredState: () => CenteredState,
1621
1737
  ChoiceGroup: () => ChoiceGroup,
1738
+ Component: () => Component,
1622
1739
  DEFAULT_WORKSPACE_TITLE: () => DEFAULT_WORKSPACE_TITLE,
1623
1740
  EVENTS_PATH: () => EVENTS_PATH,
1624
1741
  EmptyState: () => EmptyState,
@@ -1678,6 +1795,7 @@ var dist_exports = /* @__PURE__ */ __exportAll({
1678
1795
  dictionaries: () => dictionaries,
1679
1796
  en: () => en,
1680
1797
  encodeRef: () => encodeRef,
1798
+ errorReasonOf: () => errorReasonOf,
1681
1799
  excerpt: () => excerpt,
1682
1800
  factOfRoute: () => factOfRoute,
1683
1801
  gateOf: () => gateOf,
@@ -1689,6 +1807,7 @@ var dist_exports = /* @__PURE__ */ __exportAll({
1689
1807
  longTaskRunsOf: () => longTaskRunsOf,
1690
1808
  markerBody: () => markerBody,
1691
1809
  mergeMessages: () => mergeMessages,
1810
+ mergeMessagesSkipping: () => mergeMessagesSkipping,
1692
1811
  parseFactFrame: () => parseFactFrame,
1693
1812
  parseJsonLoose: () => parseJsonLoose,
1694
1813
  parseLocalTimestamp: () => parseLocalTimestamp,
@@ -1848,10 +1967,10 @@ function setProbe(next) {
1848
1967
  }
1849
1968
  var CAPABILITY_FACT = "capability";
1850
1969
  var shared = null;
1851
- var current = null;
1970
+ var current$1 = null;
1852
1971
  var listeners$2 = /* @__PURE__ */ new Set();
1853
1972
  function capabilityValue() {
1854
- return current;
1973
+ return current$1;
1855
1974
  }
1856
1975
  function subscribeCapabilities(listener) {
1857
1976
  listeners$2.add(listener);
@@ -1865,8 +1984,8 @@ function setCapabilities(next, rechecked = false) {
1865
1984
  ...probe$2,
1866
1985
  checkedAt: Date.now()
1867
1986
  });
1868
- if (next === current) return;
1869
- current = next;
1987
+ if (next === current$1) return;
1988
+ current$1 = next;
1870
1989
  for (const listener of [...listeners$2]) listener();
1871
1990
  }
1872
1991
  function beginProbe() {
@@ -1975,10 +2094,16 @@ function useCapabilityMap(refreshToken) {
1975
2094
  }
1976
2095
  //#endregion
1977
2096
  //#region src/shared/hooks/mock-mode.ts
1978
- var mock_mode_exports = /* @__PURE__ */ __exportAll({ mockModeOn: () => mockModeOn });
2097
+ var mock_mode_exports = /* @__PURE__ */ __exportAll({
2098
+ crashModeOn: () => crashModeOn,
2099
+ mockModeOn: () => mockModeOn
2100
+ });
1979
2101
  function mockModeOn(search) {
1980
2102
  return /(?:^|[?&])(?:wbMock|wbMarketMock)=1(?:&|$)/.test(search);
1981
2103
  }
2104
+ function crashModeOn(search) {
2105
+ return /(?:^|[?&])wbCrash=1(?:&|$)/.test(search);
2106
+ }
1982
2107
  //#endregion
1983
2108
  //#region src/shared/hooks/use-fixture-pick.ts
1984
2109
  var use_fixture_pick_exports = /* @__PURE__ */ __exportAll({ useFixturePick: () => useFixturePick });
@@ -2572,7 +2697,11 @@ function createClientUnitRegistry() {
2572
2697
  let manifestsCache;
2573
2698
  function notify() {
2574
2699
  revision += 1;
2575
- for (const listener of listeners) listener();
2700
+ for (const listener of [...listeners]) try {
2701
+ listener();
2702
+ } catch (error) {
2703
+ console.warn(`[dsh-workbench] 套件注册的订阅者报错(不影响其它订阅者与这次注册):${String(error)}`);
2704
+ }
2576
2705
  }
2577
2706
  return {
2578
2707
  register(face) {
@@ -2607,6 +2736,7 @@ function createClientUnitRegistry() {
2607
2736
  //#endregion
2608
2737
  //#region src/app/units/fixture-unit-mock.tsx
2609
2738
  var FIXTURE_UNIT_ID = "wb-fixture";
2739
+ var CRASH_UNIT_ID = "wb-fixture-crash";
2610
2740
  var KEY = {
2611
2741
  cardTitle: `${FIXTURE_UNIT_ID}.cardTitle`,
2612
2742
  cardMeta: `${FIXTURE_UNIT_ID}.cardMeta`,
@@ -2660,6 +2790,39 @@ var FIXTURE_FACE = {
2660
2790
  messages,
2661
2791
  card: FixtureCard
2662
2792
  };
2793
+ var CRASH_KEY = {
2794
+ cardTitle: `${CRASH_UNIT_ID}.cardTitle`,
2795
+ cardMeta: `${CRASH_UNIT_ID}.cardMeta`
2796
+ };
2797
+ var crashMessages = {
2798
+ zh: {
2799
+ [CRASH_KEY.cardTitle]: "崩溃的卡片",
2800
+ [CRASH_KEY.cardMeta]: "夹具:渲染时抛错"
2801
+ },
2802
+ en: {
2803
+ [CRASH_KEY.cardTitle]: "Crashing card",
2804
+ [CRASH_KEY.cardMeta]: "Fixture: throws while rendering"
2805
+ }
2806
+ };
2807
+ var crashManifest = {
2808
+ id: CRASH_UNIT_ID,
2809
+ kind: "board",
2810
+ card: {
2811
+ titleKey: CRASH_KEY.cardTitle,
2812
+ order: 899,
2813
+ enabledByDefault: true
2814
+ },
2815
+ tools: [],
2816
+ host: { inject: [] }
2817
+ };
2818
+ function CrashingCard() {
2819
+ throw new Error("夹具:这张卡片按 wbCrash=1 故意渲染失败(守「一张卡片崩溃不带走面板」)");
2820
+ }
2821
+ var CRASH_FACE = {
2822
+ manifest: crashManifest,
2823
+ messages: crashMessages,
2824
+ card: CrashingCard
2825
+ };
2663
2826
  var SAMPLE_ROSTER = [manifest];
2664
2827
  function hasCard(roster) {
2665
2828
  return roster.some((item) => item.card !== null);
@@ -2667,8 +2830,9 @@ function hasCard(roster) {
2667
2830
  function fixtureRoster(roster) {
2668
2831
  return hasCard(roster) ? roster : SAMPLE_ROSTER;
2669
2832
  }
2670
- function fixtureSeed(roster, all) {
2671
- return hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE)];
2833
+ function fixtureSeed(roster, all, crash = false) {
2834
+ const base = hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE)];
2835
+ return crash ? [toBoardModule(CRASH_FACE), ...base] : base;
2672
2836
  }
2673
2837
  //#endregion
2674
2838
  //#region src/app/layouts/rightbar/market-rows.ts
@@ -4414,6 +4578,30 @@ function registerMarketPanel(ctx, units) {
4414
4578
  }, MarketPanel));
4415
4579
  }
4416
4580
  //#endregion
4581
+ //#region src/app/layouts/project-selection.ts
4582
+ var listeners = /* @__PURE__ */ new Set();
4583
+ function selectedProjectId() {
4584
+ const stored = readText(STORAGE_KEY_PROJECT);
4585
+ return stored === "" ? null : stored;
4586
+ }
4587
+ function selectProject(workspaceId) {
4588
+ writeText(STORAGE_KEY_PROJECT, workspaceId);
4589
+ for (const listener of [...listeners]) try {
4590
+ listener();
4591
+ } catch {}
4592
+ }
4593
+ function subscribeProject(listener) {
4594
+ listeners.add(listener);
4595
+ return () => {
4596
+ listeners.delete(listener);
4597
+ };
4598
+ }
4599
+ //#endregion
4600
+ //#region src/shared/api/diy.ts
4601
+ var DIY_PRESET_ID = "workbench-diy";
4602
+ var WORKSHOP_TITLE = "工作台DIY";
4603
+ var WORKSHOP_PAST_TITLES = ["DIY 工坊", "工作台自带 · DIY 模块住这儿"];
4604
+ //#endregion
4417
4605
  //#region src/app/units/index.ts
4418
4606
  var CLIENT_UNITS = [];
4419
4607
  function assembleClientUnits(registry) {
@@ -5275,7 +5463,7 @@ function Breadcrumbs({ trail, onGoTo, titleKeyOf, t }) {
5275
5463
  }
5276
5464
  //#endregion
5277
5465
  //#region src/app/layouts/rightbar/BoardEmpty.tsx
5278
- function BoardEmpty({ t, onOpenModules, onOpenMarket }) {
5466
+ function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
5279
5467
  return /* @__PURE__ */ h(CenteredState, {
5280
5468
  icon: /* @__PURE__ */ h(IconBrandMark, { size: 32 }),
5281
5469
  title: t("panels.empty"),
@@ -5284,6 +5472,11 @@ function BoardEmpty({ t, onOpenModules, onOpenMarket }) {
5284
5472
  type: "button",
5285
5473
  size: "sm",
5286
5474
  variant: "primary",
5475
+ onClick: onBuildModule
5476
+ }, t("panels.buildModule")), /* @__PURE__ */ h(Button, {
5477
+ type: "button",
5478
+ size: "sm",
5479
+ variant: "toolbar",
5287
5480
  onClick: onOpenModules
5288
5481
  }, t("panels.choose")), /* @__PURE__ */ h(Button, {
5289
5482
  type: "button",
@@ -5323,7 +5516,7 @@ var ModulesPage_module_default = {
5323
5516
  };
5324
5517
  //#endregion
5325
5518
  //#region src/app/layouts/rightbar/panel-mock.ts
5326
- function row(id, titleKey, shown) {
5519
+ function row$1(id, titleKey, shown) {
5327
5520
  return {
5328
5521
  id,
5329
5522
  titleKey,
@@ -5352,10 +5545,10 @@ function buildPanelMocks(roster) {
5352
5545
  }];
5353
5546
  const titleKey = found.card?.titleKey ?? found.id;
5354
5547
  const id = found.id;
5355
- const on = row(id, titleKey, true);
5356
- const off = row(id, titleKey, false);
5357
- const twin = row(`${id}-b`, titleKey, true);
5358
- const third = row(`${id}-c`, titleKey, false);
5548
+ const on = row$1(id, titleKey, true);
5549
+ const off = row$1(id, titleKey, false);
5550
+ const twin = row$1(`${id}-b`, titleKey, true);
5551
+ const third = row$1(`${id}-c`, titleKey, false);
5359
5552
  return [
5360
5553
  {
5361
5554
  id: "one",
@@ -5437,7 +5630,7 @@ function buildPanelMocks(roster) {
5437
5630
  {
5438
5631
  id: "long",
5439
5632
  label: "超长模块名",
5440
- units: [row(id, "一个名字特别特别长的模块用来验证省略号会不会把开关挤下去", true)],
5633
+ units: [row$1(id, "一个名字特别特别长的模块用来验证省略号会不会把开关挤下去", true)],
5441
5634
  capabilities: probe(id, "ok"),
5442
5635
  expect: {
5443
5636
  rows: 1,
@@ -5503,13 +5696,14 @@ function buildPanelMocks(roster) {
5503
5696
  function available(capability) {
5504
5697
  if (capability === void 0) return true;
5505
5698
  if (capability.released === true) return false;
5506
- return capability.status === "ok" || capability.status === "unchecked";
5699
+ return capability.status === "ok" || capability.status === "unchecked" || capability.status === "failed";
5507
5700
  }
5508
5701
  function selectPanelUnits(units, capabilities) {
5509
5702
  return units.filter((unit) => available(capabilities?.[unit.id]));
5510
5703
  }
5511
5704
  function panelBadgeKey(capability) {
5512
5705
  if (capability === void 0 || capability.status === "ok") return void 0;
5706
+ if (capability.status === "failed") return "panels.dep.failed";
5513
5707
  if (capability.status === "missing-plugin") return "panels.dep.missingPlugin";
5514
5708
  if (capability.status === "missing-commands") return "panels.dep.missingCommands";
5515
5709
  return "panels.dep.unchecked";
@@ -5768,6 +5962,16 @@ function buildBoardMocks(roster) {
5768
5962
  cards: 8,
5769
5963
  empty: false
5770
5964
  }
5965
+ },
5966
+ {
5967
+ id: "crash",
5968
+ label: "坏卡 + 好卡",
5969
+ note: "一张渲染必炸的卡 + 你装的模块(配 ?wbCrash=1 才摆得出来):要看到坏的那张只剩一句\"这个模块起不来\",别的卡与面板壳都还在。",
5970
+ shape: { kind: "all" },
5971
+ expect: {
5972
+ cards: 1,
5973
+ empty: false
5974
+ }
5771
5975
  }
5772
5976
  ],
5773
5977
  EMPTY,
@@ -5812,6 +6016,15 @@ function planBoard(shape, real, all) {
5812
6016
  reading: true,
5813
6017
  repeated: false
5814
6018
  };
6019
+ if (shape.kind === "all") return {
6020
+ modules: all.map((module) => ({
6021
+ key: module.id,
6022
+ module
6023
+ })),
6024
+ empty: false,
6025
+ reading: false,
6026
+ repeated: all.length > 1
6027
+ };
5815
6028
  const seed = all[0];
5816
6029
  const modules = seed === void 0 ? [] : Array.from({ length: Math.max(0, shape.count) }, (_unused, at) => ({
5817
6030
  key: `${seed.id}#${at}`,
@@ -5958,25 +6171,6 @@ function createSuiteWorld(input) {
5958
6171
  };
5959
6172
  }
5960
6173
  //#endregion
5961
- //#region src/app/layouts/project-selection.ts
5962
- var listeners = /* @__PURE__ */ new Set();
5963
- function selectedProjectId() {
5964
- const stored = readText(STORAGE_KEY_PROJECT);
5965
- return stored === "" ? null : stored;
5966
- }
5967
- function selectProject(workspaceId) {
5968
- writeText(STORAGE_KEY_PROJECT, workspaceId);
5969
- for (const listener of [...listeners]) try {
5970
- listener();
5971
- } catch {}
5972
- }
5973
- function subscribeProject(listener) {
5974
- listeners.add(listener);
5975
- return () => {
5976
- listeners.delete(listener);
5977
- };
5978
- }
5979
- //#endregion
5980
6174
  //#region src/app/layouts/rightbar/use-panels.ts
5981
6175
  function shouldDropPanels(workspace, previous) {
5982
6176
  return workspace !== previous;
@@ -6022,6 +6216,9 @@ function useBoardWorkspace(workspaces, sessions) {
6022
6216
  var Rightbar_module_default = { panel: "_panel_1oyh4_1" };
6023
6217
  //#endregion
6024
6218
  //#region src/app/layouts/rightbar/Rightbar.tsx
6219
+ function workspacePathOf(world) {
6220
+ return world.current.workspace?.path ?? "";
6221
+ }
6025
6222
  function ModuleHost({ module, step, panelToken, onPanelRefresh, onSummary, ...rest }) {
6026
6223
  const [ownToken, setOwnToken] = useState(0);
6027
6224
  return /* @__PURE__ */ h(step === void 0 ? module.View : module.steps?.[step]?.View ?? module.View, {
@@ -6065,15 +6262,20 @@ function PanelHeader({ t, trail, onGoTo, titleKeyOf, refreshing, at, refreshEnab
6065
6262
  onClick: onCollapse
6066
6263
  })))));
6067
6264
  }
6068
- function BoardContent({ top, plan, world, board, panelToken, onPanelRefresh, onNavigate, onOpenMarket, onSummary, onOpenModules, t }) {
6265
+ function BoardContent({ top, plan, world, board, panelToken, onPanelRefresh, onNavigate, onOpenMarket, onSummary, onOpenModules, buildModule, t }) {
6069
6266
  if (top.kind !== "board") {
6070
6267
  const owner = board.stepOwner(top.kind);
6071
6268
  if (owner === void 0) return /* @__PURE__ */ h(CenteredState, {
6072
6269
  icon: /* @__PURE__ */ h(IconBrandMark, { size: 32 }),
6073
6270
  title: t("panels.unknownStep")
6074
6271
  });
6075
- return /* @__PURE__ */ h(ModuleHost, {
6076
- key: `${owner.id}:${top.kind}`,
6272
+ const key = `${owner.id}:${top.kind}`;
6273
+ return /* @__PURE__ */ h(CardBoundary, {
6274
+ key,
6275
+ unit: owner.id,
6276
+ resetKey: `${key}:${panelToken}:${workspacePathOf(world)}`,
6277
+ t
6278
+ }, /* @__PURE__ */ h(ModuleHost, {
6077
6279
  module: owner,
6078
6280
  step: top.kind,
6079
6281
  world,
@@ -6083,17 +6285,22 @@ function BoardContent({ top, plan, world, board, panelToken, onPanelRefresh, onN
6083
6285
  onOpenMarket,
6084
6286
  onSummary,
6085
6287
  t
6086
- });
6288
+ }));
6087
6289
  }
6088
6290
  return /* @__PURE__ */ h(Fragment, null, plan.reading ? /* @__PURE__ */ h(CenteredState, {
6089
6291
  icon: null,
6090
6292
  title: /* @__PURE__ */ h(TextShimmer, { active: true }, t("panels.reading"))
6091
6293
  }) : null, plan.empty ? /* @__PURE__ */ h(BoardEmpty, {
6092
6294
  t,
6295
+ onBuildModule: buildModule,
6093
6296
  onOpenModules,
6094
6297
  onOpenMarket
6095
- }) : null, plan.modules.map(({ key, module }) => /* @__PURE__ */ h(ModuleHost, {
6298
+ }) : null, plan.modules.map(({ key, module }) => /* @__PURE__ */ h(CardBoundary, {
6096
6299
  key,
6300
+ unit: module.id,
6301
+ resetKey: `${key}:${panelToken}:${workspacePathOf(world)}`,
6302
+ t
6303
+ }, /* @__PURE__ */ h(ModuleHost, {
6097
6304
  module,
6098
6305
  world,
6099
6306
  panelToken,
@@ -6102,7 +6309,7 @@ function BoardContent({ top, plan, world, board, panelToken, onPanelRefresh, onN
6102
6309
  onOpenMarket,
6103
6310
  onSummary,
6104
6311
  t
6105
- })));
6312
+ }))));
6106
6313
  }
6107
6314
  function Rightbar(props) {
6108
6315
  const units = props.units;
@@ -6125,7 +6332,7 @@ function Rightbar(props) {
6125
6332
  const plan = planBoard(fixtures.shape, {
6126
6333
  modules: visibleModules,
6127
6334
  configRead: enabledUnits !== null
6128
- }, fixtureSeed(manifests, modules.all()));
6335
+ }, fixtureSeed(manifests, modules.all(), crashModeOn(window.location.search)));
6129
6336
  const world = createSuiteWorld({
6130
6337
  workspaces,
6131
6338
  sessions,
@@ -6204,6 +6411,7 @@ function Rightbar(props) {
6204
6411
  onOpenMarket: openMarket,
6205
6412
  onSummary,
6206
6413
  onOpenModules: () => setModulesOpen(true),
6414
+ buildModule: props.buildModule,
6207
6415
  t: props.t
6208
6416
  })));
6209
6417
  }
@@ -6365,59 +6573,324 @@ function PanelRow({ id, label, active, wide, onSelect, fallbackGlyph, renderEntr
6365
6573
  className: "wb-panelTag"
6366
6574
  }, t(hint.labelKey))));
6367
6575
  }
6576
+ var ProjectSwitcher_module_default = {
6577
+ root: "_root_1vd78_1",
6578
+ anchor: "_anchor_1vd78_7",
6579
+ menu: "_menu_1vd78_12",
6580
+ trigger: "_trigger_1vd78_17",
6581
+ glyph: "_glyph_1vd78_44",
6582
+ glyphActive: "_glyphActive_1vd78_54",
6583
+ triggerName: "_triggerName_1vd78_58",
6584
+ dir: "_dir_1vd78_69",
6585
+ name: "_name_1vd78_77",
6586
+ chevron: "_chevron_1vd78_90",
6587
+ row: "_row_1vd78_96",
6588
+ trailing: "_trailing_1vd78_104",
6589
+ rowAction: "_rowAction_1vd78_114",
6590
+ current: "_current_1vd78_127",
6591
+ field: "_field_1vd78_134",
6592
+ searchIcon: "_searchIcon_1vd78_151",
6593
+ search: "_search_1vd78_151"
6594
+ };
6595
+ var WorkspaceRenameDialog_module_default = {
6596
+ dialog: "_dialog_1vye5_1",
6597
+ stack: "_stack_1vye5_5",
6598
+ input: "_input_1vye5_12",
6599
+ meta: "_meta_1vye5_18"
6600
+ };
6601
+ function basenameOf(value) {
6602
+ const trimmed = value.replace(/[/\\]+$/, "");
6603
+ const at = Math.max(trimmed.lastIndexOf("/"), trimmed.lastIndexOf("\\"));
6604
+ return at === -1 ? trimmed : trimmed.slice(at + 1);
6605
+ }
6606
+ function displayNameOf(workspace) {
6607
+ const dir = basenameOf(workspace.path) || workspace.path;
6608
+ const title = workspace.title.trim();
6609
+ return {
6610
+ dir,
6611
+ name: title !== "" && title !== dir && title !== "default-workspace" ? title : ""
6612
+ };
6613
+ }
6614
+ function matchWorkspaces(items, query) {
6615
+ const needle = query.trim().toLowerCase();
6616
+ if (needle === "") return [...items];
6617
+ return items.filter((workspace) => {
6618
+ const { dir, name } = displayNameOf(workspace);
6619
+ return `${dir} ${name} ${workspace.path}`.toLowerCase().includes(needle);
6620
+ });
6621
+ }
6622
+ function titleFor(workspace, draft) {
6623
+ const trimmed = draft.trim();
6624
+ if (trimmed === "") return basenameOf(workspace.path) || workspace.path;
6625
+ return trimmed;
6626
+ }
6627
+ function nameTooLong(draft) {
6628
+ return draft.trim().length > 20;
6629
+ }
6630
+ //#endregion
6631
+ //#region src/app/layouts/sidebar/WorkspaceRenameDialog.tsx
6632
+ function WorkspaceRenameDialog({ workspace, t, onClose, onSubmit }) {
6633
+ const [draft, setDraft] = useState(() => displayNameOf(workspace).name);
6634
+ const [busy, setBusy] = useState(false);
6635
+ const [failed, setFailed] = useState(false);
6636
+ const dir = displayNameOf(workspace).dir;
6637
+ const tooLong = nameTooLong(draft);
6638
+ const save = () => {
6639
+ if (busy || tooLong) return;
6640
+ setBusy(true);
6641
+ setFailed(false);
6642
+ onSubmit(titleFor(workspace, draft)).then((ok) => {
6643
+ setBusy(false);
6644
+ if (ok) onClose();
6645
+ else setFailed(true);
6646
+ });
6647
+ };
6648
+ return /* @__PURE__ */ h(Modal, {
6649
+ open: true,
6650
+ onClose: () => {
6651
+ if (!busy) onClose();
6652
+ },
6653
+ title: t("project.rename.title", { name: dir }),
6654
+ description: t("project.rename.description"),
6655
+ closeLabel: t("project.rename.cancel"),
6656
+ className: WorkspaceRenameDialog_module_default.dialog,
6657
+ footer: /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(Button, {
6658
+ type: "button",
6659
+ variant: "outline",
6660
+ size: "md",
6661
+ disabled: busy,
6662
+ onClick: onClose
6663
+ }, t("project.rename.cancel")), /* @__PURE__ */ h(Button, {
6664
+ type: "button",
6665
+ variant: "primary",
6666
+ size: "md",
6667
+ disabled: busy || tooLong,
6668
+ "aria-busy": busy,
6669
+ onClick: save
6670
+ }, t(busy ? "project.rename.saving" : "project.rename.save")))
6671
+ }, /* @__PURE__ */ h("div", { className: WorkspaceRenameDialog_module_default.stack }, /* @__PURE__ */ h(TextField, {
6672
+ className: WorkspaceRenameDialog_module_default.input,
6673
+ "data-modal-autofocus": "",
6674
+ id: "wb-workspace-name",
6675
+ name: "wb-workspace-name",
6676
+ "aria-label": t("project.rename.field"),
6677
+ "aria-invalid": tooLong ? "true" : void 0,
6678
+ placeholder: t("project.rename.placeholder"),
6679
+ maxLength: 40,
6680
+ value: draft,
6681
+ onChange: (event) => setDraft(event.currentTarget.value),
6682
+ onKeyDown: (event) => {
6683
+ if (event.key !== "Enter" || event.nativeEvent.isComposing) return;
6684
+ event.preventDefault();
6685
+ save();
6686
+ }
6687
+ }), /* @__PURE__ */ h("div", { className: WorkspaceRenameDialog_module_default.meta }, /* @__PURE__ */ h(Note, { as: "span" }, t("project.rename.hint")), /* @__PURE__ */ h(Note, {
6688
+ as: "span",
6689
+ tone: tooLong ? "problem" : "muted"
6690
+ }, `${draft.trim().length}/20`)), failed ? /* @__PURE__ */ h(Note, { tone: "problem" }, t("project.rename.failed")) : null));
6691
+ }
6692
+ //#endregion
6693
+ //#region src/app/layouts/sidebar/WorkspaceSearchField.tsx
6694
+ function WorkspaceSearchField({ t, query, onQuery, onCursor, onSubmit }) {
6695
+ const boxRef = useRef(null);
6696
+ useEffect(() => {
6697
+ boxRef.current?.querySelector("input")?.focus();
6698
+ }, []);
6699
+ return /* @__PURE__ */ h("span", {
6700
+ ref: boxRef,
6701
+ className: ProjectSwitcher_module_default.field
6702
+ }, /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.searchIcon }, /* @__PURE__ */ h(IconSearchOutlineRegular, { size: 14 })), /* @__PURE__ */ h(TextField, {
6703
+ className: ProjectSwitcher_module_default.search,
6704
+ id: "wb-workspace-search",
6705
+ name: "wb-workspace-search",
6706
+ "aria-label": t("project.search.label"),
6707
+ placeholder: t("project.search.placeholder"),
6708
+ value: query,
6709
+ onChange: (event) => onQuery(event.currentTarget.value),
6710
+ onKeyDown: (event) => {
6711
+ if (event.nativeEvent.isComposing) return;
6712
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
6713
+ event.stopPropagation();
6714
+ event.preventDefault();
6715
+ onCursor(event.key === "ArrowDown" ? 1 : -1);
6716
+ return;
6717
+ }
6718
+ if (event.key !== "Enter") return;
6719
+ event.stopPropagation();
6720
+ onSubmit();
6721
+ }
6722
+ }));
6723
+ }
6724
+ //#endregion
6725
+ //#region src/app/layouts/sidebar/WorkspaceRowAction.tsx
6726
+ function WorkspaceRowAction({ workspace, t, onEdit }) {
6727
+ return /* @__PURE__ */ h(Button, {
6728
+ type: "button",
6729
+ variant: "ghost",
6730
+ size: "sm",
6731
+ className: ProjectSwitcher_module_default.rowAction,
6732
+ icon: /* @__PURE__ */ h(IconEditOutlineRegular, { size: 14 }),
6733
+ "aria-label": t("project.rename.row", { name: displayNameOf(workspace).dir }),
6734
+ onClick: (event) => {
6735
+ event.stopPropagation();
6736
+ onEdit();
6737
+ }
6738
+ });
6739
+ }
6740
+ //#endregion
6741
+ //#region src/app/layouts/sidebar/WorkspaceRowLabel.tsx
6742
+ function WorkspaceRowLabel({ workspace, current, action, onHover }) {
6743
+ const { dir, name } = displayNameOf(workspace);
6744
+ const hostRef = useRef(null);
6745
+ const hoverRef = useRef(onHover);
6746
+ useEffect(() => {
6747
+ hoverRef.current = onHover;
6748
+ });
6749
+ useEffect(() => {
6750
+ const row = hostRef.current?.closest("[role=\"menuitem\"]");
6751
+ if (row === null || row === void 0) return;
6752
+ const enter = () => hoverRef.current?.(true);
6753
+ const leave = () => hoverRef.current?.(false);
6754
+ row.addEventListener("mouseenter", enter);
6755
+ row.addEventListener("mouseleave", leave);
6756
+ return () => {
6757
+ row.removeEventListener("mouseenter", enter);
6758
+ row.removeEventListener("mouseleave", leave);
6759
+ };
6760
+ }, []);
6761
+ return /* @__PURE__ */ h("span", {
6762
+ ref: hostRef,
6763
+ className: ProjectSwitcher_module_default.row
6764
+ }, /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.dir }, dir), name === "" ? null : /* @__PURE__ */ h("span", {
6765
+ className: ProjectSwitcher_module_default.name,
6766
+ title: name
6767
+ }, name), /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.trailing }, action ?? (current ? /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.current }, /* @__PURE__ */ h(IconCheckOutlineRegular, { size: 12 })) : null)));
6768
+ }
6769
+ //#endregion
6770
+ //#region src/app/layouts/sidebar/workspace-items.tsx
6771
+ function workspaceMenuItems(options) {
6772
+ const { results, currentId, hoverId, t, onHover, onEdit } = options;
6773
+ return results.map((workspace) => ({
6774
+ id: workspace.workspaceId,
6775
+ icon: /* @__PURE__ */ h(IconFolderOpenRegular, { size: 16 }),
6776
+ label: /* @__PURE__ */ h(WorkspaceRowLabel, {
6777
+ workspace,
6778
+ current: workspace.workspaceId === currentId,
6779
+ onHover: (hovering) => onHover(hovering ? workspace.workspaceId : null),
6780
+ action: hoverId === workspace.workspaceId ? /* @__PURE__ */ h(WorkspaceRowAction, {
6781
+ workspace,
6782
+ t,
6783
+ onEdit: () => onEdit(workspace)
6784
+ }) : void 0
6785
+ })
6786
+ }));
6787
+ }
6368
6788
  //#endregion
6369
6789
  //#region src/app/layouts/sidebar/ProjectSwitcher.tsx
6370
6790
  var ADD_WORKSPACE_ID = "__wb-add-workspace__";
6371
- function ProjectSwitcher({ items, current, workspaceTitle, onPick, onAdd, t }) {
6791
+ function triggerName(current, t) {
6792
+ if (current === null) return t("project.none");
6793
+ const { dir, name } = displayNameOf(current);
6794
+ return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.dir }, dir), name === "" ? null : /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.name }, name));
6795
+ }
6796
+ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
6372
6797
  const [open, setOpen] = useState(false);
6798
+ const [query, setQuery] = useState("");
6799
+ const [cursor, setCursor] = useState(null);
6800
+ const [hoverId, setHoverId] = useState(null);
6801
+ const [naming, setNaming] = useState(null);
6373
6802
  const triggerRef = useRef(null);
6374
- const title = current ? workspaceTitle(current.title) : t("project.none");
6803
+ const wasOpenRef = useRef(false);
6375
6804
  const currentId = current?.workspaceId ?? null;
6376
- const trigger = /* @__PURE__ */ h("button", {
6805
+ const results = useMemo(() => matchWorkspaces(items, query), [items, query]);
6806
+ const cursorId = cursor === null || results.length === 0 ? null : results[Math.min(cursor, results.length - 1)]?.workspaceId ?? null;
6807
+ useEffect(() => {
6808
+ if (open) {
6809
+ wasOpenRef.current = true;
6810
+ return;
6811
+ }
6812
+ setQuery("");
6813
+ setCursor(null);
6814
+ setHoverId(null);
6815
+ if (wasOpenRef.current && naming === null) {
6816
+ wasOpenRef.current = false;
6817
+ triggerRef.current?.focus();
6818
+ }
6819
+ }, [open, naming]);
6820
+ const close = () => setOpen(false);
6821
+ const anchor = open ? /* @__PURE__ */ h(WorkspaceSearchField, {
6822
+ t,
6823
+ query,
6824
+ onQuery: (next) => {
6825
+ setQuery(next);
6826
+ setCursor(null);
6827
+ },
6828
+ onCursor: (step) => {
6829
+ if (results.length === 0) return;
6830
+ setCursor((at) => at === null ? step === 1 ? 0 : results.length - 1 : (at + step + results.length) % results.length);
6831
+ },
6832
+ onSubmit: () => {
6833
+ const pick = results[Math.min(cursor ?? 0, results.length - 1)];
6834
+ if (pick === void 0) return;
6835
+ close();
6836
+ onPick(pick.workspaceId);
6837
+ }
6838
+ }) : /* @__PURE__ */ h("button", {
6377
6839
  type: "button",
6378
6840
  ref: triggerRef,
6379
- className: "wb-projectButton",
6841
+ className: ProjectSwitcher_module_default.trigger,
6380
6842
  "aria-haspopup": "listbox",
6381
6843
  "aria-expanded": open,
6382
6844
  "aria-label": t("project.label"),
6383
- title: current ? current.path : title,
6384
- onClick: () => {
6385
- document.documentElement.style.setProperty("--wb-project-menu-min-width", `${Math.round(triggerRef.current?.getBoundingClientRect().width ?? 0)}px`);
6386
- setOpen((value) => !value);
6387
- }
6388
- }, /* @__PURE__ */ h("span", { className: "wb-projectGlyph wb-projectGlyphActive" }, open ? /* @__PURE__ */ h(IconFolderOpenRegular, { size: 16 }) : /* @__PURE__ */ h(IconFolderCloseRegular, { size: 16 })), /* @__PURE__ */ h("span", { className: "wb-projectName" }, title), /* @__PURE__ */ h("span", { className: cx("wb-projectChevron", open && "wb-projectChevronOpen") }, /* @__PURE__ */ h(IconChevronDownOutlineRegular, { size: 14 })));
6389
- return /* @__PURE__ */ h("div", { className: "wb-project" }, /* @__PURE__ */ h(Menu, {
6845
+ title: current?.path ?? void 0,
6846
+ onClick: () => setOpen(true)
6847
+ }, /* @__PURE__ */ h("span", { className: cx(ProjectSwitcher_module_default.glyph, ProjectSwitcher_module_default.glyphActive) }, /* @__PURE__ */ h(IconFolderCloseRegular, { size: 16 })), /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.triggerName }, triggerName(current, t)), /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.chevron }, /* @__PURE__ */ h(IconChevronDownOutlineRegular, { size: 14 })));
6848
+ return /* @__PURE__ */ h("div", { className: ProjectSwitcher_module_default.root }, /* @__PURE__ */ h(Menu, {
6390
6849
  open,
6391
6850
  portal: true,
6392
- className: "wb-projectAnchor",
6393
- anchor: trigger,
6851
+ className: ProjectSwitcher_module_default.anchor,
6852
+ listClassName: ProjectSwitcher_module_default.menu,
6853
+ anchor,
6394
6854
  align: "start",
6395
6855
  side: "bottom",
6396
- selection: "check",
6397
- selectedId: currentId ?? void 0,
6398
- items: [...items.length === 0 ? [{
6856
+ selection: "fill",
6857
+ selectedId: cursorId ?? void 0,
6858
+ items: [...results.length === 0 ? [{
6399
6859
  type: "label",
6400
6860
  id: "empty",
6401
- text: t("project.empty")
6402
- }] : [], ...items.map((workspace) => ({
6403
- id: workspace.workspaceId,
6404
- label: workspaceTitle(workspace.title),
6405
- icon: /* @__PURE__ */ h(IconFolderCloseRegular, { size: 16 })
6406
- }))],
6861
+ text: t("project.search.empty", { query: query.trim() })
6862
+ }] : [], ...workspaceMenuItems({
6863
+ results,
6864
+ currentId,
6865
+ hoverId,
6866
+ t,
6867
+ onHover: setHoverId,
6868
+ onEdit: (workspace) => {
6869
+ close();
6870
+ setNaming(workspace);
6871
+ }
6872
+ })],
6407
6873
  footer: [{
6408
6874
  id: ADD_WORKSPACE_ID,
6409
6875
  label: t("project.add"),
6410
6876
  icon: /* @__PURE__ */ h(IconPlusOutlineRegular, { size: 14 })
6411
6877
  }],
6412
6878
  onSelect: (id) => {
6413
- setOpen(false);
6414
6879
  if (id === ADD_WORKSPACE_ID) {
6880
+ close();
6415
6881
  onAdd();
6416
6882
  return;
6417
6883
  }
6884
+ close();
6418
6885
  onPick(id);
6419
6886
  },
6420
- onClose: () => setOpen(false)
6887
+ onClose: close
6888
+ }), naming === null ? null : /* @__PURE__ */ h(WorkspaceRenameDialog, {
6889
+ key: naming.workspaceId,
6890
+ workspace: naming,
6891
+ t,
6892
+ onClose: () => setNaming(null),
6893
+ onSubmit: (title) => onRename(naming.workspaceId, title)
6421
6894
  }));
6422
6895
  }
6423
6896
  //#endregion
@@ -6514,6 +6987,7 @@ function Sidebar(props) {
6514
6987
  const [storedId, setStoredId] = useState(() => selectedProjectId());
6515
6988
  const [panelEntries, setPanelEntries] = useState(() => props.listPanels());
6516
6989
  useEffect(() => props.subscribePanels(() => setPanelEntries(props.listPanels())), [props]);
6990
+ useEffect(() => subscribeProject(() => setStoredId(selectedProjectId())), []);
6517
6991
  const current = items.find((workspace) => workspace.workspaceId === storedId) ?? items[0] ?? null;
6518
6992
  const pickProject = (workspaceId) => {
6519
6993
  setStoredId(workspaceId);
@@ -6567,9 +7041,9 @@ function Sidebar(props) {
6567
7041
  }))), wide ? /* @__PURE__ */ h(ProjectSwitcher, {
6568
7042
  items,
6569
7043
  current,
6570
- workspaceTitle: props.workspaceDisplayTitle,
6571
7044
  onPick: pickProject,
6572
7045
  onAdd: addProject,
7046
+ onRename: props.renameWorkspace,
6573
7047
  t
6574
7048
  }) : null, /* @__PURE__ */ h(WorkspaceSection, {
6575
7049
  t,
@@ -7018,12 +7492,12 @@ var kit = {
7018
7492
  }
7019
7493
  };
7020
7494
  function messagesOf(units) {
7021
- return mergeMessages(dictionaries, units.map((face) => ({
7495
+ return units.map((face) => ({
7022
7496
  unit: face.manifest.id,
7023
7497
  ...face.messages === void 0 ? {} : { messages: face.messages }
7024
- })));
7498
+ }));
7025
7499
  }
7026
- var COMPONENT_CSS_MARKER = "\n.wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n}\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n.wb-approvalLabel {\n flex: none;\n width: var(--wb-len-56);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-len-20);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh.wb-spinning svg {\n animation: wb-spin var(--wb-dur-0-9) linear infinite;\n}\n\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12);\n}\n.wb-cardBody > :not([data-wb-bleed]) {\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-8);\n}\n\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: transparent;\n}\n\n.wb-choiceOption {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-30);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n color: var(--dsw-alias-label-secondary);\n text-decoration: none;\n white-space: nowrap;\n}\n.wb-longTaskLink:hover,\n.wb-longTaskLink:focus-visible {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n.wb-longTaskLink:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n.wb-mockStrip {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-12);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n flex: none;\n}\n\n.wb-mockNote {\n flex: 1 0 100%;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-mockChip {\n flex: none;\n padding: var(--wb-len-2) var(--wb-len-7);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: transparent;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-mockChip:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-mockChipOn {\n border-color: transparent;\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-label-primary-foreground);\n}\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n\n.wb-row:has(> [data-wb-dot]) {\n grid-template-columns: 84px minmax(0, 1fr);\n}\n.wb-rows {\n display: flex;\n flex-direction: column;\n}\n.wb-row {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-formActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n._marketList_7yq35_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n max-height: var(--wb-len-320);\n overflow-y: auto;\n}\n\n._marketRow_7yq35_12 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_7yq35_22 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-40);\n height: var(--wb-len-40);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_7yq35_34 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_7yq35_41 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketDesc_7yq35_50 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketUsedBy_7yq35_61 {\n margin-left: var(--wb-len-8);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n opacity: 0.75;\n}\n\n._marketUsedBy_7yq35_61::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_7yq35_41 ._marketVersion_7yq35_75 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_7yq35_75 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_7yq35_75::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketEnd_7yq35_97 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._marketActions_7yq35_104 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketSection_7yq35_110 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_7yq35_117 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionTitle_7yq35_123 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_7yq35_129 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketProgress_7yq35_135 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_7yq35_145 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_7yq35_152 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_7yq35_159 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_7yq35_164 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_7yq35_164 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_7yq35_181 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_7yq35_189 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_7yq35_194 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_7yq35_200 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketIconButton_7yq35_209 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_7yq35_209:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_7yq35_209:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_7yq35_234 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_7yq35_238 svg {\n animation: _wb-spin_7yq35_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_7yq35_242 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_7yq35_159 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketChecking_7yq35_259 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketEmptyTitle_7yq35_267 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_7yq35_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n._foot_1us83_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1us83_12 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1us83_17 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1coeb_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1coeb_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1coeb_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1coeb_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1coeb_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1coeb_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1coeb_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1coeb_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1coeb_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1coeb_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1coeb_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1coeb_59 svg,\n._registryToggle_1coeb_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1coeb_59[aria-expanded='true'] svg,\n._registryToggle_1coeb_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1coeb_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1coeb_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1coeb_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1coeb_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1coeb_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1coeb_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1coeb_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1coeb_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1coeb_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1coeb_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1coeb_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1coeb_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1coeb_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1coeb_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1coeb_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1coeb_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1coeb_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1coeb_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1coeb_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1coeb_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1coeb_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1coeb_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1coeb_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1coeb_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1coeb_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1coeb_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1coeb_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1coeb_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1coeb_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1coeb_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1coeb_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1coeb_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1coeb_343,\n._subjectDesc_1coeb_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1coeb_351,\n._resultWarn_1coeb_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1coeb_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._approval_1coeb_365 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1coeb_375 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1coeb_382 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1coeb_388 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1coeb_395 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1coeb_402 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1coeb_406 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1coeb_410 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1coeb_417 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1coeb_417 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._actions_jlw8j_1[hidden],\n._progress_jlw8j_2[hidden],\n._commandRow_jlw8j_3[hidden],\n._bridge_jlw8j_4[hidden],\n._raw_jlw8j_5[hidden] {\n display: none;\n}\n\n._gate_jlw8j_9 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_jlw8j_20 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_jlw8j_20:has(._actions_jlw8j_1:not([hidden])),\n._card_jlw8j_20:has(._bridge_jlw8j_4:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_jlw8j_35 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_jlw8j_50 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_jlw8j_50 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_jlw8j_50[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_jlw8j_77 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_jlw8j_50[data-status='ok'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_jlw8j_50[data-status='warn'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_jlw8j_50[data-status='failed'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_jlw8j_102 {\n flex: none;\n}\n\n._detail_jlw8j_106 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_jlw8j_2 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_jlw8j_124 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_jlw8j_132 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_jlw8j_3 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_jlw8j_158 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_jlw8j_158:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_jlw8j_3 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_jlw8j_191 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_jlw8j_198 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_jlw8j_191 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_jlw8j_191:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_jlw8j_191:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_jlw8j_1,\n._bridge_jlw8j_4 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_jlw8j_249 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_jlw8j_1 ._hint_jlw8j_43,\n._bridge_jlw8j_4 ._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_jlw8j_1 ._commandRow_jlw8j_3,\n._bridge_jlw8j_4 ._commandRow_jlw8j_3 {\n margin: 0;\n}\n\n._actions_jlw8j_1 ._buttons_jlw8j_191,\n._bridge_jlw8j_4 ._buttons_jlw8j_191 {\n justify-content: flex-start;\n}\n\n._raw_jlw8j_5 {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_jlw8j_282 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_jlw8j_1 ._error_jlw8j_132,\n._bridge_jlw8j_4 ._error_jlw8j_132 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_jlw8j_292 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_jlw8j_292 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_jlw8j_309 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_jlw8j_309::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_jlw8j_309:hover {\n text-decoration: underline;\n}\n\n._loading_jlw8j_323 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_jlw8j_323[hidden] {\n display: none;\n}\n\n._loadingMotion_jlw8j_332 {\n transform-origin: center;\n animation: _wb-spin_jlw8j_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_jlw8j_337,\n._loadingArc_jlw8j_338 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_jlw8j_337 {\n opacity: 0.25;\n}\n\n._loadingArc_jlw8j_338 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_jlw8j_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_jlw8j_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_jlw8j_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_jlw8j_332,\n ._loadingArc_jlw8j_338 {\n animation: none;\n }\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_1weg4_1 {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n._pop_1weg4_7 {\n position: absolute;\n top: calc(100% + var(--wb-len-8));\n right: 0;\n z-index: var(--wb-z-30);\n width: var(--wb-len-360);\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_1weg4_21 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_1weg4_29 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_1weg4_37:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_1weg4_59 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_1weg4_68 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: grab;\n}\n\n._row_1weg4_68:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOver_1weg4_83::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_1weg4_93 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_1weg4_108 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n}\n\n._label_1weg4_116 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_1weg4_123 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_1weg4_134 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_1weg4_142 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n._panel_1oyh4_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_1oyh4_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1oyh4_1[data-open] {\n visibility: visible;\n}\n._blocker_cfaak_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_cfaak_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_cfaak_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_cfaak_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._title_cfaak_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._hint_cfaak_23 {\n max-width: 100%;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._actions_cfaak_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._raw_cfaak_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_cfaak_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_cfaak_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_cfaak_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_cfaak_71._noticeFlat_cfaak_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_cfaak_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_cfaak_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_cfaak_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_cfaak_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_cfaak_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_cfaak_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineLink_cfaak_134 {\n margin-left: var(--wb-len-2);\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n vertical-align: baseline;\n}\n\n._inlineLink_cfaak_134:hover {\n text-decoration: underline;\n}\n\n._inlineLink_cfaak_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n._rawText_cfaak_156 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
7500
+ var COMPONENT_CSS_MARKER = "\n.wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n}\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n.wb-approvalLabel {\n flex: none;\n width: var(--wb-len-56);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-len-20);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh.wb-spinning svg {\n animation: wb-spin var(--wb-dur-0-9) linear infinite;\n}\n\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12);\n}\n.wb-cardBody > :not([data-wb-bleed]) {\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-8);\n}\n\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: transparent;\n}\n\n.wb-choiceOption {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-30);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n color: var(--dsw-alias-label-secondary);\n text-decoration: none;\n white-space: nowrap;\n}\n.wb-longTaskLink:hover,\n.wb-longTaskLink:focus-visible {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n.wb-longTaskLink:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n.wb-mockStrip {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-12);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n flex: none;\n}\n\n.wb-mockNote {\n flex: 1 0 100%;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-mockChip {\n flex: none;\n padding: var(--wb-len-2) var(--wb-len-7);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: transparent;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-mockChip:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-mockChipOn {\n border-color: transparent;\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-label-primary-foreground);\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n\n.wb-row:has(> [data-wb-dot]) {\n grid-template-columns: 84px minmax(0, 1fr);\n}\n.wb-rows {\n display: flex;\n flex-direction: column;\n}\n.wb-row {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-formActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n._marketList_7yq35_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n max-height: var(--wb-len-320);\n overflow-y: auto;\n}\n\n._marketRow_7yq35_12 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_7yq35_22 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-40);\n height: var(--wb-len-40);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_7yq35_34 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_7yq35_41 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketDesc_7yq35_50 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketUsedBy_7yq35_61 {\n margin-left: var(--wb-len-8);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n opacity: 0.75;\n}\n\n._marketUsedBy_7yq35_61::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_7yq35_41 ._marketVersion_7yq35_75 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_7yq35_75 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_7yq35_75::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketEnd_7yq35_97 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._marketActions_7yq35_104 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketSection_7yq35_110 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_7yq35_117 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionTitle_7yq35_123 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_7yq35_129 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketProgress_7yq35_135 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_7yq35_145 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_7yq35_152 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_7yq35_159 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_7yq35_164 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_7yq35_164 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_7yq35_181 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_7yq35_189 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_7yq35_194 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_7yq35_200 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketIconButton_7yq35_209 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_7yq35_209:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_7yq35_209:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_7yq35_234 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_7yq35_238 svg {\n animation: _wb-spin_7yq35_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_7yq35_242 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_7yq35_159 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketChecking_7yq35_259 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketEmptyTitle_7yq35_267 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_7yq35_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n._foot_1us83_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1us83_12 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1us83_17 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1coeb_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1coeb_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1coeb_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1coeb_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1coeb_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1coeb_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1coeb_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1coeb_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1coeb_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1coeb_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1coeb_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1coeb_59 svg,\n._registryToggle_1coeb_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1coeb_59[aria-expanded='true'] svg,\n._registryToggle_1coeb_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1coeb_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1coeb_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1coeb_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1coeb_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1coeb_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1coeb_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1coeb_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1coeb_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1coeb_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1coeb_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1coeb_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1coeb_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1coeb_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1coeb_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1coeb_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1coeb_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1coeb_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1coeb_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1coeb_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1coeb_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1coeb_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1coeb_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1coeb_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1coeb_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1coeb_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1coeb_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1coeb_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1coeb_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1coeb_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1coeb_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1coeb_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1coeb_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1coeb_343,\n._subjectDesc_1coeb_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1coeb_351,\n._resultWarn_1coeb_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1coeb_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._approval_1coeb_365 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1coeb_375 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1coeb_382 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1coeb_388 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1coeb_395 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1coeb_402 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1coeb_406 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1coeb_410 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1coeb_417 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1coeb_417 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._actions_jlw8j_1[hidden],\n._progress_jlw8j_2[hidden],\n._commandRow_jlw8j_3[hidden],\n._bridge_jlw8j_4[hidden],\n._raw_jlw8j_5[hidden] {\n display: none;\n}\n\n._gate_jlw8j_9 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_jlw8j_20 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_jlw8j_20:has(._actions_jlw8j_1:not([hidden])),\n._card_jlw8j_20:has(._bridge_jlw8j_4:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_jlw8j_35 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_jlw8j_50 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_jlw8j_50 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_jlw8j_50[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_jlw8j_77 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_jlw8j_50[data-status='ok'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_jlw8j_50[data-status='warn'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_jlw8j_50[data-status='failed'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_jlw8j_102 {\n flex: none;\n}\n\n._detail_jlw8j_106 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_jlw8j_2 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_jlw8j_124 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_jlw8j_132 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_jlw8j_3 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_jlw8j_158 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_jlw8j_158:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_jlw8j_3 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_jlw8j_191 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_jlw8j_198 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_jlw8j_191 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_jlw8j_191:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_jlw8j_191:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_jlw8j_1,\n._bridge_jlw8j_4 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_jlw8j_249 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_jlw8j_1 ._hint_jlw8j_43,\n._bridge_jlw8j_4 ._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_jlw8j_1 ._commandRow_jlw8j_3,\n._bridge_jlw8j_4 ._commandRow_jlw8j_3 {\n margin: 0;\n}\n\n._actions_jlw8j_1 ._buttons_jlw8j_191,\n._bridge_jlw8j_4 ._buttons_jlw8j_191 {\n justify-content: flex-start;\n}\n\n._raw_jlw8j_5 {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_jlw8j_282 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_jlw8j_1 ._error_jlw8j_132,\n._bridge_jlw8j_4 ._error_jlw8j_132 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_jlw8j_292 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_jlw8j_292 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_jlw8j_309 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_jlw8j_309::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_jlw8j_309:hover {\n text-decoration: underline;\n}\n\n._loading_jlw8j_323 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_jlw8j_323[hidden] {\n display: none;\n}\n\n._loadingMotion_jlw8j_332 {\n transform-origin: center;\n animation: _wb-spin_jlw8j_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_jlw8j_337,\n._loadingArc_jlw8j_338 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_jlw8j_337 {\n opacity: 0.25;\n}\n\n._loadingArc_jlw8j_338 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_jlw8j_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_jlw8j_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_jlw8j_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_jlw8j_332,\n ._loadingArc_jlw8j_338 {\n animation: none;\n }\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_1weg4_1 {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n._pop_1weg4_7 {\n position: absolute;\n top: calc(100% + var(--wb-len-8));\n right: 0;\n z-index: var(--wb-z-30);\n width: var(--wb-len-360);\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_1weg4_21 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_1weg4_29 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_1weg4_37:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_1weg4_59 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_1weg4_68 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: grab;\n}\n\n._row_1weg4_68:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOver_1weg4_83::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_1weg4_93 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_1weg4_108 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n}\n\n._label_1weg4_116 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_1weg4_123 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_1weg4_134 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_1weg4_142 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n._panel_1oyh4_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_1oyh4_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1oyh4_1[data-open] {\n visibility: visible;\n}\n._root_1vd78_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._anchor_1vd78_7 {\n display: block;\n width: 100%;\n}\n\n._menu_1vd78_12 {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n}\n\n._trigger_1vd78_17 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n._trigger_1vd78_17:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._trigger_1vd78_17:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._glyph_1vd78_44 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1vd78_54 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1vd78_58 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1vd78_69 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1vd78_77 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1vd78_58 ._name_1vd78_77 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._chevron_1vd78_90 {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n._row_1vd78_96 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1vd78_104 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1vd78_104 ._rowAction_1vd78_114 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1vd78_96 ._name_1vd78_77 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1vd78_127 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n\n._field_1vd78_134 {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n box-sizing: border-box;\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._field_1vd78_134:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n}\n\n._searchIcon_1vd78_151 {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._field_1vd78_134 ._search_1vd78_151 {\n flex: 1;\n min-width: 0;\n height: var(--wb-len-24);\n border: none;\n background: transparent;\n}\n\n._field_1vd78_134 ._search_1vd78_151:focus {\n border-color: transparent;\n box-shadow: none;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._blocker_cfaak_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_cfaak_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_cfaak_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_cfaak_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._title_cfaak_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._hint_cfaak_23 {\n max-width: 100%;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._actions_cfaak_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._raw_cfaak_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_cfaak_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_cfaak_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_cfaak_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_cfaak_71._noticeFlat_cfaak_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_cfaak_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_cfaak_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_cfaak_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_cfaak_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_cfaak_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_cfaak_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineLink_cfaak_134 {\n margin-left: var(--wb-len-2);\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n vertical-align: baseline;\n}\n\n._inlineLink_cfaak_134:hover {\n text-decoration: underline;\n}\n\n._inlineLink_cfaak_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n._rawText_cfaak_156 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
7027
7501
  function installStyles() {
7028
7502
  const style = document.createElement("style");
7029
7503
  style.setAttribute(STYLE_MARKER, "");
@@ -7052,7 +7526,8 @@ var inject = [
7052
7526
  "layout",
7053
7527
  "uiWorkspace",
7054
7528
  "workspaces",
7055
- "shortcuts"
7529
+ "shortcuts",
7530
+ "remote"
7056
7531
  ];
7057
7532
  function apply(ctx) {
7058
7533
  try {
@@ -7083,7 +7558,9 @@ function mount(ctx) {
7083
7558
  let disposeDictionary;
7084
7559
  const publish = () => {
7085
7560
  disposeDictionary?.();
7086
- disposeDictionary = ctx.locale.register(LOCALE_NS, messagesOf(units.all()));
7561
+ const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, messagesOf(units.all()));
7562
+ for (const problem of problems) console.warn(`[dsh-workbench] 套件 ${problem.unit} 的文案没并进来(只有它少了这几句):${problem.reason}`);
7563
+ disposeDictionary = ctx.locale.register(LOCALE_NS, merged);
7087
7564
  };
7088
7565
  publish();
7089
7566
  const unsubscribe = units.subscribe(publish);
@@ -7092,6 +7569,36 @@ function mount(ctx) {
7092
7569
  disposeDictionary?.();
7093
7570
  };
7094
7571
  }, "dsh-workbench: dictionaries");
7572
+ const workshopWorkspace = () => ctx.workspaces.list.getSnapshot().items.find((item) => item.path.endsWith("/workbench/diy"));
7573
+ const buildModule = () => {
7574
+ const workshop = workshopWorkspace();
7575
+ if (workshop === void 0) {
7576
+ console.warn("[dsh-workbench] 工坊还没登记成工作区 —— 重启一次工作台");
7577
+ return;
7578
+ }
7579
+ selectProject(workshop.workspaceId);
7580
+ const open = () => {
7581
+ ctx.uiWorkspace.startSession(workshop.workspaceId);
7582
+ };
7583
+ const remoteCreate = sessionCreateOf(ctx.remote);
7584
+ try {
7585
+ if (remoteCreate === void 0) throw new Error("session 那一组拿不到");
7586
+ remoteCreate({
7587
+ workspaceId: workshop.workspaceId,
7588
+ agentPreset: DIY_PRESET_ID
7589
+ }).then((created) => {
7590
+ const id = created.sessionId;
7591
+ if (id === void 0) throw new Error("没有 sessionId");
7592
+ ctx.uiWorkspace.openSession(id);
7593
+ }).catch((error) => {
7594
+ console.warn(`[dsh-workbench] 落 DIY 模式失败,仍切工作区 —— ${String(error)}`);
7595
+ open();
7596
+ });
7597
+ } catch (error) {
7598
+ console.warn(`[dsh-workbench] ctx.remote 拿不到 —— ${String(error)}`);
7599
+ open();
7600
+ }
7601
+ };
7095
7602
  const rightbarActions = {
7096
7603
  openMarket: () => ctx.layout.selectPanel(MARKET_PANEL_ID),
7097
7604
  applyRightbar: ({ shown, track, fullscreen }) => {
@@ -7110,7 +7617,8 @@ function mount(ctx) {
7110
7617
  ctx.layout.openRightbar(true, false);
7111
7618
  },
7112
7619
  openPanel: (step) => store.open(step),
7113
- goToPanel: (index) => store.goTo(index)
7620
+ goToPanel: (index) => store.goTo(index),
7621
+ buildModule
7114
7622
  };
7115
7623
  const rightbarHooks = { hooks: { rightbar: observable } };
7116
7624
  const sidebarRight = () => ctx.get("sidebarRight");
@@ -7235,7 +7743,14 @@ function mount(ctx) {
7235
7743
  inject: () => ({
7236
7744
  listPanels: () => readPanels(ctx),
7237
7745
  subscribePanels: (callback) => ctx.slots.subscribe("sidebar.panellist", callback),
7238
- workspaceDisplayTitle: (title) => title === "default-workspace" ? ctx.locale.bind("common")("workspace.defaultName") : title,
7746
+ renameWorkspace: async (workspaceId, title) => {
7747
+ try {
7748
+ await ctx.workspaces.rename(workspaceId, title);
7749
+ return true;
7750
+ } catch {
7751
+ return false;
7752
+ }
7753
+ },
7239
7754
  openWorkspace: (workspaceId) => {
7240
7755
  ctx.uiWorkspace.openWorkspace(workspaceId);
7241
7756
  },
@@ -7248,6 +7763,12 @@ function mount(ctx) {
7248
7763
  })
7249
7764
  }, Sidebar));
7250
7765
  registerMarketPanel(ctx, units);
7766
+ ctx.effect(() => {
7767
+ const workshop = workshopWorkspace();
7768
+ if (workshop === void 0) return;
7769
+ const title = ctx.workspaces.list.getSnapshot().items.find((item) => item.workspaceId === workshop.workspaceId)?.title;
7770
+ if (title !== void 0 && WORKSHOP_PAST_TITLES.includes(title) && title !== "工作台DIY") ctx.workspaces.rename(workshop.workspaceId, WORKSHOP_TITLE).catch(() => void 0);
7771
+ }, "dsh-workbench: 工坊那一行的旧名字换成新名字");
7251
7772
  const gate = createBootGate(ctx);
7252
7773
  ctx.effect(() => () => gate.close(), "dsh-workbench: env gate");
7253
7774
  ctx.slots.inject("conversation.approval.detail", () => ctx.slots.register({
@@ -7317,5 +7838,9 @@ function sidebarChildren(ctx) {
7317
7838
  function menuOpenStateFactory(_standard, state) {
7318
7839
  return () => state;
7319
7840
  }
7841
+ function sessionCreateOf(remote) {
7842
+ const namespaces = remote?.namespaces;
7843
+ return namespaces?.get?.("session")?.service?.create?.bind(namespaces.get("session")?.service);
7844
+ }
7320
7845
  //#endregion
7321
7846
  export { apply, inject, kit };