@dsh-workbench/core 1.1.4 → 1.1.6

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 (48) hide show
  1. package/client.js +1298 -510
  2. package/dist/client/client.body.js +1298 -510
  3. package/dist/client/index.js +1160 -372
  4. package/dist/host/index.js +1151 -255
  5. package/dist/types/app/layouts/approval-detail.d.ts +6 -3
  6. package/dist/types/app/layouts/market/add-module-registry-prefs.d.ts +11 -0
  7. package/dist/types/app/layouts/market/market-check.d.ts +10 -1
  8. package/dist/types/app/layouts/market/market-header.d.ts +3 -1
  9. package/dist/types/app/layouts/market/section-check.d.ts +12 -0
  10. package/dist/types/app/layouts/market/use-market-reload.d.ts +14 -0
  11. package/dist/types/app/layouts/market/use-module-versions.d.ts +20 -4
  12. package/dist/types/app/layouts/rightbar/AskAgentButton.d.ts +6 -0
  13. package/dist/types/app/layouts/rightbar/FailureCard.d.ts +8 -0
  14. package/dist/types/app/layouts/rightbar/MarketView.d.ts +6 -3
  15. package/dist/types/app/layouts/rightbar/SharedSection.d.ts +5 -2
  16. package/dist/types/app/layouts/rightbar/failure-card-text.d.ts +20 -0
  17. package/dist/types/app/layouts/rightbar/market-act.d.ts +2 -5
  18. package/dist/types/app/layouts/rightbar/market-change.d.ts +1 -0
  19. package/dist/types/app/layouts/rightbar/market-hint.d.ts +2 -0
  20. package/dist/types/app/layouts/rightbar/market-install.d.ts +11 -0
  21. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +9 -1
  22. package/dist/types/app/layouts/rightbar/market-rows.d.ts +14 -1
  23. package/dist/types/app/layouts/rightbar/market-section.d.ts +5 -3
  24. package/dist/types/app/layouts/rightbar/market-transient-state.d.ts +3 -8
  25. package/dist/types/app/layouts/rightbar/market-uninstall.d.ts +10 -0
  26. package/dist/types/app/layouts/rightbar/market-update-verdict.d.ts +2 -0
  27. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +2 -0
  28. package/dist/types/kernel/client/registry.d.ts +1 -0
  29. package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
  30. package/dist/types/kernel/contract/market-index.d.ts +1 -1
  31. package/dist/types/modules/panels/model/market-env.d.ts +2 -2
  32. package/dist/types/modules/panels/model/market-install-error.d.ts +3 -0
  33. package/dist/types/modules/panels/model/market-install-error.test.d.ts +1 -0
  34. package/dist/types/modules/panels/model/market-registry.d.ts +2 -1
  35. package/dist/types/modules/panels/model/market-remove.d.ts +13 -0
  36. package/dist/types/modules/panels/model/market-remove.test.d.ts +1 -0
  37. package/dist/types/modules/panels/model/market-route.d.ts +1 -1
  38. package/dist/types/modules/panels/model/market-swap-stuck.d.ts +20 -0
  39. package/dist/types/modules/panels/model/market-swap-stuck.test.d.ts +1 -0
  40. package/dist/types/modules/panels/model/market-types.d.ts +3 -0
  41. package/dist/types/modules/panels/model/market-update-bundle.d.ts +5 -0
  42. package/dist/types/modules/panels/model/market.d.ts +1 -0
  43. package/dist/types/modules/panels/model/plugin-actions.d.ts +1 -1
  44. package/dist/types/shared/api/host/self-update-marker.d.ts +5 -0
  45. package/dist/types/shared/api/host/self-update-marker.test.d.ts +1 -0
  46. package/package.json +3 -3
  47. package/skills/workbench-module-diy/TOOLS.md +11 -2
  48. package/skills/workbench-module-diy/WIRING.md +2 -1
package/client.js CHANGED
@@ -730,6 +730,10 @@ window.__ModuleLoader__.load({
730
730
  var STORAGE_KEY_RIGHTBAR_COLUMN = "dsh-workbench.rightbar.column";
731
731
  /** 记住右栏宽度(像素数字的字符串)的 localStorage 键。 */
732
732
  var STORAGE_KEY_RIGHTBAR_WIDTH = "dsh-workbench.rightbar.width";
733
+ /** 记住「添加模块」浮层选过的安装源的 localStorage 键。 */
734
+ var STORAGE_KEY_MARKET_REGISTRY = "dsh-workbench.market.registry";
735
+ /** 记住「添加模块」浮层上次填过的自定义源地址的 localStorage 键。 */
736
+ var STORAGE_KEY_MARKET_REGISTRY_CUSTOM = "dsh-workbench.market.registry.custom";
733
737
  /** dsh i18n 的命名空间:词表都注册在它下面,`ctx.locale.register` / `bind` 按它取。 */
734
738
  var LOCALE_NS = "workbench";
735
739
  //#endregion
@@ -788,13 +792,13 @@ window.__ModuleLoader__.load({
788
792
  //#endregion
789
793
  //#region ../shared/dist/lib/react.js
790
794
  var react$1 = require("react");
791
- var h$67 = react$1.createElement;
792
- var Fragment$23 = react$1.Fragment;
795
+ var h$71 = react$1.createElement;
796
+ var Fragment$22 = react$1.Fragment;
793
797
  var Component = react$1.Component;
794
798
  react$1.createContext;
795
799
  react$1.useContext;
796
- var useState$40 = react$1.useState;
797
- var useEffect$30 = react$1.useEffect;
800
+ var useState$42 = react$1.useState;
801
+ var useEffect$32 = react$1.useEffect;
798
802
  react$1.useLayoutEffect;
799
803
  var useMemo$10 = react$1.useMemo;
800
804
  react$1.useCallback;
@@ -809,7 +813,7 @@ window.__ModuleLoader__.load({
809
813
  * @returns 一个 div。
810
814
  */
811
815
  function ActivityBlock({ head, children }) {
812
- return h$67("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$67("div", { className: "wb-activityBlockHead" }, head), children);
816
+ return h$71("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$71("div", { className: "wb-activityBlockHead" }, head), children);
813
817
  }
814
818
  /**
815
819
  * 一条活动:状态点 + 正文 + 时间,行尾可挂动作;时间一律用它,别自己拼。
@@ -820,7 +824,7 @@ window.__ModuleLoader__.load({
820
824
  * @returns 一行。
821
825
  */
822
826
  function ActivityLine({ dot, text, at, actions }) {
823
- return h$67("div", { className: "wb-activityLine" }, dot, h$67("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$67("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$67("span", { className: "wb-activityLineActions" }, actions));
827
+ return h$71("div", { className: "wb-activityLine" }, dot, h$71("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$71("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$71("span", { className: "wb-activityLineActions" }, actions));
824
828
  }
825
829
  /**
826
830
  * 活动行尾那颗动作:给 `href` 就是外链,否则是图标钮并带上 tooltip。
@@ -834,7 +838,7 @@ window.__ModuleLoader__.load({
834
838
  */
835
839
  function ActivityAction({ label, hint, icon, href, onClick, failed }) {
836
840
  const tip = hint ?? label;
837
- if (href !== void 0) return h$67("a", {
841
+ if (href !== void 0) return h$71("a", {
838
842
  className: "wb-iconButton",
839
843
  href,
840
844
  target: "_blank",
@@ -842,13 +846,13 @@ window.__ModuleLoader__.load({
842
846
  title: tip,
843
847
  "aria-label": label
844
848
  }, icon);
845
- return h$67(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
849
+ return h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
846
850
  side: "bottom",
847
851
  align: "end",
848
852
  gap: 6,
849
853
  portal: true,
850
854
  label: tip
851
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
855
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
852
856
  type: "button",
853
857
  variant: "ghost",
854
858
  size: "sm",
@@ -870,10 +874,10 @@ window.__ModuleLoader__.load({
870
874
  */
871
875
  function Note({ tone = "muted", as, role, children }) {
872
876
  const className = tone === "problem" ? "wb-problem" : "wb-note";
873
- return as === "span" ? h$67("span", {
877
+ return as === "span" ? h$71("span", {
874
878
  className,
875
879
  role
876
- }, children) : h$67("p", {
880
+ }, children) : h$71("p", {
877
881
  className,
878
882
  role
879
883
  }, children);
@@ -917,10 +921,10 @@ window.__ModuleLoader__.load({
917
921
  render() {
918
922
  const { reason } = this.state;
919
923
  if (reason === null) return this.props.children;
920
- return h$67(Note, { tone: "problem" }, h$67("span", null, this.props.t("panels.cardBroken", {
924
+ return h$71(Note, { tone: "problem" }, h$71("span", null, this.props.t("panels.cardBroken", {
921
925
  unit: this.props.unit,
922
926
  reason
923
- })), " ", h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
927
+ })), " ", h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
924
928
  type: "button",
925
929
  variant: "outline",
926
930
  size: "sm",
@@ -970,19 +974,19 @@ window.__ModuleLoader__.load({
970
974
  const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
971
975
  if (owner?.approval !== void 0) {
972
976
  const Render = owner.approval.render;
973
- return h$67(CardBoundary, {
977
+ return h$71(CardBoundary, {
974
978
  unit: owner.unit,
975
979
  resetKey: props.callId ?? "",
976
980
  t
977
- }, h$67(Render, {
981
+ }, h$71(Render, {
978
982
  input,
979
983
  t
980
984
  }));
981
985
  }
982
986
  const shell = props.renderShell?.(input, t);
983
- if (shell !== void 0 && shell !== null) return h$67(Fragment$23, null, shell);
987
+ if (shell !== void 0 && shell !== null) return h$71(Fragment$22, null, shell);
984
988
  if (command === "") return null;
985
- return h$67(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
989
+ return h$71(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
986
990
  code: command,
987
991
  className: "wb-approvalCommand",
988
992
  copyLabel: t("blocker.copy"),
@@ -1000,10 +1004,10 @@ window.__ModuleLoader__.load({
1000
1004
  * @returns 一个 div。
1001
1005
  */
1002
1006
  function ApprovalPlan({ rows, hint, warn, children }) {
1003
- return h$67("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$67("p", { className: "wb-approvalHint" }, hint), h$67("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$67("div", {
1007
+ return h$71("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$71("p", { className: "wb-approvalHint" }, hint), h$71("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$71("div", {
1004
1008
  className: "wb-approvalRow",
1005
1009
  key: String(index)
1006
- }, h$67("dt", { className: "wb-approvalLabel" }, row.label), h$67("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$67("p", { className: "wb-approvalWarn" }, warn));
1010
+ }, h$71("dt", { className: "wb-approvalLabel" }, row.label), h$71("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$71("p", { className: "wb-approvalWarn" }, warn));
1007
1011
  }
1008
1012
  //#endregion
1009
1013
  //#region ../shared/dist/components/CardHead.js
@@ -1020,47 +1024,47 @@ window.__ModuleLoader__.load({
1020
1024
  function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle }) {
1021
1025
  const refreshLabel = refreshing ? t("rightbar.refreshing") : t("rightbar.refresh");
1022
1026
  const platformLabel = platformTitle ?? platform ?? t("rightbar.openPlatform");
1023
- return h$67("header", { className: "wb-cardHead" }, h$67("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$67("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$67(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1027
+ return h$71("header", { className: "wb-cardHead" }, h$71("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$71("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1024
1028
  side: "bottom",
1025
1029
  align: "end",
1026
1030
  gap: 6,
1027
1031
  portal: true,
1028
1032
  label: platformLabel
1029
- }, h$67("a", {
1033
+ }, h$71("a", {
1030
1034
  className: "wb-iconButton wb-cardOpen",
1031
1035
  href: platformHref,
1032
1036
  target: "_blank",
1033
1037
  rel: "noreferrer noopener",
1034
1038
  "aria-label": platform ?? platformLabel
1035
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$67(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1039
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1036
1040
  side: "bottom",
1037
1041
  align: "end",
1038
1042
  gap: 6,
1039
1043
  portal: true,
1040
1044
  label: refreshLabel
1041
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
1045
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
1042
1046
  type: "button",
1043
1047
  size: "sm",
1044
1048
  variant: "ghost",
1045
1049
  className: `wb-cardRefresh${refreshing ? " wb-spinning" : ""}`,
1046
1050
  "aria-label": refreshLabel,
1047
1051
  disabled: refreshing,
1048
- icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1052
+ icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1049
1053
  onClick: onRefresh
1050
- })), gear === void 0 || onToggleGear === void 0 ? null : h$67(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1054
+ })), gear === void 0 || onToggleGear === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1051
1055
  side: "bottom",
1052
1056
  align: "end",
1053
1057
  gap: 6,
1054
1058
  portal: true,
1055
1059
  label: gear
1056
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
1060
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
1057
1061
  type: "button",
1058
1062
  size: "sm",
1059
1063
  variant: "ghost",
1060
1064
  className: `wb-cardGear${gearOpen === true ? " wb-iconButtonActive" : ""}`,
1061
1065
  "aria-label": gear,
1062
1066
  "aria-expanded": gearOpen === true,
1063
- icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1067
+ icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1064
1068
  onClick: onToggleGear
1065
1069
  })));
1066
1070
  }
@@ -1077,13 +1081,13 @@ window.__ModuleLoader__.load({
1077
1081
  * @returns 一个 `<section>`。
1078
1082
  */
1079
1083
  function Card({ t, title, refreshing, onRefresh, meta, head, children }) {
1080
- return h$67("section", { className: "wb-card" }, head === void 0 ? h$67(CardHead, {
1084
+ return h$71("section", { className: "wb-card" }, head === void 0 ? h$71(CardHead, {
1081
1085
  t,
1082
1086
  title,
1083
1087
  refreshing,
1084
1088
  onRefresh,
1085
1089
  meta
1086
- }) : head, h$67("div", { className: "wb-cardBody" }, children));
1090
+ }) : head, h$71("div", { className: "wb-cardBody" }, children));
1087
1091
  }
1088
1092
  var CardAnchor_module_default = { anchor: "_anchor_yq4s2_1" };
1089
1093
  //#endregion
@@ -1103,7 +1107,7 @@ window.__ModuleLoader__.load({
1103
1107
  * @returns 带 id 的占位 div。
1104
1108
  */
1105
1109
  function CardAnchor({ unit, children }) {
1106
- return h$67("div", {
1110
+ return h$71("div", {
1107
1111
  id: cardIdOf(unit),
1108
1112
  className: CardAnchor_module_default.anchor
1109
1113
  }, children);
@@ -1117,13 +1121,13 @@ window.__ModuleLoader__.load({
1117
1121
  * @returns 一枚 `StateDot state="ongoing"`,自身不带文字。
1118
1122
  */
1119
1123
  function Spinner({ size = 14, label }) {
1120
- return h$67("span", {
1124
+ return h$71("span", {
1121
1125
  className: "wb-spinner",
1122
1126
  ...label === void 0 ? { "aria-hidden": true } : {
1123
1127
  role: "status",
1124
1128
  "aria-label": label
1125
1129
  }
1126
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1130
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1127
1131
  state: "ongoing",
1128
1132
  size
1129
1133
  }));
@@ -1131,24 +1135,24 @@ window.__ModuleLoader__.load({
1131
1135
  //#endregion
1132
1136
  //#region ../shared/dist/components/ChoiceGroup.js
1133
1137
  function ChoiceMenu(input) {
1134
- const body = input.loading ? h$67("span", {
1138
+ const body = input.loading ? h$71("span", {
1135
1139
  className: "wb-choiceLoading",
1136
1140
  role: "status"
1137
- }, h$67(Spinner, { size: 14 }), h$67("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$67("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1141
+ }, h$71(Spinner, { size: 14 }), h$71("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$71("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1138
1142
  const row = input.rowOf(option.value);
1139
- return h$67(Fragment$23, { key: option.value }, h$67("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$67("input", {
1143
+ return h$71(Fragment$22, { key: option.value }, h$71("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$71("input", {
1140
1144
  className: input.multi ? "wb-checkbox" : "wb-radio",
1141
1145
  type: input.multi ? "checkbox" : "radio",
1142
1146
  name: input.name,
1143
1147
  checked: row.checked,
1144
1148
  disabled: input.disabled,
1145
1149
  onChange: row.onSelect
1146
- }), input.multi ? h$67("span", {
1150
+ }), input.multi ? h$71("span", {
1147
1151
  className: "wb-checkboxBox",
1148
1152
  "aria-hidden": "true"
1149
- }, row.checked ? h$67(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$67("span", { className: "wb-choiceLabel" }, h$67("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$67("span", { className: "wb-choiceDescription" }, option.description))));
1153
+ }, row.checked ? h$71(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$71("span", { className: "wb-choiceLabel" }, h$71("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$71("span", { className: "wb-choiceDescription" }, option.description))));
1150
1154
  });
1151
- return h$67("div", {
1155
+ return h$71("div", {
1152
1156
  className: "wb-choiceMenu",
1153
1157
  "data-variant": input.variant,
1154
1158
  role: input.multi ? "group" : "radiogroup",
@@ -1182,7 +1186,7 @@ window.__ModuleLoader__.load({
1182
1186
  if (props.multi === true) {
1183
1187
  const values = props.values;
1184
1188
  const onChange = props.onChange;
1185
- return h$67(ChoiceMenu, {
1189
+ return h$71(ChoiceMenu, {
1186
1190
  label: common.label,
1187
1191
  name: common.name,
1188
1192
  options: common.options,
@@ -1202,7 +1206,7 @@ window.__ModuleLoader__.load({
1202
1206
  }
1203
1207
  const value = props.value;
1204
1208
  const onChange = props.onChange;
1205
- return h$67(ChoiceMenu, {
1209
+ return h$71(ChoiceMenu, {
1206
1210
  label: common.label,
1207
1211
  name: common.name,
1208
1212
  options: common.options,
@@ -1255,17 +1259,17 @@ window.__ModuleLoader__.load({
1255
1259
  function FormActions({ actions }) {
1256
1260
  if (actions.length === 0) return null;
1257
1261
  reportExtraPrimaries(actions);
1258
- return h$67("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1262
+ return h$71("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1259
1263
  const kind = kindOf(action);
1260
1264
  const busy = action.busy === true;
1261
- return h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
1265
+ return h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
1262
1266
  key: action.key,
1263
1267
  type: "button",
1264
1268
  size: "sm",
1265
1269
  variant: variantOf(kind),
1266
1270
  className: kind === "danger" ? "wb-formActionDanger" : void 0,
1267
1271
  disabled: busy || action.disabled === true,
1268
- icon: busy ? h$67(Spinner, { size: 12 }) : void 0,
1272
+ icon: busy ? h$71(Spinner, { size: 12 }) : void 0,
1269
1273
  onClick: action.onClick
1270
1274
  }, action.label);
1271
1275
  }));
@@ -1278,7 +1282,7 @@ window.__ModuleLoader__.load({
1278
1282
  * @returns 竖排的 div。
1279
1283
  */
1280
1284
  function Rows({ children }) {
1281
- return h$67("div", { className: "wb-rows" }, children);
1285
+ return h$71("div", { className: "wb-rows" }, children);
1282
1286
  }
1283
1287
  /**
1284
1288
  * 一行键值:左边名字、右边值;要成对说明一项数据就用它,别自己写两栏。
@@ -1287,7 +1291,7 @@ window.__ModuleLoader__.load({
1287
1291
  * @returns 一行两格。
1288
1292
  */
1289
1293
  function Row({ label, value }) {
1290
- return h$67("div", { className: "wb-row" }, h$67("span", { className: "wb-rowKey" }, label), h$67("span", { className: "wb-rowValue" }, value));
1294
+ return h$71("div", { className: "wb-row" }, h$71("span", { className: "wb-rowKey" }, label), h$71("span", { className: "wb-rowValue" }, value));
1291
1295
  }
1292
1296
  //#endregion
1293
1297
  //#region ../shared/dist/components/ConfirmBar.js
@@ -1304,19 +1308,19 @@ window.__ModuleLoader__.load({
1304
1308
  * @returns 一个 `role="group"` 的条;`actions` 空数组时最后那一块不渲染。
1305
1309
  */
1306
1310
  function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
1307
- return h$67("div", {
1311
+ return h$71("div", {
1308
1312
  className: "wb-confirmBar",
1309
1313
  role: "group",
1310
1314
  "aria-label": label ?? (typeof title === "string" ? title : void 0),
1311
1315
  "aria-busy": busy
1312
- }, h$67("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$67("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$67(Rows, null, rows.map((row) => h$67(Row, {
1316
+ }, h$71("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$71("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$71(Rows, null, rows.map((row) => h$71(Row, {
1313
1317
  key: row.key,
1314
1318
  label: row.label,
1315
1319
  value: row.value
1316
- }))), problem === void 0 ? null : h$67(Note, {
1320
+ }))), problem === void 0 ? null : h$71(Note, {
1317
1321
  tone: "problem",
1318
1322
  role: "alert"
1319
- }, problem), h$67(FormActions, { actions }));
1323
+ }, problem), h$71(FormActions, { actions }));
1320
1324
  }
1321
1325
  //#endregion
1322
1326
  //#region ../shared/dist/components/Field.js
@@ -1328,7 +1332,7 @@ window.__ModuleLoader__.load({
1328
1332
  * @returns 一个 `<label>`,点标签会聚焦里面的控件。
1329
1333
  */
1330
1334
  function Field({ label, hint, children }) {
1331
- return h$67("label", { className: "wb-field" }, h$67("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$67("span", { className: "wb-fieldHint" }, hint));
1335
+ return h$71("label", { className: "wb-field" }, h$71("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$71("span", { className: "wb-fieldHint" }, hint));
1332
1336
  }
1333
1337
  //#endregion
1334
1338
  //#region ../shared/dist/components/FormRows.js
@@ -1338,7 +1342,7 @@ window.__ModuleLoader__.load({
1338
1342
  * @returns 竖排的 div。
1339
1343
  */
1340
1344
  function FormRows({ children }) {
1341
- return h$67("div", { className: "wb-formRows" }, children);
1345
+ return h$71("div", { className: "wb-formRows" }, children);
1342
1346
  }
1343
1347
  /**
1344
1348
  * 表单一行:左边标签、右边控件,提示与错误占控件下面那一格。
@@ -1351,14 +1355,14 @@ window.__ModuleLoader__.load({
1351
1355
  * @returns 一个 `<div>`:里面的 `<label>` 只包标签文字,不包控件、提示与整行的空白。
1352
1356
  */
1353
1357
  function FormRow({ label, htmlFor, hint, problem, layout = "inline", children }) {
1354
- return h$67("div", {
1358
+ return h$71("div", {
1355
1359
  className: "wb-formRow",
1356
1360
  "data-layout": layout,
1357
1361
  "data-wb-problem": problem === void 0 ? void 0 : ""
1358
- }, h$67("label", {
1362
+ }, h$71("label", {
1359
1363
  className: "wb-formLabel",
1360
1364
  htmlFor
1361
- }, label), h$67("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$67("span", { className: "wb-formHint" }, hint) : h$67("span", { className: "wb-formProblem" }, problem));
1365
+ }, label), h$71("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$71("span", { className: "wb-formHint" }, hint) : h$71("span", { className: "wb-formProblem" }, problem));
1362
1366
  }
1363
1367
  //#endregion
1364
1368
  //#region ../shared/dist/components/FormNodes.js
@@ -1505,7 +1509,7 @@ window.__ModuleLoader__.load({
1505
1509
  * @returns `FormRow` 组成的数组;没有可画的格子时给空数组。
1506
1510
  */
1507
1511
  function formRowsOf(args) {
1508
- return args.fields.map((field) => h$67(FormRow, {
1512
+ return args.fields.map((field) => h$71(FormRow, {
1509
1513
  key: field.key,
1510
1514
  label: field.label,
1511
1515
  htmlFor: controlIdOf(field.key),
@@ -1581,13 +1585,13 @@ window.__ModuleLoader__.load({
1581
1585
  */
1582
1586
  function Form(props) {
1583
1587
  const { fields, onSubmit, submit, cancel, extra, busy = false, disabled = false, problem } = props;
1584
- const [done, setDone] = useState$40(false);
1585
- const [reveal, setReveal] = useState$40(0);
1588
+ const [done, setDone] = useState$42(false);
1589
+ const [reveal, setReveal] = useState$42(0);
1586
1590
  const rootRef = useRef$24(null);
1587
1591
  const shown = visibleFieldsOf(fields);
1588
1592
  const problems = formProblemsOf(shown, done);
1589
1593
  reportDuplicateKeys(shown);
1590
- useEffect$30(() => {
1594
+ useEffect$32(() => {
1591
1595
  if (reveal === 0) return;
1592
1596
  const root = rootRef.current;
1593
1597
  if (root !== null) revealFirstProblem(root);
@@ -1602,7 +1606,7 @@ window.__ModuleLoader__.load({
1602
1606
  }
1603
1607
  onSubmit(outcome.values);
1604
1608
  };
1605
- return h$67("form", {
1609
+ return h$71("form", {
1606
1610
  className: "wb-form",
1607
1611
  ref: rootRef,
1608
1612
  noValidate: true,
@@ -1610,15 +1614,15 @@ window.__ModuleLoader__.load({
1610
1614
  event.preventDefault();
1611
1615
  submitForm();
1612
1616
  }
1613
- }, h$67(FormRows, null, formRowsOf({
1617
+ }, h$71(FormRows, null, formRowsOf({
1614
1618
  fields: shown,
1615
1619
  problems,
1616
1620
  showProblem: done,
1617
1621
  busy
1618
- })), problem === void 0 ? null : h$67(Note, {
1622
+ })), problem === void 0 ? null : h$71(Note, {
1619
1623
  tone: "problem",
1620
1624
  role: "alert"
1621
- }, problem), h$67(FormActions, { actions: formActionsOf({
1625
+ }, problem), h$71(FormActions, { actions: formActionsOf({
1622
1626
  extra,
1623
1627
  cancel,
1624
1628
  submit,
@@ -1639,7 +1643,7 @@ window.__ModuleLoader__.load({
1639
1643
  * @returns 一个 `<a>`。
1640
1644
  */
1641
1645
  function Link({ href, children, title, external = true, className }) {
1642
- return h$67("a", {
1646
+ return h$71("a", {
1643
1647
  className: className === void 0 ? "wb-link" : `wb-link ${className}`,
1644
1648
  href,
1645
1649
  ...title === void 0 ? {} : { title },
@@ -1647,7 +1651,7 @@ window.__ModuleLoader__.load({
1647
1651
  target: "_blank",
1648
1652
  rel: "noopener noreferrer"
1649
1653
  } : {}
1650
- }, children, external ? h$67(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1654
+ }, children, external ? h$71(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1651
1655
  }
1652
1656
  //#endregion
1653
1657
  //#region ../shared/dist/contract/long-task.js
@@ -1739,7 +1743,7 @@ window.__ModuleLoader__.load({
1739
1743
  //#endregion
1740
1744
  //#region ../shared/dist/components/LongTaskRow.js
1741
1745
  function RowLink({ href, text }) {
1742
- return h$67(Link, {
1746
+ return h$71(Link, {
1743
1747
  href,
1744
1748
  className: "wb-longTaskLink"
1745
1749
  }, text);
@@ -1759,9 +1763,9 @@ window.__ModuleLoader__.load({
1759
1763
  * @returns 一行长任务。
1760
1764
  */
1761
1765
  function LongTaskRow(props) {
1762
- const [stepsOpen, setStepsOpen] = useState$40(false);
1763
- const [rawOpen, setRawOpen] = useState$40(false);
1764
- const [armed, setArmed] = useState$40(false);
1766
+ const [stepsOpen, setStepsOpen] = useState$42(false);
1767
+ const [rawOpen, setRawOpen] = useState$42(false);
1768
+ const [armed, setArmed] = useState$42(false);
1765
1769
  const failed = props.status === "failed";
1766
1770
  const problem = props.problem ?? "";
1767
1771
  const raw = (props.raw ?? "").trim();
@@ -1769,7 +1773,7 @@ window.__ModuleLoader__.load({
1769
1773
  const stop = props.stop;
1770
1774
  const busy = stop?.busy === true;
1771
1775
  const stopWhy = stop?.failed ?? "";
1772
- useEffect$30(() => {
1776
+ useEffect$32(() => {
1773
1777
  if (!armed) return void 0;
1774
1778
  const timer = setTimeout(() => setArmed(false), LONG_TASK_STOP_ARM_MS);
1775
1779
  return () => clearTimeout(timer);
@@ -1788,14 +1792,14 @@ window.__ModuleLoader__.load({
1788
1792
  setArmed(false);
1789
1793
  stop.onStop();
1790
1794
  };
1791
- return h$67("div", { className: "wb-longTask" }, h$67("p", { className: "wb-longTaskHead" }, h$67(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1795
+ return h$71("div", { className: "wb-longTask" }, h$71("p", { className: "wb-longTaskHead" }, h$71(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1792
1796
  state: longTaskDot(props.status),
1793
1797
  size: 10
1794
- }), h$67("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$67(RowLink, {
1798
+ }), h$71("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$71(RowLink, {
1795
1799
  href: link.href,
1796
1800
  key: `${link.text}@${link.href}`,
1797
1801
  text: link.text
1798
- })), stop === void 0 ? null : h$67("button", {
1802
+ })), stop === void 0 ? null : h$71("button", {
1799
1803
  type: "button",
1800
1804
  className: `wb-longTaskStop${armed ? " wb-longTaskStopArmed" : ""}`,
1801
1805
  "data-stop-state": longTaskStopStage({
@@ -1806,31 +1810,31 @@ window.__ModuleLoader__.load({
1806
1810
  disabled: busy,
1807
1811
  onClick: onStopPress,
1808
1812
  onBlur: () => setArmed(false)
1809
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$67("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$67("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$67("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$67(Fragment$23, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$67(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1813
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$71("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$71("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$71("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$71(Fragment$22, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1810
1814
  className: "wb-longTaskDump",
1811
- icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1815
+ icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1812
1816
  title: props.stepsTitle,
1813
1817
  open: stepsOpen,
1814
1818
  expandable: true,
1815
1819
  expandOnRowClick: true,
1816
1820
  previewChevron: true,
1817
1821
  onToggle: () => setStepsOpen(!stepsOpen)
1818
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1822
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1819
1823
  code: steps.join("\n"),
1820
1824
  className: "wb-longTaskDump",
1821
1825
  showHeader: props.copyLabel !== void 0,
1822
1826
  copyLabel: props.copyLabel ?? "",
1823
1827
  copiedLabel: props.copiedLabel ?? ""
1824
- })), raw === "" || props.rawTitle === void 0 ? null : h$67(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1828
+ })), raw === "" || props.rawTitle === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1825
1829
  className: "wb-longTaskDump",
1826
- icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1830
+ icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1827
1831
  title: props.rawTitle,
1828
1832
  open: rawOpen,
1829
1833
  expandable: true,
1830
1834
  expandOnRowClick: true,
1831
1835
  previewChevron: true,
1832
1836
  onToggle: () => setRawOpen(!rawOpen)
1833
- }, h$67(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1837
+ }, h$71(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1834
1838
  code: raw,
1835
1839
  className: "wb-longTaskDump",
1836
1840
  showHeader: props.copyLabel !== void 0,
@@ -1846,13 +1850,13 @@ window.__ModuleLoader__.load({
1846
1850
  * @returns 一叠占位条。
1847
1851
  */
1848
1852
  function SkeletonRows({ rows = 4 }) {
1849
- return h$67("div", {
1853
+ return h$71("div", {
1850
1854
  className: "wb-skeleton",
1851
1855
  "aria-hidden": "true"
1852
- }, Array.from({ length: rows }, (_, index) => h$67("span", {
1856
+ }, Array.from({ length: rows }, (_, index) => h$71("span", {
1853
1857
  key: index,
1854
1858
  className: "wb-skeletonRow"
1855
- }, h$67("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$67("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1859
+ }, h$71("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$71("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1856
1860
  }
1857
1861
  /**
1858
1862
  * 居中一屏:要他先选一个 / 正在读 / 读不到时用它占住卡片版面。
@@ -1865,13 +1869,13 @@ window.__ModuleLoader__.load({
1865
1869
  * @returns 一个 `role="status"` 的居中块。
1866
1870
  */
1867
1871
  function CenteredState({ icon, title, hint, detail, action, compact = false }) {
1868
- return h$67("div", {
1872
+ return h$71("div", {
1869
1873
  className: compact ? "wb-centered wb-centeredCompact" : "wb-centered",
1870
1874
  role: "status"
1871
- }, icon === null ? null : h$67("span", {
1875
+ }, icon === null ? null : h$71("span", {
1872
1876
  className: "wb-centeredHero",
1873
1877
  "aria-hidden": "true"
1874
- }, icon), h$67("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$67("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$67("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$67("div", { className: "wb-centeredAction" }, action));
1878
+ }, icon), h$71("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$71("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$71("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$71("div", { className: "wb-centeredAction" }, action));
1875
1879
  }
1876
1880
  /**
1877
1881
  * 就绪但空:它只是 `CenteredState` 的简写,标题就是那句空态文案。
@@ -1881,7 +1885,7 @@ window.__ModuleLoader__.load({
1881
1885
  * @returns 一个居中块。
1882
1886
  */
1883
1887
  function EmptyState({ text, icon = null, compact = false }) {
1884
- return h$67(CenteredState, {
1888
+ return h$71(CenteredState, {
1885
1889
  icon,
1886
1890
  title: text,
1887
1891
  compact
@@ -1899,7 +1903,7 @@ window.__ModuleLoader__.load({
1899
1903
  * @returns 一组按钮。
1900
1904
  */
1901
1905
  function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
1902
- return h$67(FormActions, { actions: [{
1906
+ return h$71(FormActions, { actions: [{
1903
1907
  key: "cancel",
1904
1908
  label: labels.cancel,
1905
1909
  kind: "default",
@@ -1932,7 +1936,7 @@ window.__ModuleLoader__.load({
1932
1936
  * @returns 一颗 `<button>`。
1933
1937
  */
1934
1938
  function selectTriggerNode(args) {
1935
- return h$67("button", {
1939
+ return h$71("button", {
1936
1940
  type: "button",
1937
1941
  id: args.id,
1938
1942
  className: args.className,
@@ -1943,7 +1947,7 @@ window.__ModuleLoader__.load({
1943
1947
  "aria-label": args.ariaLabel,
1944
1948
  title: args.title,
1945
1949
  onClick: args.onOpen
1946
- }, args.iconOnly ? h$67("span", { className: "wb-selectIcon" }, args.icon) : h$67(Fragment$23, null, args.icon === void 0 ? null : h$67("span", { className: "wb-selectIcon" }, args.icon), h$67("span", { className: "wb-selectValue" }, args.value), h$67("span", { className: "wb-selectChevron" }, h$67(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1950
+ }, args.iconOnly ? h$71("span", { className: "wb-selectIcon" }, args.icon) : h$71(Fragment$22, null, args.icon === void 0 ? null : h$71("span", { className: "wb-selectIcon" }, args.icon), h$71("span", { className: "wb-selectValue" }, args.value), h$71("span", { className: "wb-selectChevron" }, h$71(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1947
1951
  }
1948
1952
  /**
1949
1953
  * 名单还没读到时的触发器:禁用 + `aria-busy` 的按钮,`SelectField` 在 `loading` 那档画它。
@@ -1955,7 +1959,7 @@ window.__ModuleLoader__.load({
1955
1959
  * @returns 一颗禁用且 `aria-busy` 的按钮。
1956
1960
  */
1957
1961
  function selectLoadingNode(args) {
1958
- return h$67("button", {
1962
+ return h$71("button", {
1959
1963
  type: "button",
1960
1964
  id: args.id,
1961
1965
  className: `${args.className} wb-selectLoading`,
@@ -1964,7 +1968,7 @@ window.__ModuleLoader__.load({
1964
1968
  "aria-invalid": args.invalid || void 0,
1965
1969
  "aria-label": args.ariaLabel,
1966
1970
  title: args.loadingText
1967
- }, h$67("span", { className: "wb-selectValue" }, h$67(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$67("span", { className: "wb-selectChevron" }, h$67(Spinner, { size: 14 })));
1971
+ }, h$71("span", { className: "wb-selectValue" }, h$71(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$71("span", { className: "wb-selectChevron" }, h$71(Spinner, { size: 14 })));
1968
1972
  }
1969
1973
  //#endregion
1970
1974
  //#region ../shared/dist/components/TextField.js
@@ -1974,7 +1978,7 @@ window.__ModuleLoader__.load({
1974
1978
  * @returns 输入框元素;`className` 是追加在基础类名之后,而不是替换它。
1975
1979
  */
1976
1980
  function TextField({ invalid = false, className, ...rest }) {
1977
- return h$67("input", {
1981
+ return h$71("input", {
1978
1982
  ...rest,
1979
1983
  className: className === void 0 ? "wb-textField" : `wb-textField ${className}`,
1980
1984
  "aria-invalid": invalid || void 0
@@ -1997,7 +2001,7 @@ window.__ModuleLoader__.load({
1997
2001
  ...option.icon === void 0 ? {} : { icon: option.icon },
1998
2002
  ...option.disabled === true ? { disabled: true } : {}
1999
2003
  };
2000
- const revealed = (node) => h$67("span", {
2004
+ const revealed = (node) => h$71("span", {
2001
2005
  className: "wb-selectReveal",
2002
2006
  "data-wb-select-reveal": ""
2003
2007
  }, node);
@@ -2013,20 +2017,20 @@ window.__ModuleLoader__.load({
2013
2017
  return found instanceof HTMLElement ? found : null;
2014
2018
  }
2015
2019
  function useRevealOnOpen(open, revealId) {
2016
- useEffect$30(() => {
2020
+ useEffect$32(() => {
2017
2021
  if (!open || revealId === void 0) return;
2018
2022
  revealNode()?.scrollIntoView({ block: "nearest" });
2019
2023
  }, [open, revealId]);
2020
2024
  }
2021
2025
  function selectValueNode(current, renderValue, placeholder) {
2022
- if (current === void 0) return h$67("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2026
+ if (current === void 0) return h$71("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2023
2027
  return renderValue === void 0 ? current.label : renderValue(current);
2024
2028
  }
2025
2029
  function searchNode(args) {
2026
- return h$67("span", {
2030
+ return h$71("span", {
2027
2031
  ref: args.boxRef,
2028
2032
  className: args.className
2029
- }, h$67("span", { className: "wb-selectSearchIcon" }, h$67(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$67(TextField, {
2033
+ }, h$71("span", { className: "wb-selectSearchIcon" }, h$71(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$71(TextField, {
2030
2034
  id: args.id,
2031
2035
  name: args.name,
2032
2036
  className: "wb-selectSearchInput",
@@ -2041,7 +2045,7 @@ window.__ModuleLoader__.load({
2041
2045
  }));
2042
2046
  }
2043
2047
  function menuNode(args) {
2044
- return h$67(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2048
+ return h$71(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2045
2049
  open: args.open,
2046
2050
  portal: true,
2047
2051
  className: "wb-selectAnchor",
@@ -2058,11 +2062,11 @@ window.__ModuleLoader__.load({
2058
2062
  });
2059
2063
  }
2060
2064
  function framed(label, hint, className, control) {
2061
- const inner = label === void 0 ? hint === void 0 ? control : h$67("span", { className: "wb-select" }, control, h$67("span", { className: "wb-selectHint" }, hint)) : h$67(Field, {
2065
+ const inner = label === void 0 ? hint === void 0 ? control : h$71("span", { className: "wb-select" }, control, h$71("span", { className: "wb-selectHint" }, hint)) : h$71(Field, {
2062
2066
  label,
2063
2067
  hint
2064
2068
  }, control);
2065
- return className === void 0 ? inner : h$67("div", { className }, inner);
2069
+ return className === void 0 ? inner : h$71("div", { className }, inner);
2066
2070
  }
2067
2071
  /** 算候选项用来匹配搜索的文本:有 `searchText` 就用它,否则取字符串标签;标签不是字符串又没给它是空串(这项搜不到)。 */
2068
2072
  function searchTextOf(option) {
@@ -2114,9 +2118,9 @@ window.__ModuleLoader__.load({
2114
2118
  }
2115
2119
  function useSelectState(props) {
2116
2120
  const { options, filter = defaultSelectFilter, emptyText, open: openProp, onOpenChange } = props;
2117
- const [openState, setOpenState] = useState$40(false);
2118
- const [query, setQuery] = useState$40("");
2119
- const [cursor, setCursor] = useState$40(null);
2121
+ const [openState, setOpenState] = useState$42(false);
2122
+ const [query, setQuery] = useState$42("");
2123
+ const [cursor, setCursor] = useState$42(null);
2120
2124
  const boxRef = useRef$24(null);
2121
2125
  const triggerRef = useRef$24(null);
2122
2126
  const wasOpenRef = useRef$24(false);
@@ -2127,11 +2131,11 @@ window.__ModuleLoader__.load({
2127
2131
  if (openProp === void 0) setOpenState(next);
2128
2132
  onOpenChange?.(next);
2129
2133
  };
2130
- useEffect$30(() => {
2134
+ useEffect$32(() => {
2131
2135
  if (!open || props.search === false) return;
2132
2136
  boxRef.current?.querySelector("input")?.focus();
2133
2137
  }, [open, props.search]);
2134
- useEffect$30(() => {
2138
+ useEffect$32(() => {
2135
2139
  if (open) {
2136
2140
  wasOpenRef.current = true;
2137
2141
  return;
@@ -2201,7 +2205,7 @@ window.__ModuleLoader__.load({
2201
2205
  ariaLabel,
2202
2206
  loadingText
2203
2207
  }));
2204
- if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$67(TextField, {
2208
+ if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$71(TextField, {
2205
2209
  id,
2206
2210
  name,
2207
2211
  className: "wb-selectFallback",
@@ -2284,11 +2288,11 @@ window.__ModuleLoader__.load({
2284
2288
  * @returns 一个 `role="group"` 的 section。
2285
2289
  */
2286
2290
  function SettingsSection({ label, title, action, children }) {
2287
- return h$67("section", {
2291
+ return h$71("section", {
2288
2292
  className: "wb-settings",
2289
2293
  role: "group",
2290
2294
  "aria-label": label
2291
- }, h$67("header", { className: "wb-settingsHead" }, h$67("span", { className: "wb-settingsTitle" }, title), action), children);
2295
+ }, h$71("header", { className: "wb-settingsHead" }, h$71("span", { className: "wb-settingsTitle" }, title), action), children);
2292
2296
  }
2293
2297
  //#endregion
2294
2298
  //#region ../shared/dist/components/Stack.js
@@ -2298,7 +2302,7 @@ window.__ModuleLoader__.load({
2298
2302
  * @returns 竖排的 div。
2299
2303
  */
2300
2304
  function Stack({ children }) {
2301
- return h$67("div", { className: "wb-stack" }, children);
2305
+ return h$71("div", { className: "wb-stack" }, children);
2302
2306
  }
2303
2307
  //#endregion
2304
2308
  //#region ../shared/dist/components/StateBlock.js
@@ -2313,12 +2317,12 @@ window.__ModuleLoader__.load({
2313
2317
  * @returns 一个 div。
2314
2318
  */
2315
2319
  function StateBlock({ title, dot, hint, actions, resolving, children }) {
2316
- return h$67("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$67("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$67("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$67("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$67("div", { className: "wb-stateBlockActions" }, actions));
2320
+ return h$71("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$71("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$71("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$71("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$71("div", { className: "wb-stateBlockActions" }, actions));
2317
2321
  }
2318
2322
  //#endregion
2319
2323
  //#region ../shared/dist/components/icons.js
2320
2324
  function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
2321
- return h$67("svg", {
2325
+ return h$71("svg", {
2322
2326
  width: size,
2323
2327
  height: size,
2324
2328
  viewBox,
@@ -2335,10 +2339,10 @@ window.__ModuleLoader__.load({
2335
2339
  * @returns 一枚 `aria-hidden` 的 svg。
2336
2340
  */
2337
2341
  function IconConversation({ size = 16 }) {
2338
- return h$67(Shell, {
2342
+ return h$71(Shell, {
2339
2343
  size,
2340
2344
  strokeWidth: 1.3
2341
- }, h$67("path", {
2345
+ }, h$71("path", {
2342
2346
  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
2347
  stroke: "currentColor",
2344
2348
  strokeLinejoin: "round"
@@ -2353,30 +2357,30 @@ window.__ModuleLoader__.load({
2353
2357
  * @returns 一枚 `aria-hidden` 的 svg。
2354
2358
  */
2355
2359
  function IconBrandMark({ size = 24 }) {
2356
- return h$67(Shell, {
2360
+ return h$71(Shell, {
2357
2361
  size,
2358
2362
  viewBox: "0 0 64 64"
2359
- }, h$67("path", {
2363
+ }, h$71("path", {
2360
2364
  d: BRAND_FRAME,
2361
2365
  fill: "currentColor",
2362
2366
  fillRule: "evenodd"
2363
- }), h$67("rect", {
2367
+ }), h$71("rect", {
2364
2368
  x: 27.5,
2365
2369
  y: 48,
2366
2370
  width: 9,
2367
2371
  height: 4.75,
2368
2372
  fill: "currentColor"
2369
- }), h$67("rect", {
2373
+ }), h$71("rect", {
2370
2374
  x: 19,
2371
2375
  y: 52.75,
2372
2376
  width: 26,
2373
2377
  height: 4.75,
2374
2378
  rx: 2.375,
2375
2379
  fill: "currentColor"
2376
- }), h$67("g", { transform: BRAND_TAIL_TRANSFORM }, h$67("path", {
2380
+ }), h$71("g", { transform: BRAND_TAIL_TRANSFORM }, h$71("path", {
2377
2381
  d: BRAND_TAIL,
2378
2382
  fill: "currentColor"
2379
- }), h$67("circle", {
2383
+ }), h$71("circle", {
2380
2384
  cx: 6.885,
2381
2385
  cy: 13.742,
2382
2386
  r: 1.95,
@@ -2389,30 +2393,30 @@ window.__ModuleLoader__.load({
2389
2393
  * @returns 一枚 `aria-hidden` 的 svg。
2390
2394
  */
2391
2395
  function IconOpencli({ size = 16 }) {
2392
- return h$67(Shell, {
2396
+ return h$71(Shell, {
2393
2397
  size,
2394
2398
  viewBox: "0 0 64 64"
2395
- }, h$67("defs", null, h$67("linearGradient", {
2399
+ }, h$71("defs", null, h$71("linearGradient", {
2396
2400
  id: "opencli-mark",
2397
2401
  x1: "0%",
2398
2402
  y1: "0%",
2399
2403
  x2: "100%",
2400
2404
  y2: "100%"
2401
- }, h$67("stop", {
2405
+ }, h$71("stop", {
2402
2406
  offset: "0%",
2403
2407
  stopColor: "#00e5a0"
2404
- }), h$67("stop", {
2408
+ }), h$71("stop", {
2405
2409
  offset: "50%",
2406
2410
  stopColor: "#00b4d8"
2407
- }), h$67("stop", {
2411
+ }), h$71("stop", {
2408
2412
  offset: "100%",
2409
2413
  stopColor: "#7b61ff"
2410
- }))), h$67("rect", {
2414
+ }))), h$71("rect", {
2411
2415
  width: 64,
2412
2416
  height: 64,
2413
2417
  rx: 14,
2414
2418
  fill: "#0a0a0f"
2415
- }), h$67("text", {
2419
+ }), h$71("text", {
2416
2420
  x: "50%",
2417
2421
  y: "54%",
2418
2422
  dominantBaseline: "middle",
@@ -2429,10 +2433,10 @@ window.__ModuleLoader__.load({
2429
2433
  * @returns 一枚 `aria-hidden` 的 svg。
2430
2434
  */
2431
2435
  function IconNpm({ size = 16 }) {
2432
- return h$67(Shell, {
2436
+ return h$71(Shell, {
2433
2437
  size,
2434
2438
  viewBox: "0 0 1024 1024"
2435
- }, h$67("path", {
2439
+ }, h$71("path", {
2436
2440
  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
2441
  fill: "#CB3837"
2438
2442
  }));
@@ -2443,37 +2447,37 @@ window.__ModuleLoader__.load({
2443
2447
  * @returns 一枚 `aria-hidden` 的 svg。
2444
2448
  */
2445
2449
  function IconModuleMark({ size = 16 }) {
2446
- return h$67(Shell, {
2450
+ return h$71(Shell, {
2447
2451
  size,
2448
2452
  viewBox: "0 0 24 24"
2449
- }, h$67("defs", null, h$67("linearGradient", {
2453
+ }, h$71("defs", null, h$71("linearGradient", {
2450
2454
  id: "workbench-module-mark",
2451
2455
  x1: "0%",
2452
2456
  y1: "0%",
2453
2457
  x2: "100%",
2454
2458
  y2: "100%"
2455
- }, h$67("stop", {
2459
+ }, h$71("stop", {
2456
2460
  offset: "0%",
2457
2461
  stopColor: "#3b82f6"
2458
- }), h$67("stop", {
2462
+ }), h$71("stop", {
2459
2463
  offset: "55%",
2460
2464
  stopColor: "#8b5cf6"
2461
- }), h$67("stop", {
2465
+ }), h$71("stop", {
2462
2466
  offset: "100%",
2463
2467
  stopColor: "#14b8a6"
2464
- }))), h$67("rect", {
2468
+ }))), h$71("rect", {
2465
2469
  width: 24,
2466
2470
  height: 24,
2467
2471
  rx: 7,
2468
2472
  fill: "url(#workbench-module-mark)"
2469
- }), h$67("rect", {
2473
+ }), h$71("rect", {
2470
2474
  x: "4.6",
2471
2475
  y: "4.6",
2472
2476
  width: "6.2",
2473
2477
  height: "6.2",
2474
2478
  rx: "1.9",
2475
2479
  fill: "#ffffff"
2476
- }), h$67("rect", {
2480
+ }), h$71("rect", {
2477
2481
  x: "13.2",
2478
2482
  y: "4.6",
2479
2483
  width: "6.2",
@@ -2481,7 +2485,7 @@ window.__ModuleLoader__.load({
2481
2485
  rx: "1.9",
2482
2486
  fill: "#ffffff",
2483
2487
  fillOpacity: .78
2484
- }), h$67("rect", {
2488
+ }), h$71("rect", {
2485
2489
  x: "4.6",
2486
2490
  y: "13.2",
2487
2491
  width: "6.2",
@@ -2489,7 +2493,7 @@ window.__ModuleLoader__.load({
2489
2493
  rx: "1.9",
2490
2494
  fill: "#ffffff",
2491
2495
  fillOpacity: .78
2492
- }), h$67("rect", {
2496
+ }), h$71("rect", {
2493
2497
  x: "13.2",
2494
2498
  y: "13.2",
2495
2499
  width: "6.2",
@@ -2504,7 +2508,7 @@ window.__ModuleLoader__.load({
2504
2508
  * @returns 一枚 `aria-hidden` 的 svg。
2505
2509
  */
2506
2510
  function IconPanelScreen({ size = 16 }) {
2507
- return h$67("svg", {
2511
+ return h$71("svg", {
2508
2512
  width: size,
2509
2513
  height: size,
2510
2514
  viewBox: "0 0 1024 1024",
@@ -2515,7 +2519,7 @@ window.__ModuleLoader__.load({
2515
2519
  display: "block",
2516
2520
  overflow: "hidden"
2517
2521
  }
2518
- }, h$67("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" }));
2522
+ }, h$71("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
2523
  }
2520
2524
  //#endregion
2521
2525
  //#region ../shared/dist/config/storage.js
@@ -2534,6 +2538,12 @@ window.__ModuleLoader__.load({
2534
2538
  else window.localStorage.setItem(key, value);
2535
2539
  } catch {}
2536
2540
  }
2541
+ //#endregion
2542
+ //#region ../shared/dist/contract/approval.js
2543
+ /**
2544
+ * agent 自己那句"这次想干什么"的参数名:插件命令族必填,审批屏把它画在详情座里,不进标题。
2545
+ */
2546
+ var APPROVAL_NOTE_ARG = "approval_note";
2537
2547
  /**
2538
2548
  * 判一个名字是不是范围查法,不是问这条事实存不存在。
2539
2549
  * @param name 事实名或范围名。
@@ -2757,9 +2767,13 @@ window.__ModuleLoader__.load({
2757
2767
  }
2758
2768
  //#endregion
2759
2769
  //#region ../shared/dist/contract/needs.js
2770
+ var REGISTRY_PATTERN = /^(?:https?|file):\/\//;
2760
2771
  function text(value) {
2761
2772
  return typeof value === "string" ? value.trim() : "";
2762
2773
  }
2774
+ function isRecord(value) {
2775
+ return typeof value === "object" && value !== null && !Array.isArray(value);
2776
+ }
2763
2777
  /**
2764
2778
  * 一条 need 的稳定标识:作者写 `id` 就用它,否则 `kind:name`。
2765
2779
  * @param need 一条 need。
@@ -2768,11 +2782,40 @@ window.__ModuleLoader__.load({
2768
2782
  function needIdOf(need) {
2769
2783
  return need.id === void 0 || need.id.trim() === "" ? `${need.kind}:${need.name}` : need.id;
2770
2784
  }
2785
+ function binInstallProblemsOf(raw, at) {
2786
+ if (raw === void 0) return [];
2787
+ if (!isRecord(raw)) return [`${at}.install 要是对象`];
2788
+ const errors = [];
2789
+ for (const key of Object.keys(raw)) if (![
2790
+ "kind",
2791
+ "line",
2792
+ "platforms",
2793
+ "package",
2794
+ "registryEnv",
2795
+ "registryDefault"
2796
+ ].includes(key)) errors.push(`${at}.install 有不认识的字段 ${key}`);
2797
+ const kind = text(raw["kind"]);
2798
+ if (kind !== "command" && kind !== "npm") errors.push(`${at}.install.kind 只认 command(一条命令)或 npm(一个包,装进隔离运行时)`);
2799
+ if (kind === "command" && text(raw["line"]) === "") errors.push(`${at}.install.line 没写 —— 要一条能直接粘进终端的命令`);
2800
+ if (kind === "npm" && text(raw["package"]) === "") errors.push(`${at}.install.package 没写 —— 这个命令由哪个 npm 包提供`);
2801
+ if (raw["registryDefault"] !== void 0 && !REGISTRY_PATTERN.test(text(raw["registryDefault"]))) errors.push(`${at}.install.registryDefault 要是 http(s):// 或 file:// 的源地址`);
2802
+ if (raw["platforms"] !== void 0) {
2803
+ if (!Array.isArray(raw["platforms"]) || raw["platforms"].length === 0) errors.push(`${at}.install.platforms 要是非空数组`);
2804
+ else if (raw["platforms"].some((one) => ![
2805
+ "darwin",
2806
+ "linux",
2807
+ "win32"
2808
+ ].includes(text(one)))) errors.push(`${at}.install.platforms 只认 darwin / linux / win32`);
2809
+ }
2810
+ return errors;
2811
+ }
2771
2812
  function perKindProblemsOf(kind, raw, at) {
2772
2813
  const errors = [];
2773
2814
  if (kind === "bin" || kind === "lib" || kind === "env") {
2774
2815
  if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
2775
2816
  }
2817
+ if (kind === "bin") errors.push(...binInstallProblemsOf(raw["install"], at));
2818
+ if (raw["docs"] !== void 0 && text(raw["docs"]) === "") errors.push(`${at}.docs 是空串`);
2776
2819
  if (kind === "extension") {
2777
2820
  if (text(raw["runtime"]) === "") errors.push(`${at}.runtime 没写 —— 扩展属于哪个运行时(如 opencli)`);
2778
2821
  if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
@@ -3086,11 +3129,14 @@ window.__ModuleLoader__.load({
3086
3129
  "panels.market.update": "Update",
3087
3130
  "panels.market.swapSlow": "Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.",
3088
3131
  "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.",
3089
- "panels.market.updateNoChange": "Update failed: still {from}. The newest on the registry is {latest} — press Update again.",
3132
+ "panels.market.updateNoChange": "Update did not swap in: still {from}; the registry has {latest}.",
3090
3133
  "panels.market.updateUnknownVersion": "(unknown)",
3091
3134
  "panels.market.updateGone": "Update failed: the module is gone after the update.",
3092
3135
  "panels.market.updateRestored": "Update failed: the new version could not be found after the update, so {version} was put back.",
3093
- "panels.market.updateBehind": "Installed {installed}, but the newest on the registry is {latest} — not the latest; you can update once more.",
3136
+ "panels.market.updateBehind": "Installed {installed}, but the registry has {latest}.",
3137
+ "panels.market.updateStuck.title": "Update did not swap in",
3138
+ "panels.market.updateStuck.factNoChange": "Still {from} on disk; the registry has {latest}.",
3139
+ "panels.market.updateStuck.copiedHint": "Paste it into a terminal, then restart the workbench once.",
3094
3140
  "panels.market.selfUpdateFailed": "Workbench update failed: {reason}",
3095
3141
  "panels.market.selfUpdateUnknown": "the outside process left no reason (see ~/.dsh/workbench/self-update.log)",
3096
3142
  "panels.market.selfUpdateRolledBack": "Workbench update failed; rolled back to {version}.",
@@ -3106,6 +3152,40 @@ window.__ModuleLoader__.load({
3106
3152
  "panels.market.confirmNo": "Cancel",
3107
3153
  "panels.market.noMarketSource": "The index has no newer version of this module (refresh the index and retry)",
3108
3154
  "panels.market.failed": "Failed: {reason}",
3155
+ "panels.market.askAgent": "Ask the agent",
3156
+ "panels.market.askAgentCopied": "Copied",
3157
+ "panels.market.askAgentText": "This workbench module cannot be used: \"{name}\" (unit {unit}) — {reason}. Work out what is missing and how to add it, then confirm it works.",
3158
+ "panels.market.failure.permission": "Didn't install: no write access",
3159
+ "panels.market.failure.diskFull": "Didn't install: the disk is full",
3160
+ "panels.market.failure.sandbox": "Didn't install: the system blocked it",
3161
+ "panels.market.failure.unknown": "Didn't install: cause not recognised",
3162
+ "panels.market.failure.factOwner": "{path} belongs to {owner}, and this account ({me}) cannot write to it. Hand it back to yourself (asks for your login password).",
3163
+ "panels.market.failure.factMode": "{path} is mode {mode}, so this account cannot write to it.",
3164
+ "panels.market.failure.factSpace": "The disk holding {path} is full.",
3165
+ "panels.market.failure.factStuck": "This command ran in a restricted environment and cannot write to {path}.",
3166
+ "panels.market.failure.nowhere": "(the directory was not identified)",
3167
+ "panels.market.failure.copyFix": "Copy the fix command",
3168
+ "panels.market.failure.copied": "Copied",
3169
+ "panels.market.failure.copiedHint": "Paste it in a terminal, run it, then click Check again.",
3170
+ "panels.market.failure.askAgent": "Copy for the agent",
3171
+ "panels.market.failure.askAgentText": "Installing this module could not write: `{command}` exited {code} at {path}. Work out whether the sandbox or file permissions blocked it, then install again somewhere writable.",
3172
+ "panels.market.failure.askAgentHint": "Paste it into the chat and let the agent carry on.",
3173
+ "panels.market.failure.recheck": "Check again",
3174
+ "panels.market.failure.showOutput": "Show install output",
3175
+ "panels.market.failure.hideOutput": "Hide install output",
3176
+ "panels.market.failure.term.commandLine": "command on line {line}",
3177
+ "panels.market.failure.term.signal": "killed by {signal}",
3178
+ "panels.market.failure.term.exitCode": "exit code {exitCode}",
3179
+ "panels.market.failure.term.noExitCode": "no exit code",
3180
+ "panels.market.failure.term.running": "running",
3181
+ "panels.market.failure.term.failed": "failed",
3182
+ "panels.market.failure.term.done": "done",
3183
+ "panels.market.failure.term.copy": "Copy",
3184
+ "panels.market.failure.term.copied": "Copied",
3185
+ "panels.market.failure.term.noOutput": "No output",
3186
+ "panels.market.failure.term.collapse": "Collapse",
3187
+ "panels.market.failure.term.expandAria": "Show the remaining {hidden} lines",
3188
+ "panels.market.failure.term.expand": "Show {hidden} lines",
3109
3189
  "panels.market.needEnv": "Set {env} in the terminal that started the workbench first",
3110
3190
  "panels.market.needCommands": "Missing commands: {commands}",
3111
3191
  "panels.market.needBinary": "Install the {command} command first",
@@ -3142,9 +3222,13 @@ window.__ModuleLoader__.load({
3142
3222
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
3143
3223
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
3144
3224
  "panels.market.checkUpdates": "Check for updates",
3225
+ "panels.market.checkAll": "Check all updates",
3145
3226
  "panels.market.checkingNow": "Checking…",
3146
3227
  "panels.market.checkFailed": "The last check failed. Check your connection and retry.",
3147
3228
  "panels.market.checkedAt": "Last checked: {time}",
3229
+ "panels.market.latestPartial": "Could not check {n} modules",
3230
+ "panels.market.latestNoRegistry": "No source configured — the latest version was not checked",
3231
+ "panels.market.latestProbeFailed": "Could not reach the source — try again later",
3148
3232
  "panels.market.justNow": "just now",
3149
3233
  "panels.market.minutesAgo": "{n} min ago",
3150
3234
  "panels.market.hoursAgo": "{n} h ago",
@@ -3203,6 +3287,8 @@ window.__ModuleLoader__.load({
3203
3287
  "panels.market.add.failurePermission": "No write permission, cannot install",
3204
3288
  "panels.market.add.failureBuildBlocked": "A dependency wants to run install scripts; you have to allow it first",
3205
3289
  "panels.market.add.failureIntegrity": "The downloaded package failed its integrity check",
3290
+ "panels.market.add.failureStopProfile": "The old copy is still in use (the workbench has this module loaded), so this dsh version will not overwrite it in place.",
3291
+ "panels.market.add.failureCancelled": "This run was cancelled and nothing changed.",
3206
3292
  "panels.market.add.failureTimeout": "The install timed out",
3207
3293
  "panels.market.add.failurePnpmMissing": "pnpm was not found, cannot install",
3208
3294
  "panels.market.add.failureInstalled": "It is already installed in this workbench. The same package cannot be installed over itself: uninstall it first, then install again. The uninstall did not succeed this time.",
@@ -3286,7 +3372,7 @@ window.__ModuleLoader__.load({
3286
3372
  "panels.discover.missingIndex": "This repository has no {path} yet.",
3287
3373
  "panels.discover.initTitle": "Initialize this repository as a module market index?",
3288
3374
  "panels.discover.initCta": "Initialize market index",
3289
- "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/<package-name>/. The repository stays owned by its owner.",
3375
+ "panels.discover.initWhat": "It will write the index directory market/ and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their build files under artifacts/<package-name>/<version>/ and their entry under market/<package-name>/<version>.json. The repository stays owned by its owner.",
3290
3376
  "panels.discover.initBranch": "Branch",
3291
3377
  "panels.discover.initBranchHint": "The index and build files go to this branch; an empty repository gets it created.",
3292
3378
  "panels.discover.initBranchBad": "Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.",
@@ -3609,6 +3695,9 @@ window.__ModuleLoader__.load({
3609
3695
  "approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
3610
3696
  "approval.longTask.what": "Task to stop",
3611
3697
  "approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
3698
+ "approval.plugin.name": "Plugin",
3699
+ "approval.plugin.command": "Command",
3700
+ "approval.plugin.note": "Agent says",
3612
3701
  "approval.publish.module": "Module",
3613
3702
  "approval.publish.target": "Target",
3614
3703
  "approval.publish.version": "Version",
@@ -3628,7 +3717,7 @@ window.__ModuleLoader__.load({
3628
3717
  "approval.publish.artifacts": "Build files",
3629
3718
  "approval.publish.index": "Index",
3630
3719
  "approval.publish.commits": "Commits",
3631
- "approval.publish.twoCommits": "build files + market.json in 2 commits, one push",
3720
+ "approval.publish.twoCommits": "build files + entry file in 2 commits, one push",
3632
3721
  "approval.publish.reading": "Reading…",
3633
3722
  "approval.publish.changelog": "Changelog for {version}",
3634
3723
  "approval.publish.changelogPending": "This release writes the {version} changelog entry",
@@ -3786,11 +3875,14 @@ window.__ModuleLoader__.load({
3786
3875
  "panels.market.update": "更新",
3787
3876
  "panels.market.swapSlow": "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。",
3788
3877
  "panels.market.removeSlow": "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。",
3789
- "panels.market.updateNoChange": "更新失败:还是 {from};源上最新是 {latest},可以再点一次「更新」。",
3878
+ "panels.market.updateNoChange": "更新没换上:还是 {from};源上最新是 {latest}。",
3790
3879
  "panels.market.updateUnknownVersion": "(问不到)",
3791
3880
  "panels.market.updateGone": "更新失败:更新后找不到这个模块。",
3792
3881
  "panels.market.updateRestored": "更新失败:更新后找不到新版本,已把 {version} 装回去。",
3793
- "panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。",
3882
+ "panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest}。",
3883
+ "panels.market.updateStuck.title": "更新没换上",
3884
+ "panels.market.updateStuck.factNoChange": "盘上还是 {from};源上最新是 {latest}。",
3885
+ "panels.market.updateStuck.copiedHint": "粘到终端跑一次,跑完重启一次工作台。",
3794
3886
  "panels.market.selfUpdateFailed": "工作台更新失败:{reason}",
3795
3887
  "panels.market.selfUpdateUnknown": "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)",
3796
3888
  "panels.market.selfUpdateRolledBack": "工作台更新失败,已回滚到 {version}。",
@@ -3806,6 +3898,40 @@ window.__ModuleLoader__.load({
3806
3898
  "panels.market.confirmNo": "取消",
3807
3899
  "panels.market.noMarketSource": "索引里没有这个模块的新版本(刷新一次索引再试)",
3808
3900
  "panels.market.failed": "没成功:{reason}",
3901
+ "panels.market.askAgent": "问 agent",
3902
+ "panels.market.askAgentCopied": "已复制",
3903
+ "panels.market.askAgentText": "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。",
3904
+ "panels.market.failure.permission": "没装上:没有写入权限",
3905
+ "panels.market.failure.diskFull": "没装上:磁盘满了",
3906
+ "panels.market.failure.sandbox": "没装上:被系统拦住了",
3907
+ "panels.market.failure.unknown": "没装上:原因没认出来",
3908
+ "panels.market.failure.factOwner": "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。",
3909
+ "panels.market.failure.factMode": "{path} 的权限是 {mode},当前账号没有写权限。",
3910
+ "panels.market.failure.factSpace": "{path} 所在的磁盘满了。",
3911
+ "panels.market.failure.factStuck": "这条命令跑在受限环境里,写不进 {path}。",
3912
+ "panels.market.failure.nowhere": "(没认出是哪个目录)",
3913
+ "panels.market.failure.copyFix": "复制修复命令",
3914
+ "panels.market.failure.copied": "已复制",
3915
+ "panels.market.failure.copiedHint": "粘到终端跑一次,回来点「再检测」。",
3916
+ "panels.market.failure.askAgent": "复制给 agent",
3917
+ "panels.market.failure.askAgentText": "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。",
3918
+ "panels.market.failure.askAgentHint": "粘到对话里,让 agent 接着弄。",
3919
+ "panels.market.failure.recheck": "再检测",
3920
+ "panels.market.failure.showOutput": "查看安装输出",
3921
+ "panels.market.failure.hideOutput": "收起安装输出",
3922
+ "panels.market.failure.term.commandLine": "第 {line} 行的命令",
3923
+ "panels.market.failure.term.signal": "被 {signal} 终止",
3924
+ "panels.market.failure.term.exitCode": "退出码 {exitCode}",
3925
+ "panels.market.failure.term.noExitCode": "没有退出码",
3926
+ "panels.market.failure.term.running": "在跑",
3927
+ "panels.market.failure.term.failed": "没跑通",
3928
+ "panels.market.failure.term.done": "跑完了",
3929
+ "panels.market.failure.term.copy": "复制",
3930
+ "panels.market.failure.term.copied": "已复制",
3931
+ "panels.market.failure.term.noOutput": "没有输出",
3932
+ "panels.market.failure.term.collapse": "收起",
3933
+ "panels.market.failure.term.expandAria": "展开剩下的 {hidden} 行",
3934
+ "panels.market.failure.term.expand": "展开 {hidden} 行",
3809
3935
  "panels.market.needEnv": "先在启动工作台的终端里设 {env}",
3810
3936
  "panels.market.needCommands": "缺这几条命令:{commands}",
3811
3937
  "panels.market.needBinary": "先装 {command} 命令",
@@ -3842,9 +3968,13 @@ window.__ModuleLoader__.load({
3842
3968
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
3843
3969
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
3844
3970
  "panels.market.checkUpdates": "检查更新",
3971
+ "panels.market.checkAll": "检查全部更新",
3845
3972
  "panels.market.checkingNow": "正在检查…",
3846
3973
  "panels.market.checkFailed": "最近一次没查到,检查网络后重试",
3847
3974
  "panels.market.checkedAt": "最近检查:{time}",
3975
+ "panels.market.latestPartial": "{n} 个模块没查成",
3976
+ "panels.market.latestNoRegistry": "没配来源,未检查新版",
3977
+ "panels.market.latestProbeFailed": "问不到源,稍后重试",
3848
3978
  "panels.market.justNow": "刚刚",
3849
3979
  "panels.market.minutesAgo": "{n} 分钟前",
3850
3980
  "panels.market.hoursAgo": "{n} 小时前",
@@ -3903,6 +4033,8 @@ window.__ModuleLoader__.load({
3903
4033
  "panels.market.add.failurePermission": "没有写入权限,无法安装",
3904
4034
  "panels.market.add.failureBuildBlocked": "有依赖的安装脚本需要你允许后才能继续",
3905
4035
  "panels.market.add.failureIntegrity": "下载的安装包校验失败",
4036
+ "panels.market.add.failureStopProfile": "旧版还在用着(工作台正加载这个模块),这一版 dsh 不肯就地覆盖。",
4037
+ "panels.market.add.failureCancelled": "这次操作被取消了,什么都没动。",
3906
4038
  "panels.market.add.failureTimeout": "安装超时",
3907
4039
  "panels.market.add.failurePnpmMissing": "没有找到 pnpm,无法安装",
3908
4040
  "panels.market.add.failureInstalled": "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。",
@@ -3986,7 +4118,7 @@ window.__ModuleLoader__.load({
3986
4118
  "panels.discover.missingIndex": "仓库里还没有索引文件 {path}",
3987
4119
  "panels.discover.initTitle": "把这个仓库初始化成模块市场索引?",
3988
4120
  "panels.discover.initCta": "初始化成市场索引",
3989
- "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到按包名分的 packages/<包名>/。仓库的写权限归它的所有者。",
4121
+ "panels.discover.initWhat": "会在 {branch} 分支写索引目录 market/ 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 artifacts/<包名>/<版本>/,条目写到 market/<包名>/<版本>.json。仓库的写权限归它的所有者。",
3990
4122
  "panels.discover.initBranch": "分支",
3991
4123
  "panels.discover.initBranchHint": "索引和打包文件都发到这个分支;空仓库会新建它。",
3992
4124
  "panels.discover.initBranchBad": "分支名只能用字母、数字、点、下划线、斜杠或短横线",
@@ -4309,6 +4441,9 @@ window.__ModuleLoader__.load({
4309
4441
  "approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
4310
4442
  "approval.longTask.what": "要停的那次任务",
4311
4443
  "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
4444
+ "approval.plugin.name": "插件",
4445
+ "approval.plugin.command": "命令",
4446
+ "approval.plugin.note": "agent 说",
4312
4447
  "approval.publish.module": "模块",
4313
4448
  "approval.publish.target": "目标",
4314
4449
  "approval.publish.version": "版本",
@@ -4328,7 +4463,7 @@ window.__ModuleLoader__.load({
4328
4463
  "approval.publish.artifacts": "打包文件",
4329
4464
  "approval.publish.index": "索引",
4330
4465
  "approval.publish.commits": "提交",
4331
- "approval.publish.twoCommits": "打包文件 + market.json 两次提交,一次推送",
4466
+ "approval.publish.twoCommits": "打包文件 + 条目文件两次提交,一次推送",
4332
4467
  "approval.publish.reading": "读取中…",
4333
4468
  "approval.publish.changelog": "{version} 的更新日志",
4334
4469
  "approval.publish.changelogPending": "{version} 这一版会写进更新日志,随包发布",
@@ -4680,6 +4815,33 @@ window.__ModuleLoader__.load({
4680
4815
  }));
4681
4816
  }
4682
4817
  //#endregion
4818
+ //#region src/shared/api/unit-board.ts
4819
+ function gateOf(capability, mode) {
4820
+ if (mode === "none") return { gated: true };
4821
+ if (capability === null) return { gated: true };
4822
+ return { gated: capability.status === "ok" || capability.status === "unchecked" };
4823
+ }
4824
+ function splitBlocker(candidates) {
4825
+ let blocker;
4826
+ let notice;
4827
+ for (const candidate of candidates) {
4828
+ if (candidate === void 0) continue;
4829
+ if (candidate.severity === "block") {
4830
+ blocker ??= candidate;
4831
+ continue;
4832
+ }
4833
+ notice ??= candidate;
4834
+ }
4835
+ return {
4836
+ ...blocker === void 0 ? {} : { blocker },
4837
+ ...blocker !== void 0 || notice === void 0 ? {} : { notice }
4838
+ };
4839
+ }
4840
+ function probeKeyOf(error) {
4841
+ if (error === void 0) return null;
4842
+ return error.code === "" ? "unknown" : error.code;
4843
+ }
4844
+ //#endregion
4683
4845
  //#region src/shared/hooks/fact-transports.ts
4684
4846
  function sseTransport(options) {
4685
4847
  return { start({ onFrame, cursor, onMode }) {
@@ -4832,14 +4994,14 @@ window.__ModuleLoader__.load({
4832
4994
  epoch$1 += 1;
4833
4995
  }
4834
4996
  var current$1 = null;
4835
- var listeners$7 = /* @__PURE__ */ new Set();
4997
+ var listeners$8 = /* @__PURE__ */ new Set();
4836
4998
  function capabilityValue() {
4837
4999
  return current$1;
4838
5000
  }
4839
5001
  function subscribeCapabilities(listener) {
4840
- listeners$7.add(listener);
5002
+ listeners$8.add(listener);
4841
5003
  return () => {
4842
- listeners$7.delete(listener);
5004
+ listeners$8.delete(listener);
4843
5005
  };
4844
5006
  }
4845
5007
  function setCapabilities(next, rechecked = false) {
@@ -4852,7 +5014,7 @@ window.__ModuleLoader__.load({
4852
5014
  });
4853
5015
  if (next === current$1) return;
4854
5016
  current$1 = next;
4855
- for (const listener of [...listeners$7]) listener();
5017
+ for (const listener of [...listeners$8]) listener();
4856
5018
  }
4857
5019
  function beginProbe() {
4858
5020
  probing += 1;
@@ -4898,12 +5060,12 @@ window.__ModuleLoader__.load({
4898
5060
  };
4899
5061
  return promise;
4900
5062
  }
4901
- var readSeq$1 = 0;
5063
+ var readSeq = 0;
4902
5064
  var newestForceSeq$1 = -1;
4903
5065
  function runCapabilityRead(options) {
4904
5066
  const { force, silent = false, load = fetchAll } = options;
4905
5067
  const at = epoch$1;
4906
- const seq = readSeq$1 += 1;
5068
+ const seq = readSeq += 1;
4907
5069
  if (force) newestForceSeq$1 = seq;
4908
5070
  const shown = force && !silent;
4909
5071
  if (shown) beginProbe();
@@ -4939,33 +5101,6 @@ window.__ModuleLoader__.load({
4939
5101
  return (0, react.useSyncExternalStore)(subscribeProbe, probeValue);
4940
5102
  }
4941
5103
  //#endregion
4942
- //#region src/shared/api/unit-board.ts
4943
- function gateOf(capability, mode) {
4944
- if (mode === "none") return { gated: true };
4945
- if (capability === null) return { gated: true };
4946
- return { gated: capability.status === "ok" || capability.status === "unchecked" };
4947
- }
4948
- function splitBlocker(candidates) {
4949
- let blocker;
4950
- let notice;
4951
- for (const candidate of candidates) {
4952
- if (candidate === void 0) continue;
4953
- if (candidate.severity === "block") {
4954
- blocker ??= candidate;
4955
- continue;
4956
- }
4957
- notice ??= candidate;
4958
- }
4959
- return {
4960
- ...blocker === void 0 ? {} : { blocker },
4961
- ...blocker !== void 0 || notice === void 0 ? {} : { notice }
4962
- };
4963
- }
4964
- function probeKeyOf(error) {
4965
- if (error === void 0) return null;
4966
- return error.code === "" ? "unknown" : error.code;
4967
- }
4968
- //#endregion
4969
5104
  //#region src/shared/hooks/use-capability-gate.ts
4970
5105
  var use_capability_gate_exports = /* @__PURE__ */ __exportAll({
4971
5106
  useCapabilityGate: () => useCapabilityGate,
@@ -5007,7 +5142,7 @@ window.__ModuleLoader__.load({
5007
5142
  //#endregion
5008
5143
  //#region src/app/layouts/panel-hint.ts
5009
5144
  var hints = /* @__PURE__ */ new Map();
5010
- var listeners$6 = /* @__PURE__ */ new Set();
5145
+ var listeners$7 = /* @__PURE__ */ new Set();
5011
5146
  function sameHint(left, right) {
5012
5147
  if (left === null || right === null) return left === right;
5013
5148
  if (left.labelKey !== right.labelKey || left.tone !== right.tone) return false;
@@ -5019,15 +5154,15 @@ window.__ModuleLoader__.load({
5019
5154
  if (sameHint(hints.get(id) ?? null, hint)) return;
5020
5155
  if (hint === null) hints.delete(id);
5021
5156
  else hints.set(id, hint);
5022
- for (const listener of [...listeners$6]) listener();
5157
+ for (const listener of [...listeners$7]) listener();
5023
5158
  }
5024
5159
  function panelHintOf(id) {
5025
5160
  return id === null ? null : hints.get(id) ?? null;
5026
5161
  }
5027
5162
  function subscribePanelHints(listener) {
5028
- listeners$6.add(listener);
5163
+ listeners$7.add(listener);
5029
5164
  return () => {
5030
- listeners$6.delete(listener);
5165
+ listeners$7.delete(listener);
5031
5166
  };
5032
5167
  }
5033
5168
  function usePanelHint(id) {
@@ -5195,6 +5330,29 @@ window.__ModuleLoader__.load({
5195
5330
  if (installed === void 0) return null;
5196
5331
  return new Set(installed.map((item) => item.unit));
5197
5332
  }
5333
+ function latestUnavailableNote(unavailable) {
5334
+ if (unavailable === "no-registry") return {
5335
+ key: "panels.market.latestNoRegistry",
5336
+ params: {}
5337
+ };
5338
+ if (unavailable === "probe-failed") return {
5339
+ key: "panels.market.latestProbeFailed",
5340
+ params: {}
5341
+ };
5342
+ }
5343
+ function latestCheckSummary(modules) {
5344
+ let checked = 0;
5345
+ let unknown = 0;
5346
+ for (const module of modules ?? []) if (module.latest !== void 0) checked += 1;
5347
+ else if (module.latestUnavailable === "no-registry" || module.latestUnavailable === "probe-failed") unknown += 1;
5348
+ return {
5349
+ checked,
5350
+ unknown
5351
+ };
5352
+ }
5353
+ function checkedPluginCount(plugins) {
5354
+ return (plugins ?? []).filter((plugin) => plugin.latest !== void 0).length;
5355
+ }
5198
5356
  function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5199
5357
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.titleKey]));
5200
5358
  const rows = [];
@@ -5208,16 +5366,17 @@ window.__ModuleLoader__.load({
5208
5366
  const pending = !loaded && refused.length === 0;
5209
5367
  const titleKey = titles.get(module.unit);
5210
5368
  const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
5369
+ const note = refused.length > 0 ? {
5370
+ key: "panels.market.moduleRefused",
5371
+ params: {}
5372
+ } : latestUnavailableNote(module.latestUnavailable);
5211
5373
  rows.push({
5212
5374
  id: module.unit,
5213
5375
  titleKey: titleKey ?? module.unit,
5214
5376
  ...remembered === void 0 ? {} : { label: remembered },
5215
5377
  state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
5216
5378
  ...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
5217
- ...refused.length === 0 ? {} : { note: {
5218
- key: "panels.market.moduleRefused",
5219
- params: {}
5220
- } },
5379
+ ...note === void 0 ? {} : { note },
5221
5380
  ...module.local === true ? { local: true } : {},
5222
5381
  pkg: module.pkg,
5223
5382
  canInstall: false,
@@ -5244,6 +5403,13 @@ window.__ModuleLoader__.load({
5244
5403
  function marketSwitchLocked(row) {
5245
5404
  return SWITCH_LOCKED.has(row.state);
5246
5405
  }
5406
+ function marketAsksAgent(row) {
5407
+ if (row.workbench === true || row.plugin === true) return false;
5408
+ if (row.state === "installed" || row.state === "inactive" || row.state === "outdated") return false;
5409
+ if (row.state === "checking" || row.state === "pending-restart") return false;
5410
+ if (row.state === "pending-followup") return false;
5411
+ return !marketActions$1(row).includes("install");
5412
+ }
5247
5413
  function marketActions$1(row) {
5248
5414
  if (row.workbench === true) {
5249
5415
  if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
@@ -5366,6 +5532,18 @@ window.__ModuleLoader__.load({
5366
5532
  rows: rest
5367
5533
  }]];
5368
5534
  }
5535
+ function checkingRows(rows, scope) {
5536
+ return rows.map((row) => {
5537
+ if (row.state !== "unknown" && row.state !== "unchecked") return row;
5538
+ if (!scope.all && !scope.units.has(row.id)) return row;
5539
+ return {
5540
+ ...row,
5541
+ state: "checking",
5542
+ hint: void 0,
5543
+ note: void 0
5544
+ };
5545
+ });
5546
+ }
5369
5547
  function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5370
5548
  const rows = [];
5371
5549
  for (const manifest of manifests) {
@@ -5494,8 +5672,9 @@ window.__ModuleLoader__.load({
5494
5672
  function isProblem(row) {
5495
5673
  return row.broken === true || row.state === "broken" || row.state === "unusable" || row.note?.key === "panels.market.moduleRefused";
5496
5674
  }
5497
- function isRestart(row) {
5498
- return row.state === "inactive" || row.state === "pending-restart";
5675
+ function isRestart(row, installing) {
5676
+ if (row.state === "pending-restart") return true;
5677
+ return !installing && row.state === "inactive";
5499
5678
  }
5500
5679
  function isUnknown(row, rosterRead) {
5501
5680
  return row.state === "unchecked" || rosterRead && row.state === "unknown";
@@ -5505,9 +5684,10 @@ window.__ModuleLoader__.load({
5505
5684
  return installed.some((module) => !loaded.has(module.unit) && refusalReasons(module.refused, module.clientRefused).length === 0);
5506
5685
  }
5507
5686
  function marketHintOf(input) {
5508
- const busy = input.busy ?? /* @__PURE__ */ new Set();
5509
- const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !busy.has(manifest.id));
5510
- const installed = (input.installed ?? []).filter((module) => !busy.has(module.unit));
5687
+ const installing = input.installing === true;
5688
+ const held = /* @__PURE__ */ new Set([...input.busy ?? [], ...input.applied ?? []]);
5689
+ const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !held.has(manifest.id));
5690
+ const installed = (input.installed ?? []).filter((module) => !held.has(module.unit));
5511
5691
  const catalog = marketRows(marketable, input.capabilities, marketUpdatesOf(input.modules));
5512
5692
  const listed = new Set(catalog.map((row) => row.id));
5513
5693
  const self = workbenchRow(input.workbench);
@@ -5518,10 +5698,10 @@ window.__ModuleLoader__.load({
5518
5698
  ...self === void 0 ? [] : [self]
5519
5699
  ];
5520
5700
  const problem = rows.some(isProblem);
5521
- const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
5701
+ const restart = rows.some((row) => isRestart(row, installing)) || !installing && awaitsRestart(input.manifests, installed);
5522
5702
  const followUp = rows.some((row) => row.state === "pending-followup");
5523
5703
  const rosterRead = input.modules !== null;
5524
- const unknown = rows.some((row) => isUnknown(row, rosterRead));
5704
+ const unknown = !installing && rows.some((row) => isUnknown(row, rosterRead));
5525
5705
  const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
5526
5706
  const more = [];
5527
5707
  if (problem) {
@@ -5650,10 +5830,10 @@ window.__ModuleLoader__.load({
5650
5830
  }
5651
5831
  //#endregion
5652
5832
  //#region src/app/layouts/rightbar/market-busy.ts
5653
- var listeners$5 = /* @__PURE__ */ new Set();
5833
+ var listeners$6 = /* @__PURE__ */ new Set();
5654
5834
  var published = /* @__PURE__ */ new Map();
5655
5835
  var live$2 = /* @__PURE__ */ new Set();
5656
- var timer$2;
5836
+ var timer$3;
5657
5837
  var MARKET_BUSY_MS = WORKBENCH_SWAP_MS;
5658
5838
  function marketBusyIds() {
5659
5839
  return live$2;
@@ -5663,12 +5843,12 @@ window.__ModuleLoader__.load({
5663
5843
  const next = /* @__PURE__ */ new Map();
5664
5844
  for (const id of new Set(ids)) next.set(id, published.get(id) ?? now);
5665
5845
  published = next;
5666
- refresh(now);
5846
+ refresh$1(now);
5667
5847
  }
5668
5848
  function subscribeMarketBusy(listener) {
5669
- listeners$5.add(listener);
5849
+ listeners$6.add(listener);
5670
5850
  return () => {
5671
- listeners$5.delete(listener);
5851
+ listeners$6.delete(listener);
5672
5852
  };
5673
5853
  }
5674
5854
  function useMarketBusy() {
@@ -5684,29 +5864,100 @@ window.__ModuleLoader__.load({
5684
5864
  for (const id of left) if (!right.has(id)) return false;
5685
5865
  return true;
5686
5866
  }
5687
- function schedule$1(now) {
5688
- if (timer$2 !== void 0) clearTimeout(timer$2);
5689
- timer$2 = void 0;
5867
+ function schedule$2(now) {
5868
+ if (timer$3 !== void 0) clearTimeout(timer$3);
5869
+ timer$3 = void 0;
5690
5870
  let soonest = Number.POSITIVE_INFINITY;
5691
5871
  for (const at of published.values()) soonest = Math.min(soonest, at);
5692
5872
  if (soonest === Number.POSITIVE_INFINITY) return;
5693
- timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
5873
+ timer$3 = setTimeout(() => refresh$1(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
5694
5874
  }
5695
- function refresh(now) {
5875
+ function refresh$1(now) {
5696
5876
  for (const [id, at] of published) if (now - at >= MARKET_BUSY_MS) published.delete(id);
5697
5877
  const next = new Set(published.keys());
5698
5878
  if (!sameSet(live$2, next)) {
5699
5879
  live$2 = next;
5880
+ for (const listener of [...listeners$6]) listener();
5881
+ }
5882
+ schedule$2(now);
5883
+ }
5884
+ //#endregion
5885
+ //#region src/app/layouts/rightbar/market-install.ts
5886
+ var NO_UNITS$2 = /* @__PURE__ */ new Set();
5887
+ var IDLE$2 = {
5888
+ installing: false,
5889
+ applied: NO_UNITS$2
5890
+ };
5891
+ var tokens = /* @__PURE__ */ new Set();
5892
+ var applied = /* @__PURE__ */ new Map();
5893
+ var listeners$5 = /* @__PURE__ */ new Set();
5894
+ var snapshot$1 = IDLE$2;
5895
+ var timer$2;
5896
+ function sameUnits(left, right) {
5897
+ if (left.size !== right.size) return false;
5898
+ for (const unit of left) if (!right.has(unit)) return false;
5899
+ return true;
5900
+ }
5901
+ function schedule$1(now) {
5902
+ if (timer$2 !== void 0) clearTimeout(timer$2);
5903
+ timer$2 = void 0;
5904
+ if (applied.size === 0) return;
5905
+ let soonest = Number.POSITIVE_INFINITY;
5906
+ for (const at of applied.values()) soonest = Math.min(soonest, at);
5907
+ timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MODULE_SETTLE_MS - now) + 1);
5908
+ }
5909
+ function refresh(now) {
5910
+ for (const [unit, at] of applied) if (now - at >= 15e3) applied.delete(unit);
5911
+ const next = tokens.size === 0 && applied.size === 0 ? IDLE$2 : {
5912
+ installing: tokens.size > 0,
5913
+ applied: applied.size === 0 ? NO_UNITS$2 : new Set(applied.keys())
5914
+ };
5915
+ if (next.installing !== snapshot$1.installing || !sameUnits(next.applied, snapshot$1.applied)) {
5916
+ snapshot$1 = next;
5700
5917
  for (const listener of [...listeners$5]) listener();
5701
5918
  }
5702
5919
  schedule$1(now);
5703
5920
  }
5921
+ function marketInstallState() {
5922
+ return snapshot$1;
5923
+ }
5924
+ function subscribeMarketInstall(listener) {
5925
+ listeners$5.add(listener);
5926
+ return () => {
5927
+ listeners$5.delete(listener);
5928
+ };
5929
+ }
5930
+ function publishMarketInstalling(token, active) {
5931
+ if (active) tokens.add(token);
5932
+ else tokens.delete(token);
5933
+ refresh(Date.now());
5934
+ }
5935
+ function publishMarketApplied(units) {
5936
+ const now = Date.now();
5937
+ for (const unit of new Set(units)) if (unit !== "" && !applied.has(unit)) applied.set(unit, now);
5938
+ refresh(now);
5939
+ }
5940
+ function useMarketInstallState() {
5941
+ return (0, react.useSyncExternalStore)(subscribeMarketInstall, marketInstallState);
5942
+ }
5943
+ function usePublishMarketInstalling(token, active) {
5944
+ (0, react.useEffect)(() => {
5945
+ publishMarketInstalling(token, active);
5946
+ return () => publishMarketInstalling(token, false);
5947
+ }, [token, active]);
5948
+ }
5704
5949
  //#endregion
5705
5950
  //#region src/shared/api/write-outcome.ts
5706
5951
  function writeRoute(channel, resource) {
5707
5952
  if (channel === "provision") return "provision";
5708
5953
  return `${channel}/${resource}`;
5709
5954
  }
5955
+ function installFailureOf(value) {
5956
+ if (typeof value !== "object" || value === null) return void 0;
5957
+ const record = value;
5958
+ if (typeof record.kind !== "string" || typeof record.command !== "string") return void 0;
5959
+ return value;
5960
+ }
5710
5961
  function writeOutcomeOf(response, networkText) {
5711
5962
  if (response === null) return {
5712
5963
  ok: false,
@@ -5718,11 +5969,13 @@ window.__ModuleLoader__.load({
5718
5969
  const fallback = typeof box.text === "string" && box.text !== "" ? box.text : networkText;
5719
5970
  const detail = typeof box.error?.detail === "string" ? box.error.detail : void 0;
5720
5971
  const helpUrl = typeof box.error?.helpUrl === "string" && box.error.helpUrl !== "" ? box.error.helpUrl : void 0;
5972
+ const failure = installFailureOf(box.error?.failure);
5721
5973
  return {
5722
5974
  ok: false,
5723
5975
  message: own ?? fallback,
5724
5976
  ...detail === void 0 ? {} : { detail },
5725
- ...helpUrl === void 0 ? {} : { helpUrl }
5977
+ ...helpUrl === void 0 ? {} : { helpUrl },
5978
+ ...failure === void 0 ? {} : { failure }
5726
5979
  };
5727
5980
  }
5728
5981
  return {
@@ -5929,137 +6182,138 @@ window.__ModuleLoader__.load({
5929
6182
  };
5930
6183
  }
5931
6184
  var MarketPage_module_default = {
5932
- marketList: "_marketList_yups9_1",
5933
- marketRow: "_marketRow_yups9_10",
5934
- marketIcon: "_marketIcon_yups9_20",
5935
- marketMain: "_marketMain_yups9_32",
5936
- marketName: "_marketName_yups9_39",
5937
- marketStatus: "_marketStatus_yups9_48",
5938
- marketStateText: "_marketStateText_yups9_58",
5939
- marketSep: "_marketSep_yups9_62",
5940
- marketReason: "_marketReason_yups9_66",
5941
- marketVersion: "_marketVersion_yups9_72",
5942
- marketLocalTag: "_marketLocalTag_yups9_94",
5943
- marketEnd: "_marketEnd_yups9_105",
5944
- marketSwitchSeat: "_marketSwitchSeat_yups9_112",
5945
- marketActions: "_marketActions_yups9_125",
5946
- marketUpdateAction: "_marketUpdateAction_yups9_131",
5947
- marketSelfDivider: "_marketSelfDivider_yups9_137",
5948
- marketSection: "_marketSection_yups9_143",
5949
- marketSectionHead: "_marketSectionHead_yups9_150",
5950
- marketSectionIcon: "_marketSectionIcon_yups9_156",
5951
- marketSectionTitle: "_marketSectionTitle_yups9_163",
5952
- marketSectionCount: "_marketSectionCount_yups9_169",
5953
- marketSectionAction: "_marketSectionAction_yups9_175",
5954
- marketSectionQuiet: "_marketSectionQuiet_yups9_183",
5955
- marketProgress: "_marketProgress_yups9_196",
5956
- marketNote: "_marketNote_yups9_206",
5957
- marketFailure: "_marketFailure_yups9_213",
5958
- marketEmpty: "_marketEmpty_yups9_220",
5959
- marketPage: "_marketPage_yups9_225",
5960
- marketPageHead: "_marketPageHead_yups9_243",
5961
- marketPageTitle: "_marketPageTitle_yups9_251",
5962
- marketPageIntro: "_marketPageIntro_yups9_256",
5963
- marketPageTools: "_marketPageTools_yups9_262",
5964
- marketPanel: "_marketPanel_yups9_271",
5965
- marketTabs: "_marketTabs_yups9_281",
5966
- marketTabList: "_marketTabList_yups9_286",
5967
- marketAddButton: "_marketAddButton_yups9_291",
5968
- marketEmptyTitle: "_marketEmptyTitle_yups9_308",
5969
- discoverPage: "_discoverPage_yups9_313",
5970
- discoverBar: "_discoverBar_yups9_320",
5971
- discoverTools: "_discoverTools_yups9_327",
5972
- discoverMarket: "_discoverMarket_yups9_333",
5973
- discoverMarketButton: "_discoverMarketButton_yups9_338",
5974
- discoverMarketName: "_discoverMarketName_yups9_345",
5975
- discoverLabels: "_discoverLabels_yups9_351",
5976
- discoverSort: "_discoverSort_yups9_356",
5977
- discoverRefresh: "_discoverRefresh_yups9_361",
5978
- discoverSearch: "_discoverSearch_yups9_365",
5979
- discoverSearchField: "_discoverSearchField_yups9_373",
5980
- discoverSearchFieldFilled: "_discoverSearchFieldFilled_yups9_378",
5981
- discoverSearchClear: "_discoverSearchClear_yups9_387",
5982
- discoverChips: "_discoverChips_yups9_438",
5983
- discoverList: "_discoverList_yups9_445",
5984
- discoverCard: "_discoverCard_yups9_454",
5985
- discoverArtwork: "_discoverArtwork_yups9_468",
5986
- discoverArtworkImage: "_discoverArtworkImage_yups9_480",
5987
- discoverMain: "_discoverMain_yups9_484",
5988
- discoverTitleRow: "_discoverTitleRow_yups9_492",
5989
- discoverCardOpen: "_discoverCardOpen_yups9_500",
5990
- discoverStrong: "_discoverStrong_yups9_531",
5991
- discoverDesc: "_discoverDesc_yups9_537",
5992
- discoverMeta: "_discoverMeta_yups9_546",
5993
- discoverMuted: "_discoverMuted_yups9_553",
5994
- discoverEnd: "_discoverEnd_yups9_559",
5995
- discoverUpdateAction: "_discoverUpdateAction_yups9_568",
5996
- discoverBlocked: "_discoverBlocked_yups9_573",
5997
- discoverEmpty: "_discoverEmpty_yups9_578",
5998
- discoverEmptyTitle: "_discoverEmptyTitle_yups9_587",
5999
- discoverDetail: "_discoverDetail_yups9_597",
6000
- discoverCrumb: "_discoverCrumb_yups9_603",
6001
- discoverCrumbIcon: "_discoverCrumbIcon_yups9_626",
6002
- discoverDetailHead: "_discoverDetailHead_yups9_630",
6003
- discoverDetailTitle: "_discoverDetailTitle_yups9_636",
6004
- discoverDetailText: "_discoverDetailText_yups9_642",
6005
- discoverDetailPanel: "_discoverDetailPanel_yups9_649",
6006
- discoverDetailTabs: "_discoverDetailTabs_yups9_656",
6007
- discoverDetailTabList: "_discoverDetailTabList_yups9_661",
6008
- discoverDocBody: "_discoverDocBody_yups9_666",
6009
- discoverDocNotice: "_discoverDocNotice_yups9_671",
6010
- discoverSection: "_discoverSection_yups9_677",
6011
- discoverSectionTitle: "_discoverSectionTitle_yups9_684",
6012
- discoverFacts: "_discoverFacts_yups9_690",
6013
- discoverFactRow: "_discoverFactRow_yups9_695",
6014
- discoverFactKind: "_discoverFactKind_yups9_705",
6015
- discoverFactValue: "_discoverFactValue_yups9_711",
6016
- discoverCode: "_discoverCode_yups9_719",
6017
- discoverTags: "_discoverTags_yups9_728",
6018
- discoverLink: "_discoverLink_yups9_735",
6019
- discoverVersions: "_discoverVersions_yups9_745",
6020
- discoverVersionRow: "_discoverVersionRow_yups9_753",
6021
- discoverVersionName: "_discoverVersionName_yups9_761",
6022
- discoverError: "_discoverError_yups9_766",
6023
- discoverFailure: "_discoverFailure_yups9_775",
6024
- discoverLoading: "_discoverLoading_yups9_781",
6025
- discoverNotice: "_discoverNotice_yups9_790",
6026
- discoverMore: "_discoverMore_yups9_808",
6027
- discoverTransport: "_discoverTransport_yups9_812",
6028
- discoverTransportHead: "_discoverTransportHead_yups9_818",
6029
- discoverTransportTitle: "_discoverTransportTitle_yups9_825",
6030
- discoverTransportKind: "_discoverTransportKind_yups9_830",
6031
- discoverTransportState: "_discoverTransportState_yups9_835",
6032
- discoverTransportRows: "_discoverTransportRows_yups9_843",
6033
- discoverTransportRow: "_discoverTransportRow_yups9_843",
6034
- discoverTransportRadio: "_discoverTransportRadio_yups9_864",
6035
- discoverTransportCustom: "_discoverTransportCustom_yups9_904",
6036
- discoverTransportInput: "_discoverTransportInput_yups9_910",
6037
- discoverInstallBar: "_discoverInstallBar_yups9_915",
6038
- discoverInstallText: "_discoverInstallText_yups9_926",
6039
- discoverDialog: "_discoverDialog_yups9_932",
6040
- discoverDialogBody: "_discoverDialogBody_yups9_936",
6041
- discoverSourceList: "_discoverSourceList_yups9_942",
6042
- discoverSourceRow: "_discoverSourceRow_yups9_950",
6043
- discoverSourceConfirm: "_discoverSourceConfirm_yups9_959",
6044
- discoverSourcePick: "_discoverSourcePick_yups9_965",
6045
- discoverSourceRadio: "_discoverSourceRadio_yups9_974",
6046
- discoverSourceMain: "_discoverSourceMain_yups9_982",
6047
- discoverSourceHead: "_discoverSourceHead_yups9_990",
6048
- discoverSourceUrl: "_discoverSourceUrl_yups9_998",
6049
- discoverSourceMore: "_discoverSourceMore_yups9_1008",
6050
- discoverSourceLoading: "_discoverSourceLoading_yups9_1012",
6051
- discoverSourceHint: "_discoverSourceHint_yups9_1022",
6052
- discoverSourceError: "_discoverSourceError_yups9_1036",
6053
- discoverSourceForm: "_discoverSourceForm_yups9_1042",
6054
- discoverGrow: "_discoverGrow_yups9_1048",
6055
- discoverField: "_discoverField_yups9_1053",
6056
- discoverFieldLabel: "_discoverFieldLabel_yups9_1059",
6057
- discoverConfirmHead: "_discoverConfirmHead_yups9_1064",
6058
- discoverSkeletonFill: "_discoverSkeletonFill_yups9_1070",
6059
- "wb-skeleton": "_wb-skeleton_yups9_1",
6060
- discoverSkeletonBar: "_discoverSkeletonBar_yups9_1079",
6061
- discoverSkeletonTitle: "_discoverSkeletonTitle_yups9_1086",
6062
- discoverSkeletonDesc: "_discoverSkeletonDesc_yups9_1090"
6185
+ marketList: "_marketList_1vpw3_1",
6186
+ marketRow: "_marketRow_1vpw3_10",
6187
+ marketIcon: "_marketIcon_1vpw3_20",
6188
+ marketMain: "_marketMain_1vpw3_32",
6189
+ marketName: "_marketName_1vpw3_39",
6190
+ marketStatus: "_marketStatus_1vpw3_48",
6191
+ marketStateText: "_marketStateText_1vpw3_58",
6192
+ marketSep: "_marketSep_1vpw3_62",
6193
+ marketReason: "_marketReason_1vpw3_66",
6194
+ marketVersion: "_marketVersion_1vpw3_72",
6195
+ marketLocalTag: "_marketLocalTag_1vpw3_94",
6196
+ marketEnd: "_marketEnd_1vpw3_105",
6197
+ marketSwitchSeat: "_marketSwitchSeat_1vpw3_112",
6198
+ marketActions: "_marketActions_1vpw3_125",
6199
+ marketUpdateAction: "_marketUpdateAction_1vpw3_131",
6200
+ marketSelfDivider: "_marketSelfDivider_1vpw3_137",
6201
+ marketSection: "_marketSection_1vpw3_143",
6202
+ marketSectionHead: "_marketSectionHead_1vpw3_150",
6203
+ marketSectionIcon: "_marketSectionIcon_1vpw3_156",
6204
+ marketSectionTitle: "_marketSectionTitle_1vpw3_163",
6205
+ marketSectionCount: "_marketSectionCount_1vpw3_169",
6206
+ marketSectionAction: "_marketSectionAction_1vpw3_175",
6207
+ marketSectionQuiet: "_marketSectionQuiet_1vpw3_183",
6208
+ marketProgress: "_marketProgress_1vpw3_195",
6209
+ marketNote: "_marketNote_1vpw3_205",
6210
+ marketFailure: "_marketFailure_1vpw3_212",
6211
+ marketFailureSeat: "_marketFailureSeat_1vpw3_219",
6212
+ marketEmpty: "_marketEmpty_1vpw3_224",
6213
+ marketPage: "_marketPage_1vpw3_229",
6214
+ marketPageHead: "_marketPageHead_1vpw3_247",
6215
+ marketPageTitle: "_marketPageTitle_1vpw3_255",
6216
+ marketPageIntro: "_marketPageIntro_1vpw3_260",
6217
+ marketPageTools: "_marketPageTools_1vpw3_266",
6218
+ marketPanel: "_marketPanel_1vpw3_275",
6219
+ marketTabs: "_marketTabs_1vpw3_285",
6220
+ marketTabList: "_marketTabList_1vpw3_290",
6221
+ marketAddButton: "_marketAddButton_1vpw3_295",
6222
+ marketEmptyTitle: "_marketEmptyTitle_1vpw3_312",
6223
+ discoverPage: "_discoverPage_1vpw3_317",
6224
+ discoverBar: "_discoverBar_1vpw3_324",
6225
+ discoverTools: "_discoverTools_1vpw3_331",
6226
+ discoverMarket: "_discoverMarket_1vpw3_337",
6227
+ discoverMarketButton: "_discoverMarketButton_1vpw3_342",
6228
+ discoverMarketName: "_discoverMarketName_1vpw3_349",
6229
+ discoverLabels: "_discoverLabels_1vpw3_355",
6230
+ discoverSort: "_discoverSort_1vpw3_360",
6231
+ discoverRefresh: "_discoverRefresh_1vpw3_365",
6232
+ discoverSearch: "_discoverSearch_1vpw3_369",
6233
+ discoverSearchField: "_discoverSearchField_1vpw3_377",
6234
+ discoverSearchFieldFilled: "_discoverSearchFieldFilled_1vpw3_382",
6235
+ discoverSearchClear: "_discoverSearchClear_1vpw3_391",
6236
+ discoverChips: "_discoverChips_1vpw3_442",
6237
+ discoverList: "_discoverList_1vpw3_449",
6238
+ discoverCard: "_discoverCard_1vpw3_458",
6239
+ discoverArtwork: "_discoverArtwork_1vpw3_472",
6240
+ discoverArtworkImage: "_discoverArtworkImage_1vpw3_484",
6241
+ discoverMain: "_discoverMain_1vpw3_488",
6242
+ discoverTitleRow: "_discoverTitleRow_1vpw3_496",
6243
+ discoverCardOpen: "_discoverCardOpen_1vpw3_504",
6244
+ discoverStrong: "_discoverStrong_1vpw3_535",
6245
+ discoverDesc: "_discoverDesc_1vpw3_541",
6246
+ discoverMeta: "_discoverMeta_1vpw3_550",
6247
+ discoverMuted: "_discoverMuted_1vpw3_557",
6248
+ discoverEnd: "_discoverEnd_1vpw3_563",
6249
+ discoverUpdateAction: "_discoverUpdateAction_1vpw3_572",
6250
+ discoverBlocked: "_discoverBlocked_1vpw3_577",
6251
+ discoverEmpty: "_discoverEmpty_1vpw3_582",
6252
+ discoverEmptyTitle: "_discoverEmptyTitle_1vpw3_591",
6253
+ discoverDetail: "_discoverDetail_1vpw3_601",
6254
+ discoverCrumb: "_discoverCrumb_1vpw3_607",
6255
+ discoverCrumbIcon: "_discoverCrumbIcon_1vpw3_630",
6256
+ discoverDetailHead: "_discoverDetailHead_1vpw3_634",
6257
+ discoverDetailTitle: "_discoverDetailTitle_1vpw3_640",
6258
+ discoverDetailText: "_discoverDetailText_1vpw3_646",
6259
+ discoverDetailPanel: "_discoverDetailPanel_1vpw3_653",
6260
+ discoverDetailTabs: "_discoverDetailTabs_1vpw3_660",
6261
+ discoverDetailTabList: "_discoverDetailTabList_1vpw3_665",
6262
+ discoverDocBody: "_discoverDocBody_1vpw3_670",
6263
+ discoverDocNotice: "_discoverDocNotice_1vpw3_675",
6264
+ discoverSection: "_discoverSection_1vpw3_681",
6265
+ discoverSectionTitle: "_discoverSectionTitle_1vpw3_688",
6266
+ discoverFacts: "_discoverFacts_1vpw3_694",
6267
+ discoverFactRow: "_discoverFactRow_1vpw3_699",
6268
+ discoverFactKind: "_discoverFactKind_1vpw3_709",
6269
+ discoverFactValue: "_discoverFactValue_1vpw3_715",
6270
+ discoverCode: "_discoverCode_1vpw3_723",
6271
+ discoverTags: "_discoverTags_1vpw3_732",
6272
+ discoverLink: "_discoverLink_1vpw3_739",
6273
+ discoverVersions: "_discoverVersions_1vpw3_749",
6274
+ discoverVersionRow: "_discoverVersionRow_1vpw3_757",
6275
+ discoverVersionName: "_discoverVersionName_1vpw3_765",
6276
+ discoverError: "_discoverError_1vpw3_770",
6277
+ discoverFailure: "_discoverFailure_1vpw3_779",
6278
+ discoverLoading: "_discoverLoading_1vpw3_785",
6279
+ discoverNotice: "_discoverNotice_1vpw3_794",
6280
+ discoverMore: "_discoverMore_1vpw3_812",
6281
+ discoverTransport: "_discoverTransport_1vpw3_816",
6282
+ discoverTransportHead: "_discoverTransportHead_1vpw3_822",
6283
+ discoverTransportTitle: "_discoverTransportTitle_1vpw3_829",
6284
+ discoverTransportKind: "_discoverTransportKind_1vpw3_834",
6285
+ discoverTransportState: "_discoverTransportState_1vpw3_839",
6286
+ discoverTransportRows: "_discoverTransportRows_1vpw3_847",
6287
+ discoverTransportRow: "_discoverTransportRow_1vpw3_847",
6288
+ discoverTransportRadio: "_discoverTransportRadio_1vpw3_868",
6289
+ discoverTransportCustom: "_discoverTransportCustom_1vpw3_908",
6290
+ discoverTransportInput: "_discoverTransportInput_1vpw3_914",
6291
+ discoverInstallBar: "_discoverInstallBar_1vpw3_919",
6292
+ discoverInstallText: "_discoverInstallText_1vpw3_930",
6293
+ discoverDialog: "_discoverDialog_1vpw3_936",
6294
+ discoverDialogBody: "_discoverDialogBody_1vpw3_940",
6295
+ discoverSourceList: "_discoverSourceList_1vpw3_946",
6296
+ discoverSourceRow: "_discoverSourceRow_1vpw3_954",
6297
+ discoverSourceConfirm: "_discoverSourceConfirm_1vpw3_963",
6298
+ discoverSourcePick: "_discoverSourcePick_1vpw3_969",
6299
+ discoverSourceRadio: "_discoverSourceRadio_1vpw3_978",
6300
+ discoverSourceMain: "_discoverSourceMain_1vpw3_986",
6301
+ discoverSourceHead: "_discoverSourceHead_1vpw3_994",
6302
+ discoverSourceUrl: "_discoverSourceUrl_1vpw3_1002",
6303
+ discoverSourceMore: "_discoverSourceMore_1vpw3_1012",
6304
+ discoverSourceLoading: "_discoverSourceLoading_1vpw3_1016",
6305
+ discoverSourceHint: "_discoverSourceHint_1vpw3_1026",
6306
+ discoverSourceError: "_discoverSourceError_1vpw3_1040",
6307
+ discoverSourceForm: "_discoverSourceForm_1vpw3_1046",
6308
+ discoverGrow: "_discoverGrow_1vpw3_1052",
6309
+ discoverField: "_discoverField_1vpw3_1057",
6310
+ discoverFieldLabel: "_discoverFieldLabel_1vpw3_1063",
6311
+ discoverConfirmHead: "_discoverConfirmHead_1vpw3_1068",
6312
+ discoverSkeletonFill: "_discoverSkeletonFill_1vpw3_1074",
6313
+ "wb-skeleton": "_wb-skeleton_1vpw3_1",
6314
+ discoverSkeletonBar: "_discoverSkeletonBar_1vpw3_1083",
6315
+ discoverSkeletonTitle: "_discoverSkeletonTitle_1vpw3_1090",
6316
+ discoverSkeletonDesc: "_discoverSkeletonDesc_1vpw3_1094"
6063
6317
  };
6064
6318
  //#endregion
6065
6319
  //#region src/app/layouts/market/discover-states.tsx
@@ -6139,6 +6393,167 @@ window.__ModuleLoader__.load({
6139
6393
  function MarketEmpty({ t }) {
6140
6394
  return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
6141
6395
  }
6396
+ var FailureCard_module_default = {
6397
+ block: "_block_mxnbc_1",
6398
+ head: "_head_mxnbc_9",
6399
+ title: "_title_mxnbc_16",
6400
+ fact: "_fact_mxnbc_22",
6401
+ actions: "_actions_mxnbc_30",
6402
+ hint: "_hint_mxnbc_38",
6403
+ output: "_output_mxnbc_44"
6404
+ };
6405
+ //#endregion
6406
+ //#region src/app/layouts/rightbar/FailureCard.tsx
6407
+ var COPIED_MS$1 = 1200;
6408
+ function terminalLabels(t) {
6409
+ return {
6410
+ commandLine: (line) => t("panels.market.failure.term.commandLine", { line }),
6411
+ signal: (signal) => t("panels.market.failure.term.signal", { signal }),
6412
+ exitCode: (exitCode) => t("panels.market.failure.term.exitCode", { exitCode }),
6413
+ noExitCode: t("panels.market.failure.term.noExitCode"),
6414
+ running: t("panels.market.failure.term.running"),
6415
+ failed: t("panels.market.failure.term.failed"),
6416
+ done: t("panels.market.failure.term.done"),
6417
+ copy: t("panels.market.failure.term.copy"),
6418
+ copied: t("panels.market.failure.term.copied"),
6419
+ noOutput: t("panels.market.failure.term.noOutput"),
6420
+ collapseAria: t("panels.market.failure.term.collapse"),
6421
+ collapse: t("panels.market.failure.term.collapse"),
6422
+ expandAria: (hidden) => t("panels.market.failure.term.expandAria", { hidden }),
6423
+ expand: (hidden) => t("panels.market.failure.term.expand", { hidden })
6424
+ };
6425
+ }
6426
+ function FailureCard({ t, model, onRecheck, rechecking }) {
6427
+ const hasOutput = model.command !== "" || model.output !== "";
6428
+ const [copied, setCopied] = (0, react.useState)(false);
6429
+ const [open, setOpen] = (0, react.useState)(false);
6430
+ const onCopy = (0, react.useCallback)(() => {
6431
+ (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(model.fix).then((ok) => {
6432
+ if (!ok) return;
6433
+ setCopied(true);
6434
+ setTimeout(() => setCopied(false), COPIED_MS$1);
6435
+ });
6436
+ }, [model.fix]);
6437
+ return /* @__PURE__ */ (0, react.createElement)("div", { className: FailureCard_module_default.block }, /* @__PURE__ */ (0, react.createElement)("div", { className: FailureCard_module_default.head }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
6438
+ state: "error",
6439
+ size: 8
6440
+ }), /* @__PURE__ */ (0, react.createElement)("span", { className: FailureCard_module_default.title }, model.title)), /* @__PURE__ */ (0, react.createElement)("p", { className: FailureCard_module_default.fact }, model.fact), /* @__PURE__ */ (0, react.createElement)("div", { className: FailureCard_module_default.actions }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6441
+ type: "button",
6442
+ size: "sm",
6443
+ variant: "ghost",
6444
+ onClick: onCopy
6445
+ }, copied ? t("panels.market.failure.copied") : model.fixLabel), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6446
+ type: "button",
6447
+ size: "sm",
6448
+ variant: "ghost",
6449
+ disabled: rechecking,
6450
+ onClick: onRecheck
6451
+ }, t("panels.market.failure.recheck")), hasOutput ? /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6452
+ type: "button",
6453
+ size: "sm",
6454
+ variant: "ghost",
6455
+ onClick: () => setOpen(!open)
6456
+ }, open ? t("panels.market.failure.hideOutput") : t("panels.market.failure.showOutput")) : null), copied ? /* @__PURE__ */ (0, react.createElement)("p", { className: FailureCard_module_default.hint }, model.copiedHint) : null, open && hasOutput ? /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.TerminalBlock, {
6457
+ command: model.command,
6458
+ output: model.output,
6459
+ exitCode: model.exitCode,
6460
+ maxLines: 8,
6461
+ labels: terminalLabels(t),
6462
+ className: FailureCard_module_default.output
6463
+ }) : null);
6464
+ }
6465
+ //#endregion
6466
+ //#region src/app/layouts/rightbar/failure-card-text.ts
6467
+ var TITLE_KEY = {
6468
+ permission: "panels.market.failure.permission",
6469
+ "disk-full": "panels.market.failure.diskFull",
6470
+ sandbox: "panels.market.failure.sandbox",
6471
+ unknown: "panels.market.failure.unknown"
6472
+ };
6473
+ var ASK_AGENT_KEY = "panels.market.failure.askAgent";
6474
+ function updateStuckCardOf(t, input) {
6475
+ const unknown = t("panels.market.updateUnknownVersion");
6476
+ return {
6477
+ title: t("panels.market.updateStuck.title"),
6478
+ fact: input.fact ?? t("panels.market.updateStuck.factNoChange", {
6479
+ from: input.from ?? unknown,
6480
+ latest: input.latest ?? unknown
6481
+ }),
6482
+ fixLabel: t("panels.market.failure.copyFix"),
6483
+ fix: input.command,
6484
+ copiedHint: t("panels.market.updateStuck.copiedHint"),
6485
+ command: "",
6486
+ output: "",
6487
+ exitCode: null
6488
+ };
6489
+ }
6490
+ function shellPath(path) {
6491
+ return /^[\w./@%+-]+$/.test(path) ? path : `'${path.replaceAll("'", "'\\''")}'`;
6492
+ }
6493
+ function ownerLabel(uid) {
6494
+ return uid === 0 ? "root" : `uid ${uid}`;
6495
+ }
6496
+ function failureCardOf(failure, t) {
6497
+ const path = failure.path ?? "";
6498
+ const fix = failure.fix;
6499
+ if (fix.kind === "chown") {
6500
+ const ownerUid = failure.owner?.uid;
6501
+ return {
6502
+ title: t(TITLE_KEY[failure.kind]),
6503
+ fact: ownerUid === void 0 ? t("panels.market.failure.factMode", {
6504
+ path,
6505
+ mode: failure.mode ?? "?"
6506
+ }) : t("panels.market.failure.factOwner", {
6507
+ path,
6508
+ owner: ownerLabel(ownerUid),
6509
+ me: ownerLabel(failure.current.uid)
6510
+ }),
6511
+ fixLabel: t("panels.market.failure.copyFix"),
6512
+ fix: `sudo chown -R ${fix.uid}:${fix.gid} ${shellPath(fix.path)}`,
6513
+ copiedHint: t("panels.market.failure.copiedHint"),
6514
+ command: failure.command,
6515
+ output: failure.output,
6516
+ exitCode: failure.exitCode
6517
+ };
6518
+ }
6519
+ if (fix.kind === "chmod") return {
6520
+ title: t(TITLE_KEY[failure.kind]),
6521
+ fact: t("panels.market.failure.factMode", {
6522
+ path,
6523
+ mode: failure.mode ?? "?"
6524
+ }),
6525
+ fixLabel: t("panels.market.failure.copyFix"),
6526
+ fix: `chmod -R u+w ${shellPath(fix.path)}`,
6527
+ copiedHint: t("panels.market.failure.copiedHint"),
6528
+ command: failure.command,
6529
+ output: failure.output,
6530
+ exitCode: failure.exitCode
6531
+ };
6532
+ if (fix.kind === "space") return {
6533
+ title: t(TITLE_KEY[failure.kind]),
6534
+ fact: t("panels.market.failure.factSpace", { path }),
6535
+ fixLabel: t("panels.market.failure.copyFix"),
6536
+ fix: `du -sh ${shellPath(fix.path)}`,
6537
+ copiedHint: t("panels.market.failure.copiedHint"),
6538
+ command: failure.command,
6539
+ output: failure.output,
6540
+ exitCode: failure.exitCode
6541
+ };
6542
+ return {
6543
+ title: t(TITLE_KEY[failure.kind]),
6544
+ fact: t("panels.market.failure.factStuck", { path: path === "" ? t("panels.market.failure.nowhere") : path }),
6545
+ fixLabel: t(ASK_AGENT_KEY),
6546
+ fix: t("panels.market.failure.askAgentText", {
6547
+ command: failure.command,
6548
+ path: path === "" ? t("panels.market.failure.nowhere") : path,
6549
+ code: failure.exitCode === null ? "?" : String(failure.exitCode)
6550
+ }),
6551
+ copiedHint: t("panels.market.failure.askAgentHint"),
6552
+ command: failure.command,
6553
+ output: failure.output,
6554
+ exitCode: failure.exitCode
6555
+ };
6556
+ }
6142
6557
  //#endregion
6143
6558
  //#region src/app/layouts/rightbar/market-section-icon.ts
6144
6559
  var SIZE$1 = 14;
@@ -6309,9 +6724,21 @@ window.__ModuleLoader__.load({
6309
6724
  ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
6310
6725
  };
6311
6726
  }
6727
+ function askAgentReason(row, t) {
6728
+ if (row.hint !== void 0) return t(row.hint);
6729
+ if (row.note !== void 0) return t(row.note.key, row.note.params);
6730
+ return t(MARKET_STATE_KEY[row.state]);
6731
+ }
6732
+ function askAgentText(row, t) {
6733
+ return t("panels.market.askAgentText", {
6734
+ name: marketRowTitle(row, t),
6735
+ unit: row.id,
6736
+ reason: askAgentReason(row, t)
6737
+ });
6738
+ }
6312
6739
  //#endregion
6313
6740
  //#region src/app/layouts/rightbar/SharedSection.tsx
6314
- function SharedLine({ t, row, pending, failure, onAct }) {
6741
+ function SharedLine({ t, row, pending, failure, onAct, onRecheck, rechecking }) {
6315
6742
  const running = pending !== null && pending.id === row.id ? pending : null;
6316
6743
  const locked = pending !== null;
6317
6744
  const actions = sharedActions(row);
@@ -6334,9 +6761,14 @@ window.__ModuleLoader__.load({
6334
6761
  variant: "outline",
6335
6762
  disabled: locked,
6336
6763
  onClick: () => onAct(action)
6337
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure));
6764
+ }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : failure.failure === void 0 ? /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure.message) : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ (0, react.createElement)(FailureCard, {
6765
+ t,
6766
+ model: failureCardOf(failure.failure, t),
6767
+ onRecheck,
6768
+ rechecking
6769
+ })));
6338
6770
  }
6339
- function SharedSection({ t, rows, pending, failureOf, act }) {
6771
+ function SharedSection({ t, rows, pending, failureOf, act, onRecheck, rechecking }) {
6340
6772
  if (rows.length === 0) return null;
6341
6773
  return /* @__PURE__ */ (0, react.createElement)("section", { className: `${MarketPage_module_default.marketSection} ${MarketPage_module_default.marketSectionQuiet}` }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ (0, react.createElement)("span", {
6342
6774
  className: MarketPage_module_default.marketSectionIcon,
@@ -6347,7 +6779,9 @@ window.__ModuleLoader__.load({
6347
6779
  row,
6348
6780
  pending,
6349
6781
  failure: failureOf(row.id),
6350
- onAct: (action) => void act(row.id, action)
6782
+ onAct: (action) => void act(row.id, action),
6783
+ onRecheck,
6784
+ rechecking
6351
6785
  }))));
6352
6786
  }
6353
6787
  //#endregion
@@ -6370,6 +6804,25 @@ window.__ModuleLoader__.load({
6370
6804
  });
6371
6805
  }
6372
6806
  //#endregion
6807
+ //#region src/app/layouts/rightbar/AskAgentButton.tsx
6808
+ var COPIED_MS = 1200;
6809
+ function AskAgentButton({ t, text, label }) {
6810
+ const [copied, setCopied] = (0, react.useState)(false);
6811
+ const onCopy = (0, react.useCallback)(() => {
6812
+ (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(text).then((ok) => {
6813
+ if (!ok) return;
6814
+ setCopied(true);
6815
+ setTimeout(() => setCopied(false), COPIED_MS);
6816
+ });
6817
+ }, [text]);
6818
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6819
+ type: "button",
6820
+ size: "sm",
6821
+ variant: "ghost",
6822
+ onClick: onCopy
6823
+ }, copied ? t("panels.market.askAgentCopied") : label);
6824
+ }
6825
+ //#endregion
6373
6826
  //#region src/app/layouts/rightbar/market-section.tsx
6374
6827
  var dangerActions = [
6375
6828
  "uninstall",
@@ -6440,13 +6893,25 @@ window.__ModuleLoader__.load({
6440
6893
  "aria-hidden": "true"
6441
6894
  }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, noteText)));
6442
6895
  }
6443
- function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6896
+ function MarketFailureBlock({ t, failure, onRecheck, rechecking }) {
6897
+ if (failure === null) return null;
6898
+ const model = failure.card ?? (failure.failure === void 0 ? void 0 : failureCardOf(failure.failure, t));
6899
+ if (model !== void 0) return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ (0, react.createElement)(FailureCard, {
6900
+ t,
6901
+ model,
6902
+ onRecheck,
6903
+ rechecking
6904
+ }));
6905
+ return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure.message);
6906
+ }
6907
+ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy, onRecheck, rechecking }) {
6444
6908
  const running = pending !== null && pending.id === row.id ? pending : null;
6445
6909
  const locked = pending !== null;
6446
6910
  const [migrationOpen, setMigrationOpen] = (0, react.useState)(false);
6447
6911
  const [dismissOpen, setDismissOpen] = (0, react.useState)(false);
6448
6912
  const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
6449
6913
  const actions = marketActions$1(row);
6914
+ const asksAgent = marketAsksAgent(row);
6450
6915
  const switchLocked = marketSwitchLocked(row);
6451
6916
  return /* @__PURE__ */ (0, react.createElement)("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ (0, react.createElement)("span", {
6452
6917
  className: MarketPage_module_default.marketIcon,
@@ -6458,7 +6923,11 @@ window.__ModuleLoader__.load({
6458
6923
  t,
6459
6924
  row,
6460
6925
  quiet
6461
- })), /* @__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) => {
6926
+ })), /* @__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 && !asksAgent ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketActions }, asksAgent ? /* @__PURE__ */ (0, react.createElement)(AskAgentButton, {
6927
+ t,
6928
+ text: askAgentText(row, t),
6929
+ label: t("panels.market.askAgent")
6930
+ }) : null, actions.map((action) => {
6462
6931
  const danger = dangerActions.includes(action);
6463
6932
  const update = updateActions.includes(action);
6464
6933
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
@@ -6481,7 +6950,12 @@ window.__ModuleLoader__.load({
6481
6950
  disabled: boardBusy === true || locked || switchLocked,
6482
6951
  label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
6483
6952
  onChange: (next) => onDefault?.(next)
6484
- })))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure), /* @__PURE__ */ (0, react.createElement)(MarketLineDialogs, {
6953
+ })))), /* @__PURE__ */ (0, react.createElement)(MarketFailureBlock, {
6954
+ t,
6955
+ failure,
6956
+ onRecheck,
6957
+ rechecking
6958
+ }), /* @__PURE__ */ (0, react.createElement)(MarketLineDialogs, {
6485
6959
  t,
6486
6960
  migrationOpen,
6487
6961
  dismissOpen,
@@ -6497,7 +6971,7 @@ window.__ModuleLoader__.load({
6497
6971
  }
6498
6972
  }));
6499
6973
  }
6500
- function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead }) {
6974
+ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead, onRecheck, rechecking }) {
6501
6975
  if (rows.length === 0 && keepHead !== true) return null;
6502
6976
  return /* @__PURE__ */ (0, react.createElement)("section", { className: MarketPage_module_default.marketSection }, titleKey === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ (0, react.createElement)("span", {
6503
6977
  className: MarketPage_module_default.marketSectionIcon,
@@ -6510,7 +6984,9 @@ window.__ModuleLoader__.load({
6510
6984
  failure: failureOf(row.id),
6511
6985
  onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
6512
6986
  onDefault: (next) => onDefault?.(row.id, next),
6513
- boardBusy
6987
+ boardBusy,
6988
+ onRecheck,
6989
+ rechecking
6514
6990
  }))));
6515
6991
  }
6516
6992
  //#endregion
@@ -6686,9 +7162,10 @@ window.__ModuleLoader__.load({
6686
7162
  "incompatible-version": "panels.market.add.failureGeneric",
6687
7163
  "not-bundle": "panels.market.add.failureGeneric",
6688
7164
  "invalid-spec": "panels.market.add.failureGeneric",
6689
- "bundle-in-use": "panels.market.add.failureGeneric",
7165
+ "bundle-in-use": "panels.market.add.failureStopProfile",
6690
7166
  "not-removable": "panels.market.add.failureGeneric",
6691
- "stop-profile": "panels.market.add.failureGeneric",
7167
+ "stop-profile": "panels.market.add.failureStopProfile",
7168
+ cancelled: "panels.market.add.failureCancelled",
6692
7169
  "stale-approval": "panels.market.add.failureGeneric"
6693
7170
  };
6694
7171
  function needsCredentials(change) {
@@ -6743,6 +7220,14 @@ window.__ModuleLoader__.load({
6743
7220
  if (change === void 0 || SHIPPED$1.includes(change.application)) return void 0;
6744
7221
  return failureReason(failureCode(change), change.application, t);
6745
7222
  }
7223
+ function appliedUnitsOf(value) {
7224
+ if (changeOf(value)?.application !== "applied") return [];
7225
+ const module = value?.module;
7226
+ if (typeof module !== "object" || module === null) return [];
7227
+ const record = module;
7228
+ if (record.kind !== "module") return [];
7229
+ return typeof record.unit === "string" && record.unit !== "" ? [record.unit] : [];
7230
+ }
6746
7231
  //#endregion
6747
7232
  //#region src/app/layouts/rightbar/market-update-verdict.ts
6748
7233
  function updateVerdictOf(input) {
@@ -6752,6 +7237,7 @@ window.__ModuleLoader__.load({
6752
7237
  ...input.restored === void 0 ? {} : { restored: input.restored }
6753
7238
  };
6754
7239
  const installed = input.module?.version;
7240
+ if ((input.change?.application === "failed" || input.change?.application === "cancelled") && input.change?.errorCode !== "no-change") return { kind: "failed" };
6755
7241
  if (input.change?.errorCode === "no-change") return { kind: "no-change" };
6756
7242
  if (installed === void 0) return { kind: "ok" };
6757
7243
  if (input.clicked !== void 0 && installed === input.clicked) return { kind: "no-change" };
@@ -6798,6 +7284,10 @@ window.__ModuleLoader__.load({
6798
7284
  const restored = recordOf(value)?.restored;
6799
7285
  return typeof restored === "string" && restored !== "" ? restored : void 0;
6800
7286
  }
7287
+ function remedyOf(value) {
7288
+ const command = recordOf(recordOf(value)?.remedy)?.command;
7289
+ return typeof command === "string" && command !== "" ? { command } : void 0;
7290
+ }
6801
7291
  function marketActOf(options) {
6802
7292
  const { t, mocked, rowOf, seats, send, onChanged } = options;
6803
7293
  return async (id, action) => {
@@ -6857,7 +7347,8 @@ window.__ModuleLoader__.load({
6857
7347
  seats.setHeld(void 0);
6858
7348
  seats.setFailed({
6859
7349
  id,
6860
- message: t("panels.market.failed", { reason: outcome.message })
7350
+ message: t("panels.market.failed", { reason: outcome.message }),
7351
+ ...outcome.failure === void 0 ? {} : { failure: outcome.failure }
6861
7352
  });
6862
7353
  return;
6863
7354
  }
@@ -6878,24 +7369,33 @@ window.__ModuleLoader__.load({
6878
7369
  return;
6879
7370
  }
6880
7371
  const change = changeOf(value);
6881
- const failure = updateVerdictText(updateVerdictOf({
7372
+ const remedy = remedyOf(value);
7373
+ const verdict = updateVerdictOf({
6882
7374
  action,
6883
7375
  change,
6884
7376
  module: moduleOf(value),
6885
7377
  restored: restoredOf(value),
6886
7378
  clicked: next.version,
6887
7379
  latest: next.latest
6888
- }), t, {
7380
+ });
7381
+ const failure = updateVerdictText(verdict, t, {
6889
7382
  ...next.version === void 0 ? {} : { from: next.version },
6890
7383
  ...next.latest === void 0 ? {} : { latest: next.latest }
6891
7384
  });
7385
+ const cardOf = (fact) => remedy === void 0 || verdict.kind !== "no-change" && verdict.kind !== "failed" ? {} : { card: updateStuckCardOf(t, {
7386
+ command: remedy.command,
7387
+ ...fact === void 0 ? {} : { fact },
7388
+ ...next.version === void 0 ? {} : { from: next.version },
7389
+ ...next.latest === void 0 ? {} : { latest: next.latest }
7390
+ }) };
6892
7391
  onChanged({ force: true });
6893
7392
  if (failure !== void 0) {
6894
7393
  seats.setPending(null);
6895
7394
  seats.setHeld(void 0);
6896
7395
  seats.setFailed({
6897
7396
  id,
6898
- message: failure
7397
+ message: failure,
7398
+ ...cardOf()
6899
7399
  });
6900
7400
  return;
6901
7401
  }
@@ -6910,7 +7410,8 @@ window.__ModuleLoader__.load({
6910
7410
  const reason = changeFailure(change, t);
6911
7411
  if (reason !== void 0) seats.setFailed({
6912
7412
  id,
6913
- message: t("panels.market.failed", { reason })
7413
+ message: t("panels.market.failed", { reason }),
7414
+ ...cardOf(reason)
6914
7415
  });
6915
7416
  };
6916
7417
  }
@@ -6988,43 +7489,59 @@ window.__ModuleLoader__.load({
6988
7489
  };
6989
7490
  //#endregion
6990
7491
  //#region src/app/layouts/market/market-check.tsx
6991
- function MarketCheck({ t, checkedAt, checking, failed, disabled, onCheck }) {
6992
- const status = checking ? t("panels.market.checkingNow") : failed ? t("panels.market.checkFailed") : checkedAt === null ? null : t("panels.market.checkedAt", { time: checkedAgo(checkedAt, t) });
6993
- return /* @__PURE__ */ (0, react.createElement)("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ (0, react.createElement)("span", {
6994
- className: market_check_module_default.status,
6995
- "aria-live": "polite"
6996
- }, status), /* @__PURE__ */ (0, react.createElement)(Tip, { label: t("panels.market.checkUpdates") }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7492
+ function MarketRefreshButton({ label, checking, disabled, onCheck }) {
7493
+ return /* @__PURE__ */ (0, react.createElement)(Tip, { label }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6997
7494
  type: "button",
6998
7495
  variant: "ghost",
6999
7496
  size: "sm",
7000
7497
  className: market_check_module_default.button,
7001
- "aria-label": t("panels.market.checkUpdates"),
7498
+ "aria-label": label,
7002
7499
  disabled: disabled || checking,
7003
7500
  icon: /* @__PURE__ */ (0, react.createElement)("span", {
7004
7501
  className: `${market_check_module_default.icon}${checking ? " wb-spinning" : ""}`,
7005
7502
  "aria-hidden": "true"
7006
7503
  }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 })),
7007
7504
  onClick: onCheck
7008
- })));
7505
+ }));
7506
+ }
7507
+ function MarketCheck({ t, checkedAt, latestCheck = {
7508
+ checked: 0,
7509
+ unknown: 0
7510
+ }, checking, failed, disabled, onCheck }) {
7511
+ const parts = [];
7512
+ if (checking) parts.push(t("panels.market.checkingNow"));
7513
+ else {
7514
+ if (latestCheck.checked > 0 && checkedAt !== null) parts.push(t("panels.market.checkedAt", { time: checkedAgo(checkedAt, t) }));
7515
+ if (failed) parts.push(t("panels.market.checkFailed"));
7516
+ else if (latestCheck.unknown > 0) parts.push(t("panels.market.latestPartial", { n: String(latestCheck.unknown) }));
7517
+ }
7518
+ const status = parts.length === 0 ? null : parts.join(" · ");
7519
+ return /* @__PURE__ */ (0, react.createElement)("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ (0, react.createElement)("span", {
7520
+ className: market_check_module_default.status,
7521
+ "aria-live": "polite"
7522
+ }, status), /* @__PURE__ */ (0, react.createElement)(MarketRefreshButton, {
7523
+ label: t("panels.market.checkUpdates"),
7524
+ checking,
7525
+ disabled,
7526
+ onCheck
7527
+ }));
7009
7528
  }
7010
- var PanelFoot_module_default = {
7011
- foot: "_foot_1ud1j_1",
7012
- footText: "_footText_1ud1j_13",
7013
- footTextMd: "_footTextMd_1ud1j_18"
7014
- };
7015
7529
  //#endregion
7016
- //#region src/shared/components/PanelFoot.tsx
7017
- function PanelFoot({ text, size = "sm", children }) {
7018
- return /* @__PURE__ */ (0, react.createElement)("footer", { className: PanelFoot_module_default.foot }, text === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: size === "md" ? PanelFoot_module_default.footTextMd : PanelFoot_module_default.footText }, text), children ?? null);
7530
+ //#region src/app/layouts/market/section-check.tsx
7531
+ function SectionCheck({ t, part, seat, latest, disabled, onCheck }) {
7532
+ const { busy } = useVisibleBusy(seat.checking, 500);
7533
+ return /* @__PURE__ */ (0, react.createElement)(MarketCheck, {
7534
+ t,
7535
+ checkedAt: seat.checkedAt,
7536
+ latestCheck: latest,
7537
+ checking: busy,
7538
+ failed: seat.failed,
7539
+ disabled,
7540
+ onCheck: () => onCheck?.(part)
7541
+ });
7019
7542
  }
7020
7543
  //#endregion
7021
- //#region src/app/layouts/rightbar/MarketView.tsx
7022
- var CONFIRM_UNINSTALL = [
7023
- "uninstall",
7024
- "remove-bundle",
7025
- "uninstall-plugin"
7026
- ];
7027
- var NO_ROWS = [];
7544
+ //#region src/app/layouts/rightbar/market-uninstall.tsx
7028
7545
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
7029
7546
  const [acknowledged, setAcknowledged] = (0, react.useState)(false);
7030
7547
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -7041,8 +7558,47 @@ window.__ModuleLoader__.load({
7041
7558
  onConfirm
7042
7559
  });
7043
7560
  }
7044
- function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy, check }) {
7045
- const failureOf = (id) => failed?.id === id ? failed.message : null;
7561
+ function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
7562
+ return /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
7563
+ key: confirming ?? "",
7564
+ t,
7565
+ name: row === void 0 ? null : marketRowTitle(row, t),
7566
+ onCancel: onClose,
7567
+ onConfirm: () => {
7568
+ const id = confirming;
7569
+ onClose();
7570
+ if (id === null) return;
7571
+ const target = rowById.get(id);
7572
+ act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
7573
+ }
7574
+ });
7575
+ }
7576
+ var PanelFoot_module_default = {
7577
+ foot: "_foot_1ud1j_1",
7578
+ footText: "_footText_1ud1j_13",
7579
+ footTextMd: "_footTextMd_1ud1j_18"
7580
+ };
7581
+ //#endregion
7582
+ //#region src/shared/components/PanelFoot.tsx
7583
+ function PanelFoot({ text, size = "sm", children }) {
7584
+ return /* @__PURE__ */ (0, react.createElement)("footer", { className: PanelFoot_module_default.foot }, text === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: size === "md" ? PanelFoot_module_default.footTextMd : PanelFoot_module_default.footText }, text), children ?? null);
7585
+ }
7586
+ //#endregion
7587
+ //#region src/app/layouts/rightbar/MarketView.tsx
7588
+ var CONFIRM_UNINSTALL = [
7589
+ "uninstall",
7590
+ "remove-bundle",
7591
+ "uninstall-plugin"
7592
+ ];
7593
+ var NO_CHECK = {
7594
+ checking: false,
7595
+ failed: false,
7596
+ checkedAt: null
7597
+ };
7598
+ var NO_ROWS = [];
7599
+ var NO_UNITS$1 = /* @__PURE__ */ new Set();
7600
+ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy, checks, onRecheck, rechecking }) {
7601
+ const failureOf = (id) => failed?.id === id ? failed : null;
7046
7602
  const foot = marketFootVisible(shown, installedList);
7047
7603
  const sections = marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t)));
7048
7604
  const installed = sections.find((section) => section.id === "installed");
@@ -7056,7 +7612,9 @@ window.__ModuleLoader__.load({
7056
7612
  failureOf,
7057
7613
  act,
7058
7614
  confirmActions: CONFIRM_UNINSTALL,
7059
- onConfirming
7615
+ onConfirming,
7616
+ onRecheck,
7617
+ rechecking
7060
7618
  }), self === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", {
7061
7619
  className: MarketPage_module_default.marketSelfDivider,
7062
7620
  "aria-hidden": "true"
@@ -7066,14 +7624,16 @@ window.__ModuleLoader__.load({
7066
7624
  icon: marketSectionIcon("installed"),
7067
7625
  rows: installed?.rows ?? NO_ROWS,
7068
7626
  keepHead: true,
7069
- headAction: check,
7627
+ headAction: checks.modules,
7070
7628
  onDefault: setDefault,
7071
7629
  boardBusy,
7072
7630
  pending,
7073
7631
  failureOf,
7074
7632
  act,
7075
7633
  confirmActions: CONFIRM_UNINSTALL,
7076
- onConfirming
7634
+ onConfirming,
7635
+ onRecheck,
7636
+ rechecking
7077
7637
  }), pendingSection === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(MarketSection, {
7078
7638
  t,
7079
7639
  titleKey: pendingSection.titleKey,
@@ -7085,20 +7645,24 @@ window.__ModuleLoader__.load({
7085
7645
  failureOf,
7086
7646
  act,
7087
7647
  confirmActions: CONFIRM_UNINSTALL,
7088
- onConfirming
7648
+ onConfirming,
7649
+ onRecheck,
7650
+ rechecking
7089
7651
  }), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
7090
7652
  t,
7091
7653
  titleKey: "panels.market.sectionPlugins",
7092
7654
  icon: marketSectionIcon("plugins"),
7093
7655
  rows: pluginList,
7094
- headAction: check,
7656
+ headAction: checks.plugins,
7095
7657
  onDefault: setDefault,
7096
7658
  boardBusy,
7097
7659
  pending,
7098
7660
  failureOf,
7099
7661
  act,
7100
7662
  confirmActions: CONFIRM_UNINSTALL,
7101
- onConfirming
7663
+ onConfirming,
7664
+ onRecheck,
7665
+ rechecking
7102
7666
  }), foot ? /* @__PURE__ */ (0, react.createElement)(PanelFoot, {
7103
7667
  size: "md",
7104
7668
  text: t("panels.market.foot")
@@ -7107,11 +7671,13 @@ window.__ModuleLoader__.load({
7107
7671
  rows: shared,
7108
7672
  pending,
7109
7673
  failureOf,
7110
- act
7674
+ act,
7675
+ onRecheck,
7676
+ rechecking
7111
7677
  }));
7112
7678
  }
7113
7679
  function useMarketScene(input) {
7114
- const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
7680
+ const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, installing, mock, defaults, changed, pending, failed } = input;
7115
7681
  const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
7116
7682
  const catalog = mock?.manifests ?? manifests;
7117
7683
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
@@ -7119,7 +7685,10 @@ window.__ModuleLoader__.load({
7119
7685
  const source = liveManifests(marketable, effective, installedIdSet(mock === void 0 ? installed : void 0));
7120
7686
  const byDefault = new Set(defaults);
7121
7687
  const updateMap = mock?.updates ?? updates ?? {};
7122
- const rows = marketRows(source, effective, updateMap, byDefault, changed);
7688
+ const rows = checkingRows(marketRows(source, effective, updateMap, byDefault, changed), {
7689
+ all: installing,
7690
+ units: settling ?? NO_UNITS$1
7691
+ });
7123
7692
  const shared = sharedRows(source, effective);
7124
7693
  const removing = removingIdOf(pending, failed);
7125
7694
  const steady = useHeldRow(pending, (id) => catalog.some((manifest) => manifest.id === id));
@@ -7140,7 +7709,27 @@ window.__ModuleLoader__.load({
7140
7709
  busyId
7141
7710
  };
7142
7711
  }
7143
- function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, updatesCheckedAt = null, updatesFailed = false, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
7712
+ function sectionChecksOf(input) {
7713
+ return {
7714
+ modules: /* @__PURE__ */ (0, react.createElement)(SectionCheck, {
7715
+ t: input.t,
7716
+ part: "modules",
7717
+ seat: input.modules ?? NO_CHECK,
7718
+ latest: input.latestModules,
7719
+ disabled: input.disabled,
7720
+ onCheck: input.onCheck
7721
+ }),
7722
+ plugins: /* @__PURE__ */ (0, react.createElement)(SectionCheck, {
7723
+ t: input.t,
7724
+ part: "plugins",
7725
+ seat: input.plugins ?? NO_CHECK,
7726
+ latest: input.latestPlugins,
7727
+ disabled: input.disabled,
7728
+ onCheck: input.onCheck
7729
+ })
7730
+ };
7731
+ }
7732
+ function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, modulesCheck, pluginsCheck, onCheck, installed, installedRead, workbench, selfUpdate, plugins, settling, installing = false, mock, defaults = [], changed = {} }) {
7144
7733
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
7145
7734
  mock,
7146
7735
  onPending
@@ -7154,6 +7743,7 @@ window.__ModuleLoader__.load({
7154
7743
  updates,
7155
7744
  installed,
7156
7745
  settling,
7746
+ installing,
7157
7747
  mock,
7158
7748
  defaults,
7159
7749
  changed,
@@ -7220,13 +7810,21 @@ window.__ModuleLoader__.load({
7220
7810
  const settled = marketSettled(freshness, installedRead);
7221
7811
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
7222
7812
  const { busy: checkingShown } = useVisibleBusy(freshness.checking, 500);
7223
- const check = /* @__PURE__ */ (0, react.createElement)(MarketCheck, {
7813
+ const recheck = () => {
7814
+ setFailed(null);
7815
+ if (mock === void 0) onChanged({ force: true });
7816
+ };
7817
+ const checks = sectionChecksOf({
7224
7818
  t,
7225
- checkedAt: updatesCheckedAt,
7226
- checking: checkingShown,
7227
- failed: updatesFailed,
7819
+ modules: modulesCheck,
7820
+ plugins: pluginsCheck,
7821
+ latestModules: latestCheckSummary(mock?.installed ?? installed),
7822
+ latestPlugins: {
7823
+ checked: checkedPluginCount(mock?.plugins ?? plugins),
7824
+ unknown: 0
7825
+ },
7228
7826
  disabled: pending !== null,
7229
- onCheck: () => onChanged({ force: true })
7827
+ onCheck: mock === void 0 ? onCheck : void 0
7230
7828
  });
7231
7829
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ (0, react.createElement)(MarketChecking, { t });
7232
7830
  if (nothing) return /* @__PURE__ */ (0, react.createElement)(MarketEmpty, { t });
@@ -7244,7 +7842,9 @@ window.__ModuleLoader__.load({
7244
7842
  onConfirming: setConfirming,
7245
7843
  setDefault,
7246
7844
  boardBusy,
7247
- check
7845
+ checks,
7846
+ onRecheck: recheck,
7847
+ rechecking: checkingShown
7248
7848
  }), /* @__PURE__ */ (0, react.createElement)(UninstallConfirm, {
7249
7849
  t,
7250
7850
  confirming,
@@ -7254,21 +7854,6 @@ window.__ModuleLoader__.load({
7254
7854
  rowById
7255
7855
  }));
7256
7856
  }
7257
- function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
7258
- return /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
7259
- key: confirming ?? "",
7260
- t,
7261
- name: row === void 0 ? null : marketRowTitle(row, t),
7262
- onCancel: onClose,
7263
- onConfirm: () => {
7264
- const id = confirming;
7265
- onClose();
7266
- if (id === null) return;
7267
- const target = rowById.get(id);
7268
- act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
7269
- }
7270
- });
7271
- }
7272
7857
  //#endregion
7273
7858
  //#region ../../node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/plugin/localizedFormat.js
7274
7859
  var require_localizedFormat = /* @__PURE__ */ __commonJSMin(((exports, module) => {
@@ -8577,6 +9162,8 @@ window.__ModuleLoader__.load({
8577
9162
  const [addingSource, setAddingSource] = (0, react.useState)(false);
8578
9163
  const [pendingSourceId, setPendingSourceId] = (0, react.useState)(null);
8579
9164
  const [knownSources, setKnownSources] = (0, react.useState)(null);
9165
+ const [installToken] = (0, react.useState)(() => `market-install:${globalThis.crypto.randomUUID()}`);
9166
+ usePublishMarketInstalling(installToken, installing !== null);
8580
9167
  const loaded = (0, react.useRef)(false);
8581
9168
  const loadTicket = (0, react.useRef)(0);
8582
9169
  const sourceTicket = (0, react.useRef)(0);
@@ -8686,7 +9273,7 @@ window.__ModuleLoader__.load({
8686
9273
  if (selectedSource === void 0 || selectedSource.kind !== "git") return null;
8687
9274
  if (kind !== "git-empty" && kind !== "git-missing-index") return null;
8688
9275
  return {
8689
- path: selectedSource.path ?? "market.json",
9276
+ path: selectedSource.path ?? "market",
8690
9277
  empty: kind === "git-empty"
8691
9278
  };
8692
9279
  }, [payload, selectedSource]);
@@ -8829,6 +9416,7 @@ window.__ModuleLoader__.load({
8829
9416
  ...target.registry === void 0 ? {} : { registry: target.registry }
8830
9417
  }).then((outcome) => {
8831
9418
  if (!outcome.ok) return;
9419
+ publishMarketApplied(appliedUnitsOf(outcome.value));
8832
9420
  const verdict = installVerdictOf(outcome.value, t);
8833
9421
  if (verdict.kind === "failed") {
8834
9422
  provision.fail(verdict.text);
@@ -9040,7 +9628,7 @@ window.__ModuleLoader__.load({
9040
9628
  }
9041
9629
  //#endregion
9042
9630
  //#region src/app/layouts/market/market-header.tsx
9043
- function MarketHeader({ t, idPrefix, tab, busy, onTab, onAdd }) {
9631
+ function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd }) {
9044
9632
  const tabItems = (0, react.useMemo)(() => [{
9045
9633
  value: "installed",
9046
9634
  label: t("panels.market.tabInstalled"),
@@ -9052,14 +9640,19 @@ window.__ModuleLoader__.load({
9052
9640
  id: `${idPrefix}-tab-discover`,
9053
9641
  panelId: `${idPrefix}-panel-discover`
9054
9642
  }], [idPrefix, t]);
9055
- return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ (0, react.createElement)("div", null, /* @__PURE__ */ (0, react.createElement)("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
9643
+ return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ (0, react.createElement)("div", null, /* @__PURE__ */ (0, react.createElement)("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)(MarketRefreshButton, {
9644
+ label: t("panels.market.checkAll"),
9645
+ checking,
9646
+ disabled: busy,
9647
+ onCheck: onReload
9648
+ }), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
9056
9649
  variant: "primary",
9057
9650
  size: "sm",
9058
9651
  className: MarketPage_module_default.marketAddButton,
9059
9652
  icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
9060
9653
  disabled: busy,
9061
9654
  onClick: onAdd
9062
- }, t("panels.market.add.open")))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketTabs }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.SegmentedTabs, {
9655
+ }, t("panels.market.add.open"))))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketTabs }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.SegmentedTabs, {
9063
9656
  className: MarketPage_module_default.marketTabList,
9064
9657
  items: tabItems,
9065
9658
  value: tab,
@@ -9476,21 +10069,35 @@ window.__ModuleLoader__.load({
9476
10069
  function readInstalledPlugins(force = false) {
9477
10070
  return apiGet(INSTALLED_PLUGINS_ROUTE, force ? { force: "1" } : void 0);
9478
10071
  }
10072
+ //#endregion
10073
+ //#region src/app/layouts/market/use-module-versions.ts
10074
+ var IDLE$1 = {
10075
+ checking: false,
10076
+ failed: false,
10077
+ checkedAt: null
10078
+ };
9479
10079
  var state = {
9480
10080
  modules: null,
9481
10081
  plugins: null,
9482
10082
  workbench: null,
9483
10083
  selfUpdate: null,
9484
10084
  read: false,
9485
- checking: false,
9486
- failed: false,
9487
- checkedAt: null
10085
+ allChecking: false,
10086
+ modulesCheck: IDLE$1,
10087
+ pluginsCheck: IDLE$1
9488
10088
  };
9489
10089
  var listeners$2 = /* @__PURE__ */ new Set();
9490
- var inFlight = null;
9491
- var readSeq = 0;
9492
- var newestForceSeq = -1;
10090
+ var inFlight = /* @__PURE__ */ new Map();
10091
+ var seq$1 = {
10092
+ modules: 0,
10093
+ plugins: 0
10094
+ };
10095
+ var newestForceSeq = {
10096
+ modules: -1,
10097
+ plugins: -1
10098
+ };
9493
10099
  var epoch = 0;
10100
+ var allSeq = 0;
9494
10101
  function bumpModuleVersionsEpoch() {
9495
10102
  epoch += 1;
9496
10103
  }
@@ -9515,48 +10122,87 @@ window.__ModuleLoader__.load({
9515
10122
  };
9516
10123
  });
9517
10124
  }
10125
+ function moduleVersionsCheckedAt(now) {
10126
+ const at = [now.modulesCheck.checkedAt, now.pluginsCheck.checkedAt].filter((one) => one !== null);
10127
+ return at.length === 0 ? null : Math.max(...at);
10128
+ }
10129
+ function moduleVersionsChecking(value) {
10130
+ return value.allChecking || value.modulesCheck.checking || value.pluginsCheck.checking;
10131
+ }
9518
10132
  function publish$1(next) {
9519
10133
  state = next;
9520
10134
  for (const listener of [...listeners$2]) listener();
9521
10135
  }
9522
- function runModuleVersionsRead(force = false, fresh = false) {
9523
- const at = epoch;
9524
- if (!fresh && inFlight !== null && inFlight.force === force && inFlight.epoch === at) return inFlight.promise;
9525
- const seq = readSeq += 1;
9526
- if (force) newestForceSeq = seq;
9527
- if (!state.checking) publish$1({
9528
- ...state,
10136
+ function partsOf(scope) {
10137
+ return scope === "all" ? ["modules", "plugins"] : [scope];
10138
+ }
10139
+ function checking(scope) {
10140
+ const mark = (seat) => seat.checking ? seat : {
10141
+ ...seat,
9529
10142
  checking: true
9530
- });
9531
- const promise = Promise.all([
9532
- readModuleVersions(force),
9533
- readInstalledPlugins(force),
9534
- readMarketInstalled()
9535
- ]).catch(() => null).then((responses) => {
10143
+ };
10144
+ return {
10145
+ ...state,
10146
+ allChecking: scope === "all" || state.allChecking,
10147
+ modulesCheck: scope === "plugins" ? state.modulesCheck : mark(state.modulesCheck),
10148
+ pluginsCheck: scope === "modules" ? state.pluginsCheck : mark(state.pluginsCheck)
10149
+ };
10150
+ }
10151
+ function landed(seat, ticket, latest, ok, at) {
10152
+ return {
10153
+ checking: ticket === latest ? false : seat.checking,
10154
+ failed: !ok,
10155
+ checkedAt: ok ? at : seat.checkedAt
10156
+ };
10157
+ }
10158
+ function readModulesOnce(force) {
10159
+ return Promise.all([readModuleVersions(force), readMarketInstalled()]).catch(() => null);
10160
+ }
10161
+ function readPluginsOnce(force) {
10162
+ return readInstalledPlugins(force).catch(() => null);
10163
+ }
10164
+ function runModuleVersionsRead(force = false, fresh = false, scope = "all") {
10165
+ const at = epoch;
10166
+ const running = inFlight.get(scope);
10167
+ if (!fresh && running !== void 0 && running.force === force && running.epoch === at) return running.promise;
10168
+ const allTicket = scope === "all" ? allSeq += 1 : allSeq;
10169
+ const tickets = /* @__PURE__ */ new Map();
10170
+ for (const part of partsOf(scope)) {
10171
+ const ticket = seq$1[part] += 1;
10172
+ tickets.set(part, ticket);
10173
+ if (force) newestForceSeq[part] = ticket;
10174
+ }
10175
+ publish$1(checking(scope));
10176
+ const modulesRead = tickets.has("modules") ? readModulesOnce(force) : null;
10177
+ const pluginsRead = tickets.has("plugins") ? readPluginsOnce(force) : null;
10178
+ const promise = Promise.all([modulesRead, pluginsRead]).then(([modules, plugins]) => {
9536
10179
  if (at !== epoch) return;
9537
- if (!force && seq < newestForceSeq) return;
9538
- const versions = responses?.[0];
9539
- const plugins = responses?.[1];
9540
- const market = responses?.[2];
9541
- const read = versions?.ok === true;
10180
+ const now = Date.now();
10181
+ const modulesTicket = tickets.get("modules");
10182
+ const pluginsTicket = tickets.get("plugins");
10183
+ const modulesLanded = modulesTicket !== void 0 && (force || modulesTicket >= newestForceSeq.modules);
10184
+ const pluginsLanded = pluginsTicket !== void 0 && (force || pluginsTicket >= newestForceSeq.plugins);
10185
+ const modulesOk = modulesLanded && modules !== null && modules[0].ok === true;
10186
+ const pluginsOk = pluginsLanded && plugins !== null && plugins.ok === true;
9542
10187
  publish$1({
9543
- modules: read ? withMarketUpdates(versions.modules, market?.ok === true ? market.modules : []) : state.modules,
9544
- plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
9545
- workbench: read ? versions.workbench ?? null : state.workbench,
9546
- selfUpdate: read ? versions.selfUpdate ?? null : state.selfUpdate,
10188
+ ...state,
10189
+ modules: modulesOk ? withMarketUpdates(modules[0].modules, modules[1].ok === true ? modules[1].modules : []) : state.modules,
10190
+ workbench: modulesOk ? modules[0].workbench ?? null : state.workbench,
10191
+ selfUpdate: modulesOk ? modules[0].selfUpdate ?? null : state.selfUpdate,
10192
+ plugins: pluginsOk ? plugins.plugins : state.plugins,
9547
10193
  read: true,
9548
- checking: false,
9549
- failed: !read,
9550
- checkedAt: read ? Date.now() : state.checkedAt
10194
+ allChecking: scope === "all" && allTicket === allSeq ? false : state.allChecking,
10195
+ modulesCheck: modulesLanded && modulesTicket !== void 0 ? landed(state.modulesCheck, modulesTicket, seq$1.modules, modulesOk, now) : state.modulesCheck,
10196
+ pluginsCheck: pluginsLanded && pluginsTicket !== void 0 ? landed(state.pluginsCheck, pluginsTicket, seq$1.plugins, pluginsOk, now) : state.pluginsCheck
9551
10197
  });
9552
10198
  }).finally(() => {
9553
- if (inFlight?.promise === promise) inFlight = null;
10199
+ if (inFlight.get(scope)?.promise === promise) inFlight.delete(scope);
9554
10200
  });
9555
- inFlight = {
10201
+ inFlight.set(scope, {
9556
10202
  force,
9557
10203
  epoch: at,
9558
10204
  promise
9559
- };
10205
+ });
9560
10206
  return promise;
9561
10207
  }
9562
10208
  function useModuleVersions() {
@@ -9567,27 +10213,70 @@ window.__ModuleLoader__.load({
9567
10213
  const first = !mountedRef.current;
9568
10214
  mountedRef.current = true;
9569
10215
  if (first && !shouldProbeOnEnter({
9570
- checkedAt: state.checkedAt,
10216
+ checkedAt: moduleVersionsCheckedAt(state),
9571
10217
  now: Date.now(),
9572
10218
  staleMs: MARKET_STALE_MS
9573
10219
  })) return;
9574
10220
  runModuleVersionsRead(false);
9575
10221
  }, [factRev]);
9576
10222
  const reload = (0, react.useCallback)((options) => {
9577
- runModuleVersionsRead(options?.force === true, options?.fresh === true);
10223
+ runModuleVersionsRead(options?.force === true, options?.fresh === true, options?.scope ?? "all");
9578
10224
  }, []);
9579
10225
  return {
9580
- modules: value.modules,
9581
- plugins: value.plugins,
9582
- workbench: value.workbench,
9583
- selfUpdate: value.selfUpdate,
9584
- read: value.read,
9585
- checking: value.checking,
9586
- failed: value.failed,
9587
- checkedAt: value.checkedAt,
10226
+ ...value,
10227
+ checking: moduleVersionsChecking(value),
9588
10228
  reload
9589
10229
  };
9590
10230
  }
10231
+ //#endregion
10232
+ //#region src/app/layouts/market/use-market-reload.ts
10233
+ function useMarketReload(input) {
10234
+ const { checkedAt, forceProbe, reloadCapability, reloadVersions } = input;
10235
+ const reload = (0, react.useCallback)((options) => {
10236
+ if (options?.force === true) {
10237
+ bumpModuleVersionsEpoch();
10238
+ bumpCapabilityEpoch();
10239
+ forceProbe();
10240
+ reloadVersions({
10241
+ force: true,
10242
+ fresh: true
10243
+ });
10244
+ return;
10245
+ }
10246
+ reloadCapability();
10247
+ reloadVersions();
10248
+ }, [
10249
+ reloadCapability,
10250
+ reloadVersions,
10251
+ forceProbe
10252
+ ]);
10253
+ const checkPart = (0, react.useCallback)((part) => reloadVersions({
10254
+ force: true,
10255
+ fresh: true,
10256
+ scope: part
10257
+ }), [reloadVersions]);
10258
+ const enteredRef = (0, react.useRef)(false);
10259
+ (0, react.useEffect)(() => {
10260
+ if (enteredRef.current) return;
10261
+ enteredRef.current = true;
10262
+ reloadVersions();
10263
+ if (!shouldProbeOnEnter({
10264
+ checkedAt,
10265
+ now: Date.now(),
10266
+ staleMs: MARKET_STALE_MS
10267
+ })) return;
10268
+ markNextProbeSilent();
10269
+ forceProbe();
10270
+ }, [
10271
+ checkedAt,
10272
+ forceProbe,
10273
+ reloadVersions
10274
+ ]);
10275
+ return {
10276
+ reload,
10277
+ checkPart
10278
+ };
10279
+ }
9591
10280
  var AddModule_module_default = {
9592
10281
  wide: "_wide_1lv8f_1",
9593
10282
  dialog: "_dialog_1lv8f_8",
@@ -9839,18 +10528,79 @@ window.__ModuleLoader__.load({
9839
10528
  }, t("panels.market.add.failed", { reason })) : kind === "restart" ? /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.resultWarn }, t("panels.market.add.doneRestart")), why === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.resultMeta }, why)) : kind === "quiet" ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.result }, t("panels.market.add.tookEffect")), builds.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: AddModule_module_default.approval }, /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.approvalTitle }, t("panels.market.add.approveTitle")), /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.approvalText }, t("panels.market.add.approveHint", { packages: builds.join("、") })), /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.approvalCaution }, t("panels.market.add.approveCaution"))), supply === void 0 || outcome.supply.state !== "failed" && (kind === "failed" || kind === "cancelled") ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: supplyTone(outcome.supply.state) }, t(supply, { reason: outcome.supply.reason ?? "" })), state.failure === null ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.problem }, state.failure), outcome.change.errorDetail === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.detailLabel }, t("panels.market.add.details")), /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.detail }, outcome.change.errorDetail)));
9840
10529
  }
9841
10530
  //#endregion
10531
+ //#region src/app/layouts/market/add-module-registry-prefs.ts
10532
+ var DEFAULT_REGISTRY_CHOICE = {
10533
+ kind: "default",
10534
+ value: ""
10535
+ };
10536
+ function isRegistryKind(value) {
10537
+ return value === "default" || value === "url" || value === "custom";
10538
+ }
10539
+ function parseRegistryChoice(raw) {
10540
+ if (raw === null) return DEFAULT_REGISTRY_CHOICE;
10541
+ let value;
10542
+ try {
10543
+ value = JSON.parse(raw);
10544
+ } catch {
10545
+ return DEFAULT_REGISTRY_CHOICE;
10546
+ }
10547
+ if (typeof value !== "object" || value === null) return DEFAULT_REGISTRY_CHOICE;
10548
+ const record = value;
10549
+ if (!isRegistryKind(record.kind)) return DEFAULT_REGISTRY_CHOICE;
10550
+ if (record.kind === "default") return DEFAULT_REGISTRY_CHOICE;
10551
+ if (record.kind === "custom") return {
10552
+ kind: "custom",
10553
+ value: ""
10554
+ };
10555
+ if (typeof record.value !== "string" || !customRegistryAllowed(record.value)) return DEFAULT_REGISTRY_CHOICE;
10556
+ return {
10557
+ kind: "url",
10558
+ value: record.value.trim()
10559
+ };
10560
+ }
10561
+ function readRegistryPrefs() {
10562
+ const custom = readText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM);
10563
+ return {
10564
+ choice: parseRegistryChoice(readText(STORAGE_KEY_MARKET_REGISTRY)),
10565
+ custom: custom === null ? "" : custom.trim()
10566
+ };
10567
+ }
10568
+ function writeRegistryChoice(choice) {
10569
+ if (choice.kind === "custom") {
10570
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
10571
+ kind: "custom",
10572
+ value: ""
10573
+ }));
10574
+ return;
10575
+ }
10576
+ if (choice.kind === "url" && customRegistryAllowed(choice.value)) {
10577
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
10578
+ kind: "url",
10579
+ value: choice.value.trim()
10580
+ }));
10581
+ return;
10582
+ }
10583
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify(DEFAULT_REGISTRY_CHOICE));
10584
+ }
10585
+ function writeRegistryCustom(value) {
10586
+ const text = value.trim();
10587
+ writeText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM, text === "" ? null : text);
10588
+ }
10589
+ function reconcileRegistryChoice(choice, choices) {
10590
+ if (choice.kind !== "url") return choice;
10591
+ return choices.some((option) => option.choice.kind === "url" && option.choice.value === choice.value) ? choice : DEFAULT_REGISTRY_CHOICE;
10592
+ }
10593
+ //#endregion
9842
10594
  //#region src/app/layouts/market/use-add-module.ts
9843
10595
  function newRequestId() {
9844
10596
  return crypto.randomUUID();
9845
10597
  }
9846
10598
  function useAddModule(options) {
9847
10599
  const { onInstalled, failedText } = options;
10600
+ const [prefs] = (0, react.useState)(readRegistryPrefs);
9848
10601
  const [spec, setSpec] = (0, react.useState)("");
9849
- const [choice, setChoice] = (0, react.useState)({
9850
- kind: "default",
9851
- value: ""
9852
- });
9853
- const [custom, setCustom] = (0, react.useState)("");
10602
+ const [choice, setChoice] = (0, react.useState)(prefs.choice);
10603
+ const [custom, setCustom] = (0, react.useState)(prefs.custom);
9854
10604
  const [registryOpen, setRegistryOpen] = (0, react.useState)(false);
9855
10605
  const [guideOpen, setGuideOpen] = (0, react.useState)(false);
9856
10606
  const [phase, setPhase] = (0, react.useState)("idle");
@@ -9862,6 +10612,8 @@ window.__ModuleLoader__.load({
9862
10612
  const generationRef = (0, react.useRef)(0);
9863
10613
  const requestIdRef = (0, react.useRef)("");
9864
10614
  const { busy: classifying } = useVisibleBusy(phase === "inspecting", 500);
10615
+ const [installToken] = (0, react.useState)(() => `market-install:${newRequestId()}`);
10616
+ usePublishMarketInstalling(installToken, phase === "installing");
9865
10617
  const write = useHostWrite({
9866
10618
  channel: "provision",
9867
10619
  networkText: failedText
@@ -9878,7 +10630,9 @@ window.__ModuleLoader__.load({
9878
10630
  let alive = true;
9879
10631
  readBundleRegistries().then((response) => {
9880
10632
  if (!alive) return;
9881
- setChoices(registryOptions(response.ok ? response.registries : null));
10633
+ const options = registryOptions(response.ok ? response.registries : null);
10634
+ setChoices(options);
10635
+ setChoice((previous) => reconcileRegistryChoice(previous, options));
9882
10636
  });
9883
10637
  return () => {
9884
10638
  alive = false;
@@ -9945,6 +10699,7 @@ window.__ModuleLoader__.load({
9945
10699
  supply: value.supply,
9946
10700
  ...value.plugin === void 0 ? {} : { plugin: value.plugin }
9947
10701
  });
10702
+ publishMarketApplied(appliedUnitsOf(value));
9948
10703
  setPhase("result");
9949
10704
  if (value.change.application === "applied" || value.change.application === "restart-required") onInstalled();
9950
10705
  });
@@ -9989,6 +10744,14 @@ window.__ModuleLoader__.load({
9989
10744
  setPreview(null);
9990
10745
  setPhase("idle");
9991
10746
  }, []);
10747
+ const choose = (0, react.useCallback)((next) => {
10748
+ setChoice(next);
10749
+ writeRegistryChoice(next);
10750
+ }, []);
10751
+ const chooseCustom = (0, react.useCallback)((value) => {
10752
+ setCustom(value);
10753
+ writeRegistryCustom(value);
10754
+ }, []);
9992
10755
  return {
9993
10756
  spec,
9994
10757
  choice,
@@ -10004,10 +10767,8 @@ window.__ModuleLoader__.load({
10004
10767
  removing,
10005
10768
  builds: outcome?.change.pendingBuilds ?? [],
10006
10769
  setSpec,
10007
- setChoice: (0, react.useCallback)((next) => {
10008
- setChoice(next);
10009
- }, []),
10010
- setCustom,
10770
+ setChoice: choose,
10771
+ setCustom: chooseCustom,
10011
10772
  toggleRegistry: (0, react.useCallback)(() => setRegistryOpen((value) => !value), []),
10012
10773
  closeRegistry: (0, react.useCallback)(() => setRegistryOpen(false), []),
10013
10774
  toggleGuide: (0, react.useCallback)(() => setGuideOpen((value) => !value), []),
@@ -10156,7 +10917,8 @@ window.__ModuleLoader__.load({
10156
10917
  installed: modules === null ? void 0 : withClientRefusals(modules, units.refusals()),
10157
10918
  plugins,
10158
10919
  workbench,
10159
- busy: useMarketBusy()
10920
+ busy: useMarketBusy(),
10921
+ ...useMarketInstallState()
10160
10922
  });
10161
10923
  (0, react.useEffect)(() => {
10162
10924
  publishPanelHint(MARKET_PANEL_ID, hint);
@@ -10171,50 +10933,23 @@ window.__ModuleLoader__.load({
10171
10933
  const manifests = useLiveManifests(units);
10172
10934
  const installable = useInstallableUnits(units);
10173
10935
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
10174
- const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, failed: versionsFailed, checkedAt: versionsCheckedAt, read: installedRead, reload: reloadVersions } = useModuleVersions();
10936
+ const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, allChecking: versionsAllChecking, modulesCheck, pluginsCheck, read: installedRead, reload: reloadVersions } = useModuleVersions();
10175
10937
  const machineBoard = useEnabledUnits(0, null);
10938
+ const install = useMarketInstallState();
10176
10939
  const [adding, setAdding] = (0, react.useState)(false);
10177
10940
  const [acting, setActing] = (0, react.useState)(false);
10178
10941
  const [tab, setTab] = (0, react.useState)("installed");
10179
10942
  const openAddModule = (0, react.useCallback)(() => setAdding(true), []);
10180
10943
  const updates = (0, react.useMemo)(() => marketUpdatesOf(modules), [modules]);
10181
10944
  const installed = modules === null ? void 0 : withClientRefusals(modules, units.refusals());
10182
- const reload = (0, react.useCallback)((options) => {
10183
- if (options?.force === true) {
10184
- bumpModuleVersionsEpoch();
10185
- bumpCapabilityEpoch();
10186
- forceProbe();
10187
- reloadVersions({
10188
- force: true,
10189
- fresh: true
10190
- });
10191
- return;
10192
- }
10193
- reloadCapability();
10194
- reloadVersions();
10195
- }, [
10196
- reloadCapability,
10197
- reloadVersions,
10198
- forceProbe
10199
- ]);
10200
- const enteredRef = (0, react.useRef)(false);
10201
- (0, react.useEffect)(() => {
10202
- if (enteredRef.current) return;
10203
- enteredRef.current = true;
10204
- reloadVersions();
10205
- if (!shouldProbeOnEnter({
10206
- checkedAt,
10207
- now: Date.now(),
10208
- staleMs: MARKET_STALE_MS
10209
- })) return;
10210
- markNextProbeSilent();
10211
- forceProbe();
10212
- }, [
10945
+ const { reload, checkPart } = useMarketReload({
10213
10946
  checkedAt,
10214
10947
  forceProbe,
10948
+ reloadCapability,
10215
10949
  reloadVersions
10216
- ]);
10950
+ });
10217
10951
  const settling = useSettlingModules((installed ?? []).map((module) => module.unit).join("|"), manifests.map((manifest) => manifest.id).join("|"), Object.keys(capabilities ?? {}).join("|"));
10952
+ const held = install.applied.size === 0 ? settling : /* @__PURE__ */ new Set([...settling, ...install.applied]);
10218
10953
  const freshness = {
10219
10954
  loaded: capabilities !== null,
10220
10955
  checking: checking || versionsChecking,
@@ -10236,7 +10971,9 @@ window.__ModuleLoader__.load({
10236
10971
  idPrefix: MARKET_PANEL_ID,
10237
10972
  tab,
10238
10973
  busy,
10974
+ checking: checking || versionsAllChecking,
10239
10975
  onTab: setTab,
10976
+ onReload: () => reload({ force: true }),
10240
10977
  onAdd: openAddModule
10241
10978
  }), devMarket.strip, /* @__PURE__ */ (0, react.createElement)("div", {
10242
10979
  id: `${MARKET_PANEL_ID}-panel-installed`,
@@ -10254,14 +10991,16 @@ window.__ModuleLoader__.load({
10254
10991
  onChanged: reload,
10255
10992
  onPending: setActing,
10256
10993
  updates,
10257
- updatesCheckedAt: versionsCheckedAt,
10258
- updatesFailed: versionsFailed,
10994
+ modulesCheck,
10995
+ pluginsCheck,
10996
+ onCheck: checkPart,
10259
10997
  installed,
10260
10998
  installedRead: shownRead,
10261
10999
  workbench,
10262
11000
  selfUpdate,
10263
11001
  plugins,
10264
- settling: mock === void 0 ? settling : void 0,
11002
+ settling: mock === void 0 ? held : void 0,
11003
+ installing: mock === void 0 ? install.installing : false,
10265
11004
  mock,
10266
11005
  defaults: machineBoard?.defaults ?? [],
10267
11006
  changed: machineBoard?.changed ?? {}
@@ -11748,6 +12487,7 @@ window.__ModuleLoader__.load({
11748
12487
  return manifestsCache;
11749
12488
  },
11750
12489
  refusals: () => refusals,
12490
+ declared: () => [...known.values()],
11751
12491
  installable: () => installableIds,
11752
12492
  setManifests(manifests, installable) {
11753
12493
  known = new Map(manifests.map((manifest) => [manifest.id, manifest]));
@@ -12692,6 +13432,45 @@ window.__ModuleLoader__.load({
12692
13432
  }, []);
12693
13433
  return (0, react.createElement)(ApprovalPlan, { rows: marketSourceRows(tool, args, payload, t) });
12694
13434
  }
13435
+ function pluginToolIndexOf(manifests) {
13436
+ const index = /* @__PURE__ */ new Map();
13437
+ for (const manifest of manifests) for (const tool of manifest.tools) {
13438
+ if (tool.opencli === void 0) continue;
13439
+ index.set(tool.name, tool.opencli);
13440
+ }
13441
+ return index;
13442
+ }
13443
+ function argText(value) {
13444
+ if (typeof value === "string") return value;
13445
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
13446
+ const text = JSON.stringify(value);
13447
+ return text === void 0 ? String(value) : text;
13448
+ }
13449
+ function pluginApprovalRows(origin, args, t) {
13450
+ const rows = [{
13451
+ label: t("approval.plugin.name"),
13452
+ value: origin.plugin
13453
+ }, {
13454
+ label: t("approval.plugin.command"),
13455
+ value: origin.command
13456
+ }];
13457
+ const note = args[APPROVAL_NOTE_ARG];
13458
+ if (typeof note === "string" && note.trim() !== "") rows.push({
13459
+ label: t("approval.plugin.note"),
13460
+ value: note.replace(/\s+/g, " ").trim()
13461
+ });
13462
+ for (const name of origin.args) {
13463
+ if (!(name in args)) continue;
13464
+ rows.push({
13465
+ label: name,
13466
+ value: argText(args[name])
13467
+ });
13468
+ }
13469
+ return rows;
13470
+ }
13471
+ function shellApprovalRenderer(manifests) {
13472
+ return (input, t) => shellApprovalDetail(input, t, pluginToolIndexOf(manifests()));
13473
+ }
12695
13474
  function shellClaimsApprovalDetail(tool) {
12696
13475
  return ALL_TOOLS.includes(tool);
12697
13476
  }
@@ -12703,7 +13482,9 @@ window.__ModuleLoader__.load({
12703
13482
  value: `${unit === "" ? "<unit>" : unit} · ${id === "" ? "<id>" : id}`
12704
13483
  }];
12705
13484
  }
12706
- function shellApprovalPlan(input, t) {
13485
+ function shellApprovalPlan(input, t, pluginTools) {
13486
+ const origin = pluginTools?.get(input.tool);
13487
+ if (origin !== void 0) return { rows: pluginApprovalRows(origin, input.args, t) };
12707
13488
  if (input.tool === "workbench_diy_record_prepare") return {
12708
13489
  rows: recordApprovalRows(input.args, t),
12709
13490
  warn: t("approval.record.noSwitch")
@@ -12714,7 +13495,7 @@ window.__ModuleLoader__.load({
12714
13495
  };
12715
13496
  return shellClaimsApprovalDetail(input.tool) ? { rows: [] } : void 0;
12716
13497
  }
12717
- function shellApprovalDetail(input, t) {
13498
+ function shellApprovalDetail(input, t, pluginTools) {
12718
13499
  if (input.tool === "workbench_diy_publish") return (0, react.createElement)(PublishApprovalSeat, {
12719
13500
  args: input.args,
12720
13501
  t
@@ -12724,7 +13505,7 @@ window.__ModuleLoader__.load({
12724
13505
  args: input.args,
12725
13506
  t
12726
13507
  });
12727
- const plan = shellApprovalPlan(input, t);
13508
+ const plan = shellApprovalPlan(input, t, pluginTools);
12728
13509
  if (plan === void 0) return void 0;
12729
13510
  if (plan.rows.length === 0) return (0, react.createElement)(react.Fragment, null);
12730
13511
  return /* @__PURE__ */ (0, react.createElement)(ApprovalPlan, {
@@ -13074,6 +13855,10 @@ window.__ModuleLoader__.load({
13074
13855
  }, /* @__PURE__ */ (0, react.createElement)("span", { className: Breadcrumbs_module_default.tabTitle }, stepLabel(step, titleKeyOf, t))));
13075
13856
  }));
13076
13857
  }
13858
+ var BoardEmpty_module_default = {
13859
+ actions: "_actions_smeq7_1",
13860
+ action: "_action_smeq7_1"
13861
+ };
13077
13862
  //#endregion
13078
13863
  //#region src/app/layouts/rightbar/BoardEmpty.tsx
13079
13864
  function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
@@ -13081,20 +13866,23 @@ window.__ModuleLoader__.load({
13081
13866
  icon: /* @__PURE__ */ (0, react.createElement)(IconBrandMark, { size: 32 }),
13082
13867
  title: t("panels.empty"),
13083
13868
  hint: t("panels.emptyHint"),
13084
- action: /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13869
+ action: /* @__PURE__ */ (0, react.createElement)("div", { className: BoardEmpty_module_default.actions }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13085
13870
  type: "button",
13086
13871
  size: "sm",
13087
13872
  variant: "primary",
13873
+ className: BoardEmpty_module_default.action,
13088
13874
  onClick: onBuildModule
13089
13875
  }, t("panels.buildModule")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13090
13876
  type: "button",
13091
13877
  size: "sm",
13092
13878
  variant: "toolbar",
13879
+ className: BoardEmpty_module_default.action,
13093
13880
  onClick: onOpenModules
13094
13881
  }, t("panels.choose")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13095
13882
  type: "button",
13096
13883
  size: "sm",
13097
13884
  variant: "toolbar",
13885
+ className: BoardEmpty_module_default.action,
13098
13886
  onClick: onOpenMarket
13099
13887
  }, t("panels.browseMarket")))
13100
13888
  });
@@ -15637,7 +16425,7 @@ window.__ModuleLoader__.load({
15637
16425
  ...face.messages === void 0 ? {} : { messages: face.messages }
15638
16426
  }));
15639
16427
  }
15640
- 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_yups9_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_yups9_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_yups9_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_yups9_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_yups9_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_yups9_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_yups9_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_yups9_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_yups9_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_yups9_39 ._marketVersion_yups9_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_yups9_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_yups9_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_yups9_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_yups9_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_yups9_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_yups9_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_yups9_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_yups9_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_yups9_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_yups9_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_yups9_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_yups9_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_yups9_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_yups9_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionAction_yups9_175 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n margin-left: auto;\n min-width: 0;\n}\n\n._marketSectionQuiet_yups9_183 ._marketSectionTitle_yups9_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_yups9_183 ._marketName_yups9_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_yups9_183 ._marketIcon_yups9_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_yups9_196 {\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_yups9_206 {\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_yups9_213 {\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_yups9_220 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_yups9_225 {\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_yups9_225 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_yups9_243 {\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_yups9_251 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_yups9_256 {\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_yups9_262 {\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_yups9_271 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_yups9_271[hidden] {\n display: none;\n}\n\n._marketTabs_yups9_281 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_yups9_286 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketAddButton_yups9_291 {\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_yups9_220 {\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_yups9_308 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverPage_yups9_313 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_yups9_320 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_yups9_327 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_yups9_333 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_yups9_338 {\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_yups9_345 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_yups9_351 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_yups9_356 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_yups9_361 {\n flex: none;\n}\n\n._discoverSearch_yups9_365 {\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_yups9_373 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_yups9_378 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_yups9_373 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_yups9_365 ._discoverSearchClear_yups9_387 {\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_yups9_387:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_yups9_327 {\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_yups9_333 {\n grid-area: market;\n }\n\n ._discoverMarketButton_yups9_338 {\n margin-left: 0;\n }\n\n ._discoverLabels_yups9_351 {\n grid-area: labels;\n }\n\n ._discoverSearch_yups9_365 {\n grid-area: search;\n }\n\n ._discoverSort_yups9_356 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_yups9_361 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_yups9_438 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_yups9_445 {\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_yups9_454 {\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_yups9_454:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_yups9_468 {\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_yups9_480 {\n object-fit: contain;\n}\n\n._discoverMain_yups9_484 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_yups9_492 {\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_yups9_500 {\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_yups9_500::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_yups9_500:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_yups9_500: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_yups9_531 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_yups9_537 {\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_yups9_546 {\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_yups9_553 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_yups9_559 {\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._discoverUpdateAction_yups9_568 {\n color: var(--dsw-alias-state-warn-primary);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._discoverBlocked_yups9_573 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_yups9_578 {\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_yups9_587 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_yups9_578 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_yups9_597 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_yups9_603 {\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_yups9_603:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_yups9_603: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_yups9_626 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_yups9_630 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_yups9_636 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_yups9_642 {\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_yups9_649 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_yups9_656 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_yups9_661 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_yups9_666 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_yups9_671 {\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_yups9_677 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_yups9_684 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_yups9_690 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_yups9_695 {\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_yups9_705 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_yups9_711 {\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_yups9_719 {\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_yups9_728 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_yups9_735 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_yups9_735:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_yups9_745 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_yups9_753 {\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_yups9_761 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_yups9_766 {\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_yups9_775 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_yups9_781 {\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_yups9_790 {\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_yups9_790 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_yups9_808 {\n align-self: center;\n}\n\n._discoverTransport_yups9_812 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportHead_yups9_818 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_yups9_825 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportHead_yups9_818 ._discoverTransportKind_yups9_830 {\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportHead_yups9_818 ._discoverTransportState_yups9_835 {\n margin-left: 0;\n}\n\n._discoverTransportHead_yups9_818 > :last-child {\n margin-left: auto;\n}\n\n._discoverTransportRows_yups9_843 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_yups9_843 {\n display: flex;\n flex: 1;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n}\n\n._discoverTransportRow_yups9_843:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_yups9_843:has(._discoverTransportRadio_yups9_864:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_yups9_843:has(._discoverTransportRadio_yups9_864:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_yups9_864 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_yups9_830 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_yups9_835 {\n flex: none;\n margin-left: auto;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRow_yups9_843[data-state='ok'] ._discoverTransportState_yups9_835 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_yups9_843[data-state='auth'] ._discoverTransportState_yups9_835 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_yups9_843[data-state='unreachable'] ._discoverTransportState_yups9_835,\n._discoverTransportRow_yups9_843[data-state='unknown'] ._discoverTransportState_yups9_835 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_yups9_904 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_yups9_910 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_yups9_915 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverInstallText_yups9_926 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_yups9_932 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_yups9_936 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_yups9_942 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_yups9_950 {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--wb-len-12);\n padding: var(--wb-len-10) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceConfirm_yups9_959 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_yups9_965 {\n display: flex;\n flex: 1;\n align-items: flex-start;\n gap: var(--wb-len-10);\n min-width: 0;\n cursor: pointer;\n}\n\n._discoverSourceRadio_yups9_974 {\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._discoverSourceMain_yups9_982 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_yups9_990 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverSourceUrl_yups9_998 {\n display: block;\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverSourceMore_yups9_1008 {\n flex: none;\n}\n\n._discoverSourceLoading_yups9_1012 {\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_yups9_1022 {\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_yups9_1022 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_yups9_1036 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_yups9_1042 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_yups9_1048 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_yups9_1053 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_yups9_1059 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_yups9_1064 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_yups9_1070 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_yups9_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_yups9_468._discoverSkeletonFill_yups9_1070 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_yups9_1079 {\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_yups9_1086 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_yups9_1090 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_yups9_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_yups9_1070 {\n animation: none;\n }\n}\n\n._check_1g6tv_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n min-width: 0;\n}\n\n._status_1g6tv_8 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-caption);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n._button_1g6tv_15 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n}\n\n._icon_1g6tv_22 {\n display: inline-flex;\n}\n\n@media (max-width: 720px) {\n ._status_1g6tv_8 {\n display: none;\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*/";
16428
+ 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: grid;\n grid-template-columns: minmax(var(--wb-len-56), auto) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-2);\n align-items: baseline;\n margin: 0;\n}\n.wb-approvalRow {\n display: contents;\n}\n.wb-approvalLabel {\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.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_1vpw3_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_1vpw3_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_1vpw3_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_1vpw3_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_1vpw3_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_1vpw3_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_1vpw3_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_1vpw3_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_1vpw3_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_1vpw3_39 ._marketVersion_1vpw3_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_1vpw3_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_1vpw3_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_1vpw3_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_1vpw3_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1vpw3_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1vpw3_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_1vpw3_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_1vpw3_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_1vpw3_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_1vpw3_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_1vpw3_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_1vpw3_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_1vpw3_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_1vpw3_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionAction_1vpw3_175 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n margin-left: auto;\n min-width: 0;\n}\n\n._marketSectionQuiet_1vpw3_183 ._marketSectionTitle_1vpw3_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1vpw3_183 ._marketName_1vpw3_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1vpw3_183 ._marketIcon_1vpw3_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._marketProgress_1vpw3_195 {\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_1vpw3_205 {\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_1vpw3_212 {\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._marketFailureSeat_1vpw3_219 {\n grid-column: 2 / -1;\n min-width: 0;\n}\n\n._marketEmpty_1vpw3_224 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_1vpw3_229 {\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_1vpw3_229 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_1vpw3_247 {\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_1vpw3_255 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_1vpw3_260 {\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_1vpw3_266 {\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_1vpw3_275 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_1vpw3_275[hidden] {\n display: none;\n}\n\n._marketTabs_1vpw3_285 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_1vpw3_290 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketAddButton_1vpw3_295 {\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_1vpw3_224 {\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_1vpw3_312 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverPage_1vpw3_317 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_1vpw3_324 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_1vpw3_331 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_1vpw3_337 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_1vpw3_342 {\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_1vpw3_349 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_1vpw3_355 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_1vpw3_360 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_1vpw3_365 {\n flex: none;\n}\n\n._discoverSearch_1vpw3_369 {\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_1vpw3_377 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_1vpw3_382 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_1vpw3_377 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_1vpw3_369 ._discoverSearchClear_1vpw3_391 {\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_1vpw3_391:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_1vpw3_331 {\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_1vpw3_337 {\n grid-area: market;\n }\n\n ._discoverMarketButton_1vpw3_342 {\n margin-left: 0;\n }\n\n ._discoverLabels_1vpw3_355 {\n grid-area: labels;\n }\n\n ._discoverSearch_1vpw3_369 {\n grid-area: search;\n }\n\n ._discoverSort_1vpw3_360 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_1vpw3_365 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_1vpw3_442 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_1vpw3_449 {\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_1vpw3_458 {\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_1vpw3_458:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_1vpw3_472 {\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_1vpw3_484 {\n object-fit: contain;\n}\n\n._discoverMain_1vpw3_488 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_1vpw3_496 {\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_1vpw3_504 {\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_1vpw3_504::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_1vpw3_504:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_1vpw3_504: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_1vpw3_535 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_1vpw3_541 {\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_1vpw3_550 {\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_1vpw3_557 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_1vpw3_563 {\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._discoverUpdateAction_1vpw3_572 {\n color: var(--dsw-alias-state-warn-primary);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._discoverBlocked_1vpw3_577 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_1vpw3_582 {\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_1vpw3_591 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_1vpw3_582 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_1vpw3_601 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_1vpw3_607 {\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_1vpw3_607:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_1vpw3_607: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_1vpw3_630 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_1vpw3_634 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_1vpw3_640 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_1vpw3_646 {\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_1vpw3_653 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_1vpw3_660 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_1vpw3_665 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_1vpw3_670 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_1vpw3_675 {\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_1vpw3_681 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_1vpw3_688 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_1vpw3_694 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_1vpw3_699 {\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_1vpw3_709 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_1vpw3_715 {\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_1vpw3_723 {\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_1vpw3_732 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_1vpw3_739 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_1vpw3_739:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_1vpw3_749 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_1vpw3_757 {\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_1vpw3_765 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_1vpw3_770 {\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_1vpw3_779 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_1vpw3_785 {\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_1vpw3_794 {\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_1vpw3_794 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_1vpw3_812 {\n align-self: center;\n}\n\n._discoverTransport_1vpw3_816 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportHead_1vpw3_822 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_1vpw3_829 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportHead_1vpw3_822 ._discoverTransportKind_1vpw3_834 {\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportHead_1vpw3_822 ._discoverTransportState_1vpw3_839 {\n margin-left: 0;\n}\n\n._discoverTransportHead_1vpw3_822 > :last-child {\n margin-left: auto;\n}\n\n._discoverTransportRows_1vpw3_847 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_1vpw3_847 {\n display: flex;\n flex: 1;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n}\n\n._discoverTransportRow_1vpw3_847:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_1vpw3_847:has(._discoverTransportRadio_1vpw3_868:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_1vpw3_847:has(._discoverTransportRadio_1vpw3_868:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_1vpw3_868 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_1vpw3_834 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_1vpw3_839 {\n flex: none;\n margin-left: auto;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRow_1vpw3_847[data-state='ok'] ._discoverTransportState_1vpw3_839 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_1vpw3_847[data-state='auth'] ._discoverTransportState_1vpw3_839 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_1vpw3_847[data-state='unreachable'] ._discoverTransportState_1vpw3_839,\n._discoverTransportRow_1vpw3_847[data-state='unknown'] ._discoverTransportState_1vpw3_839 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_1vpw3_908 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_1vpw3_914 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_1vpw3_919 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverInstallText_1vpw3_930 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_1vpw3_936 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_1vpw3_940 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_1vpw3_946 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_1vpw3_954 {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--wb-len-12);\n padding: var(--wb-len-10) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceConfirm_1vpw3_963 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_1vpw3_969 {\n display: flex;\n flex: 1;\n align-items: flex-start;\n gap: var(--wb-len-10);\n min-width: 0;\n cursor: pointer;\n}\n\n._discoverSourceRadio_1vpw3_978 {\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._discoverSourceMain_1vpw3_986 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_1vpw3_994 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverSourceUrl_1vpw3_1002 {\n display: block;\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverSourceMore_1vpw3_1012 {\n flex: none;\n}\n\n._discoverSourceLoading_1vpw3_1016 {\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_1vpw3_1026 {\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_1vpw3_1026 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_1vpw3_1040 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_1vpw3_1046 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_1vpw3_1052 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_1vpw3_1057 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_1vpw3_1063 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_1vpw3_1068 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_1vpw3_1074 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_1vpw3_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_1vpw3_472._discoverSkeletonFill_1vpw3_1074 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_1vpw3_1083 {\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_1vpw3_1090 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_1vpw3_1094 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_1vpw3_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_1vpw3_1074 {\n animation: none;\n }\n}\n\n._block_mxnbc_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-2) 0 var(--wb-len-8);\n min-width: 0;\n}\n\n._head_mxnbc_9 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._title_mxnbc_16 {\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._fact_mxnbc_22 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._actions_mxnbc_30 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-2);\n margin-left: calc(-1 * var(--wb-len-8));\n}\n\n._hint_mxnbc_38 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._output_mxnbc_44 {\n margin-top: var(--wb-len-2);\n min-width: 0;\n}\n._check_1g6tv_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n min-width: 0;\n}\n\n._status_1g6tv_8 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-caption);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n._button_1g6tv_15 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n}\n\n._icon_1g6tv_22 {\n display: inline-flex;\n}\n\n@media (max-width: 720px) {\n ._status_1g6tv_8 {\n display: none;\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._actions_smeq7_1 {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--wb-len-8);\n max-width: 100%;\n}\n\n._action_smeq7_1 {\n flex: none;\n white-space: nowrap;\n}\n\n@container (max-width: 340px) {\n ._actions_smeq7_1 {\n flex-direction: column;\n width: var(--wb-len-220);\n max-width: 100%;\n }\n\n ._action_smeq7_1 {\n width: 100%;\n }\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*/";
15641
16429
  function workbenchCss() {
15642
16430
  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}`;
15643
16431
  }
@@ -15886,7 +16674,7 @@ window.__ModuleLoader__.load({
15886
16674
  inject: () => ({
15887
16675
  t: ctx.locale.bind(LOCALE_NS),
15888
16676
  units: units.all(),
15889
- renderShell: shellApprovalDetail
16677
+ renderShell: shellApprovalRenderer(units.declared)
15890
16678
  })
15891
16679
  }, ApprovalDetail));
15892
16680
  ctx.slots.inject("conversation.session.header.corner", () => ctx.slots.register({