@dsh-workbench/core 0.2.5 → 0.2.7

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 (38) hide show
  1. package/README.md +13 -9
  2. package/bin/dsh-workbench +12 -43
  3. package/client.js +914 -350
  4. package/dist/client/client.body.js +914 -350
  5. package/dist/client/index.js +915 -351
  6. package/dist/host/index.js +1314 -667
  7. package/dist/types/app/client.d.ts +216 -6
  8. package/dist/types/app/layouts/config-sync/ConfigSyncSection.d.ts +5 -0
  9. package/dist/types/app/layouts/rightbar/__tests__/market-order.test.d.ts +1 -0
  10. package/dist/types/app/layouts/rightbar/__tests__/market-running-display.test.d.ts +1 -0
  11. package/dist/types/app/layouts/rightbar/__tests__/market-workbench-act.test.d.ts +1 -0
  12. package/dist/types/app/layouts/rightbar/market-act.d.ts +2 -1
  13. package/dist/types/app/layouts/rightbar/market-rows.d.ts +3 -0
  14. package/dist/types/app/layouts/rightbar/market-settle-hold.d.ts +13 -0
  15. package/dist/types/app/layouts/rightbar/market-settle.d.ts +22 -0
  16. package/dist/types/app/layouts/rightbar/market-transient-state.d.ts +22 -0
  17. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +26 -1
  18. package/dist/types/app/layouts/sidebar/workspace-groups.d.ts +4 -1
  19. package/dist/types/modules/panels/__tests__/market-tools-harness.d.ts +3 -0
  20. package/dist/types/modules/panels/model/market-workbench-update.d.ts +19 -0
  21. package/dist/types/modules/panels/model/market.d.ts +4 -0
  22. package/dist/types/modules/sessions/index.d.ts +1 -1
  23. package/dist/types/modules/sessions/model/session-node.d.ts +1 -0
  24. package/dist/types/shared/api/bundle-install.d.ts +1 -0
  25. package/dist/types/shared/api/config-sync.d.ts +35 -0
  26. package/dist/types/shared/api/config-sync.test.d.ts +1 -0
  27. package/dist/types/shared/api/host/__tests__/config-sync.test.d.ts +1 -0
  28. package/dist/types/shared/api/host/__tests__/post-channels.test.d.ts +1 -0
  29. package/dist/types/shared/api/host/__tests__/self-update.test.d.ts +1 -0
  30. package/dist/types/shared/api/host/bundle-manager.d.ts +1 -0
  31. package/dist/types/shared/api/host/bundle-routes.d.ts +1 -1
  32. package/dist/types/shared/api/host/config-sync.d.ts +46 -0
  33. package/dist/types/shared/api/host/post-channels.d.ts +18 -0
  34. package/dist/types/shared/api/host/self-update.d.ts +45 -0
  35. package/docs/HANDOFF.md +19 -14
  36. package/docs/OPERATIONS.md +40 -8
  37. package/package.json +4 -4
  38. package/scripts/seed-profile.sh +21 -85
@@ -1,4 +1,4 @@
1
- import { Button, CodeBlock, DisclosureRow, HoverCard, IconArchiveOutlineRegular, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinFillRegular, 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";
1
+ import { Button, Checkbox, CodeBlock, DiffBlock, DisclosureRow, HoverCard, IconArchiveOutlineRegular, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinFillRegular, 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) => {
@@ -718,9 +718,15 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
718
718
  }
719
719
  //#endregion
720
720
  //#region ../shared/dist/components/Note.js
721
- function Note({ tone = "muted", as, children }) {
721
+ function Note({ tone = "muted", as, role, children }) {
722
722
  const className = tone === "problem" ? "wb-problem" : "wb-note";
723
- return as === "span" ? h("span", { className }, children) : h("p", { className }, children);
723
+ return as === "span" ? h("span", {
724
+ className,
725
+ role
726
+ }, children) : h("p", {
727
+ className,
728
+ role
729
+ }, children);
724
730
  }
725
731
  //#endregion
726
732
  //#region ../shared/dist/components/CardBoundary.js
@@ -1285,6 +1291,7 @@ var en = {
1285
1291
  "project.search.placeholder": "Search workspaces (folder / name / path)",
1286
1292
  "project.search.empty": "No workspace matches “{query}”.",
1287
1293
  "project.group.workspaces": "Workspaces",
1294
+ "project.group.defaultWorkspace": "Default workspace",
1288
1295
  "project.group.workshop": "Workshop",
1289
1296
  "project.rename.row": "Rename “{name}”",
1290
1297
  "project.rename.current": "Give this workspace a display name…",
@@ -1377,6 +1384,7 @@ var en = {
1377
1384
  "panels.market.lead": "Installed on this machine, shared by every project.",
1378
1385
  "panels.market.install": "Install",
1379
1386
  "panels.market.update": "Update",
1387
+ "panels.market.swapSlow": "Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.",
1380
1388
  "panels.market.uninstall": "Uninstall",
1381
1389
  "panels.market.uninstallLabel": "Uninstall {name}",
1382
1390
  "panels.market.installing": "Installing…",
@@ -1626,7 +1634,40 @@ var en = {
1626
1634
  "error.unknown": "Something went wrong",
1627
1635
  "board.title": "Workbench panel",
1628
1636
  "panel.conversation": "Conversation",
1629
- "panels.label": "Global panels"
1637
+ "panels.label": "Global panels",
1638
+ "configSync.nav": "Config sync",
1639
+ "configSync.lead": "Bring over the rows another profile configures explicitly — pick any profile as the source.",
1640
+ "configSync.source": "Source",
1641
+ "configSync.sourceBroken": "its config is unreadable",
1642
+ "configSync.sourceRows": "{name}: {count} rows are new or different for the workbench",
1643
+ "configSync.sourceDead": "unreadable",
1644
+ "configSync.refresh": "Read again",
1645
+ "configSync.loading": "Reading the source config…",
1646
+ "configSync.readHint": "Pick another source, or read again.",
1647
+ "configSync.tag.new": "New",
1648
+ "configSync.tag.differs": "Differs",
1649
+ "configSync.conflictNote": "Applying replaces this workbench copy with the source",
1650
+ "configSync.code.lang": "yaml",
1651
+ "configSync.code.copy": "Copy",
1652
+ "configSync.code.copied": "Copied",
1653
+ "configSync.code.wrap": "Wrap lines",
1654
+ "configSync.code.unwrap": "No wrap",
1655
+ "configSync.code.collapse": "Collapse",
1656
+ "configSync.code.collapseAria": "Collapse this row",
1657
+ "configSync.code.expandAria": "Expand the diff ({count} more lines)",
1658
+ "configSync.code.expand": "Show {count} more lines",
1659
+ "configSync.missing": "{pkg} is not installed: the row will not take effect — run `dsh plugin --profile {profile} add {pkg}`, or install it from the module market",
1660
+ "configSync.apply": "Sync {count} selected",
1661
+ "configSync.applyNone": "Pick some rows first",
1662
+ "configSync.applying": "Writing…",
1663
+ "configSync.applied": "Written to the workbench config · applied",
1664
+ "configSync.appliedIds": "Written this time: {ids}",
1665
+ "configSync.skippedIds": "Left alone (already here): {ids}",
1666
+ "configSync.nothing": "Nothing to sync",
1667
+ "configSync.unreadable": "Cannot read {path}: {reason}",
1668
+ "configSync.noSource": "This machine has no other profile to sync from",
1669
+ "configSync.emptyProviders": "The workbench has no model provider yet — sync the llm- rows from some profile, or configure one under Models.",
1670
+ "configSync.failed": "The sync did not go through; try again."
1630
1671
  };
1631
1672
  //#endregion
1632
1673
  //#region ../shared/dist/i18n/zh.js
@@ -1645,6 +1686,7 @@ var zh = {
1645
1686
  "project.search.placeholder": "搜索工作区(目录名 / 中文名 / 路径)",
1646
1687
  "project.search.empty": "没有匹配「{query}」的工作区。",
1647
1688
  "project.group.workspaces": "工作区",
1689
+ "project.group.defaultWorkspace": "默认工作区",
1648
1690
  "project.group.workshop": "工坊",
1649
1691
  "project.rename.row": "改「{name}」的中文名",
1650
1692
  "project.rename.current": "改当前工作区的中文名…",
@@ -1737,6 +1779,7 @@ var zh = {
1737
1779
  "panels.market.lead": "装在这台机器上,所有项目共用。",
1738
1780
  "panels.market.install": "安装",
1739
1781
  "panels.market.update": "更新",
1782
+ "panels.market.swapSlow": "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。",
1740
1783
  "panels.market.uninstall": "卸载",
1741
1784
  "panels.market.uninstallLabel": "卸载 {name}",
1742
1785
  "panels.market.installing": "正在安装…",
@@ -1986,7 +2029,40 @@ var zh = {
1986
2029
  "error.unknown": "出错了",
1987
2030
  "board.title": "工作台面板",
1988
2031
  "panel.conversation": "对话",
1989
- "panels.label": "全局面板"
2032
+ "panels.label": "全局面板",
2033
+ "configSync.nav": "配置同步",
2034
+ "configSync.lead": "把另一个 profile 里显式配过的行搬过来 —— 来源随你选。",
2035
+ "configSync.source": "来源",
2036
+ "configSync.sourceBroken": "读不到它的配置",
2037
+ "configSync.sourceRows": "{name} 这份里你有 {count} 行可搬",
2038
+ "configSync.sourceDead": "读不到",
2039
+ "configSync.refresh": "重新读一遍",
2040
+ "configSync.loading": "正在读来源的配置…",
2041
+ "configSync.readHint": "换个来源,或再读一遍。",
2042
+ "configSync.tag.new": "新增",
2043
+ "configSync.tag.differs": "差异",
2044
+ "configSync.conflictNote": "应用后工作台这份会被来源覆盖",
2045
+ "configSync.code.lang": "yaml",
2046
+ "configSync.code.copy": "复制",
2047
+ "configSync.code.copied": "已复制",
2048
+ "configSync.code.wrap": "自动换行",
2049
+ "configSync.code.unwrap": "不换行",
2050
+ "configSync.code.collapse": "收起",
2051
+ "configSync.code.collapseAria": "收起这一行的配置",
2052
+ "configSync.code.expandAria": "展开差异(还有 {count} 行)",
2053
+ "configSync.code.expand": "展开剩余 {count} 行",
2054
+ "configSync.missing": "{pkg} 还没装:这一行搬过来也不会生效 —— 先 `dsh plugin --profile {profile} add {pkg}`,或在模块市场里装",
2055
+ "configSync.apply": "同步选中的 {count} 行",
2056
+ "configSync.applyNone": "先勾几行",
2057
+ "configSync.applying": "正在写入…",
2058
+ "configSync.applied": "已写入工作台配置 · 已生效",
2059
+ "configSync.appliedIds": "这次写进去:{ids}",
2060
+ "configSync.skippedIds": "这几行工作台自己已有,没动:{ids}",
2061
+ "configSync.nothing": "没有需要同步的内容",
2062
+ "configSync.unreadable": "读不到 {path}:{reason}",
2063
+ "configSync.noSource": "这台机器上只有工作台这一个 profile,没有可同步的来源",
2064
+ "configSync.emptyProviders": "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把 llm- 那几行搬过来,或自己去「模型」里配。",
2065
+ "configSync.failed": "同步没成功,再试一次。"
1990
2066
  };
1991
2067
  //#endregion
1992
2068
  //#region ../shared/dist/i18n/index.js
@@ -2809,6 +2885,38 @@ function holdBack(installed, roster, active, previous) {
2809
2885
  const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
2810
2886
  return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
2811
2887
  }
2888
+ var WORKBENCH_SWAP_MS = 18e4;
2889
+ function swapLanded(until, installed) {
2890
+ return until !== void 0 && installed === until;
2891
+ }
2892
+ function swapUntil(action, application, latest) {
2893
+ if (action !== "update-workbench" || application !== "restart-required") return void 0;
2894
+ return latest;
2895
+ }
2896
+ var READ_BACK_ACTIONS = /* @__PURE__ */ new Set(["update", "update-bundle"]);
2897
+ function awaitsReadBack(action, application, version) {
2898
+ return application === "applied" && version !== void 0 && READ_BACK_ACTIONS.has(action);
2899
+ }
2900
+ function readBackDone(input) {
2901
+ if (input.action === "update") return !input.outdated;
2902
+ if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
2903
+ if (input.entry.latest === input.entry.installed) return true;
2904
+ if (input.clicked === void 0) return true;
2905
+ return input.entry.installed !== input.clicked;
2906
+ }
2907
+ function settleLanded(input) {
2908
+ if (input.until !== void 0) return swapLanded(input.until, input.installed);
2909
+ if (input.readBack !== true) return true;
2910
+ return readBackDone({
2911
+ action: input.action,
2912
+ entry: input.entry,
2913
+ clicked: input.clicked,
2914
+ outdated: input.outdated
2915
+ });
2916
+ }
2917
+ function holdWindowMs(until) {
2918
+ return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
2919
+ }
2812
2920
  //#endregion
2813
2921
  //#region src/app/layouts/rightbar/market-installed-mock.ts
2814
2922
  function installedMocks(input) {
@@ -3941,6 +4049,7 @@ function workbenchRow(version) {
3941
4049
  key: "panels.market.workbenchLocal",
3942
4050
  params: {}
3943
4051
  } : void 0;
4052
+ const stale = !local && version.running !== void 0 && version.running !== version.installed;
3944
4053
  return {
3945
4054
  id: WORKBENCH_ROW_ID,
3946
4055
  titleKey: WORKBENCH_TITLE_KEY,
@@ -3950,6 +4059,7 @@ function workbenchRow(version) {
3950
4059
  canUpdate: update !== void 0,
3951
4060
  canUninstall: false,
3952
4061
  ...note === void 0 ? {} : { note },
4062
+ ...stale ? { hint: "panels.market.moduleRestartHint" } : {},
3953
4063
  version: {
3954
4064
  installed: version.installed,
3955
4065
  ...latest === void 0 ? {} : { latest }
@@ -4012,6 +4122,10 @@ function mergeTitles(known, manifests) {
4012
4122
  }
4013
4123
  return next ?? known;
4014
4124
  }
4125
+ function installedIdSet(installed) {
4126
+ if (installed === void 0) return null;
4127
+ return new Set(installed.map((item) => item.unit));
4128
+ }
4015
4129
  function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
4016
4130
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
4017
4131
  const rows = [];
@@ -4074,6 +4188,9 @@ function isOutdated(capability) {
4074
4188
  if (capability === void 0) return false;
4075
4189
  return capability.status === "missing-commands";
4076
4190
  }
4191
+ function capabilityOutdated(capabilities, unit) {
4192
+ return isOutdated(capabilities?.[unit]);
4193
+ }
4077
4194
  function envNameOf(source) {
4078
4195
  if (source === void 0) return "";
4079
4196
  if (source.kind === "local") return source.env;
@@ -4135,6 +4252,12 @@ function marketHintVisible(manifests, capabilities, modules, workbench) {
4135
4252
  const self = workbenchRow(workbench);
4136
4253
  return marketHasUpdates([...marketRows(manifests, capabilities, marketUpdatesOf(modules)), ...self === void 0 ? [] : [self]], sharedRows(manifests, capabilities));
4137
4254
  }
4255
+ function marketOrder(rows, titleOf) {
4256
+ return [...rows].sort((left, right) => {
4257
+ const byTitle = titleOf(left).localeCompare(titleOf(right), "zh-Hans-CN");
4258
+ return byTitle === 0 ? left.id.localeCompare(right.id) : byTitle;
4259
+ });
4260
+ }
4138
4261
  function marketSections(rows) {
4139
4262
  const installed = rows.filter((row) => isOnMachine(row.state));
4140
4263
  const rest = rows.filter((row) => !isOnMachine(row.state));
@@ -4272,6 +4395,74 @@ function useVisibleBusy(active, floorMs) {
4272
4395
  return busyView(active, visible);
4273
4396
  }
4274
4397
  //#endregion
4398
+ //#region src/app/layouts/rightbar/market-settle-hold.ts
4399
+ function useSettleHold(input) {
4400
+ const { pending, landed, t, onChanged, setPending, setFailed } = input;
4401
+ const until = pending?.until;
4402
+ const id = pending?.id ?? "";
4403
+ const watching = pending !== null && (pending.until !== void 0 || pending.readBack === true);
4404
+ const sinceRef = useRef(0);
4405
+ useEffect(() => {
4406
+ if (!watching || !landed) return;
4407
+ setPending(null);
4408
+ }, [
4409
+ watching,
4410
+ landed,
4411
+ setPending
4412
+ ]);
4413
+ useEffect(() => {
4414
+ if (!watching) {
4415
+ sinceRef.current = 0;
4416
+ return;
4417
+ }
4418
+ if (sinceRef.current === 0) sinceRef.current = Date.now();
4419
+ const deadline = sinceRef.current + holdWindowMs(until);
4420
+ const tick = window.setInterval(() => {
4421
+ onChanged();
4422
+ if (Date.now() < deadline) return;
4423
+ window.clearInterval(tick);
4424
+ setPending(null);
4425
+ setFailed({
4426
+ id,
4427
+ message: t("panels.market.swapSlow")
4428
+ });
4429
+ }, 800);
4430
+ return () => window.clearInterval(tick);
4431
+ }, [
4432
+ watching,
4433
+ landed,
4434
+ until,
4435
+ id,
4436
+ onChanged,
4437
+ setPending,
4438
+ setFailed,
4439
+ t
4440
+ ]);
4441
+ }
4442
+ //#endregion
4443
+ //#region src/app/layouts/rightbar/market-transient-state.ts
4444
+ function useMarketTransient(input) {
4445
+ const { mock, onPending } = input;
4446
+ const [pending, setPending] = useState(mock?.pending ?? null);
4447
+ const [confirming, setConfirming] = useState(mock?.confirming ?? null);
4448
+ const [failed, setFailed] = useState(mock?.failure ?? null);
4449
+ const [notice, setNotice] = useState(mock?.notice ?? null);
4450
+ useEffect(() => {
4451
+ onPending?.(pending !== null);
4452
+ return () => onPending?.(false);
4453
+ }, [pending, onPending]);
4454
+ return {
4455
+ pending,
4456
+ setPending,
4457
+ confirming,
4458
+ setConfirming,
4459
+ failed,
4460
+ setFailed,
4461
+ notice,
4462
+ setNotice
4463
+ };
4464
+ }
4465
+ //#endregion
4275
4466
  //#region src/app/layouts/rightbar/market-plugin-rows.ts
4276
4467
  function installedPluginKept(value) {
4277
4468
  if (typeof value !== "object" || value === null) return void 0;
@@ -4434,6 +4625,80 @@ var ACTION_LABEL_KEY = {
4434
4625
  "uninstall-plugin": "panels.market.uninstall",
4435
4626
  "update-workbench": "panels.market.update"
4436
4627
  };
4628
+ function holdOf(pending, application) {
4629
+ if (pending === null || pending.row === void 0) return void 0;
4630
+ if (application !== "applied") return void 0;
4631
+ return {
4632
+ id: pending.id,
4633
+ row: pending.row
4634
+ };
4635
+ }
4636
+ function pendingLanded(pending, updates, capabilities, installed) {
4637
+ if (pending === null) return true;
4638
+ return settleLanded({
4639
+ action: pending.action,
4640
+ until: pending.until,
4641
+ readBack: pending.readBack,
4642
+ installed,
4643
+ entry: updates[pending.id],
4644
+ clicked: pending.version,
4645
+ outdated: capabilityOutdated(capabilities, pending.id)
4646
+ });
4647
+ }
4648
+ function holdExpired(held, backInRoster, elapsedMs) {
4649
+ if (held === void 0) return true;
4650
+ return backInRoster || elapsedMs >= 15e3;
4651
+ }
4652
+ function heldIdOf(pending, held) {
4653
+ return pending?.id ?? held?.id ?? null;
4654
+ }
4655
+ function pinnedRowOf(pending, held) {
4656
+ return pending?.row ?? held?.row;
4657
+ }
4658
+ function withPinnedRow(rows, pinned) {
4659
+ if (pinned === void 0) return [...rows];
4660
+ if (!rows.some((row) => row.id === pinned.id)) return [...rows, pinned];
4661
+ return rows.map((row) => row.id === pinned.id ? pinned : row);
4662
+ }
4663
+ function marketFootVisible(shown, installed) {
4664
+ return shown.length > 0 || installed.length > 0;
4665
+ }
4666
+ function useMarketTitles(manifests, mocked) {
4667
+ const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
4668
+ useEffect(() => {
4669
+ if (!mocked) setTitles((known) => mergeTitles(known, manifests));
4670
+ }, [manifests, mocked]);
4671
+ return titles;
4672
+ }
4673
+ function useHeldRow(pending, backInRoster) {
4674
+ const [held, setHeld] = useState(void 0);
4675
+ const heldAtRef = useRef(0);
4676
+ const hold = useCallback((next) => {
4677
+ if (next !== void 0) heldAtRef.current = Date.now();
4678
+ setHeld(next);
4679
+ }, []);
4680
+ const back = held === void 0 ? false : backInRoster(held.id);
4681
+ useEffect(() => {
4682
+ if (held === void 0) return;
4683
+ if (holdExpired(held, back, Date.now() - heldAtRef.current)) {
4684
+ setHeld(void 0);
4685
+ return;
4686
+ }
4687
+ const timer = setTimeout(() => setHeld(void 0), MODULE_SETTLE_MS);
4688
+ return () => clearTimeout(timer);
4689
+ }, [held, back]);
4690
+ useEffect(() => {
4691
+ if (pending !== null) setHeld(void 0);
4692
+ }, [pending]);
4693
+ return {
4694
+ held,
4695
+ hold
4696
+ };
4697
+ }
4698
+ function removingIdOf(pending, failed) {
4699
+ if (pending === null || pending.action !== "remove-bundle") return null;
4700
+ return failed?.id === pending.id ? null : pending.id;
4701
+ }
4437
4702
  function pendingRowOf(input) {
4438
4703
  const { pending, removing } = input;
4439
4704
  if (removing === null || pending === null) return void 0;
@@ -4830,18 +5095,21 @@ function changeFailure(change, t) {
4830
5095
  }
4831
5096
  //#endregion
4832
5097
  //#region src/app/layouts/rightbar/market-act.ts
5098
+ var STEADY_ACTIONS = /* @__PURE__ */ new Set(["update", "update-bundle"]);
4833
5099
  function marketActOf(options) {
4834
5100
  const { t, mocked, rowOf, seats, send, onChanged } = options;
4835
5101
  return async (id, action) => {
4836
5102
  if (mocked) return;
4837
5103
  const row = rowOf(id);
4838
- seats.setPending({
5104
+ const next = {
4839
5105
  id,
4840
5106
  action,
4841
5107
  ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4842
5108
  ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4843
- ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4844
- });
5109
+ ...row?.version?.installed === void 0 ? {} : { version: row.version.installed },
5110
+ ...row === void 0 || !STEADY_ACTIONS.has(action) ? {} : { row }
5111
+ };
5112
+ seats.setPending(next);
4845
5113
  seats.setConfirming(null);
4846
5114
  seats.setFailed(null);
4847
5115
  if (action !== "uninstall-plugin") seats.setNotice(null);
@@ -4855,8 +5123,9 @@ function marketActOf(options) {
4855
5123
  action,
4856
5124
  unit: id
4857
5125
  });
4858
- seats.setPending(null);
4859
5126
  if (!outcome.ok) {
5127
+ seats.setPending(null);
5128
+ seats.setHeld(void 0);
4860
5129
  onChanged();
4861
5130
  seats.setFailed({
4862
5131
  id,
@@ -4864,8 +5133,17 @@ function marketActOf(options) {
4864
5133
  });
4865
5134
  return;
4866
5135
  }
5136
+ const change = changeOf(outcome.value);
5137
+ const until = swapUntil(action, change?.application, row?.version?.latest);
5138
+ const readBack = awaitsReadBack(action, change?.application, next.version);
5139
+ seats.setPending(until === void 0 && !readBack ? null : {
5140
+ ...next,
5141
+ ...until === void 0 ? {} : { until },
5142
+ ...readBack ? { readBack: true } : {}
5143
+ });
5144
+ seats.setHeld(readBack ? void 0 : holdOf(next, change?.application));
4867
5145
  if (action === "uninstall-plugin") seats.setNotice(installedPluginNotice(outcome.value, t));
4868
- const reason = changeFailure(changeOf(outcome.value), t);
5146
+ const reason = changeFailure(change, t);
4869
5147
  onChanged();
4870
5148
  if (reason !== void 0) seats.setFailed({
4871
5149
  id,
@@ -4908,6 +5186,7 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
4908
5186
  }
4909
5187
  function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
4910
5188
  const failureOf = (id) => failed?.id === id ? failed.message : null;
5189
+ const foot = marketFootVisible(shown, installedList);
4911
5190
  return /* @__PURE__ */ h(Fragment, null, notice === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ h(MarketSection, {
4912
5191
  t,
4913
5192
  rows: self === void 0 ? [] : [self],
@@ -4921,7 +5200,7 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
4921
5200
  }), self === void 0 ? null : /* @__PURE__ */ h("div", {
4922
5201
  className: MarketPage_module_default.marketSelfDivider,
4923
5202
  "aria-hidden": "true"
4924
- }), marketSections([...shown, ...installedList]).map((section) => /* @__PURE__ */ h(MarketSection, {
5203
+ }), marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t))).map((section) => /* @__PURE__ */ h(MarketSection, {
4925
5204
  key: section.id,
4926
5205
  t,
4927
5206
  titleKey: section.titleKey,
@@ -4946,10 +5225,10 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
4946
5225
  act,
4947
5226
  confirmActions: CONFIRM_UNINSTALL,
4948
5227
  onConfirming
4949
- }), /* @__PURE__ */ h(PanelFoot, {
5228
+ }), foot ? /* @__PURE__ */ h(PanelFoot, {
4950
5229
  size: "md",
4951
5230
  text: t("panels.market.foot")
4952
- }), /* @__PURE__ */ h(SharedSection, {
5231
+ }) : null, /* @__PURE__ */ h(SharedSection, {
4953
5232
  t,
4954
5233
  rows: shared,
4955
5234
  pending,
@@ -4958,22 +5237,19 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
4958
5237
  }));
4959
5238
  }
4960
5239
  function MarketView({ t, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, plugins, settling, mock, defaults = [], changed = {} }) {
4961
- const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
4962
- useEffect(() => {
4963
- if (mock === void 0) setTitles((known) => mergeTitles(known, manifests));
4964
- }, [manifests, mock]);
5240
+ const titles = useMarketTitles(manifests, mock !== void 0);
4965
5241
  const catalog = mock?.manifests ?? manifests;
4966
5242
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
4967
5243
  const effective = mock === void 0 ? capabilities : mock.capabilities;
4968
- const source = liveManifests(marketable, effective, mock === void 0 && installed !== void 0 ? new Set(installed.map((item) => item.unit)) : null);
5244
+ const source = liveManifests(marketable, effective, installedIdSet(mock === void 0 ? installed : void 0));
4969
5245
  const byDefault = new Set(defaults);
4970
- const rows = marketRows(source, effective, mock?.updates ?? updates ?? {}, byDefault, changed);
5246
+ const updateMap = mock?.updates ?? updates ?? {};
5247
+ const rows = marketRows(source, effective, updateMap, byDefault, changed);
4971
5248
  const shared = sharedRows(source, effective);
4972
- const [pending, setPending] = useState(mock?.pending ?? null);
4973
- useEffect(() => {
4974
- onPending?.(pending !== null);
4975
- return () => onPending?.(false);
4976
- }, [pending, onPending]);
5249
+ const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
5250
+ mock,
5251
+ onPending
5252
+ });
4977
5253
  const provision = useHostWrite({
4978
5254
  channel: "provision",
4979
5255
  networkText: t("panels.failed")
@@ -5001,19 +5277,19 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
5001
5277
  setNotice(t("panels.failed"));
5002
5278
  }
5003
5279
  };
5004
- const [confirming, setConfirming] = useState(mock?.confirming ?? null);
5005
- const [failed, setFailed] = useState(mock?.failure ?? null);
5006
- const [notice, setNotice] = useState(mock?.notice ?? null);
5007
- const removing = pending !== null && pending.action === "remove-bundle" && failed?.id !== pending.id ? pending.id : null;
5008
- const installedList = installedRows((mock?.installed ?? installed ?? []).filter((module) => !(settling?.has(module.unit) ?? false) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), titles, byDefault, changed);
5280
+ const removing = removingIdOf(pending, failed);
5281
+ const steady = useHeldRow(pending, (id) => catalog.some((manifest) => manifest.id === id));
5282
+ const pinned = pinnedRowOf(pending, steady.held);
5283
+ const installedList = installedRows((mock?.installed ?? installed ?? []).filter((module) => module.unit !== pinned?.id && (!(settling?.has(module.unit) ?? false) || module.unit === heldIdOf(pending, steady.held)) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), titles, byDefault, changed);
5009
5284
  const pendingRow = pendingRowOf({
5010
5285
  pending,
5011
5286
  removing,
5012
5287
  rows,
5013
5288
  titles
5014
5289
  });
5015
- const shown = pendingRow === void 0 ? rows : [...rows, pendingRow];
5016
- const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
5290
+ const selfRow = workbenchRow(mock === void 0 ? workbench : mock.workbench);
5291
+ const shown = withPinnedRow(pendingRow === void 0 ? rows : [...rows, pendingRow], pinned);
5292
+ const self = selfRow;
5017
5293
  const pluginList = installedPluginRows(mock?.plugins ?? plugins ?? [], byDefault, changed);
5018
5294
  const rowById = new Map([
5019
5295
  ...shown,
@@ -5022,19 +5298,29 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
5022
5298
  ...pluginList
5023
5299
  ].map((row) => [row.id, row]));
5024
5300
  const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
5301
+ const seats = {
5302
+ setPending,
5303
+ setHeld: steady.hold,
5304
+ setConfirming,
5305
+ setFailed,
5306
+ setNotice
5307
+ };
5025
5308
  const act = marketActOf({
5026
5309
  t,
5027
5310
  mocked: mock !== void 0,
5028
5311
  rowOf: (id) => rowById.get(id),
5029
- seats: {
5030
- setPending,
5031
- setConfirming,
5032
- setFailed,
5033
- setNotice
5034
- },
5312
+ seats,
5035
5313
  send: (body) => provision.send(body),
5036
5314
  onChanged
5037
5315
  });
5316
+ useSettleHold({
5317
+ pending,
5318
+ landed: pendingLanded(pending, updateMap, effective, workbench?.installed),
5319
+ t,
5320
+ onChanged,
5321
+ setPending,
5322
+ setFailed
5323
+ });
5038
5324
  const settled = marketSettled(freshness, installedRead);
5039
5325
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
5040
5326
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ h(MarketChecking, { t });
@@ -5150,6 +5436,12 @@ function currentSessionId(list, panelActive) {
5150
5436
  if (panelActive) return void 0;
5151
5437
  return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
5152
5438
  }
5439
+ function orderByRecency(rows) {
5440
+ return [...rows].sort((left, right) => {
5441
+ if (left.updatedAt !== right.updatedAt) return right.updatedAt - left.updatedAt;
5442
+ return left.id < right.id ? -1 : 1;
5443
+ });
5444
+ }
5153
5445
  function orderSessionRows(rows, pinnedIds, archivedIds) {
5154
5446
  const placeholders = [];
5155
5447
  const leading = [];
@@ -5176,7 +5468,7 @@ function sessionRows(workspaceSessionIds, list, archivedIds, current) {
5176
5468
  if (row.blank && row.id !== current) continue;
5177
5469
  rows.push(row);
5178
5470
  }
5179
- return rows;
5471
+ return orderByRecency(rows);
5180
5472
  }
5181
5473
  //#endregion
5182
5474
  //#region src/modules/sessions/model/scroll-edges.ts
@@ -6354,134 +6646,576 @@ function registerMarketPanel(ctx, units) {
6354
6646
  }, MarketPanel));
6355
6647
  }
6356
6648
  //#endregion
6357
- //#region src/shared/api/diy.ts
6358
- var DIY_PRESET_ID = "workbench-diy";
6359
- var WORKSHOP_RELATIVE = "workbench/diy";
6360
- var WORKSHOP_TITLE = "工作台DIY";
6361
- var WORKSHOP_PAST_TITLES = ["DIY 工坊", "工作台自带 · DIY 模块住这儿"];
6362
- function isWorkshopPath(path) {
6363
- return path.replace(/\\/g, "/").replace(/\/+$/, "").endsWith(`/${WORKSHOP_RELATIVE}`);
6364
- }
6649
+ //#region src/shared/api/config-sync.ts
6650
+ var CONFIG_SYNC_ROUTE = "config-sync";
6651
+ var CONFIG_SYNC_RESOURCE = "configSync";
6365
6652
  //#endregion
6366
- //#region src/app/units/index.ts
6367
- var CLIENT_UNITS = [];
6368
- function assembleClientUnits(registry) {
6369
- for (const face of CLIENT_UNITS) registry.register(face);
6653
+ //#region src/shared/hooks/panel-state-report.ts
6654
+ var FLUSH_MS = 400;
6655
+ var workspace = null;
6656
+ var timer = null;
6657
+ var pending = /* @__PURE__ */ new Map();
6658
+ function unitOfRoute(route) {
6659
+ const cut = route.indexOf("/");
6660
+ return cut <= 0 ? null : route.slice(0, cut);
6370
6661
  }
6371
- //#endregion
6372
- //#region src/shared/api/unit-manifests.ts
6373
- var UNIT_MANIFESTS_ROUTE = "unit-manifests";
6374
- //#endregion
6375
- //#region src/app/units/manifests.ts
6376
- function createUnitManifestLoader(options = {}) {
6377
- let inFlight = false;
6378
- let queued = false;
6379
- let watching = false;
6380
- const subscribeFacts = options.subscribeFacts ?? subscribeFactRevision;
6381
- const load = async (registry) => {
6382
- if (inFlight) {
6383
- queued = true;
6384
- return;
6385
- }
6386
- inFlight = true;
6387
- try {
6388
- const response = await apiGet(UNIT_MANIFESTS_ROUTE).catch(() => null);
6389
- if (response?.ok === true && Array.isArray(response.manifests)) registry.setManifests(response.manifests, Array.isArray(response.installable) ? response.installable : void 0);
6390
- } finally {
6391
- inFlight = false;
6392
- if (queued) {
6393
- queued = false;
6394
- load(registry);
6395
- }
6396
- }
6397
- };
6398
- return (registry) => {
6399
- if (!watching) {
6400
- watching = true;
6401
- subscribeFacts(factOfRoute(UNIT_MANIFESTS_ROUTE), () => void load(registry));
6402
- }
6403
- load(registry);
6404
- };
6662
+ function setPanelWorkspace(path) {
6663
+ if (path === workspace) return;
6664
+ const previous = workspace;
6665
+ workspace = path;
6666
+ if (previous !== null) pending.clear();
6405
6667
  }
6406
- var BootGate_module_default = {
6407
- actions: "_actions_jlw8j_1",
6408
- progress: "_progress_jlw8j_2",
6409
- commandRow: "_commandRow_jlw8j_3",
6410
- bridge: "_bridge_jlw8j_4",
6411
- raw: "_raw_jlw8j_5",
6412
- gate: "_gate_jlw8j_9",
6413
- card: "_card_jlw8j_20",
6414
- title: "_title_jlw8j_35",
6415
- hint: "_hint_jlw8j_43",
6416
- steps: "_steps_jlw8j_50",
6417
- step: "_step_jlw8j_50",
6418
- mark: "_mark_jlw8j_77",
6419
- label: "_label_jlw8j_102",
6420
- detail: "_detail_jlw8j_106",
6421
- elapsed: "_elapsed_jlw8j_124",
6422
- error: "_error_jlw8j_132",
6423
- copy: "_copy_jlw8j_158",
6424
- command: "_command_jlw8j_3",
6425
- buttons: "_buttons_jlw8j_191",
6426
- mockSlot: "_mockSlot_jlw8j_198",
6427
- button: "_button_jlw8j_191",
6428
- fixTitle: "_fixTitle_jlw8j_249",
6429
- rawSummary: "_rawSummary_jlw8j_282",
6430
- bridgeLines: "_bridgeLines_jlw8j_292",
6431
- bridgeLine: "_bridgeLine_jlw8j_292",
6432
- link: "_link_jlw8j_309",
6433
- loading: "_loading_jlw8j_323",
6434
- loadingMotion: "_loadingMotion_jlw8j_332",
6435
- "wb-spin": "_wb-spin_jlw8j_1",
6436
- loadingTrack: "_loadingTrack_jlw8j_337",
6437
- loadingArc: "_loadingArc_jlw8j_338",
6438
- "wb-dash": "_wb-dash_jlw8j_1"
6439
- };
6440
- //#endregion
6441
- //#region src/app/layouts/env-gate/gate-text.ts
6442
- function failedStepText(guidance, t) {
6443
- if (guidance === "path") return t("env.stepFailed.path");
6444
- if (guidance === "shell") return t("env.stepFailed.shell");
6445
- return t("env.stepFailed.install");
6668
+ function reportPanelRead(input) {
6669
+ pending.set(`${input.unit}\u0000${input.route}`, {
6670
+ unit: input.unit,
6671
+ route: input.route,
6672
+ phase: input.phase,
6673
+ at: Date.now(),
6674
+ ...input.error === void 0 ? {} : { error: input.error }
6675
+ });
6676
+ if (timer !== null) return;
6677
+ timer = setTimeout(flush, FLUSH_MS);
6446
6678
  }
6447
- function stepDetailText(step, snapshot, t) {
6448
- if (step.status === "failed") return failedStepText(snapshot.guidance, t);
6449
- if (step.id === "bridge") {
6450
- if (step.status === "ok") return t("env.bridge.ok");
6451
- if (step.status === "warn") return t("env.bridge.short");
6452
- }
6453
- if (step.id === "warm") {
6454
- if (step.status === "ok") return t("env.warm.done", { n: step.detail ?? "0" });
6455
- if (step.status === "warn") return t("env.warm.short");
6456
- }
6457
- return step.detail ?? "";
6679
+ function reportPanelCrash(input) {
6680
+ const target = workspace;
6681
+ if (target === null) return;
6682
+ apiPost(`${PANEL_STATE_PATH}/crash`, {
6683
+ workspace: target,
6684
+ unit: input.unit,
6685
+ reason: input.reason,
6686
+ at: Date.now()
6687
+ }).catch(() => void 0);
6458
6688
  }
6459
- var OPENCLI_EXTENSION_URL = "https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk";
6460
- function bridgeAdvice(issue) {
6461
- if (issue === "daemon") return { textKey: "env.bridge.daemon" };
6462
- if (issue === "extension") return {
6463
- textKey: "env.bridge.extension",
6464
- link: {
6465
- labelKey: "env.bridge.extensionLink",
6466
- href: OPENCLI_EXTENSION_URL
6467
- }
6468
- };
6469
- if (issue === "profile") return { textKey: "env.bridge.profile" };
6470
- if (issue === "stale") return { textKey: "env.bridge.stale" };
6471
- return { textKey: "env.bridge.unknown" };
6689
+ function flush() {
6690
+ timer = null;
6691
+ const target = workspace;
6692
+ const cards = [...pending.values()];
6693
+ pending.clear();
6694
+ if (target === null || cards.length === 0) return;
6695
+ apiPost(`${PANEL_STATE_PATH}/cards`, {
6696
+ workspace: target,
6697
+ cards
6698
+ }).catch(() => void 0);
6472
6699
  }
6473
6700
  //#endregion
6474
- //#region src/app/layouts/env-gate/gate-deadline.ts
6475
- function createGateDeadline(giveUpMs, expire) {
6476
- const timer = setTimeout(expire, giveUpMs);
6477
- return { disarm() {
6478
- clearTimeout(timer);
6479
- } };
6701
+ //#region src/shared/hooks/use-api-resource.ts
6702
+ var use_api_resource_exports = /* @__PURE__ */ __exportAll({
6703
+ readKeyOf: () => readKeyOf,
6704
+ requestResource: () => requestResource,
6705
+ resourceIdentity: () => resourceIdentity,
6706
+ useApiResource: () => useApiResource
6707
+ });
6708
+ function resourceIdentity(route, query, override) {
6709
+ return override ?? requestKeyOf(route, query);
6480
6710
  }
6481
- //#endregion
6482
- //#region src/app/layouts/env-gate/gate-dom.ts
6483
- var SVG_NS = "http://www.w3.org/2000/svg";
6484
- function svgIcon(kind) {
6711
+ function readKeyOf(identity, refreshToken, factRev) {
6712
+ return `${identity}@${String(refreshToken)}@${String(factRev)}`;
6713
+ }
6714
+ function requestKeyOf(route, query) {
6715
+ return `${route}?${Object.entries(query).filter(([, value]) => value !== void 0).sort(([a], [b]) => a.localeCompare(b)).map(([key, value]) => `${key}=${String(value)}`).join("&")}`;
6716
+ }
6717
+ var inflight = /* @__PURE__ */ new Map();
6718
+ function requestResource(route, query, key) {
6719
+ const pending = inflight.get(key);
6720
+ if (pending !== void 0) {
6721
+ pending.waiters += 1;
6722
+ return {
6723
+ task: pending.task,
6724
+ release: () => release(key, pending)
6725
+ };
6726
+ }
6727
+ const controller = new AbortController();
6728
+ const entry = {
6729
+ task: apiGet(route, query, { signal: controller.signal }).finally(() => {
6730
+ if (inflight.get(key) === entry) inflight.delete(key);
6731
+ }),
6732
+ controller,
6733
+ waiters: 1
6734
+ };
6735
+ inflight.set(key, entry);
6736
+ return {
6737
+ task: entry.task,
6738
+ release: () => release(key, entry)
6739
+ };
6740
+ }
6741
+ function release(key, entry) {
6742
+ if (inflight.get(key) !== entry) return;
6743
+ entry.waiters -= 1;
6744
+ if (entry.waiters > 0) return;
6745
+ inflight.delete(key);
6746
+ entry.controller.abort();
6747
+ }
6748
+ function useApiResource(route, query, refreshToken, options = {}) {
6749
+ const enabled = options.enabled !== false;
6750
+ const identity = resourceIdentity(route, query, options.key);
6751
+ const factRev = useFactRevision(options.fact ?? factOfRoute(route));
6752
+ const key = readKeyOf(identity, refreshToken, factRev);
6753
+ const [state, setState] = useState(() => enabled ? { phase: "loading" } : { phase: "idle" });
6754
+ const lastIdentity = useRef(null);
6755
+ const queryRef = useRef(query);
6756
+ useEffect(() => {
6757
+ queryRef.current = query;
6758
+ });
6759
+ useEffect(() => {
6760
+ if (!enabled) {
6761
+ lastIdentity.current = null;
6762
+ setState({ phase: "idle" });
6763
+ return;
6764
+ }
6765
+ let cancelled = false;
6766
+ const sameIdentity = lastIdentity.current === identity;
6767
+ lastIdentity.current = identity;
6768
+ setState((prev) => sameIdentity && prev.value !== void 0 ? {
6769
+ phase: "loading",
6770
+ value: prev.value,
6771
+ ...prev.at === void 0 ? {} : { at: prev.at }
6772
+ } : { phase: "loading" });
6773
+ const flight = requestResource(route, queryRef.current, key);
6774
+ const owner = unitOfRoute(route);
6775
+ if (owner !== null) reportPanelRead({
6776
+ unit: owner,
6777
+ route,
6778
+ phase: "loading"
6779
+ });
6780
+ flight.task.then((response) => {
6781
+ if (cancelled) return;
6782
+ if (response.ok) {
6783
+ setState({
6784
+ phase: "ready",
6785
+ value: response,
6786
+ at: Date.now()
6787
+ });
6788
+ if (owner !== null) reportPanelRead({
6789
+ unit: owner,
6790
+ route,
6791
+ phase: "ready"
6792
+ });
6793
+ return;
6794
+ }
6795
+ setState({
6796
+ phase: "error",
6797
+ error: response.error
6798
+ });
6799
+ if (owner !== null) reportPanelRead({
6800
+ unit: owner,
6801
+ route,
6802
+ phase: "error",
6803
+ error: {
6804
+ code: response.error.code,
6805
+ message: response.error.message
6806
+ }
6807
+ });
6808
+ }).catch((reason) => {
6809
+ if (cancelled) return;
6810
+ const message = reason instanceof Error ? reason.message : String(reason);
6811
+ setState({
6812
+ phase: "error",
6813
+ error: {
6814
+ code: "network",
6815
+ message
6816
+ }
6817
+ });
6818
+ if (owner !== null) reportPanelRead({
6819
+ unit: owner,
6820
+ route,
6821
+ phase: "error",
6822
+ error: {
6823
+ code: "network",
6824
+ message
6825
+ }
6826
+ });
6827
+ });
6828
+ return () => {
6829
+ cancelled = true;
6830
+ flight.release();
6831
+ };
6832
+ }, [
6833
+ key,
6834
+ identity,
6835
+ route,
6836
+ refreshToken,
6837
+ factRev,
6838
+ enabled,
6839
+ options.fact
6840
+ ]);
6841
+ return state;
6842
+ }
6843
+ var ConfigSyncSection_module_default = {
6844
+ body: "_body_lw2ph_1",
6845
+ lead: "_lead_lw2ph_7",
6846
+ sources: "_sources_lw2ph_14",
6847
+ sourcesLabel: "_sourcesLabel_lw2ph_21",
6848
+ sourceOn: "_sourceOn_lw2ph_26",
6849
+ sourceCount: "_sourceCount_lw2ph_29",
6850
+ reading: "_reading_lw2ph_36",
6851
+ status: "_status_lw2ph_42",
6852
+ failure: "_failure_lw2ph_52",
6853
+ failureTitle: "_failureTitle_lw2ph_62",
6854
+ failureHint: "_failureHint_lw2ph_69",
6855
+ failureAction: "_failureAction_lw2ph_74",
6856
+ rows: "_rows_lw2ph_80",
6857
+ row: "_row_lw2ph_80",
6858
+ head: "_head_lw2ph_99",
6859
+ pick: "_pick_lw2ph_106",
6860
+ code: "_code_lw2ph_118",
6861
+ missing: "_missing_lw2ph_123",
6862
+ conflict: "_conflict_lw2ph_124",
6863
+ foot: "_foot_lw2ph_130"
6864
+ };
6865
+ //#endregion
6866
+ //#region src/app/layouts/config-sync/ConfigSyncSection.tsx
6867
+ var AUTO_RETRY_MS = 1200;
6868
+ var DIFF_MAX_LINES = 9;
6869
+ var TAG_KEYS = {
6870
+ new: "configSync.tag.new",
6871
+ differs: "configSync.tag.differs"
6872
+ };
6873
+ function codeToolbarLabels(t) {
6874
+ return {
6875
+ codeLabel: t("configSync.code.lang"),
6876
+ wrapLabel: t("configSync.code.wrap"),
6877
+ unwrapLabel: t("configSync.code.unwrap")
6878
+ };
6879
+ }
6880
+ function diffLabels(t) {
6881
+ return {
6882
+ ...codeToolbarLabels(t),
6883
+ copy: t("configSync.code.copy"),
6884
+ copied: t("configSync.code.copied"),
6885
+ collapseAria: t("configSync.code.collapseAria"),
6886
+ expandAria: (hidden) => t("configSync.code.expandAria", { count: hidden }),
6887
+ collapse: t("configSync.code.collapse"),
6888
+ expand: (hidden) => t("configSync.code.expand", { count: hidden })
6889
+ };
6890
+ }
6891
+ function SourcePicker({ t, profiles, source, onPick }) {
6892
+ if (profiles.length === 0) return null;
6893
+ return /* @__PURE__ */ h("div", {
6894
+ className: ConfigSyncSection_module_default.sources,
6895
+ role: "group",
6896
+ "aria-label": t("configSync.source")
6897
+ }, /* @__PURE__ */ h("span", { className: ConfigSyncSection_module_default.sourcesLabel }, t("configSync.source")), profiles.map((profile) => /* @__PURE__ */ h(Button, {
6898
+ key: profile.name,
6899
+ variant: profile.name === source ? "outline" : "ghost",
6900
+ size: "sm",
6901
+ className: profile.name === source ? ConfigSyncSection_module_default.sourceOn : void 0,
6902
+ "aria-pressed": profile.name === source,
6903
+ title: profile.readable ? t("configSync.sourceRows", {
6904
+ name: profile.name,
6905
+ count: profile.candidates
6906
+ }) : t("configSync.sourceBroken"),
6907
+ onClick: () => onPick(profile.name)
6908
+ }, profile.name, /* @__PURE__ */ h("span", { className: ConfigSyncSection_module_default.sourceCount }, profile.readable ? profile.candidates : t("configSync.sourceDead")))));
6909
+ }
6910
+ function SourceRows({ t, rows, picked, profile, onToggle }) {
6911
+ return /* @__PURE__ */ h("ul", { className: ConfigSyncSection_module_default.rows }, rows.map((row) => /* @__PURE__ */ h("li", {
6912
+ key: row.key,
6913
+ className: ConfigSyncSection_module_default.row
6914
+ }, /* @__PURE__ */ h("div", { className: ConfigSyncSection_module_default.head }, /* @__PURE__ */ h(Checkbox, {
6915
+ checked: picked.includes(row.key),
6916
+ label: row.id,
6917
+ title: row.state === "differs" ? t("configSync.conflictNote") : void 0,
6918
+ className: ConfigSyncSection_module_default.pick,
6919
+ onChange: (next) => onToggle(row.key, next)
6920
+ }), /* @__PURE__ */ h(Tag, { tone: row.state === "differs" ? "warning" : "success" }, t(TAG_KEYS[row.state] ?? "configSync.tag.new"))), row.ownBody === null ? /* @__PURE__ */ h(CodeBlock, {
6921
+ code: row.body,
6922
+ lang: "yaml",
6923
+ className: ConfigSyncSection_module_default.code,
6924
+ copyLabel: t("configSync.code.copy"),
6925
+ copiedLabel: t("configSync.code.copied"),
6926
+ toolbarLabels: codeToolbarLabels(t)
6927
+ }) : /* @__PURE__ */ h(DiffBlock, {
6928
+ diffs: [{
6929
+ path: row.id,
6930
+ oldText: row.ownBody,
6931
+ newText: row.body
6932
+ }],
6933
+ labels: diffLabels(t),
6934
+ maxLines: DIFF_MAX_LINES,
6935
+ className: ConfigSyncSection_module_default.code
6936
+ }), row.missing.map((pkg) => /* @__PURE__ */ h("span", {
6937
+ key: pkg,
6938
+ className: ConfigSyncSection_module_default.missing
6939
+ }, t("configSync.missing", {
6940
+ pkg,
6941
+ profile
6942
+ }))), row.state === "differs" && picked.includes(row.key) ? /* @__PURE__ */ h("span", { className: ConfigSyncSection_module_default.conflict }, t("configSync.conflictNote")) : null)));
6943
+ }
6944
+ function AppliedRows({ t, applied }) {
6945
+ return /* @__PURE__ */ h(Note, null, t("configSync.applied"), applied.written.length === 0 ? "" : ` · ${t("configSync.appliedIds", { ids: applied.written.join("、") })}`, applied.skipped.length === 0 ? "" : ` · ${t("configSync.skippedIds", { ids: applied.skipped.join("、") })}`);
6946
+ }
6947
+ function ReadingRow({ t }) {
6948
+ return /* @__PURE__ */ h("div", { className: ConfigSyncSection_module_default.reading }, /* @__PURE__ */ h("p", {
6949
+ className: ConfigSyncSection_module_default.status,
6950
+ role: "status"
6951
+ }, /* @__PURE__ */ h(StateDot, { state: "ongoing" }), t("configSync.loading")), /* @__PURE__ */ h(SkeletonRows, { rows: 3 }));
6952
+ }
6953
+ function FailureRow({ t, blocker, onRetry }) {
6954
+ return /* @__PURE__ */ h("div", {
6955
+ className: ConfigSyncSection_module_default.failure,
6956
+ role: "alert",
6957
+ "data-config-sync-failure": ""
6958
+ }, /* @__PURE__ */ h("span", { className: ConfigSyncSection_module_default.failureTitle }, /* @__PURE__ */ h(StateDot, { state: "error" }), blocker.title), blocker.hint === void 0 ? null : /* @__PURE__ */ h("span", { className: ConfigSyncSection_module_default.failureHint }, blocker.hint), /* @__PURE__ */ h(Button, {
6959
+ size: "sm",
6960
+ variant: "ghost",
6961
+ className: ConfigSyncSection_module_default.failureAction,
6962
+ onClick: onRetry
6963
+ }, t("blocker.retry")));
6964
+ }
6965
+ function ConfigSyncSection({ t }) {
6966
+ const [source, setSource] = useState("");
6967
+ const [revision, setRevision] = useState(0);
6968
+ const [guard, setGuard] = useState(0);
6969
+ const [picks, setPicks] = useState(null);
6970
+ const [applied, setApplied] = useState(null);
6971
+ const snapshot = useApiResource(CONFIG_SYNC_ROUTE, source === "" ? {} : { source }, revision);
6972
+ const value = snapshot.phase === "ready" ? snapshot.value : void 0;
6973
+ const failure = useMemo(() => {
6974
+ if (snapshot.phase !== "error") return null;
6975
+ const blocker = blockerOfError(snapshot.error, t);
6976
+ return blocker.hint === void 0 ? {
6977
+ ...blocker,
6978
+ hint: t("configSync.readHint")
6979
+ } : blocker;
6980
+ }, [
6981
+ snapshot.phase,
6982
+ snapshot.error,
6983
+ t
6984
+ ]);
6985
+ useEffect(() => {
6986
+ if (failure === null || guard > 0) return void 0;
6987
+ const timer = setTimeout(() => {
6988
+ setGuard((current) => current + 1);
6989
+ setRevision((current) => current + 1);
6990
+ }, AUTO_RETRY_MS);
6991
+ return () => clearTimeout(timer);
6992
+ }, [failure, guard]);
6993
+ const write = useHostWrite({
6994
+ channel: "actions",
6995
+ resource: CONFIG_SYNC_RESOURCE,
6996
+ networkText: t("configSync.failed")
6997
+ });
6998
+ const busy = useVisibleBusy(write.busy, 500);
6999
+ const reading = useVisibleBusy(snapshot.phase === "loading", 500);
7000
+ const rows = useMemo(() => value?.rows ?? [], [value]);
7001
+ const signature = `${value?.source ?? ""}|${String(revision)}|${rows.map((row) => `${row.key}:${row.state}:${row.missing.join("+")}`).join(",")}`;
7002
+ const defaults = rows.filter((row) => row.state === "new").map((row) => row.key);
7003
+ const picked = picks !== null && picks.at === signature ? picks.keys : defaults;
7004
+ const chosen = rows.filter((row) => picked.includes(row.key));
7005
+ const broken = value !== void 0 && value.profiles.length > 0 && value.reason !== void 0 ? {
7006
+ path: `${value.home}/profiles/${value.source}/cordis.patch.yml`,
7007
+ reason: value.reason
7008
+ } : null;
7009
+ const toggle = (key, next) => {
7010
+ const rest = picked.filter((item) => item !== key);
7011
+ setPicks({
7012
+ at: signature,
7013
+ keys: next ? [...rest, key] : rest
7014
+ });
7015
+ };
7016
+ const reread = () => {
7017
+ setApplied(null);
7018
+ setPicks(null);
7019
+ setGuard(0);
7020
+ setRevision((current) => current + 1);
7021
+ };
7022
+ const pickSource = (name) => {
7023
+ setApplied(null);
7024
+ setPicks(null);
7025
+ setGuard(0);
7026
+ setSource(name);
7027
+ };
7028
+ const apply = () => {
7029
+ if (value === void 0 || chosen.length === 0) return;
7030
+ const overwrite = chosen.filter((row) => row.state === "differs").map((row) => row.key);
7031
+ write.send({
7032
+ source: value.source,
7033
+ keys: chosen.map((row) => row.key),
7034
+ overwrite
7035
+ }).then((outcome) => {
7036
+ if (!outcome.ok) return;
7037
+ setApplied(outcome.value);
7038
+ setRevision((current) => current + 1);
7039
+ });
7040
+ };
7041
+ return /* @__PURE__ */ h(SettingsSection, {
7042
+ label: t("configSync.nav"),
7043
+ title: t("configSync.nav"),
7044
+ action: failure === null ? /* @__PURE__ */ h(Button, {
7045
+ variant: "ghost",
7046
+ size: "sm",
7047
+ icon: /* @__PURE__ */ h(IconRefreshOutlineRegular, {
7048
+ size: 16,
7049
+ "aria-hidden": "true"
7050
+ }),
7051
+ onClick: reread,
7052
+ disabled: reading.busy,
7053
+ title: t("configSync.refresh")
7054
+ }, t("configSync.refresh")) : void 0
7055
+ }, /* @__PURE__ */ h("div", { className: ConfigSyncSection_module_default.body }, /* @__PURE__ */ h("p", { className: ConfigSyncSection_module_default.lead }, t("configSync.lead")), value === void 0 ? null : /* @__PURE__ */ h(SourcePicker, {
7056
+ t,
7057
+ profiles: value.profiles,
7058
+ source: value.source,
7059
+ onPick: pickSource
7060
+ }), reading.busy ? /* @__PURE__ */ h(ReadingRow, { t }) : null, failure !== null && !reading.busy ? /* @__PURE__ */ h(FailureRow, {
7061
+ t,
7062
+ blocker: failure,
7063
+ onRetry: reread
7064
+ }) : null, write.failed !== null ? /* @__PURE__ */ h(Note, {
7065
+ tone: "problem",
7066
+ role: "alert"
7067
+ }, write.failed) : null, applied !== null ? /* @__PURE__ */ h(AppliedRows, {
7068
+ t,
7069
+ applied
7070
+ }) : null, value !== void 0 && !reading.busy ? /* @__PURE__ */ h(Fragment, null, value.profiles.length === 0 ? /* @__PURE__ */ h(Note, { tone: "problem" }, t("configSync.noSource")) : null, broken !== null ? /* @__PURE__ */ h(Note, { tone: "problem" }, t("configSync.unreadable", {
7071
+ path: broken.path,
7072
+ reason: broken.reason
7073
+ })) : null, value.emptyProviders ? /* @__PURE__ */ h(Note, { tone: "problem" }, t("configSync.emptyProviders")) : null, rows.length === 0 ? /* @__PURE__ */ h(Note, null, t("configSync.nothing")) : null, rows.length > 0 ? /* @__PURE__ */ h(SourceRows, {
7074
+ t,
7075
+ rows,
7076
+ picked,
7077
+ profile: value.self,
7078
+ onToggle: toggle
7079
+ }) : null, rows.length > 0 ? /* @__PURE__ */ h("div", { className: ConfigSyncSection_module_default.foot }, /* @__PURE__ */ h(Button, {
7080
+ variant: "primary",
7081
+ size: "md",
7082
+ icon: /* @__PURE__ */ h(IconRefreshOutlineRegular, {
7083
+ size: 16,
7084
+ "aria-hidden": "true"
7085
+ }),
7086
+ disabled: chosen.length === 0 || busy.busy,
7087
+ onClick: apply
7088
+ }, chosen.length === 0 ? t("configSync.applyNone") : busy.busy ? t("configSync.applying") : t("configSync.apply", { count: chosen.length }))) : null) : null));
7089
+ }
7090
+ //#endregion
7091
+ //#region src/shared/api/diy.ts
7092
+ var DIY_PRESET_ID = "workbench-diy";
7093
+ var WORKSHOP_RELATIVE = "workbench/diy";
7094
+ var WORKSHOP_TITLE = "工作台DIY";
7095
+ var WORKSHOP_PAST_TITLES = ["DIY 工坊", "工作台自带 · DIY 模块住这儿"];
7096
+ function isWorkshopPath(path) {
7097
+ return path.replace(/\\/g, "/").replace(/\/+$/, "").endsWith(`/${WORKSHOP_RELATIVE}`);
7098
+ }
7099
+ //#endregion
7100
+ //#region src/app/units/index.ts
7101
+ var CLIENT_UNITS = [];
7102
+ function assembleClientUnits(registry) {
7103
+ for (const face of CLIENT_UNITS) registry.register(face);
7104
+ }
7105
+ //#endregion
7106
+ //#region src/shared/api/unit-manifests.ts
7107
+ var UNIT_MANIFESTS_ROUTE = "unit-manifests";
7108
+ //#endregion
7109
+ //#region src/app/units/manifests.ts
7110
+ function createUnitManifestLoader(options = {}) {
7111
+ let inFlight = false;
7112
+ let queued = false;
7113
+ let watching = false;
7114
+ const subscribeFacts = options.subscribeFacts ?? subscribeFactRevision;
7115
+ const load = async (registry) => {
7116
+ if (inFlight) {
7117
+ queued = true;
7118
+ return;
7119
+ }
7120
+ inFlight = true;
7121
+ try {
7122
+ const response = await apiGet(UNIT_MANIFESTS_ROUTE).catch(() => null);
7123
+ if (response?.ok === true && Array.isArray(response.manifests)) registry.setManifests(response.manifests, Array.isArray(response.installable) ? response.installable : void 0);
7124
+ } finally {
7125
+ inFlight = false;
7126
+ if (queued) {
7127
+ queued = false;
7128
+ load(registry);
7129
+ }
7130
+ }
7131
+ };
7132
+ return (registry) => {
7133
+ if (!watching) {
7134
+ watching = true;
7135
+ subscribeFacts(factOfRoute(UNIT_MANIFESTS_ROUTE), () => void load(registry));
7136
+ }
7137
+ load(registry);
7138
+ };
7139
+ }
7140
+ var BootGate_module_default = {
7141
+ actions: "_actions_jlw8j_1",
7142
+ progress: "_progress_jlw8j_2",
7143
+ commandRow: "_commandRow_jlw8j_3",
7144
+ bridge: "_bridge_jlw8j_4",
7145
+ raw: "_raw_jlw8j_5",
7146
+ gate: "_gate_jlw8j_9",
7147
+ card: "_card_jlw8j_20",
7148
+ title: "_title_jlw8j_35",
7149
+ hint: "_hint_jlw8j_43",
7150
+ steps: "_steps_jlw8j_50",
7151
+ step: "_step_jlw8j_50",
7152
+ mark: "_mark_jlw8j_77",
7153
+ label: "_label_jlw8j_102",
7154
+ detail: "_detail_jlw8j_106",
7155
+ elapsed: "_elapsed_jlw8j_124",
7156
+ error: "_error_jlw8j_132",
7157
+ copy: "_copy_jlw8j_158",
7158
+ command: "_command_jlw8j_3",
7159
+ buttons: "_buttons_jlw8j_191",
7160
+ mockSlot: "_mockSlot_jlw8j_198",
7161
+ button: "_button_jlw8j_191",
7162
+ fixTitle: "_fixTitle_jlw8j_249",
7163
+ rawSummary: "_rawSummary_jlw8j_282",
7164
+ bridgeLines: "_bridgeLines_jlw8j_292",
7165
+ bridgeLine: "_bridgeLine_jlw8j_292",
7166
+ link: "_link_jlw8j_309",
7167
+ loading: "_loading_jlw8j_323",
7168
+ loadingMotion: "_loadingMotion_jlw8j_332",
7169
+ "wb-spin": "_wb-spin_jlw8j_1",
7170
+ loadingTrack: "_loadingTrack_jlw8j_337",
7171
+ loadingArc: "_loadingArc_jlw8j_338",
7172
+ "wb-dash": "_wb-dash_jlw8j_1"
7173
+ };
7174
+ //#endregion
7175
+ //#region src/app/layouts/env-gate/gate-text.ts
7176
+ function failedStepText(guidance, t) {
7177
+ if (guidance === "path") return t("env.stepFailed.path");
7178
+ if (guidance === "shell") return t("env.stepFailed.shell");
7179
+ return t("env.stepFailed.install");
7180
+ }
7181
+ function stepDetailText(step, snapshot, t) {
7182
+ if (step.status === "failed") return failedStepText(snapshot.guidance, t);
7183
+ if (step.id === "bridge") {
7184
+ if (step.status === "ok") return t("env.bridge.ok");
7185
+ if (step.status === "warn") return t("env.bridge.short");
7186
+ }
7187
+ if (step.id === "warm") {
7188
+ if (step.status === "ok") return t("env.warm.done", { n: step.detail ?? "0" });
7189
+ if (step.status === "warn") return t("env.warm.short");
7190
+ }
7191
+ return step.detail ?? "";
7192
+ }
7193
+ var OPENCLI_EXTENSION_URL = "https://chromewebstore.google.com/detail/opencli/ildkmabpimmkaediidaifkhjpohdnifk";
7194
+ function bridgeAdvice(issue) {
7195
+ if (issue === "daemon") return { textKey: "env.bridge.daemon" };
7196
+ if (issue === "extension") return {
7197
+ textKey: "env.bridge.extension",
7198
+ link: {
7199
+ labelKey: "env.bridge.extensionLink",
7200
+ href: OPENCLI_EXTENSION_URL
7201
+ }
7202
+ };
7203
+ if (issue === "profile") return { textKey: "env.bridge.profile" };
7204
+ if (issue === "stale") return { textKey: "env.bridge.stale" };
7205
+ return { textKey: "env.bridge.unknown" };
7206
+ }
7207
+ //#endregion
7208
+ //#region src/app/layouts/env-gate/gate-deadline.ts
7209
+ function createGateDeadline(giveUpMs, expire) {
7210
+ const timer = setTimeout(expire, giveUpMs);
7211
+ return { disarm() {
7212
+ clearTimeout(timer);
7213
+ } };
7214
+ }
7215
+ //#endregion
7216
+ //#region src/app/layouts/env-gate/gate-dom.ts
7217
+ var SVG_NS = "http://www.w3.org/2000/svg";
7218
+ function svgIcon(kind) {
6485
7219
  const svg = document.createElementNS(SVG_NS, "svg");
6486
7220
  svg.setAttribute("width", "14");
6487
7221
  svg.setAttribute("height", "14");
@@ -8292,54 +9026,6 @@ function createSuiteWorld(input) {
8292
9026
  }
8293
9027
  };
8294
9028
  }
8295
- //#endregion
8296
- //#region src/shared/hooks/panel-state-report.ts
8297
- var FLUSH_MS = 400;
8298
- var workspace = null;
8299
- var timer = null;
8300
- var pending = /* @__PURE__ */ new Map();
8301
- function unitOfRoute(route) {
8302
- const cut = route.indexOf("/");
8303
- return cut <= 0 ? null : route.slice(0, cut);
8304
- }
8305
- function setPanelWorkspace(path) {
8306
- if (path === workspace) return;
8307
- const previous = workspace;
8308
- workspace = path;
8309
- if (previous !== null) pending.clear();
8310
- }
8311
- function reportPanelRead(input) {
8312
- pending.set(`${input.unit}\u0000${input.route}`, {
8313
- unit: input.unit,
8314
- route: input.route,
8315
- phase: input.phase,
8316
- at: Date.now(),
8317
- ...input.error === void 0 ? {} : { error: input.error }
8318
- });
8319
- if (timer !== null) return;
8320
- timer = setTimeout(flush, FLUSH_MS);
8321
- }
8322
- function reportPanelCrash(input) {
8323
- const target = workspace;
8324
- if (target === null) return;
8325
- apiPost(`${PANEL_STATE_PATH}/crash`, {
8326
- workspace: target,
8327
- unit: input.unit,
8328
- reason: input.reason,
8329
- at: Date.now()
8330
- }).catch(() => void 0);
8331
- }
8332
- function flush() {
8333
- timer = null;
8334
- const target = workspace;
8335
- const cards = [...pending.values()];
8336
- pending.clear();
8337
- if (target === null || cards.length === 0) return;
8338
- apiPost(`${PANEL_STATE_PATH}/cards`, {
8339
- workspace: target,
8340
- cards
8341
- }).catch(() => void 0);
8342
- }
8343
9029
  var Rightbar_module_default = {
8344
9030
  panel: "_panel_135e7_1",
8345
9031
  columns: "_columns_135e7_18",
@@ -8892,15 +9578,23 @@ function WorkspaceSearchField({ t, query, onQuery, onCursor, onSubmit }) {
8892
9578
  //#region src/app/layouts/sidebar/workspace-groups.ts
8893
9579
  function workspaceSections(items, headings) {
8894
9580
  const workspaces = [];
9581
+ const defaults = [];
8895
9582
  const workshop = [];
8896
9583
  for (const item of items) if (isWorkshopPath(item.path)) workshop.push(item);
9584
+ else if (item.title === "default-workspace") defaults.push(item);
8897
9585
  else workspaces.push(item);
9586
+ const special = defaults.length > 0 || workshop.length > 0;
8898
9587
  const sections = [];
8899
9588
  if (workspaces.length > 0) sections.push({
8900
9589
  id: "workspaces",
8901
- heading: workshop.length > 0 ? headings.workspaces : null,
9590
+ heading: special ? headings.workspaces : null,
8902
9591
  items: workspaces
8903
9592
  });
9593
+ if (defaults.length > 0) sections.push({
9594
+ id: "defaultWorkspace",
9595
+ heading: headings.defaultWorkspace,
9596
+ items: defaults
9597
+ });
8904
9598
  if (workshop.length > 0) sections.push({
8905
9599
  id: "workshop",
8906
9600
  heading: headings.workshop,
@@ -9000,6 +9694,7 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
9000
9694
  const results = useMemo(() => matchWorkspaces(items, query), [items, query]);
9001
9695
  const sections = useMemo(() => workspaceSections(results, {
9002
9696
  workspaces: t("project.group.workspaces"),
9697
+ defaultWorkspace: t("project.group.defaultWorkspace"),
9003
9698
  workshop: t("project.group.workshop")
9004
9699
  }), [results, t]);
9005
9700
  const ordered = useMemo(() => flattenSections(sections), [sections]);
@@ -9439,149 +10134,6 @@ var board_default = "[data-wb-dot] {\n display: flex;\n align-items: center;\n
9439
10134
  //#region src/shared/styles/motion.css?raw
9440
10135
  var motion_default = "[data-animating],\n[data-sidebar-right-panel] {\n --ds-transition-duration-slow: 0s;\n}\n";
9441
10136
  //#endregion
9442
- //#region src/shared/hooks/use-api-resource.ts
9443
- var use_api_resource_exports = /* @__PURE__ */ __exportAll({
9444
- readKeyOf: () => readKeyOf,
9445
- requestResource: () => requestResource,
9446
- resourceIdentity: () => resourceIdentity,
9447
- useApiResource: () => useApiResource
9448
- });
9449
- function resourceIdentity(route, query, override) {
9450
- return override ?? requestKeyOf(route, query);
9451
- }
9452
- function readKeyOf(identity, refreshToken, factRev) {
9453
- return `${identity}@${String(refreshToken)}@${String(factRev)}`;
9454
- }
9455
- function requestKeyOf(route, query) {
9456
- return `${route}?${Object.entries(query).filter(([, value]) => value !== void 0).sort(([a], [b]) => a.localeCompare(b)).map(([key, value]) => `${key}=${String(value)}`).join("&")}`;
9457
- }
9458
- var inflight = /* @__PURE__ */ new Map();
9459
- function requestResource(route, query, key) {
9460
- const pending = inflight.get(key);
9461
- if (pending !== void 0) {
9462
- pending.waiters += 1;
9463
- return {
9464
- task: pending.task,
9465
- release: () => release(key, pending)
9466
- };
9467
- }
9468
- const controller = new AbortController();
9469
- const entry = {
9470
- task: apiGet(route, query, { signal: controller.signal }).finally(() => {
9471
- if (inflight.get(key) === entry) inflight.delete(key);
9472
- }),
9473
- controller,
9474
- waiters: 1
9475
- };
9476
- inflight.set(key, entry);
9477
- return {
9478
- task: entry.task,
9479
- release: () => release(key, entry)
9480
- };
9481
- }
9482
- function release(key, entry) {
9483
- if (inflight.get(key) !== entry) return;
9484
- entry.waiters -= 1;
9485
- if (entry.waiters > 0) return;
9486
- inflight.delete(key);
9487
- entry.controller.abort();
9488
- }
9489
- function useApiResource(route, query, refreshToken, options = {}) {
9490
- const enabled = options.enabled !== false;
9491
- const identity = resourceIdentity(route, query, options.key);
9492
- const factRev = useFactRevision(options.fact ?? factOfRoute(route));
9493
- const key = readKeyOf(identity, refreshToken, factRev);
9494
- const [state, setState] = useState(() => enabled ? { phase: "loading" } : { phase: "idle" });
9495
- const lastIdentity = useRef(null);
9496
- const queryRef = useRef(query);
9497
- useEffect(() => {
9498
- queryRef.current = query;
9499
- });
9500
- useEffect(() => {
9501
- if (!enabled) {
9502
- lastIdentity.current = null;
9503
- setState({ phase: "idle" });
9504
- return;
9505
- }
9506
- let cancelled = false;
9507
- const sameIdentity = lastIdentity.current === identity;
9508
- lastIdentity.current = identity;
9509
- setState((prev) => sameIdentity && prev.value !== void 0 ? {
9510
- phase: "loading",
9511
- value: prev.value,
9512
- ...prev.at === void 0 ? {} : { at: prev.at }
9513
- } : { phase: "loading" });
9514
- const flight = requestResource(route, queryRef.current, key);
9515
- const owner = unitOfRoute(route);
9516
- if (owner !== null) reportPanelRead({
9517
- unit: owner,
9518
- route,
9519
- phase: "loading"
9520
- });
9521
- flight.task.then((response) => {
9522
- if (cancelled) return;
9523
- if (response.ok) {
9524
- setState({
9525
- phase: "ready",
9526
- value: response,
9527
- at: Date.now()
9528
- });
9529
- if (owner !== null) reportPanelRead({
9530
- unit: owner,
9531
- route,
9532
- phase: "ready"
9533
- });
9534
- return;
9535
- }
9536
- setState({
9537
- phase: "error",
9538
- error: response.error
9539
- });
9540
- if (owner !== null) reportPanelRead({
9541
- unit: owner,
9542
- route,
9543
- phase: "error",
9544
- error: {
9545
- code: response.error.code,
9546
- message: response.error.message
9547
- }
9548
- });
9549
- }).catch((reason) => {
9550
- if (cancelled) return;
9551
- const message = reason instanceof Error ? reason.message : String(reason);
9552
- setState({
9553
- phase: "error",
9554
- error: {
9555
- code: "network",
9556
- message
9557
- }
9558
- });
9559
- if (owner !== null) reportPanelRead({
9560
- unit: owner,
9561
- route,
9562
- phase: "error",
9563
- error: {
9564
- code: "network",
9565
- message
9566
- }
9567
- });
9568
- });
9569
- return () => {
9570
- cancelled = true;
9571
- flight.release();
9572
- };
9573
- }, [
9574
- key,
9575
- identity,
9576
- route,
9577
- refreshToken,
9578
- factRev,
9579
- enabled,
9580
- options.fact
9581
- ]);
9582
- return state;
9583
- }
9584
- //#endregion
9585
10137
  //#region src/shared/hooks/use-card-summary.ts
9586
10138
  var use_card_summary_exports = /* @__PURE__ */ __exportAll({ useCardSummary: () => useCardSummary });
9587
10139
  function useCardSummary(onSummary, summary) {
@@ -9831,7 +10383,7 @@ function messagesOf(units) {
9831
10383
  ...face.messages === void 0 ? {} : { messages: face.messages }
9832
10384
  }));
9833
10385
  }
9834
- 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 position: relative;\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-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n opacity: 0.5;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\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}:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\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 text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link: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-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}\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\n:where(.wb-textField) {\n min-height: var(--wb-len-32);\n padding: var(--wb-len-6) var(--wb-len-12);\n}\n.wb-field {\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.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\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._marketList_csyus_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}\n\n._marketRow_csyus_10 {\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_csyus_20 {\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_csyus_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_csyus_39 {\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_csyus_48 {\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_csyus_59 {\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_csyus_59::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_csyus_39 ._marketVersion_csyus_73 {\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_csyus_73 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_csyus_73::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._marketLocalTag_csyus_95 {\n margin-left: var(--wb-len-8);\n padding: 0 var(--wb-len-6);\n border: var(--wb-len-1) solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n}\n\n._marketEnd_csyus_106 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_csyus_113 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_csyus_113::before {\n content: '';\n width: 0;\n height: var(--wb-len-14);\n border-left: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketActions_csyus_126 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_csyus_132 {\n color: var(--dsw-alias-state-warn-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._marketSelfDivider_csyus_138 {\n height: 0;\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_csyus_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_csyus_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_csyus_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_csyus_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_csyus_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n\n._marketProgress_csyus_176 {\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_csyus_186 {\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._marketNotePlain_csyus_193 {\n grid-column: 2 / -1;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_csyus_201 {\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_csyus_208 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_csyus_213 {\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-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_csyus_213 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_csyus_231 {\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_csyus_239 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_csyus_244 {\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_csyus_250 {\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_csyus_259 {\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_csyus_259:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_csyus_259:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_csyus_284 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_csyus_288 svg {\n animation: _wb-spin_csyus_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_csyus_292 {\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_csyus_208 {\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_csyus_309 {\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_csyus_317 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_csyus_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\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_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\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_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\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_15ptp_20 {\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_15ptp_28 {\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._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\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_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\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_15ptp_36 {\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: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::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_15ptp_119 {\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_15ptp_134 {\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 cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\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_15ptp_170 {\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_15ptp_178 {\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\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_135e7_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_135e7_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_135e7_1[data-open] {\n visibility: visible;\n}\n\n._columns_135e7_18 {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n align-items: start;\n gap: var(--wb-len-12);\n}\n\n._columns_135e7_18[data-two] {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n._column_135e7_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\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_1oaj0_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_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_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_1oaj0_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_1oaj0_1._blockerInline_1oaj0_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_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_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_1oaj0_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_1oaj0_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_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_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_1oaj0_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_1oaj0_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_1oaj0_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_1oaj0_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._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
10386
+ 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 position: relative;\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-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n opacity: 0.5;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\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}:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\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 text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link: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-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}\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}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-settings-card-fill);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settings .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-base-16-font-size);\n line-height: var(--wb-line-24);\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\n:where(.wb-textField) {\n min-height: var(--wb-len-32);\n padding: var(--wb-len-6) var(--wb-len-12);\n}\n.wb-field {\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.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\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._marketList_csyus_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}\n\n._marketRow_csyus_10 {\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_csyus_20 {\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_csyus_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_csyus_39 {\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_csyus_48 {\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_csyus_59 {\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_csyus_59::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_csyus_39 ._marketVersion_csyus_73 {\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_csyus_73 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_csyus_73::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._marketLocalTag_csyus_95 {\n margin-left: var(--wb-len-8);\n padding: 0 var(--wb-len-6);\n border: var(--wb-len-1) solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n}\n\n._marketEnd_csyus_106 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_csyus_113 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_csyus_113::before {\n content: '';\n width: 0;\n height: var(--wb-len-14);\n border-left: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketActions_csyus_126 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_csyus_132 {\n color: var(--dsw-alias-state-warn-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._marketSelfDivider_csyus_138 {\n height: 0;\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_csyus_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_csyus_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_csyus_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_csyus_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_csyus_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n\n._marketProgress_csyus_176 {\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_csyus_186 {\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._marketNotePlain_csyus_193 {\n grid-column: 2 / -1;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_csyus_201 {\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_csyus_208 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_csyus_213 {\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-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_csyus_213 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_csyus_231 {\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_csyus_239 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_csyus_244 {\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_csyus_250 {\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_csyus_259 {\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_csyus_259:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_csyus_259:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_csyus_284 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_csyus_288 svg {\n animation: _wb-spin_csyus_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_csyus_292 {\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_csyus_208 {\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_csyus_309 {\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_csyus_317 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_csyus_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\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_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\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._body_lw2ph_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_lw2ph_7 {\n margin: 0;\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}\n\n._sources_lw2ph_14 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_lw2ph_21 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_lw2ph_26 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_lw2ph_29 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_lw2ph_36 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_lw2ph_42 {\n display: inline-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-tertiary);\n}\n\n._failure_lw2ph_52 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_lw2ph_62 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_lw2ph_69 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_lw2ph_74 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._rows_lw2ph_80 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_lw2ph_80 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_lw2ph_99 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_lw2ph_106 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_lw2ph_106 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_lw2ph_118 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_lw2ph_123,\n._conflict_lw2ph_124 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._foot_lw2ph_130 {\n display: flex;\n justify-content: flex-end;\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_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\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_15ptp_20 {\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_15ptp_28 {\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._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\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_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\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_15ptp_36 {\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: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::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_15ptp_119 {\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_15ptp_134 {\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 cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\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_15ptp_170 {\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_15ptp_178 {\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\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_135e7_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_135e7_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_135e7_1[data-open] {\n visibility: visible;\n}\n\n._columns_135e7_18 {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n align-items: start;\n gap: var(--wb-len-12);\n}\n\n._columns_135e7_18[data-two] {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n._column_135e7_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\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_1oaj0_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_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_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_1oaj0_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_1oaj0_1._blockerInline_1oaj0_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_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_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_1oaj0_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_1oaj0_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_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_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_1oaj0_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_1oaj0_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_1oaj0_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_1oaj0_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._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
9835
10387
  function workbenchCss() {
9836
10388
  return `${tokens_default}\n${palette_default}\n${scale_default}\n${sidebar_default}\n${sidebar_app_default}\n${rightbar_default}\n${chrome_default}\n${board_default}\n${motion_default}\n${COMPONENT_CSS_MARKER}`;
9837
10389
  }
@@ -10046,6 +10598,7 @@ function mount(ctx) {
10046
10598
  })
10047
10599
  }, Sidebar));
10048
10600
  registerMarketPanel(ctx, units);
10601
+ registerConfigSyncSection(ctx);
10049
10602
  ctx.effect(() => {
10050
10603
  const workshop = workshopWorkspace();
10051
10604
  if (workshop === void 0) return;
@@ -10074,6 +10627,17 @@ function mount(ctx) {
10074
10627
  })
10075
10628
  }, ColumnSwitch));
10076
10629
  }
10630
+ var CONFIG_SYNC_SECTION_ID = "workbench-config-sync";
10631
+ function registerConfigSyncSection(ctx) {
10632
+ ctx.slots.inject("settings.section", () => ctx.slots.register({
10633
+ name: "settings.section",
10634
+ id: CONFIG_SYNC_SECTION_ID,
10635
+ order: 40,
10636
+ locale: LOCALE_NS,
10637
+ label: () => ctx.locale.bind(LOCALE_NS)("configSync.nav"),
10638
+ inject: () => ({ t: ctx.locale.bind(LOCALE_NS) })
10639
+ }, ConfigSyncSection));
10640
+ }
10077
10641
  function sidebarChildren(ctx) {
10078
10642
  return {
10079
10643
  "sidebar.brand.mark": {