@dsh-workbench/core 1.0.1 → 1.1.1

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 (39) hide show
  1. package/README.md +3 -0
  2. package/client.js +849 -460
  3. package/dist/client/client.body.js +849 -460
  4. package/dist/client/index.js +720 -331
  5. package/dist/host/index.js +448 -41
  6. package/dist/types/app/layouts/market/discover-search.d.ts +8 -0
  7. package/dist/types/app/layouts/market/discover-sources-dialog.d.ts +4 -0
  8. package/dist/types/app/layouts/market/discover-states.d.ts +3 -0
  9. package/dist/types/app/layouts/market/use-add-module.d.ts +0 -1
  10. package/dist/types/app/layouts/market/use-discover.d.ts +1 -0
  11. package/dist/types/app/layouts/rightbar/MarketView.d.ts +3 -1
  12. package/dist/types/app/layouts/rightbar/market-names.d.ts +8 -0
  13. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +11 -3
  14. package/dist/types/app/layouts/rightbar/market-rows.d.ts +6 -4
  15. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +4 -3
  16. package/dist/types/app/units/unit-titles.d.ts +3 -0
  17. package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
  18. package/dist/types/kernel/contract/market-index.d.ts +1 -1
  19. package/dist/types/modules/panels/model/diy-tools.d.ts +1 -1
  20. package/dist/types/modules/panels/model/market-dispatch.d.ts +8 -0
  21. package/dist/types/modules/panels/model/market-follow-up.d.ts +16 -0
  22. package/dist/types/modules/panels/model/market-sources-act.d.ts +2 -0
  23. package/dist/types/modules/panels/model/market-types.d.ts +5 -0
  24. package/dist/types/modules/panels/model/market.d.ts +2 -0
  25. package/dist/types/modules/panels/model/publish-preview-routes.d.ts +1 -1
  26. package/dist/types/shared/api/host/diy-publish-preview.d.ts +11 -0
  27. package/dist/types/shared/api/host/follow-up-dismiss.d.ts +2 -0
  28. package/dist/types/shared/api/host/migrate-workbench.d.ts +20 -0
  29. package/dist/types/shared/api/host/migration-follow-up.d.ts +12 -0
  30. package/dist/types/shared/hooks/market-queries.d.ts +3 -2
  31. package/dist/types/shared/hooks/resource-view.d.ts +14 -0
  32. package/dist/types/shared/hooks/use-api-resource.d.ts +3 -7
  33. package/package.json +3 -3
  34. package/skills/workbench-module-diy/FAMILY.md +1 -1
  35. package/skills/workbench-module-diy/REVIEW.md +2 -2
  36. package/skills/workbench-module-diy/SKILL.md +1 -0
  37. package/skills/workbench-module-diy/TOOLS.md +1 -1
  38. package/skills/workbench-module-diy/WIRING.md +3 -1
  39. package/skills/workbench-module-diy/WRITES.md +1 -1
package/client.js CHANGED
@@ -788,7 +788,7 @@ window.__ModuleLoader__.load({
788
788
  //#endregion
789
789
  //#region ../shared/dist/lib/react.js
790
790
  var react$1 = require("react");
791
- var h$62 = react$1.createElement;
791
+ var h$63 = react$1.createElement;
792
792
  var Fragment$20 = react$1.Fragment;
793
793
  var Component = react$1.Component;
794
794
  react$1.createContext;
@@ -798,7 +798,7 @@ window.__ModuleLoader__.load({
798
798
  react$1.useLayoutEffect;
799
799
  var useMemo$9 = react$1.useMemo;
800
800
  react$1.useCallback;
801
- var useRef$21 = react$1.useRef;
801
+ var useRef$22 = react$1.useRef;
802
802
  react$1.useSyncExternalStore;
803
803
  //#endregion
804
804
  //#region ../shared/dist/components/Activity.js
@@ -809,7 +809,7 @@ window.__ModuleLoader__.load({
809
809
  * @returns 一个 div。
810
810
  */
811
811
  function ActivityBlock({ head, children }) {
812
- return h$62("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$62("div", { className: "wb-activityBlockHead" }, head), children);
812
+ return h$63("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$63("div", { className: "wb-activityBlockHead" }, head), children);
813
813
  }
814
814
  /**
815
815
  * 一条活动:状态点 + 正文 + 时间,行尾可挂动作;时间一律用它,别自己拼。
@@ -820,7 +820,7 @@ window.__ModuleLoader__.load({
820
820
  * @returns 一行。
821
821
  */
822
822
  function ActivityLine({ dot, text, at, actions }) {
823
- return h$62("div", { className: "wb-activityLine" }, dot, h$62("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$62("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$62("span", { className: "wb-activityLineActions" }, actions));
823
+ return h$63("div", { className: "wb-activityLine" }, dot, h$63("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$63("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$63("span", { className: "wb-activityLineActions" }, actions));
824
824
  }
825
825
  /**
826
826
  * 活动行尾那颗动作:给 `href` 就是外链,否则是图标钮并带上 tooltip。
@@ -834,7 +834,7 @@ window.__ModuleLoader__.load({
834
834
  */
835
835
  function ActivityAction({ label, hint, icon, href, onClick, failed }) {
836
836
  const tip = hint ?? label;
837
- if (href !== void 0) return h$62("a", {
837
+ if (href !== void 0) return h$63("a", {
838
838
  className: "wb-iconButton",
839
839
  href,
840
840
  target: "_blank",
@@ -842,13 +842,13 @@ window.__ModuleLoader__.load({
842
842
  title: tip,
843
843
  "aria-label": label
844
844
  }, icon);
845
- return h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
845
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
846
846
  side: "bottom",
847
847
  align: "end",
848
848
  gap: 6,
849
849
  portal: true,
850
850
  label: tip
851
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
851
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
852
852
  type: "button",
853
853
  variant: "ghost",
854
854
  size: "sm",
@@ -870,10 +870,10 @@ window.__ModuleLoader__.load({
870
870
  */
871
871
  function Note({ tone = "muted", as, role, children }) {
872
872
  const className = tone === "problem" ? "wb-problem" : "wb-note";
873
- return as === "span" ? h$62("span", {
873
+ return as === "span" ? h$63("span", {
874
874
  className,
875
875
  role
876
- }, children) : h$62("p", {
876
+ }, children) : h$63("p", {
877
877
  className,
878
878
  role
879
879
  }, children);
@@ -917,10 +917,10 @@ window.__ModuleLoader__.load({
917
917
  render() {
918
918
  const { reason } = this.state;
919
919
  if (reason === null) return this.props.children;
920
- return h$62(Note, { tone: "problem" }, h$62("span", null, this.props.t("panels.cardBroken", {
920
+ return h$63(Note, { tone: "problem" }, h$63("span", null, this.props.t("panels.cardBroken", {
921
921
  unit: this.props.unit,
922
922
  reason
923
- })), " ", h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
923
+ })), " ", h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
924
924
  type: "button",
925
925
  variant: "outline",
926
926
  size: "sm",
@@ -970,19 +970,19 @@ window.__ModuleLoader__.load({
970
970
  const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
971
971
  if (owner?.approval !== void 0) {
972
972
  const Render = owner.approval.render;
973
- return h$62(CardBoundary, {
973
+ return h$63(CardBoundary, {
974
974
  unit: owner.unit,
975
975
  resetKey: props.callId ?? "",
976
976
  t
977
- }, h$62(Render, {
977
+ }, h$63(Render, {
978
978
  input,
979
979
  t
980
980
  }));
981
981
  }
982
982
  const shell = props.renderShell?.(input, t);
983
- if (shell !== void 0 && shell !== null) return h$62(Fragment$20, null, shell);
983
+ if (shell !== void 0 && shell !== null) return h$63(Fragment$20, null, shell);
984
984
  if (command === "") return null;
985
- return h$62(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
985
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
986
986
  code: command,
987
987
  className: "wb-approvalCommand",
988
988
  copyLabel: t("blocker.copy"),
@@ -1000,10 +1000,10 @@ window.__ModuleLoader__.load({
1000
1000
  * @returns 一个 div。
1001
1001
  */
1002
1002
  function ApprovalPlan({ rows, hint, warn, children }) {
1003
- return h$62("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$62("p", { className: "wb-approvalHint" }, hint), h$62("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$62("div", {
1003
+ return h$63("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$63("p", { className: "wb-approvalHint" }, hint), h$63("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$63("div", {
1004
1004
  className: "wb-approvalRow",
1005
1005
  key: String(index)
1006
- }, h$62("dt", { className: "wb-approvalLabel" }, row.label), h$62("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$62("p", { className: "wb-approvalWarn" }, warn));
1006
+ }, h$63("dt", { className: "wb-approvalLabel" }, row.label), h$63("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$63("p", { className: "wb-approvalWarn" }, warn));
1007
1007
  }
1008
1008
  //#endregion
1009
1009
  //#region ../shared/dist/components/CardHead.js
@@ -1020,47 +1020,47 @@ window.__ModuleLoader__.load({
1020
1020
  function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle }) {
1021
1021
  const refreshLabel = refreshing ? t("rightbar.refreshing") : t("rightbar.refresh");
1022
1022
  const platformLabel = platformTitle ?? platform ?? t("rightbar.openPlatform");
1023
- return h$62("header", { className: "wb-cardHead" }, h$62("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$62("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1023
+ return h$63("header", { className: "wb-cardHead" }, h$63("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$63("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1024
1024
  side: "bottom",
1025
1025
  align: "end",
1026
1026
  gap: 6,
1027
1027
  portal: true,
1028
1028
  label: platformLabel
1029
- }, h$62("a", {
1029
+ }, h$63("a", {
1030
1030
  className: "wb-iconButton wb-cardOpen",
1031
1031
  href: platformHref,
1032
1032
  target: "_blank",
1033
1033
  rel: "noreferrer noopener",
1034
1034
  "aria-label": platform ?? platformLabel
1035
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1035
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1036
1036
  side: "bottom",
1037
1037
  align: "end",
1038
1038
  gap: 6,
1039
1039
  portal: true,
1040
1040
  label: refreshLabel
1041
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
1041
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
1042
1042
  type: "button",
1043
1043
  size: "sm",
1044
1044
  variant: "ghost",
1045
1045
  className: `wb-cardRefresh${refreshing ? " wb-spinning" : ""}`,
1046
1046
  "aria-label": refreshLabel,
1047
1047
  disabled: refreshing,
1048
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1048
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1049
1049
  onClick: onRefresh
1050
- })), gear === void 0 || onToggleGear === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1050
+ })), gear === void 0 || onToggleGear === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1051
1051
  side: "bottom",
1052
1052
  align: "end",
1053
1053
  gap: 6,
1054
1054
  portal: true,
1055
1055
  label: gear
1056
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
1056
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
1057
1057
  type: "button",
1058
1058
  size: "sm",
1059
1059
  variant: "ghost",
1060
1060
  className: `wb-cardGear${gearOpen === true ? " wb-iconButtonActive" : ""}`,
1061
1061
  "aria-label": gear,
1062
1062
  "aria-expanded": gearOpen === true,
1063
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1063
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1064
1064
  onClick: onToggleGear
1065
1065
  })));
1066
1066
  }
@@ -1077,13 +1077,13 @@ window.__ModuleLoader__.load({
1077
1077
  * @returns 一个 `<section>`。
1078
1078
  */
1079
1079
  function Card({ t, title, refreshing, onRefresh, meta, head, children }) {
1080
- return h$62("section", { className: "wb-card" }, head === void 0 ? h$62(CardHead, {
1080
+ return h$63("section", { className: "wb-card" }, head === void 0 ? h$63(CardHead, {
1081
1081
  t,
1082
1082
  title,
1083
1083
  refreshing,
1084
1084
  onRefresh,
1085
1085
  meta
1086
- }) : head, h$62("div", { className: "wb-cardBody" }, children));
1086
+ }) : head, h$63("div", { className: "wb-cardBody" }, children));
1087
1087
  }
1088
1088
  var CardAnchor_module_default = { anchor: "_anchor_yq4s2_1" };
1089
1089
  //#endregion
@@ -1103,7 +1103,7 @@ window.__ModuleLoader__.load({
1103
1103
  * @returns 带 id 的占位 div。
1104
1104
  */
1105
1105
  function CardAnchor({ unit, children }) {
1106
- return h$62("div", {
1106
+ return h$63("div", {
1107
1107
  id: cardIdOf(unit),
1108
1108
  className: CardAnchor_module_default.anchor
1109
1109
  }, children);
@@ -1117,13 +1117,13 @@ window.__ModuleLoader__.load({
1117
1117
  * @returns 一枚 `StateDot state="ongoing"`,自身不带文字。
1118
1118
  */
1119
1119
  function Spinner({ size = 14, label }) {
1120
- return h$62("span", {
1120
+ return h$63("span", {
1121
1121
  className: "wb-spinner",
1122
1122
  ...label === void 0 ? { "aria-hidden": true } : {
1123
1123
  role: "status",
1124
1124
  "aria-label": label
1125
1125
  }
1126
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1126
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1127
1127
  state: "ongoing",
1128
1128
  size
1129
1129
  }));
@@ -1131,24 +1131,24 @@ window.__ModuleLoader__.load({
1131
1131
  //#endregion
1132
1132
  //#region ../shared/dist/components/ChoiceGroup.js
1133
1133
  function ChoiceMenu(input) {
1134
- const body = input.loading ? h$62("span", {
1134
+ const body = input.loading ? h$63("span", {
1135
1135
  className: "wb-choiceLoading",
1136
1136
  role: "status"
1137
- }, h$62(Spinner, { size: 14 }), h$62("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$62("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1137
+ }, h$63(Spinner, { size: 14 }), h$63("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$63("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1138
1138
  const row = input.rowOf(option.value);
1139
- return h$62(Fragment$20, { key: option.value }, h$62("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$62("input", {
1139
+ return h$63(Fragment$20, { key: option.value }, h$63("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$63("input", {
1140
1140
  className: input.multi ? "wb-checkbox" : "wb-radio",
1141
1141
  type: input.multi ? "checkbox" : "radio",
1142
1142
  name: input.name,
1143
1143
  checked: row.checked,
1144
1144
  disabled: input.disabled,
1145
1145
  onChange: row.onSelect
1146
- }), input.multi ? h$62("span", {
1146
+ }), input.multi ? h$63("span", {
1147
1147
  className: "wb-checkboxBox",
1148
1148
  "aria-hidden": "true"
1149
- }, row.checked ? h$62(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$62("span", { className: "wb-choiceLabel" }, h$62("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$62("span", { className: "wb-choiceDescription" }, option.description))));
1149
+ }, row.checked ? h$63(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$63("span", { className: "wb-choiceLabel" }, h$63("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$63("span", { className: "wb-choiceDescription" }, option.description))));
1150
1150
  });
1151
- return h$62("div", {
1151
+ return h$63("div", {
1152
1152
  className: "wb-choiceMenu",
1153
1153
  "data-variant": input.variant,
1154
1154
  role: input.multi ? "group" : "radiogroup",
@@ -1182,7 +1182,7 @@ window.__ModuleLoader__.load({
1182
1182
  if (props.multi === true) {
1183
1183
  const values = props.values;
1184
1184
  const onChange = props.onChange;
1185
- return h$62(ChoiceMenu, {
1185
+ return h$63(ChoiceMenu, {
1186
1186
  label: common.label,
1187
1187
  name: common.name,
1188
1188
  options: common.options,
@@ -1202,7 +1202,7 @@ window.__ModuleLoader__.load({
1202
1202
  }
1203
1203
  const value = props.value;
1204
1204
  const onChange = props.onChange;
1205
- return h$62(ChoiceMenu, {
1205
+ return h$63(ChoiceMenu, {
1206
1206
  label: common.label,
1207
1207
  name: common.name,
1208
1208
  options: common.options,
@@ -1255,17 +1255,17 @@ window.__ModuleLoader__.load({
1255
1255
  function FormActions({ actions }) {
1256
1256
  if (actions.length === 0) return null;
1257
1257
  reportExtraPrimaries(actions);
1258
- return h$62("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1258
+ return h$63("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1259
1259
  const kind = kindOf(action);
1260
1260
  const busy = action.busy === true;
1261
- return h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
1261
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
1262
1262
  key: action.key,
1263
1263
  type: "button",
1264
1264
  size: "sm",
1265
1265
  variant: variantOf(kind),
1266
1266
  className: kind === "danger" ? "wb-formActionDanger" : void 0,
1267
1267
  disabled: busy || action.disabled === true,
1268
- icon: busy ? h$62(Spinner, { size: 12 }) : void 0,
1268
+ icon: busy ? h$63(Spinner, { size: 12 }) : void 0,
1269
1269
  onClick: action.onClick
1270
1270
  }, action.label);
1271
1271
  }));
@@ -1278,7 +1278,7 @@ window.__ModuleLoader__.load({
1278
1278
  * @returns 竖排的 div。
1279
1279
  */
1280
1280
  function Rows({ children }) {
1281
- return h$62("div", { className: "wb-rows" }, children);
1281
+ return h$63("div", { className: "wb-rows" }, children);
1282
1282
  }
1283
1283
  /**
1284
1284
  * 一行键值:左边名字、右边值;要成对说明一项数据就用它,别自己写两栏。
@@ -1287,7 +1287,7 @@ window.__ModuleLoader__.load({
1287
1287
  * @returns 一行两格。
1288
1288
  */
1289
1289
  function Row({ label, value }) {
1290
- return h$62("div", { className: "wb-row" }, h$62("span", { className: "wb-rowKey" }, label), h$62("span", { className: "wb-rowValue" }, value));
1290
+ return h$63("div", { className: "wb-row" }, h$63("span", { className: "wb-rowKey" }, label), h$63("span", { className: "wb-rowValue" }, value));
1291
1291
  }
1292
1292
  //#endregion
1293
1293
  //#region ../shared/dist/components/ConfirmBar.js
@@ -1304,19 +1304,19 @@ window.__ModuleLoader__.load({
1304
1304
  * @returns 一个 `role="group"` 的条;`actions` 空数组时最后那一块不渲染。
1305
1305
  */
1306
1306
  function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
1307
- return h$62("div", {
1307
+ return h$63("div", {
1308
1308
  className: "wb-confirmBar",
1309
1309
  role: "group",
1310
1310
  "aria-label": label ?? (typeof title === "string" ? title : void 0),
1311
1311
  "aria-busy": busy
1312
- }, h$62("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$62("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$62(Rows, null, rows.map((row) => h$62(Row, {
1312
+ }, h$63("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$63("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$63(Rows, null, rows.map((row) => h$63(Row, {
1313
1313
  key: row.key,
1314
1314
  label: row.label,
1315
1315
  value: row.value
1316
- }))), problem === void 0 ? null : h$62(Note, {
1316
+ }))), problem === void 0 ? null : h$63(Note, {
1317
1317
  tone: "problem",
1318
1318
  role: "alert"
1319
- }, problem), h$62(FormActions, { actions }));
1319
+ }, problem), h$63(FormActions, { actions }));
1320
1320
  }
1321
1321
  //#endregion
1322
1322
  //#region ../shared/dist/components/Field.js
@@ -1328,7 +1328,7 @@ window.__ModuleLoader__.load({
1328
1328
  * @returns 一个 `<label>`,点标签会聚焦里面的控件。
1329
1329
  */
1330
1330
  function Field({ label, hint, children }) {
1331
- return h$62("label", { className: "wb-field" }, h$62("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$62("span", { className: "wb-fieldHint" }, hint));
1331
+ return h$63("label", { className: "wb-field" }, h$63("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$63("span", { className: "wb-fieldHint" }, hint));
1332
1332
  }
1333
1333
  //#endregion
1334
1334
  //#region ../shared/dist/components/FormRows.js
@@ -1338,7 +1338,7 @@ window.__ModuleLoader__.load({
1338
1338
  * @returns 竖排的 div。
1339
1339
  */
1340
1340
  function FormRows({ children }) {
1341
- return h$62("div", { className: "wb-formRows" }, children);
1341
+ return h$63("div", { className: "wb-formRows" }, children);
1342
1342
  }
1343
1343
  /**
1344
1344
  * 表单一行:左边标签、右边控件,提示与错误占控件下面那一格。
@@ -1351,14 +1351,14 @@ window.__ModuleLoader__.load({
1351
1351
  * @returns 一个 `<div>`:里面的 `<label>` 只包标签文字,不包控件、提示与整行的空白。
1352
1352
  */
1353
1353
  function FormRow({ label, htmlFor, hint, problem, layout = "inline", children }) {
1354
- return h$62("div", {
1354
+ return h$63("div", {
1355
1355
  className: "wb-formRow",
1356
1356
  "data-layout": layout,
1357
1357
  "data-wb-problem": problem === void 0 ? void 0 : ""
1358
- }, h$62("label", {
1358
+ }, h$63("label", {
1359
1359
  className: "wb-formLabel",
1360
1360
  htmlFor
1361
- }, label), h$62("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$62("span", { className: "wb-formHint" }, hint) : h$62("span", { className: "wb-formProblem" }, problem));
1361
+ }, label), h$63("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$63("span", { className: "wb-formHint" }, hint) : h$63("span", { className: "wb-formProblem" }, problem));
1362
1362
  }
1363
1363
  //#endregion
1364
1364
  //#region ../shared/dist/components/FormNodes.js
@@ -1505,7 +1505,7 @@ window.__ModuleLoader__.load({
1505
1505
  * @returns `FormRow` 组成的数组;没有可画的格子时给空数组。
1506
1506
  */
1507
1507
  function formRowsOf(args) {
1508
- return args.fields.map((field) => h$62(FormRow, {
1508
+ return args.fields.map((field) => h$63(FormRow, {
1509
1509
  key: field.key,
1510
1510
  label: field.label,
1511
1511
  htmlFor: controlIdOf(field.key),
@@ -1583,7 +1583,7 @@ window.__ModuleLoader__.load({
1583
1583
  const { fields, onSubmit, submit, cancel, extra, busy = false, disabled = false, problem } = props;
1584
1584
  const [done, setDone] = useState$35(false);
1585
1585
  const [reveal, setReveal] = useState$35(0);
1586
- const rootRef = useRef$21(null);
1586
+ const rootRef = useRef$22(null);
1587
1587
  const shown = visibleFieldsOf(fields);
1588
1588
  const problems = formProblemsOf(shown, done);
1589
1589
  reportDuplicateKeys(shown);
@@ -1602,7 +1602,7 @@ window.__ModuleLoader__.load({
1602
1602
  }
1603
1603
  onSubmit(outcome.values);
1604
1604
  };
1605
- return h$62("form", {
1605
+ return h$63("form", {
1606
1606
  className: "wb-form",
1607
1607
  ref: rootRef,
1608
1608
  noValidate: true,
@@ -1610,15 +1610,15 @@ window.__ModuleLoader__.load({
1610
1610
  event.preventDefault();
1611
1611
  submitForm();
1612
1612
  }
1613
- }, h$62(FormRows, null, formRowsOf({
1613
+ }, h$63(FormRows, null, formRowsOf({
1614
1614
  fields: shown,
1615
1615
  problems,
1616
1616
  showProblem: done,
1617
1617
  busy
1618
- })), problem === void 0 ? null : h$62(Note, {
1618
+ })), problem === void 0 ? null : h$63(Note, {
1619
1619
  tone: "problem",
1620
1620
  role: "alert"
1621
- }, problem), h$62(FormActions, { actions: formActionsOf({
1621
+ }, problem), h$63(FormActions, { actions: formActionsOf({
1622
1622
  extra,
1623
1623
  cancel,
1624
1624
  submit,
@@ -1639,7 +1639,7 @@ window.__ModuleLoader__.load({
1639
1639
  * @returns 一个 `<a>`。
1640
1640
  */
1641
1641
  function Link({ href, children, title, external = true, className }) {
1642
- return h$62("a", {
1642
+ return h$63("a", {
1643
1643
  className: className === void 0 ? "wb-link" : `wb-link ${className}`,
1644
1644
  href,
1645
1645
  ...title === void 0 ? {} : { title },
@@ -1647,7 +1647,7 @@ window.__ModuleLoader__.load({
1647
1647
  target: "_blank",
1648
1648
  rel: "noopener noreferrer"
1649
1649
  } : {}
1650
- }, children, external ? h$62(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1650
+ }, children, external ? h$63(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1651
1651
  }
1652
1652
  //#endregion
1653
1653
  //#region ../shared/dist/contract/long-task.js
@@ -1739,7 +1739,7 @@ window.__ModuleLoader__.load({
1739
1739
  //#endregion
1740
1740
  //#region ../shared/dist/components/LongTaskRow.js
1741
1741
  function RowLink({ href, text }) {
1742
- return h$62(Link, {
1742
+ return h$63(Link, {
1743
1743
  href,
1744
1744
  className: "wb-longTaskLink"
1745
1745
  }, text);
@@ -1788,14 +1788,14 @@ window.__ModuleLoader__.load({
1788
1788
  setArmed(false);
1789
1789
  stop.onStop();
1790
1790
  };
1791
- return h$62("div", { className: "wb-longTask" }, h$62("p", { className: "wb-longTaskHead" }, h$62(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1791
+ return h$63("div", { className: "wb-longTask" }, h$63("p", { className: "wb-longTaskHead" }, h$63(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1792
1792
  state: longTaskDot(props.status),
1793
1793
  size: 10
1794
- }), h$62("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$62(RowLink, {
1794
+ }), h$63("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$63(RowLink, {
1795
1795
  href: link.href,
1796
1796
  key: `${link.text}@${link.href}`,
1797
1797
  text: link.text
1798
- })), stop === void 0 ? null : h$62("button", {
1798
+ })), stop === void 0 ? null : h$63("button", {
1799
1799
  type: "button",
1800
1800
  className: `wb-longTaskStop${armed ? " wb-longTaskStopArmed" : ""}`,
1801
1801
  "data-stop-state": longTaskStopStage({
@@ -1806,31 +1806,31 @@ window.__ModuleLoader__.load({
1806
1806
  disabled: busy,
1807
1807
  onClick: onStopPress,
1808
1808
  onBlur: () => setArmed(false)
1809
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$62("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$62("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$62("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$62(Fragment$20, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1809
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$63("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$63("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$63("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$63(Fragment$20, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1810
1810
  className: "wb-longTaskDump",
1811
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1811
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1812
1812
  title: props.stepsTitle,
1813
1813
  open: stepsOpen,
1814
1814
  expandable: true,
1815
1815
  expandOnRowClick: true,
1816
1816
  previewChevron: true,
1817
1817
  onToggle: () => setStepsOpen(!stepsOpen)
1818
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1818
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1819
1819
  code: steps.join("\n"),
1820
1820
  className: "wb-longTaskDump",
1821
1821
  showHeader: props.copyLabel !== void 0,
1822
1822
  copyLabel: props.copyLabel ?? "",
1823
1823
  copiedLabel: props.copiedLabel ?? ""
1824
- })), raw === "" || props.rawTitle === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1824
+ })), raw === "" || props.rawTitle === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1825
1825
  className: "wb-longTaskDump",
1826
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1826
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1827
1827
  title: props.rawTitle,
1828
1828
  open: rawOpen,
1829
1829
  expandable: true,
1830
1830
  expandOnRowClick: true,
1831
1831
  previewChevron: true,
1832
1832
  onToggle: () => setRawOpen(!rawOpen)
1833
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1833
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1834
1834
  code: raw,
1835
1835
  className: "wb-longTaskDump",
1836
1836
  showHeader: props.copyLabel !== void 0,
@@ -1846,13 +1846,13 @@ window.__ModuleLoader__.load({
1846
1846
  * @returns 一叠占位条。
1847
1847
  */
1848
1848
  function SkeletonRows({ rows = 4 }) {
1849
- return h$62("div", {
1849
+ return h$63("div", {
1850
1850
  className: "wb-skeleton",
1851
1851
  "aria-hidden": "true"
1852
- }, Array.from({ length: rows }, (_, index) => h$62("span", {
1852
+ }, Array.from({ length: rows }, (_, index) => h$63("span", {
1853
1853
  key: index,
1854
1854
  className: "wb-skeletonRow"
1855
- }, h$62("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$62("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1855
+ }, h$63("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$63("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1856
1856
  }
1857
1857
  /**
1858
1858
  * 居中一屏:要他先选一个 / 正在读 / 读不到时用它占住卡片版面。
@@ -1865,13 +1865,13 @@ window.__ModuleLoader__.load({
1865
1865
  * @returns 一个 `role="status"` 的居中块。
1866
1866
  */
1867
1867
  function CenteredState({ icon, title, hint, detail, action, compact = false }) {
1868
- return h$62("div", {
1868
+ return h$63("div", {
1869
1869
  className: compact ? "wb-centered wb-centeredCompact" : "wb-centered",
1870
1870
  role: "status"
1871
- }, icon === null ? null : h$62("span", {
1871
+ }, icon === null ? null : h$63("span", {
1872
1872
  className: "wb-centeredHero",
1873
1873
  "aria-hidden": "true"
1874
- }, icon), h$62("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$62("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$62("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$62("div", { className: "wb-centeredAction" }, action));
1874
+ }, icon), h$63("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$63("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$63("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$63("div", { className: "wb-centeredAction" }, action));
1875
1875
  }
1876
1876
  /**
1877
1877
  * 就绪但空:它只是 `CenteredState` 的简写,标题就是那句空态文案。
@@ -1881,7 +1881,7 @@ window.__ModuleLoader__.load({
1881
1881
  * @returns 一个居中块。
1882
1882
  */
1883
1883
  function EmptyState({ text, icon = null, compact = false }) {
1884
- return h$62(CenteredState, {
1884
+ return h$63(CenteredState, {
1885
1885
  icon,
1886
1886
  title: text,
1887
1887
  compact
@@ -1899,7 +1899,7 @@ window.__ModuleLoader__.load({
1899
1899
  * @returns 一组按钮。
1900
1900
  */
1901
1901
  function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
1902
- return h$62(FormActions, { actions: [{
1902
+ return h$63(FormActions, { actions: [{
1903
1903
  key: "cancel",
1904
1904
  label: labels.cancel,
1905
1905
  kind: "default",
@@ -1932,7 +1932,7 @@ window.__ModuleLoader__.load({
1932
1932
  * @returns 一颗 `<button>`。
1933
1933
  */
1934
1934
  function selectTriggerNode(args) {
1935
- return h$62("button", {
1935
+ return h$63("button", {
1936
1936
  type: "button",
1937
1937
  id: args.id,
1938
1938
  className: args.className,
@@ -1943,7 +1943,7 @@ window.__ModuleLoader__.load({
1943
1943
  "aria-label": args.ariaLabel,
1944
1944
  title: args.title,
1945
1945
  onClick: args.onOpen
1946
- }, args.iconOnly ? h$62("span", { className: "wb-selectIcon" }, args.icon) : h$62(Fragment$20, null, args.icon === void 0 ? null : h$62("span", { className: "wb-selectIcon" }, args.icon), h$62("span", { className: "wb-selectValue" }, args.value), h$62("span", { className: "wb-selectChevron" }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1946
+ }, args.iconOnly ? h$63("span", { className: "wb-selectIcon" }, args.icon) : h$63(Fragment$20, null, args.icon === void 0 ? null : h$63("span", { className: "wb-selectIcon" }, args.icon), h$63("span", { className: "wb-selectValue" }, args.value), h$63("span", { className: "wb-selectChevron" }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1947
1947
  }
1948
1948
  /**
1949
1949
  * 名单还没读到时的触发器:禁用 + `aria-busy` 的按钮,`SelectField` 在 `loading` 那档画它。
@@ -1955,7 +1955,7 @@ window.__ModuleLoader__.load({
1955
1955
  * @returns 一颗禁用且 `aria-busy` 的按钮。
1956
1956
  */
1957
1957
  function selectLoadingNode(args) {
1958
- return h$62("button", {
1958
+ return h$63("button", {
1959
1959
  type: "button",
1960
1960
  id: args.id,
1961
1961
  className: `${args.className} wb-selectLoading`,
@@ -1964,7 +1964,7 @@ window.__ModuleLoader__.load({
1964
1964
  "aria-invalid": args.invalid || void 0,
1965
1965
  "aria-label": args.ariaLabel,
1966
1966
  title: args.loadingText
1967
- }, h$62("span", { className: "wb-selectValue" }, h$62(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$62("span", { className: "wb-selectChevron" }, h$62(Spinner, { size: 14 })));
1967
+ }, h$63("span", { className: "wb-selectValue" }, h$63(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$63("span", { className: "wb-selectChevron" }, h$63(Spinner, { size: 14 })));
1968
1968
  }
1969
1969
  //#endregion
1970
1970
  //#region ../shared/dist/components/TextField.js
@@ -1974,7 +1974,7 @@ window.__ModuleLoader__.load({
1974
1974
  * @returns 输入框元素;`className` 是追加在基础类名之后,而不是替换它。
1975
1975
  */
1976
1976
  function TextField({ invalid = false, className, ...rest }) {
1977
- return h$62("input", {
1977
+ return h$63("input", {
1978
1978
  ...rest,
1979
1979
  className: className === void 0 ? "wb-textField" : `wb-textField ${className}`,
1980
1980
  "aria-invalid": invalid || void 0
@@ -1997,7 +1997,7 @@ window.__ModuleLoader__.load({
1997
1997
  ...option.icon === void 0 ? {} : { icon: option.icon },
1998
1998
  ...option.disabled === true ? { disabled: true } : {}
1999
1999
  };
2000
- const revealed = (node) => h$62("span", {
2000
+ const revealed = (node) => h$63("span", {
2001
2001
  className: "wb-selectReveal",
2002
2002
  "data-wb-select-reveal": ""
2003
2003
  }, node);
@@ -2019,14 +2019,14 @@ window.__ModuleLoader__.load({
2019
2019
  }, [open, revealId]);
2020
2020
  }
2021
2021
  function selectValueNode(current, renderValue, placeholder) {
2022
- if (current === void 0) return h$62("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2022
+ if (current === void 0) return h$63("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2023
2023
  return renderValue === void 0 ? current.label : renderValue(current);
2024
2024
  }
2025
2025
  function searchNode(args) {
2026
- return h$62("span", {
2026
+ return h$63("span", {
2027
2027
  ref: args.boxRef,
2028
2028
  className: args.className
2029
- }, h$62("span", { className: "wb-selectSearchIcon" }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$62(TextField, {
2029
+ }, h$63("span", { className: "wb-selectSearchIcon" }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$63(TextField, {
2030
2030
  id: args.id,
2031
2031
  name: args.name,
2032
2032
  className: "wb-selectSearchInput",
@@ -2041,7 +2041,7 @@ window.__ModuleLoader__.load({
2041
2041
  }));
2042
2042
  }
2043
2043
  function menuNode(args) {
2044
- return h$62(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2044
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2045
2045
  open: args.open,
2046
2046
  portal: true,
2047
2047
  className: "wb-selectAnchor",
@@ -2058,11 +2058,11 @@ window.__ModuleLoader__.load({
2058
2058
  });
2059
2059
  }
2060
2060
  function framed(label, hint, className, control) {
2061
- const inner = label === void 0 ? hint === void 0 ? control : h$62("span", { className: "wb-select" }, control, h$62("span", { className: "wb-selectHint" }, hint)) : h$62(Field, {
2061
+ const inner = label === void 0 ? hint === void 0 ? control : h$63("span", { className: "wb-select" }, control, h$63("span", { className: "wb-selectHint" }, hint)) : h$63(Field, {
2062
2062
  label,
2063
2063
  hint
2064
2064
  }, control);
2065
- return className === void 0 ? inner : h$62("div", { className }, inner);
2065
+ return className === void 0 ? inner : h$63("div", { className }, inner);
2066
2066
  }
2067
2067
  /** 算候选项用来匹配搜索的文本:有 `searchText` 就用它,否则取字符串标签;标签不是字符串又没给它是空串(这项搜不到)。 */
2068
2068
  function searchTextOf(option) {
@@ -2117,11 +2117,11 @@ window.__ModuleLoader__.load({
2117
2117
  const [openState, setOpenState] = useState$35(false);
2118
2118
  const [query, setQuery] = useState$35("");
2119
2119
  const [cursor, setCursor] = useState$35(null);
2120
- const boxRef = useRef$21(null);
2121
- const triggerRef = useRef$21(null);
2122
- const wasOpenRef = useRef$21(false);
2123
- const pickedRef = useRef$21(false);
2124
- const closedByUsRef = useRef$21(false);
2120
+ const boxRef = useRef$22(null);
2121
+ const triggerRef = useRef$22(null);
2122
+ const wasOpenRef = useRef$22(false);
2123
+ const pickedRef = useRef$22(false);
2124
+ const closedByUsRef = useRef$22(false);
2125
2125
  const open = openProp ?? openState;
2126
2126
  const setOpen = (next) => {
2127
2127
  if (openProp === void 0) setOpenState(next);
@@ -2201,7 +2201,7 @@ window.__ModuleLoader__.load({
2201
2201
  ariaLabel,
2202
2202
  loadingText
2203
2203
  }));
2204
- if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$62(TextField, {
2204
+ if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$63(TextField, {
2205
2205
  id,
2206
2206
  name,
2207
2207
  className: "wb-selectFallback",
@@ -2284,11 +2284,11 @@ window.__ModuleLoader__.load({
2284
2284
  * @returns 一个 `role="group"` 的 section。
2285
2285
  */
2286
2286
  function SettingsSection({ label, title, action, children }) {
2287
- return h$62("section", {
2287
+ return h$63("section", {
2288
2288
  className: "wb-settings",
2289
2289
  role: "group",
2290
2290
  "aria-label": label
2291
- }, h$62("header", { className: "wb-settingsHead" }, h$62("span", { className: "wb-settingsTitle" }, title), action), children);
2291
+ }, h$63("header", { className: "wb-settingsHead" }, h$63("span", { className: "wb-settingsTitle" }, title), action), children);
2292
2292
  }
2293
2293
  //#endregion
2294
2294
  //#region ../shared/dist/components/Stack.js
@@ -2298,7 +2298,7 @@ window.__ModuleLoader__.load({
2298
2298
  * @returns 竖排的 div。
2299
2299
  */
2300
2300
  function Stack({ children }) {
2301
- return h$62("div", { className: "wb-stack" }, children);
2301
+ return h$63("div", { className: "wb-stack" }, children);
2302
2302
  }
2303
2303
  //#endregion
2304
2304
  //#region ../shared/dist/components/StateBlock.js
@@ -2313,12 +2313,12 @@ window.__ModuleLoader__.load({
2313
2313
  * @returns 一个 div。
2314
2314
  */
2315
2315
  function StateBlock({ title, dot, hint, actions, resolving, children }) {
2316
- return h$62("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$62("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$62("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$62("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$62("div", { className: "wb-stateBlockActions" }, actions));
2316
+ return h$63("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$63("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$63("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$63("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$63("div", { className: "wb-stateBlockActions" }, actions));
2317
2317
  }
2318
2318
  //#endregion
2319
2319
  //#region ../shared/dist/components/icons.js
2320
2320
  function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
2321
- return h$62("svg", {
2321
+ return h$63("svg", {
2322
2322
  width: size,
2323
2323
  height: size,
2324
2324
  viewBox,
@@ -2335,10 +2335,10 @@ window.__ModuleLoader__.load({
2335
2335
  * @returns 一枚 `aria-hidden` 的 svg。
2336
2336
  */
2337
2337
  function IconConversation({ size = 16 }) {
2338
- return h$62(Shell, {
2338
+ return h$63(Shell, {
2339
2339
  size,
2340
2340
  strokeWidth: 1.3
2341
- }, h$62("path", {
2341
+ }, h$63("path", {
2342
2342
  d: "M2.5 7.2c0-2.3 2.1-4.2 4.8-4.2h1.4c2.7 0 4.8 1.9 4.8 4.2s-2.1 4.2-4.8 4.2H7.5l-3.2 2v-2.3c-1.1-.8-1.8-2-1.8-3.9Z",
2343
2343
  stroke: "currentColor",
2344
2344
  strokeLinejoin: "round"
@@ -2353,30 +2353,30 @@ window.__ModuleLoader__.load({
2353
2353
  * @returns 一枚 `aria-hidden` 的 svg。
2354
2354
  */
2355
2355
  function IconBrandMark({ size = 24 }) {
2356
- return h$62(Shell, {
2356
+ return h$63(Shell, {
2357
2357
  size,
2358
2358
  viewBox: "0 0 64 64"
2359
- }, h$62("path", {
2359
+ }, h$63("path", {
2360
2360
  d: BRAND_FRAME,
2361
2361
  fill: "currentColor",
2362
2362
  fillRule: "evenodd"
2363
- }), h$62("rect", {
2363
+ }), h$63("rect", {
2364
2364
  x: 27.5,
2365
2365
  y: 48,
2366
2366
  width: 9,
2367
2367
  height: 4.75,
2368
2368
  fill: "currentColor"
2369
- }), h$62("rect", {
2369
+ }), h$63("rect", {
2370
2370
  x: 19,
2371
2371
  y: 52.75,
2372
2372
  width: 26,
2373
2373
  height: 4.75,
2374
2374
  rx: 2.375,
2375
2375
  fill: "currentColor"
2376
- }), h$62("g", { transform: BRAND_TAIL_TRANSFORM }, h$62("path", {
2376
+ }), h$63("g", { transform: BRAND_TAIL_TRANSFORM }, h$63("path", {
2377
2377
  d: BRAND_TAIL,
2378
2378
  fill: "currentColor"
2379
- }), h$62("circle", {
2379
+ }), h$63("circle", {
2380
2380
  cx: 6.885,
2381
2381
  cy: 13.742,
2382
2382
  r: 1.95,
@@ -2389,30 +2389,30 @@ window.__ModuleLoader__.load({
2389
2389
  * @returns 一枚 `aria-hidden` 的 svg。
2390
2390
  */
2391
2391
  function IconOpencli({ size = 16 }) {
2392
- return h$62(Shell, {
2392
+ return h$63(Shell, {
2393
2393
  size,
2394
2394
  viewBox: "0 0 64 64"
2395
- }, h$62("defs", null, h$62("linearGradient", {
2395
+ }, h$63("defs", null, h$63("linearGradient", {
2396
2396
  id: "opencli-mark",
2397
2397
  x1: "0%",
2398
2398
  y1: "0%",
2399
2399
  x2: "100%",
2400
2400
  y2: "100%"
2401
- }, h$62("stop", {
2401
+ }, h$63("stop", {
2402
2402
  offset: "0%",
2403
2403
  stopColor: "#00e5a0"
2404
- }), h$62("stop", {
2404
+ }), h$63("stop", {
2405
2405
  offset: "50%",
2406
2406
  stopColor: "#00b4d8"
2407
- }), h$62("stop", {
2407
+ }), h$63("stop", {
2408
2408
  offset: "100%",
2409
2409
  stopColor: "#7b61ff"
2410
- }))), h$62("rect", {
2410
+ }))), h$63("rect", {
2411
2411
  width: 64,
2412
2412
  height: 64,
2413
2413
  rx: 14,
2414
2414
  fill: "#0a0a0f"
2415
- }), h$62("text", {
2415
+ }), h$63("text", {
2416
2416
  x: "50%",
2417
2417
  y: "54%",
2418
2418
  dominantBaseline: "middle",
@@ -2429,10 +2429,10 @@ window.__ModuleLoader__.load({
2429
2429
  * @returns 一枚 `aria-hidden` 的 svg。
2430
2430
  */
2431
2431
  function IconNpm({ size = 16 }) {
2432
- return h$62(Shell, {
2432
+ return h$63(Shell, {
2433
2433
  size,
2434
2434
  viewBox: "0 0 1024 1024"
2435
- }, h$62("path", {
2435
+ }, h$63("path", {
2436
2436
  d: "M64 337.76h896v298.72H512v49.792H312.896v-49.824H64z m49.792 248.928h99.552v-149.376h49.76v149.344h49.792v-199.104H113.792z m248.896-199.136v248.928h99.552v-49.792h99.552v-199.136z m99.552 49.792H512v99.584h-49.792z m149.344-49.792v199.136h99.552v-149.376h49.792v149.344h49.792v-149.344h49.792v149.344h49.792v-199.104z",
2437
2437
  fill: "#CB3837"
2438
2438
  }));
@@ -2443,37 +2443,37 @@ window.__ModuleLoader__.load({
2443
2443
  * @returns 一枚 `aria-hidden` 的 svg。
2444
2444
  */
2445
2445
  function IconModuleMark({ size = 16 }) {
2446
- return h$62(Shell, {
2446
+ return h$63(Shell, {
2447
2447
  size,
2448
2448
  viewBox: "0 0 24 24"
2449
- }, h$62("defs", null, h$62("linearGradient", {
2449
+ }, h$63("defs", null, h$63("linearGradient", {
2450
2450
  id: "workbench-module-mark",
2451
2451
  x1: "0%",
2452
2452
  y1: "0%",
2453
2453
  x2: "100%",
2454
2454
  y2: "100%"
2455
- }, h$62("stop", {
2455
+ }, h$63("stop", {
2456
2456
  offset: "0%",
2457
2457
  stopColor: "#3b82f6"
2458
- }), h$62("stop", {
2458
+ }), h$63("stop", {
2459
2459
  offset: "55%",
2460
2460
  stopColor: "#8b5cf6"
2461
- }), h$62("stop", {
2461
+ }), h$63("stop", {
2462
2462
  offset: "100%",
2463
2463
  stopColor: "#14b8a6"
2464
- }))), h$62("rect", {
2464
+ }))), h$63("rect", {
2465
2465
  width: 24,
2466
2466
  height: 24,
2467
2467
  rx: 7,
2468
2468
  fill: "url(#workbench-module-mark)"
2469
- }), h$62("rect", {
2469
+ }), h$63("rect", {
2470
2470
  x: "4.6",
2471
2471
  y: "4.6",
2472
2472
  width: "6.2",
2473
2473
  height: "6.2",
2474
2474
  rx: "1.9",
2475
2475
  fill: "#ffffff"
2476
- }), h$62("rect", {
2476
+ }), h$63("rect", {
2477
2477
  x: "13.2",
2478
2478
  y: "4.6",
2479
2479
  width: "6.2",
@@ -2481,7 +2481,7 @@ window.__ModuleLoader__.load({
2481
2481
  rx: "1.9",
2482
2482
  fill: "#ffffff",
2483
2483
  fillOpacity: .78
2484
- }), h$62("rect", {
2484
+ }), h$63("rect", {
2485
2485
  x: "4.6",
2486
2486
  y: "13.2",
2487
2487
  width: "6.2",
@@ -2489,7 +2489,7 @@ window.__ModuleLoader__.load({
2489
2489
  rx: "1.9",
2490
2490
  fill: "#ffffff",
2491
2491
  fillOpacity: .78
2492
- }), h$62("rect", {
2492
+ }), h$63("rect", {
2493
2493
  x: "13.2",
2494
2494
  y: "13.2",
2495
2495
  width: "6.2",
@@ -2504,7 +2504,7 @@ window.__ModuleLoader__.load({
2504
2504
  * @returns 一枚 `aria-hidden` 的 svg。
2505
2505
  */
2506
2506
  function IconPanelScreen({ size = 16 }) {
2507
- return h$62("svg", {
2507
+ return h$63("svg", {
2508
2508
  width: size,
2509
2509
  height: size,
2510
2510
  viewBox: "0 0 1024 1024",
@@ -2515,7 +2515,7 @@ window.__ModuleLoader__.load({
2515
2515
  display: "block",
2516
2516
  overflow: "hidden"
2517
2517
  }
2518
- }, h$62("path", { d: "M939 112c17.673 0 32 14.327 32 32v554.667c0 17.673-14.327 32-32 32l-394.5-0.001v96c0 3.74-0.642 7.331-1.82 10.668H768.4c17.673 0 32 14.326 32 32 0 17.496-14.042 31.712-31.47 31.995l-0.53 0.004H256.6c-17.673 0-32-14.327-32-32 0-17.496 14.042-31.713 31.47-31.995l0.53-0.005h225.721a31.923 31.923 0 0 1-1.817-10.137l-0.004-0.53v-96H86c-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V144c0-17.673 14.327-32 32-32z m-32 64H118v490.666h789V176zM341.9 432c17.496 0 31.713 14.042 31.996 31.47l0.004 0.53v85.333c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V464c0-17.673 14.327-32 32-32z m170.6-85.333c17.496 0 31.713 14.041 31.996 31.47l0.004 0.53v170.666c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V378.667c0-17.673 14.327-32 32-32z m170.6-85.334c17.496 0 31.713 14.042 31.996 31.471l0.004 0.53v256c0 17.672-14.327 32-32 32-17.496 0-31.713-14.042-31.996-31.471l-0.004-0.53v-256c0-17.673 14.327-32 32-32z" }));
2518
+ }, h$63("path", { d: "M939 112c17.673 0 32 14.327 32 32v554.667c0 17.673-14.327 32-32 32l-394.5-0.001v96c0 3.74-0.642 7.331-1.82 10.668H768.4c17.673 0 32 14.326 32 32 0 17.496-14.042 31.712-31.47 31.995l-0.53 0.004H256.6c-17.673 0-32-14.327-32-32 0-17.496 14.042-31.713 31.47-31.995l0.53-0.005h225.721a31.923 31.923 0 0 1-1.817-10.137l-0.004-0.53v-96H86c-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V144c0-17.673 14.327-32 32-32z m-32 64H118v490.666h789V176zM341.9 432c17.496 0 31.713 14.042 31.996 31.47l0.004 0.53v85.333c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V464c0-17.673 14.327-32 32-32z m170.6-85.333c17.496 0 31.713 14.041 31.996 31.47l0.004 0.53v170.666c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V378.667c0-17.673 14.327-32 32-32z m170.6-85.334c17.496 0 31.713 14.042 31.996 31.471l0.004 0.53v256c0 17.672-14.327 32-32 32-17.496 0-31.713-14.042-31.996-31.471l-0.004-0.53v-256c0-17.673 14.327-32 32-32z" }));
2519
2519
  }
2520
2520
  //#endregion
2521
2521
  //#region ../shared/dist/config/storage.js
@@ -2730,6 +2730,32 @@ window.__ModuleLoader__.load({
2730
2730
  //#region ../shared/dist/contract/protocol/unit-manifests.js
2731
2731
  var UNIT_MANIFESTS_ROUTE = "unit-manifests";
2732
2732
  //#endregion
2733
+ //#region ../shared/dist/contract/unit.js
2734
+ /**
2735
+ * 外壳替模块名合成的词表键:模块自己不必写名字键,名字直接从清单里的 title 注册进来。
2736
+ * @param unit 单元 id。
2737
+ * @returns 该单元名字在词表里的键。
2738
+ */
2739
+ function unitTitleKey(unit) {
2740
+ return `dsh-workbench.unit.${unit}.title`;
2741
+ }
2742
+ /**
2743
+ * 模块声明的全部环境需要(没写就是空表)。
2744
+ * @param manifest 模块清单。
2745
+ * @returns need 列表。
2746
+ */
2747
+ function needsOf(manifest) {
2748
+ return manifest.needs ?? [];
2749
+ }
2750
+ /**
2751
+ * 市场门槛要看的那些需要:声明了 extension / lib 就算(不要求写了来源)。
2752
+ * @param manifest 模块清单。
2753
+ * @returns extension / lib 的 need 列表。
2754
+ */
2755
+ function supplyNeedsOf(manifest) {
2756
+ return needsOf(manifest).filter((need) => need.kind === "extension" || need.kind === "lib");
2757
+ }
2758
+ //#endregion
2733
2759
  //#region ../shared/dist/contract/needs.js
2734
2760
  function text(value) {
2735
2761
  return typeof value === "string" ? value.trim() : "";
@@ -2792,24 +2818,6 @@ window.__ModuleLoader__.load({
2792
2818
  })
2793
2819
  });
2794
2820
  //#endregion
2795
- //#region ../shared/dist/contract/unit.js
2796
- /**
2797
- * 模块声明的全部环境需要(没写就是空表)。
2798
- * @param manifest 模块清单。
2799
- * @returns need 列表。
2800
- */
2801
- function needsOf(manifest) {
2802
- return manifest.needs ?? [];
2803
- }
2804
- /**
2805
- * 市场门槛要看的那些需要:声明了 extension / lib 就算(不要求写了来源)。
2806
- * @param manifest 模块清单。
2807
- * @returns extension / lib 的 need 列表。
2808
- */
2809
- function supplyNeedsOf(manifest) {
2810
- return needsOf(manifest).filter((need) => need.kind === "extension" || need.kind === "lib");
2811
- }
2812
- //#endregion
2813
2821
  //#region ../shared/dist/i18n/settings.js
2814
2822
  /** 「工作台设置」这一组的词条:配置同步 / 新建工作台。 */
2815
2823
  var zhSettings = {
@@ -3078,15 +3086,14 @@ window.__ModuleLoader__.load({
3078
3086
  "panels.market.update": "Update",
3079
3087
  "panels.market.swapSlow": "Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.",
3080
3088
  "panels.market.removeSlow": "Not removed yet — maybe a slow network or an uninstall that did not finish. Check again in a moment; if it stays like this, restart dsh.",
3081
- "panels.market.updateNoChange": "Not updated: you were on {from}, and after the run the disk still has that version; the newest on the registry is {latest}.",
3089
+ "panels.market.updateNoChange": "Update failed: still {from}. The newest on the registry is {latest} — press Update again.",
3082
3090
  "panels.market.updateUnknownVersion": "(unknown)",
3083
- "panels.market.updateGone": "Not updated: after the run the module cannot be read from disk.",
3084
- "panels.market.updateRestored": "Not updated: the new version was missing from disk, so {version} was put back.",
3091
+ "panels.market.updateGone": "Update failed: the module is gone after the update.",
3092
+ "panels.market.updateRestored": "Update failed: the new version could not be found after the update, so {version} was put back.",
3085
3093
  "panels.market.updateBehind": "Installed {installed}, but the newest on the registry is {latest} — not the latest; you can update once more.",
3086
- "panels.market.selfUpdateFailed": "Self-update failed: {reason}",
3094
+ "panels.market.selfUpdateFailed": "Workbench update failed: {reason}",
3087
3095
  "panels.market.selfUpdateUnknown": "the outside process left no reason (see ~/.dsh/workbench/self-update.log)",
3088
- "panels.market.selfUpdateRolledBack": "Not swapped; rolled back to {version}.",
3089
- "panels.market.selfUpdateNeedsMigrate": "Workbench updated. Old sessions and projects are not merged automatically: quit every dsh, then run dsh-workbench migrate (--force to merge again).",
3096
+ "panels.market.selfUpdateRolledBack": "Workbench update failed; rolled back to {version}.",
3090
3097
  "panels.market.uninstall": "Uninstall",
3091
3098
  "panels.market.uninstallLabel": "Uninstall {name}",
3092
3099
  "panels.market.installing": "Installing…",
@@ -3108,9 +3115,27 @@ window.__ModuleLoader__.load({
3108
3115
  "panels.market.empty": "No modules available",
3109
3116
  "panels.market.sectionPlugins": "Installed opencli plugins",
3110
3117
  "panels.market.moduleOutdated": "update available",
3118
+ "panels.market.updateNeedsWorkbench": "this version needs a newer workbench first",
3119
+ "panels.market.updateIncompatible": "the new version does not match this workbench, so it cannot be installed now",
3111
3120
  "panels.market.moduleRefused": "This module does not match this workbench, so it cannot be used for now.",
3112
3121
  "panels.market.moduleRestartHint": "restart dsh once to bring it up",
3113
3122
  "panels.market.pendingRestart": "restart required",
3123
+ "panels.market.pendingFollowUp": "old data to migrate",
3124
+ "panels.market.migrationHint": "old sessions and projects are not merged yet",
3125
+ "panels.market.migrateAction": "Migrate old data",
3126
+ "panels.market.migrating": "Migrating…",
3127
+ "panels.market.migrateConfirmTitle": "Migrate old data?",
3128
+ "panels.market.migrateConfirmDetail": "Quit dsh web / Desktop first. Only missing data is added; nothing is overwritten.",
3129
+ "panels.market.migrateConfirmAck": "I've quit dsh web / Desktop",
3130
+ "panels.market.migrateConfirmYes": "Start migration",
3131
+ "panels.market.migrateDone": "Migration complete: {added} projects added; restart the workbench and dsh web to see them.",
3132
+ "panels.market.dismissFollowUp": "Don't remind me",
3133
+ "panels.market.dismissing": "Dismissing…",
3134
+ "panels.market.dismissFollowUpTitle": "Stop reminding about this?",
3135
+ "panels.market.dismissFollowUpDetail": "The reminder will be hidden from the market, but old data will not be migrated or deleted. Old sessions and projects stay in the old directory and won't appear in the new version; you can still run dsh-workbench migrate later.",
3136
+ "panels.market.dismissFollowUpAck": "I understand the old data won't appear automatically",
3137
+ "panels.market.dismissFollowUpYes": "Don't remind me",
3138
+ "panels.market.dismissed": "No longer reminded; old data stays in the old directory and can still be migrated with dsh-workbench migrate.",
3114
3139
  "panels.market.workbenchName": "Workbench",
3115
3140
  "panels.market.pluginBroken": "This plugin install is broken: it cannot be identified. Uninstall it first, then ask the agent to reinstall it by package name.",
3116
3141
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
@@ -3194,7 +3219,7 @@ window.__ModuleLoader__.load({
3194
3219
  "panels.market.add.exampleTitle": "Examples",
3195
3220
  "panels.market.add.exampleFill": "Fill in an example",
3196
3221
  "panels.market.add.registryLabel": "Source",
3197
- "panels.market.add.registryProfile": "This profile's registry",
3222
+ "panels.market.add.registryProfile": "This workbench's registry",
3198
3223
  "panels.market.add.registryPnpm": "pnpm's own registry",
3199
3224
  "panels.market.add.check": "Check",
3200
3225
  "panels.market.add.checking": "Checking…",
@@ -3215,14 +3240,19 @@ window.__ModuleLoader__.load({
3215
3240
  "panels.market.tabs": "The two faces of the module market",
3216
3241
  "panels.tab.discover": "Discover",
3217
3242
  "panels.discover.loading": "Reading the index",
3243
+ "panels.discover.slowHint": "Slow to load: finish any authorization prompt, or switch sources.",
3218
3244
  "panels.discover.lead": "Browse modules from an index source; install and go.",
3219
3245
  "panels.discover.addSource": "Add",
3220
3246
  "panels.discover.addingSource": "Adding…",
3221
3247
  "panels.discover.addFirstSource": "Add index source",
3222
3248
  "panels.discover.removeSource": "Remove",
3223
3249
  "panels.discover.removeSourceNamed": "Remove {url}",
3250
+ "panels.discover.useSource": "Use",
3251
+ "panels.discover.useSourceNamed": "Use {label}",
3252
+ "panels.discover.sourceCurrent": "In use",
3224
3253
  "panels.discover.refresh": "Refresh",
3225
3254
  "panels.discover.search": "Search modules",
3255
+ "panels.discover.clearSearch": "Clear search",
3226
3256
  "panels.discover.all": "All",
3227
3257
  "panels.discover.sourceLabel": "Name",
3228
3258
  "panels.discover.sourceKind": "Type",
@@ -3232,8 +3262,8 @@ window.__ModuleLoader__.load({
3232
3262
  "panels.discover.sourcePlaceholder": "https://example.com/index.json or git@git.example.com:wb/market.git",
3233
3263
  "panels.discover.sourceRef": "Branch",
3234
3264
  "panels.discover.sourcePath": "Index file",
3235
- "panels.discover.sourceLocal": "Local clone (optional)",
3236
- "panels.discover.sourceLocalHint": "Leave empty to clone into ~/.dsh/workbench/market-index/.",
3265
+ "panels.discover.sourceLocal": "Local copy folder (optional)",
3266
+ "panels.discover.sourceLocalHint": "Leave empty to keep it in ~/.dsh/workbench/market-index/.",
3237
3267
  "panels.discover.save": "Save and refresh",
3238
3268
  "panels.discover.cancel": "Cancel",
3239
3269
  "panels.discover.retry": "Retry",
@@ -3246,9 +3276,9 @@ window.__ModuleLoader__.load({
3246
3276
  "panels.discover.missingIndex": "This repository has no {path} yet.",
3247
3277
  "panels.discover.initTitle": "Initialize this repository as a module market index?",
3248
3278
  "panels.discover.initCta": "Initialize market index",
3249
- "panels.discover.initWhat": "It will write market.json and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their artifacts under packages/<unit>/. The repository stays owned by its owner.",
3279
+ "panels.discover.initWhat": "It will write market.json and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their build files under packages/<unit>/. The repository stays owned by its owner.",
3250
3280
  "panels.discover.initBranch": "Branch",
3251
- "panels.discover.initBranchHint": "The index and artifacts go to this branch; an empty repository gets it created.",
3281
+ "panels.discover.initBranchHint": "The index and build files go to this branch; an empty repository gets it created.",
3252
3282
  "panels.discover.initBranchBad": "Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.",
3253
3283
  "panels.discover.initOk": "Initialize",
3254
3284
  "panels.discover.initBusy": "Initializing…",
@@ -3352,11 +3382,11 @@ window.__ModuleLoader__.load({
3352
3382
  "panels.market.add.doneApplied": "Installed and live.",
3353
3383
  "panels.market.add.doneRestart": "Installed — restart once to pick it up.",
3354
3384
  "panels.market.add.restartWhy": "Why this needs a restart: {reason}",
3355
- "panels.market.add.restartWhy.no-hmr": "this configuration only applies changes at startup (hot reload is off)",
3385
+ "panels.market.add.restartWhy.no-hmr": "this configuration is only read at startup, so a restart is needed",
3356
3386
  "panels.market.add.restartWhy.package-moved": "an installed package now resolves to another directory, or the change replaced something dsh itself provides",
3357
3387
  "panels.market.add.restartWhy.host-module": "the change reaches modules dsh itself loaded",
3358
- "panels.market.add.restartWhy.unmanaged-plugin": "the change reaches a plugin running outside the plugin list",
3359
- "panels.market.add.restartWhy.module-comparison": "dsh could not compare loaded plugins with their files",
3388
+ "panels.market.add.restartWhy.unmanaged-plugin": "the change reaches a plugin that is running but not on the install list",
3389
+ "panels.market.add.restartWhy.module-comparison": "dsh could not confirm that the running plugin is the copy installed on this machine",
3360
3390
  "panels.market.add.cancelled": "Cancelled.",
3361
3391
  "panels.market.add.failed": "Didn't work: {reason}",
3362
3392
  "panels.market.add.removed": "It has been removed.",
@@ -3366,10 +3396,10 @@ window.__ModuleLoader__.load({
3366
3396
  "panels.market.add.removedRestart": "Removed — restart once to finish.",
3367
3397
  "panels.market.add.remove": "Remove it",
3368
3398
  "panels.market.add.problem.invalidSpec": "That is not a spec we accept: it cannot be empty or start with a dash.",
3369
- "panels.market.add.problem.alreadyInstalled": "That package is already in the profile (add @version to switch versions).",
3399
+ "panels.market.add.problem.alreadyInstalled": "That package is already in this workbench (add @version to switch versions).",
3370
3400
  "panels.market.add.problem.notFound": "No such package on that source. Try another name or version.",
3371
3401
  "panels.market.add.problem.notAPackage": "There is no package at that location. Pick a folder that contains a package.json.",
3372
- "panels.market.add.problem.notABundle": "It is an npm package, but not a dsh plugin (it is missing the dsh wiring declaration).",
3402
+ "panels.market.add.problem.notABundle": "It is an npm package, but not a dsh plugin (dsh cannot find what to load inside it).",
3373
3403
  "panels.market.add.problem.network": "The source is unreachable. Check the network and retry.",
3374
3404
  "panels.market.add.problem.unknown": "The check did not pass (reason unknown). Open the install details for the raw output, or retry.",
3375
3405
  "panels.market.add.reason.invalidSpec": "the spec is not accepted",
@@ -3377,7 +3407,7 @@ window.__ModuleLoader__.load({
3377
3407
  "panels.market.add.reason.notBundle": "it is not a dsh plugin package",
3378
3408
  "panels.market.add.reason.notRemovable": "it ships with the installation and cannot be removed",
3379
3409
  "panels.market.add.reason.bundleInUse": "something is still using it",
3380
- "panels.market.add.reason.stopProfile": "this configuration has no hot reload, so stop the process first",
3410
+ "panels.market.add.reason.stopProfile": "this configuration needs a restart, so stop the workbench first",
3381
3411
  "panels.market.add.reason.staleApproval": "the scripts to allow changed — start over",
3382
3412
  "panels.market.add.reason.operationError": "pnpm failed (see the install output)",
3383
3413
  "panels.market.add.reason.buildBlocked": "pnpm blocked install scripts",
@@ -3407,8 +3437,8 @@ window.__ModuleLoader__.load({
3407
3437
  "blocker.forbidden.titleGeneric": "No access",
3408
3438
  "blocker.forbidden.hint": "You are signed in, but this project/repo is not permitted for your account.",
3409
3439
  "blocker.forbidden.open": "Open permissions page",
3410
- "blocker.timeout.hint": "The headless browser may not have started; retrying usually helps.",
3411
- "blocker.exec.hint": "Make sure opencli is installed and on PATH (which opencli).",
3440
+ "blocker.timeout.hint": "The background browser may not have started; retrying usually helps.",
3441
+ "blocker.exec.hint": "Make sure opencli is installed and runs from your terminal (which opencli).",
3412
3442
  "blocker.unknown.title": "Something went wrong",
3413
3443
  "panels.reading": "Reading the panel setup…",
3414
3444
  "panels.cardBroken": "This module will not render: {unit} ({reason})",
@@ -3422,7 +3452,7 @@ window.__ModuleLoader__.load({
3422
3452
  "env.elapsed": "Waiting {seconds}s",
3423
3453
  "env.stepFailed.install": "install failed",
3424
3454
  "env.stepFailed.path": "installed but not found",
3425
- "env.stepFailed.shell": "no shell channel",
3455
+ "env.stepFailed.shell": "cannot reach the command line",
3426
3456
  "env.toolchain.ok": "Looks good",
3427
3457
  "env.toolchain.warn": "Almost ready",
3428
3458
  "env.opencli.ok": "Ready",
@@ -3439,10 +3469,10 @@ window.__ModuleLoader__.load({
3439
3469
  "env.fix.title": "How to fix it",
3440
3470
  "env.fix.why": "The workbench uses its own background tool (installed separately from the one in your terminal), and it is not set up on this machine yet.",
3441
3471
  "env.fix.whyPath": "The background tool is installed, but this environment cannot find it — usually a PATH or shell-session issue.",
3442
- "env.fix.whyShell": "The workbench has no shell channel, so it cannot fetch data — you cannot install this from here; someone needs to fix the background environment.",
3472
+ "env.fix.whyShell": "The workbench cannot reach the command line on this machine, so it cannot fetch data — you cannot install this from here; someone needs to fix the background environment.",
3443
3473
  "env.fix.step": "Run this in a terminal, then hit Retry:",
3444
3474
  "env.fix.stepPath": "Open a new terminal window (or make sure npm’s global bin directory is on PATH), then hit Retry.",
3445
- "env.fix.stepShell": "Restart the workbench (or dsh); if it keeps happening, the shell channel is not wired up.",
3475
+ "env.fix.stepShell": "Restart the workbench (or dsh); if it keeps happening, the workbench still cannot reach the command line.",
3446
3476
  "env.fix.permission": "Permission denied: rerun with sudo, or point npm’s global directory at your home.",
3447
3477
  "env.fix.network": "Network unreachable: check your network or proxy, then retry.",
3448
3478
  "env.fix.details": "Details (for troubleshooting)",
@@ -3471,9 +3501,9 @@ window.__ModuleLoader__.load({
3471
3501
  "env.warm.done": "Ready ({n} sites)",
3472
3502
  "env.warm.short": "Could not sign in early this time — nothing breaks; the first read fills it in",
3473
3503
  "env.unit.failed": "This module cannot start",
3474
- "env.unit.failedHint": "It failed while assembling itself; other modules are unaffected.",
3475
- "env.unit.unchecked": "Cannot check: no shell channel",
3476
- "env.unit.uncheckedHint": "The module is not the problem — the shell channel is unavailable. Restart the workbench.",
3504
+ "env.unit.failedHint": "It failed while starting up; other modules are unaffected.",
3505
+ "env.unit.unchecked": "Cannot check: no command line",
3506
+ "env.unit.uncheckedHint": "The module is not the problem — the workbench cannot reach the command line. Restart the workbench.",
3477
3507
  "adapterSet.not-configured": "No adapter set configured; using the default.",
3478
3508
  "adapterSet.no-profile": "No profile found, so the adapter set cannot load; using the default.",
3479
3509
  "adapterSet.malformed": "An adapter set must be a package name (for example @acme/adapters-set); using the default.",
@@ -3516,7 +3546,7 @@ window.__ModuleLoader__.load({
3516
3546
  "sidebarEdition.official": "Official",
3517
3547
  "sidebarEdition.officialHint": "Matches dsh exactly and stays stable: search, view options, show more, archive, add workspace — no waiting for us to catch up. Pick it to keep things simple.",
3518
3548
  "sidebarEdition.custom": "Custom",
3519
- "sidebarEdition.customHint": "Built for multi-project work: one project per dropdown, recency-first sessions, edge fades, marquee, DIY new session. Easier when you juggle projects.",
3549
+ "sidebarEdition.customHint": "Built for multi-project work: one project per dropdown, recency-first sessions, long names scroll, edges fade, DIY new session. Easier when you juggle projects.",
3520
3550
  "sidebarEdition.saving": "Configuring…",
3521
3551
  "sidebarEdition.reloadRequired": "Saved. Reload the page to apply — no workbench restart needed.",
3522
3552
  "sidebarEdition.reload": "Reload page",
@@ -3545,25 +3575,25 @@ window.__ModuleLoader__.load({
3545
3575
  "record.act.halt": "Halt",
3546
3576
  "approval.record.site": "Site",
3547
3577
  "approval.record.what": "Records",
3548
- "approval.record.lands": "Lands in",
3578
+ "approval.record.lands": "Saves to",
3549
3579
  "approval.record.noUrl": "no site given (this call gets refused)",
3550
3580
  "approval.record.oneAction": "one action",
3551
3581
  "approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
3552
- "approval.longTask.what": "Stops",
3553
- "approval.longTask.signal": "stopping only sends an interrupt signal — how the platform-side run finishes is up to the module",
3582
+ "approval.longTask.what": "Task to stop",
3583
+ "approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
3554
3584
  "approval.publish.module": "Module",
3555
3585
  "approval.publish.target": "Target",
3556
3586
  "approval.publish.version": "Version",
3557
3587
  "approval.publish.author": "Author",
3558
- "approval.publish.authorMissing": "unsigned (commits use the local git identity)",
3588
+ "approval.publish.authorMissing": "unsigned",
3559
3589
  "approval.publish.registry": "Registry",
3560
3590
  "approval.publish.repo": "Repository",
3561
3591
  "approval.publish.branch": "Branch",
3562
3592
  "approval.publish.defaultBranch": "default branch",
3563
- "approval.publish.artifacts": "Artifacts",
3593
+ "approval.publish.artifacts": "Build files",
3564
3594
  "approval.publish.index": "Index",
3565
3595
  "approval.publish.commits": "Commits",
3566
- "approval.publish.twoCommits": "artifacts + market.json in 2 commits, one push",
3596
+ "approval.publish.twoCommits": "build files + market.json in 2 commits, one push",
3567
3597
  "approval.publish.reading": "Reading…",
3568
3598
  "approval.publish.changelog": "Changelog for {version}",
3569
3599
  "approval.publish.changelogMissing": "No changelog entry for {version}; publishing will be blocked",
@@ -3711,15 +3741,14 @@ window.__ModuleLoader__.load({
3711
3741
  "panels.market.update": "更新",
3712
3742
  "panels.market.swapSlow": "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。",
3713
3743
  "panels.market.removeSlow": "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。",
3714
- "panels.market.updateNoChange": "没换成:点下去是 {from},跑完盘上还是这一版;源上最新是 {latest}。",
3744
+ "panels.market.updateNoChange": "更新失败:还是 {from};源上最新是 {latest},可以再点一次「更新」。",
3715
3745
  "panels.market.updateUnknownVersion": "(问不到)",
3716
- "panels.market.updateGone": "没换成:更新跑完盘上读不到这个模块。",
3717
- "panels.market.updateRestored": "没换成:盘上已经读不到新版本,已把 {version} 装回去。",
3746
+ "panels.market.updateGone": "更新失败:更新后找不到这个模块。",
3747
+ "panels.market.updateRestored": "更新失败:更新后找不到新版本,已把 {version} 装回去。",
3718
3748
  "panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。",
3719
- "panels.market.selfUpdateFailed": "自更新没成:{reason}",
3749
+ "panels.market.selfUpdateFailed": "工作台更新失败:{reason}",
3720
3750
  "panels.market.selfUpdateUnknown": "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)",
3721
- "panels.market.selfUpdateRolledBack": "没换成,已回滚到 {version}。",
3722
- "panels.market.selfUpdateNeedsMigrate": "工作台已更新。旧会话 / 项目不会自动并:先退出所有 dsh,再运行 dsh-workbench migrate(--force 可补并)。",
3751
+ "panels.market.selfUpdateRolledBack": "工作台更新失败,已回滚到 {version}。",
3723
3752
  "panels.market.uninstall": "卸载",
3724
3753
  "panels.market.uninstallLabel": "卸载 {name}",
3725
3754
  "panels.market.installing": "正在安装…",
@@ -3741,9 +3770,27 @@ window.__ModuleLoader__.load({
3741
3770
  "panels.market.empty": "暂无可用模块",
3742
3771
  "panels.market.sectionPlugins": "已安装 opencli 插件",
3743
3772
  "panels.market.moduleOutdated": "有新版",
3773
+ "panels.market.updateNeedsWorkbench": "新版本要先把工作台升级才能用",
3774
+ "panels.market.updateIncompatible": "新版本和当前的工作台不匹配,暂时不能更新",
3744
3775
  "panels.market.moduleRefused": "模块版本与工作台不匹配,暂时无法使用",
3745
3776
  "panels.market.moduleRestartHint": "重启后生效",
3746
3777
  "panels.market.pendingRestart": "重启后生效",
3778
+ "panels.market.pendingFollowUp": "旧数据待迁移",
3779
+ "panels.market.migrationHint": "旧会话和项目还没搬过来",
3780
+ "panels.market.migrateAction": "迁移旧数据",
3781
+ "panels.market.migrating": "正在迁移…",
3782
+ "panels.market.migrateConfirmTitle": "迁移旧数据?",
3783
+ "panels.market.migrateConfirmDetail": "先退出 dsh web / Desktop。迁移只补缺、不覆盖;旧目录保留。",
3784
+ "panels.market.migrateConfirmAck": "我已经退出 dsh web / Desktop",
3785
+ "panels.market.migrateConfirmYes": "开始迁移",
3786
+ "panels.market.migrateDone": "迁移完成:补了 {added} 个项目;重启工作台和 dsh web 后出现。",
3787
+ "panels.market.dismissFollowUp": "不再提醒",
3788
+ "panels.market.dismissing": "正在收起…",
3789
+ "panels.market.dismissFollowUpTitle": "不再提醒这件事?",
3790
+ "panels.market.dismissFollowUpDetail": "提示会从模块市场收起,但不会迁移或删除旧数据。旧会话和项目仍留在旧目录,新版本里看不到;以后需要时仍可运行 dsh-workbench migrate。",
3791
+ "panels.market.dismissFollowUpAck": "我知道旧数据不会自动出现",
3792
+ "panels.market.dismissFollowUpYes": "不再提醒",
3793
+ "panels.market.dismissed": "已不再提醒;旧数据仍在旧目录,需要时仍可运行 dsh-workbench migrate。",
3747
3794
  "panels.market.workbenchName": "工作台",
3748
3795
  "panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
3749
3796
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
@@ -3827,7 +3874,7 @@ window.__ModuleLoader__.load({
3827
3874
  "panels.market.add.exampleTitle": "示例",
3828
3875
  "panels.market.add.exampleFill": "填入示例",
3829
3876
  "panels.market.add.registryLabel": "安装源",
3830
- "panels.market.add.registryProfile": "这个 profile 配的源",
3877
+ "panels.market.add.registryProfile": "这份工作台配的源",
3831
3878
  "panels.market.add.registryPnpm": "pnpm 自己配的源",
3832
3879
  "panels.market.add.check": "预检",
3833
3880
  "panels.market.add.checking": "正在预检…",
@@ -3848,14 +3895,19 @@ window.__ModuleLoader__.load({
3848
3895
  "panels.market.tabs": "模块市场的两个面",
3849
3896
  "panels.tab.discover": "发现",
3850
3897
  "panels.discover.loading": "正在读取索引",
3898
+ "panels.discover.slowHint": "读取较慢:如有授权提示,先完成它,或换一个索引源。",
3851
3899
  "panels.discover.lead": "从索引源浏览模块;装上就能用。",
3852
3900
  "panels.discover.addSource": "添加",
3853
3901
  "panels.discover.addingSource": "正在添加…",
3854
3902
  "panels.discover.addFirstSource": "添加索引源",
3855
3903
  "panels.discover.removeSource": "移除",
3856
3904
  "panels.discover.removeSourceNamed": "移除 {url}",
3905
+ "panels.discover.useSource": "使用",
3906
+ "panels.discover.useSourceNamed": "使用 {label}",
3907
+ "panels.discover.sourceCurrent": "当前使用",
3857
3908
  "panels.discover.refresh": "刷新",
3858
3909
  "panels.discover.search": "搜索模块",
3910
+ "panels.discover.clearSearch": "清除搜索",
3859
3911
  "panels.discover.all": "全部",
3860
3912
  "panels.discover.sourceLabel": "名字",
3861
3913
  "panels.discover.sourceKind": "类型",
@@ -3865,8 +3917,8 @@ window.__ModuleLoader__.load({
3865
3917
  "panels.discover.sourcePlaceholder": "https://example.com/index.json 或 git@git.example.com:wb/market.git",
3866
3918
  "panels.discover.sourceRef": "分支",
3867
3919
  "panels.discover.sourcePath": "索引文件",
3868
- "panels.discover.sourceLocal": "本地 clone(可选)",
3869
- "panels.discover.sourceLocalHint": "不填就 clone 到 ~/.dsh/workbench/market-index/。",
3920
+ "panels.discover.sourceLocal": "本地副本目录(可选)",
3921
+ "panels.discover.sourceLocalHint": "不填就放到 ~/.dsh/workbench/market-index/。",
3870
3922
  "panels.discover.save": "保存并刷新",
3871
3923
  "panels.discover.cancel": "取消",
3872
3924
  "panels.discover.retry": "重试",
@@ -3879,9 +3931,9 @@ window.__ModuleLoader__.load({
3879
3931
  "panels.discover.missingIndex": "仓库里还没有索引文件 {path}",
3880
3932
  "panels.discover.initTitle": "把这个仓库初始化成模块市场索引?",
3881
3933
  "panels.discover.initCta": "初始化成市场索引",
3882
- "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把产物提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3934
+ "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3883
3935
  "panels.discover.initBranch": "分支",
3884
- "panels.discover.initBranchHint": "索引与产物都发到这个分支;空仓库会新建它。",
3936
+ "panels.discover.initBranchHint": "索引和打包文件都发到这个分支;空仓库会新建它。",
3885
3937
  "panels.discover.initBranchBad": "分支名只能用字母、数字、点、下划线、斜杠或短横线",
3886
3938
  "panels.discover.initOk": "初始化",
3887
3939
  "panels.discover.initBusy": "正在初始化…",
@@ -3985,11 +4037,11 @@ window.__ModuleLoader__.load({
3985
4037
  "panels.market.add.doneApplied": "装好了,已经生效。",
3986
4038
  "panels.market.add.doneRestart": "装好了,重启一次才生效。",
3987
4039
  "panels.market.add.restartWhy": "为什么这一版要重启:{reason}",
3988
- "panels.market.add.restartWhy.no-hmr": "这个配置只在启动时应用改动(没开热更新)",
4040
+ "panels.market.add.restartWhy.no-hmr": "这份配置只在启动时读一次,改了得重启",
3989
4041
  "panels.market.add.restartWhy.package-moved": "某个已经装着的包换到了新的目录,或者这一下换掉了 dsh 自己提供的那份",
3990
4042
  "panels.market.add.restartWhy.host-module": "这一下动到了 dsh 自己加载的模块",
3991
- "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了插件清单之外正在跑的插件",
3992
- "panels.market.add.restartWhy.module-comparison": "dsh 没能把已加载的插件与盘上的文件对上",
4043
+ "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了没登记过、正在运行的插件",
4044
+ "panels.market.add.restartWhy.module-comparison": "dsh 没法确认正在跑的插件就是这台机器上装好的那一份",
3993
4045
  "panels.market.add.cancelled": "已取消。",
3994
4046
  "panels.market.add.failed": "没成功:{reason}",
3995
4047
  "panels.market.add.removed": "已经移除了。",
@@ -3999,10 +4051,10 @@ window.__ModuleLoader__.load({
3999
4051
  "panels.market.add.removedRestart": "卸掉了,重启一次才彻底生效。",
4000
4052
  "panels.market.add.remove": "移除它",
4001
4053
  "panels.market.add.problem.invalidSpec": "这个写法不认:不能是空的,也不能以横杠开头。",
4002
- "panels.market.add.problem.alreadyInstalled": "这个包已经在 profile 里了(要换版本请带上 @版本)。",
4054
+ "panels.market.add.problem.alreadyInstalled": "这个包已经在这份工作台里了(要换版本请带上 @版本)。",
4003
4055
  "panels.market.add.problem.notFound": "源上没有这个包。换个包名或版本再试。",
4004
4056
  "panels.market.add.problem.notAPackage": "这个位置没有包。选一个包含 package.json 的目录。",
4005
- "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(缺 dsh 的接线声明)。",
4057
+ "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(dsh 在里面找不到该加载什么)。",
4006
4058
  "panels.market.add.problem.network": "源连不上。检查网络后重试。",
4007
4059
  "panels.market.add.problem.unknown": "预检没通过(原因未知)。展开安装详情看原始输出,或重试。",
4008
4060
  "panels.market.add.reason.invalidSpec": "写法不认",
@@ -4010,7 +4062,7 @@ window.__ModuleLoader__.load({
4010
4062
  "panels.market.add.reason.notBundle": "它不是一个 dsh 插件包",
4011
4063
  "panels.market.add.reason.notRemovable": "它是安装自带的组合包,不能卸",
4012
4064
  "panels.market.add.reason.bundleInUse": "还有东西在用它,卸不掉",
4013
- "panels.market.add.reason.stopProfile": "这个配置没开热更新,得先停掉进程",
4065
+ "panels.market.add.reason.stopProfile": "这份配置改了要重启,得先停掉工作台",
4014
4066
  "panels.market.add.reason.staleApproval": "要允许的安装脚本已经变了,重新来一次",
4015
4067
  "panels.market.add.reason.operationError": "pnpm 执行出错(详情见安装输出)",
4016
4068
  "panels.market.add.reason.buildBlocked": "pnpm 拦下了安装脚本",
@@ -4033,15 +4085,15 @@ window.__ModuleLoader__.load({
4033
4085
  "blocker.market.open": "去模块市场",
4034
4086
  "blocker.login.title": "需要登录 {platform}",
4035
4087
  "blocker.login.titleGeneric": "需要登录",
4036
- "blocker.login.hint": "工作台用你的浏览器登录态;登录一次就行,之后不用再登。",
4088
+ "blocker.login.hint": "工作台借你浏览器里的登录状态;登录一次就行,之后不用再登。",
4037
4089
  "blocker.login.go": "去登录",
4038
4090
  "blocker.login.manual": "在终端执行该插件的登录命令(见插件的文档),按提示完成登录后重试。",
4039
4091
  "blocker.forbidden.title": "没有权限访问 {platform}",
4040
4092
  "blocker.forbidden.titleGeneric": "没有权限",
4041
4093
  "blocker.forbidden.hint": "账号已登录,但没有这个项目/仓库的权限;申请之后再试。",
4042
4094
  "blocker.forbidden.open": "打开权限页",
4043
- "blocker.timeout.hint": "无头浏览器可能没起来,重试一次通常就好。",
4044
- "blocker.exec.hint": "确认 opencli 已安装且在 PATH 里(which opencli)。",
4095
+ "blocker.timeout.hint": "后台浏览器没起来,重试一次通常就好。",
4096
+ "blocker.exec.hint": "确认 opencli 已经装好、在终端里能直接运行(which opencli)。",
4045
4097
  "blocker.unknown.title": "出了点问题",
4046
4098
  "panels.reading": "正在读取面板配置…",
4047
4099
  "panels.cardBroken": "这个模块起不来:{unit}({reason})",
@@ -4055,7 +4107,7 @@ window.__ModuleLoader__.load({
4055
4107
  "env.elapsed": "已等待 {seconds} 秒",
4056
4108
  "env.stepFailed.install": "装不上",
4057
4109
  "env.stepFailed.path": "装了但还找不到",
4058
- "env.stepFailed.shell": "执行通道不可用",
4110
+ "env.stepFailed.shell": "连不上命令行",
4059
4111
  "env.toolchain.ok": "正常",
4060
4112
  "env.toolchain.warn": "还没完全准备好",
4061
4113
  "env.opencli.ok": "已就绪",
@@ -4072,10 +4124,10 @@ window.__ModuleLoader__.load({
4072
4124
  "env.fix.title": "怎么解决",
4073
4125
  "env.fix.why": "工作台用它自己那份后台工具(与你在终端里那套分开装,互不影响),这台机器上还没装好它。",
4074
4126
  "env.fix.whyPath": "后台工具装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。",
4075
- "env.fix.whyShell": "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4127
+ "env.fix.whyShell": "工作台拿不到这台机器的命令行,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4076
4128
  "env.fix.step": "在终端里运行下面这条命令,装好之后点「重试」:",
4077
4129
  "env.fix.stepPath": "新开一个终端窗口(或确认 npm 的全局 bin 目录在 PATH 里),然后点「重试」。",
4078
- "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明执行通道没配好。",
4130
+ "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明工作台还是拿不到命令行。",
4079
4131
  "env.fix.permission": "权限不够:在命令前加 sudo 重跑,或先把 npm 的全局目录配到你的用户目录。",
4080
4132
  "env.fix.network": "网络不通:检查网络或代理设置后重试。",
4081
4133
  "env.fix.details": "详细输出(排障用)",
@@ -4104,9 +4156,9 @@ window.__ModuleLoader__.load({
4104
4156
  "env.warm.done": "已就绪({n} 个站点)",
4105
4157
  "env.warm.short": "这次没提前连上 —— 不影响用,第一次取数会自己补",
4106
4158
  "env.unit.failed": "这个模块起不来",
4107
- "env.unit.failedHint": "它自己装配时报了错,别的模块不受影响。",
4108
- "env.unit.unchecked": "检测不了:拿不到执行通道",
4109
- "env.unit.uncheckedHint": "不是这个模块的问题,是执行通道不可用 —— 重启一次工作台再试。",
4159
+ "env.unit.failedHint": "它自己启动时报了错,别的模块不受影响。",
4160
+ "env.unit.unchecked": "检测不了:拿不到命令行",
4161
+ "env.unit.uncheckedHint": "不是这个模块的问题,是工作台拿不到命令行 —— 重启一次工作台再试。",
4110
4162
  "adapterSet.not-configured": "没配置适配器集合,用默认的。",
4111
4163
  "adapterSet.no-profile": "找不到 profile,没法加载适配器集合;先用默认的。",
4112
4164
  "adapterSet.malformed": "适配器集合要写包名(如 @acme/adapters-set);先用默认的。",
@@ -4149,7 +4201,7 @@ window.__ModuleLoader__.load({
4149
4201
  "sidebarEdition.official": "官方",
4150
4202
  "sidebarEdition.officialHint": "跟 dsh 官方一致、最稳:搜索、视图选项、显示更多、归档、添加工作区都齐,升级也不等我们适配。想省心就选它。",
4151
4203
  "sidebarEdition.custom": "自定义",
4152
- "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,两端淡出、跑马灯、工坊 DIY 新会话。项目多时更顺手。",
4204
+ "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,名字自动滚动、两侧渐隐,工坊 DIY 新会话。项目多时更顺手。",
4153
4205
  "sidebarEdition.saving": "配置中…",
4154
4206
  "sidebarEdition.reloadRequired": "已写入。刷新页面后生效(不用重启工作台)。",
4155
4207
  "sidebarEdition.reload": "刷新页面",
@@ -4178,25 +4230,25 @@ window.__ModuleLoader__.load({
4178
4230
  "record.act.halt": "停",
4179
4231
  "approval.record.site": "站点",
4180
4232
  "approval.record.what": "录制功能",
4181
- "approval.record.lands": "落点",
4233
+ "approval.record.lands": "保存到",
4182
4234
  "approval.record.noUrl": "没给站点地址(这次会被当场拒)",
4183
4235
  "approval.record.oneAction": "一次操作",
4184
4236
  "approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
4185
- "approval.longTask.what": "要停的那一趟",
4186
- "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 平台侧那趟活儿的收尾看模块自己",
4237
+ "approval.longTask.what": "要停的那次任务",
4238
+ "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
4187
4239
  "approval.publish.module": "模块",
4188
4240
  "approval.publish.target": "目标",
4189
4241
  "approval.publish.version": "版本",
4190
4242
  "approval.publish.author": "作者",
4191
- "approval.publish.authorMissing": "未署名(提交用本机 git 身份)",
4243
+ "approval.publish.authorMissing": "未署名",
4192
4244
  "approval.publish.registry": "源",
4193
4245
  "approval.publish.repo": "仓库",
4194
4246
  "approval.publish.branch": "分支",
4195
4247
  "approval.publish.defaultBranch": "默认分支",
4196
- "approval.publish.artifacts": "产物",
4248
+ "approval.publish.artifacts": "打包文件",
4197
4249
  "approval.publish.index": "索引",
4198
4250
  "approval.publish.commits": "提交",
4199
- "approval.publish.twoCommits": "产物 + market.json 两个 commit,一次 push",
4251
+ "approval.publish.twoCommits": "打包文件 + market.json 两次提交,一次推送",
4200
4252
  "approval.publish.reading": "读取中…",
4201
4253
  "approval.publish.changelog": "{version} 的更新日志",
4202
4254
  "approval.publish.changelogMissing": "这一版还没有更新日志({version}),发布会被拦下",
@@ -4954,7 +5006,11 @@ window.__ModuleLoader__.load({
4954
5006
  id: `${bucket.kind}:${bucket.name}`,
4955
5007
  kind: bucket.kind,
4956
5008
  label: bucket.label,
4957
- usedByKeys: bucket.users.map((unit) => byId.get(unit)?.card?.titleKey ?? unit),
5009
+ usedByKeys: bucket.users.map((unit) => {
5010
+ const manifest = byId.get(unit);
5011
+ if (manifest === void 0) return unit;
5012
+ return manifest.titleKey;
5013
+ }),
4958
5014
  state,
4959
5015
  canUpdate: state === "outdated" || state === "unsatisfied",
4960
5016
  ...version === void 0 ? {} : { version }
@@ -4972,6 +5028,7 @@ window.__ModuleLoader__.load({
4972
5028
  broken: "panels.market.broken",
4973
5029
  outdated: "panels.market.moduleOutdated",
4974
5030
  "pending-restart": "panels.market.pendingRestart",
5031
+ "pending-followup": "panels.market.pendingFollowUp",
4975
5032
  missing: "panels.market.missing",
4976
5033
  unchecked: "panels.market.unchecked",
4977
5034
  unknown: "panels.market.unchecked"
@@ -4984,6 +5041,7 @@ window.__ModuleLoader__.load({
4984
5041
  broken: "error",
4985
5042
  outdated: "warning",
4986
5043
  "pending-restart": "warning",
5044
+ "pending-followup": "warning",
4987
5045
  missing: "idle",
4988
5046
  unchecked: "idle",
4989
5047
  unknown: "idle"
@@ -5008,35 +5066,32 @@ window.__ModuleLoader__.load({
5008
5066
  if (reported.length > 0) return reported;
5009
5067
  return [...new Set(client ?? [])];
5010
5068
  }
5011
- function mergeTitles(known, manifests) {
5012
- let next = null;
5013
- for (const manifest of manifests) {
5014
- const titleKey = manifest.card?.titleKey;
5015
- if (titleKey === void 0 || known.has(manifest.id)) continue;
5016
- next ??= new Map(known);
5017
- next.set(manifest.id, titleKey);
5018
- }
5019
- return next ?? known;
5069
+ function updateBlockHintOf(block) {
5070
+ return block === "needs-workbench" ? "panels.market.updateNeedsWorkbench" : "panels.market.updateIncompatible";
5020
5071
  }
5021
5072
  function installedIdSet(installed) {
5022
5073
  if (installed === void 0) return null;
5023
5074
  return new Set(installed.map((item) => item.unit));
5024
5075
  }
5025
- function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5026
- const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
5076
+ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5077
+ const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.titleKey]));
5027
5078
  const rows = [];
5028
5079
  for (const module of modules) {
5029
5080
  if (listed.has(module.unit)) continue;
5030
5081
  const latest = module.local === true ? void 0 : module.latest;
5031
5082
  const outdated = latest !== void 0 && latest !== module.installed;
5083
+ const blocked = outdated ? module.latestBlocked : void 0;
5032
5084
  const loaded = titles.has(module.unit);
5033
5085
  const refused = refusalReasons(module.refused, module.clientRefused);
5034
5086
  const pending = !loaded && refused.length === 0;
5087
+ const titleKey = titles.get(module.unit);
5088
+ const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
5035
5089
  rows.push({
5036
5090
  id: module.unit,
5037
- titleKey: titles.get(module.unit) ?? known?.get(module.unit) ?? module.pkg,
5091
+ titleKey: titleKey ?? module.unit,
5092
+ ...remembered === void 0 ? {} : { label: remembered },
5038
5093
  state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
5039
- ...pending ? { hint: "panels.market.moduleRestartHint" } : {},
5094
+ ...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
5040
5095
  ...refused.length === 0 ? {} : { note: {
5041
5096
  key: "panels.market.moduleRefused",
5042
5097
  params: {}
@@ -5044,7 +5099,7 @@ window.__ModuleLoader__.load({
5044
5099
  ...module.local === true ? { local: true } : {},
5045
5100
  pkg: module.pkg,
5046
5101
  canInstall: false,
5047
- canUpdate: outdated,
5102
+ canUpdate: outdated && blocked === void 0,
5048
5103
  canUninstall: true,
5049
5104
  version: {
5050
5105
  installed: module.installed,
@@ -5052,7 +5107,8 @@ window.__ModuleLoader__.load({
5052
5107
  },
5053
5108
  ...outdated ? { moduleUpdate: {
5054
5109
  installed: module.installed,
5055
- latest
5110
+ latest,
5111
+ ...blocked === void 0 ? {} : { blocked }
5056
5112
  } } : {},
5057
5113
  defaultShown: defaults.has(module.unit),
5058
5114
  defaultChanged: changed[module.unit] ?? 0
@@ -5065,11 +5121,14 @@ window.__ModuleLoader__.load({
5065
5121
  return SWITCH_LOCKED.has(row.state);
5066
5122
  }
5067
5123
  function marketActions$1(row) {
5068
- if (row.workbench === true) return row.canUpdate ? ["update-workbench"] : [];
5124
+ if (row.workbench === true) {
5125
+ if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
5126
+ return row.canUpdate ? ["update-workbench"] : [];
5127
+ }
5069
5128
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
5070
5129
  return [
5071
5130
  ...row.canInstall ? ["install"] : [],
5072
- ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : ["update-bundle"],
5131
+ ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
5073
5132
  ...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
5074
5133
  ];
5075
5134
  }
@@ -5147,7 +5206,7 @@ window.__ModuleLoader__.load({
5147
5206
  return manifests.filter((manifest) => !gone.has(manifest.id));
5148
5207
  }
5149
5208
  function marketHasUpdates(rows, shared = []) {
5150
- return rows.some((row) => row.state === "outdated" || row.moduleUpdate !== void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
5209
+ return rows.some((row) => row.moduleUpdate === void 0 ? row.state === "outdated" : row.moduleUpdate.blocked === void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
5151
5210
  }
5152
5211
  function marketUpdatesOf(modules) {
5153
5212
  if (modules === null) return {};
@@ -5157,6 +5216,7 @@ window.__ModuleLoader__.load({
5157
5216
  next[module.unit] = {
5158
5217
  installed: module.installed,
5159
5218
  ...local || module.latest === void 0 ? {} : { latest: module.latest },
5219
+ ...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
5160
5220
  ...local ? { local: true } : {}
5161
5221
  };
5162
5222
  }
@@ -5195,17 +5255,19 @@ window.__ModuleLoader__.load({
5195
5255
  const reAdopt = capability?.released === true && !installDeclared;
5196
5256
  const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
5197
5257
  installed: entry.installed,
5198
- latest: entry.latest
5258
+ latest: entry.latest,
5259
+ ...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
5199
5260
  };
5200
5261
  const shown = moduleUpdate === void 0 ? state : "outdated";
5262
+ const hint = moduleUpdate?.blocked === void 0 ? shown === "unknown" || shown === "unchecked" ? "panels.market.uncheckedHint" : void 0 : updateBlockHintOf(moduleUpdate.blocked);
5201
5263
  rows.push({
5202
5264
  id: manifest.id,
5203
- titleKey: manifest.card?.titleKey ?? manifest.id,
5265
+ titleKey: manifest.titleKey,
5204
5266
  state: shown,
5205
5267
  canInstall: state !== "installed" && (install || reAdopt),
5206
5268
  canUpdate: onMachine && isOutdated(capability),
5207
5269
  canUninstall: onMachine,
5208
- ...shown === "unknown" || shown === "unchecked" ? { hint: "panels.market.uncheckedHint" } : {},
5270
+ ...hint === void 0 ? {} : { hint },
5209
5271
  ...entry === void 0 ? {} : { version: {
5210
5272
  installed: entry.installed,
5211
5273
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
@@ -5270,11 +5332,14 @@ window.__ModuleLoader__.load({
5270
5332
  installed: version.installed,
5271
5333
  latest
5272
5334
  } : void 0;
5335
+ const stale = !local && version.running !== void 0 && version.running !== version.installed;
5336
+ const followUp = version.followUp;
5337
+ const followUpState = !stale && followUp !== void 0;
5273
5338
  return {
5274
5339
  id: WORKBENCH_ROW_ID,
5275
5340
  titleKey: WORKBENCH_TITLE_KEY,
5276
5341
  workbench: true,
5277
- state: !local && version.running !== void 0 && version.running !== version.installed ? "pending-restart" : update === void 0 ? "installed" : "outdated",
5342
+ state: stale ? "pending-restart" : followUpState ? "pending-followup" : update === void 0 ? "installed" : "outdated",
5278
5343
  canInstall: false,
5279
5344
  canUpdate: update !== void 0,
5280
5345
  canUninstall: false,
@@ -5284,6 +5349,8 @@ window.__ModuleLoader__.load({
5284
5349
  ...latest === void 0 ? {} : { latest }
5285
5350
  },
5286
5351
  ...update === void 0 ? {} : { moduleUpdate: update },
5352
+ ...followUp === void 0 ? {} : { followUp },
5353
+ ...followUpState ? { hint: "panels.market.migrationHint" } : {},
5287
5354
  pkg: version.pkg
5288
5355
  };
5289
5356
  }
@@ -5291,6 +5358,7 @@ window.__ModuleLoader__.load({
5291
5358
  //#region src/app/layouts/rightbar/market-hint.ts
5292
5359
  var PROBLEM_KEY = "panels.market.hasProblem";
5293
5360
  var RESTART_KEY = "panels.market.pendingRestart";
5361
+ var FOLLOWUP_KEY = "panels.market.pendingFollowUp";
5294
5362
  var UNKNOWN_KEY = "panels.market.unchecked";
5295
5363
  var UPDATES_KEY = "panels.market.hasNew";
5296
5364
  function isProblem(row) {
@@ -5321,12 +5389,14 @@ window.__ModuleLoader__.load({
5321
5389
  ];
5322
5390
  const problem = rows.some(isProblem);
5323
5391
  const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
5392
+ const followUp = rows.some((row) => row.state === "pending-followup");
5324
5393
  const rosterRead = input.modules !== null;
5325
5394
  const unknown = rows.some((row) => isUnknown(row, rosterRead));
5326
5395
  const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
5327
5396
  const more = [];
5328
5397
  if (problem) {
5329
5398
  if (restart) more.push(RESTART_KEY);
5399
+ if (followUp) more.push(FOLLOWUP_KEY);
5330
5400
  if (unknown) more.push(UNKNOWN_KEY);
5331
5401
  if (updates) more.push(UPDATES_KEY);
5332
5402
  return {
@@ -5336,6 +5406,7 @@ window.__ModuleLoader__.load({
5336
5406
  };
5337
5407
  }
5338
5408
  if (restart) {
5409
+ if (followUp) more.push(FOLLOWUP_KEY);
5339
5410
  if (unknown) more.push(UNKNOWN_KEY);
5340
5411
  if (updates) more.push(UPDATES_KEY);
5341
5412
  return {
@@ -5344,6 +5415,15 @@ window.__ModuleLoader__.load({
5344
5415
  ...more.length === 0 ? {} : { moreKeys: more }
5345
5416
  };
5346
5417
  }
5418
+ if (followUp) {
5419
+ if (unknown) more.push(UNKNOWN_KEY);
5420
+ if (updates) more.push(UPDATES_KEY);
5421
+ return {
5422
+ labelKey: FOLLOWUP_KEY,
5423
+ tone: "warning",
5424
+ ...more.length === 0 ? {} : { moreKeys: more }
5425
+ };
5426
+ }
5347
5427
  if (unknown) {
5348
5428
  if (updates) more.push(UPDATES_KEY);
5349
5429
  return {
@@ -5639,114 +5719,121 @@ window.__ModuleLoader__.load({
5639
5719
  };
5640
5720
  }
5641
5721
  var MarketPage_module_default = {
5642
- marketList: "_marketList_9dzu9_1",
5643
- marketRow: "_marketRow_9dzu9_10",
5644
- marketIcon: "_marketIcon_9dzu9_20",
5645
- marketMain: "_marketMain_9dzu9_32",
5646
- marketName: "_marketName_9dzu9_39",
5647
- marketStatus: "_marketStatus_9dzu9_48",
5648
- marketStateText: "_marketStateText_9dzu9_58",
5649
- marketSep: "_marketSep_9dzu9_62",
5650
- marketReason: "_marketReason_9dzu9_66",
5651
- marketVersion: "_marketVersion_9dzu9_72",
5652
- marketLocalTag: "_marketLocalTag_9dzu9_94",
5653
- marketEnd: "_marketEnd_9dzu9_105",
5654
- marketSwitchSeat: "_marketSwitchSeat_9dzu9_112",
5655
- marketActions: "_marketActions_9dzu9_125",
5656
- marketUpdateAction: "_marketUpdateAction_9dzu9_131",
5657
- marketSelfDivider: "_marketSelfDivider_9dzu9_137",
5658
- marketSection: "_marketSection_9dzu9_143",
5659
- marketSectionHead: "_marketSectionHead_9dzu9_150",
5660
- marketSectionIcon: "_marketSectionIcon_9dzu9_156",
5661
- marketSectionTitle: "_marketSectionTitle_9dzu9_163",
5662
- marketSectionCount: "_marketSectionCount_9dzu9_169",
5663
- marketSectionQuiet: "_marketSectionQuiet_9dzu9_175",
5664
- marketProgress: "_marketProgress_9dzu9_188",
5665
- marketNote: "_marketNote_9dzu9_198",
5666
- marketFailure: "_marketFailure_9dzu9_205",
5667
- marketEmpty: "_marketEmpty_9dzu9_212",
5668
- marketPage: "_marketPage_9dzu9_217",
5669
- marketPageHead: "_marketPageHead_9dzu9_235",
5670
- marketPageTitle: "_marketPageTitle_9dzu9_243",
5671
- marketPageIntro: "_marketPageIntro_9dzu9_248",
5672
- marketPageTools: "_marketPageTools_9dzu9_254",
5673
- marketPanel: "_marketPanel_9dzu9_263",
5674
- marketTabs: "_marketTabs_9dzu9_273",
5675
- marketTabList: "_marketTabList_9dzu9_278",
5676
- marketIconButton: "_marketIconButton_9dzu9_283",
5677
- marketIconWrap: "_marketIconWrap_9dzu9_308",
5678
- marketIconButtonSpinning: "_marketIconButtonSpinning_9dzu9_312",
5679
- "wb-spin": "_wb-spin_9dzu9_1",
5680
- marketAddButton: "_marketAddButton_9dzu9_316",
5681
- marketEmptyTitle: "_marketEmptyTitle_9dzu9_333",
5682
- discoverPage: "_discoverPage_9dzu9_347",
5683
- discoverBar: "_discoverBar_9dzu9_354",
5684
- discoverTools: "_discoverTools_9dzu9_361",
5685
- discoverMarket: "_discoverMarket_9dzu9_367",
5686
- discoverMarketButton: "_discoverMarketButton_9dzu9_372",
5687
- discoverMarketName: "_discoverMarketName_9dzu9_379",
5688
- discoverLabels: "_discoverLabels_9dzu9_385",
5689
- discoverSort: "_discoverSort_9dzu9_390",
5690
- discoverRefresh: "_discoverRefresh_9dzu9_395",
5691
- discoverSearch: "_discoverSearch_9dzu9_399",
5692
- discoverChips: "_discoverChips_9dzu9_440",
5693
- discoverList: "_discoverList_9dzu9_447",
5694
- discoverCard: "_discoverCard_9dzu9_456",
5695
- discoverArtwork: "_discoverArtwork_9dzu9_470",
5696
- discoverArtworkImage: "_discoverArtworkImage_9dzu9_482",
5697
- discoverMain: "_discoverMain_9dzu9_486",
5698
- discoverTitleRow: "_discoverTitleRow_9dzu9_494",
5699
- discoverCardOpen: "_discoverCardOpen_9dzu9_502",
5700
- discoverStrong: "_discoverStrong_9dzu9_533",
5701
- discoverDesc: "_discoverDesc_9dzu9_539",
5702
- discoverMeta: "_discoverMeta_9dzu9_548",
5703
- discoverMuted: "_discoverMuted_9dzu9_555",
5704
- discoverEnd: "_discoverEnd_9dzu9_561",
5705
- discoverBlocked: "_discoverBlocked_9dzu9_570",
5706
- discoverEmpty: "_discoverEmpty_9dzu9_575",
5707
- discoverEmptyTitle: "_discoverEmptyTitle_9dzu9_584",
5708
- discoverDetail: "_discoverDetail_9dzu9_594",
5709
- discoverCrumb: "_discoverCrumb_9dzu9_600",
5710
- discoverCrumbIcon: "_discoverCrumbIcon_9dzu9_623",
5711
- discoverDetailHead: "_discoverDetailHead_9dzu9_627",
5712
- discoverDetailTitle: "_discoverDetailTitle_9dzu9_633",
5713
- discoverDetailText: "_discoverDetailText_9dzu9_639",
5714
- discoverDetailPanel: "_discoverDetailPanel_9dzu9_646",
5715
- discoverDetailTabs: "_discoverDetailTabs_9dzu9_653",
5716
- discoverDetailTabList: "_discoverDetailTabList_9dzu9_658",
5717
- discoverDocBody: "_discoverDocBody_9dzu9_663",
5718
- discoverDocNotice: "_discoverDocNotice_9dzu9_668",
5719
- discoverSection: "_discoverSection_9dzu9_674",
5720
- discoverSectionTitle: "_discoverSectionTitle_9dzu9_681",
5721
- discoverFacts: "_discoverFacts_9dzu9_687",
5722
- discoverFactRow: "_discoverFactRow_9dzu9_692",
5723
- discoverFactKind: "_discoverFactKind_9dzu9_702",
5724
- discoverFactValue: "_discoverFactValue_9dzu9_708",
5725
- discoverCode: "_discoverCode_9dzu9_716",
5726
- discoverTags: "_discoverTags_9dzu9_725",
5727
- discoverLink: "_discoverLink_9dzu9_732",
5728
- discoverVersions: "_discoverVersions_9dzu9_742",
5729
- discoverVersionRow: "_discoverVersionRow_9dzu9_750",
5730
- discoverVersionName: "_discoverVersionName_9dzu9_758",
5731
- discoverError: "_discoverError_9dzu9_763",
5732
- discoverFailure: "_discoverFailure_9dzu9_772",
5733
- discoverNotice: "_discoverNotice_9dzu9_778",
5734
- discoverMore: "_discoverMore_9dzu9_796",
5735
- discoverDialog: "_discoverDialog_9dzu9_800",
5736
- discoverDialogBody: "_discoverDialogBody_9dzu9_804",
5737
- discoverSourceList: "_discoverSourceList_9dzu9_810",
5738
- discoverSourceRow: "_discoverSourceRow_9dzu9_818",
5739
- discoverSourceError: "_discoverSourceError_9dzu9_826",
5740
- discoverSourceForm: "_discoverSourceForm_9dzu9_832",
5741
- discoverGrow: "_discoverGrow_9dzu9_838",
5742
- discoverField: "_discoverField_9dzu9_843",
5743
- discoverFieldLabel: "_discoverFieldLabel_9dzu9_849",
5744
- discoverConfirmHead: "_discoverConfirmHead_9dzu9_854",
5745
- discoverSkeletonFill: "_discoverSkeletonFill_9dzu9_860",
5746
- "wb-skeleton": "_wb-skeleton_9dzu9_1",
5747
- discoverSkeletonBar: "_discoverSkeletonBar_9dzu9_869",
5748
- discoverSkeletonTitle: "_discoverSkeletonTitle_9dzu9_876",
5749
- discoverSkeletonDesc: "_discoverSkeletonDesc_9dzu9_880"
5722
+ marketList: "_marketList_1idrk_1",
5723
+ marketRow: "_marketRow_1idrk_10",
5724
+ marketIcon: "_marketIcon_1idrk_20",
5725
+ marketMain: "_marketMain_1idrk_32",
5726
+ marketName: "_marketName_1idrk_39",
5727
+ marketStatus: "_marketStatus_1idrk_48",
5728
+ marketStateText: "_marketStateText_1idrk_58",
5729
+ marketSep: "_marketSep_1idrk_62",
5730
+ marketReason: "_marketReason_1idrk_66",
5731
+ marketVersion: "_marketVersion_1idrk_72",
5732
+ marketLocalTag: "_marketLocalTag_1idrk_94",
5733
+ marketEnd: "_marketEnd_1idrk_105",
5734
+ marketSwitchSeat: "_marketSwitchSeat_1idrk_112",
5735
+ marketActions: "_marketActions_1idrk_125",
5736
+ marketUpdateAction: "_marketUpdateAction_1idrk_131",
5737
+ marketSelfDivider: "_marketSelfDivider_1idrk_137",
5738
+ marketSection: "_marketSection_1idrk_143",
5739
+ marketSectionHead: "_marketSectionHead_1idrk_150",
5740
+ marketSectionIcon: "_marketSectionIcon_1idrk_156",
5741
+ marketSectionTitle: "_marketSectionTitle_1idrk_163",
5742
+ marketSectionCount: "_marketSectionCount_1idrk_169",
5743
+ marketSectionQuiet: "_marketSectionQuiet_1idrk_175",
5744
+ marketProgress: "_marketProgress_1idrk_188",
5745
+ marketNote: "_marketNote_1idrk_198",
5746
+ marketFailure: "_marketFailure_1idrk_205",
5747
+ marketEmpty: "_marketEmpty_1idrk_212",
5748
+ marketPage: "_marketPage_1idrk_217",
5749
+ marketPageHead: "_marketPageHead_1idrk_235",
5750
+ marketPageTitle: "_marketPageTitle_1idrk_243",
5751
+ marketPageIntro: "_marketPageIntro_1idrk_248",
5752
+ marketPageTools: "_marketPageTools_1idrk_254",
5753
+ marketPanel: "_marketPanel_1idrk_263",
5754
+ marketTabs: "_marketTabs_1idrk_273",
5755
+ marketTabList: "_marketTabList_1idrk_278",
5756
+ marketIconButton: "_marketIconButton_1idrk_283",
5757
+ marketIconWrap: "_marketIconWrap_1idrk_308",
5758
+ marketIconButtonSpinning: "_marketIconButtonSpinning_1idrk_312",
5759
+ "wb-spin": "_wb-spin_1idrk_1",
5760
+ marketAddButton: "_marketAddButton_1idrk_316",
5761
+ marketEmptyTitle: "_marketEmptyTitle_1idrk_333",
5762
+ discoverPage: "_discoverPage_1idrk_347",
5763
+ discoverBar: "_discoverBar_1idrk_354",
5764
+ discoverTools: "_discoverTools_1idrk_361",
5765
+ discoverMarket: "_discoverMarket_1idrk_367",
5766
+ discoverMarketButton: "_discoverMarketButton_1idrk_372",
5767
+ discoverMarketName: "_discoverMarketName_1idrk_379",
5768
+ discoverLabels: "_discoverLabels_1idrk_385",
5769
+ discoverSort: "_discoverSort_1idrk_390",
5770
+ discoverRefresh: "_discoverRefresh_1idrk_395",
5771
+ discoverSearch: "_discoverSearch_1idrk_399",
5772
+ discoverSearchField: "_discoverSearchField_1idrk_407",
5773
+ discoverSearchFieldFilled: "_discoverSearchFieldFilled_1idrk_412",
5774
+ discoverSearchClear: "_discoverSearchClear_1idrk_421",
5775
+ discoverChips: "_discoverChips_1idrk_472",
5776
+ discoverList: "_discoverList_1idrk_479",
5777
+ discoverCard: "_discoverCard_1idrk_488",
5778
+ discoverArtwork: "_discoverArtwork_1idrk_502",
5779
+ discoverArtworkImage: "_discoverArtworkImage_1idrk_514",
5780
+ discoverMain: "_discoverMain_1idrk_518",
5781
+ discoverTitleRow: "_discoverTitleRow_1idrk_526",
5782
+ discoverCardOpen: "_discoverCardOpen_1idrk_534",
5783
+ discoverStrong: "_discoverStrong_1idrk_565",
5784
+ discoverDesc: "_discoverDesc_1idrk_571",
5785
+ discoverMeta: "_discoverMeta_1idrk_580",
5786
+ discoverMuted: "_discoverMuted_1idrk_587",
5787
+ discoverEnd: "_discoverEnd_1idrk_593",
5788
+ discoverBlocked: "_discoverBlocked_1idrk_602",
5789
+ discoverEmpty: "_discoverEmpty_1idrk_607",
5790
+ discoverEmptyTitle: "_discoverEmptyTitle_1idrk_616",
5791
+ discoverDetail: "_discoverDetail_1idrk_626",
5792
+ discoverCrumb: "_discoverCrumb_1idrk_632",
5793
+ discoverCrumbIcon: "_discoverCrumbIcon_1idrk_655",
5794
+ discoverDetailHead: "_discoverDetailHead_1idrk_659",
5795
+ discoverDetailTitle: "_discoverDetailTitle_1idrk_665",
5796
+ discoverDetailText: "_discoverDetailText_1idrk_671",
5797
+ discoverDetailPanel: "_discoverDetailPanel_1idrk_678",
5798
+ discoverDetailTabs: "_discoverDetailTabs_1idrk_685",
5799
+ discoverDetailTabList: "_discoverDetailTabList_1idrk_690",
5800
+ discoverDocBody: "_discoverDocBody_1idrk_695",
5801
+ discoverDocNotice: "_discoverDocNotice_1idrk_700",
5802
+ discoverSection: "_discoverSection_1idrk_706",
5803
+ discoverSectionTitle: "_discoverSectionTitle_1idrk_713",
5804
+ discoverFacts: "_discoverFacts_1idrk_719",
5805
+ discoverFactRow: "_discoverFactRow_1idrk_724",
5806
+ discoverFactKind: "_discoverFactKind_1idrk_734",
5807
+ discoverFactValue: "_discoverFactValue_1idrk_740",
5808
+ discoverCode: "_discoverCode_1idrk_748",
5809
+ discoverTags: "_discoverTags_1idrk_757",
5810
+ discoverLink: "_discoverLink_1idrk_764",
5811
+ discoverVersions: "_discoverVersions_1idrk_774",
5812
+ discoverVersionRow: "_discoverVersionRow_1idrk_782",
5813
+ discoverVersionName: "_discoverVersionName_1idrk_790",
5814
+ discoverError: "_discoverError_1idrk_795",
5815
+ discoverFailure: "_discoverFailure_1idrk_804",
5816
+ discoverLoading: "_discoverLoading_1idrk_810",
5817
+ discoverNotice: "_discoverNotice_1idrk_819",
5818
+ discoverMore: "_discoverMore_1idrk_837",
5819
+ discoverDialog: "_discoverDialog_1idrk_841",
5820
+ discoverDialogBody: "_discoverDialogBody_1idrk_845",
5821
+ discoverSourceList: "_discoverSourceList_1idrk_851",
5822
+ discoverSourceRow: "_discoverSourceRow_1idrk_859",
5823
+ discoverSourceCurrent: "_discoverSourceCurrent_1idrk_868",
5824
+ discoverSourceLoading: "_discoverSourceLoading_1idrk_875",
5825
+ discoverSourceHint: "_discoverSourceHint_1idrk_885",
5826
+ discoverSourceError: "_discoverSourceError_1idrk_899",
5827
+ discoverSourceForm: "_discoverSourceForm_1idrk_905",
5828
+ discoverGrow: "_discoverGrow_1idrk_911",
5829
+ discoverField: "_discoverField_1idrk_916",
5830
+ discoverFieldLabel: "_discoverFieldLabel_1idrk_922",
5831
+ discoverConfirmHead: "_discoverConfirmHead_1idrk_927",
5832
+ discoverSkeletonFill: "_discoverSkeletonFill_1idrk_933",
5833
+ "wb-skeleton": "_wb-skeleton_1idrk_1",
5834
+ discoverSkeletonBar: "_discoverSkeletonBar_1idrk_942",
5835
+ discoverSkeletonTitle: "_discoverSkeletonTitle_1idrk_949",
5836
+ discoverSkeletonDesc: "_discoverSkeletonDesc_1idrk_953"
5750
5837
  };
5751
5838
  //#endregion
5752
5839
  //#region src/app/layouts/market/discover-states.tsx
@@ -5770,6 +5857,13 @@ window.__ModuleLoader__.load({
5770
5857
  function DiscoverEmptyText({ text }) {
5771
5858
  return /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.discoverMuted }, text);
5772
5859
  }
5860
+ function DiscoverLoading({ label }) {
5861
+ return /* @__PURE__ */ (0, react.createElement)("p", {
5862
+ className: MarketPage_module_default.discoverLoading,
5863
+ role: "status",
5864
+ "aria-live": "polite"
5865
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }), label);
5866
+ }
5773
5867
  function DiscoverFailure({ t, text, onRetry }) {
5774
5868
  return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverFailure }, /* @__PURE__ */ (0, react.createElement)("p", {
5775
5869
  className: MarketPage_module_default.discoverError,
@@ -5838,6 +5932,18 @@ window.__ModuleLoader__.load({
5838
5932
  return row.kind === "extension" ? "plugin" : "lib";
5839
5933
  }
5840
5934
  //#endregion
5935
+ //#region src/app/layouts/rightbar/market-names.ts
5936
+ function namesOf(t, modules, titleOf) {
5937
+ const shown = /* @__PURE__ */ new Map();
5938
+ for (const module of modules) {
5939
+ const key = unitTitleKey(module.unit);
5940
+ const live = t(key);
5941
+ const name = live !== key && live !== "" ? live : titleOf(module.title);
5942
+ if (name !== "") shown.set(module.unit, name);
5943
+ }
5944
+ return shown;
5945
+ }
5946
+ //#endregion
5841
5947
  //#region src/app/layouts/rightbar/market-view-text.ts
5842
5948
  var PROGRESS_KEY = {
5843
5949
  install: "panels.market.installing",
@@ -5848,7 +5954,9 @@ window.__ModuleLoader__.load({
5848
5954
  "update-dependency": "panels.market.updating",
5849
5955
  "update-plugin": "panels.market.updating",
5850
5956
  "uninstall-plugin": "panels.market.uninstalling",
5851
- "update-workbench": "panels.market.updating"
5957
+ "update-workbench": "panels.market.updating",
5958
+ "migrate-workbench": "panels.market.migrating",
5959
+ "dismiss-followup": "panels.market.dismissing"
5852
5960
  };
5853
5961
  var ACTION_LABEL_KEY = {
5854
5962
  install: "panels.market.install",
@@ -5859,7 +5967,9 @@ window.__ModuleLoader__.load({
5859
5967
  "update-dependency": "panels.market.update",
5860
5968
  "update-plugin": "panels.market.update",
5861
5969
  "uninstall-plugin": "panels.market.uninstall",
5862
- "update-workbench": "panels.market.update"
5970
+ "update-workbench": "panels.market.update",
5971
+ "migrate-workbench": "panels.market.migrateAction",
5972
+ "dismiss-followup": "panels.market.dismissFollowUp"
5863
5973
  };
5864
5974
  function holdOf(pending, application) {
5865
5975
  if (pending === null || pending.row === void 0) return void 0;
@@ -5907,12 +6017,9 @@ window.__ModuleLoader__.load({
5907
6017
  function marketFootVisible(shown, installed) {
5908
6018
  return shown.length > 0 || installed.length > 0;
5909
6019
  }
5910
- function useMarketTitles(manifests, mocked) {
5911
- const [titles, setTitles] = (0, react.useState)(/* @__PURE__ */ new Map());
5912
- (0, react.useEffect)(() => {
5913
- if (!mocked) setTitles((known) => mergeTitles(known, manifests));
5914
- }, [manifests, mocked]);
5915
- return titles;
6020
+ var NO_NAMES = /* @__PURE__ */ new Map();
6021
+ function marketNamesOf(t, modules, titleOf, mocked) {
6022
+ return mocked ? NO_NAMES : namesOf(t, modules, titleOf);
5916
6023
  }
5917
6024
  function useHeldRow(pending, backInRoster) {
5918
6025
  const [held, setHeld] = (0, react.useState)(void 0);
@@ -5948,10 +6055,11 @@ window.__ModuleLoader__.load({
5948
6055
  const { pending, removing } = input;
5949
6056
  if (removing === null || pending === null) return void 0;
5950
6057
  if (input.rows.some((row) => row.id === removing)) return void 0;
6058
+ const name = pending.label ?? input.names.get(removing);
5951
6059
  return {
5952
6060
  id: removing,
5953
- titleKey: pending.titleKey ?? input.titles.get(removing) ?? removing,
5954
- ...pending.label === void 0 ? {} : { label: pending.label },
6061
+ titleKey: pending.titleKey ?? removing,
6062
+ ...name === void 0 ? {} : { label: name },
5955
6063
  state: "installed",
5956
6064
  canInstall: false,
5957
6065
  canUpdate: false,
@@ -6068,49 +6176,120 @@ window.__ModuleLoader__.load({
6068
6176
  "update-plugin",
6069
6177
  "update-workbench"
6070
6178
  ];
6179
+ function MigrationConfirm({ t, onConfirm, onCancel }) {
6180
+ const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6181
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
6182
+ open: true,
6183
+ title: t("panels.market.migrateConfirmTitle"),
6184
+ description: t("panels.market.migrateConfirmDetail"),
6185
+ acknowledgeLabel: t("panels.market.migrateConfirmAck"),
6186
+ cancelLabel: t("panels.market.confirmNo"),
6187
+ closeLabel: t("panels.market.confirmNo"),
6188
+ confirmLabel: t("panels.market.migrateConfirmYes"),
6189
+ acknowledged,
6190
+ onAcknowledgedChange: setAcknowledged,
6191
+ onCancel,
6192
+ onConfirm
6193
+ });
6194
+ }
6195
+ function DismissFollowUpConfirm({ t, onConfirm, onCancel }) {
6196
+ const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6197
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
6198
+ open: true,
6199
+ title: t("panels.market.dismissFollowUpTitle"),
6200
+ description: t("panels.market.dismissFollowUpDetail"),
6201
+ acknowledgeLabel: t("panels.market.dismissFollowUpAck"),
6202
+ cancelLabel: t("panels.market.confirmNo"),
6203
+ closeLabel: t("panels.market.confirmNo"),
6204
+ confirmLabel: t("panels.market.dismissFollowUpYes"),
6205
+ acknowledged,
6206
+ onAcknowledgedChange: setAcknowledged,
6207
+ onCancel,
6208
+ onConfirm
6209
+ });
6210
+ }
6211
+ function MarketLineDialogs({ t, migrationOpen, dismissOpen, onMigrationCancel, onMigrationConfirm, onDismissCancel, onDismissConfirm }) {
6212
+ return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, migrationOpen ? /* @__PURE__ */ (0, react.createElement)(MigrationConfirm, {
6213
+ t,
6214
+ onCancel: onMigrationCancel,
6215
+ onConfirm: onMigrationConfirm
6216
+ }) : null, dismissOpen ? /* @__PURE__ */ (0, react.createElement)(DismissFollowUpConfirm, {
6217
+ t,
6218
+ onCancel: onDismissCancel,
6219
+ onConfirm: onDismissConfirm
6220
+ }) : null);
6221
+ }
6222
+ function MarketLineStatus({ t, row, quiet }) {
6223
+ const stateText = t(MARKET_STATE_KEY[row.state]);
6224
+ const noteText = row.note === void 0 ? null : t(row.note.key, row.note.params);
6225
+ if (quiet) return null;
6226
+ return /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStatus }, row.state === "checking" ? /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }) : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
6227
+ state: MARKET_DOT[row.state],
6228
+ size: 9
6229
+ }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStateText }, stateText), row.hint === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6230
+ className: MarketPage_module_default.marketSep,
6231
+ "aria-hidden": "true"
6232
+ }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, t(row.hint))), noteText === null ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6233
+ className: MarketPage_module_default.marketSep,
6234
+ "aria-hidden": "true"
6235
+ }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, noteText)));
6236
+ }
6071
6237
  function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6072
6238
  const running = pending !== null && pending.id === row.id ? pending : null;
6073
6239
  const locked = pending !== null;
6240
+ const [migrationOpen, setMigrationOpen] = (0, react.useState)(false);
6241
+ const [dismissOpen, setDismissOpen] = (0, react.useState)(false);
6074
6242
  const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
6075
6243
  const actions = marketActions$1(row);
6076
6244
  const switchLocked = marketSwitchLocked(row);
6077
- const stateText = t(MARKET_STATE_KEY[row.state]);
6078
- const noteText = row.note === void 0 ? null : t(row.note.key, row.note.params);
6079
6245
  return /* @__PURE__ */ (0, react.createElement)("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ (0, react.createElement)("span", {
6080
6246
  className: MarketPage_module_default.marketIcon,
6081
6247
  "aria-hidden": "true"
6082
6248
  }, packageIcon(marketRowKind(row))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketName }, marketRowTitle(row, t), row.versionLabel === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketVersion }, row.versionLabel), row.version === void 0 || row.versionLabel !== void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketVersion }, row.version.installed !== void 0 && row.version.latest !== void 0 && row.version.installed !== row.version.latest ? t("panels.market.versionArrow", {
6083
6249
  from: row.version.installed,
6084
6250
  to: row.version.latest
6085
- }) : row.version.installed ?? row.version.latest ?? ""), row.local === true ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketLocalTag }, t("panels.market.localMark")) : null), quiet ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStatus }, row.state === "checking" ? /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }) : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
6086
- state: MARKET_DOT[row.state],
6087
- size: 9
6088
- }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStateText }, stateText), row.hint === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6089
- className: MarketPage_module_default.marketSep,
6090
- "aria-hidden": "true"
6091
- }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, t(row.hint))), noteText === null ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6092
- className: MarketPage_module_default.marketSep,
6093
- "aria-hidden": "true"
6094
- }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, noteText)))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
6251
+ }) : row.version.installed ?? row.version.latest ?? ""), row.local === true ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketLocalTag }, t("panels.market.localMark")) : null), /* @__PURE__ */ (0, react.createElement)(MarketLineStatus, {
6252
+ t,
6253
+ row,
6254
+ quiet
6255
+ })), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
6095
6256
  const danger = dangerActions.includes(action);
6096
6257
  const update = updateActions.includes(action);
6097
6258
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6098
6259
  key: action,
6099
6260
  type: "button",
6100
6261
  size: "sm",
6101
- variant: action === "install" ? "primary" : "outline",
6262
+ variant: action === "install" || action === "migrate-workbench" ? "primary" : "outline",
6102
6263
  className: danger ? "wb-dangerAction" : update ? MarketPage_module_default.marketUpdateAction : void 0,
6103
6264
  icon: danger ? /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 13 }) : void 0,
6104
6265
  "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
6105
6266
  disabled: locked,
6106
- onClick: () => onAct(action)
6267
+ onClick: () => {
6268
+ if (action === "migrate-workbench") setMigrationOpen(true);
6269
+ else if (action === "dismiss-followup") setDismissOpen(true);
6270
+ else onAct(action);
6271
+ }
6107
6272
  }, t(ACTION_LABEL_KEY[action]));
6108
6273
  })), row.defaultShown === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(Tip, { label: t(switchLocked ? "panels.market.defaultLocked" : "panels.market.defaultHint") }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSwitchSeat }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Switch, {
6109
6274
  checked: row.defaultShown,
6110
6275
  disabled: boardBusy === true || locked || switchLocked,
6111
6276
  label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
6112
6277
  onChange: (next) => onDefault?.(next)
6113
- })))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure));
6278
+ })))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure), /* @__PURE__ */ (0, react.createElement)(MarketLineDialogs, {
6279
+ t,
6280
+ migrationOpen,
6281
+ dismissOpen,
6282
+ onMigrationCancel: () => setMigrationOpen(false),
6283
+ onMigrationConfirm: () => {
6284
+ setMigrationOpen(false);
6285
+ onAct("migrate-workbench");
6286
+ },
6287
+ onDismissCancel: () => setDismissOpen(false),
6288
+ onDismissConfirm: () => {
6289
+ setDismissOpen(false);
6290
+ onAct("dismiss-followup");
6291
+ }
6292
+ }));
6114
6293
  }
6115
6294
  function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
6116
6295
  if (rows.length === 0) return null;
@@ -6425,10 +6604,13 @@ window.__ModuleLoader__.load({
6425
6604
  seats.setConfirming(null);
6426
6605
  seats.setFailed(null);
6427
6606
  seats.setNotice(null);
6428
- const outcome = await send(action === "update-dependency" ? {
6607
+ const outcome = await send(action === "dismiss-followup" ? {
6608
+ action,
6609
+ id: row?.followUp?.id ?? ""
6610
+ } : action === "update-dependency" ? {
6429
6611
  action,
6430
6612
  id
6431
- } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" ? {
6613
+ } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench" ? {
6432
6614
  action,
6433
6615
  name: row?.pkg ?? ""
6434
6616
  } : {
@@ -6446,6 +6628,21 @@ window.__ModuleLoader__.load({
6446
6628
  return;
6447
6629
  }
6448
6630
  const value = outcome.value;
6631
+ if (action === "dismiss-followup") {
6632
+ onChanged({ force: true });
6633
+ seats.setPending(null);
6634
+ seats.setHeld(void 0);
6635
+ seats.setNotice(t("panels.market.dismissed"));
6636
+ return;
6637
+ }
6638
+ if (action === "migrate-workbench") {
6639
+ const added = recordOf(value)?.["added"];
6640
+ onChanged({ force: true });
6641
+ seats.setPending(null);
6642
+ seats.setHeld(void 0);
6643
+ seats.setNotice(t("panels.market.migrateDone", { added: typeof added === "number" ? String(added) : "0" }));
6644
+ return;
6645
+ }
6449
6646
  const change = changeOf(value);
6450
6647
  const failure = updateVerdictText(updateVerdictOf({
6451
6648
  action,
@@ -6500,9 +6697,6 @@ window.__ModuleLoader__.load({
6500
6697
  "remove-bundle",
6501
6698
  "uninstall-plugin"
6502
6699
  ];
6503
- function marketMigrationNotice(t, update) {
6504
- return update?.migration === "needed" ? t("panels.market.selfUpdateNeedsMigrate") : null;
6505
- }
6506
6700
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6507
6701
  const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6508
6702
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -6572,8 +6766,8 @@ window.__ModuleLoader__.load({
6572
6766
  }));
6573
6767
  }
6574
6768
  function useMarketScene(input) {
6575
- const { manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
6576
- const titles = useMarketTitles(manifests, mock !== void 0);
6769
+ const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
6770
+ const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
6577
6771
  const catalog = mock?.manifests ?? manifests;
6578
6772
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
6579
6773
  const effective = mock === void 0 ? capabilities : mock.capabilities;
@@ -6587,13 +6781,13 @@ window.__ModuleLoader__.load({
6587
6781
  const pinned = pinnedRowOf(pending, steady.held);
6588
6782
  const busyId = heldIdOf(pending, steady.held);
6589
6783
  return {
6590
- titles,
6784
+ names,
6591
6785
  catalog,
6592
6786
  effective,
6593
6787
  updateMap,
6594
6788
  rows,
6595
6789
  shared,
6596
- installedList: installedRows((mock?.installed ?? installed ?? []).filter((module) => module.unit !== pinned?.id && (!(settling?.has(module.unit) ?? false) || module.unit === busyId) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), titles, byDefault, changed),
6790
+ installedList: installedRows((mock?.installed ?? installed ?? []).filter((module) => module.unit !== pinned?.id && (!(settling?.has(module.unit) ?? false) || module.unit === busyId) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), mock === void 0 ? names : void 0, byDefault, changed),
6597
6791
  byDefault,
6598
6792
  steady,
6599
6793
  pinned,
@@ -6601,12 +6795,14 @@ window.__ModuleLoader__.load({
6601
6795
  busyId
6602
6796
  };
6603
6797
  }
6604
- function MarketView({ t, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
6798
+ function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
6605
6799
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
6606
6800
  mock,
6607
6801
  onPending
6608
6802
  });
6609
- const { titles, effective, updateMap, rows, shared, installedList, byDefault, steady, pinned, removing, busyId } = useMarketScene({
6803
+ const { names, effective, updateMap, rows, shared, installedList, byDefault, steady, pinned, removing, busyId } = useMarketScene({
6804
+ t,
6805
+ titleOf,
6610
6806
  manifests,
6611
6807
  installable,
6612
6808
  capabilities,
@@ -6651,7 +6847,7 @@ window.__ModuleLoader__.load({
6651
6847
  pending,
6652
6848
  removing,
6653
6849
  rows,
6654
- titles
6850
+ names
6655
6851
  });
6656
6852
  const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
6657
6853
  const shown = withPinnedRow(pendingRow === void 0 ? rows : [...rows, pendingRow], pinned);
@@ -6679,21 +6875,18 @@ window.__ModuleLoader__.load({
6679
6875
  send: (body) => provision.send(body),
6680
6876
  onChanged
6681
6877
  });
6682
- const landed = pendingLanded(pending, updateMap, effective, workbench?.installed, shared, pluginSource === null ? null : pluginList, {
6683
- units: installed === void 0 ? null : new Set(installed.map((module) => module.unit)),
6684
- plugins: pluginSource === null ? null : new Set(pluginList.map((row) => row.id))
6685
- });
6686
- const effectiveSelfUpdate = mock?.selfUpdate ?? selfUpdate;
6687
6878
  useSettleHold({
6688
6879
  pending,
6689
- landed,
6880
+ landed: pendingLanded(pending, updateMap, effective, workbench?.installed, shared, pluginSource === null ? null : pluginList, {
6881
+ units: installed === void 0 ? null : new Set(installed.map((module) => module.unit)),
6882
+ plugins: pluginSource === null ? null : new Set(pluginList.map((row) => row.id))
6883
+ }),
6690
6884
  t,
6691
6885
  onChanged,
6692
- selfUpdate: effectiveSelfUpdate,
6886
+ selfUpdate: mock?.selfUpdate ?? selfUpdate,
6693
6887
  setPending,
6694
6888
  setFailed
6695
6889
  });
6696
- const migrationNotice = marketMigrationNotice(t, effectiveSelfUpdate);
6697
6890
  const settled = marketSettled(freshness, installedRead);
6698
6891
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
6699
6892
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ (0, react.createElement)(MarketChecking, { t });
@@ -6707,7 +6900,7 @@ window.__ModuleLoader__.load({
6707
6900
  shared,
6708
6901
  pending,
6709
6902
  failed,
6710
- notice: notice ?? migrationNotice,
6903
+ notice,
6711
6904
  act,
6712
6905
  onConfirming: setConfirming,
6713
6906
  setDefault,
@@ -6923,7 +7116,7 @@ window.__ModuleLoader__.load({
6923
7116
  if (url === "" || url.includes("#") || hasCredentials(url)) return { ok: false };
6924
7117
  if (HTTP.test(url)) {
6925
7118
  const asGit = REPO_FILE.test(url);
6926
- const label = hostOf(url);
7119
+ const label = asGit ? sourceSuffix(url) || hostOf(url) : hostOf(url);
6927
7120
  if (label === "") return { ok: false };
6928
7121
  return {
6929
7122
  ok: true,
@@ -6956,6 +7149,13 @@ window.__ModuleLoader__.load({
6956
7149
  function sourceSuffix(url) {
6957
7150
  return (withoutTrailingSlash(url).split(/[/:]/).filter((part) => part !== "").pop() ?? "").replace(/\.git$/, "");
6958
7151
  }
7152
+ function sourceTransport(url) {
7153
+ if (GIT_SSH.test(url) || /^ssh:\/\//i.test(url) || /^git\+ssh:\/\//i.test(url)) return "ssh";
7154
+ if (/^git:\/\//i.test(url)) return "git";
7155
+ if (/^https:\/\//i.test(url)) return "https";
7156
+ if (/^http:\/\//i.test(url)) return "http";
7157
+ return "";
7158
+ }
6959
7159
  function sourceLabelsOf(sources) {
6960
7160
  const counts = /* @__PURE__ */ new Map();
6961
7161
  for (const source of sources) counts.set(source.label, (counts.get(source.label) ?? 0) + 1);
@@ -6966,7 +7166,8 @@ window.__ModuleLoader__.load({
6966
7166
  continue;
6967
7167
  }
6968
7168
  const suffix = sourceSuffix(source.url);
6969
- labels.set(source.id, suffix === "" ? source.url : `${source.label} · ${suffix}`);
7169
+ const detail = suffix !== "" && suffix !== source.label ? suffix : sourceTransport(source.url);
7170
+ labels.set(source.id, detail === "" ? source.url : `${detail} · ${source.label}`);
6970
7171
  }
6971
7172
  return labels;
6972
7173
  }
@@ -7093,11 +7294,15 @@ window.__ModuleLoader__.load({
7093
7294
  var MARKET_DISCOVER_ROUTE = "panels/market-discover";
7094
7295
  var MARKET_DOC_ROUTE = "panels/market-doc";
7095
7296
  var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
7297
+ var MARKET_SOURCES_ROUTE = "panels/market-sources";
7096
7298
  //#endregion
7097
7299
  //#region src/shared/hooks/market-queries.ts
7098
7300
  function readMarketDiscover(options = {}) {
7099
7301
  return apiGet(MARKET_DISCOVER_ROUTE, options.force === true ? { force: "1" } : {});
7100
7302
  }
7303
+ function readMarketSources() {
7304
+ return apiGet(MARKET_SOURCES_ROUTE);
7305
+ }
7101
7306
  function readMarketDoc(name, version, kind) {
7102
7307
  return apiGet(MARKET_DOC_ROUTE, {
7103
7308
  name,
@@ -7105,10 +7310,11 @@ window.__ModuleLoader__.load({
7105
7310
  kind
7106
7311
  });
7107
7312
  }
7108
- function readPublishPreview(unit, version) {
7313
+ function readPublishPreview(unit, version, author) {
7109
7314
  return apiGet(MARKET_PUBLISH_PREVIEW_ROUTE, {
7110
7315
  unit,
7111
- ...version === void 0 || version === "" ? {} : { version }
7316
+ ...version === void 0 || version === "" ? {} : { version },
7317
+ ...author === void 0 || author === "" ? {} : { author }
7112
7318
  });
7113
7319
  }
7114
7320
  //#endregion
@@ -7362,6 +7568,7 @@ window.__ModuleLoader__.load({
7362
7568
  const [url, setUrl] = (0, react.useState)("");
7363
7569
  const [problem, setProblem] = (0, react.useState)(null);
7364
7570
  const pending = props.busy || props.adding;
7571
+ const selectedVisible = props.sources.some((source) => source.id === props.selected);
7365
7572
  const add = () => {
7366
7573
  if (pending) return;
7367
7574
  const parsed = sourceFromUrl(url);
@@ -7384,13 +7591,29 @@ window.__ModuleLoader__.load({
7384
7591
  closeLabel: t("panels.discover.close"),
7385
7592
  description: t("panels.discover.sourcesIntro"),
7386
7593
  className: MarketPage_module_default.discoverDialog
7387
- }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverDialogBody }, props.sources.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", {
7594
+ }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverDialogBody }, props.loading && !selectedVisible ? props.slow ? /* @__PURE__ */ (0, react.createElement)("p", {
7595
+ className: MarketPage_module_default.discoverNotice,
7596
+ role: "note"
7597
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
7598
+ size: 14,
7599
+ "aria-hidden": "true"
7600
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.slowHint"))) : /* @__PURE__ */ (0, react.createElement)(DiscoverLoading, { label: t("panels.discover.loading") }) : null, props.sources.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", {
7388
7601
  className: MarketPage_module_default.discoverSourceList,
7389
7602
  "aria-label": t("panels.discover.sourcesLabel")
7390
7603
  }, props.sources.map((source) => /* @__PURE__ */ (0, react.createElement)("li", {
7391
7604
  key: source.id,
7392
7605
  className: MarketPage_module_default.discoverSourceRow
7393
- }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverStrong }, source.label), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverMeta }, source.url), props.problem?.id === source.id ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceError }, props.problem.detail) : null), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7606
+ }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverStrong }, source.label), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverMeta }, source.url), !props.loading && props.problem?.id === source.id ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceError }, props.problem.detail) : null), source.id === props.selected ? props.loading ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceLoading }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }), t("panels.discover.loading")) : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceCurrent }, t("panels.discover.sourceCurrent")) : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7607
+ type: "button",
7608
+ variant: "ghost",
7609
+ size: "sm",
7610
+ "aria-label": t("panels.discover.useSourceNamed", { label: source.label }),
7611
+ disabled: pending,
7612
+ onClick: () => {
7613
+ props.onSelect(source.id);
7614
+ props.onClose();
7615
+ }
7616
+ }, t("panels.discover.useSource")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7394
7617
  label: t("panels.discover.removeSource"),
7395
7618
  side: "bottom",
7396
7619
  portal: true,
@@ -7403,7 +7626,13 @@ window.__ModuleLoader__.load({
7403
7626
  "aria-label": t("panels.discover.removeSourceNamed", { url: source.url }),
7404
7627
  disabled: pending,
7405
7628
  onClick: () => props.onRemove(source.id)
7406
- }))))), /* @__PURE__ */ (0, react.createElement)("form", {
7629
+ })), source.id === props.selected && props.loading && props.slow ? /* @__PURE__ */ (0, react.createElement)("span", {
7630
+ className: MarketPage_module_default.discoverSourceHint,
7631
+ role: "note"
7632
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
7633
+ size: 12,
7634
+ "aria-hidden": "true"
7635
+ }), t("panels.discover.slowHint")) : null))), /* @__PURE__ */ (0, react.createElement)("form", {
7407
7636
  className: MarketPage_module_default.discoverSourceForm,
7408
7637
  onSubmit: (event) => {
7409
7638
  event.preventDefault();
@@ -7446,12 +7675,16 @@ window.__ModuleLoader__.load({
7446
7675
  t,
7447
7676
  open: d.manageOpen,
7448
7677
  sources: d.sources,
7678
+ selected: d.selected,
7679
+ loading: d.loading,
7680
+ slow: d.slow,
7449
7681
  problem: d.problem,
7450
7682
  busy: d.busy,
7451
7683
  adding: d.addingSource,
7452
7684
  onClose: () => d.setManageOpen(false),
7453
7685
  onAdd: d.addSource,
7454
- onRemove: d.removeSourceById
7686
+ onRemove: d.removeSourceById,
7687
+ onSelect: d.selectSource
7455
7688
  }), /* @__PURE__ */ (0, react.createElement)(DiscoverConfirm, {
7456
7689
  t,
7457
7690
  locale: d.locale,
@@ -7488,6 +7721,34 @@ window.__ModuleLoader__.load({
7488
7721
  }, item)));
7489
7722
  }
7490
7723
  //#endregion
7724
+ //#region src/app/layouts/market/discover-search.tsx
7725
+ function DiscoverSearch({ t, value, disabled, onChange }) {
7726
+ const field = (0, react.useRef)(null);
7727
+ return /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSearch }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Input, {
7728
+ ref: field,
7729
+ className: value === "" ? MarketPage_module_default.discoverSearchField : `${MarketPage_module_default.discoverSearchField} ${MarketPage_module_default.discoverSearchFieldFilled}`,
7730
+ type: "search",
7731
+ icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 }),
7732
+ value,
7733
+ placeholder: t("panels.discover.search"),
7734
+ "aria-label": t("panels.discover.search"),
7735
+ disabled,
7736
+ onChange: (event) => onChange(event.currentTarget.value)
7737
+ }), value === "" ? null : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7738
+ type: "button",
7739
+ size: "sm",
7740
+ variant: "ghost",
7741
+ className: MarketPage_module_default.discoverSearchClear,
7742
+ "aria-label": t("panels.discover.clearSearch"),
7743
+ disabled,
7744
+ icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, { size: 14 }),
7745
+ onClick: () => {
7746
+ onChange("");
7747
+ field.current?.focus();
7748
+ }
7749
+ }));
7750
+ }
7751
+ //#endregion
7491
7752
  //#region src/app/layouts/market/discover-toolbar.tsx
7492
7753
  var TEXT_DELAY_MS = 250;
7493
7754
  function DiscoverToolbar(props) {
@@ -7541,14 +7802,11 @@ window.__ModuleLoader__.load({
7541
7802
  size: 12,
7542
7803
  "aria-hidden": "true"
7543
7804
  }))
7544
- }), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Input, {
7545
- className: MarketPage_module_default.discoverSearch,
7546
- type: "search",
7547
- icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 }),
7805
+ }), /* @__PURE__ */ (0, react.createElement)(DiscoverSearch, {
7806
+ t,
7548
7807
  value: text,
7549
- placeholder: t("panels.discover.search"),
7550
- "aria-label": t("panels.discover.search"),
7551
- onChange: (event) => setText(event.currentTarget.value)
7808
+ disabled: props.loading,
7809
+ onChange: setText
7552
7810
  }), props.labels.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
7553
7811
  className: MarketPage_module_default.discoverLabels,
7554
7812
  open: open === "filter",
@@ -7596,6 +7854,7 @@ window.__ModuleLoader__.load({
7596
7854
  variant: "ghost",
7597
7855
  "aria-haspopup": "menu",
7598
7856
  "aria-expanded": open === "sort",
7857
+ disabled: props.loading,
7599
7858
  onClick: () => setOpen(open === "sort" ? null : "sort")
7600
7859
  }, t("panels.discover.sortWith", { label: sortName }), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, {
7601
7860
  size: 12,
@@ -7634,6 +7893,12 @@ window.__ModuleLoader__.load({
7634
7893
  "restart-required",
7635
7894
  "overridden"
7636
7895
  ];
7896
+ function sourceRowsOf(sources) {
7897
+ return sources.map((source) => ({
7898
+ ...source,
7899
+ writable: source.kind === "http" ? false : null
7900
+ }));
7901
+ }
7637
7902
  function installVerdictOf(value, t) {
7638
7903
  const change = changeOf(value);
7639
7904
  if (change === void 0) return { kind: "quiet" };
@@ -7647,6 +7912,7 @@ window.__ModuleLoader__.load({
7647
7912
  function useDiscover(t, active, onInstalled) {
7648
7913
  const [payload, setPayload] = (0, react.useState)(null);
7649
7914
  const [loading, setLoading] = (0, react.useState)(true);
7915
+ const [slow, setSlow] = (0, react.useState)(false);
7650
7916
  const [failure, setFailure] = (0, react.useState)(null);
7651
7917
  const [query, setQuery] = (0, react.useState)("");
7652
7918
  const [category, setCategory] = (0, react.useState)(null);
@@ -7659,7 +7925,10 @@ window.__ModuleLoader__.load({
7659
7925
  const [choice, setChoice] = (0, react.useState)(null);
7660
7926
  const [notice, setNotice] = (0, react.useState)(null);
7661
7927
  const [addingSource, setAddingSource] = (0, react.useState)(false);
7928
+ const [knownSources, setKnownSources] = (0, react.useState)(null);
7662
7929
  const loaded = (0, react.useRef)(false);
7930
+ const loadTicket = (0, react.useRef)(0);
7931
+ const sourceTicket = (0, react.useRef)(0);
7663
7932
  const locale = (0, react.useMemo)(() => localeNow(), []);
7664
7933
  const sources = useHostWrite({
7665
7934
  channel: "actions",
@@ -7670,11 +7939,27 @@ window.__ModuleLoader__.load({
7670
7939
  channel: "provision",
7671
7940
  networkText: t("panels.discover.failed")
7672
7941
  });
7942
+ const loadSources = (0, react.useCallback)(async () => {
7943
+ const ticket = sourceTicket.current + 1;
7944
+ sourceTicket.current = ticket;
7945
+ const response = await readMarketSources().catch(() => null);
7946
+ if (sourceTicket.current !== ticket) return;
7947
+ if (response === null || !response.ok) return;
7948
+ setKnownSources({
7949
+ sources: sourceRowsOf(response.sources),
7950
+ selected: response.selected
7951
+ });
7952
+ }, []);
7673
7953
  const load = (0, react.useCallback)(async (force = false) => {
7954
+ const ticket = loadTicket.current + 1;
7955
+ loadTicket.current = ticket;
7674
7956
  setLoading(true);
7957
+ setSlow(false);
7675
7958
  setFailure(null);
7676
7959
  const response = await readMarketDiscover({ force }).catch(() => null);
7960
+ if (loadTicket.current !== ticket) return;
7677
7961
  setLoading(false);
7962
+ setSlow(false);
7678
7963
  if (response === null || !response.ok) {
7679
7964
  setFailure(t("panels.discover.unreadable"));
7680
7965
  return;
@@ -7682,11 +7967,29 @@ window.__ModuleLoader__.load({
7682
7967
  setPayload(response);
7683
7968
  setLimit(50);
7684
7969
  }, [t]);
7970
+ const beginSwitch = () => {
7971
+ loadTicket.current += 1;
7972
+ sourceTicket.current += 1;
7973
+ setFailure(null);
7974
+ setPayload(null);
7975
+ setLoading(true);
7976
+ setSlow(false);
7977
+ };
7685
7978
  (0, react.useEffect)(() => {
7686
7979
  if (!active || loaded.current) return;
7687
7980
  loaded.current = true;
7981
+ loadSources();
7688
7982
  load();
7689
- }, [active, load]);
7983
+ }, [
7984
+ active,
7985
+ load,
7986
+ loadSources
7987
+ ]);
7988
+ (0, react.useEffect)(() => {
7989
+ if (!loading) return void 0;
7990
+ const timer = setTimeout(() => setSlow(true), 8e3);
7991
+ return () => clearTimeout(timer);
7992
+ }, [loading]);
7690
7993
  (0, react.useEffect)(() => subscribeFactRevision(CAPABILITY_FACT, () => {
7691
7994
  if (!loaded.current) return;
7692
7995
  load(true);
@@ -7740,6 +8043,8 @@ window.__ModuleLoader__.load({
7740
8043
  const done = typeof value?.["branch"] === "string" ? value["branch"] : branch;
7741
8044
  setInitOpen(false);
7742
8045
  setNotice(t("panels.discover.initDone", { branch: done }));
8046
+ beginSwitch();
8047
+ await loadSources();
7743
8048
  await load(true);
7744
8049
  });
7745
8050
  };
@@ -7757,8 +8062,11 @@ window.__ModuleLoader__.load({
7757
8062
  id
7758
8063
  },
7759
8064
  select: true
7760
- }).then(async (outcome) => {
7761
- if (outcome.ok) await load(true);
8065
+ }).then((outcome) => {
8066
+ if (!outcome.ok) return;
8067
+ beginSwitch();
8068
+ loadSources();
8069
+ load(true);
7762
8070
  }).finally(() => setAddingSource(false));
7763
8071
  };
7764
8072
  const removeSourceById = (id) => {
@@ -7770,6 +8078,8 @@ window.__ModuleLoader__.load({
7770
8078
  }).then(async (outcome) => {
7771
8079
  if (!outcome.ok) return;
7772
8080
  setDetail(null);
8081
+ beginSwitch();
8082
+ await loadSources();
7773
8083
  await load(true);
7774
8084
  });
7775
8085
  };
@@ -7782,11 +8092,23 @@ window.__ModuleLoader__.load({
7782
8092
  setSelectedLabels([]);
7783
8093
  setSort("default");
7784
8094
  setDetail(null);
8095
+ beginSwitch();
8096
+ setKnownSources((current) => current === null ? current : {
8097
+ sources: current.sources,
8098
+ selected: id
8099
+ });
7785
8100
  sources.send({
7786
8101
  action: "select",
7787
8102
  id
7788
8103
  }).then(async (outcome) => {
7789
- if (outcome.ok) await load(true);
8104
+ if (!outcome.ok) {
8105
+ setLoading(false);
8106
+ setSlow(false);
8107
+ loadSources();
8108
+ return;
8109
+ }
8110
+ await loadSources();
8111
+ await load(true);
7790
8112
  });
7791
8113
  };
7792
8114
  const install = () => {
@@ -7821,9 +8143,10 @@ window.__ModuleLoader__.load({
7821
8143
  locale,
7822
8144
  payload,
7823
8145
  loading,
8146
+ slow,
7824
8147
  failure,
7825
- sources: payload?.sources ?? [],
7826
- selected: payload?.selected ?? null,
8148
+ sources: payload?.sources ?? knownSources?.sources ?? [],
8149
+ selected: payload?.selected ?? knownSources?.selected ?? null,
7827
8150
  entries,
7828
8151
  shown,
7829
8152
  total: sorted.length,
@@ -7894,35 +8217,45 @@ window.__ModuleLoader__.load({
7894
8217
  t,
7895
8218
  d
7896
8219
  });
7897
- if (d.payload === null) return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, d.loading ? /* @__PURE__ */ (0, react.createElement)(DiscoverSkeleton, { label: t("panels.discover.loading") }) : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
8220
+ const slowHint = !d.manageOpen && d.loading && d.slow ? /* @__PURE__ */ (0, react.createElement)("p", {
8221
+ className: MarketPage_module_default.discoverNotice,
8222
+ role: "note"
8223
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
8224
+ size: 14,
8225
+ "aria-hidden": "true"
8226
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.slowHint"))) : null;
8227
+ if (d.payload === null) return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, d.sources.length === 0 ? null : toolbar, d.loading ? /* @__PURE__ */ (0, react.createElement)(DiscoverSkeleton, { label: t("panels.discover.loading") }) : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
7898
8228
  t,
7899
8229
  text: t("panels.discover.sourcesFailed"),
7900
8230
  onRetry: d.reload
7901
- }), dialogs);
8231
+ }), slowHint, d.writeFailed === null ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.discoverError }, d.writeFailed), dialogs);
7902
8232
  if (d.payload.state === "no-source") return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, /* @__PURE__ */ (0, react.createElement)(DiscoverNoSource, {
7903
8233
  t,
7904
8234
  onAdd: () => d.setManageOpen(true)
7905
8235
  }), dialogs);
7906
- const readFailed = d.payload.state === "invalid" ? t("panels.discover.invalid") : d.payload.state === "unreadable" ? t("panels.discover.unreadable") : null;
8236
+ const failed = d.payload.state === "invalid" || d.payload.state === "unreadable";
8237
+ const readFailed = !d.loading && failed ? d.payload.state === "invalid" ? t("panels.discover.invalid") : t("panels.discover.unreadable") : null;
8238
+ const uninitialized = d.loading ? null : d.uninitialized;
8239
+ const retrying = d.loading && failed;
7907
8240
  const emptyText = unfiltered({
7908
8241
  query: d.query,
7909
8242
  category: d.category,
7910
8243
  labels: d.selectedLabels
7911
8244
  }) ? t("panels.discover.empty") : t("panels.discover.noMatch");
7912
- return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, toolbar, d.payload.stale === true ? /* @__PURE__ */ (0, react.createElement)("p", {
8245
+ return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, toolbar, d.loading && !d.manageOpen ? /* @__PURE__ */ (0, react.createElement)(DiscoverLoading, { label: t("panels.discover.loading") }) : null, slowHint, !d.loading && d.payload.stale === true ? /* @__PURE__ */ (0, react.createElement)("p", {
7913
8246
  className: MarketPage_module_default.discoverNotice,
7914
8247
  role: "note"
7915
8248
  }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
7916
8249
  size: 14,
7917
8250
  "aria-hidden": "true"
7918
- }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.stale"))) : null, d.uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
8251
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.stale"))) : null, uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
7919
8252
  t,
7920
8253
  text: readFailed,
7921
8254
  onRetry: d.reload
7922
8255
  }) : /* @__PURE__ */ (0, react.createElement)(DiscoverUninitialized, {
7923
8256
  t,
7924
- path: d.uninitialized.path,
7925
- empty: d.uninitialized.empty,
8257
+ path: uninitialized.path,
8258
+ empty: uninitialized.empty,
7926
8259
  onInit: () => d.setInitOpen(true)
7927
8260
  }), d.notice === null ? null : /* @__PURE__ */ (0, react.createElement)("p", {
7928
8261
  className: MarketPage_module_default.discoverNotice,
@@ -7941,7 +8274,7 @@ window.__ModuleLoader__.load({
7941
8274
  version
7942
8275
  }),
7943
8276
  onShowInstalled
7944
- }) : readFailed !== null || d.uninitialized !== null ? null : d.shown.length === 0 ? /* @__PURE__ */ (0, react.createElement)(DiscoverEmptyText, { text: emptyText }) : /* @__PURE__ */ (0, react.createElement)(DiscoverRows, {
8277
+ }) : readFailed !== null || uninitialized !== null || retrying ? null : d.shown.length === 0 ? /* @__PURE__ */ (0, react.createElement)(DiscoverEmptyText, { text: emptyText }) : /* @__PURE__ */ (0, react.createElement)(DiscoverRows, {
7945
8278
  t,
7946
8279
  locale: d.locale,
7947
8280
  entries: d.shown,
@@ -8722,7 +9055,7 @@ window.__ModuleLoader__.load({
8722
9055
  return crypto.randomUUID();
8723
9056
  }
8724
9057
  function useAddModule(options) {
8725
- const { open, onInstalled, failedText } = options;
9058
+ const { onInstalled, failedText } = options;
8726
9059
  const [spec, setSpec] = (0, react.useState)("");
8727
9060
  const [choice, setChoice] = (0, react.useState)({
8728
9061
  kind: "default",
@@ -8753,7 +9086,6 @@ window.__ModuleLoader__.load({
8753
9086
  networkText: failedText
8754
9087
  });
8755
9088
  (0, react.useEffect)(() => {
8756
- if (!open) return void 0;
8757
9089
  let alive = true;
8758
9090
  readBundleRegistries().then((response) => {
8759
9091
  if (!alive) return;
@@ -8762,19 +9094,8 @@ window.__ModuleLoader__.load({
8762
9094
  return () => {
8763
9095
  alive = false;
8764
9096
  };
8765
- }, [open]);
9097
+ }, []);
8766
9098
  const registry = registryOf(choice, custom);
8767
- (0, react.useEffect)(() => {
8768
- if (open) return;
8769
- generationRef.current += 1;
8770
- setGuideOpen(false);
8771
- setRegistryOpen(false);
8772
- setProblem(null);
8773
- setPreview(null);
8774
- setOutcome(null);
8775
- setFailure(null);
8776
- setPhase("idle");
8777
- }, [open]);
8778
9099
  const check = (0, react.useCallback)(() => {
8779
9100
  const wanted = spec.trim();
8780
9101
  if (wanted === "") return;
@@ -8911,15 +9232,21 @@ window.__ModuleLoader__.load({
8911
9232
  //#endregion
8912
9233
  //#region src/app/layouts/market/AddModuleDialog.tsx
8913
9234
  function AddModuleDialog({ t, open, onClose, onInstalled }) {
9235
+ if (!open) return null;
9236
+ return /* @__PURE__ */ (0, react.createElement)(AddModuleContent, {
9237
+ t,
9238
+ onClose,
9239
+ onInstalled
9240
+ });
9241
+ }
9242
+ function AddModuleContent({ t, onClose, onInstalled }) {
8914
9243
  const real = useAddModule({
8915
- open,
8916
9244
  onInstalled,
8917
9245
  failedText: t("panels.failed")
8918
9246
  });
8919
9247
  const devAdd = devSurface.useStrips("addModule", []);
8920
9248
  const mock = devAdd.current;
8921
9249
  const state = mock === void 0 ? real : devSurface.addModuleState(real, mock);
8922
- if (!open) return null;
8923
9250
  const installing = state.phase === "installing";
8924
9251
  const checking = state.phase === "inspecting";
8925
9252
  const empty = state.spec.trim() === "";
@@ -8979,7 +9306,7 @@ window.__ModuleLoader__.load({
8979
9306
  onClick: () => state.install()
8980
9307
  }, t("panels.market.add.retry")) : null) : null);
8981
9308
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
8982
- open,
9309
+ open: true,
8983
9310
  onClose: () => {
8984
9311
  if (!installing) onClose();
8985
9312
  },
@@ -9052,7 +9379,7 @@ window.__ModuleLoader__.load({
9052
9379
  return /* @__PURE__ */ (0, react.createElement)(IconModules, { size });
9053
9380
  };
9054
9381
  }
9055
- function MarketPanel({ t, units }) {
9382
+ function MarketPanel({ t, units, titleOf }) {
9056
9383
  const manifests = useLiveManifests(units);
9057
9384
  const installable = useInstallableUnits(units);
9058
9385
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
@@ -9150,6 +9477,7 @@ window.__ModuleLoader__.load({
9150
9477
  }, /* @__PURE__ */ (0, react.createElement)(MarketView, {
9151
9478
  key: `${mock?.id ?? "real-market"}-${mockNonce}`,
9152
9479
  t,
9480
+ titleOf,
9153
9481
  manifests,
9154
9482
  installable,
9155
9483
  capabilities,
@@ -9185,6 +9513,10 @@ window.__ModuleLoader__.load({
9185
9513
  }
9186
9514
  function registerMarketPanel(ctx, units) {
9187
9515
  const t = ctx.locale.bind(LOCALE_NS);
9516
+ const titleOf = (title) => title === void 0 ? "" : ctx.locale.resolveText?.({
9517
+ zh: title.zh,
9518
+ en: title.en
9519
+ }) ?? title.zh;
9188
9520
  ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({
9189
9521
  name: "sidebar.panellist",
9190
9522
  id: MARKET_PANEL_ID,
@@ -9196,7 +9528,10 @@ window.__ModuleLoader__.load({
9196
9528
  name: "main",
9197
9529
  key: MARKET_PANEL_ID,
9198
9530
  locale: LOCALE_NS,
9199
- inject: () => ({ units })
9531
+ inject: () => ({
9532
+ units,
9533
+ titleOf
9534
+ })
9200
9535
  }, MarketPanel));
9201
9536
  }
9202
9537
  //#endregion
@@ -9248,6 +9583,14 @@ window.__ModuleLoader__.load({
9248
9583
  }).catch(() => void 0);
9249
9584
  }
9250
9585
  //#endregion
9586
+ //#region src/shared/hooks/resource-view.ts
9587
+ var IDLE = { phase: "idle" };
9588
+ var LOADING = { phase: "loading" };
9589
+ function resourceViewOf(enabled, current, identity) {
9590
+ if (!enabled) return IDLE;
9591
+ return current.identity === identity ? current.state : LOADING;
9592
+ }
9593
+ //#endregion
9251
9594
  //#region src/shared/hooks/use-api-resource.ts
9252
9595
  var use_api_resource_exports = /* @__PURE__ */ __exportAll({
9253
9596
  readKeyOf: () => readKeyOf,
@@ -9319,7 +9662,10 @@ window.__ModuleLoader__.load({
9319
9662
  const identity = resourceIdentity(route, query, options.key);
9320
9663
  const factRev = useFactRevision(options.fact ?? factOfRoute(route));
9321
9664
  const key = readKeyOf(identity, refreshToken, factRev);
9322
- const [state, setState] = (0, react.useState)(() => enabled ? { phase: "loading" } : { phase: "idle" });
9665
+ const [current, setCurrent] = (0, react.useState)(() => ({
9666
+ identity,
9667
+ state: enabled ? LOADING : IDLE
9668
+ }));
9323
9669
  const lastIdentity = (0, react.useRef)(null);
9324
9670
  const queryRef = (0, react.useRef)(query);
9325
9671
  (0, react.useEffect)(() => {
@@ -9328,17 +9674,23 @@ window.__ModuleLoader__.load({
9328
9674
  (0, react.useEffect)(() => {
9329
9675
  if (!enabled) {
9330
9676
  lastIdentity.current = null;
9331
- setState({ phase: "idle" });
9332
9677
  return;
9333
9678
  }
9334
9679
  let cancelled = false;
9680
+ const put = (state) => setCurrent({
9681
+ identity,
9682
+ state
9683
+ });
9335
9684
  const sameIdentity = lastIdentity.current === identity;
9336
9685
  lastIdentity.current = identity;
9337
- setState((prev) => sameIdentity && prev.value !== void 0 ? {
9338
- phase: "loading",
9339
- value: prev.value,
9340
- ...prev.at === void 0 ? {} : { at: prev.at }
9341
- } : { phase: "loading" });
9686
+ setCurrent((prev) => ({
9687
+ identity,
9688
+ state: sameIdentity && prev.state.value !== void 0 ? {
9689
+ phase: "loading",
9690
+ value: prev.state.value,
9691
+ ...prev.state.at === void 0 ? {} : { at: prev.state.at }
9692
+ } : LOADING
9693
+ }));
9342
9694
  const flight = requestResource(route, queryRef.current, key);
9343
9695
  const owner = options.report === false ? null : unitOfRoute(route);
9344
9696
  if (owner !== null) reportPanelRead({
@@ -9349,7 +9701,7 @@ window.__ModuleLoader__.load({
9349
9701
  flight.task.then((response) => {
9350
9702
  if (cancelled) return;
9351
9703
  if (response.ok) {
9352
- setState({
9704
+ put({
9353
9705
  phase: "ready",
9354
9706
  value: response,
9355
9707
  at: Date.now()
@@ -9361,7 +9713,7 @@ window.__ModuleLoader__.load({
9361
9713
  });
9362
9714
  return;
9363
9715
  }
9364
- setState({
9716
+ put({
9365
9717
  phase: "error",
9366
9718
  error: response.error
9367
9719
  });
@@ -9377,7 +9729,7 @@ window.__ModuleLoader__.load({
9377
9729
  }).catch((reason) => {
9378
9730
  if (cancelled) return;
9379
9731
  const message = reason instanceof Error ? reason.message : String(reason);
9380
- setState({
9732
+ put({
9381
9733
  phase: "error",
9382
9734
  error: {
9383
9735
  code: "network",
@@ -9408,7 +9760,7 @@ window.__ModuleLoader__.load({
9408
9760
  options.fact,
9409
9761
  options.report
9410
9762
  ]);
9411
- return state;
9763
+ return resourceViewOf(enabled, current, identity);
9412
9764
  }
9413
9765
  //#endregion
9414
9766
  //#region src/shared/hooks/use-diy-debug.ts
@@ -10455,6 +10807,26 @@ window.__ModuleLoader__.load({
10455
10807
  for (const face of CLIENT_UNITS) registry.register(face);
10456
10808
  }
10457
10809
  //#endregion
10810
+ //#region src/app/units/unit-titles.ts
10811
+ var UNIT_TITLES_OWNER = "dsh-workbench";
10812
+ function unitTitlesOf(manifests) {
10813
+ const zh = {};
10814
+ const en = {};
10815
+ for (const manifest of manifests) {
10816
+ const title = manifest.title;
10817
+ if (title === void 0 || title.zh.trim() === "" || title.en.trim() === "") continue;
10818
+ zh[unitTitleKey(manifest.id)] = title.zh;
10819
+ en[unitTitleKey(manifest.id)] = title.en;
10820
+ }
10821
+ return {
10822
+ unit: UNIT_TITLES_OWNER,
10823
+ messages: {
10824
+ zh,
10825
+ en
10826
+ }
10827
+ };
10828
+ }
10829
+ //#endregion
10458
10830
  //#region src/kernel/client/board-registry.ts
10459
10831
  function createBoardRegistry() {
10460
10832
  const modules = [];
@@ -10515,7 +10887,7 @@ window.__ModuleLoader__.load({
10515
10887
  if (View === void 0) return void 0;
10516
10888
  return {
10517
10889
  id: manifest.id,
10518
- titleKey: manifest.card?.titleKey ?? manifest.id,
10890
+ titleKey: manifest.titleKey,
10519
10891
  order: manifest.card?.order ?? 100,
10520
10892
  View,
10521
10893
  ...face.steps === void 0 ? {} : { steps: face.steps }
@@ -10530,6 +10902,10 @@ window.__ModuleLoader__.load({
10530
10902
  let installableIds = null;
10531
10903
  let revision = 0;
10532
10904
  let manifestsCache;
10905
+ let titleSignature = "";
10906
+ function titlesOf(manifests) {
10907
+ return manifests.flatMap((manifest) => manifest.title === void 0 ? [] : [`${manifest.id}=${manifest.title.zh}/${manifest.title.en}`]).join("|");
10908
+ }
10533
10909
  function notify() {
10534
10910
  revision += 1;
10535
10911
  for (const listener of [...listeners]) try {
@@ -10609,7 +10985,10 @@ window.__ModuleLoader__.load({
10609
10985
  for (const entry of registrations) {
10610
10986
  const next = known.get(entry.unit);
10611
10987
  if (entry.mounted === null) {
10612
- if (next !== void 0 && attach(entry)) changed = true;
10988
+ if (next !== void 0) {
10989
+ attach(entry);
10990
+ changed = true;
10991
+ }
10613
10992
  continue;
10614
10993
  }
10615
10994
  if (next === void 0) {
@@ -10618,6 +10997,11 @@ window.__ModuleLoader__.load({
10618
10997
  changed = true;
10619
10998
  }
10620
10999
  }
11000
+ const titles = titlesOf(manifests);
11001
+ if (titles !== titleSignature) {
11002
+ titleSignature = titles;
11003
+ changed = true;
11004
+ }
10621
11005
  if (!changed) return;
10622
11006
  manifestsCache = void 0;
10623
11007
  notify();
@@ -11388,6 +11772,7 @@ window.__ModuleLoader__.load({
11388
11772
  const unit = textOf(args, "unit");
11389
11773
  const target = textOf(args, "target");
11390
11774
  const version = textOf(args, "version");
11775
+ const author = textOf(args, "author");
11391
11776
  const rows = [
11392
11777
  {
11393
11778
  label: t("approval.publish.module"),
@@ -11403,7 +11788,7 @@ window.__ModuleLoader__.load({
11403
11788
  },
11404
11789
  {
11405
11790
  label: t("approval.publish.author"),
11406
- value: preview === void 0 ? t("approval.publish.reading") : preview?.author === void 0 || preview.author === "" ? t("approval.publish.authorMissing") : preview.author
11791
+ value: author !== "" ? author : preview === void 0 ? t("approval.publish.reading") : preview?.author === void 0 || preview.author === "" ? t("approval.publish.authorMissing") : preview.author
11407
11792
  }
11408
11793
  ];
11409
11794
  const market = preview?.market;
@@ -11450,17 +11835,22 @@ window.__ModuleLoader__.load({
11450
11835
  function PublishApprovalSeat({ args, t }) {
11451
11836
  const unit = textOf(args, "unit");
11452
11837
  const version = textOf(args, "version");
11838
+ const author = textOf(args, "author");
11453
11839
  const [preview, setPreview] = (0, react.useState)(() => unit === "" ? null : void 0);
11454
11840
  (0, react.useEffect)(() => {
11455
11841
  if (unit === "") return;
11456
11842
  let live = true;
11457
- readPublishPreview(unit, version).then((response) => {
11843
+ readPublishPreview(unit, version, author).then((response) => {
11458
11844
  if (live) setPreview(response.ok ? response.preview : null);
11459
11845
  });
11460
11846
  return () => {
11461
11847
  live = false;
11462
11848
  };
11463
- }, [unit, version]);
11849
+ }, [
11850
+ unit,
11851
+ version,
11852
+ author
11853
+ ]);
11464
11854
  return (0, react.createElement)(ApprovalPlan, { rows: publishRows(args, preview, t) }, (0, react.createElement)(PublishChangelogSeat, {
11465
11855
  changelog: preview?.changelog,
11466
11856
  t
@@ -12225,10 +12615,10 @@ window.__ModuleLoader__.load({
12225
12615
  //#region src/app/layouts/rightbar/PanelModules.tsx
12226
12616
  function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshToken, manifests, onOpenMarket }) {
12227
12617
  const { capabilities, checkedAt, forceProbe } = useCapabilityMap(refreshToken);
12228
- const [decided, setDecided] = (0, react.useState)(false);
12618
+ const decided = (0, react.useRef)(false);
12229
12619
  (0, react.useEffect)(() => {
12230
- if (!open || decided) return;
12231
- setDecided(true);
12620
+ if (!open || decided.current) return;
12621
+ decided.current = true;
12232
12622
  if (!shouldProbeOnEnter({
12233
12623
  checkedAt,
12234
12624
  now: Date.now(),
@@ -12238,7 +12628,6 @@ window.__ModuleLoader__.load({
12238
12628
  forceProbe();
12239
12629
  }, [
12240
12630
  open,
12241
- decided,
12242
12631
  checkedAt,
12243
12632
  forceProbe
12244
12633
  ]);
@@ -14378,7 +14767,7 @@ window.__ModuleLoader__.load({
14378
14767
  ...face.messages === void 0 ? {} : { messages: face.messages }
14379
14768
  }));
14380
14769
  }
14381
- var COMPONENT_CSS_MARKER = ".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 padding-top: 0;\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.wb-note {\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.wb-problem {\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-state-error-primary);\n overflow-wrap: anywhere;\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.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-card-gutter);\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.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) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\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-28);\n padding: var(--wb-len-4) 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 cursor: default;\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-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\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.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\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}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) 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 white-space: nowrap;\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-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\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-secondary);\n overflow-wrap: anywhere;\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\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\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-formProblem {\n grid-column: 2;\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.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\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.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\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\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.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.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:disabled {\n cursor: not-allowed;\n opacity: 0.4;\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-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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 text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\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-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost: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 border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\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.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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}\n\n.wb-selectSearch:focus-within {\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-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\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}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\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-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\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._marketList_9dzu9_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_9dzu9_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_9dzu9_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_9dzu9_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_9dzu9_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._marketStatus_9dzu9_48 {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketStateText_9dzu9_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_9dzu9_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_9dzu9_66 {\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._marketName_9dzu9_39 ._marketVersion_9dzu9_72 {\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_9dzu9_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_9dzu9_72::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_9dzu9_94 {\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_9dzu9_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_9dzu9_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_9dzu9_112::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_9dzu9_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_9dzu9_131 {\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_9dzu9_137 {\n height: 0;\n margin-top: calc(0px - var(--wb-len-16));\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_9dzu9_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_9dzu9_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_9dzu9_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_9dzu9_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_9dzu9_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketSectionTitle_9dzu9_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketName_9dzu9_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketIcon_9dzu9_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_9dzu9_188 {\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_9dzu9_198 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_9dzu9_205 {\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_9dzu9_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_9dzu9_217 {\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_9dzu9_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_9dzu9_235 {\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_9dzu9_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_9dzu9_248 {\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_9dzu9_254 {\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._marketPanel_9dzu9_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_9dzu9_263[hidden] {\n display: none;\n}\n\n._marketTabs_9dzu9_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_9dzu9_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_9dzu9_283 {\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_9dzu9_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_9dzu9_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_9dzu9_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_9dzu9_312 svg {\n animation: _wb-spin_9dzu9_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_9dzu9_316 {\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_9dzu9_212 {\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._marketEmptyTitle_9dzu9_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_9dzu9_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_9dzu9_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_9dzu9_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_9dzu9_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_9dzu9_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_9dzu9_372 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_9dzu9_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_9dzu9_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_9dzu9_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_9dzu9_395 {\n flex: none;\n}\n\n._discoverSearch_9dzu9_399 {\n box-sizing: border-box;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_9dzu9_361 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_9dzu9_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_9dzu9_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_9dzu9_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_9dzu9_399 {\n grid-area: search;\n }\n\n ._discoverSort_9dzu9_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_9dzu9_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_9dzu9_440 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_9dzu9_447 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_9dzu9_456 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_9dzu9_456:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_9dzu9_470 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_9dzu9_482 {\n object-fit: contain;\n}\n\n._discoverMain_9dzu9_486 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_9dzu9_494 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_9dzu9_502 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_9dzu9_502::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_9dzu9_502:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_9dzu9_502:focus-visible::after {\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._discoverStrong_9dzu9_533 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_9dzu9_539 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_9dzu9_548 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_9dzu9_555 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_9dzu9_561 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_9dzu9_570 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_9dzu9_575 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_9dzu9_584 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_9dzu9_575 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_9dzu9_594 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_9dzu9_600 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_9dzu9_600:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_9dzu9_600: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._discoverCrumbIcon_9dzu9_623 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_9dzu9_627 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_9dzu9_633 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_9dzu9_639 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_9dzu9_646 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_9dzu9_653 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_9dzu9_658 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_9dzu9_663 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_9dzu9_668 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_9dzu9_674 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_9dzu9_681 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_9dzu9_687 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_9dzu9_692 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_9dzu9_702 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_9dzu9_708 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_9dzu9_716 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_9dzu9_725 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_9dzu9_732 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_9dzu9_732:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_9dzu9_742 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_9dzu9_750 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_9dzu9_758 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_9dzu9_763 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_9dzu9_772 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverNotice_9dzu9_778 {\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 color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_9dzu9_778 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_9dzu9_796 {\n align-self: center;\n}\n\n._discoverDialog_9dzu9_800 {\n width: min(var(--wb-len-480), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_9dzu9_804 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_9dzu9_810 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_9dzu9_818 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceError_9dzu9_826 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_9dzu9_832 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_9dzu9_838 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_9dzu9_843 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_9dzu9_849 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_9dzu9_854 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_9dzu9_860 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_9dzu9_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_9dzu9_470._discoverSkeletonFill_9dzu9_860 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_9dzu9_869 {\n display: block;\n height: var(--wb-len-12);\n margin: var(--wb-len-4) 0;\n border-radius: var(--dsw-radius-xs);\n}\n\n._discoverSkeletonTitle_9dzu9_876 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_9dzu9_880 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_9dzu9_1 {\n 0% {\n opacity: 1;\n }\n 40% {\n opacity: 0.6;\n }\n 80%,\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._discoverSkeletonFill_9dzu9_860 {\n animation: none;\n }\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_1lv8f_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_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_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_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_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_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_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_1lv8f_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_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_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_1lv8f_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_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_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_1lv8f_351,\n._resultWarn_1lv8f_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_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\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_1lv8f_383 {\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_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\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_1lv8f_403 {\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_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\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_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\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._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12: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._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12: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._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\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-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\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._rows_85r3w_1 {\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_85r3w_1 {\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_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\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._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\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_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\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_11oac_45 {\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_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_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._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\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_zyzt3_21 {\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_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\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_zyzt3_1 {\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_zyzt3_51 {\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_zyzt3_51 {\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_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\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_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\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_zyzt3_3 {\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_zyzt3_125 {\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_zyzt3_133 {\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_zyzt3_4 {\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_zyzt3_159 {\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_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\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_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\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_zyzt3_192 {\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_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\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_zyzt3_250 {\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_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\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_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\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_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_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_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\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_1whum_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_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\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_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\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_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\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_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\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_1cmz0_74 ._rowAction_1cmz0_84 {\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_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\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._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-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-secondary);\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*/";
14770
+ var COMPONENT_CSS_MARKER = ".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 padding-top: 0;\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.wb-note {\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.wb-problem {\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-state-error-primary);\n overflow-wrap: anywhere;\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.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-card-gutter);\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.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) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\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-28);\n padding: var(--wb-len-4) 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 cursor: default;\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-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\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.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\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}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) 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 white-space: nowrap;\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-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\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-secondary);\n overflow-wrap: anywhere;\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\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\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-formProblem {\n grid-column: 2;\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.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\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.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\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\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.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.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:disabled {\n cursor: not-allowed;\n opacity: 0.4;\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-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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 text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\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-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost: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 border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\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.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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}\n\n.wb-selectSearch:focus-within {\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-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\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}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\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-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\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._marketList_1idrk_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_1idrk_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_1idrk_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_1idrk_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_1idrk_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._marketStatus_1idrk_48 {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketStateText_1idrk_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_1idrk_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_1idrk_66 {\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._marketName_1idrk_39 ._marketVersion_1idrk_72 {\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_1idrk_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_1idrk_72::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_1idrk_94 {\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_1idrk_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1idrk_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1idrk_112::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_1idrk_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_1idrk_131 {\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_1idrk_137 {\n height: 0;\n margin-top: calc(0px - var(--wb-len-16));\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_1idrk_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_1idrk_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_1idrk_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_1idrk_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_1idrk_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionQuiet_1idrk_175 ._marketSectionTitle_1idrk_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1idrk_175 ._marketName_1idrk_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1idrk_175 ._marketIcon_1idrk_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_1idrk_188 {\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_1idrk_198 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_1idrk_205 {\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_1idrk_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_1idrk_217 {\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_1idrk_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_1idrk_235 {\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_1idrk_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_1idrk_248 {\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_1idrk_254 {\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._marketPanel_1idrk_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_1idrk_263[hidden] {\n display: none;\n}\n\n._marketTabs_1idrk_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_1idrk_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_1idrk_283 {\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_1idrk_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_1idrk_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_1idrk_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_1idrk_312 svg {\n animation: _wb-spin_1idrk_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_1idrk_316 {\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_1idrk_212 {\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._marketEmptyTitle_1idrk_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_1idrk_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_1idrk_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_1idrk_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_1idrk_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_1idrk_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_1idrk_372 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_1idrk_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_1idrk_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_1idrk_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_1idrk_395 {\n flex: none;\n}\n\n._discoverSearch_1idrk_399 {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n._discoverSearchField_1idrk_407 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_1idrk_412 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_1idrk_407 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_1idrk_399 ._discoverSearchClear_1idrk_421 {\n position: absolute;\n top: 50%;\n inset-inline-end: var(--wb-len-4);\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n color: var(--dsw-alias-label-tertiary);\n transform: translateY(-50%);\n}\n\n._discoverSearchClear_1idrk_421:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_1idrk_361 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_1idrk_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_1idrk_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_1idrk_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_1idrk_399 {\n grid-area: search;\n }\n\n ._discoverSort_1idrk_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_1idrk_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_1idrk_472 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_1idrk_479 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_1idrk_488 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_1idrk_488:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_1idrk_502 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_1idrk_514 {\n object-fit: contain;\n}\n\n._discoverMain_1idrk_518 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_1idrk_526 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_1idrk_534 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_1idrk_534::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_1idrk_534:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_1idrk_534:focus-visible::after {\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._discoverStrong_1idrk_565 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_1idrk_571 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_1idrk_580 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_1idrk_587 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_1idrk_593 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_1idrk_602 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_1idrk_607 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_1idrk_616 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_1idrk_607 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_1idrk_626 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_1idrk_632 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_1idrk_632:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_1idrk_632: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._discoverCrumbIcon_1idrk_655 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_1idrk_659 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_1idrk_665 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_1idrk_671 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_1idrk_678 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_1idrk_685 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_1idrk_690 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_1idrk_695 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_1idrk_700 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_1idrk_706 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_1idrk_713 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_1idrk_719 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_1idrk_724 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_1idrk_734 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_1idrk_740 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_1idrk_748 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_1idrk_757 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_1idrk_764 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_1idrk_764:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_1idrk_774 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_1idrk_782 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_1idrk_790 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_1idrk_795 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_1idrk_804 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_1idrk_810 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverNotice_1idrk_819 {\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 color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_1idrk_819 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_1idrk_837 {\n align-self: center;\n}\n\n._discoverDialog_1idrk_841 {\n width: min(var(--wb-len-480), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_1idrk_845 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_1idrk_851 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_1idrk_859 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceCurrent_1idrk_868 {\n flex: none;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n white-space: nowrap;\n}\n\n._discoverSourceLoading_1idrk_875 {\n display: flex;\n flex: none;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n white-space: nowrap;\n}\n\n._discoverSourceHint_1idrk_885 {\n display: flex;\n flex-basis: 100%;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverSourceHint_1idrk_885 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_1idrk_899 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_1idrk_905 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_1idrk_911 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_1idrk_916 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_1idrk_922 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_1idrk_927 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_1idrk_933 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_1idrk_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_1idrk_502._discoverSkeletonFill_1idrk_933 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_1idrk_942 {\n display: block;\n height: var(--wb-len-12);\n margin: var(--wb-len-4) 0;\n border-radius: var(--dsw-radius-xs);\n}\n\n._discoverSkeletonTitle_1idrk_949 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_1idrk_953 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_1idrk_1 {\n 0% {\n opacity: 1;\n }\n 40% {\n opacity: 0.6;\n }\n 80%,\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._discoverSkeletonFill_1idrk_933 {\n animation: none;\n }\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_1lv8f_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_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_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_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_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_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_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_1lv8f_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_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_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_1lv8f_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_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_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_1lv8f_351,\n._resultWarn_1lv8f_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_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\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_1lv8f_383 {\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_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\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_1lv8f_403 {\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_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\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_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\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._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12: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._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12: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._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\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-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\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._rows_85r3w_1 {\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_85r3w_1 {\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_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\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._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\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_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\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_11oac_45 {\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_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_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._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\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_zyzt3_21 {\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_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\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_zyzt3_1 {\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_zyzt3_51 {\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_zyzt3_51 {\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_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\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_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\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_zyzt3_3 {\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_zyzt3_125 {\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_zyzt3_133 {\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_zyzt3_4 {\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_zyzt3_159 {\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_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\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_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\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_zyzt3_192 {\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_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\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_zyzt3_250 {\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_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\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_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\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_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_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_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\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_1whum_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_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\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_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\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_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\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_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\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_1cmz0_74 ._rowAction_1cmz0_84 {\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_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\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._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-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-secondary);\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*/";
14382
14771
  function workbenchCss() {
14383
14772
  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}`;
14384
14773
  }
@@ -14430,7 +14819,7 @@ window.__ModuleLoader__.load({
14430
14819
  let disposeDictionary;
14431
14820
  const publish = () => {
14432
14821
  disposeDictionary?.();
14433
- const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, messagesOf(units.all()));
14822
+ const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, [unitTitlesOf(units.manifests()), ...messagesOf(units.all())]);
14434
14823
  for (const problem of problems) console.warn(`[dsh-workbench] 套件 ${problem.unit} 的文案没并进来(只有它少了这几句):${problem.reason}`);
14435
14824
  disposeDictionary = ctx.locale.register(LOCALE_NS, merged);
14436
14825
  };