@dsh-workbench/core 1.1.2 → 1.1.4

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 (34) hide show
  1. package/client.js +1094 -520
  2. package/dist/client/client.body.js +1094 -520
  3. package/dist/client/index.js +946 -372
  4. package/dist/host/index.js +322 -9
  5. package/dist/types/app/layouts/market/discover-confirm.d.ts +4 -3
  6. package/dist/types/app/layouts/market/discover-detail.d.ts +1 -0
  7. package/dist/types/app/layouts/market/discover-installing.d.ts +8 -0
  8. package/dist/types/app/layouts/market/discover-rows.d.ts +4 -2
  9. package/dist/types/app/layouts/market/discover-states.d.ts +6 -0
  10. package/dist/types/app/layouts/market/discover-transport.d.ts +7 -0
  11. package/dist/types/app/layouts/market/discover-versions.d.ts +2 -1
  12. package/dist/types/app/layouts/market/market-check.d.ts +10 -0
  13. package/dist/types/app/layouts/market/market-header.d.ts +1 -3
  14. package/dist/types/app/layouts/market/use-discover.d.ts +10 -2
  15. package/dist/types/app/layouts/market/use-git-transport.d.ts +19 -0
  16. package/dist/types/app/layouts/market/use-module-versions.d.ts +4 -0
  17. package/dist/types/app/layouts/market/use-settling-modules.d.ts +1 -0
  18. package/dist/types/app/layouts/rightbar/MarketView.d.ts +3 -1
  19. package/dist/types/app/layouts/rightbar/market-freshness.d.ts +1 -0
  20. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +4 -1
  21. package/dist/types/app/layouts/rightbar/market-rows.d.ts +2 -0
  22. package/dist/types/app/layouts/rightbar/market-section.d.ts +4 -2
  23. package/dist/types/app/layouts/rightbar/use-market-default.d.ts +12 -0
  24. package/dist/types/kernel/contract/market-index.d.ts +2 -2
  25. package/dist/types/modules/panels/model/market-installed.d.ts +19 -0
  26. package/dist/types/modules/panels/model/market-installed.test.d.ts +1 -0
  27. package/dist/types/modules/panels/model/market-route.d.ts +1 -0
  28. package/dist/types/shared/api/host/git-exec.d.ts +2 -0
  29. package/dist/types/shared/api/host/git-probe.d.ts +9 -0
  30. package/dist/types/shared/api/host/git-routes.d.ts +3 -0
  31. package/dist/types/shared/api/host/market-sources-store.d.ts +2 -1
  32. package/dist/types/shared/api/host/profile-dependencies.d.ts +1 -0
  33. package/dist/types/shared/hooks/market-queries.d.ts +3 -1
  34. package/package.json +3 -3
@@ -781,17 +781,17 @@ async function apiPost(route, body) {
781
781
  //#endregion
782
782
  //#region ../shared/dist/lib/react.js
783
783
  var react$1 = require("react");
784
- var h$64 = react$1.createElement;
785
- var Fragment$22 = react$1.Fragment;
784
+ var h$67 = react$1.createElement;
785
+ var Fragment$23 = react$1.Fragment;
786
786
  var Component = react$1.Component;
787
787
  react$1.createContext;
788
788
  react$1.useContext;
789
- var useState$36 = react$1.useState;
790
- var useEffect$28 = react$1.useEffect;
789
+ var useState$40 = react$1.useState;
790
+ var useEffect$30 = react$1.useEffect;
791
791
  react$1.useLayoutEffect;
792
- var useMemo$9 = react$1.useMemo;
792
+ var useMemo$10 = react$1.useMemo;
793
793
  react$1.useCallback;
794
- var useRef$22 = react$1.useRef;
794
+ var useRef$24 = react$1.useRef;
795
795
  react$1.useSyncExternalStore;
796
796
  //#endregion
797
797
  //#region ../shared/dist/components/Activity.js
@@ -802,7 +802,7 @@ react$1.useSyncExternalStore;
802
802
  * @returns 一个 div。
803
803
  */
804
804
  function ActivityBlock({ head, children }) {
805
- return h$64("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$64("div", { className: "wb-activityBlockHead" }, head), children);
805
+ return h$67("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$67("div", { className: "wb-activityBlockHead" }, head), children);
806
806
  }
807
807
  /**
808
808
  * 一条活动:状态点 + 正文 + 时间,行尾可挂动作;时间一律用它,别自己拼。
@@ -813,7 +813,7 @@ function ActivityBlock({ head, children }) {
813
813
  * @returns 一行。
814
814
  */
815
815
  function ActivityLine({ dot, text, at, actions }) {
816
- return h$64("div", { className: "wb-activityLine" }, dot, h$64("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$64("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$64("span", { className: "wb-activityLineActions" }, actions));
816
+ 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));
817
817
  }
818
818
  /**
819
819
  * 活动行尾那颗动作:给 `href` 就是外链,否则是图标钮并带上 tooltip。
@@ -827,7 +827,7 @@ function ActivityLine({ dot, text, at, actions }) {
827
827
  */
828
828
  function ActivityAction({ label, hint, icon, href, onClick, failed }) {
829
829
  const tip = hint ?? label;
830
- if (href !== void 0) return h$64("a", {
830
+ if (href !== void 0) return h$67("a", {
831
831
  className: "wb-iconButton",
832
832
  href,
833
833
  target: "_blank",
@@ -835,13 +835,13 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
835
835
  title: tip,
836
836
  "aria-label": label
837
837
  }, icon);
838
- return h$64(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
838
+ return h$67(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
839
839
  side: "bottom",
840
840
  align: "end",
841
841
  gap: 6,
842
842
  portal: true,
843
843
  label: tip
844
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.Button, {
844
+ }, h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
845
845
  type: "button",
846
846
  variant: "ghost",
847
847
  size: "sm",
@@ -863,10 +863,10 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
863
863
  */
864
864
  function Note({ tone = "muted", as, role, children }) {
865
865
  const className = tone === "problem" ? "wb-problem" : "wb-note";
866
- return as === "span" ? h$64("span", {
866
+ return as === "span" ? h$67("span", {
867
867
  className,
868
868
  role
869
- }, children) : h$64("p", {
869
+ }, children) : h$67("p", {
870
870
  className,
871
871
  role
872
872
  }, children);
@@ -910,10 +910,10 @@ var CardBoundary = class extends Component {
910
910
  render() {
911
911
  const { reason } = this.state;
912
912
  if (reason === null) return this.props.children;
913
- return h$64(Note, { tone: "problem" }, h$64("span", null, this.props.t("panels.cardBroken", {
913
+ return h$67(Note, { tone: "problem" }, h$67("span", null, this.props.t("panels.cardBroken", {
914
914
  unit: this.props.unit,
915
915
  reason
916
- })), " ", h$64(_deepseek_ai_dsh_client_ui_primitives.Button, {
916
+ })), " ", h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
917
917
  type: "button",
918
918
  variant: "outline",
919
919
  size: "sm",
@@ -963,19 +963,19 @@ function ApprovalDetail(props) {
963
963
  const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
964
964
  if (owner?.approval !== void 0) {
965
965
  const Render = owner.approval.render;
966
- return h$64(CardBoundary, {
966
+ return h$67(CardBoundary, {
967
967
  unit: owner.unit,
968
968
  resetKey: props.callId ?? "",
969
969
  t
970
- }, h$64(Render, {
970
+ }, h$67(Render, {
971
971
  input,
972
972
  t
973
973
  }));
974
974
  }
975
975
  const shell = props.renderShell?.(input, t);
976
- if (shell !== void 0 && shell !== null) return h$64(Fragment$22, null, shell);
976
+ if (shell !== void 0 && shell !== null) return h$67(Fragment$23, null, shell);
977
977
  if (command === "") return null;
978
- return h$64(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
978
+ return h$67(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
979
979
  code: command,
980
980
  className: "wb-approvalCommand",
981
981
  copyLabel: t("blocker.copy"),
@@ -993,10 +993,10 @@ function ApprovalDetail(props) {
993
993
  * @returns 一个 div。
994
994
  */
995
995
  function ApprovalPlan({ rows, hint, warn, children }) {
996
- return h$64("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$64("p", { className: "wb-approvalHint" }, hint), h$64("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$64("div", {
996
+ 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", {
997
997
  className: "wb-approvalRow",
998
998
  key: String(index)
999
- }, h$64("dt", { className: "wb-approvalLabel" }, row.label), h$64("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$64("p", { className: "wb-approvalWarn" }, warn));
999
+ }, 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));
1000
1000
  }
1001
1001
  //#endregion
1002
1002
  //#region ../shared/dist/components/CardHead.js
@@ -1013,47 +1013,47 @@ function ApprovalPlan({ rows, hint, warn, children }) {
1013
1013
  function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle }) {
1014
1014
  const refreshLabel = refreshing ? t("rightbar.refreshing") : t("rightbar.refresh");
1015
1015
  const platformLabel = platformTitle ?? platform ?? t("rightbar.openPlatform");
1016
- return h$64("header", { className: "wb-cardHead" }, h$64("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$64("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$64(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1016
+ 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, {
1017
1017
  side: "bottom",
1018
1018
  align: "end",
1019
1019
  gap: 6,
1020
1020
  portal: true,
1021
1021
  label: platformLabel
1022
- }, h$64("a", {
1022
+ }, h$67("a", {
1023
1023
  className: "wb-iconButton wb-cardOpen",
1024
1024
  href: platformHref,
1025
1025
  target: "_blank",
1026
1026
  rel: "noreferrer noopener",
1027
1027
  "aria-label": platform ?? platformLabel
1028
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$64(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1028
+ }, h$67(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$67(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1029
1029
  side: "bottom",
1030
1030
  align: "end",
1031
1031
  gap: 6,
1032
1032
  portal: true,
1033
1033
  label: refreshLabel
1034
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.Button, {
1034
+ }, h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
1035
1035
  type: "button",
1036
1036
  size: "sm",
1037
1037
  variant: "ghost",
1038
1038
  className: `wb-cardRefresh${refreshing ? " wb-spinning" : ""}`,
1039
1039
  "aria-label": refreshLabel,
1040
1040
  disabled: refreshing,
1041
- icon: h$64(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1041
+ icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1042
1042
  onClick: onRefresh
1043
- })), gear === void 0 || onToggleGear === void 0 ? null : h$64(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1043
+ })), gear === void 0 || onToggleGear === void 0 ? null : h$67(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1044
1044
  side: "bottom",
1045
1045
  align: "end",
1046
1046
  gap: 6,
1047
1047
  portal: true,
1048
1048
  label: gear
1049
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.Button, {
1049
+ }, h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
1050
1050
  type: "button",
1051
1051
  size: "sm",
1052
1052
  variant: "ghost",
1053
1053
  className: `wb-cardGear${gearOpen === true ? " wb-iconButtonActive" : ""}`,
1054
1054
  "aria-label": gear,
1055
1055
  "aria-expanded": gearOpen === true,
1056
- icon: h$64(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1056
+ icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1057
1057
  onClick: onToggleGear
1058
1058
  })));
1059
1059
  }
@@ -1070,13 +1070,13 @@ function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onTog
1070
1070
  * @returns 一个 `<section>`。
1071
1071
  */
1072
1072
  function Card({ t, title, refreshing, onRefresh, meta, head, children }) {
1073
- return h$64("section", { className: "wb-card" }, head === void 0 ? h$64(CardHead, {
1073
+ return h$67("section", { className: "wb-card" }, head === void 0 ? h$67(CardHead, {
1074
1074
  t,
1075
1075
  title,
1076
1076
  refreshing,
1077
1077
  onRefresh,
1078
1078
  meta
1079
- }) : head, h$64("div", { className: "wb-cardBody" }, children));
1079
+ }) : head, h$67("div", { className: "wb-cardBody" }, children));
1080
1080
  }
1081
1081
  var CardAnchor_module_default = { anchor: "_anchor_yq4s2_1" };
1082
1082
  //#endregion
@@ -1096,7 +1096,7 @@ function cardIdOf(unit) {
1096
1096
  * @returns 带 id 的占位 div。
1097
1097
  */
1098
1098
  function CardAnchor({ unit, children }) {
1099
- return h$64("div", {
1099
+ return h$67("div", {
1100
1100
  id: cardIdOf(unit),
1101
1101
  className: CardAnchor_module_default.anchor
1102
1102
  }, children);
@@ -1110,13 +1110,13 @@ function CardAnchor({ unit, children }) {
1110
1110
  * @returns 一枚 `StateDot state="ongoing"`,自身不带文字。
1111
1111
  */
1112
1112
  function Spinner({ size = 14, label }) {
1113
- return h$64("span", {
1113
+ return h$67("span", {
1114
1114
  className: "wb-spinner",
1115
1115
  ...label === void 0 ? { "aria-hidden": true } : {
1116
1116
  role: "status",
1117
1117
  "aria-label": label
1118
1118
  }
1119
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1119
+ }, h$67(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1120
1120
  state: "ongoing",
1121
1121
  size
1122
1122
  }));
@@ -1124,24 +1124,24 @@ function Spinner({ size = 14, label }) {
1124
1124
  //#endregion
1125
1125
  //#region ../shared/dist/components/ChoiceGroup.js
1126
1126
  function ChoiceMenu(input) {
1127
- const body = input.loading ? h$64("span", {
1127
+ const body = input.loading ? h$67("span", {
1128
1128
  className: "wb-choiceLoading",
1129
1129
  role: "status"
1130
- }, h$64(Spinner, { size: 14 }), h$64("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$64("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1130
+ }, 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) => {
1131
1131
  const row = input.rowOf(option.value);
1132
- return h$64(Fragment$22, { key: option.value }, h$64("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$64("input", {
1132
+ return h$67(Fragment$23, { key: option.value }, h$67("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$67("input", {
1133
1133
  className: input.multi ? "wb-checkbox" : "wb-radio",
1134
1134
  type: input.multi ? "checkbox" : "radio",
1135
1135
  name: input.name,
1136
1136
  checked: row.checked,
1137
1137
  disabled: input.disabled,
1138
1138
  onChange: row.onSelect
1139
- }), input.multi ? h$64("span", {
1139
+ }), input.multi ? h$67("span", {
1140
1140
  className: "wb-checkboxBox",
1141
1141
  "aria-hidden": "true"
1142
- }, row.checked ? h$64(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$64("span", { className: "wb-choiceLabel" }, h$64("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$64("span", { className: "wb-choiceDescription" }, option.description))));
1142
+ }, 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))));
1143
1143
  });
1144
- return h$64("div", {
1144
+ return h$67("div", {
1145
1145
  className: "wb-choiceMenu",
1146
1146
  "data-variant": input.variant,
1147
1147
  role: input.multi ? "group" : "radiogroup",
@@ -1175,7 +1175,7 @@ function ChoiceGroup(props) {
1175
1175
  if (props.multi === true) {
1176
1176
  const values = props.values;
1177
1177
  const onChange = props.onChange;
1178
- return h$64(ChoiceMenu, {
1178
+ return h$67(ChoiceMenu, {
1179
1179
  label: common.label,
1180
1180
  name: common.name,
1181
1181
  options: common.options,
@@ -1195,7 +1195,7 @@ function ChoiceGroup(props) {
1195
1195
  }
1196
1196
  const value = props.value;
1197
1197
  const onChange = props.onChange;
1198
- return h$64(ChoiceMenu, {
1198
+ return h$67(ChoiceMenu, {
1199
1199
  label: common.label,
1200
1200
  name: common.name,
1201
1201
  options: common.options,
@@ -1248,17 +1248,17 @@ function variantOf(kind) {
1248
1248
  function FormActions({ actions }) {
1249
1249
  if (actions.length === 0) return null;
1250
1250
  reportExtraPrimaries(actions);
1251
- return h$64("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1251
+ return h$67("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1252
1252
  const kind = kindOf(action);
1253
1253
  const busy = action.busy === true;
1254
- return h$64(_deepseek_ai_dsh_client_ui_primitives.Button, {
1254
+ return h$67(_deepseek_ai_dsh_client_ui_primitives.Button, {
1255
1255
  key: action.key,
1256
1256
  type: "button",
1257
1257
  size: "sm",
1258
1258
  variant: variantOf(kind),
1259
1259
  className: kind === "danger" ? "wb-formActionDanger" : void 0,
1260
1260
  disabled: busy || action.disabled === true,
1261
- icon: busy ? h$64(Spinner, { size: 12 }) : void 0,
1261
+ icon: busy ? h$67(Spinner, { size: 12 }) : void 0,
1262
1262
  onClick: action.onClick
1263
1263
  }, action.label);
1264
1264
  }));
@@ -1271,7 +1271,7 @@ function FormActions({ actions }) {
1271
1271
  * @returns 竖排的 div。
1272
1272
  */
1273
1273
  function Rows({ children }) {
1274
- return h$64("div", { className: "wb-rows" }, children);
1274
+ return h$67("div", { className: "wb-rows" }, children);
1275
1275
  }
1276
1276
  /**
1277
1277
  * 一行键值:左边名字、右边值;要成对说明一项数据就用它,别自己写两栏。
@@ -1280,7 +1280,7 @@ function Rows({ children }) {
1280
1280
  * @returns 一行两格。
1281
1281
  */
1282
1282
  function Row({ label, value }) {
1283
- return h$64("div", { className: "wb-row" }, h$64("span", { className: "wb-rowKey" }, label), h$64("span", { className: "wb-rowValue" }, value));
1283
+ return h$67("div", { className: "wb-row" }, h$67("span", { className: "wb-rowKey" }, label), h$67("span", { className: "wb-rowValue" }, value));
1284
1284
  }
1285
1285
  //#endregion
1286
1286
  //#region ../shared/dist/components/ConfirmBar.js
@@ -1297,19 +1297,19 @@ function Row({ label, value }) {
1297
1297
  * @returns 一个 `role="group"` 的条;`actions` 空数组时最后那一块不渲染。
1298
1298
  */
1299
1299
  function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
1300
- return h$64("div", {
1300
+ return h$67("div", {
1301
1301
  className: "wb-confirmBar",
1302
1302
  role: "group",
1303
1303
  "aria-label": label ?? (typeof title === "string" ? title : void 0),
1304
1304
  "aria-busy": busy
1305
- }, h$64("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$64("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$64(Rows, null, rows.map((row) => h$64(Row, {
1305
+ }, 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, {
1306
1306
  key: row.key,
1307
1307
  label: row.label,
1308
1308
  value: row.value
1309
- }))), problem === void 0 ? null : h$64(Note, {
1309
+ }))), problem === void 0 ? null : h$67(Note, {
1310
1310
  tone: "problem",
1311
1311
  role: "alert"
1312
- }, problem), h$64(FormActions, { actions }));
1312
+ }, problem), h$67(FormActions, { actions }));
1313
1313
  }
1314
1314
  //#endregion
1315
1315
  //#region ../shared/dist/components/Field.js
@@ -1321,7 +1321,7 @@ function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
1321
1321
  * @returns 一个 `<label>`,点标签会聚焦里面的控件。
1322
1322
  */
1323
1323
  function Field({ label, hint, children }) {
1324
- return h$64("label", { className: "wb-field" }, h$64("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$64("span", { className: "wb-fieldHint" }, hint));
1324
+ 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));
1325
1325
  }
1326
1326
  //#endregion
1327
1327
  //#region ../shared/dist/components/FormRows.js
@@ -1331,7 +1331,7 @@ function Field({ label, hint, children }) {
1331
1331
  * @returns 竖排的 div。
1332
1332
  */
1333
1333
  function FormRows({ children }) {
1334
- return h$64("div", { className: "wb-formRows" }, children);
1334
+ return h$67("div", { className: "wb-formRows" }, children);
1335
1335
  }
1336
1336
  /**
1337
1337
  * 表单一行:左边标签、右边控件,提示与错误占控件下面那一格。
@@ -1344,14 +1344,14 @@ function FormRows({ children }) {
1344
1344
  * @returns 一个 `<div>`:里面的 `<label>` 只包标签文字,不包控件、提示与整行的空白。
1345
1345
  */
1346
1346
  function FormRow({ label, htmlFor, hint, problem, layout = "inline", children }) {
1347
- return h$64("div", {
1347
+ return h$67("div", {
1348
1348
  className: "wb-formRow",
1349
1349
  "data-layout": layout,
1350
1350
  "data-wb-problem": problem === void 0 ? void 0 : ""
1351
- }, h$64("label", {
1351
+ }, h$67("label", {
1352
1352
  className: "wb-formLabel",
1353
1353
  htmlFor
1354
- }, label), h$64("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$64("span", { className: "wb-formHint" }, hint) : h$64("span", { className: "wb-formProblem" }, problem));
1354
+ }, 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));
1355
1355
  }
1356
1356
  //#endregion
1357
1357
  //#region ../shared/dist/components/FormNodes.js
@@ -1498,7 +1498,7 @@ function formActionsOf(args) {
1498
1498
  * @returns `FormRow` 组成的数组;没有可画的格子时给空数组。
1499
1499
  */
1500
1500
  function formRowsOf(args) {
1501
- return args.fields.map((field) => h$64(FormRow, {
1501
+ return args.fields.map((field) => h$67(FormRow, {
1502
1502
  key: field.key,
1503
1503
  label: field.label,
1504
1504
  htmlFor: controlIdOf(field.key),
@@ -1574,13 +1574,13 @@ function revealFirstProblem(root) {
1574
1574
  */
1575
1575
  function Form(props) {
1576
1576
  const { fields, onSubmit, submit, cancel, extra, busy = false, disabled = false, problem } = props;
1577
- const [done, setDone] = useState$36(false);
1578
- const [reveal, setReveal] = useState$36(0);
1579
- const rootRef = useRef$22(null);
1577
+ const [done, setDone] = useState$40(false);
1578
+ const [reveal, setReveal] = useState$40(0);
1579
+ const rootRef = useRef$24(null);
1580
1580
  const shown = visibleFieldsOf(fields);
1581
1581
  const problems = formProblemsOf(shown, done);
1582
1582
  reportDuplicateKeys(shown);
1583
- useEffect$28(() => {
1583
+ useEffect$30(() => {
1584
1584
  if (reveal === 0) return;
1585
1585
  const root = rootRef.current;
1586
1586
  if (root !== null) revealFirstProblem(root);
@@ -1595,7 +1595,7 @@ function Form(props) {
1595
1595
  }
1596
1596
  onSubmit(outcome.values);
1597
1597
  };
1598
- return h$64("form", {
1598
+ return h$67("form", {
1599
1599
  className: "wb-form",
1600
1600
  ref: rootRef,
1601
1601
  noValidate: true,
@@ -1603,15 +1603,15 @@ function Form(props) {
1603
1603
  event.preventDefault();
1604
1604
  submitForm();
1605
1605
  }
1606
- }, h$64(FormRows, null, formRowsOf({
1606
+ }, h$67(FormRows, null, formRowsOf({
1607
1607
  fields: shown,
1608
1608
  problems,
1609
1609
  showProblem: done,
1610
1610
  busy
1611
- })), problem === void 0 ? null : h$64(Note, {
1611
+ })), problem === void 0 ? null : h$67(Note, {
1612
1612
  tone: "problem",
1613
1613
  role: "alert"
1614
- }, problem), h$64(FormActions, { actions: formActionsOf({
1614
+ }, problem), h$67(FormActions, { actions: formActionsOf({
1615
1615
  extra,
1616
1616
  cancel,
1617
1617
  submit,
@@ -1632,7 +1632,7 @@ function Form(props) {
1632
1632
  * @returns 一个 `<a>`。
1633
1633
  */
1634
1634
  function Link({ href, children, title, external = true, className }) {
1635
- return h$64("a", {
1635
+ return h$67("a", {
1636
1636
  className: className === void 0 ? "wb-link" : `wb-link ${className}`,
1637
1637
  href,
1638
1638
  ...title === void 0 ? {} : { title },
@@ -1640,7 +1640,7 @@ function Link({ href, children, title, external = true, className }) {
1640
1640
  target: "_blank",
1641
1641
  rel: "noopener noreferrer"
1642
1642
  } : {}
1643
- }, children, external ? h$64(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1643
+ }, children, external ? h$67(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1644
1644
  }
1645
1645
  //#endregion
1646
1646
  //#region ../shared/dist/contract/long-task.js
@@ -1732,7 +1732,7 @@ var LONG_TASK_STOP_ARM_MS = 3e3;
1732
1732
  //#endregion
1733
1733
  //#region ../shared/dist/components/LongTaskRow.js
1734
1734
  function RowLink({ href, text }) {
1735
- return h$64(Link, {
1735
+ return h$67(Link, {
1736
1736
  href,
1737
1737
  className: "wb-longTaskLink"
1738
1738
  }, text);
@@ -1752,9 +1752,9 @@ function RowLink({ href, text }) {
1752
1752
  * @returns 一行长任务。
1753
1753
  */
1754
1754
  function LongTaskRow(props) {
1755
- const [stepsOpen, setStepsOpen] = useState$36(false);
1756
- const [rawOpen, setRawOpen] = useState$36(false);
1757
- const [armed, setArmed] = useState$36(false);
1755
+ const [stepsOpen, setStepsOpen] = useState$40(false);
1756
+ const [rawOpen, setRawOpen] = useState$40(false);
1757
+ const [armed, setArmed] = useState$40(false);
1758
1758
  const failed = props.status === "failed";
1759
1759
  const problem = props.problem ?? "";
1760
1760
  const raw = (props.raw ?? "").trim();
@@ -1762,7 +1762,7 @@ function LongTaskRow(props) {
1762
1762
  const stop = props.stop;
1763
1763
  const busy = stop?.busy === true;
1764
1764
  const stopWhy = stop?.failed ?? "";
1765
- useEffect$28(() => {
1765
+ useEffect$30(() => {
1766
1766
  if (!armed) return void 0;
1767
1767
  const timer = setTimeout(() => setArmed(false), LONG_TASK_STOP_ARM_MS);
1768
1768
  return () => clearTimeout(timer);
@@ -1781,14 +1781,14 @@ function LongTaskRow(props) {
1781
1781
  setArmed(false);
1782
1782
  stop.onStop();
1783
1783
  };
1784
- return h$64("div", { className: "wb-longTask" }, h$64("p", { className: "wb-longTaskHead" }, h$64(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1784
+ return h$67("div", { className: "wb-longTask" }, h$67("p", { className: "wb-longTaskHead" }, h$67(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1785
1785
  state: longTaskDot(props.status),
1786
1786
  size: 10
1787
- }), h$64("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$64(RowLink, {
1787
+ }), h$67("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$67(RowLink, {
1788
1788
  href: link.href,
1789
1789
  key: `${link.text}@${link.href}`,
1790
1790
  text: link.text
1791
- })), stop === void 0 ? null : h$64("button", {
1791
+ })), stop === void 0 ? null : h$67("button", {
1792
1792
  type: "button",
1793
1793
  className: `wb-longTaskStop${armed ? " wb-longTaskStopArmed" : ""}`,
1794
1794
  "data-stop-state": longTaskStopStage({
@@ -1799,31 +1799,31 @@ function LongTaskRow(props) {
1799
1799
  disabled: busy,
1800
1800
  onClick: onStopPress,
1801
1801
  onBlur: () => setArmed(false)
1802
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$64("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$64("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$64("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$64(Fragment$22, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$64(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1802
+ }, 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, {
1803
1803
  className: "wb-longTaskDump",
1804
- icon: h$64(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1804
+ icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1805
1805
  title: props.stepsTitle,
1806
1806
  open: stepsOpen,
1807
1807
  expandable: true,
1808
1808
  expandOnRowClick: true,
1809
1809
  previewChevron: true,
1810
1810
  onToggle: () => setStepsOpen(!stepsOpen)
1811
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1811
+ }, h$67(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1812
1812
  code: steps.join("\n"),
1813
1813
  className: "wb-longTaskDump",
1814
1814
  showHeader: props.copyLabel !== void 0,
1815
1815
  copyLabel: props.copyLabel ?? "",
1816
1816
  copiedLabel: props.copiedLabel ?? ""
1817
- })), raw === "" || props.rawTitle === void 0 ? null : h$64(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1817
+ })), raw === "" || props.rawTitle === void 0 ? null : h$67(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1818
1818
  className: "wb-longTaskDump",
1819
- icon: h$64(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1819
+ icon: h$67(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1820
1820
  title: props.rawTitle,
1821
1821
  open: rawOpen,
1822
1822
  expandable: true,
1823
1823
  expandOnRowClick: true,
1824
1824
  previewChevron: true,
1825
1825
  onToggle: () => setRawOpen(!rawOpen)
1826
- }, h$64(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1826
+ }, h$67(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1827
1827
  code: raw,
1828
1828
  className: "wb-longTaskDump",
1829
1829
  showHeader: props.copyLabel !== void 0,
@@ -1839,13 +1839,13 @@ function LongTaskRow(props) {
1839
1839
  * @returns 一叠占位条。
1840
1840
  */
1841
1841
  function SkeletonRows({ rows = 4 }) {
1842
- return h$64("div", {
1842
+ return h$67("div", {
1843
1843
  className: "wb-skeleton",
1844
1844
  "aria-hidden": "true"
1845
- }, Array.from({ length: rows }, (_, index) => h$64("span", {
1845
+ }, Array.from({ length: rows }, (_, index) => h$67("span", {
1846
1846
  key: index,
1847
1847
  className: "wb-skeletonRow"
1848
- }, h$64("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$64("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1848
+ }, h$67("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$67("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1849
1849
  }
1850
1850
  /**
1851
1851
  * 居中一屏:要他先选一个 / 正在读 / 读不到时用它占住卡片版面。
@@ -1858,13 +1858,13 @@ function SkeletonRows({ rows = 4 }) {
1858
1858
  * @returns 一个 `role="status"` 的居中块。
1859
1859
  */
1860
1860
  function CenteredState({ icon, title, hint, detail, action, compact = false }) {
1861
- return h$64("div", {
1861
+ return h$67("div", {
1862
1862
  className: compact ? "wb-centered wb-centeredCompact" : "wb-centered",
1863
1863
  role: "status"
1864
- }, icon === null ? null : h$64("span", {
1864
+ }, icon === null ? null : h$67("span", {
1865
1865
  className: "wb-centeredHero",
1866
1866
  "aria-hidden": "true"
1867
- }, icon), h$64("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$64("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$64("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$64("div", { className: "wb-centeredAction" }, action));
1867
+ }, 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));
1868
1868
  }
1869
1869
  /**
1870
1870
  * 就绪但空:它只是 `CenteredState` 的简写,标题就是那句空态文案。
@@ -1874,7 +1874,7 @@ function CenteredState({ icon, title, hint, detail, action, compact = false }) {
1874
1874
  * @returns 一个居中块。
1875
1875
  */
1876
1876
  function EmptyState({ text, icon = null, compact = false }) {
1877
- return h$64(CenteredState, {
1877
+ return h$67(CenteredState, {
1878
1878
  icon,
1879
1879
  title: text,
1880
1880
  compact
@@ -1892,7 +1892,7 @@ function EmptyState({ text, icon = null, compact = false }) {
1892
1892
  * @returns 一组按钮。
1893
1893
  */
1894
1894
  function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
1895
- return h$64(FormActions, { actions: [{
1895
+ return h$67(FormActions, { actions: [{
1896
1896
  key: "cancel",
1897
1897
  label: labels.cancel,
1898
1898
  kind: "default",
@@ -1925,7 +1925,7 @@ function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
1925
1925
  * @returns 一颗 `<button>`。
1926
1926
  */
1927
1927
  function selectTriggerNode(args) {
1928
- return h$64("button", {
1928
+ return h$67("button", {
1929
1929
  type: "button",
1930
1930
  id: args.id,
1931
1931
  className: args.className,
@@ -1936,7 +1936,7 @@ function selectTriggerNode(args) {
1936
1936
  "aria-label": args.ariaLabel,
1937
1937
  title: args.title,
1938
1938
  onClick: args.onOpen
1939
- }, args.iconOnly ? h$64("span", { className: "wb-selectIcon" }, args.icon) : h$64(Fragment$22, null, args.icon === void 0 ? null : h$64("span", { className: "wb-selectIcon" }, args.icon), h$64("span", { className: "wb-selectValue" }, args.value), h$64("span", { className: "wb-selectChevron" }, h$64(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1939
+ }, 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 }))));
1940
1940
  }
1941
1941
  /**
1942
1942
  * 名单还没读到时的触发器:禁用 + `aria-busy` 的按钮,`SelectField` 在 `loading` 那档画它。
@@ -1948,7 +1948,7 @@ function selectTriggerNode(args) {
1948
1948
  * @returns 一颗禁用且 `aria-busy` 的按钮。
1949
1949
  */
1950
1950
  function selectLoadingNode(args) {
1951
- return h$64("button", {
1951
+ return h$67("button", {
1952
1952
  type: "button",
1953
1953
  id: args.id,
1954
1954
  className: `${args.className} wb-selectLoading`,
@@ -1957,7 +1957,7 @@ function selectLoadingNode(args) {
1957
1957
  "aria-invalid": args.invalid || void 0,
1958
1958
  "aria-label": args.ariaLabel,
1959
1959
  title: args.loadingText
1960
- }, h$64("span", { className: "wb-selectValue" }, h$64(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$64("span", { className: "wb-selectChevron" }, h$64(Spinner, { size: 14 })));
1960
+ }, 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 })));
1961
1961
  }
1962
1962
  //#endregion
1963
1963
  //#region ../shared/dist/components/TextField.js
@@ -1967,7 +1967,7 @@ function selectLoadingNode(args) {
1967
1967
  * @returns 输入框元素;`className` 是追加在基础类名之后,而不是替换它。
1968
1968
  */
1969
1969
  function TextField({ invalid = false, className, ...rest }) {
1970
- return h$64("input", {
1970
+ return h$67("input", {
1971
1971
  ...rest,
1972
1972
  className: className === void 0 ? "wb-textField" : `wb-textField ${className}`,
1973
1973
  "aria-invalid": invalid || void 0
@@ -1990,7 +1990,7 @@ function itemOf(option, revealId) {
1990
1990
  ...option.icon === void 0 ? {} : { icon: option.icon },
1991
1991
  ...option.disabled === true ? { disabled: true } : {}
1992
1992
  };
1993
- const revealed = (node) => h$64("span", {
1993
+ const revealed = (node) => h$67("span", {
1994
1994
  className: "wb-selectReveal",
1995
1995
  "data-wb-select-reveal": ""
1996
1996
  }, node);
@@ -2006,20 +2006,20 @@ function revealNode() {
2006
2006
  return found instanceof HTMLElement ? found : null;
2007
2007
  }
2008
2008
  function useRevealOnOpen(open, revealId) {
2009
- useEffect$28(() => {
2009
+ useEffect$30(() => {
2010
2010
  if (!open || revealId === void 0) return;
2011
2011
  revealNode()?.scrollIntoView({ block: "nearest" });
2012
2012
  }, [open, revealId]);
2013
2013
  }
2014
2014
  function selectValueNode(current, renderValue, placeholder) {
2015
- if (current === void 0) return h$64("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2015
+ if (current === void 0) return h$67("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2016
2016
  return renderValue === void 0 ? current.label : renderValue(current);
2017
2017
  }
2018
2018
  function searchNode(args) {
2019
- return h$64("span", {
2019
+ return h$67("span", {
2020
2020
  ref: args.boxRef,
2021
2021
  className: args.className
2022
- }, h$64("span", { className: "wb-selectSearchIcon" }, h$64(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$64(TextField, {
2022
+ }, h$67("span", { className: "wb-selectSearchIcon" }, h$67(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$67(TextField, {
2023
2023
  id: args.id,
2024
2024
  name: args.name,
2025
2025
  className: "wb-selectSearchInput",
@@ -2034,7 +2034,7 @@ function searchNode(args) {
2034
2034
  }));
2035
2035
  }
2036
2036
  function menuNode(args) {
2037
- return h$64(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2037
+ return h$67(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2038
2038
  open: args.open,
2039
2039
  portal: true,
2040
2040
  className: "wb-selectAnchor",
@@ -2051,11 +2051,11 @@ function menuNode(args) {
2051
2051
  });
2052
2052
  }
2053
2053
  function framed(label, hint, className, control) {
2054
- const inner = label === void 0 ? hint === void 0 ? control : h$64("span", { className: "wb-select" }, control, h$64("span", { className: "wb-selectHint" }, hint)) : h$64(Field, {
2054
+ 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, {
2055
2055
  label,
2056
2056
  hint
2057
2057
  }, control);
2058
- return className === void 0 ? inner : h$64("div", { className }, inner);
2058
+ return className === void 0 ? inner : h$67("div", { className }, inner);
2059
2059
  }
2060
2060
  /** 算候选项用来匹配搜索的文本:有 `searchText` 就用它,否则取字符串标签;标签不是字符串又没给它是空串(这项搜不到)。 */
2061
2061
  function searchTextOf(option) {
@@ -2107,24 +2107,24 @@ function selectEntries(shown, emptyText, revealId) {
2107
2107
  }
2108
2108
  function useSelectState(props) {
2109
2109
  const { options, filter = defaultSelectFilter, emptyText, open: openProp, onOpenChange } = props;
2110
- const [openState, setOpenState] = useState$36(false);
2111
- const [query, setQuery] = useState$36("");
2112
- const [cursor, setCursor] = useState$36(null);
2113
- const boxRef = useRef$22(null);
2114
- const triggerRef = useRef$22(null);
2115
- const wasOpenRef = useRef$22(false);
2116
- const pickedRef = useRef$22(false);
2117
- const closedByUsRef = useRef$22(false);
2110
+ const [openState, setOpenState] = useState$40(false);
2111
+ const [query, setQuery] = useState$40("");
2112
+ const [cursor, setCursor] = useState$40(null);
2113
+ const boxRef = useRef$24(null);
2114
+ const triggerRef = useRef$24(null);
2115
+ const wasOpenRef = useRef$24(false);
2116
+ const pickedRef = useRef$24(false);
2117
+ const closedByUsRef = useRef$24(false);
2118
2118
  const open = openProp ?? openState;
2119
2119
  const setOpen = (next) => {
2120
2120
  if (openProp === void 0) setOpenState(next);
2121
2121
  onOpenChange?.(next);
2122
2122
  };
2123
- useEffect$28(() => {
2123
+ useEffect$30(() => {
2124
2124
  if (!open || props.search === false) return;
2125
2125
  boxRef.current?.querySelector("input")?.focus();
2126
2126
  }, [open, props.search]);
2127
- useEffect$28(() => {
2127
+ useEffect$30(() => {
2128
2128
  if (open) {
2129
2129
  wasOpenRef.current = true;
2130
2130
  return;
@@ -2138,7 +2138,7 @@ function useSelectState(props) {
2138
2138
  if (!closedByUs || picked) return;
2139
2139
  triggerRef.current?.focus();
2140
2140
  }, [open]);
2141
- const shown = useMemo$9(() => filterSelectOptions(options, query, filter), [
2141
+ const shown = useMemo$10(() => filterSelectOptions(options, query, filter), [
2142
2142
  options,
2143
2143
  query,
2144
2144
  filter
@@ -2194,7 +2194,7 @@ function SelectField(props) {
2194
2194
  ariaLabel,
2195
2195
  loadingText
2196
2196
  }));
2197
- if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$64(TextField, {
2197
+ if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$67(TextField, {
2198
2198
  id,
2199
2199
  name,
2200
2200
  className: "wb-selectFallback",
@@ -2277,11 +2277,11 @@ function SelectField(props) {
2277
2277
  * @returns 一个 `role="group"` 的 section。
2278
2278
  */
2279
2279
  function SettingsSection({ label, title, action, children }) {
2280
- return h$64("section", {
2280
+ return h$67("section", {
2281
2281
  className: "wb-settings",
2282
2282
  role: "group",
2283
2283
  "aria-label": label
2284
- }, h$64("header", { className: "wb-settingsHead" }, h$64("span", { className: "wb-settingsTitle" }, title), action), children);
2284
+ }, h$67("header", { className: "wb-settingsHead" }, h$67("span", { className: "wb-settingsTitle" }, title), action), children);
2285
2285
  }
2286
2286
  //#endregion
2287
2287
  //#region ../shared/dist/components/Stack.js
@@ -2291,7 +2291,7 @@ function SettingsSection({ label, title, action, children }) {
2291
2291
  * @returns 竖排的 div。
2292
2292
  */
2293
2293
  function Stack({ children }) {
2294
- return h$64("div", { className: "wb-stack" }, children);
2294
+ return h$67("div", { className: "wb-stack" }, children);
2295
2295
  }
2296
2296
  //#endregion
2297
2297
  //#region ../shared/dist/components/StateBlock.js
@@ -2306,12 +2306,12 @@ function Stack({ children }) {
2306
2306
  * @returns 一个 div。
2307
2307
  */
2308
2308
  function StateBlock({ title, dot, hint, actions, resolving, children }) {
2309
- return h$64("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$64("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$64("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$64("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$64("div", { className: "wb-stateBlockActions" }, actions));
2309
+ 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));
2310
2310
  }
2311
2311
  //#endregion
2312
2312
  //#region ../shared/dist/components/icons.js
2313
2313
  function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
2314
- return h$64("svg", {
2314
+ return h$67("svg", {
2315
2315
  width: size,
2316
2316
  height: size,
2317
2317
  viewBox,
@@ -2328,10 +2328,10 @@ function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
2328
2328
  * @returns 一枚 `aria-hidden` 的 svg。
2329
2329
  */
2330
2330
  function IconConversation({ size = 16 }) {
2331
- return h$64(Shell, {
2331
+ return h$67(Shell, {
2332
2332
  size,
2333
2333
  strokeWidth: 1.3
2334
- }, h$64("path", {
2334
+ }, h$67("path", {
2335
2335
  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",
2336
2336
  stroke: "currentColor",
2337
2337
  strokeLinejoin: "round"
@@ -2346,30 +2346,30 @@ var BRAND_TAIL_TRANSFORM = "translate(14.6263 10.5853) scale(1.95)";
2346
2346
  * @returns 一枚 `aria-hidden` 的 svg。
2347
2347
  */
2348
2348
  function IconBrandMark({ size = 24 }) {
2349
- return h$64(Shell, {
2349
+ return h$67(Shell, {
2350
2350
  size,
2351
2351
  viewBox: "0 0 64 64"
2352
- }, h$64("path", {
2352
+ }, h$67("path", {
2353
2353
  d: BRAND_FRAME,
2354
2354
  fill: "currentColor",
2355
2355
  fillRule: "evenodd"
2356
- }), h$64("rect", {
2356
+ }), h$67("rect", {
2357
2357
  x: 27.5,
2358
2358
  y: 48,
2359
2359
  width: 9,
2360
2360
  height: 4.75,
2361
2361
  fill: "currentColor"
2362
- }), h$64("rect", {
2362
+ }), h$67("rect", {
2363
2363
  x: 19,
2364
2364
  y: 52.75,
2365
2365
  width: 26,
2366
2366
  height: 4.75,
2367
2367
  rx: 2.375,
2368
2368
  fill: "currentColor"
2369
- }), h$64("g", { transform: BRAND_TAIL_TRANSFORM }, h$64("path", {
2369
+ }), h$67("g", { transform: BRAND_TAIL_TRANSFORM }, h$67("path", {
2370
2370
  d: BRAND_TAIL,
2371
2371
  fill: "currentColor"
2372
- }), h$64("circle", {
2372
+ }), h$67("circle", {
2373
2373
  cx: 6.885,
2374
2374
  cy: 13.742,
2375
2375
  r: 1.95,
@@ -2382,30 +2382,30 @@ function IconBrandMark({ size = 24 }) {
2382
2382
  * @returns 一枚 `aria-hidden` 的 svg。
2383
2383
  */
2384
2384
  function IconOpencli({ size = 16 }) {
2385
- return h$64(Shell, {
2385
+ return h$67(Shell, {
2386
2386
  size,
2387
2387
  viewBox: "0 0 64 64"
2388
- }, h$64("defs", null, h$64("linearGradient", {
2388
+ }, h$67("defs", null, h$67("linearGradient", {
2389
2389
  id: "opencli-mark",
2390
2390
  x1: "0%",
2391
2391
  y1: "0%",
2392
2392
  x2: "100%",
2393
2393
  y2: "100%"
2394
- }, h$64("stop", {
2394
+ }, h$67("stop", {
2395
2395
  offset: "0%",
2396
2396
  stopColor: "#00e5a0"
2397
- }), h$64("stop", {
2397
+ }), h$67("stop", {
2398
2398
  offset: "50%",
2399
2399
  stopColor: "#00b4d8"
2400
- }), h$64("stop", {
2400
+ }), h$67("stop", {
2401
2401
  offset: "100%",
2402
2402
  stopColor: "#7b61ff"
2403
- }))), h$64("rect", {
2403
+ }))), h$67("rect", {
2404
2404
  width: 64,
2405
2405
  height: 64,
2406
2406
  rx: 14,
2407
2407
  fill: "#0a0a0f"
2408
- }), h$64("text", {
2408
+ }), h$67("text", {
2409
2409
  x: "50%",
2410
2410
  y: "54%",
2411
2411
  dominantBaseline: "middle",
@@ -2422,10 +2422,10 @@ function IconOpencli({ size = 16 }) {
2422
2422
  * @returns 一枚 `aria-hidden` 的 svg。
2423
2423
  */
2424
2424
  function IconNpm({ size = 16 }) {
2425
- return h$64(Shell, {
2425
+ return h$67(Shell, {
2426
2426
  size,
2427
2427
  viewBox: "0 0 1024 1024"
2428
- }, h$64("path", {
2428
+ }, h$67("path", {
2429
2429
  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",
2430
2430
  fill: "#CB3837"
2431
2431
  }));
@@ -2436,37 +2436,37 @@ function IconNpm({ size = 16 }) {
2436
2436
  * @returns 一枚 `aria-hidden` 的 svg。
2437
2437
  */
2438
2438
  function IconModuleMark({ size = 16 }) {
2439
- return h$64(Shell, {
2439
+ return h$67(Shell, {
2440
2440
  size,
2441
2441
  viewBox: "0 0 24 24"
2442
- }, h$64("defs", null, h$64("linearGradient", {
2442
+ }, h$67("defs", null, h$67("linearGradient", {
2443
2443
  id: "workbench-module-mark",
2444
2444
  x1: "0%",
2445
2445
  y1: "0%",
2446
2446
  x2: "100%",
2447
2447
  y2: "100%"
2448
- }, h$64("stop", {
2448
+ }, h$67("stop", {
2449
2449
  offset: "0%",
2450
2450
  stopColor: "#3b82f6"
2451
- }), h$64("stop", {
2451
+ }), h$67("stop", {
2452
2452
  offset: "55%",
2453
2453
  stopColor: "#8b5cf6"
2454
- }), h$64("stop", {
2454
+ }), h$67("stop", {
2455
2455
  offset: "100%",
2456
2456
  stopColor: "#14b8a6"
2457
- }))), h$64("rect", {
2457
+ }))), h$67("rect", {
2458
2458
  width: 24,
2459
2459
  height: 24,
2460
2460
  rx: 7,
2461
2461
  fill: "url(#workbench-module-mark)"
2462
- }), h$64("rect", {
2462
+ }), h$67("rect", {
2463
2463
  x: "4.6",
2464
2464
  y: "4.6",
2465
2465
  width: "6.2",
2466
2466
  height: "6.2",
2467
2467
  rx: "1.9",
2468
2468
  fill: "#ffffff"
2469
- }), h$64("rect", {
2469
+ }), h$67("rect", {
2470
2470
  x: "13.2",
2471
2471
  y: "4.6",
2472
2472
  width: "6.2",
@@ -2474,7 +2474,7 @@ function IconModuleMark({ size = 16 }) {
2474
2474
  rx: "1.9",
2475
2475
  fill: "#ffffff",
2476
2476
  fillOpacity: .78
2477
- }), h$64("rect", {
2477
+ }), h$67("rect", {
2478
2478
  x: "4.6",
2479
2479
  y: "13.2",
2480
2480
  width: "6.2",
@@ -2482,7 +2482,7 @@ function IconModuleMark({ size = 16 }) {
2482
2482
  rx: "1.9",
2483
2483
  fill: "#ffffff",
2484
2484
  fillOpacity: .78
2485
- }), h$64("rect", {
2485
+ }), h$67("rect", {
2486
2486
  x: "13.2",
2487
2487
  y: "13.2",
2488
2488
  width: "6.2",
@@ -2497,7 +2497,7 @@ function IconModuleMark({ size = 16 }) {
2497
2497
  * @returns 一枚 `aria-hidden` 的 svg。
2498
2498
  */
2499
2499
  function IconPanelScreen({ size = 16 }) {
2500
- return h$64("svg", {
2500
+ return h$67("svg", {
2501
2501
  width: size,
2502
2502
  height: size,
2503
2503
  viewBox: "0 0 1024 1024",
@@ -2508,7 +2508,7 @@ function IconPanelScreen({ size = 16 }) {
2508
2508
  display: "block",
2509
2509
  overflow: "hidden"
2510
2510
  }
2511
- }, h$64("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" }));
2511
+ }, 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" }));
2512
2512
  }
2513
2513
  //#endregion
2514
2514
  //#region ../shared/dist/config/storage.js
@@ -3097,6 +3097,7 @@ var en = {
3097
3097
  "panels.market.confirmUninstallAck": "I understand: using it again means reinstalling it.",
3098
3098
  "panels.market.confirmYes": "Uninstall",
3099
3099
  "panels.market.confirmNo": "Cancel",
3100
+ "panels.market.noMarketSource": "The index has no newer version of this module (refresh the index and retry)",
3100
3101
  "panels.market.failed": "Failed: {reason}",
3101
3102
  "panels.market.needEnv": "Set {env} in the terminal that started the workbench first",
3102
3103
  "panels.market.needCommands": "Missing commands: {commands}",
@@ -3133,8 +3134,9 @@ var en = {
3133
3134
  "panels.market.pluginBroken": "This plugin install is broken: it cannot be identified. Uninstall it first, then ask the agent to reinstall it by package name.",
3134
3135
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
3135
3136
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
3136
- "panels.market.recheck": "Check for updates",
3137
3137
  "panels.market.checkUpdates": "Check for updates",
3138
+ "panels.market.checkingNow": "Checking…",
3139
+ "panels.market.checkFailed": "The last check failed. Check your connection and retry.",
3138
3140
  "panels.market.checkedAt": "Last checked: {time}",
3139
3141
  "panels.market.justNow": "just now",
3140
3142
  "panels.market.minutesAgo": "{n} min ago",
@@ -3198,6 +3200,7 @@ var en = {
3198
3200
  "panels.market.add.failurePnpmMissing": "pnpm was not found, cannot install",
3199
3201
  "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.",
3200
3202
  "panels.market.add.failureGeneric": "Something went wrong during install — see the install details",
3203
+ "panels.market.add.failureCredentials": "This repository needs credentials: this machine has none for it. Clone it once in a terminal, set up a credential helper, or install from the SSH address.",
3201
3204
  "panels.market.add.approveTitle": "Your approval is needed for install scripts",
3202
3205
  "panels.market.add.approveCaution": "Only allow packages you trust: install scripts run on this machine with your permissions.",
3203
3206
  "panels.market.add.approveRun": "Allow and continue installing",
@@ -3270,6 +3273,7 @@ var en = {
3270
3273
  "panels.discover.noSourceHint": "Add a module market index (http address or git repository) to browse and install its modules here",
3271
3274
  "panels.discover.sourcesFailed": "Could not read the index sources.",
3272
3275
  "panels.discover.unreadable": "Could not read this index.",
3276
+ "panels.discover.sourceAuth": "This index source could not be read: this machine has no git credentials for it. Set up credentials (or switch the source to its SSH address), then refresh.",
3273
3277
  "panels.discover.invalid": "This index is not in a valid format.",
3274
3278
  "panels.discover.emptyRepo": "This repository has no commits yet.",
3275
3279
  "panels.discover.missingIndex": "This repository has no {path} yet.",
@@ -3293,8 +3297,26 @@ var en = {
3293
3297
  "panels.discover.badShellDetail": "This version is not compatible with the running workbench {current}; it requires {peer}",
3294
3298
  "panels.discover.unverified": "Workbench unverified",
3295
3299
  "panels.discover.installing": "Installing…",
3300
+ "panels.discover.installingNamed": "Installing {name}…",
3301
+ "panels.discover.cancelInstall": "Cancel install",
3302
+ "panels.discover.cancelling": "Cancelling…",
3303
+ "panels.discover.installCancelled": "Install cancelled: {name}",
3296
3304
  "panels.discover.installedDone": "Installed: {name}",
3297
3305
  "panels.discover.failed": "Failed: {reason}",
3306
+ "panels.discover.transportTitle": "Where to read this repository",
3307
+ "panels.discover.transportSsh": "SSH",
3308
+ "panels.discover.transportHttps": "HTTPS",
3309
+ "panels.discover.transportOk": "Readable",
3310
+ "panels.discover.transportAuth": "Needs credentials",
3311
+ "panels.discover.transportUnreachable": "Unreachable",
3312
+ "panels.discover.transportUnknown": "Not probed",
3313
+ "panels.discover.transportChecking": "Checking…",
3314
+ "panels.discover.transportTest": "Test this address",
3315
+ "panels.discover.transportPlaceholder": "Or paste another address (mirror, alias)",
3316
+ "panels.discover.transportNeedsAuth": "This repository needs credentials: clone it once in a terminal, or set up an SSH key / credential helper, then install again.",
3317
+ "panels.discover.transportChange": "Change address",
3318
+ "panels.discover.transportChangeHide": "Hide",
3319
+ "panels.discover.transportNone": "No readable address",
3298
3320
  "panels.discover.expand": "Show versions",
3299
3321
  "panels.discover.collapse": "Hide versions",
3300
3322
  "panels.discover.versionCount": "{n} versions",
@@ -3775,6 +3797,7 @@ var dictionaries = {
3775
3797
  "panels.market.confirmUninstallAck": "我明白:卸载后想再用,得重新装一遍。",
3776
3798
  "panels.market.confirmYes": "卸载",
3777
3799
  "panels.market.confirmNo": "取消",
3800
+ "panels.market.noMarketSource": "索引里没有这个模块的新版本(刷新一次索引再试)",
3778
3801
  "panels.market.failed": "没成功:{reason}",
3779
3802
  "panels.market.needEnv": "先在启动工作台的终端里设 {env}",
3780
3803
  "panels.market.needCommands": "缺这几条命令:{commands}",
@@ -3811,8 +3834,9 @@ var dictionaries = {
3811
3834
  "panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
3812
3835
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
3813
3836
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
3814
- "panels.market.recheck": "重新检查更新",
3815
3837
  "panels.market.checkUpdates": "检查更新",
3838
+ "panels.market.checkingNow": "正在检查…",
3839
+ "panels.market.checkFailed": "最近一次没查到,检查网络后重试",
3816
3840
  "panels.market.checkedAt": "最近检查:{time}",
3817
3841
  "panels.market.justNow": "刚刚",
3818
3842
  "panels.market.minutesAgo": "{n} 分钟前",
@@ -3876,6 +3900,7 @@ var dictionaries = {
3876
3900
  "panels.market.add.failurePnpmMissing": "没有找到 pnpm,无法安装",
3877
3901
  "panels.market.add.failureInstalled": "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。",
3878
3902
  "panels.market.add.failureGeneric": "安装过程中出错,原因见安装详情",
3903
+ "panels.market.add.failureCredentials": "这个仓库要凭证:本机没有它的 git 凭据。先在终端里 clone 一次、配好凭据助手,或改用 SSH 地址,再装一次。",
3879
3904
  "panels.market.add.approveTitle": "需要你允许安装脚本",
3880
3905
  "panels.market.add.approveCaution": "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。",
3881
3906
  "panels.market.add.approveRun": "允许并继续安装",
@@ -3948,6 +3973,7 @@ var dictionaries = {
3948
3973
  "panels.discover.noSourceHint": "添加一个模块市场索引(http 地址或 git 仓库),即可在这里浏览和安装其中的模块",
3949
3974
  "panels.discover.sourcesFailed": "无法读取索引源",
3950
3975
  "panels.discover.unreadable": "无法读取此索引",
3976
+ "panels.discover.sourceAuth": "这个索引源读不了:本机没有它的 git 凭据。配好凭据(或在源里改用 SSH 地址),再点右上角的刷新。",
3951
3977
  "panels.discover.invalid": "此索引的格式无效",
3952
3978
  "panels.discover.emptyRepo": "这个仓库还没有任何提交",
3953
3979
  "panels.discover.missingIndex": "仓库里还没有索引文件 {path}",
@@ -3971,8 +3997,26 @@ var dictionaries = {
3971
3997
  "panels.discover.badShellDetail": "此版本与当前的工作台 {current} 不兼容,它要求 {peer}",
3972
3998
  "panels.discover.unverified": "工作台未验证",
3973
3999
  "panels.discover.installing": "正在安装…",
4000
+ "panels.discover.installingNamed": "正在安装「{name}」…",
4001
+ "panels.discover.cancelInstall": "取消安装",
4002
+ "panels.discover.cancelling": "正在取消…",
4003
+ "panels.discover.installCancelled": "已取消安装:{name}",
3974
4004
  "panels.discover.installedDone": "装好了:{name}",
3975
4005
  "panels.discover.failed": "操作失败:{reason}",
4006
+ "panels.discover.transportTitle": "从哪读这个仓库",
4007
+ "panels.discover.transportSsh": "SSH",
4008
+ "panels.discover.transportHttps": "HTTPS",
4009
+ "panels.discover.transportOk": "能读",
4010
+ "panels.discover.transportAuth": "要凭证",
4011
+ "panels.discover.transportUnreachable": "连不上",
4012
+ "panels.discover.transportUnknown": "没探成",
4013
+ "panels.discover.transportChecking": "正在探测…",
4014
+ "panels.discover.transportTest": "试这个地址",
4015
+ "panels.discover.transportPlaceholder": "或贴一个别的地址(公司镜像、别名)",
4016
+ "panels.discover.transportNeedsAuth": "这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。",
4017
+ "panels.discover.transportChange": "换一个地址",
4018
+ "panels.discover.transportChangeHide": "收起",
4019
+ "panels.discover.transportNone": "没有可读的地址",
3976
4020
  "panels.discover.expand": "展开版本",
3977
4021
  "panels.discover.collapse": "收起版本",
3978
4022
  "panels.discover.versionCount": "{n} 个版本",
@@ -4388,6 +4432,99 @@ function marketInstallTarget(name, version, source) {
4388
4432
  return { spec: path === "" ? base : `${base}&path:/${path}` };
4389
4433
  }
4390
4434
  //#endregion
4435
+ //#region ../shared/dist/lib/git-address.js
4436
+ var SCP = /^(?:([A-Za-z0-9._-]+)@)?([A-Za-z0-9.-]+):(?!\/)(\S+)$/;
4437
+ function bare(url) {
4438
+ return url.trim().replace(/^git\+/, "");
4439
+ }
4440
+ function pathOf(pathname) {
4441
+ return pathname.replace(/^\/+/, "").replace(/\/+$/, "");
4442
+ }
4443
+ /**
4444
+ * 把一个 git 地址拆成「哪台主机 + 哪个路径」,不管发布者当初用的是 https、ssh 还是
4445
+ * scp 那种 `git@host:path` 写法;认不出来给 undefined。
4446
+ */
4447
+ function gitAddressOf(url) {
4448
+ const text = bare(url);
4449
+ if (text === "") return void 0;
4450
+ if (text.includes("://")) {
4451
+ let parsed;
4452
+ try {
4453
+ parsed = new URL(text);
4454
+ } catch {
4455
+ return;
4456
+ }
4457
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:" && parsed.protocol !== "ssh:") return;
4458
+ const path = pathOf(parsed.pathname);
4459
+ if (path === "") return void 0;
4460
+ const port = parsed.port === "" ? void 0 : Number(parsed.port);
4461
+ const shared = {
4462
+ host: parsed.hostname,
4463
+ path,
4464
+ ...port === void 0 ? {} : { port }
4465
+ };
4466
+ if (parsed.protocol !== "ssh:") return {
4467
+ kind: "https",
4468
+ ...shared
4469
+ };
4470
+ return {
4471
+ kind: "ssh",
4472
+ ...shared,
4473
+ ...parsed.username === "" ? {} : { user: parsed.username }
4474
+ };
4475
+ }
4476
+ const scp = SCP.exec(text);
4477
+ if (scp === null) return void 0;
4478
+ const path = pathOf(scp[3] ?? "");
4479
+ if (path === "") return void 0;
4480
+ return {
4481
+ kind: "ssh",
4482
+ host: scp[2] ?? "",
4483
+ path,
4484
+ ...scp[1] === void 0 ? {} : { user: scp[1] }
4485
+ };
4486
+ }
4487
+ /** 一份地址的规范写法:ssh 一律成 `ssh://user@host/path`(pnpm 认这个),https 原样。 */
4488
+ function gitAddressText(address) {
4489
+ const port = address.port === void 0 ? "" : `:${String(address.port)}`;
4490
+ if (address.kind === "ssh") return `ssh://${address.user === void 0 || address.user === "" ? "git" : address.user}@${address.host}${port}/${address.path}`;
4491
+ return `https://${address.host}${port}/${address.path}`;
4492
+ }
4493
+ /**
4494
+ * 同一个仓库的两种读法,发布者用的那种排前面。ssh 那条一律规范成 `ssh://` 形式,
4495
+ * 因为 `git@host:path` 拼进安装 spec 时 pnpm 不认;https 那条保留发布者的原样(含 http)。
4496
+ */
4497
+ function gitTransportCandidates(url) {
4498
+ const address = gitAddressOf(url);
4499
+ if (address === void 0) {
4500
+ const only = bare(url);
4501
+ return only === "" ? [] : [{
4502
+ kind: only.startsWith("ssh") ? "ssh" : "https",
4503
+ url: only
4504
+ }];
4505
+ }
4506
+ const primary = {
4507
+ kind: address.kind,
4508
+ url: address.kind === "ssh" ? gitAddressText(address) : bare(url)
4509
+ };
4510
+ const other = address.kind === "https" ? {
4511
+ kind: "ssh",
4512
+ url: gitAddressText({
4513
+ kind: "ssh",
4514
+ host: address.host,
4515
+ path: address.path
4516
+ })
4517
+ } : {
4518
+ kind: "https",
4519
+ url: gitAddressText({
4520
+ kind: "https",
4521
+ host: address.host,
4522
+ path: address.path
4523
+ })
4524
+ };
4525
+ return other.url === primary.url ? [primary] : [primary, other];
4526
+ }
4527
+ //#endregion
4391
4528
  //#region ../shared/dist/lib/board-fact.js
4392
4529
  /**
4393
4530
  * 判一个路径落不落在这个工作区里(按路径前缀比,不是字符串包含)。
@@ -4665,6 +4802,7 @@ function markNextProbeSilent() {
4665
4802
  silentNextProbe = true;
4666
4803
  }
4667
4804
  var probe$1 = NO_PROBE;
4805
+ var probing = 0;
4668
4806
  var probeListeners = /* @__PURE__ */ new Set();
4669
4807
  function probeValue() {
4670
4808
  return probe$1;
@@ -4698,8 +4836,10 @@ function subscribeCapabilities(listener) {
4698
4836
  };
4699
4837
  }
4700
4838
  function setCapabilities(next, rechecked = false) {
4701
- if (next === null) setProbe(NO_PROBE);
4702
- else if (rechecked) setProbe({
4839
+ if (next === null) {
4840
+ probing = 0;
4841
+ setProbe(NO_PROBE);
4842
+ } else if (rechecked) setProbe({
4703
4843
  ...probe$1,
4704
4844
  checkedAt: Date.now()
4705
4845
  });
@@ -4708,13 +4848,17 @@ function setCapabilities(next, rechecked = false) {
4708
4848
  for (const listener of [...listeners$7]) listener();
4709
4849
  }
4710
4850
  function beginProbe() {
4711
- if (probe$1.checking) return;
4851
+ probing += 1;
4852
+ if (probing > 1) return;
4712
4853
  setProbe({
4713
4854
  ...probe$1,
4714
4855
  checking: true
4715
4856
  });
4716
4857
  }
4717
4858
  function endProbe() {
4859
+ if (probing === 0) return;
4860
+ probing -= 1;
4861
+ if (probing > 0) return;
4718
4862
  setProbe({
4719
4863
  ...probe$1,
4720
4864
  checking: false
@@ -4754,13 +4898,14 @@ function runCapabilityRead(options) {
4754
4898
  const at = epoch$1;
4755
4899
  const seq = readSeq$1 += 1;
4756
4900
  if (force) newestForceSeq$1 = seq;
4757
- if (force && !silent) beginProbe();
4901
+ const shown = force && !silent;
4902
+ if (shown) beginProbe();
4758
4903
  return shareCapabilityFetch(force, load).then((result) => {
4759
4904
  if (at !== epoch$1) return;
4760
4905
  if (!force && seq < newestForceSeq$1) return;
4761
4906
  publishCapability(result, force);
4762
4907
  }).finally(() => {
4763
- if (force) endProbe();
4908
+ if (shown) endProbe();
4764
4909
  });
4765
4910
  }
4766
4911
  function useCapabilities(refreshToken, reloadToken = 0) {
@@ -4891,6 +5036,16 @@ function panelRowName(label, hint, t) {
4891
5036
  //#endregion
4892
5037
  //#region src/app/layouts/rightbar/market-freshness.ts
4893
5038
  var MARKET_STALE_MS = VERSION_CHECK_TTL_MS;
5039
+ function checkedAgoText(at, now, t) {
5040
+ const seconds = Math.max(0, Math.floor((now - at) / 1e3));
5041
+ if (seconds < 60) return t("panels.market.justNow");
5042
+ const minutes = Math.floor(seconds / 60);
5043
+ if (minutes < 60) return t("panels.market.minutesAgo", { n: String(minutes) });
5044
+ return t("panels.market.hoursAgo", { n: String(Math.floor(minutes / 60)) });
5045
+ }
5046
+ function checkedAgo(at, t) {
5047
+ return checkedAgoText(at, Date.now(), t);
5048
+ }
4894
5049
  function marketSettled(freshness, installedRead) {
4895
5050
  return freshness.loaded && installedRead !== false;
4896
5051
  }
@@ -4899,85 +5054,6 @@ function shouldProbeOnEnter(input) {
4899
5054
  return input.now - input.checkedAt >= input.staleMs;
4900
5055
  }
4901
5056
  //#endregion
4902
- //#region src/app/layouts/rightbar/market-settle.ts
4903
- var MODULE_SETTLE_MS = 15e3;
4904
- function holdBack(installed, roster, active, previous) {
4905
- const pending = installed.filter((unit) => !roster.has(unit));
4906
- const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
4907
- return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
4908
- }
4909
- var WORKBENCH_SWAP_MS = 18e4;
4910
- function swapLanded(until, installed) {
4911
- return until !== void 0 && installed === until;
4912
- }
4913
- function swapUntil(action, application, latest) {
4914
- if (action !== "update-workbench" || application !== "restart-required") return void 0;
4915
- return latest;
4916
- }
4917
- var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
4918
- "update",
4919
- "update-bundle",
4920
- "update-dependency",
4921
- "update-plugin"
4922
- ]);
4923
- var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
4924
- "remove-bundle",
4925
- "uninstall",
4926
- "uninstall-plugin"
4927
- ]);
4928
- function awaitsReadBack(action, application, version) {
4929
- if (application !== "applied") return false;
4930
- if (REMOVAL_ACTIONS.has(action)) return true;
4931
- if (!READ_BACK_ACTIONS.has(action)) return false;
4932
- return action === "update-bundle" ? version !== void 0 : true;
4933
- }
4934
- function readBackDone(input) {
4935
- if (input.action === "update") return !input.outdated;
4936
- if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
4937
- if (input.entry.latest === input.entry.installed) return true;
4938
- if (input.clicked === void 0) return true;
4939
- return input.entry.installed !== input.clicked;
4940
- }
4941
- function settleLanded(input) {
4942
- if (input.until !== void 0) return swapLanded(input.until, input.installed);
4943
- if (input.readBack !== true) return true;
4944
- if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
4945
- if (input.action === "uninstall-plugin") return input.pluginGone === true;
4946
- const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
4947
- if (input.action === "update-dependency") return settled(input.sharedState);
4948
- if (input.action === "update-plugin") return input.pluginOutdated === false;
4949
- return readBackDone({
4950
- action: input.action,
4951
- entry: input.entry,
4952
- clicked: input.clicked,
4953
- outdated: input.outdated
4954
- });
4955
- }
4956
- function tailReason(tail) {
4957
- if (tail === void 0) return void 0;
4958
- const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
4959
- if (last === void 0) return void 0;
4960
- return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
4961
- }
4962
- function selfUpdateStop(input) {
4963
- const { until, since, update } = input;
4964
- if (until === void 0 || update === void 0 || update === null) return void 0;
4965
- if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
4966
- if (update.to !== until && update.version !== until) return void 0;
4967
- if (since !== void 0 && update.at !== void 0) {
4968
- const at = (0, import_dayjs_min.default)(update.at).valueOf();
4969
- if (Number.isFinite(at) && at < since - 5e3) return void 0;
4970
- }
4971
- return {
4972
- kind: update.state,
4973
- ...update.version === void 0 ? {} : { version: update.version },
4974
- ...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
4975
- };
4976
- }
4977
- function holdWindowMs(until) {
4978
- return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
4979
- }
4980
- //#endregion
4981
5057
  //#region src/app/layouts/rightbar/market-shared-rows.ts
4982
5058
  var SHARED_STATE_KEY = {
4983
5059
  checking: "panels.market.checking",
@@ -5147,8 +5223,10 @@ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE_
5147
5223
  ...outdated ? { moduleUpdate: {
5148
5224
  installed: module.installed,
5149
5225
  latest,
5150
- ...blocked === void 0 ? {} : { blocked }
5226
+ ...blocked === void 0 ? {} : { blocked },
5227
+ ...module.market === void 0 ? {} : { market: module.market }
5151
5228
  } } : {},
5229
+ ...module.market === void 0 ? {} : { market: module.market },
5152
5230
  defaultShown: defaults.has(module.unit),
5153
5231
  defaultChanged: changed[module.unit] ?? 0
5154
5232
  });
@@ -5167,7 +5245,7 @@ function marketActions$1(row) {
5167
5245
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
5168
5246
  return [
5169
5247
  ...row.canInstall ? ["install"] : [],
5170
- ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
5248
+ ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? [row.market === void 0 || row.pkg === void 0 ? "update-bundle" : "install-version"] : [],
5171
5249
  ...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
5172
5250
  ];
5173
5251
  }
@@ -5256,7 +5334,8 @@ function marketUpdatesOf(modules) {
5256
5334
  installed: module.installed,
5257
5335
  ...local || module.latest === void 0 ? {} : { latest: module.latest },
5258
5336
  ...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
5259
- ...local ? { local: true } : {}
5337
+ ...local ? { local: true } : {},
5338
+ ...local || module.market === void 0 ? {} : { market: module.market }
5260
5339
  };
5261
5340
  }
5262
5341
  return next;
@@ -5295,7 +5374,8 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5295
5374
  const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
5296
5375
  installed: entry.installed,
5297
5376
  latest: entry.latest,
5298
- ...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
5377
+ ...entry.blocked === void 0 ? {} : { blocked: entry.blocked },
5378
+ ...entry.market === void 0 ? {} : { market: entry.market }
5299
5379
  };
5300
5380
  const shown = moduleUpdate === void 0 ? state : "outdated";
5301
5381
  const hint = moduleUpdate?.blocked === void 0 ? shown === "unknown" || shown === "unchecked" ? "panels.market.uncheckedHint" : void 0 : updateBlockHintOf(moduleUpdate.blocked);
@@ -5312,6 +5392,10 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5312
5392
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
5313
5393
  } },
5314
5394
  ...moduleUpdate === void 0 ? {} : { moduleUpdate },
5395
+ ...entry?.market === void 0 ? {} : {
5396
+ market: entry.market,
5397
+ pkg: entry.market.pkg
5398
+ },
5315
5399
  ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {},
5316
5400
  ...local ? { local: true } : {},
5317
5401
  defaultShown: defaults.has(manifest.id),
@@ -5478,6 +5562,86 @@ function marketHintOf(input) {
5478
5562
  return null;
5479
5563
  }
5480
5564
  //#endregion
5565
+ //#region src/app/layouts/rightbar/market-settle.ts
5566
+ var MODULE_SETTLE_MS = 15e3;
5567
+ function holdBack(installed, roster, active, previous) {
5568
+ const pending = installed.filter((unit) => !roster.has(unit));
5569
+ const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
5570
+ return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
5571
+ }
5572
+ var WORKBENCH_SWAP_MS = 18e4;
5573
+ function swapLanded(until, installed) {
5574
+ return until !== void 0 && installed === until;
5575
+ }
5576
+ function swapUntil(action, application, latest) {
5577
+ if (action !== "update-workbench" || application !== "restart-required") return void 0;
5578
+ return latest;
5579
+ }
5580
+ var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
5581
+ "update",
5582
+ "update-bundle",
5583
+ "install-version",
5584
+ "update-dependency",
5585
+ "update-plugin"
5586
+ ]);
5587
+ var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
5588
+ "remove-bundle",
5589
+ "uninstall",
5590
+ "uninstall-plugin"
5591
+ ]);
5592
+ function awaitsReadBack(action, application, version) {
5593
+ if (application !== "applied") return false;
5594
+ if (REMOVAL_ACTIONS.has(action)) return true;
5595
+ if (!READ_BACK_ACTIONS.has(action)) return false;
5596
+ return action === "update-bundle" || action === "install-version" ? version !== void 0 : true;
5597
+ }
5598
+ function readBackDone(input) {
5599
+ if (input.action === "update") return !input.outdated;
5600
+ if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
5601
+ if (input.entry.latest === input.entry.installed) return true;
5602
+ if (input.clicked === void 0) return true;
5603
+ return input.entry.installed !== input.clicked;
5604
+ }
5605
+ function settleLanded(input) {
5606
+ if (input.until !== void 0) return swapLanded(input.until, input.installed);
5607
+ if (input.readBack !== true) return true;
5608
+ if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
5609
+ if (input.action === "uninstall-plugin") return input.pluginGone === true;
5610
+ const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
5611
+ if (input.action === "update-dependency") return settled(input.sharedState);
5612
+ if (input.action === "update-plugin") return input.pluginOutdated === false;
5613
+ return readBackDone({
5614
+ action: input.action,
5615
+ entry: input.entry,
5616
+ clicked: input.clicked,
5617
+ outdated: input.outdated
5618
+ });
5619
+ }
5620
+ function tailReason(tail) {
5621
+ if (tail === void 0) return void 0;
5622
+ const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
5623
+ if (last === void 0) return void 0;
5624
+ return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
5625
+ }
5626
+ function selfUpdateStop(input) {
5627
+ const { until, since, update } = input;
5628
+ if (until === void 0 || update === void 0 || update === null) return void 0;
5629
+ if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
5630
+ if (update.to !== until && update.version !== until) return void 0;
5631
+ if (since !== void 0 && update.at !== void 0) {
5632
+ const at = (0, import_dayjs_min.default)(update.at).valueOf();
5633
+ if (Number.isFinite(at) && at < since - 5e3) return void 0;
5634
+ }
5635
+ return {
5636
+ kind: update.state,
5637
+ ...update.version === void 0 ? {} : { version: update.version },
5638
+ ...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
5639
+ };
5640
+ }
5641
+ function holdWindowMs(until) {
5642
+ return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
5643
+ }
5644
+ //#endregion
5481
5645
  //#region src/app/layouts/rightbar/market-busy.ts
5482
5646
  var listeners$5 = /* @__PURE__ */ new Set();
5483
5647
  var published = /* @__PURE__ */ new Map();
@@ -5758,127 +5922,137 @@ function useMarketTransient(input) {
5758
5922
  };
5759
5923
  }
5760
5924
  var MarketPage_module_default = {
5761
- marketList: "_marketList_14s5s_1",
5762
- marketRow: "_marketRow_14s5s_10",
5763
- marketIcon: "_marketIcon_14s5s_20",
5764
- marketMain: "_marketMain_14s5s_32",
5765
- marketName: "_marketName_14s5s_39",
5766
- marketStatus: "_marketStatus_14s5s_48",
5767
- marketStateText: "_marketStateText_14s5s_58",
5768
- marketSep: "_marketSep_14s5s_62",
5769
- marketReason: "_marketReason_14s5s_66",
5770
- marketVersion: "_marketVersion_14s5s_72",
5771
- marketLocalTag: "_marketLocalTag_14s5s_94",
5772
- marketEnd: "_marketEnd_14s5s_105",
5773
- marketSwitchSeat: "_marketSwitchSeat_14s5s_112",
5774
- marketActions: "_marketActions_14s5s_125",
5775
- marketUpdateAction: "_marketUpdateAction_14s5s_131",
5776
- marketSelfDivider: "_marketSelfDivider_14s5s_137",
5777
- marketSection: "_marketSection_14s5s_143",
5778
- marketSectionHead: "_marketSectionHead_14s5s_150",
5779
- marketSectionIcon: "_marketSectionIcon_14s5s_156",
5780
- marketSectionTitle: "_marketSectionTitle_14s5s_163",
5781
- marketSectionCount: "_marketSectionCount_14s5s_169",
5782
- marketSectionQuiet: "_marketSectionQuiet_14s5s_175",
5783
- marketProgress: "_marketProgress_14s5s_188",
5784
- marketNote: "_marketNote_14s5s_198",
5785
- marketFailure: "_marketFailure_14s5s_205",
5786
- marketEmpty: "_marketEmpty_14s5s_212",
5787
- marketPage: "_marketPage_14s5s_217",
5788
- marketPageHead: "_marketPageHead_14s5s_235",
5789
- marketPageTitle: "_marketPageTitle_14s5s_243",
5790
- marketPageIntro: "_marketPageIntro_14s5s_248",
5791
- marketPageTools: "_marketPageTools_14s5s_254",
5792
- marketPanel: "_marketPanel_14s5s_263",
5793
- marketTabs: "_marketTabs_14s5s_273",
5794
- marketTabList: "_marketTabList_14s5s_278",
5795
- marketIconButton: "_marketIconButton_14s5s_283",
5796
- marketIconWrap: "_marketIconWrap_14s5s_308",
5797
- marketIconButtonSpinning: "_marketIconButtonSpinning_14s5s_312",
5798
- "wb-spin": "_wb-spin_14s5s_1",
5799
- marketAddButton: "_marketAddButton_14s5s_316",
5800
- marketEmptyTitle: "_marketEmptyTitle_14s5s_333",
5801
- discoverPage: "_discoverPage_14s5s_347",
5802
- discoverBar: "_discoverBar_14s5s_354",
5803
- discoverTools: "_discoverTools_14s5s_361",
5804
- discoverMarket: "_discoverMarket_14s5s_367",
5805
- discoverMarketButton: "_discoverMarketButton_14s5s_372",
5806
- discoverMarketName: "_discoverMarketName_14s5s_379",
5807
- discoverLabels: "_discoverLabels_14s5s_385",
5808
- discoverSort: "_discoverSort_14s5s_390",
5809
- discoverRefresh: "_discoverRefresh_14s5s_395",
5810
- discoverSearch: "_discoverSearch_14s5s_399",
5811
- discoverSearchField: "_discoverSearchField_14s5s_407",
5812
- discoverSearchFieldFilled: "_discoverSearchFieldFilled_14s5s_412",
5813
- discoverSearchClear: "_discoverSearchClear_14s5s_421",
5814
- discoverChips: "_discoverChips_14s5s_472",
5815
- discoverList: "_discoverList_14s5s_479",
5816
- discoverCard: "_discoverCard_14s5s_488",
5817
- discoverArtwork: "_discoverArtwork_14s5s_502",
5818
- discoverArtworkImage: "_discoverArtworkImage_14s5s_514",
5819
- discoverMain: "_discoverMain_14s5s_518",
5820
- discoverTitleRow: "_discoverTitleRow_14s5s_526",
5821
- discoverCardOpen: "_discoverCardOpen_14s5s_534",
5822
- discoverStrong: "_discoverStrong_14s5s_565",
5823
- discoverDesc: "_discoverDesc_14s5s_571",
5824
- discoverMeta: "_discoverMeta_14s5s_580",
5825
- discoverMuted: "_discoverMuted_14s5s_587",
5826
- discoverEnd: "_discoverEnd_14s5s_593",
5827
- discoverBlocked: "_discoverBlocked_14s5s_602",
5828
- discoverEmpty: "_discoverEmpty_14s5s_607",
5829
- discoverEmptyTitle: "_discoverEmptyTitle_14s5s_616",
5830
- discoverDetail: "_discoverDetail_14s5s_626",
5831
- discoverCrumb: "_discoverCrumb_14s5s_632",
5832
- discoverCrumbIcon: "_discoverCrumbIcon_14s5s_655",
5833
- discoverDetailHead: "_discoverDetailHead_14s5s_659",
5834
- discoverDetailTitle: "_discoverDetailTitle_14s5s_665",
5835
- discoverDetailText: "_discoverDetailText_14s5s_671",
5836
- discoverDetailPanel: "_discoverDetailPanel_14s5s_678",
5837
- discoverDetailTabs: "_discoverDetailTabs_14s5s_685",
5838
- discoverDetailTabList: "_discoverDetailTabList_14s5s_690",
5839
- discoverDocBody: "_discoverDocBody_14s5s_695",
5840
- discoverDocNotice: "_discoverDocNotice_14s5s_700",
5841
- discoverSection: "_discoverSection_14s5s_706",
5842
- discoverSectionTitle: "_discoverSectionTitle_14s5s_713",
5843
- discoverFacts: "_discoverFacts_14s5s_719",
5844
- discoverFactRow: "_discoverFactRow_14s5s_724",
5845
- discoverFactKind: "_discoverFactKind_14s5s_734",
5846
- discoverFactValue: "_discoverFactValue_14s5s_740",
5847
- discoverCode: "_discoverCode_14s5s_748",
5848
- discoverTags: "_discoverTags_14s5s_757",
5849
- discoverLink: "_discoverLink_14s5s_764",
5850
- discoverVersions: "_discoverVersions_14s5s_774",
5851
- discoverVersionRow: "_discoverVersionRow_14s5s_782",
5852
- discoverVersionName: "_discoverVersionName_14s5s_790",
5853
- discoverError: "_discoverError_14s5s_795",
5854
- discoverFailure: "_discoverFailure_14s5s_804",
5855
- discoverLoading: "_discoverLoading_14s5s_810",
5856
- discoverNotice: "_discoverNotice_14s5s_819",
5857
- discoverMore: "_discoverMore_14s5s_837",
5858
- discoverDialog: "_discoverDialog_14s5s_841",
5859
- discoverDialogBody: "_discoverDialogBody_14s5s_845",
5860
- discoverSourceList: "_discoverSourceList_14s5s_851",
5861
- discoverSourceRow: "_discoverSourceRow_14s5s_859",
5862
- discoverSourceConfirm: "_discoverSourceConfirm_14s5s_868",
5863
- discoverSourcePick: "_discoverSourcePick_14s5s_874",
5864
- discoverSourceRadio: "_discoverSourceRadio_14s5s_883",
5865
- discoverSourceMain: "_discoverSourceMain_14s5s_891",
5866
- discoverSourceHead: "_discoverSourceHead_14s5s_899",
5867
- discoverSourceUrl: "_discoverSourceUrl_14s5s_907",
5868
- discoverSourceMore: "_discoverSourceMore_14s5s_917",
5869
- discoverSourceLoading: "_discoverSourceLoading_14s5s_921",
5870
- discoverSourceHint: "_discoverSourceHint_14s5s_931",
5871
- discoverSourceError: "_discoverSourceError_14s5s_945",
5872
- discoverSourceForm: "_discoverSourceForm_14s5s_951",
5873
- discoverGrow: "_discoverGrow_14s5s_957",
5874
- discoverField: "_discoverField_14s5s_962",
5875
- discoverFieldLabel: "_discoverFieldLabel_14s5s_968",
5876
- discoverConfirmHead: "_discoverConfirmHead_14s5s_973",
5877
- discoverSkeletonFill: "_discoverSkeletonFill_14s5s_979",
5878
- "wb-skeleton": "_wb-skeleton_14s5s_1",
5879
- discoverSkeletonBar: "_discoverSkeletonBar_14s5s_988",
5880
- discoverSkeletonTitle: "_discoverSkeletonTitle_14s5s_995",
5881
- discoverSkeletonDesc: "_discoverSkeletonDesc_14s5s_999"
5925
+ marketList: "_marketList_yups9_1",
5926
+ marketRow: "_marketRow_yups9_10",
5927
+ marketIcon: "_marketIcon_yups9_20",
5928
+ marketMain: "_marketMain_yups9_32",
5929
+ marketName: "_marketName_yups9_39",
5930
+ marketStatus: "_marketStatus_yups9_48",
5931
+ marketStateText: "_marketStateText_yups9_58",
5932
+ marketSep: "_marketSep_yups9_62",
5933
+ marketReason: "_marketReason_yups9_66",
5934
+ marketVersion: "_marketVersion_yups9_72",
5935
+ marketLocalTag: "_marketLocalTag_yups9_94",
5936
+ marketEnd: "_marketEnd_yups9_105",
5937
+ marketSwitchSeat: "_marketSwitchSeat_yups9_112",
5938
+ marketActions: "_marketActions_yups9_125",
5939
+ marketUpdateAction: "_marketUpdateAction_yups9_131",
5940
+ marketSelfDivider: "_marketSelfDivider_yups9_137",
5941
+ marketSection: "_marketSection_yups9_143",
5942
+ marketSectionHead: "_marketSectionHead_yups9_150",
5943
+ marketSectionIcon: "_marketSectionIcon_yups9_156",
5944
+ marketSectionTitle: "_marketSectionTitle_yups9_163",
5945
+ marketSectionCount: "_marketSectionCount_yups9_169",
5946
+ marketSectionAction: "_marketSectionAction_yups9_175",
5947
+ marketSectionQuiet: "_marketSectionQuiet_yups9_183",
5948
+ marketProgress: "_marketProgress_yups9_196",
5949
+ marketNote: "_marketNote_yups9_206",
5950
+ marketFailure: "_marketFailure_yups9_213",
5951
+ marketEmpty: "_marketEmpty_yups9_220",
5952
+ marketPage: "_marketPage_yups9_225",
5953
+ marketPageHead: "_marketPageHead_yups9_243",
5954
+ marketPageTitle: "_marketPageTitle_yups9_251",
5955
+ marketPageIntro: "_marketPageIntro_yups9_256",
5956
+ marketPageTools: "_marketPageTools_yups9_262",
5957
+ marketPanel: "_marketPanel_yups9_271",
5958
+ marketTabs: "_marketTabs_yups9_281",
5959
+ marketTabList: "_marketTabList_yups9_286",
5960
+ marketAddButton: "_marketAddButton_yups9_291",
5961
+ marketEmptyTitle: "_marketEmptyTitle_yups9_308",
5962
+ discoverPage: "_discoverPage_yups9_313",
5963
+ discoverBar: "_discoverBar_yups9_320",
5964
+ discoverTools: "_discoverTools_yups9_327",
5965
+ discoverMarket: "_discoverMarket_yups9_333",
5966
+ discoverMarketButton: "_discoverMarketButton_yups9_338",
5967
+ discoverMarketName: "_discoverMarketName_yups9_345",
5968
+ discoverLabels: "_discoverLabels_yups9_351",
5969
+ discoverSort: "_discoverSort_yups9_356",
5970
+ discoverRefresh: "_discoverRefresh_yups9_361",
5971
+ discoverSearch: "_discoverSearch_yups9_365",
5972
+ discoverSearchField: "_discoverSearchField_yups9_373",
5973
+ discoverSearchFieldFilled: "_discoverSearchFieldFilled_yups9_378",
5974
+ discoverSearchClear: "_discoverSearchClear_yups9_387",
5975
+ discoverChips: "_discoverChips_yups9_438",
5976
+ discoverList: "_discoverList_yups9_445",
5977
+ discoverCard: "_discoverCard_yups9_454",
5978
+ discoverArtwork: "_discoverArtwork_yups9_468",
5979
+ discoverArtworkImage: "_discoverArtworkImage_yups9_480",
5980
+ discoverMain: "_discoverMain_yups9_484",
5981
+ discoverTitleRow: "_discoverTitleRow_yups9_492",
5982
+ discoverCardOpen: "_discoverCardOpen_yups9_500",
5983
+ discoverStrong: "_discoverStrong_yups9_531",
5984
+ discoverDesc: "_discoverDesc_yups9_537",
5985
+ discoverMeta: "_discoverMeta_yups9_546",
5986
+ discoverMuted: "_discoverMuted_yups9_553",
5987
+ discoverEnd: "_discoverEnd_yups9_559",
5988
+ discoverUpdateAction: "_discoverUpdateAction_yups9_568",
5989
+ discoverBlocked: "_discoverBlocked_yups9_573",
5990
+ discoverEmpty: "_discoverEmpty_yups9_578",
5991
+ discoverEmptyTitle: "_discoverEmptyTitle_yups9_587",
5992
+ discoverDetail: "_discoverDetail_yups9_597",
5993
+ discoverCrumb: "_discoverCrumb_yups9_603",
5994
+ discoverCrumbIcon: "_discoverCrumbIcon_yups9_626",
5995
+ discoverDetailHead: "_discoverDetailHead_yups9_630",
5996
+ discoverDetailTitle: "_discoverDetailTitle_yups9_636",
5997
+ discoverDetailText: "_discoverDetailText_yups9_642",
5998
+ discoverDetailPanel: "_discoverDetailPanel_yups9_649",
5999
+ discoverDetailTabs: "_discoverDetailTabs_yups9_656",
6000
+ discoverDetailTabList: "_discoverDetailTabList_yups9_661",
6001
+ discoverDocBody: "_discoverDocBody_yups9_666",
6002
+ discoverDocNotice: "_discoverDocNotice_yups9_671",
6003
+ discoverSection: "_discoverSection_yups9_677",
6004
+ discoverSectionTitle: "_discoverSectionTitle_yups9_684",
6005
+ discoverFacts: "_discoverFacts_yups9_690",
6006
+ discoverFactRow: "_discoverFactRow_yups9_695",
6007
+ discoverFactKind: "_discoverFactKind_yups9_705",
6008
+ discoverFactValue: "_discoverFactValue_yups9_711",
6009
+ discoverCode: "_discoverCode_yups9_719",
6010
+ discoverTags: "_discoverTags_yups9_728",
6011
+ discoverLink: "_discoverLink_yups9_735",
6012
+ discoverVersions: "_discoverVersions_yups9_745",
6013
+ discoverVersionRow: "_discoverVersionRow_yups9_753",
6014
+ discoverVersionName: "_discoverVersionName_yups9_761",
6015
+ discoverError: "_discoverError_yups9_766",
6016
+ discoverFailure: "_discoverFailure_yups9_775",
6017
+ discoverLoading: "_discoverLoading_yups9_781",
6018
+ discoverNotice: "_discoverNotice_yups9_790",
6019
+ discoverMore: "_discoverMore_yups9_808",
6020
+ discoverTransport: "_discoverTransport_yups9_812",
6021
+ discoverTransportHead: "_discoverTransportHead_yups9_818",
6022
+ discoverTransportTitle: "_discoverTransportTitle_yups9_825",
6023
+ discoverTransportKind: "_discoverTransportKind_yups9_830",
6024
+ discoverTransportState: "_discoverTransportState_yups9_835",
6025
+ discoverTransportRows: "_discoverTransportRows_yups9_843",
6026
+ discoverTransportRow: "_discoverTransportRow_yups9_843",
6027
+ discoverTransportRadio: "_discoverTransportRadio_yups9_864",
6028
+ discoverTransportCustom: "_discoverTransportCustom_yups9_904",
6029
+ discoverTransportInput: "_discoverTransportInput_yups9_910",
6030
+ discoverInstallBar: "_discoverInstallBar_yups9_915",
6031
+ discoverInstallText: "_discoverInstallText_yups9_926",
6032
+ discoverDialog: "_discoverDialog_yups9_932",
6033
+ discoverDialogBody: "_discoverDialogBody_yups9_936",
6034
+ discoverSourceList: "_discoverSourceList_yups9_942",
6035
+ discoverSourceRow: "_discoverSourceRow_yups9_950",
6036
+ discoverSourceConfirm: "_discoverSourceConfirm_yups9_959",
6037
+ discoverSourcePick: "_discoverSourcePick_yups9_965",
6038
+ discoverSourceRadio: "_discoverSourceRadio_yups9_974",
6039
+ discoverSourceMain: "_discoverSourceMain_yups9_982",
6040
+ discoverSourceHead: "_discoverSourceHead_yups9_990",
6041
+ discoverSourceUrl: "_discoverSourceUrl_yups9_998",
6042
+ discoverSourceMore: "_discoverSourceMore_yups9_1008",
6043
+ discoverSourceLoading: "_discoverSourceLoading_yups9_1012",
6044
+ discoverSourceHint: "_discoverSourceHint_yups9_1022",
6045
+ discoverSourceError: "_discoverSourceError_yups9_1036",
6046
+ discoverSourceForm: "_discoverSourceForm_yups9_1042",
6047
+ discoverGrow: "_discoverGrow_yups9_1048",
6048
+ discoverField: "_discoverField_yups9_1053",
6049
+ discoverFieldLabel: "_discoverFieldLabel_yups9_1059",
6050
+ discoverConfirmHead: "_discoverConfirmHead_yups9_1064",
6051
+ discoverSkeletonFill: "_discoverSkeletonFill_yups9_1070",
6052
+ "wb-skeleton": "_wb-skeleton_yups9_1",
6053
+ discoverSkeletonBar: "_discoverSkeletonBar_yups9_1079",
6054
+ discoverSkeletonTitle: "_discoverSkeletonTitle_yups9_1086",
6055
+ discoverSkeletonDesc: "_discoverSkeletonDesc_yups9_1090"
5882
6056
  };
5883
6057
  //#endregion
5884
6058
  //#region src/app/layouts/market/discover-states.tsx
@@ -5937,6 +6111,19 @@ function DiscoverNoSource({ t, onAdd }) {
5937
6111
  onClick: onAdd
5938
6112
  }, t("panels.discover.addFirstSource")));
5939
6113
  }
6114
+ function DiscoverReadFailure({ t, text, auth, onRetry }) {
6115
+ return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
6116
+ t,
6117
+ text,
6118
+ onRetry
6119
+ }), auth ? /* @__PURE__ */ (0, react.createElement)("p", {
6120
+ className: MarketPage_module_default.discoverNotice,
6121
+ role: "note"
6122
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
6123
+ size: 14,
6124
+ "aria-hidden": "true"
6125
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.sourceAuth"))) : null);
6126
+ }
5940
6127
  //#endregion
5941
6128
  //#region src/app/layouts/rightbar/MarketStates.tsx
5942
6129
  function MarketChecking({ t }) {
@@ -5994,6 +6181,7 @@ var PROGRESS_KEY = {
5994
6181
  install: "panels.market.installing",
5995
6182
  update: "panels.market.updating",
5996
6183
  "update-bundle": "panels.market.updating",
6184
+ "install-version": "panels.market.updating",
5997
6185
  "remove-bundle": "panels.market.uninstalling",
5998
6186
  uninstall: "panels.market.uninstalling",
5999
6187
  "update-dependency": "panels.market.updating",
@@ -6007,6 +6195,7 @@ var ACTION_LABEL_KEY = {
6007
6195
  install: "panels.market.install",
6008
6196
  update: "panels.market.update",
6009
6197
  "update-bundle": "panels.market.update",
6198
+ "install-version": "panels.market.update",
6010
6199
  "remove-bundle": "panels.market.uninstall",
6011
6200
  uninstall: "panels.market.uninstall",
6012
6201
  "update-dependency": "panels.market.update",
@@ -6155,41 +6344,6 @@ function SharedSection({ t, rows, pending, failureOf, act }) {
6155
6344
  }))));
6156
6345
  }
6157
6346
  //#endregion
6158
- //#region src/app/layouts/rightbar/panel-write.ts
6159
- var PANEL_SETTLE_MS = 4e3;
6160
- function rowKey(row) {
6161
- return `${row.id}:${row.shown ? "1" : "0"}:${row.source}`;
6162
- }
6163
- function rowKeys(rows) {
6164
- return rows.map(rowKey).join(",");
6165
- }
6166
- function panelBoardSignature(units, plugins, own) {
6167
- return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
6168
- }
6169
- function machineBoardSignature(defaults, changed) {
6170
- const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
6171
- return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
6172
- }
6173
- function nextPending(pending, signature) {
6174
- return pending !== null && pending !== signature ? null : pending;
6175
- }
6176
- function useBoardSettle(signature) {
6177
- const [held, setHeld] = (0, react.useState)(null);
6178
- (0, react.useEffect)(() => {
6179
- setHeld((current) => nextPending(current, signature));
6180
- }, [signature]);
6181
- (0, react.useEffect)(() => {
6182
- if (held === null) return void 0;
6183
- const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
6184
- return () => clearTimeout(timer);
6185
- }, [held]);
6186
- return {
6187
- pending: held !== null,
6188
- begin: () => setHeld(signature),
6189
- clear: () => setHeld(null)
6190
- };
6191
- }
6192
- //#endregion
6193
6347
  //#region src/shared/components/Tip.tsx
6194
6348
  /**
6195
6349
  * dsh `Tooltip` 的外壳默认值版:说明统一按右栏习惯(`bottom` / `end` / `gap 6` / 挂 body)来,其余 prop 原样转给 `Tooltip`。
@@ -6336,12 +6490,12 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6336
6490
  }
6337
6491
  }));
6338
6492
  }
6339
- function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
6340
- if (rows.length === 0) return null;
6493
+ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead }) {
6494
+ if (rows.length === 0 && keepHead !== true) return null;
6341
6495
  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", {
6342
6496
  className: MarketPage_module_default.marketSectionIcon,
6343
6497
  "aria-hidden": "true"
6344
- }, icon), /* @__PURE__ */ (0, react.createElement)("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), rows.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), rows.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ (0, react.createElement)(MarketLine, {
6498
+ }, icon), /* @__PURE__ */ (0, react.createElement)("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionCount }, rows.length), headAction === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionAction }, headAction)), rows.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ (0, react.createElement)(MarketLine, {
6345
6499
  key: row.id,
6346
6500
  t,
6347
6501
  row,
@@ -6506,7 +6660,9 @@ function problemKey(problem) {
6506
6660
  function heldWizardPhase(phase, classifying) {
6507
6661
  return classifying && (phase === "preview" || phase === "idle") ? "inspecting" : phase;
6508
6662
  }
6663
+ var CREDENTIAL_TEXT = /authentication failed|could not read (username|password)|permission denied \(publickey\)|terminal prompts disabled|host key verification failed|repository not found|no such identity/i;
6509
6664
  var FAILURE_KEYS = {
6665
+ credentials: "panels.market.add.failureCredentials",
6510
6666
  network: "panels.market.add.failureNetwork",
6511
6667
  "spec-host": "panels.market.add.failureNetworkHost",
6512
6668
  "not-found": "panels.market.add.failureNotFound",
@@ -6528,9 +6684,15 @@ var FAILURE_KEYS = {
6528
6684
  "stop-profile": "panels.market.add.failureGeneric",
6529
6685
  "stale-approval": "panels.market.add.failureGeneric"
6530
6686
  };
6687
+ function needsCredentials(change) {
6688
+ const text = `${change.errorDetail ?? ""}\n${change.packageResult?.output ?? ""}`;
6689
+ return CREDENTIAL_TEXT.test(text);
6690
+ }
6531
6691
  function failureCode(change) {
6532
6692
  if (change.failedAt === "spec-host") return "spec-host";
6533
- return change.errorCode ?? change.packageResult?.kind ?? change.application;
6693
+ const code = change.errorCode ?? change.packageResult?.kind ?? change.application;
6694
+ if (code === "operation-error" && needsCredentials(change)) return "credentials";
6695
+ return code;
6534
6696
  }
6535
6697
  function failureReasonKey(code) {
6536
6698
  return FAILURE_KEYS[code];
@@ -6605,7 +6767,11 @@ function updateVerdictText(verdict, t, input) {
6605
6767
  }
6606
6768
  //#endregion
6607
6769
  //#region src/app/layouts/rightbar/market-act.ts
6608
- var STEADY_ACTIONS = /* @__PURE__ */ new Set(["update", "update-bundle"]);
6770
+ var STEADY_ACTIONS = /* @__PURE__ */ new Set([
6771
+ "update",
6772
+ "update-bundle",
6773
+ "install-version"
6774
+ ]);
6609
6775
  function assumedApplied(action) {
6610
6776
  return action === "update" || action === "update-dependency" || action === "update-plugin" || REMOVAL_ACTIONS.has(action);
6611
6777
  }
@@ -6649,18 +6815,34 @@ function marketActOf(options) {
6649
6815
  seats.setConfirming(null);
6650
6816
  seats.setFailed(null);
6651
6817
  seats.setNotice(null);
6818
+ const dependency = action === "update-dependency";
6819
+ const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench";
6820
+ const market = action === "install-version" ? row?.market : void 0;
6821
+ const marketSpec = market === void 0 || row?.pkg === void 0 ? void 0 : marketInstallTarget(row.pkg, market.version, market.source).spec;
6822
+ if (action === "install-version" && marketSpec === void 0) {
6823
+ seats.setPending(null);
6824
+ seats.setFailed({
6825
+ id,
6826
+ message: t("panels.market.failed", { reason: t("panels.market.noMarketSource") })
6827
+ });
6828
+ return;
6829
+ }
6652
6830
  const outcome = await send(action === "dismiss-followup" ? {
6653
6831
  action,
6654
6832
  id: row?.followUp?.id ?? ""
6655
- } : action === "update-dependency" ? {
6833
+ } : dependency ? {
6656
6834
  action,
6657
6835
  id
6658
- } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench" ? {
6836
+ } : byName ? {
6659
6837
  action,
6660
6838
  name: row?.pkg ?? ""
6661
- } : {
6839
+ } : marketSpec === void 0 ? {
6662
6840
  action,
6663
6841
  unit: id
6842
+ } : {
6843
+ action,
6844
+ spec: marketSpec,
6845
+ requestId: globalThis.crypto.randomUUID()
6664
6846
  });
6665
6847
  if (!outcome.ok) {
6666
6848
  onChanged({ force: true });
@@ -6725,6 +6907,99 @@ function marketActOf(options) {
6725
6907
  });
6726
6908
  };
6727
6909
  }
6910
+ //#endregion
6911
+ //#region src/app/layouts/rightbar/panel-write.ts
6912
+ var PANEL_SETTLE_MS = 4e3;
6913
+ function rowKey(row) {
6914
+ return `${row.id}:${row.shown ? "1" : "0"}:${row.source}`;
6915
+ }
6916
+ function rowKeys(rows) {
6917
+ return rows.map(rowKey).join(",");
6918
+ }
6919
+ function panelBoardSignature(units, plugins, own) {
6920
+ return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
6921
+ }
6922
+ function machineBoardSignature(defaults, changed) {
6923
+ const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
6924
+ return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
6925
+ }
6926
+ function nextPending(pending, signature) {
6927
+ return pending !== null && pending !== signature ? null : pending;
6928
+ }
6929
+ function useBoardSettle(signature) {
6930
+ const [held, setHeld] = (0, react.useState)(null);
6931
+ (0, react.useEffect)(() => {
6932
+ setHeld((current) => nextPending(current, signature));
6933
+ }, [signature]);
6934
+ (0, react.useEffect)(() => {
6935
+ if (held === null) return void 0;
6936
+ const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
6937
+ return () => clearTimeout(timer);
6938
+ }, [held]);
6939
+ return {
6940
+ pending: held !== null,
6941
+ begin: () => setHeld(signature),
6942
+ clear: () => setHeld(null)
6943
+ };
6944
+ }
6945
+ //#endregion
6946
+ //#region src/app/layouts/rightbar/use-market-default.ts
6947
+ function useMarketDefault(input) {
6948
+ const { t, mocked, defaults, changed, setNotice } = input;
6949
+ const boardWrite = useHostWrite({
6950
+ channel: "prefs",
6951
+ resource: "panels",
6952
+ networkText: t("panels.failed")
6953
+ });
6954
+ const [writing, setWriting] = (0, react.useState)(false);
6955
+ const settle = useBoardSettle(machineBoardSignature(defaults, changed));
6956
+ const setDefault = async (id, next) => {
6957
+ if (mocked) return;
6958
+ setWriting(true);
6959
+ settle.begin();
6960
+ const outcome = await boardWrite.send({
6961
+ action: next ? "show" : "hide",
6962
+ id,
6963
+ scope: "machine"
6964
+ });
6965
+ setWriting(false);
6966
+ if (!outcome.ok) {
6967
+ settle.clear();
6968
+ setNotice(t("panels.failed"));
6969
+ }
6970
+ };
6971
+ return {
6972
+ pending: writing || settle.pending,
6973
+ setDefault
6974
+ };
6975
+ }
6976
+ var market_check_module_default = {
6977
+ check: "_check_1g6tv_1",
6978
+ status: "_status_1g6tv_8",
6979
+ button: "_button_1g6tv_15",
6980
+ icon: "_icon_1g6tv_22"
6981
+ };
6982
+ //#endregion
6983
+ //#region src/app/layouts/market/market-check.tsx
6984
+ function MarketCheck({ t, checkedAt, checking, failed, disabled, onCheck }) {
6985
+ const status = checking ? t("panels.market.checkingNow") : failed ? t("panels.market.checkFailed") : checkedAt === null ? null : t("panels.market.checkedAt", { time: checkedAgo(checkedAt, t) });
6986
+ return /* @__PURE__ */ (0, react.createElement)("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ (0, react.createElement)("span", {
6987
+ className: market_check_module_default.status,
6988
+ "aria-live": "polite"
6989
+ }, status), /* @__PURE__ */ (0, react.createElement)(Tip, { label: t("panels.market.checkUpdates") }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6990
+ type: "button",
6991
+ variant: "ghost",
6992
+ size: "sm",
6993
+ className: market_check_module_default.button,
6994
+ "aria-label": t("panels.market.checkUpdates"),
6995
+ disabled: disabled || checking,
6996
+ icon: /* @__PURE__ */ (0, react.createElement)("span", {
6997
+ className: `${market_check_module_default.icon}${checking ? " wb-spinning" : ""}`,
6998
+ "aria-hidden": "true"
6999
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 })),
7000
+ onClick: onCheck
7001
+ })));
7002
+ }
6728
7003
  var PanelFoot_module_default = {
6729
7004
  foot: "_foot_1ud1j_1",
6730
7005
  footText: "_footText_1ud1j_13",
@@ -6742,6 +7017,7 @@ var CONFIRM_UNINSTALL = [
6742
7017
  "remove-bundle",
6743
7018
  "uninstall-plugin"
6744
7019
  ];
7020
+ var NO_ROWS = [];
6745
7021
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6746
7022
  const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6747
7023
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -6758,9 +7034,12 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6758
7034
  onConfirm
6759
7035
  });
6760
7036
  }
6761
- function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
7037
+ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy, check }) {
6762
7038
  const failureOf = (id) => failed?.id === id ? failed.message : null;
6763
7039
  const foot = marketFootVisible(shown, installedList);
7040
+ const sections = marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t)));
7041
+ const installed = sections.find((section) => section.id === "installed");
7042
+ const pendingSection = sections.find((section) => section.id === "not-installed");
6764
7043
  return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, notice === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6765
7044
  t,
6766
7045
  rows: self === void 0 ? [] : [self],
@@ -6774,12 +7053,25 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
6774
7053
  }), self === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", {
6775
7054
  className: MarketPage_module_default.marketSelfDivider,
6776
7055
  "aria-hidden": "true"
6777
- }), marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t))).map((section) => /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6778
- key: section.id,
7056
+ }), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
7057
+ t,
7058
+ titleKey: "panels.market.sectionInstalled",
7059
+ icon: marketSectionIcon("installed"),
7060
+ rows: installed?.rows ?? NO_ROWS,
7061
+ keepHead: true,
7062
+ headAction: check,
7063
+ onDefault: setDefault,
7064
+ boardBusy,
7065
+ pending,
7066
+ failureOf,
7067
+ act,
7068
+ confirmActions: CONFIRM_UNINSTALL,
7069
+ onConfirming
7070
+ }), pendingSection === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6779
7071
  t,
6780
- titleKey: section.titleKey,
6781
- icon: marketSectionIcon(section.id === "installed" ? "installed" : "pending"),
6782
- rows: section.rows,
7072
+ titleKey: pendingSection.titleKey,
7073
+ icon: marketSectionIcon("pending"),
7074
+ rows: pendingSection.rows,
6783
7075
  onDefault: setDefault,
6784
7076
  boardBusy,
6785
7077
  pending,
@@ -6787,11 +7079,12 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
6787
7079
  act,
6788
7080
  confirmActions: CONFIRM_UNINSTALL,
6789
7081
  onConfirming
6790
- })), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
7082
+ }), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6791
7083
  t,
6792
7084
  titleKey: "panels.market.sectionPlugins",
6793
7085
  icon: marketSectionIcon("plugins"),
6794
7086
  rows: pluginList,
7087
+ headAction: check,
6795
7088
  onDefault: setDefault,
6796
7089
  boardBusy,
6797
7090
  pending,
@@ -6840,7 +7133,7 @@ function useMarketScene(input) {
6840
7133
  busyId
6841
7134
  };
6842
7135
  }
6843
- function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
7136
+ function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, updatesCheckedAt = null, updatesFailed = false, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
6844
7137
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
6845
7138
  mock,
6846
7139
  onPending
@@ -6865,29 +7158,14 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
6865
7158
  channel: "provision",
6866
7159
  networkText: t("panels.failed")
6867
7160
  });
6868
- const boardWrite = useHostWrite({
6869
- channel: "prefs",
6870
- resource: "panels",
6871
- networkText: t("panels.failed")
7161
+ const { pending: defaultPending, setDefault } = useMarketDefault({
7162
+ t,
7163
+ mocked: mock !== void 0,
7164
+ defaults,
7165
+ changed,
7166
+ setNotice
6872
7167
  });
6873
- const [writingDefault, setWritingDefault] = (0, react.useState)(false);
6874
- const settleDefault = useBoardSettle(machineBoardSignature(defaults, changed));
6875
- const { busy: boardBusy } = useVisibleBusy(writingDefault || settleDefault.pending, 500);
6876
- const setDefault = async (id, next) => {
6877
- if (mock !== void 0) return;
6878
- setWritingDefault(true);
6879
- settleDefault.begin();
6880
- const outcome = await boardWrite.send({
6881
- action: next ? "show" : "hide",
6882
- id,
6883
- scope: "machine"
6884
- });
6885
- setWritingDefault(false);
6886
- if (!outcome.ok) {
6887
- settleDefault.clear();
6888
- setNotice(t("panels.failed"));
6889
- }
6890
- };
7168
+ const { busy: boardBusy } = useVisibleBusy(defaultPending, 500);
6891
7169
  const pendingRow = pendingRowOf({
6892
7170
  pending,
6893
7171
  removing,
@@ -6934,6 +7212,15 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
6934
7212
  });
6935
7213
  const settled = marketSettled(freshness, installedRead);
6936
7214
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
7215
+ const { busy: checkingShown } = useVisibleBusy(freshness.checking, 500);
7216
+ const check = /* @__PURE__ */ (0, react.createElement)(MarketCheck, {
7217
+ t,
7218
+ checkedAt: updatesCheckedAt,
7219
+ checking: checkingShown,
7220
+ failed: updatesFailed,
7221
+ disabled: pending !== null,
7222
+ onCheck: () => onChanged({ force: true })
7223
+ });
6937
7224
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ (0, react.createElement)(MarketChecking, { t });
6938
7225
  if (nothing) return /* @__PURE__ */ (0, react.createElement)(MarketEmpty, { t });
6939
7226
  return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)(MarketBody, {
@@ -6949,20 +7236,31 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
6949
7236
  act,
6950
7237
  onConfirming: setConfirming,
6951
7238
  setDefault,
6952
- boardBusy
6953
- }), /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
7239
+ boardBusy,
7240
+ check
7241
+ }), /* @__PURE__ */ (0, react.createElement)(UninstallConfirm, {
7242
+ t,
7243
+ confirming,
7244
+ row: confirmingRow,
7245
+ onClose: () => setConfirming(null),
7246
+ act,
7247
+ rowById
7248
+ }));
7249
+ }
7250
+ function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
7251
+ return /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
6954
7252
  key: confirming ?? "",
6955
7253
  t,
6956
- name: confirmingRow === void 0 ? null : marketRowTitle(confirmingRow, t),
6957
- onCancel: () => setConfirming(null),
7254
+ name: row === void 0 ? null : marketRowTitle(row, t),
7255
+ onCancel: onClose,
6958
7256
  onConfirm: () => {
6959
7257
  const id = confirming;
6960
- setConfirming(null);
7258
+ onClose();
6961
7259
  if (id === null) return;
6962
- const row = rowById.get(id);
6963
- act(id, row?.plugin === true ? "uninstall-plugin" : row?.pkg === void 0 ? "uninstall" : "remove-bundle");
7260
+ const target = rowById.get(id);
7261
+ act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
6964
7262
  }
6965
- }));
7263
+ });
6966
7264
  }
6967
7265
  //#endregion
6968
7266
  //#region ../../node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/plugin/localizedFormat.js
@@ -7236,16 +7534,20 @@ function MarketIcon({ src, size = ICON }) {
7236
7534
  onError: () => setFailed(src)
7237
7535
  });
7238
7536
  }
7239
- function EntryAction({ t, entry, title, onInstall, onShowInstalled }) {
7537
+ function EntryAction({ t, entry, title, onInstall, onShowInstalled, installDisabled = false }) {
7240
7538
  const latest = latestVersionOf(entry);
7241
7539
  if (latest === void 0) return null;
7242
- if (latest.install === "installed" || latest.install === "update-available") return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7243
- type: "button",
7244
- variant: "ghost",
7245
- size: "sm",
7246
- "aria-label": t("panels.discover.openInstalled", { name: title }),
7247
- onClick: () => onShowInstalled(entry.name)
7248
- }, t(latest.install === "update-available" ? "panels.discover.cardUpdate" : "panels.discover.cardInstalled"));
7540
+ if (latest.install === "installed" || latest.install === "update-available") {
7541
+ const update = latest.install === "update-available";
7542
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7543
+ type: "button",
7544
+ variant: "ghost",
7545
+ size: "sm",
7546
+ className: update ? MarketPage_module_default.discoverUpdateAction : void 0,
7547
+ "aria-label": t("panels.discover.openInstalled", { name: title }),
7548
+ onClick: () => onShowInstalled(entry.name)
7549
+ }, t(update ? "panels.discover.cardUpdate" : "panels.discover.cardInstalled"));
7550
+ }
7249
7551
  if (latest.compat === "incompatible") return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7250
7552
  label: t("panels.discover.noCompatibleVersion", { runtime: latest.engines?.dsh ?? "" }),
7251
7553
  side: "bottom",
@@ -7263,11 +7565,12 @@ function EntryAction({ t, entry, title, onInstall, onShowInstalled }) {
7263
7565
  type: "button",
7264
7566
  variant: "outline",
7265
7567
  size: "sm",
7568
+ disabled: installDisabled,
7266
7569
  "aria-label": t("panels.discover.installTitle", { name: title }),
7267
7570
  onClick: () => onInstall(entry, latest)
7268
7571
  }, t("panels.discover.cardInstall"));
7269
7572
  }
7270
- function EntryCard({ t, locale, entry, onOpen, onInstall, onShowInstalled }) {
7573
+ function EntryCard({ t, locale, entry, onOpen, onInstall, onShowInstalled, installDisabled = false }) {
7271
7574
  const title = displayTitleOf(entry, locale);
7272
7575
  const latest = latestVersionOf(entry);
7273
7576
  const description = marketText(entry.description, locale);
@@ -7292,10 +7595,11 @@ function EntryCard({ t, locale, entry, onOpen, onInstall, onShowInstalled }) {
7292
7595
  entry,
7293
7596
  title,
7294
7597
  onInstall,
7295
- onShowInstalled
7598
+ onShowInstalled,
7599
+ installDisabled
7296
7600
  })));
7297
7601
  }
7298
- function DiscoverRows({ t, locale, entries, onOpen, onInstall, onShowInstalled }) {
7602
+ function DiscoverRows({ t, locale, entries, onOpen, onInstall, onShowInstalled, installDisabled }) {
7299
7603
  return /* @__PURE__ */ (0, react.createElement)("ul", { className: MarketPage_module_default.discoverList }, entries.map((entry) => /* @__PURE__ */ (0, react.createElement)(EntryCard, {
7300
7604
  key: entry.name,
7301
7605
  t,
@@ -7303,12 +7607,13 @@ function DiscoverRows({ t, locale, entries, onOpen, onInstall, onShowInstalled }
7303
7607
  entry,
7304
7608
  onOpen,
7305
7609
  onInstall,
7306
- onShowInstalled
7610
+ onShowInstalled,
7611
+ installDisabled: installDisabled === true
7307
7612
  })));
7308
7613
  }
7309
7614
  //#endregion
7310
7615
  //#region src/app/layouts/market/discover-versions.tsx
7311
- function DiscoverVersions({ t, locale, entry, onInstall }) {
7616
+ function DiscoverVersions({ t, locale, entry, onInstall, installDisabled = false }) {
7312
7617
  const latest = latestVersionOf(entry);
7313
7618
  return /* @__PURE__ */ (0, react.createElement)("ul", {
7314
7619
  className: MarketPage_module_default.discoverVersions,
@@ -7329,6 +7634,7 @@ function DiscoverVersions({ t, locale, entry, onInstall }) {
7329
7634
  type: "button",
7330
7635
  variant: "ghost",
7331
7636
  size: "sm",
7637
+ disabled: installDisabled,
7332
7638
  "aria-label": t("panels.discover.installVersionTitle", {
7333
7639
  name: entry.name,
7334
7640
  version: version.version
@@ -7341,6 +7647,8 @@ function DiscoverVersions({ t, locale, entry, onInstall }) {
7341
7647
  //#region ../shared/dist/contract/protocol/market-index.js
7342
7648
  var MARKET_DISCOVER_ROUTE = "panels/market-discover";
7343
7649
  var MARKET_DOC_ROUTE = "panels/market-doc";
7650
+ var MARKET_GIT_PROBE_ROUTE = "panels/git-probe";
7651
+ var MARKET_INSTALLED_ROUTE = "panels/market-installed";
7344
7652
  var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
7345
7653
  var MARKET_SOURCES_ROUTE = "panels/market-sources";
7346
7654
  //#endregion
@@ -7351,6 +7659,12 @@ function readMarketDiscover(options = {}) {
7351
7659
  function readMarketSources() {
7352
7660
  return apiGet(MARKET_SOURCES_ROUTE);
7353
7661
  }
7662
+ function readGitProbe(url) {
7663
+ return apiGet(MARKET_GIT_PROBE_ROUTE, { url });
7664
+ }
7665
+ function readMarketInstalled() {
7666
+ return apiGet(MARKET_INSTALLED_ROUTE);
7667
+ }
7354
7668
  function readMarketDoc(name, version, kind) {
7355
7669
  return apiGet(MARKET_DOC_ROUTE, {
7356
7670
  name,
@@ -7417,13 +7731,13 @@ function DiscoverDocPanel({ t, name, version, kind }) {
7417
7731
  }
7418
7732
  //#endregion
7419
7733
  //#region src/app/layouts/market/discover-detail.tsx
7420
- function factLabel(t, fact) {
7734
+ function factLabel$1(t, fact) {
7421
7735
  return t(fact.kind === "package" ? "panels.discover.factPackage" : fact.kind === "registry" ? "panels.discover.factRegistry" : fact.kind === "repository" ? "panels.discover.factRepository" : fact.kind === "commit" ? "panels.discover.factCommit" : "panels.discover.factDirectory");
7422
7736
  }
7423
7737
  function FactRow({ kind, children }) {
7424
7738
  return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverFactRow }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactKind }, kind), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactValue }, children));
7425
7739
  }
7426
- function OverviewPanel({ t, locale, entry, latest, market, onInstall }) {
7740
+ function OverviewPanel({ t, locale, entry, latest, market, onInstall, installDisabled }) {
7427
7741
  const description = marketText(entry.description, locale);
7428
7742
  const date = publishDateText(latest?.publishTimestamp, locale, "long");
7429
7743
  const facts = latest === void 0 ? [] : sourceFactsOf(entry.name, latest);
@@ -7443,12 +7757,13 @@ function OverviewPanel({ t, locale, entry, latest, market, onInstall }) {
7443
7757
  rel: "noopener noreferrer"
7444
7758
  }, entry.homepage)), facts.map((fact) => /* @__PURE__ */ (0, react.createElement)(FactRow, {
7445
7759
  key: `${fact.kind}:${fact.value}`,
7446
- kind: factLabel(t, fact)
7760
+ kind: factLabel$1(t, fact)
7447
7761
  }, /* @__PURE__ */ (0, react.createElement)("code", { className: MarketPage_module_default.discoverCode }, fact.value))), latest === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(FactRow, { kind: t("panels.discover.factPublished") }, date), entry.category === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(FactRow, { kind: t("panels.discover.factCategory") }, entry.category), entry.labels.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)(FactRow, { kind: t("panels.discover.factLabels") }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTags }, entry.labels.map((label) => /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Tag, { key: label }, label)))), /* @__PURE__ */ (0, react.createElement)(FactRow, { kind: t("panels.discover.factMarket") }, market))), latest === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("section", { className: MarketPage_module_default.discoverSection }, /* @__PURE__ */ (0, react.createElement)("h4", { className: MarketPage_module_default.discoverSectionTitle }, t("panels.discover.detailVersions")), /* @__PURE__ */ (0, react.createElement)(DiscoverVersions, {
7448
7762
  t,
7449
7763
  locale,
7450
7764
  entry,
7451
- onInstall
7765
+ onInstall,
7766
+ installDisabled: installDisabled === true
7452
7767
  })));
7453
7768
  }
7454
7769
  function DiscoverDetail(props) {
@@ -7495,7 +7810,8 @@ function DiscoverDetail(props) {
7495
7810
  entry,
7496
7811
  title,
7497
7812
  onInstall: props.onInstall,
7498
- onShowInstalled: props.onShowInstalled
7813
+ onShowInstalled: props.onShowInstalled,
7814
+ installDisabled: props.installDisabled === true
7499
7815
  })), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverDetailTabs }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.SegmentedTabs, {
7500
7816
  className: MarketPage_module_default.discoverDetailTabList,
7501
7817
  items: tabItems,
@@ -7513,7 +7829,8 @@ function DiscoverDetail(props) {
7513
7829
  entry,
7514
7830
  latest,
7515
7831
  market: props.market,
7516
- onInstall: props.onInstall
7832
+ onInstall: props.onInstall,
7833
+ installDisabled: props.installDisabled === true
7517
7834
  })) : null, tab === "overview" || latest === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", {
7518
7835
  className: MarketPage_module_default.discoverDetailPanel,
7519
7836
  id: `${idPrefix}-panel-${tab}`,
@@ -7528,12 +7845,185 @@ function DiscoverDetail(props) {
7528
7845
  })));
7529
7846
  }
7530
7847
  //#endregion
7848
+ //#region src/app/layouts/market/discover-installing.tsx
7849
+ function DiscoverInstalling({ t, name, cancelling, onCancel }) {
7850
+ return /* @__PURE__ */ (0, react.createElement)("p", {
7851
+ className: MarketPage_module_default.discoverInstallBar,
7852
+ role: "status"
7853
+ }, /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverInstallText }, t("panels.discover.installingNamed", { name })), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7854
+ type: "button",
7855
+ variant: "outline",
7856
+ size: "sm",
7857
+ disabled: cancelling,
7858
+ "aria-busy": cancelling,
7859
+ onClick: onCancel
7860
+ }, t(cancelling ? "panels.discover.cancelling" : "panels.discover.cancelInstall")));
7861
+ }
7862
+ //#endregion
7863
+ //#region src/app/layouts/market/discover-transport.tsx
7864
+ function stateText(t, state) {
7865
+ if (state === "ok") return "";
7866
+ if (state === "auth") return t("panels.discover.transportAuth");
7867
+ if (state === "unreachable") return t("panels.discover.transportUnreachable");
7868
+ if (state === "unknown") return t("panels.discover.transportUnknown");
7869
+ return t("panels.discover.transportChecking");
7870
+ }
7871
+ function kindText(t, kind) {
7872
+ return t(kind === "ssh" ? "panels.discover.transportSsh" : "panels.discover.transportHttps");
7873
+ }
7874
+ function DiscoverTransport({ t, transport }) {
7875
+ const [open, setOpen] = (0, react.useState)(false);
7876
+ const chosenRow = transport.rows.find((row) => row.url === transport.chosen);
7877
+ const chosenState = chosenRow === void 0 ? void 0 : transport.states[chosenRow.url] ?? "checking";
7878
+ const probing = transport.probing;
7879
+ const summary = chosenRow !== void 0 ? kindText(t, chosenRow.kind) : probing ? t("panels.discover.transportChecking") : t("panels.discover.transportNone");
7880
+ const summaryState = probing || chosenState === void 0 ? "" : stateText(t, chosenState);
7881
+ const needsAuth = transport.rows.length > 0 && transport.rows.every((row) => transport.states[row.url] === "auth") && transport.customState !== "ok";
7882
+ const customBusy = transport.customState === "checking";
7883
+ return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransport }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransportHead }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportTitle }, t("panels.discover.transportTitle")), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportKind }, summary), summaryState === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, summaryState), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7884
+ type: "button",
7885
+ variant: "ghost",
7886
+ size: "sm",
7887
+ onClick: () => setOpen((value) => !value)
7888
+ }, t(open ? "panels.discover.transportChangeHide" : "panels.discover.transportChange"))), open ? /* @__PURE__ */ (0, react.createElement)("div", {
7889
+ className: MarketPage_module_default.discoverTransportRows,
7890
+ role: "radiogroup",
7891
+ "aria-label": t("panels.discover.transportTitle")
7892
+ }, transport.rows.map((row) => {
7893
+ const state = transport.states[row.url] ?? "checking";
7894
+ const label = stateText(t, state);
7895
+ return /* @__PURE__ */ (0, react.createElement)("label", {
7896
+ key: row.url,
7897
+ className: MarketPage_module_default.discoverTransportRow,
7898
+ "data-state": state,
7899
+ title: row.url
7900
+ }, /* @__PURE__ */ (0, react.createElement)("input", {
7901
+ type: "radio",
7902
+ className: MarketPage_module_default.discoverTransportRadio,
7903
+ name: "discover-git-transport",
7904
+ value: row.url,
7905
+ checked: transport.chosen === row.url,
7906
+ onChange: () => transport.setChosen(row.url)
7907
+ }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportKind }, kindText(t, row.kind)), label === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, label));
7908
+ })) : null, open ? /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransportCustom }, /* @__PURE__ */ (0, react.createElement)(TextField, {
7909
+ type: "text",
7910
+ className: MarketPage_module_default.discoverTransportInput,
7911
+ value: transport.custom,
7912
+ placeholder: t("panels.discover.transportPlaceholder"),
7913
+ "aria-label": t("panels.discover.transportPlaceholder"),
7914
+ spellCheck: false,
7915
+ autoComplete: "off",
7916
+ onChange: (event) => transport.setCustom(event.target.value),
7917
+ onKeyDown: (event) => {
7918
+ if (event.key === "Enter") transport.checkCustom();
7919
+ }
7920
+ }), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7921
+ type: "button",
7922
+ variant: "outline",
7923
+ size: "sm",
7924
+ disabled: transport.custom.trim() === "" || customBusy,
7925
+ "aria-busy": customBusy,
7926
+ onClick: transport.checkCustom
7927
+ }, t(customBusy ? "panels.discover.transportChecking" : "panels.discover.transportTest")), transport.customState === null || stateText(t, transport.customState) === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, stateText(t, transport.customState))) : null, needsAuth ? /* @__PURE__ */ (0, react.createElement)("p", {
7928
+ className: MarketPage_module_default.discoverNotice,
7929
+ role: "note"
7930
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
7931
+ size: 14,
7932
+ "aria-hidden": "true"
7933
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.transportNeedsAuth"))) : null);
7934
+ }
7935
+ //#endregion
7936
+ //#region src/app/layouts/market/use-git-transport.ts
7937
+ function probeOrUnknown(url) {
7938
+ return readGitProbe(url).then((response) => response.ok ? response.status : "unknown").catch(() => "unknown");
7939
+ }
7940
+ function usable(state) {
7941
+ return state !== void 0 && state !== "auth" && state !== "checking";
7942
+ }
7943
+ function defaultOf(rows, states) {
7944
+ const readable = rows.find((row) => states[row.url] === "ok");
7945
+ if (readable !== void 0) return readable.url;
7946
+ const fallback = rows.find((row) => usable(states[row.url]));
7947
+ return fallback === void 0 ? null : fallback.url;
7948
+ }
7949
+ function useGitTransport(source, preferredKind) {
7950
+ const rows = (0, react.useMemo)(() => {
7951
+ if (source === null) return [];
7952
+ const candidates = gitTransportCandidates(source.url);
7953
+ if (preferredKind === void 0) return candidates;
7954
+ return [...candidates].sort((left, right) => Number(right.kind === preferredKind) - Number(left.kind === preferredKind));
7955
+ }, [source, preferredKind]);
7956
+ const [results, setResults] = (0, react.useState)({});
7957
+ const [picked, setPicked] = (0, react.useState)(null);
7958
+ const [custom, setCustom] = (0, react.useState)("");
7959
+ const [customState, setCustomState] = (0, react.useState)(null);
7960
+ const generation = (0, react.useRef)(0);
7961
+ (0, react.useEffect)(() => {
7962
+ const mirror = ++generation.current;
7963
+ for (const row of rows) probeOrUnknown(row.url).then((state) => {
7964
+ if (generation.current !== mirror) return;
7965
+ setResults((current) => ({
7966
+ ...current,
7967
+ [row.url]: state
7968
+ }));
7969
+ });
7970
+ return () => {
7971
+ generation.current += 1;
7972
+ };
7973
+ }, [rows]);
7974
+ const checkCustom = (0, react.useCallback)(() => {
7975
+ const wanted = custom.trim();
7976
+ if (wanted === "") return;
7977
+ const mirror = ++generation.current;
7978
+ setCustomState("checking");
7979
+ probeOrUnknown(wanted).then((state) => {
7980
+ if (generation.current !== mirror) return;
7981
+ setCustomState(state);
7982
+ if (usable(state)) setPicked(wanted);
7983
+ });
7984
+ }, [custom]);
7985
+ const states = (0, react.useMemo)(() => {
7986
+ const next = {};
7987
+ for (const row of rows) next[row.url] = results[row.url] ?? "checking";
7988
+ return next;
7989
+ }, [results, rows]);
7990
+ const chosen = picked !== null && (rows.some((row) => row.url === picked) || picked === custom.trim()) ? picked : defaultOf(rows, states);
7991
+ return {
7992
+ rows,
7993
+ chosen,
7994
+ states,
7995
+ custom,
7996
+ customState,
7997
+ probing: rows.some((row) => states[row.url] === "checking"),
7998
+ ready: chosen !== null,
7999
+ setChosen: setPicked,
8000
+ setCustom,
8001
+ checkCustom
8002
+ };
8003
+ }
8004
+ //#endregion
7531
8005
  //#region src/app/layouts/market/discover-confirm.tsx
7532
- function DiscoverConfirm({ t, locale, choice, onCancel, onConfirm }) {
8006
+ function DiscoverConfirm({ t, locale, choice, transports, onCancel, onConfirm }) {
7533
8007
  if (choice === null) return null;
8008
+ return /* @__PURE__ */ (0, react.createElement)(DiscoverConfirmBody, {
8009
+ t,
8010
+ locale,
8011
+ choice,
8012
+ transports,
8013
+ onCancel,
8014
+ onConfirm
8015
+ });
8016
+ }
8017
+ function factLabel(t, kind) {
8018
+ return t(kind === "package" ? "panels.discover.factPackage" : kind === "registry" ? "panels.discover.factRegistry" : kind === "repository" ? "panels.discover.factRepository" : kind === "commit" ? "panels.discover.factCommit" : "panels.discover.factDirectory");
8019
+ }
8020
+ function DiscoverConfirmBody({ t, locale, choice, transports, onCancel, onConfirm }) {
8021
+ const git = choice.version.source.type === "git" ? choice.version.source : null;
8022
+ const host = git === null ? void 0 : gitAddressOf(git.url)?.host;
8023
+ const transport = useGitTransport(git, host === void 0 ? void 0 : transports[host]);
7534
8024
  const title = displayTitleOf(choice.entry, locale) || choice.entry.name;
7535
- const facts = sourceFactsOf(choice.entry.name, choice.version);
7536
- const factLabel = (kind) => t(kind === "package" ? "panels.discover.factPackage" : kind === "registry" ? "panels.discover.factRegistry" : kind === "repository" ? "panels.discover.factRepository" : kind === "commit" ? "panels.discover.factCommit" : "panels.discover.factDirectory");
8025
+ const facts = sourceFactsOf(choice.entry.name, choice.version).filter((fact) => git === null || fact.kind !== "repository");
8026
+ const ready = git === null || transport.ready;
7537
8027
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
7538
8028
  open: true,
7539
8029
  onClose: onCancel,
@@ -7548,15 +8038,20 @@ function DiscoverConfirm({ t, locale, choice, onCancel, onConfirm }) {
7548
8038
  type: "button",
7549
8039
  variant: "primary",
7550
8040
  autoFocus: true,
7551
- onClick: onConfirm
7552
- }, t("panels.discover.cardInstall")))
8041
+ disabled: !ready,
8042
+ "aria-busy": git !== null && transport.probing,
8043
+ onClick: () => onConfirm(transport.chosen ?? void 0)
8044
+ }, git !== null && transport.probing ? /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 12 }) : null, t(git !== null && transport.probing ? "panels.discover.transportChecking" : "panels.discover.cardInstall")))
7553
8045
  }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverDialogBody }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverConfirmHead }, /* @__PURE__ */ (0, react.createElement)("span", {
7554
8046
  className: MarketPage_module_default.discoverArtwork,
7555
8047
  "aria-hidden": "true"
7556
- }, /* @__PURE__ */ (0, react.createElement)(MarketIcon, { src: choice.entry.icon })), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverStrong }, title), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverMeta }, choice.version.version))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverFacts }, choice.entry.author === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverFactRow }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactKind }, t("panels.discover.factAuthor")), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactValue }, choice.entry.author)), facts.map((fact) => /* @__PURE__ */ (0, react.createElement)("div", {
8048
+ }, /* @__PURE__ */ (0, react.createElement)(MarketIcon, { src: choice.entry.icon })), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverStrong }, title), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverMeta }, choice.version.version))), git === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverTransport, {
8049
+ t,
8050
+ transport
8051
+ }), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverFacts }, choice.entry.author === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverFactRow }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactKind }, t("panels.discover.factAuthor")), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactValue }, choice.entry.author)), facts.map((fact) => /* @__PURE__ */ (0, react.createElement)("div", {
7557
8052
  key: `${fact.kind}:${fact.value}`,
7558
8053
  className: MarketPage_module_default.discoverFactRow
7559
- }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactKind }, factLabel(fact.kind)), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactValue }, /* @__PURE__ */ (0, react.createElement)("code", { className: MarketPage_module_default.discoverCode }, fact.value))))), /* @__PURE__ */ (0, react.createElement)("p", {
8054
+ }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactKind }, factLabel(t, fact.kind)), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverFactValue }, /* @__PURE__ */ (0, react.createElement)("code", { className: MarketPage_module_default.discoverCode }, fact.value))))), /* @__PURE__ */ (0, react.createElement)("p", {
7560
8055
  className: MarketPage_module_default.discoverNotice,
7561
8056
  role: "note"
7562
8057
  }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
@@ -7833,6 +8328,7 @@ function DiscoverDialogs({ t, d }) {
7833
8328
  t,
7834
8329
  locale: d.locale,
7835
8330
  choice: d.choice,
8331
+ transports: d.transports,
7836
8332
  onCancel: () => d.setChoice(null),
7837
8333
  onConfirm: d.install
7838
8334
  }), /* @__PURE__ */ (0, react.createElement)(DiscoverInitDialog, {
@@ -8047,6 +8543,7 @@ function installVerdictOf(value, t) {
8047
8543
  const change = changeOf(value);
8048
8544
  if (change === void 0) return { kind: "quiet" };
8049
8545
  if (SHIPPED.includes(change.application)) return { kind: "done" };
8546
+ if (change.application === "cancelled") return { kind: "cancelled" };
8050
8547
  if (change.application !== "failed") return { kind: "quiet" };
8051
8548
  return {
8052
8549
  kind: "failed",
@@ -8067,6 +8564,8 @@ function useDiscover(t, active, onInstalled) {
8067
8564
  const [manageOpen, setManageOpen] = (0, react.useState)(false);
8068
8565
  const [initOpen, setInitOpen] = (0, react.useState)(false);
8069
8566
  const [choice, setChoice] = (0, react.useState)(null);
8567
+ const [installing, setInstalling] = (0, react.useState)(null);
8568
+ const [cancelling, setCancelling] = (0, react.useState)(false);
8070
8569
  const [notice, setNotice] = (0, react.useState)(null);
8071
8570
  const [addingSource, setAddingSource] = (0, react.useState)(false);
8072
8571
  const [pendingSourceId, setPendingSourceId] = (0, react.useState)(null);
@@ -8084,6 +8583,10 @@ function useDiscover(t, active, onInstalled) {
8084
8583
  channel: "provision",
8085
8584
  networkText: t("panels.discover.failed")
8086
8585
  });
8586
+ const cancel = useHostWrite({
8587
+ channel: "provision",
8588
+ networkText: t("panels.discover.failed")
8589
+ });
8087
8590
  const loadSources = (0, react.useCallback)(async () => {
8088
8591
  const ticket = sourceTicket.current + 1;
8089
8592
  sourceTicket.current = ticket;
@@ -8092,7 +8595,8 @@ function useDiscover(t, active, onInstalled) {
8092
8595
  if (response === null || !response.ok) return;
8093
8596
  setKnownSources({
8094
8597
  sources: sourceRowsOf(response.sources),
8095
- selected: response.selected
8598
+ selected: response.selected,
8599
+ transports: response.transports ?? {}
8096
8600
  });
8097
8601
  }, []);
8098
8602
  const load = (0, react.useCallback)(async (force = false) => {
@@ -8112,7 +8616,8 @@ function useDiscover(t, active, onInstalled) {
8112
8616
  setPayload(response);
8113
8617
  setKnownSources({
8114
8618
  sources: response.sources,
8115
- selected: response.selected
8619
+ selected: response.selected,
8620
+ transports: {}
8116
8621
  });
8117
8622
  setLimit(50);
8118
8623
  }, [t]);
@@ -8164,6 +8669,7 @@ function useDiscover(t, active, onInstalled) {
8164
8669
  if (payload?.problem === void 0 || payload.selected === null) return null;
8165
8670
  return {
8166
8671
  id: payload.selected,
8672
+ kind: payload.problem.kind,
8167
8673
  detail: payload.problem.detail ?? ""
8168
8674
  };
8169
8675
  }, [payload]);
@@ -8277,7 +8783,7 @@ function useDiscover(t, active, onInstalled) {
8277
8783
  setDetail(null);
8278
8784
  beginSwitch();
8279
8785
  setKnownSources((current) => current === null ? current : {
8280
- sources: current.sources,
8786
+ ...current,
8281
8787
  selected: id
8282
8788
  });
8283
8789
  sources.send({
@@ -8294,14 +8800,25 @@ function useDiscover(t, active, onInstalled) {
8294
8800
  await load(true);
8295
8801
  });
8296
8802
  };
8297
- const install = () => {
8298
- if (choice === null) return;
8299
- const target = marketInstallTarget(choice.entry.name, choice.version.version, choice.version.source);
8803
+ const install = (url) => {
8804
+ if (choice === null || installing !== null) return;
8805
+ const source = choice.version.source;
8806
+ const target = marketInstallTarget(choice.entry.name, choice.version.version, source.type === "git" && url !== void 0 ? {
8807
+ ...source,
8808
+ url
8809
+ } : source);
8810
+ const name = displayTitleOf(choice.entry, locale);
8811
+ const requestId = globalThis.crypto.randomUUID();
8300
8812
  setChoice(null);
8301
8813
  setNotice(null);
8814
+ setInstalling({
8815
+ name,
8816
+ requestId
8817
+ });
8302
8818
  provision.send({
8303
8819
  action: "install-version",
8304
8820
  spec: target.spec,
8821
+ requestId,
8305
8822
  ...target.registry === void 0 ? {} : { registry: target.registry }
8306
8823
  }).then((outcome) => {
8307
8824
  if (!outcome.ok) return;
@@ -8311,9 +8828,25 @@ function useDiscover(t, active, onInstalled) {
8311
8828
  onInstalled();
8312
8829
  return;
8313
8830
  }
8831
+ if (verdict.kind === "cancelled") {
8832
+ setNotice(t("panels.discover.installCancelled", { name }));
8833
+ onInstalled();
8834
+ return;
8835
+ }
8314
8836
  if (verdict.kind !== "done") return;
8315
- setNotice(t("panels.discover.installedDone", { name: choice.entry.name }));
8837
+ setNotice(t("panels.discover.installedDone", { name }));
8316
8838
  onInstalled();
8839
+ }).finally(() => {
8840
+ setInstalling(null);
8841
+ setCancelling(false);
8842
+ });
8843
+ };
8844
+ const cancelInstall = () => {
8845
+ if (installing === null || cancelling) return;
8846
+ setCancelling(true);
8847
+ cancel.send({
8848
+ action: "cancel-install",
8849
+ requestId: installing.requestId
8317
8850
  });
8318
8851
  };
8319
8852
  const reload = () => {
@@ -8330,6 +8863,7 @@ function useDiscover(t, active, onInstalled) {
8330
8863
  failure,
8331
8864
  sources: knownSources?.sources ?? payload?.sources ?? [],
8332
8865
  selected: knownSources?.selected ?? payload?.selected ?? null,
8866
+ transports: knownSources?.transports ?? {},
8333
8867
  entries,
8334
8868
  shown,
8335
8869
  total: sorted.length,
@@ -8345,6 +8879,9 @@ function useDiscover(t, active, onInstalled) {
8345
8879
  writeFailed: sources.failed,
8346
8880
  provisionFailed: provision.failed,
8347
8881
  busy: sources.busy,
8882
+ installing: installing === null ? null : installing.name,
8883
+ cancelling,
8884
+ installDisabled: installing !== null,
8348
8885
  addingSource,
8349
8886
  manageOpen,
8350
8887
  problem,
@@ -8362,7 +8899,10 @@ function useDiscover(t, active, onInstalled) {
8362
8899
  openDetail: (name) => setDetail(name),
8363
8900
  closeDetail: () => setDetail(null),
8364
8901
  setDetailEntry: setDetail,
8365
- setChoice,
8902
+ setChoice: (value) => {
8903
+ if (value !== null && installing !== null) return;
8904
+ setChoice(value);
8905
+ },
8366
8906
  setManageOpen,
8367
8907
  setInitOpen,
8368
8908
  initialize,
@@ -8371,7 +8911,8 @@ function useDiscover(t, active, onInstalled) {
8371
8911
  addSource,
8372
8912
  removeSourceById,
8373
8913
  selectSource,
8374
- install
8914
+ install,
8915
+ cancelInstall
8375
8916
  };
8376
8917
  }
8377
8918
  //#endregion
@@ -8436,15 +8977,21 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
8436
8977
  }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
8437
8978
  size: 14,
8438
8979
  "aria-hidden": "true"
8439
- }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.stale"))) : null, uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
8980
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.stale"))) : null, uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverReadFailure, {
8440
8981
  t,
8441
8982
  text: readFailed,
8983
+ auth: d.problem?.kind === "git-auth",
8442
8984
  onRetry: d.reload
8443
8985
  }) : /* @__PURE__ */ (0, react.createElement)(DiscoverUninitialized, {
8444
8986
  t,
8445
8987
  path: uninitialized.path,
8446
8988
  empty: uninitialized.empty,
8447
8989
  onInit: () => d.setInitOpen(true)
8990
+ }), d.installing === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverInstalling, {
8991
+ t,
8992
+ name: d.installing,
8993
+ cancelling: d.cancelling,
8994
+ onCancel: d.cancelInstall
8448
8995
  }), d.notice === null ? null : /* @__PURE__ */ (0, react.createElement)("p", {
8449
8996
  className: MarketPage_module_default.discoverNotice,
8450
8997
  role: "note"
@@ -8461,7 +9008,8 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
8461
9008
  entry,
8462
9009
  version
8463
9010
  }),
8464
- onShowInstalled
9011
+ onShowInstalled,
9012
+ installDisabled: d.installDisabled
8465
9013
  }) : readFailed !== null || uninitialized !== null || retrying ? null : d.shown.length === 0 ? /* @__PURE__ */ (0, react.createElement)(DiscoverEmptyText, { text: emptyText }) : /* @__PURE__ */ (0, react.createElement)(DiscoverRows, {
8466
9014
  t,
8467
9015
  locale: d.locale,
@@ -8471,7 +9019,8 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
8471
9019
  entry,
8472
9020
  version
8473
9021
  }),
8474
- onShowInstalled
9022
+ onShowInstalled,
9023
+ installDisabled: d.installDisabled
8475
9024
  }), d.detailEntry !== null || d.total <= d.shown.length ? null : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8476
9025
  type: "button",
8477
9026
  variant: "outline",
@@ -8484,7 +9033,7 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
8484
9033
  }
8485
9034
  //#endregion
8486
9035
  //#region src/app/layouts/market/market-header.tsx
8487
- function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd }) {
9036
+ function MarketHeader({ t, idPrefix, tab, busy, onTab, onAdd }) {
8488
9037
  const tabItems = (0, react.useMemo)(() => [{
8489
9038
  value: "installed",
8490
9039
  label: t("panels.market.tabInstalled"),
@@ -8496,23 +9045,14 @@ function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd
8496
9045
  id: `${idPrefix}-tab-discover`,
8497
9046
  panelId: `${idPrefix}-panel-discover`
8498
9047
  }], [idPrefix, t]);
8499
- 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)(Tip, { label: t("panels.market.recheck") }, /* @__PURE__ */ (0, react.createElement)("button", {
8500
- type: "button",
8501
- className: `${MarketPage_module_default.marketIconButton}${checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
8502
- "aria-label": t("panels.market.checkUpdates"),
8503
- disabled: busy,
8504
- onClick: onReload
8505
- }, /* @__PURE__ */ (0, react.createElement)("span", {
8506
- className: MarketPage_module_default.marketIconWrap,
8507
- "aria-hidden": "true"
8508
- }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, null)))), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
9048
+ 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, {
8509
9049
  variant: "primary",
8510
9050
  size: "sm",
8511
9051
  className: MarketPage_module_default.marketAddButton,
8512
9052
  icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
8513
9053
  disabled: busy,
8514
9054
  onClick: onAdd
8515
- }, 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, {
9055
+ }, 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, {
8516
9056
  className: MarketPage_module_default.marketTabList,
8517
9057
  items: tabItems,
8518
9058
  value: tab,
@@ -8886,6 +9426,30 @@ function useBoardWorkspace(workspaces, sessions) {
8886
9426
  };
8887
9427
  }
8888
9428
  //#endregion
9429
+ //#region src/app/layouts/market/use-settling-modules.ts
9430
+ var NO_UNITS = /* @__PURE__ */ new Set();
9431
+ function unitsOf(key) {
9432
+ return key === "" ? [] : key.split("|");
9433
+ }
9434
+ function useSettlingModules(installedKey, rosterKey, activeKey) {
9435
+ const seenRef = (0, react.useRef)(null);
9436
+ const [settling, setSettling] = (0, react.useState)(NO_UNITS);
9437
+ (0, react.useEffect)(() => {
9438
+ const units = unitsOf(installedKey);
9439
+ const held = holdBack(units, new Set(unitsOf(rosterKey)), new Set(unitsOf(activeKey)), seenRef.current);
9440
+ seenRef.current = new Set(units);
9441
+ setSettling(held.length === 0 ? NO_UNITS : new Set(held));
9442
+ if (held.length === 0) return;
9443
+ const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
9444
+ return () => clearTimeout(timer);
9445
+ }, [
9446
+ installedKey,
9447
+ rosterKey,
9448
+ activeKey
9449
+ ]);
9450
+ return settling;
9451
+ }
9452
+ //#endregion
8889
9453
  //#region src/shared/api/installed-plugins.ts
8890
9454
  var INSTALLED_PLUGINS_ROUTE = "panels/plugins";
8891
9455
  //#endregion
@@ -8911,6 +9475,8 @@ var state = {
8911
9475
  workbench: null,
8912
9476
  selfUpdate: null,
8913
9477
  read: false,
9478
+ checking: false,
9479
+ failed: false,
8914
9480
  checkedAt: null
8915
9481
  };
8916
9482
  var listeners$2 = /* @__PURE__ */ new Set();
@@ -8930,6 +9496,18 @@ function subscribeModuleVersions(listener) {
8930
9496
  listeners$2.delete(listener);
8931
9497
  };
8932
9498
  }
9499
+ function withMarketUpdates(modules, rows) {
9500
+ if (rows.length === 0) return modules;
9501
+ const byPkg = new Map(rows.map((row) => [row.pkg, row]));
9502
+ return modules.map((module) => {
9503
+ const row = byPkg.get(module.pkg);
9504
+ return row === void 0 ? module : {
9505
+ ...module,
9506
+ latest: row.version,
9507
+ market: row
9508
+ };
9509
+ });
9510
+ }
8933
9511
  function publish$1(next) {
8934
9512
  state = next;
8935
9513
  for (const listener of [...listeners$2]) listener();
@@ -8939,18 +9517,30 @@ function runModuleVersionsRead(force = false, fresh = false) {
8939
9517
  if (!fresh && inFlight !== null && inFlight.force === force && inFlight.epoch === at) return inFlight.promise;
8940
9518
  const seq = readSeq += 1;
8941
9519
  if (force) newestForceSeq = seq;
8942
- const promise = Promise.all([readModuleVersions(force), readInstalledPlugins(force)]).catch(() => null).then((responses) => {
9520
+ if (!state.checking) publish$1({
9521
+ ...state,
9522
+ checking: true
9523
+ });
9524
+ const promise = Promise.all([
9525
+ readModuleVersions(force),
9526
+ readInstalledPlugins(force),
9527
+ readMarketInstalled()
9528
+ ]).catch(() => null).then((responses) => {
8943
9529
  if (at !== epoch) return;
8944
9530
  if (!force && seq < newestForceSeq) return;
8945
9531
  const versions = responses?.[0];
8946
9532
  const plugins = responses?.[1];
9533
+ const market = responses?.[2];
9534
+ const read = versions?.ok === true;
8947
9535
  publish$1({
8948
- modules: versions?.ok === true ? versions.modules : state.modules,
9536
+ modules: read ? withMarketUpdates(versions.modules, market?.ok === true ? market.modules : []) : state.modules,
8949
9537
  plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
8950
- workbench: versions?.ok === true ? versions.workbench ?? null : state.workbench,
8951
- selfUpdate: versions?.ok === true ? versions.selfUpdate ?? null : state.selfUpdate,
9538
+ workbench: read ? versions.workbench ?? null : state.workbench,
9539
+ selfUpdate: read ? versions.selfUpdate ?? null : state.selfUpdate,
8952
9540
  read: true,
8953
- checkedAt: Date.now()
9541
+ checking: false,
9542
+ failed: !read,
9543
+ checkedAt: read ? Date.now() : state.checkedAt
8954
9544
  });
8955
9545
  }).finally(() => {
8956
9546
  if (inFlight?.promise === promise) inFlight = null;
@@ -8985,6 +9575,8 @@ function useModuleVersions() {
8985
9575
  workbench: value.workbench,
8986
9576
  selfUpdate: value.selfUpdate,
8987
9577
  read: value.read,
9578
+ checking: value.checking,
9579
+ failed: value.failed,
8988
9580
  checkedAt: value.checkedAt,
8989
9581
  reload
8990
9582
  };
@@ -9531,7 +10123,6 @@ var MOCK_FRESHNESS = {
9531
10123
  checking: false,
9532
10124
  checkedAt: null
9533
10125
  };
9534
- var NO_UNITS = /* @__PURE__ */ new Set();
9535
10126
  function useLiveManifests(units) {
9536
10127
  const subscribe = (0, react.useCallback)((listener) => units.subscribe(listener), [units]);
9537
10128
  const revision = (0, react.useCallback)(() => units.version(), [units]);
@@ -9573,7 +10164,7 @@ function MarketPanel({ t, units, titleOf }) {
9573
10164
  const manifests = useLiveManifests(units);
9574
10165
  const installable = useInstallableUnits(units);
9575
10166
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
9576
- const { modules, plugins, workbench, selfUpdate, read: installedRead, reload: reloadVersions } = useModuleVersions();
10167
+ const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, failed: versionsFailed, checkedAt: versionsCheckedAt, read: installedRead, reload: reloadVersions } = useModuleVersions();
9577
10168
  const machineBoard = useEnabledUnits(0, null);
9578
10169
  const [adding, setAdding] = (0, react.useState)(false);
9579
10170
  const [acting, setActing] = (0, react.useState)(false);
@@ -9616,27 +10207,10 @@ function MarketPanel({ t, units, titleOf }) {
9616
10207
  forceProbe,
9617
10208
  reloadVersions
9618
10209
  ]);
9619
- const installedKey = (installed ?? []).map((module) => module.unit).join("|");
9620
- const rosterKey = manifests.map((manifest) => manifest.id).join("|");
9621
- const activeKey = Object.keys(capabilities ?? {}).join("|");
9622
- const seenRef = (0, react.useRef)(null);
9623
- const [settling, setSettling] = (0, react.useState)(NO_UNITS);
9624
- (0, react.useEffect)(() => {
9625
- const units = installedKey === "" ? [] : installedKey.split("|");
9626
- const held = holdBack(units, new Set(rosterKey === "" ? [] : rosterKey.split("|")), new Set(activeKey === "" ? [] : activeKey.split("|")), seenRef.current);
9627
- seenRef.current = new Set(units);
9628
- setSettling(held.length === 0 ? NO_UNITS : new Set(held));
9629
- if (held.length === 0) return;
9630
- const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
9631
- return () => clearTimeout(timer);
9632
- }, [
9633
- installedKey,
9634
- rosterKey,
9635
- activeKey
9636
- ]);
10210
+ const settling = useSettlingModules((installed ?? []).map((module) => module.unit).join("|"), manifests.map((manifest) => manifest.id).join("|"), Object.keys(capabilities ?? {}).join("|"));
9637
10211
  const freshness = {
9638
10212
  loaded: capabilities !== null,
9639
- checking,
10213
+ checking: checking || versionsChecking,
9640
10214
  checkedAt
9641
10215
  };
9642
10216
  const pendingFreshness = {
@@ -9649,15 +10223,13 @@ function MarketPanel({ t, units, titleOf }) {
9649
10223
  const mockNonce = devMarket.pick.nonce;
9650
10224
  const shownFreshness = mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS;
9651
10225
  const shownRead = mock === void 0 ? installedRead : mock.installedRead ?? true;
9652
- const busy = !marketSettled(shownFreshness, shownRead) || shownFreshness.checking || acting;
10226
+ const busy = !marketSettled(shownFreshness, shownRead) || acting;
9653
10227
  return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketPage }, /* @__PURE__ */ (0, react.createElement)(MarketHeader, {
9654
10228
  t,
9655
10229
  idPrefix: MARKET_PANEL_ID,
9656
10230
  tab,
9657
10231
  busy,
9658
- checking: shownFreshness.checking,
9659
10232
  onTab: setTab,
9660
- onReload: () => reload({ force: true }),
9661
10233
  onAdd: openAddModule
9662
10234
  }), devMarket.strip, /* @__PURE__ */ (0, react.createElement)("div", {
9663
10235
  id: `${MARKET_PANEL_ID}-panel-installed`,
@@ -9675,6 +10247,8 @@ function MarketPanel({ t, units, titleOf }) {
9675
10247
  onChanged: reload,
9676
10248
  onPending: setActing,
9677
10249
  updates,
10250
+ updatesCheckedAt: versionsCheckedAt,
10251
+ updatesFailed: versionsFailed,
9678
10252
  installed,
9679
10253
  installedRead: shownRead,
9680
10254
  workbench,
@@ -15056,7 +15630,7 @@ function messagesOf(units) {
15056
15630
  ...face.messages === void 0 ? {} : { messages: face.messages }
15057
15631
  }));
15058
15632
  }
15059
- 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_14s5s_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_14s5s_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_14s5s_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_14s5s_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_14s5s_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_14s5s_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_14s5s_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_14s5s_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_14s5s_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_14s5s_39 ._marketVersion_14s5s_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_14s5s_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_14s5s_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_14s5s_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_14s5s_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_14s5s_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_14s5s_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_14s5s_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_14s5s_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_14s5s_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_14s5s_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_14s5s_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_14s5s_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_14s5s_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_14s5s_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionQuiet_14s5s_175 ._marketSectionTitle_14s5s_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_14s5s_175 ._marketName_14s5s_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_14s5s_175 ._marketIcon_14s5s_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_14s5s_188 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_14s5s_198 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_14s5s_205 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_14s5s_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_14s5s_217 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_14s5s_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_14s5s_235 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_14s5s_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_14s5s_248 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_14s5s_254 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketPanel_14s5s_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_14s5s_263[hidden] {\n display: none;\n}\n\n._marketTabs_14s5s_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_14s5s_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_14s5s_283 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_14s5s_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_14s5s_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_14s5s_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_14s5s_312 svg {\n animation: _wb-spin_14s5s_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_14s5s_316 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_14s5s_212 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketEmptyTitle_14s5s_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_14s5s_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_14s5s_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_14s5s_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_14s5s_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_14s5s_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_14s5s_372 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_14s5s_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_14s5s_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_14s5s_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_14s5s_395 {\n flex: none;\n}\n\n._discoverSearch_14s5s_399 {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n._discoverSearchField_14s5s_407 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_14s5s_412 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_14s5s_407 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_14s5s_399 ._discoverSearchClear_14s5s_421 {\n position: absolute;\n top: 50%;\n inset-inline-end: var(--wb-len-4);\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n color: var(--dsw-alias-label-tertiary);\n transform: translateY(-50%);\n}\n\n._discoverSearchClear_14s5s_421:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_14s5s_361 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_14s5s_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_14s5s_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_14s5s_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_14s5s_399 {\n grid-area: search;\n }\n\n ._discoverSort_14s5s_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_14s5s_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_14s5s_472 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_14s5s_479 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_14s5s_488 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_14s5s_488:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_14s5s_502 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_14s5s_514 {\n object-fit: contain;\n}\n\n._discoverMain_14s5s_518 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_14s5s_526 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_14s5s_534 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_14s5s_534::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_14s5s_534:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_14s5s_534:focus-visible::after {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverStrong_14s5s_565 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_14s5s_571 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_14s5s_580 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_14s5s_587 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_14s5s_593 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_14s5s_602 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_14s5s_607 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_14s5s_616 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_14s5s_607 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_14s5s_626 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_14s5s_632 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_14s5s_632:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_14s5s_632:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverCrumbIcon_14s5s_655 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_14s5s_659 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_14s5s_665 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_14s5s_671 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_14s5s_678 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_14s5s_685 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_14s5s_690 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_14s5s_695 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_14s5s_700 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_14s5s_706 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_14s5s_713 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_14s5s_719 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_14s5s_724 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_14s5s_734 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_14s5s_740 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_14s5s_748 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_14s5s_757 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_14s5s_764 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_14s5s_764:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_14s5s_774 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_14s5s_782 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_14s5s_790 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_14s5s_795 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_14s5s_804 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_14s5s_810 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverNotice_14s5s_819 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_14s5s_819 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_14s5s_837 {\n align-self: center;\n}\n\n._discoverDialog_14s5s_841 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_14s5s_845 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_14s5s_851 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_14s5s_859 {\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_14s5s_868 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_14s5s_874 {\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_14s5s_883 {\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_14s5s_891 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_14s5s_899 {\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_14s5s_907 {\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_14s5s_917 {\n flex: none;\n}\n\n._discoverSourceLoading_14s5s_921 {\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_14s5s_931 {\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_14s5s_931 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_14s5s_945 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_14s5s_951 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_14s5s_957 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_14s5s_962 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_14s5s_968 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_14s5s_973 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_14s5s_979 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_14s5s_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_14s5s_502._discoverSkeletonFill_14s5s_979 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_14s5s_988 {\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_14s5s_995 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_14s5s_999 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_14s5s_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_14s5s_979 {\n animation: none;\n }\n}\n\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1lv8f_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1lv8f_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1lv8f_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1lv8f_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1lv8f_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1lv8f_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1lv8f_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1lv8f_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1lv8f_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1lv8f_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1lv8f_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1lv8f_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1lv8f_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1lv8f_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1lv8f_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1lv8f_351,\n._resultWarn_1lv8f_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1lv8f_383 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1lv8f_403 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._rows_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failure_11oac_45 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_7 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_zyzt3_21 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_zyzt3_51 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_zyzt3_51 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_zyzt3_3 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_zyzt3_125 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_zyzt3_133 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_zyzt3_4 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_zyzt3_159 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_zyzt3_192 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_zyzt3_250 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_15ptp_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_15ptp_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_15ptp_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_15ptp_119 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_15ptp_134 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_15ptp_170 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_15ptp_178 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_1whum_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1cmz0_74 ._rowAction_1cmz0_84 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
15633
+ 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*/";
15060
15634
  function workbenchCss() {
15061
15635
  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}`;
15062
15636
  }