@dsh-workbench/core 1.1.3 → 1.1.5

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 (47) hide show
  1. package/client.js +1370 -585
  2. package/dist/client/client.body.js +1370 -585
  3. package/dist/client/index.js +1225 -440
  4. package/dist/host/index.js +784 -114
  5. package/dist/types/app/layouts/approval-detail.d.ts +6 -3
  6. package/dist/types/app/layouts/market/add-module-registry-prefs.d.ts +11 -0
  7. package/dist/types/app/layouts/market/discover-confirm.d.ts +3 -2
  8. package/dist/types/app/layouts/market/market-check.d.ts +12 -0
  9. package/dist/types/app/layouts/market/market-header.d.ts +1 -3
  10. package/dist/types/app/layouts/market/use-discover.d.ts +2 -1
  11. package/dist/types/app/layouts/market/use-git-transport.d.ts +2 -2
  12. package/dist/types/app/layouts/market/use-module-versions.d.ts +3 -0
  13. package/dist/types/app/layouts/market/use-settling-modules.d.ts +1 -0
  14. package/dist/types/app/layouts/rightbar/AskAgentButton.d.ts +6 -0
  15. package/dist/types/app/layouts/rightbar/FailureCard.d.ts +8 -0
  16. package/dist/types/app/layouts/rightbar/MarketView.d.ts +4 -1
  17. package/dist/types/app/layouts/rightbar/SharedSection.d.ts +5 -2
  18. package/dist/types/app/layouts/rightbar/failure-card-text.d.ts +14 -0
  19. package/dist/types/app/layouts/rightbar/market-act.d.ts +2 -5
  20. package/dist/types/app/layouts/rightbar/market-change.d.ts +1 -0
  21. package/dist/types/app/layouts/rightbar/market-freshness.d.ts +1 -0
  22. package/dist/types/app/layouts/rightbar/market-hint.d.ts +2 -0
  23. package/dist/types/app/layouts/rightbar/market-install.d.ts +11 -0
  24. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +11 -2
  25. package/dist/types/app/layouts/rightbar/market-rows.d.ts +14 -1
  26. package/dist/types/app/layouts/rightbar/market-section.d.ts +8 -4
  27. package/dist/types/app/layouts/rightbar/market-transient-state.d.ts +3 -8
  28. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +2 -0
  29. package/dist/types/app/layouts/rightbar/use-market-default.d.ts +12 -0
  30. package/dist/types/kernel/client/registry.d.ts +1 -0
  31. package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
  32. package/dist/types/kernel/contract/market-index.d.ts +2 -2
  33. package/dist/types/modules/panels/model/market-install-error.d.ts +3 -0
  34. package/dist/types/modules/panels/model/market-install-error.test.d.ts +1 -0
  35. package/dist/types/modules/panels/model/market-installed.d.ts +19 -0
  36. package/dist/types/modules/panels/model/market-installed.test.d.ts +1 -0
  37. package/dist/types/modules/panels/model/market-registry.d.ts +2 -1
  38. package/dist/types/modules/panels/model/market-remove.d.ts +13 -0
  39. package/dist/types/modules/panels/model/market-remove.test.d.ts +1 -0
  40. package/dist/types/modules/panels/model/market-route.d.ts +2 -1
  41. package/dist/types/modules/panels/model/market.d.ts +1 -0
  42. package/dist/types/shared/api/host/git-probe.d.ts +3 -0
  43. package/dist/types/shared/api/host/market-sources-store.d.ts +2 -1
  44. package/dist/types/shared/api/host/profile-dependencies.d.ts +1 -0
  45. package/dist/types/shared/hooks/market-queries.d.ts +2 -1
  46. package/package.json +3 -3
  47. package/skills/workbench-module-diy/TOOLS.md +11 -2
@@ -1,4 +1,4 @@
1
- import { Button, Checkbox, CodeBlock, DiffBlock, DisclosureRow, HoverCard, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCloseOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPauseOutlineRegular, IconPinFillRegular, IconPlayOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconSlidersTwoOutlineRegular, IconStopFillRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Input, MarkdownText, Menu, Modal, Pill, PluginArtworkDefault, RiskConfirmation, SegmentedTabs, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
1
+ import { Button, Checkbox, CodeBlock, DiffBlock, DisclosureRow, HoverCard, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCloseOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPauseOutlineRegular, IconPinFillRegular, IconPlayOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconSlidersTwoOutlineRegular, IconStopFillRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Input, MarkdownText, Menu, Modal, Pill, PluginArtworkDefault, RiskConfirmation, SegmentedTabs, StateDot, Switch, Tag, TerminalBlock, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
2
2
  import { Fragment, createElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
3
3
  //#region \0rolldown/runtime.js
4
4
  var __create = Object.create;
@@ -726,6 +726,10 @@ var STORAGE_KEY_RIGHTBAR = "dsh-workbench.rightbar.expanded";
726
726
  var STORAGE_KEY_RIGHTBAR_COLUMN = "dsh-workbench.rightbar.column";
727
727
  /** 记住右栏宽度(像素数字的字符串)的 localStorage 键。 */
728
728
  var STORAGE_KEY_RIGHTBAR_WIDTH = "dsh-workbench.rightbar.width";
729
+ /** 记住「添加模块」浮层选过的安装源的 localStorage 键。 */
730
+ var STORAGE_KEY_MARKET_REGISTRY = "dsh-workbench.market.registry";
731
+ /** 记住「添加模块」浮层上次填过的自定义源地址的 localStorage 键。 */
732
+ var STORAGE_KEY_MARKET_REGISTRY_CUSTOM = "dsh-workbench.market.registry.custom";
729
733
  /** dsh i18n 的命名空间:词表都注册在它下面,`ctx.locale.register` / `bind` 按它取。 */
730
734
  var LOCALE_NS = "workbench";
731
735
  //#endregion
@@ -2530,6 +2534,12 @@ function writeText(key, value) {
2530
2534
  else window.localStorage.setItem(key, value);
2531
2535
  } catch {}
2532
2536
  }
2537
+ //#endregion
2538
+ //#region ../shared/dist/contract/approval.js
2539
+ /**
2540
+ * agent 自己那句"这次想干什么"的参数名:插件命令族必填,审批屏把它画在详情座里,不进标题。
2541
+ */
2542
+ var APPROVAL_NOTE_ARG = "approval_note";
2533
2543
  /**
2534
2544
  * 判一个名字是不是范围查法,不是问这条事实存不存在。
2535
2545
  * @param name 事实名或范围名。
@@ -2753,9 +2763,13 @@ function supplyNeedsOf(manifest) {
2753
2763
  }
2754
2764
  //#endregion
2755
2765
  //#region ../shared/dist/contract/needs.js
2766
+ var REGISTRY_PATTERN = /^(?:https?|file):\/\//;
2756
2767
  function text(value) {
2757
2768
  return typeof value === "string" ? value.trim() : "";
2758
2769
  }
2770
+ function isRecord(value) {
2771
+ return typeof value === "object" && value !== null && !Array.isArray(value);
2772
+ }
2759
2773
  /**
2760
2774
  * 一条 need 的稳定标识:作者写 `id` 就用它,否则 `kind:name`。
2761
2775
  * @param need 一条 need。
@@ -2764,11 +2778,40 @@ function text(value) {
2764
2778
  function needIdOf(need) {
2765
2779
  return need.id === void 0 || need.id.trim() === "" ? `${need.kind}:${need.name}` : need.id;
2766
2780
  }
2781
+ function binInstallProblemsOf(raw, at) {
2782
+ if (raw === void 0) return [];
2783
+ if (!isRecord(raw)) return [`${at}.install 要是对象`];
2784
+ const errors = [];
2785
+ for (const key of Object.keys(raw)) if (![
2786
+ "kind",
2787
+ "line",
2788
+ "platforms",
2789
+ "package",
2790
+ "registryEnv",
2791
+ "registryDefault"
2792
+ ].includes(key)) errors.push(`${at}.install 有不认识的字段 ${key}`);
2793
+ const kind = text(raw["kind"]);
2794
+ if (kind !== "command" && kind !== "npm") errors.push(`${at}.install.kind 只认 command(一条命令)或 npm(一个包,装进隔离运行时)`);
2795
+ if (kind === "command" && text(raw["line"]) === "") errors.push(`${at}.install.line 没写 —— 要一条能直接粘进终端的命令`);
2796
+ if (kind === "npm" && text(raw["package"]) === "") errors.push(`${at}.install.package 没写 —— 这个命令由哪个 npm 包提供`);
2797
+ if (raw["registryDefault"] !== void 0 && !REGISTRY_PATTERN.test(text(raw["registryDefault"]))) errors.push(`${at}.install.registryDefault 要是 http(s):// 或 file:// 的源地址`);
2798
+ if (raw["platforms"] !== void 0) {
2799
+ if (!Array.isArray(raw["platforms"]) || raw["platforms"].length === 0) errors.push(`${at}.install.platforms 要是非空数组`);
2800
+ else if (raw["platforms"].some((one) => ![
2801
+ "darwin",
2802
+ "linux",
2803
+ "win32"
2804
+ ].includes(text(one)))) errors.push(`${at}.install.platforms 只认 darwin / linux / win32`);
2805
+ }
2806
+ return errors;
2807
+ }
2767
2808
  function perKindProblemsOf(kind, raw, at) {
2768
2809
  const errors = [];
2769
2810
  if (kind === "bin" || kind === "lib" || kind === "env") {
2770
2811
  if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
2771
2812
  }
2813
+ if (kind === "bin") errors.push(...binInstallProblemsOf(raw["install"], at));
2814
+ if (raw["docs"] !== void 0 && text(raw["docs"]) === "") errors.push(`${at}.docs 是空串`);
2772
2815
  if (kind === "extension") {
2773
2816
  if (text(raw["runtime"]) === "") errors.push(`${at}.runtime 没写 —— 扩展属于哪个运行时(如 opencli)`);
2774
2817
  if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
@@ -3100,7 +3143,42 @@ var en = {
3100
3143
  "panels.market.confirmUninstallAck": "I understand: using it again means reinstalling it.",
3101
3144
  "panels.market.confirmYes": "Uninstall",
3102
3145
  "panels.market.confirmNo": "Cancel",
3146
+ "panels.market.noMarketSource": "The index has no newer version of this module (refresh the index and retry)",
3103
3147
  "panels.market.failed": "Failed: {reason}",
3148
+ "panels.market.askAgent": "Ask the agent",
3149
+ "panels.market.askAgentCopied": "Copied",
3150
+ "panels.market.askAgentText": "This workbench module cannot be used: \"{name}\" (unit {unit}) — {reason}. Work out what is missing and how to add it, then confirm it works.",
3151
+ "panels.market.failure.permission": "Didn't install: no write access",
3152
+ "panels.market.failure.diskFull": "Didn't install: the disk is full",
3153
+ "panels.market.failure.sandbox": "Didn't install: the system blocked it",
3154
+ "panels.market.failure.unknown": "Didn't install: cause not recognised",
3155
+ "panels.market.failure.factOwner": "{path} belongs to {owner}, and this account ({me}) cannot write to it. Hand it back to yourself (asks for your login password).",
3156
+ "panels.market.failure.factMode": "{path} is mode {mode}, so this account cannot write to it.",
3157
+ "panels.market.failure.factSpace": "The disk holding {path} is full.",
3158
+ "panels.market.failure.factStuck": "This command ran in a restricted environment and cannot write to {path}.",
3159
+ "panels.market.failure.nowhere": "(the directory was not identified)",
3160
+ "panels.market.failure.copyFix": "Copy the fix command",
3161
+ "panels.market.failure.copied": "Copied",
3162
+ "panels.market.failure.copiedHint": "Paste it in a terminal, run it, then click Check again.",
3163
+ "panels.market.failure.askAgent": "Copy for the agent",
3164
+ "panels.market.failure.askAgentText": "Installing this module could not write: `{command}` exited {code} at {path}. Work out whether the sandbox or file permissions blocked it, then install again somewhere writable.",
3165
+ "panels.market.failure.askAgentHint": "Paste it into the chat and let the agent carry on.",
3166
+ "panels.market.failure.recheck": "Check again",
3167
+ "panels.market.failure.showOutput": "Show install output",
3168
+ "panels.market.failure.hideOutput": "Hide install output",
3169
+ "panels.market.failure.term.commandLine": "command on line {line}",
3170
+ "panels.market.failure.term.signal": "killed by {signal}",
3171
+ "panels.market.failure.term.exitCode": "exit code {exitCode}",
3172
+ "panels.market.failure.term.noExitCode": "no exit code",
3173
+ "panels.market.failure.term.running": "running",
3174
+ "panels.market.failure.term.failed": "failed",
3175
+ "panels.market.failure.term.done": "done",
3176
+ "panels.market.failure.term.copy": "Copy",
3177
+ "panels.market.failure.term.copied": "Copied",
3178
+ "panels.market.failure.term.noOutput": "No output",
3179
+ "panels.market.failure.term.collapse": "Collapse",
3180
+ "panels.market.failure.term.expandAria": "Show the remaining {hidden} lines",
3181
+ "panels.market.failure.term.expand": "Show {hidden} lines",
3104
3182
  "panels.market.needEnv": "Set {env} in the terminal that started the workbench first",
3105
3183
  "panels.market.needCommands": "Missing commands: {commands}",
3106
3184
  "panels.market.needBinary": "Install the {command} command first",
@@ -3136,9 +3214,13 @@ var en = {
3136
3214
  "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.",
3137
3215
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
3138
3216
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
3139
- "panels.market.recheck": "Check for updates",
3140
3217
  "panels.market.checkUpdates": "Check for updates",
3218
+ "panels.market.checkingNow": "Checking…",
3219
+ "panels.market.checkFailed": "The last check failed. Check your connection and retry.",
3141
3220
  "panels.market.checkedAt": "Last checked: {time}",
3221
+ "panels.market.latestPartial": "Could not check {n} modules",
3222
+ "panels.market.latestNoRegistry": "No source configured — the latest version was not checked",
3223
+ "panels.market.latestProbeFailed": "Could not reach the source — try again later",
3142
3224
  "panels.market.justNow": "just now",
3143
3225
  "panels.market.minutesAgo": "{n} min ago",
3144
3226
  "panels.market.hoursAgo": "{n} h ago",
@@ -3315,6 +3397,9 @@ var en = {
3315
3397
  "panels.discover.transportTest": "Test this address",
3316
3398
  "panels.discover.transportPlaceholder": "Or paste another address (mirror, alias)",
3317
3399
  "panels.discover.transportNeedsAuth": "This repository needs credentials: clone it once in a terminal, or set up an SSH key / credential helper, then install again.",
3400
+ "panels.discover.transportChange": "Change address",
3401
+ "panels.discover.transportChangeHide": "Hide",
3402
+ "panels.discover.transportNone": "No readable address",
3318
3403
  "panels.discover.expand": "Show versions",
3319
3404
  "panels.discover.collapse": "Hide versions",
3320
3405
  "panels.discover.versionCount": "{n} versions",
@@ -3600,6 +3685,9 @@ var en = {
3600
3685
  "approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
3601
3686
  "approval.longTask.what": "Task to stop",
3602
3687
  "approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
3688
+ "approval.plugin.name": "Plugin",
3689
+ "approval.plugin.command": "Command",
3690
+ "approval.plugin.note": "Agent says",
3603
3691
  "approval.publish.module": "Module",
3604
3692
  "approval.publish.target": "Target",
3605
3693
  "approval.publish.version": "Version",
@@ -3795,7 +3883,42 @@ var dictionaries = {
3795
3883
  "panels.market.confirmUninstallAck": "我明白:卸载后想再用,得重新装一遍。",
3796
3884
  "panels.market.confirmYes": "卸载",
3797
3885
  "panels.market.confirmNo": "取消",
3886
+ "panels.market.noMarketSource": "索引里没有这个模块的新版本(刷新一次索引再试)",
3798
3887
  "panels.market.failed": "没成功:{reason}",
3888
+ "panels.market.askAgent": "问 agent",
3889
+ "panels.market.askAgentCopied": "已复制",
3890
+ "panels.market.askAgentText": "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。",
3891
+ "panels.market.failure.permission": "没装上:没有写入权限",
3892
+ "panels.market.failure.diskFull": "没装上:磁盘满了",
3893
+ "panels.market.failure.sandbox": "没装上:被系统拦住了",
3894
+ "panels.market.failure.unknown": "没装上:原因没认出来",
3895
+ "panels.market.failure.factOwner": "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。",
3896
+ "panels.market.failure.factMode": "{path} 的权限是 {mode},当前账号没有写权限。",
3897
+ "panels.market.failure.factSpace": "{path} 所在的磁盘满了。",
3898
+ "panels.market.failure.factStuck": "这条命令跑在受限环境里,写不进 {path}。",
3899
+ "panels.market.failure.nowhere": "(没认出是哪个目录)",
3900
+ "panels.market.failure.copyFix": "复制修复命令",
3901
+ "panels.market.failure.copied": "已复制",
3902
+ "panels.market.failure.copiedHint": "粘到终端跑一次,回来点「再检测」。",
3903
+ "panels.market.failure.askAgent": "复制给 agent",
3904
+ "panels.market.failure.askAgentText": "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。",
3905
+ "panels.market.failure.askAgentHint": "粘到对话里,让 agent 接着弄。",
3906
+ "panels.market.failure.recheck": "再检测",
3907
+ "panels.market.failure.showOutput": "查看安装输出",
3908
+ "panels.market.failure.hideOutput": "收起安装输出",
3909
+ "panels.market.failure.term.commandLine": "第 {line} 行的命令",
3910
+ "panels.market.failure.term.signal": "被 {signal} 终止",
3911
+ "panels.market.failure.term.exitCode": "退出码 {exitCode}",
3912
+ "panels.market.failure.term.noExitCode": "没有退出码",
3913
+ "panels.market.failure.term.running": "在跑",
3914
+ "panels.market.failure.term.failed": "没跑通",
3915
+ "panels.market.failure.term.done": "跑完了",
3916
+ "panels.market.failure.term.copy": "复制",
3917
+ "panels.market.failure.term.copied": "已复制",
3918
+ "panels.market.failure.term.noOutput": "没有输出",
3919
+ "panels.market.failure.term.collapse": "收起",
3920
+ "panels.market.failure.term.expandAria": "展开剩下的 {hidden} 行",
3921
+ "panels.market.failure.term.expand": "展开 {hidden} 行",
3799
3922
  "panels.market.needEnv": "先在启动工作台的终端里设 {env}",
3800
3923
  "panels.market.needCommands": "缺这几条命令:{commands}",
3801
3924
  "panels.market.needBinary": "先装 {command} 命令",
@@ -3831,9 +3954,13 @@ var dictionaries = {
3831
3954
  "panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
3832
3955
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
3833
3956
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
3834
- "panels.market.recheck": "重新检查更新",
3835
3957
  "panels.market.checkUpdates": "检查更新",
3958
+ "panels.market.checkingNow": "正在检查…",
3959
+ "panels.market.checkFailed": "最近一次没查到,检查网络后重试",
3836
3960
  "panels.market.checkedAt": "最近检查:{time}",
3961
+ "panels.market.latestPartial": "{n} 个模块没查成",
3962
+ "panels.market.latestNoRegistry": "没配来源,未检查新版",
3963
+ "panels.market.latestProbeFailed": "问不到源,稍后重试",
3837
3964
  "panels.market.justNow": "刚刚",
3838
3965
  "panels.market.minutesAgo": "{n} 分钟前",
3839
3966
  "panels.market.hoursAgo": "{n} 小时前",
@@ -4010,6 +4137,9 @@ var dictionaries = {
4010
4137
  "panels.discover.transportTest": "试这个地址",
4011
4138
  "panels.discover.transportPlaceholder": "或贴一个别的地址(公司镜像、别名)",
4012
4139
  "panels.discover.transportNeedsAuth": "这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。",
4140
+ "panels.discover.transportChange": "换一个地址",
4141
+ "panels.discover.transportChangeHide": "收起",
4142
+ "panels.discover.transportNone": "没有可读的地址",
4013
4143
  "panels.discover.expand": "展开版本",
4014
4144
  "panels.discover.collapse": "收起版本",
4015
4145
  "panels.discover.versionCount": "{n} 个版本",
@@ -4295,6 +4425,9 @@ var dictionaries = {
4295
4425
  "approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
4296
4426
  "approval.longTask.what": "要停的那次任务",
4297
4427
  "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
4428
+ "approval.plugin.name": "插件",
4429
+ "approval.plugin.command": "命令",
4430
+ "approval.plugin.note": "agent 说",
4298
4431
  "approval.publish.module": "模块",
4299
4432
  "approval.publish.target": "目标",
4300
4433
  "approval.publish.version": "版本",
@@ -4818,14 +4951,14 @@ function bumpCapabilityEpoch() {
4818
4951
  epoch$1 += 1;
4819
4952
  }
4820
4953
  var current$1 = null;
4821
- var listeners$7 = /* @__PURE__ */ new Set();
4954
+ var listeners$8 = /* @__PURE__ */ new Set();
4822
4955
  function capabilityValue() {
4823
4956
  return current$1;
4824
4957
  }
4825
4958
  function subscribeCapabilities(listener) {
4826
- listeners$7.add(listener);
4959
+ listeners$8.add(listener);
4827
4960
  return () => {
4828
- listeners$7.delete(listener);
4961
+ listeners$8.delete(listener);
4829
4962
  };
4830
4963
  }
4831
4964
  function setCapabilities(next, rechecked = false) {
@@ -4838,7 +4971,7 @@ function setCapabilities(next, rechecked = false) {
4838
4971
  });
4839
4972
  if (next === current$1) return;
4840
4973
  current$1 = next;
4841
- for (const listener of [...listeners$7]) listener();
4974
+ for (const listener of [...listeners$8]) listener();
4842
4975
  }
4843
4976
  function beginProbe() {
4844
4977
  probing += 1;
@@ -4993,7 +5126,7 @@ function useCapabilityMap(refreshToken) {
4993
5126
  //#endregion
4994
5127
  //#region src/app/layouts/panel-hint.ts
4995
5128
  var hints = /* @__PURE__ */ new Map();
4996
- var listeners$6 = /* @__PURE__ */ new Set();
5129
+ var listeners$7 = /* @__PURE__ */ new Set();
4997
5130
  function sameHint(left, right) {
4998
5131
  if (left === null || right === null) return left === right;
4999
5132
  if (left.labelKey !== right.labelKey || left.tone !== right.tone) return false;
@@ -5005,15 +5138,15 @@ function publishPanelHint(id, hint) {
5005
5138
  if (sameHint(hints.get(id) ?? null, hint)) return;
5006
5139
  if (hint === null) hints.delete(id);
5007
5140
  else hints.set(id, hint);
5008
- for (const listener of [...listeners$6]) listener();
5141
+ for (const listener of [...listeners$7]) listener();
5009
5142
  }
5010
5143
  function panelHintOf(id) {
5011
5144
  return id === null ? null : hints.get(id) ?? null;
5012
5145
  }
5013
5146
  function subscribePanelHints(listener) {
5014
- listeners$6.add(listener);
5147
+ listeners$7.add(listener);
5015
5148
  return () => {
5016
- listeners$6.delete(listener);
5149
+ listeners$7.delete(listener);
5017
5150
  };
5018
5151
  }
5019
5152
  function usePanelHint(id) {
@@ -5029,6 +5162,16 @@ function panelRowName(label, hint, t) {
5029
5162
  //#endregion
5030
5163
  //#region src/app/layouts/rightbar/market-freshness.ts
5031
5164
  var MARKET_STALE_MS = VERSION_CHECK_TTL_MS;
5165
+ function checkedAgoText(at, now, t) {
5166
+ const seconds = Math.max(0, Math.floor((now - at) / 1e3));
5167
+ if (seconds < 60) return t("panels.market.justNow");
5168
+ const minutes = Math.floor(seconds / 60);
5169
+ if (minutes < 60) return t("panels.market.minutesAgo", { n: String(minutes) });
5170
+ return t("panels.market.hoursAgo", { n: String(Math.floor(minutes / 60)) });
5171
+ }
5172
+ function checkedAgo(at, t) {
5173
+ return checkedAgoText(at, Date.now(), t);
5174
+ }
5032
5175
  function marketSettled(freshness, installedRead) {
5033
5176
  return freshness.loaded && installedRead !== false;
5034
5177
  }
@@ -5037,85 +5180,6 @@ function shouldProbeOnEnter(input) {
5037
5180
  return input.now - input.checkedAt >= input.staleMs;
5038
5181
  }
5039
5182
  //#endregion
5040
- //#region src/app/layouts/rightbar/market-settle.ts
5041
- var MODULE_SETTLE_MS = 15e3;
5042
- function holdBack(installed, roster, active, previous) {
5043
- const pending = installed.filter((unit) => !roster.has(unit));
5044
- const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
5045
- return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
5046
- }
5047
- var WORKBENCH_SWAP_MS = 18e4;
5048
- function swapLanded(until, installed) {
5049
- return until !== void 0 && installed === until;
5050
- }
5051
- function swapUntil(action, application, latest) {
5052
- if (action !== "update-workbench" || application !== "restart-required") return void 0;
5053
- return latest;
5054
- }
5055
- var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
5056
- "update",
5057
- "update-bundle",
5058
- "update-dependency",
5059
- "update-plugin"
5060
- ]);
5061
- var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
5062
- "remove-bundle",
5063
- "uninstall",
5064
- "uninstall-plugin"
5065
- ]);
5066
- function awaitsReadBack(action, application, version) {
5067
- if (application !== "applied") return false;
5068
- if (REMOVAL_ACTIONS.has(action)) return true;
5069
- if (!READ_BACK_ACTIONS.has(action)) return false;
5070
- return action === "update-bundle" ? version !== void 0 : true;
5071
- }
5072
- function readBackDone(input) {
5073
- if (input.action === "update") return !input.outdated;
5074
- if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
5075
- if (input.entry.latest === input.entry.installed) return true;
5076
- if (input.clicked === void 0) return true;
5077
- return input.entry.installed !== input.clicked;
5078
- }
5079
- function settleLanded(input) {
5080
- if (input.until !== void 0) return swapLanded(input.until, input.installed);
5081
- if (input.readBack !== true) return true;
5082
- if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
5083
- if (input.action === "uninstall-plugin") return input.pluginGone === true;
5084
- const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
5085
- if (input.action === "update-dependency") return settled(input.sharedState);
5086
- if (input.action === "update-plugin") return input.pluginOutdated === false;
5087
- return readBackDone({
5088
- action: input.action,
5089
- entry: input.entry,
5090
- clicked: input.clicked,
5091
- outdated: input.outdated
5092
- });
5093
- }
5094
- function tailReason(tail) {
5095
- if (tail === void 0) return void 0;
5096
- const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
5097
- if (last === void 0) return void 0;
5098
- return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
5099
- }
5100
- function selfUpdateStop(input) {
5101
- const { until, since, update } = input;
5102
- if (until === void 0 || update === void 0 || update === null) return void 0;
5103
- if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
5104
- if (update.to !== until && update.version !== until) return void 0;
5105
- if (since !== void 0 && update.at !== void 0) {
5106
- const at = (0, import_dayjs_min.default)(update.at).valueOf();
5107
- if (Number.isFinite(at) && at < since - 5e3) return void 0;
5108
- }
5109
- return {
5110
- kind: update.state,
5111
- ...update.version === void 0 ? {} : { version: update.version },
5112
- ...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
5113
- };
5114
- }
5115
- function holdWindowMs(until) {
5116
- return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
5117
- }
5118
- //#endregion
5119
5183
  //#region src/app/layouts/rightbar/market-shared-rows.ts
5120
5184
  var SHARED_STATE_KEY = {
5121
5185
  checking: "panels.market.checking",
@@ -5250,6 +5314,26 @@ function installedIdSet(installed) {
5250
5314
  if (installed === void 0) return null;
5251
5315
  return new Set(installed.map((item) => item.unit));
5252
5316
  }
5317
+ function latestUnavailableNote(unavailable) {
5318
+ if (unavailable === "no-registry") return {
5319
+ key: "panels.market.latestNoRegistry",
5320
+ params: {}
5321
+ };
5322
+ if (unavailable === "probe-failed") return {
5323
+ key: "panels.market.latestProbeFailed",
5324
+ params: {}
5325
+ };
5326
+ }
5327
+ function latestCheckSummary(modules) {
5328
+ let checked = 0;
5329
+ let unknown = 0;
5330
+ for (const module of modules ?? []) if (module.latest !== void 0) checked += 1;
5331
+ else if (module.latestUnavailable === "no-registry" || module.latestUnavailable === "probe-failed") unknown += 1;
5332
+ return {
5333
+ checked,
5334
+ unknown
5335
+ };
5336
+ }
5253
5337
  function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5254
5338
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.titleKey]));
5255
5339
  const rows = [];
@@ -5263,16 +5347,17 @@ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE_
5263
5347
  const pending = !loaded && refused.length === 0;
5264
5348
  const titleKey = titles.get(module.unit);
5265
5349
  const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
5350
+ const note = refused.length > 0 ? {
5351
+ key: "panels.market.moduleRefused",
5352
+ params: {}
5353
+ } : latestUnavailableNote(module.latestUnavailable);
5266
5354
  rows.push({
5267
5355
  id: module.unit,
5268
5356
  titleKey: titleKey ?? module.unit,
5269
5357
  ...remembered === void 0 ? {} : { label: remembered },
5270
5358
  state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
5271
5359
  ...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
5272
- ...refused.length === 0 ? {} : { note: {
5273
- key: "panels.market.moduleRefused",
5274
- params: {}
5275
- } },
5360
+ ...note === void 0 ? {} : { note },
5276
5361
  ...module.local === true ? { local: true } : {},
5277
5362
  pkg: module.pkg,
5278
5363
  canInstall: false,
@@ -5285,8 +5370,10 @@ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE_
5285
5370
  ...outdated ? { moduleUpdate: {
5286
5371
  installed: module.installed,
5287
5372
  latest,
5288
- ...blocked === void 0 ? {} : { blocked }
5373
+ ...blocked === void 0 ? {} : { blocked },
5374
+ ...module.market === void 0 ? {} : { market: module.market }
5289
5375
  } } : {},
5376
+ ...module.market === void 0 ? {} : { market: module.market },
5290
5377
  defaultShown: defaults.has(module.unit),
5291
5378
  defaultChanged: changed[module.unit] ?? 0
5292
5379
  });
@@ -5297,6 +5384,13 @@ var SWITCH_LOCKED = /* @__PURE__ */ new Set(["unusable", "broken"]);
5297
5384
  function marketSwitchLocked(row) {
5298
5385
  return SWITCH_LOCKED.has(row.state);
5299
5386
  }
5387
+ function marketAsksAgent(row) {
5388
+ if (row.workbench === true || row.plugin === true) return false;
5389
+ if (row.state === "installed" || row.state === "inactive" || row.state === "outdated") return false;
5390
+ if (row.state === "checking" || row.state === "pending-restart") return false;
5391
+ if (row.state === "pending-followup") return false;
5392
+ return !marketActions$1(row).includes("install");
5393
+ }
5300
5394
  function marketActions$1(row) {
5301
5395
  if (row.workbench === true) {
5302
5396
  if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
@@ -5305,7 +5399,7 @@ function marketActions$1(row) {
5305
5399
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
5306
5400
  return [
5307
5401
  ...row.canInstall ? ["install"] : [],
5308
- ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
5402
+ ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? [row.market === void 0 || row.pkg === void 0 ? "update-bundle" : "install-version"] : [],
5309
5403
  ...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
5310
5404
  ];
5311
5405
  }
@@ -5394,7 +5488,8 @@ function marketUpdatesOf(modules) {
5394
5488
  installed: module.installed,
5395
5489
  ...local || module.latest === void 0 ? {} : { latest: module.latest },
5396
5490
  ...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
5397
- ...local ? { local: true } : {}
5491
+ ...local ? { local: true } : {},
5492
+ ...local || module.market === void 0 ? {} : { market: module.market }
5398
5493
  };
5399
5494
  }
5400
5495
  return next;
@@ -5418,6 +5513,18 @@ function marketSections(rows) {
5418
5513
  rows: rest
5419
5514
  }]];
5420
5515
  }
5516
+ function checkingRows(rows, scope) {
5517
+ return rows.map((row) => {
5518
+ if (row.state !== "unknown" && row.state !== "unchecked") return row;
5519
+ if (!scope.all && !scope.units.has(row.id)) return row;
5520
+ return {
5521
+ ...row,
5522
+ state: "checking",
5523
+ hint: void 0,
5524
+ note: void 0
5525
+ };
5526
+ });
5527
+ }
5421
5528
  function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5422
5529
  const rows = [];
5423
5530
  for (const manifest of manifests) {
@@ -5433,7 +5540,8 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5433
5540
  const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
5434
5541
  installed: entry.installed,
5435
5542
  latest: entry.latest,
5436
- ...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
5543
+ ...entry.blocked === void 0 ? {} : { blocked: entry.blocked },
5544
+ ...entry.market === void 0 ? {} : { market: entry.market }
5437
5545
  };
5438
5546
  const shown = moduleUpdate === void 0 ? state : "outdated";
5439
5547
  const hint = moduleUpdate?.blocked === void 0 ? shown === "unknown" || shown === "unchecked" ? "panels.market.uncheckedHint" : void 0 : updateBlockHintOf(moduleUpdate.blocked);
@@ -5450,6 +5558,10 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5450
5558
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
5451
5559
  } },
5452
5560
  ...moduleUpdate === void 0 ? {} : { moduleUpdate },
5561
+ ...entry?.market === void 0 ? {} : {
5562
+ market: entry.market,
5563
+ pkg: entry.market.pkg
5564
+ },
5453
5565
  ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {},
5454
5566
  ...local ? { local: true } : {},
5455
5567
  defaultShown: defaults.has(manifest.id),
@@ -5541,8 +5653,9 @@ var UPDATES_KEY = "panels.market.hasNew";
5541
5653
  function isProblem(row) {
5542
5654
  return row.broken === true || row.state === "broken" || row.state === "unusable" || row.note?.key === "panels.market.moduleRefused";
5543
5655
  }
5544
- function isRestart(row) {
5545
- return row.state === "inactive" || row.state === "pending-restart";
5656
+ function isRestart(row, installing) {
5657
+ if (row.state === "pending-restart") return true;
5658
+ return !installing && row.state === "inactive";
5546
5659
  }
5547
5660
  function isUnknown(row, rosterRead) {
5548
5661
  return row.state === "unchecked" || rosterRead && row.state === "unknown";
@@ -5552,9 +5665,10 @@ function awaitsRestart(manifests, installed) {
5552
5665
  return installed.some((module) => !loaded.has(module.unit) && refusalReasons(module.refused, module.clientRefused).length === 0);
5553
5666
  }
5554
5667
  function marketHintOf(input) {
5555
- const busy = input.busy ?? /* @__PURE__ */ new Set();
5556
- const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !busy.has(manifest.id));
5557
- const installed = (input.installed ?? []).filter((module) => !busy.has(module.unit));
5668
+ const installing = input.installing === true;
5669
+ const held = /* @__PURE__ */ new Set([...input.busy ?? [], ...input.applied ?? []]);
5670
+ const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !held.has(manifest.id));
5671
+ const installed = (input.installed ?? []).filter((module) => !held.has(module.unit));
5558
5672
  const catalog = marketRows(marketable, input.capabilities, marketUpdatesOf(input.modules));
5559
5673
  const listed = new Set(catalog.map((row) => row.id));
5560
5674
  const self = workbenchRow(input.workbench);
@@ -5565,10 +5679,10 @@ function marketHintOf(input) {
5565
5679
  ...self === void 0 ? [] : [self]
5566
5680
  ];
5567
5681
  const problem = rows.some(isProblem);
5568
- const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
5682
+ const restart = rows.some((row) => isRestart(row, installing)) || !installing && awaitsRestart(input.manifests, installed);
5569
5683
  const followUp = rows.some((row) => row.state === "pending-followup");
5570
5684
  const rosterRead = input.modules !== null;
5571
- const unknown = rows.some((row) => isUnknown(row, rosterRead));
5685
+ const unknown = !installing && rows.some((row) => isUnknown(row, rosterRead));
5572
5686
  const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
5573
5687
  const more = [];
5574
5688
  if (problem) {
@@ -5616,11 +5730,91 @@ function marketHintOf(input) {
5616
5730
  return null;
5617
5731
  }
5618
5732
  //#endregion
5733
+ //#region src/app/layouts/rightbar/market-settle.ts
5734
+ var MODULE_SETTLE_MS = 15e3;
5735
+ function holdBack(installed, roster, active, previous) {
5736
+ const pending = installed.filter((unit) => !roster.has(unit));
5737
+ const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
5738
+ return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
5739
+ }
5740
+ var WORKBENCH_SWAP_MS = 18e4;
5741
+ function swapLanded(until, installed) {
5742
+ return until !== void 0 && installed === until;
5743
+ }
5744
+ function swapUntil(action, application, latest) {
5745
+ if (action !== "update-workbench" || application !== "restart-required") return void 0;
5746
+ return latest;
5747
+ }
5748
+ var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
5749
+ "update",
5750
+ "update-bundle",
5751
+ "install-version",
5752
+ "update-dependency",
5753
+ "update-plugin"
5754
+ ]);
5755
+ var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
5756
+ "remove-bundle",
5757
+ "uninstall",
5758
+ "uninstall-plugin"
5759
+ ]);
5760
+ function awaitsReadBack(action, application, version) {
5761
+ if (application !== "applied") return false;
5762
+ if (REMOVAL_ACTIONS.has(action)) return true;
5763
+ if (!READ_BACK_ACTIONS.has(action)) return false;
5764
+ return action === "update-bundle" || action === "install-version" ? version !== void 0 : true;
5765
+ }
5766
+ function readBackDone(input) {
5767
+ if (input.action === "update") return !input.outdated;
5768
+ if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
5769
+ if (input.entry.latest === input.entry.installed) return true;
5770
+ if (input.clicked === void 0) return true;
5771
+ return input.entry.installed !== input.clicked;
5772
+ }
5773
+ function settleLanded(input) {
5774
+ if (input.until !== void 0) return swapLanded(input.until, input.installed);
5775
+ if (input.readBack !== true) return true;
5776
+ if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
5777
+ if (input.action === "uninstall-plugin") return input.pluginGone === true;
5778
+ const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
5779
+ if (input.action === "update-dependency") return settled(input.sharedState);
5780
+ if (input.action === "update-plugin") return input.pluginOutdated === false;
5781
+ return readBackDone({
5782
+ action: input.action,
5783
+ entry: input.entry,
5784
+ clicked: input.clicked,
5785
+ outdated: input.outdated
5786
+ });
5787
+ }
5788
+ function tailReason(tail) {
5789
+ if (tail === void 0) return void 0;
5790
+ const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
5791
+ if (last === void 0) return void 0;
5792
+ return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
5793
+ }
5794
+ function selfUpdateStop(input) {
5795
+ const { until, since, update } = input;
5796
+ if (until === void 0 || update === void 0 || update === null) return void 0;
5797
+ if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
5798
+ if (update.to !== until && update.version !== until) return void 0;
5799
+ if (since !== void 0 && update.at !== void 0) {
5800
+ const at = (0, import_dayjs_min.default)(update.at).valueOf();
5801
+ if (Number.isFinite(at) && at < since - 5e3) return void 0;
5802
+ }
5803
+ return {
5804
+ kind: update.state,
5805
+ ...update.version === void 0 ? {} : { version: update.version },
5806
+ ...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
5807
+ };
5808
+ }
5809
+ function holdWindowMs(until) {
5810
+ return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
5811
+ }
5812
+ //#endregion
5619
5813
  //#region src/app/layouts/rightbar/market-busy.ts
5620
- var listeners$5 = /* @__PURE__ */ new Set();
5814
+ var listeners$6 = /* @__PURE__ */ new Set();
5621
5815
  var published = /* @__PURE__ */ new Map();
5622
5816
  var live$2 = /* @__PURE__ */ new Set();
5623
- var timer$2;
5817
+ var timer$3;
5624
5818
  var MARKET_BUSY_MS = WORKBENCH_SWAP_MS;
5625
5819
  function marketBusyIds() {
5626
5820
  return live$2;
@@ -5630,12 +5824,12 @@ function publishMarketBusy(ids) {
5630
5824
  const next = /* @__PURE__ */ new Map();
5631
5825
  for (const id of new Set(ids)) next.set(id, published.get(id) ?? now);
5632
5826
  published = next;
5633
- refresh(now);
5827
+ refresh$1(now);
5634
5828
  }
5635
5829
  function subscribeMarketBusy(listener) {
5636
- listeners$5.add(listener);
5830
+ listeners$6.add(listener);
5637
5831
  return () => {
5638
- listeners$5.delete(listener);
5832
+ listeners$6.delete(listener);
5639
5833
  };
5640
5834
  }
5641
5835
  function useMarketBusy() {
@@ -5651,29 +5845,100 @@ function sameSet(left, right) {
5651
5845
  for (const id of left) if (!right.has(id)) return false;
5652
5846
  return true;
5653
5847
  }
5654
- function schedule$1(now) {
5655
- if (timer$2 !== void 0) clearTimeout(timer$2);
5656
- timer$2 = void 0;
5848
+ function schedule$2(now) {
5849
+ if (timer$3 !== void 0) clearTimeout(timer$3);
5850
+ timer$3 = void 0;
5657
5851
  let soonest = Number.POSITIVE_INFINITY;
5658
5852
  for (const at of published.values()) soonest = Math.min(soonest, at);
5659
5853
  if (soonest === Number.POSITIVE_INFINITY) return;
5660
- timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
5854
+ timer$3 = setTimeout(() => refresh$1(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
5661
5855
  }
5662
- function refresh(now) {
5856
+ function refresh$1(now) {
5663
5857
  for (const [id, at] of published) if (now - at >= MARKET_BUSY_MS) published.delete(id);
5664
5858
  const next = new Set(published.keys());
5665
5859
  if (!sameSet(live$2, next)) {
5666
5860
  live$2 = next;
5861
+ for (const listener of [...listeners$6]) listener();
5862
+ }
5863
+ schedule$2(now);
5864
+ }
5865
+ //#endregion
5866
+ //#region src/app/layouts/rightbar/market-install.ts
5867
+ var NO_UNITS$2 = /* @__PURE__ */ new Set();
5868
+ var IDLE$1 = {
5869
+ installing: false,
5870
+ applied: NO_UNITS$2
5871
+ };
5872
+ var tokens = /* @__PURE__ */ new Set();
5873
+ var applied = /* @__PURE__ */ new Map();
5874
+ var listeners$5 = /* @__PURE__ */ new Set();
5875
+ var snapshot$1 = IDLE$1;
5876
+ var timer$2;
5877
+ function sameUnits(left, right) {
5878
+ if (left.size !== right.size) return false;
5879
+ for (const unit of left) if (!right.has(unit)) return false;
5880
+ return true;
5881
+ }
5882
+ function schedule$1(now) {
5883
+ if (timer$2 !== void 0) clearTimeout(timer$2);
5884
+ timer$2 = void 0;
5885
+ if (applied.size === 0) return;
5886
+ let soonest = Number.POSITIVE_INFINITY;
5887
+ for (const at of applied.values()) soonest = Math.min(soonest, at);
5888
+ timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MODULE_SETTLE_MS - now) + 1);
5889
+ }
5890
+ function refresh(now) {
5891
+ for (const [unit, at] of applied) if (now - at >= 15e3) applied.delete(unit);
5892
+ const next = tokens.size === 0 && applied.size === 0 ? IDLE$1 : {
5893
+ installing: tokens.size > 0,
5894
+ applied: applied.size === 0 ? NO_UNITS$2 : new Set(applied.keys())
5895
+ };
5896
+ if (next.installing !== snapshot$1.installing || !sameUnits(next.applied, snapshot$1.applied)) {
5897
+ snapshot$1 = next;
5667
5898
  for (const listener of [...listeners$5]) listener();
5668
5899
  }
5669
5900
  schedule$1(now);
5670
5901
  }
5902
+ function marketInstallState() {
5903
+ return snapshot$1;
5904
+ }
5905
+ function subscribeMarketInstall(listener) {
5906
+ listeners$5.add(listener);
5907
+ return () => {
5908
+ listeners$5.delete(listener);
5909
+ };
5910
+ }
5911
+ function publishMarketInstalling(token, active) {
5912
+ if (active) tokens.add(token);
5913
+ else tokens.delete(token);
5914
+ refresh(Date.now());
5915
+ }
5916
+ function publishMarketApplied(units) {
5917
+ const now = Date.now();
5918
+ for (const unit of new Set(units)) if (unit !== "" && !applied.has(unit)) applied.set(unit, now);
5919
+ refresh(now);
5920
+ }
5921
+ function useMarketInstallState() {
5922
+ return useSyncExternalStore(subscribeMarketInstall, marketInstallState);
5923
+ }
5924
+ function usePublishMarketInstalling(token, active) {
5925
+ useEffect(() => {
5926
+ publishMarketInstalling(token, active);
5927
+ return () => publishMarketInstalling(token, false);
5928
+ }, [token, active]);
5929
+ }
5671
5930
  //#endregion
5672
5931
  //#region src/shared/api/write-outcome.ts
5673
5932
  function writeRoute(channel, resource) {
5674
5933
  if (channel === "provision") return "provision";
5675
5934
  return `${channel}/${resource}`;
5676
5935
  }
5936
+ function installFailureOf(value) {
5937
+ if (typeof value !== "object" || value === null) return void 0;
5938
+ const record = value;
5939
+ if (typeof record.kind !== "string" || typeof record.command !== "string") return void 0;
5940
+ return value;
5941
+ }
5677
5942
  function writeOutcomeOf(response, networkText) {
5678
5943
  if (response === null) return {
5679
5944
  ok: false,
@@ -5685,11 +5950,13 @@ function writeOutcomeOf(response, networkText) {
5685
5950
  const fallback = typeof box.text === "string" && box.text !== "" ? box.text : networkText;
5686
5951
  const detail = typeof box.error?.detail === "string" ? box.error.detail : void 0;
5687
5952
  const helpUrl = typeof box.error?.helpUrl === "string" && box.error.helpUrl !== "" ? box.error.helpUrl : void 0;
5953
+ const failure = installFailureOf(box.error?.failure);
5688
5954
  return {
5689
5955
  ok: false,
5690
5956
  message: own ?? fallback,
5691
5957
  ...detail === void 0 ? {} : { detail },
5692
- ...helpUrl === void 0 ? {} : { helpUrl }
5958
+ ...helpUrl === void 0 ? {} : { helpUrl },
5959
+ ...failure === void 0 ? {} : { failure }
5693
5960
  };
5694
5961
  }
5695
5962
  return {
@@ -5896,138 +6163,138 @@ function useMarketTransient(input) {
5896
6163
  };
5897
6164
  }
5898
6165
  var MarketPage_module_default = {
5899
- marketList: "_marketList_jfyof_1",
5900
- marketRow: "_marketRow_jfyof_10",
5901
- marketIcon: "_marketIcon_jfyof_20",
5902
- marketMain: "_marketMain_jfyof_32",
5903
- marketName: "_marketName_jfyof_39",
5904
- marketStatus: "_marketStatus_jfyof_48",
5905
- marketStateText: "_marketStateText_jfyof_58",
5906
- marketSep: "_marketSep_jfyof_62",
5907
- marketReason: "_marketReason_jfyof_66",
5908
- marketVersion: "_marketVersion_jfyof_72",
5909
- marketLocalTag: "_marketLocalTag_jfyof_94",
5910
- marketEnd: "_marketEnd_jfyof_105",
5911
- marketSwitchSeat: "_marketSwitchSeat_jfyof_112",
5912
- marketActions: "_marketActions_jfyof_125",
5913
- marketUpdateAction: "_marketUpdateAction_jfyof_131",
5914
- marketSelfDivider: "_marketSelfDivider_jfyof_137",
5915
- marketSection: "_marketSection_jfyof_143",
5916
- marketSectionHead: "_marketSectionHead_jfyof_150",
5917
- marketSectionIcon: "_marketSectionIcon_jfyof_156",
5918
- marketSectionTitle: "_marketSectionTitle_jfyof_163",
5919
- marketSectionCount: "_marketSectionCount_jfyof_169",
5920
- marketSectionQuiet: "_marketSectionQuiet_jfyof_175",
5921
- marketProgress: "_marketProgress_jfyof_188",
5922
- marketNote: "_marketNote_jfyof_198",
5923
- marketFailure: "_marketFailure_jfyof_205",
5924
- marketEmpty: "_marketEmpty_jfyof_212",
5925
- marketPage: "_marketPage_jfyof_217",
5926
- marketPageHead: "_marketPageHead_jfyof_235",
5927
- marketPageTitle: "_marketPageTitle_jfyof_243",
5928
- marketPageIntro: "_marketPageIntro_jfyof_248",
5929
- marketPageTools: "_marketPageTools_jfyof_254",
5930
- marketPanel: "_marketPanel_jfyof_263",
5931
- marketTabs: "_marketTabs_jfyof_273",
5932
- marketTabList: "_marketTabList_jfyof_278",
5933
- marketIconButton: "_marketIconButton_jfyof_283",
5934
- marketIconWrap: "_marketIconWrap_jfyof_308",
5935
- marketIconButtonSpinning: "_marketIconButtonSpinning_jfyof_312",
5936
- "wb-spin": "_wb-spin_jfyof_1",
5937
- marketAddButton: "_marketAddButton_jfyof_316",
5938
- marketEmptyTitle: "_marketEmptyTitle_jfyof_333",
5939
- discoverPage: "_discoverPage_jfyof_347",
5940
- discoverBar: "_discoverBar_jfyof_354",
5941
- discoverTools: "_discoverTools_jfyof_361",
5942
- discoverMarket: "_discoverMarket_jfyof_367",
5943
- discoverMarketButton: "_discoverMarketButton_jfyof_372",
5944
- discoverMarketName: "_discoverMarketName_jfyof_379",
5945
- discoverLabels: "_discoverLabels_jfyof_385",
5946
- discoverSort: "_discoverSort_jfyof_390",
5947
- discoverRefresh: "_discoverRefresh_jfyof_395",
5948
- discoverSearch: "_discoverSearch_jfyof_399",
5949
- discoverSearchField: "_discoverSearchField_jfyof_407",
5950
- discoverSearchFieldFilled: "_discoverSearchFieldFilled_jfyof_412",
5951
- discoverSearchClear: "_discoverSearchClear_jfyof_421",
5952
- discoverChips: "_discoverChips_jfyof_472",
5953
- discoverList: "_discoverList_jfyof_479",
5954
- discoverCard: "_discoverCard_jfyof_488",
5955
- discoverArtwork: "_discoverArtwork_jfyof_502",
5956
- discoverArtworkImage: "_discoverArtworkImage_jfyof_514",
5957
- discoverMain: "_discoverMain_jfyof_518",
5958
- discoverTitleRow: "_discoverTitleRow_jfyof_526",
5959
- discoverCardOpen: "_discoverCardOpen_jfyof_534",
5960
- discoverStrong: "_discoverStrong_jfyof_565",
5961
- discoverDesc: "_discoverDesc_jfyof_571",
5962
- discoverMeta: "_discoverMeta_jfyof_580",
5963
- discoverMuted: "_discoverMuted_jfyof_587",
5964
- discoverEnd: "_discoverEnd_jfyof_593",
5965
- discoverBlocked: "_discoverBlocked_jfyof_602",
5966
- discoverEmpty: "_discoverEmpty_jfyof_607",
5967
- discoverEmptyTitle: "_discoverEmptyTitle_jfyof_616",
5968
- discoverDetail: "_discoverDetail_jfyof_626",
5969
- discoverCrumb: "_discoverCrumb_jfyof_632",
5970
- discoverCrumbIcon: "_discoverCrumbIcon_jfyof_655",
5971
- discoverDetailHead: "_discoverDetailHead_jfyof_659",
5972
- discoverDetailTitle: "_discoverDetailTitle_jfyof_665",
5973
- discoverDetailText: "_discoverDetailText_jfyof_671",
5974
- discoverDetailPanel: "_discoverDetailPanel_jfyof_678",
5975
- discoverDetailTabs: "_discoverDetailTabs_jfyof_685",
5976
- discoverDetailTabList: "_discoverDetailTabList_jfyof_690",
5977
- discoverDocBody: "_discoverDocBody_jfyof_695",
5978
- discoverDocNotice: "_discoverDocNotice_jfyof_700",
5979
- discoverSection: "_discoverSection_jfyof_706",
5980
- discoverSectionTitle: "_discoverSectionTitle_jfyof_713",
5981
- discoverFacts: "_discoverFacts_jfyof_719",
5982
- discoverFactRow: "_discoverFactRow_jfyof_724",
5983
- discoverFactKind: "_discoverFactKind_jfyof_734",
5984
- discoverFactValue: "_discoverFactValue_jfyof_740",
5985
- discoverCode: "_discoverCode_jfyof_748",
5986
- discoverTags: "_discoverTags_jfyof_757",
5987
- discoverLink: "_discoverLink_jfyof_764",
5988
- discoverVersions: "_discoverVersions_jfyof_774",
5989
- discoverVersionRow: "_discoverVersionRow_jfyof_782",
5990
- discoverVersionName: "_discoverVersionName_jfyof_790",
5991
- discoverError: "_discoverError_jfyof_795",
5992
- discoverFailure: "_discoverFailure_jfyof_804",
5993
- discoverLoading: "_discoverLoading_jfyof_810",
5994
- discoverNotice: "_discoverNotice_jfyof_819",
5995
- discoverMore: "_discoverMore_jfyof_837",
5996
- discoverTransport: "_discoverTransport_jfyof_841",
5997
- discoverTransportTitle: "_discoverTransportTitle_jfyof_847",
5998
- discoverTransportRows: "_discoverTransportRows_jfyof_852",
5999
- discoverTransportRow: "_discoverTransportRow_jfyof_852",
6000
- discoverTransportRadio: "_discoverTransportRadio_jfyof_873",
6001
- discoverTransportKind: "_discoverTransportKind_jfyof_887",
6002
- discoverTransportState: "_discoverTransportState_jfyof_893",
6003
- discoverTransportCustom: "_discoverTransportCustom_jfyof_913",
6004
- discoverTransportInput: "_discoverTransportInput_jfyof_919",
6005
- discoverInstallBar: "_discoverInstallBar_jfyof_924",
6006
- discoverInstallText: "_discoverInstallText_jfyof_935",
6007
- discoverDialog: "_discoverDialog_jfyof_941",
6008
- discoverDialogBody: "_discoverDialogBody_jfyof_945",
6009
- discoverSourceList: "_discoverSourceList_jfyof_951",
6010
- discoverSourceRow: "_discoverSourceRow_jfyof_959",
6011
- discoverSourceConfirm: "_discoverSourceConfirm_jfyof_968",
6012
- discoverSourcePick: "_discoverSourcePick_jfyof_974",
6013
- discoverSourceRadio: "_discoverSourceRadio_jfyof_983",
6014
- discoverSourceMain: "_discoverSourceMain_jfyof_991",
6015
- discoverSourceHead: "_discoverSourceHead_jfyof_999",
6016
- discoverSourceUrl: "_discoverSourceUrl_jfyof_1007",
6017
- discoverSourceMore: "_discoverSourceMore_jfyof_1017",
6018
- discoverSourceLoading: "_discoverSourceLoading_jfyof_1021",
6019
- discoverSourceHint: "_discoverSourceHint_jfyof_1031",
6020
- discoverSourceError: "_discoverSourceError_jfyof_1045",
6021
- discoverSourceForm: "_discoverSourceForm_jfyof_1051",
6022
- discoverGrow: "_discoverGrow_jfyof_1057",
6023
- discoverField: "_discoverField_jfyof_1062",
6024
- discoverFieldLabel: "_discoverFieldLabel_jfyof_1068",
6025
- discoverConfirmHead: "_discoverConfirmHead_jfyof_1073",
6026
- discoverSkeletonFill: "_discoverSkeletonFill_jfyof_1079",
6027
- "wb-skeleton": "_wb-skeleton_jfyof_1",
6028
- discoverSkeletonBar: "_discoverSkeletonBar_jfyof_1088",
6029
- discoverSkeletonTitle: "_discoverSkeletonTitle_jfyof_1095",
6030
- discoverSkeletonDesc: "_discoverSkeletonDesc_jfyof_1099"
6166
+ marketList: "_marketList_485ym_1",
6167
+ marketRow: "_marketRow_485ym_10",
6168
+ marketIcon: "_marketIcon_485ym_20",
6169
+ marketMain: "_marketMain_485ym_32",
6170
+ marketName: "_marketName_485ym_39",
6171
+ marketStatus: "_marketStatus_485ym_48",
6172
+ marketStateText: "_marketStateText_485ym_58",
6173
+ marketSep: "_marketSep_485ym_62",
6174
+ marketReason: "_marketReason_485ym_66",
6175
+ marketVersion: "_marketVersion_485ym_72",
6176
+ marketLocalTag: "_marketLocalTag_485ym_94",
6177
+ marketEnd: "_marketEnd_485ym_105",
6178
+ marketSwitchSeat: "_marketSwitchSeat_485ym_112",
6179
+ marketActions: "_marketActions_485ym_125",
6180
+ marketUpdateAction: "_marketUpdateAction_485ym_131",
6181
+ marketSelfDivider: "_marketSelfDivider_485ym_137",
6182
+ marketSection: "_marketSection_485ym_143",
6183
+ marketSectionHead: "_marketSectionHead_485ym_150",
6184
+ marketSectionIcon: "_marketSectionIcon_485ym_156",
6185
+ marketSectionTitle: "_marketSectionTitle_485ym_163",
6186
+ marketSectionCount: "_marketSectionCount_485ym_169",
6187
+ marketSectionAction: "_marketSectionAction_485ym_175",
6188
+ marketSectionQuiet: "_marketSectionQuiet_485ym_183",
6189
+ marketProgress: "_marketProgress_485ym_196",
6190
+ marketNote: "_marketNote_485ym_206",
6191
+ marketFailure: "_marketFailure_485ym_213",
6192
+ marketFailureSeat: "_marketFailureSeat_485ym_220",
6193
+ marketEmpty: "_marketEmpty_485ym_225",
6194
+ marketPage: "_marketPage_485ym_230",
6195
+ marketPageHead: "_marketPageHead_485ym_248",
6196
+ marketPageTitle: "_marketPageTitle_485ym_256",
6197
+ marketPageIntro: "_marketPageIntro_485ym_261",
6198
+ marketPageTools: "_marketPageTools_485ym_267",
6199
+ marketPanel: "_marketPanel_485ym_276",
6200
+ marketTabs: "_marketTabs_485ym_286",
6201
+ marketTabList: "_marketTabList_485ym_291",
6202
+ marketAddButton: "_marketAddButton_485ym_296",
6203
+ marketEmptyTitle: "_marketEmptyTitle_485ym_313",
6204
+ discoverPage: "_discoverPage_485ym_318",
6205
+ discoverBar: "_discoverBar_485ym_325",
6206
+ discoverTools: "_discoverTools_485ym_332",
6207
+ discoverMarket: "_discoverMarket_485ym_338",
6208
+ discoverMarketButton: "_discoverMarketButton_485ym_343",
6209
+ discoverMarketName: "_discoverMarketName_485ym_350",
6210
+ discoverLabels: "_discoverLabels_485ym_356",
6211
+ discoverSort: "_discoverSort_485ym_361",
6212
+ discoverRefresh: "_discoverRefresh_485ym_366",
6213
+ discoverSearch: "_discoverSearch_485ym_370",
6214
+ discoverSearchField: "_discoverSearchField_485ym_378",
6215
+ discoverSearchFieldFilled: "_discoverSearchFieldFilled_485ym_383",
6216
+ discoverSearchClear: "_discoverSearchClear_485ym_392",
6217
+ discoverChips: "_discoverChips_485ym_443",
6218
+ discoverList: "_discoverList_485ym_450",
6219
+ discoverCard: "_discoverCard_485ym_459",
6220
+ discoverArtwork: "_discoverArtwork_485ym_473",
6221
+ discoverArtworkImage: "_discoverArtworkImage_485ym_485",
6222
+ discoverMain: "_discoverMain_485ym_489",
6223
+ discoverTitleRow: "_discoverTitleRow_485ym_497",
6224
+ discoverCardOpen: "_discoverCardOpen_485ym_505",
6225
+ discoverStrong: "_discoverStrong_485ym_536",
6226
+ discoverDesc: "_discoverDesc_485ym_542",
6227
+ discoverMeta: "_discoverMeta_485ym_551",
6228
+ discoverMuted: "_discoverMuted_485ym_558",
6229
+ discoverEnd: "_discoverEnd_485ym_564",
6230
+ discoverUpdateAction: "_discoverUpdateAction_485ym_573",
6231
+ discoverBlocked: "_discoverBlocked_485ym_578",
6232
+ discoverEmpty: "_discoverEmpty_485ym_583",
6233
+ discoverEmptyTitle: "_discoverEmptyTitle_485ym_592",
6234
+ discoverDetail: "_discoverDetail_485ym_602",
6235
+ discoverCrumb: "_discoverCrumb_485ym_608",
6236
+ discoverCrumbIcon: "_discoverCrumbIcon_485ym_631",
6237
+ discoverDetailHead: "_discoverDetailHead_485ym_635",
6238
+ discoverDetailTitle: "_discoverDetailTitle_485ym_641",
6239
+ discoverDetailText: "_discoverDetailText_485ym_647",
6240
+ discoverDetailPanel: "_discoverDetailPanel_485ym_654",
6241
+ discoverDetailTabs: "_discoverDetailTabs_485ym_661",
6242
+ discoverDetailTabList: "_discoverDetailTabList_485ym_666",
6243
+ discoverDocBody: "_discoverDocBody_485ym_671",
6244
+ discoverDocNotice: "_discoverDocNotice_485ym_676",
6245
+ discoverSection: "_discoverSection_485ym_682",
6246
+ discoverSectionTitle: "_discoverSectionTitle_485ym_689",
6247
+ discoverFacts: "_discoverFacts_485ym_695",
6248
+ discoverFactRow: "_discoverFactRow_485ym_700",
6249
+ discoverFactKind: "_discoverFactKind_485ym_710",
6250
+ discoverFactValue: "_discoverFactValue_485ym_716",
6251
+ discoverCode: "_discoverCode_485ym_724",
6252
+ discoverTags: "_discoverTags_485ym_733",
6253
+ discoverLink: "_discoverLink_485ym_740",
6254
+ discoverVersions: "_discoverVersions_485ym_750",
6255
+ discoverVersionRow: "_discoverVersionRow_485ym_758",
6256
+ discoverVersionName: "_discoverVersionName_485ym_766",
6257
+ discoverError: "_discoverError_485ym_771",
6258
+ discoverFailure: "_discoverFailure_485ym_780",
6259
+ discoverLoading: "_discoverLoading_485ym_786",
6260
+ discoverNotice: "_discoverNotice_485ym_795",
6261
+ discoverMore: "_discoverMore_485ym_813",
6262
+ discoverTransport: "_discoverTransport_485ym_817",
6263
+ discoverTransportHead: "_discoverTransportHead_485ym_823",
6264
+ discoverTransportTitle: "_discoverTransportTitle_485ym_830",
6265
+ discoverTransportKind: "_discoverTransportKind_485ym_835",
6266
+ discoverTransportState: "_discoverTransportState_485ym_840",
6267
+ discoverTransportRows: "_discoverTransportRows_485ym_848",
6268
+ discoverTransportRow: "_discoverTransportRow_485ym_848",
6269
+ discoverTransportRadio: "_discoverTransportRadio_485ym_869",
6270
+ discoverTransportCustom: "_discoverTransportCustom_485ym_909",
6271
+ discoverTransportInput: "_discoverTransportInput_485ym_915",
6272
+ discoverInstallBar: "_discoverInstallBar_485ym_920",
6273
+ discoverInstallText: "_discoverInstallText_485ym_931",
6274
+ discoverDialog: "_discoverDialog_485ym_937",
6275
+ discoverDialogBody: "_discoverDialogBody_485ym_941",
6276
+ discoverSourceList: "_discoverSourceList_485ym_947",
6277
+ discoverSourceRow: "_discoverSourceRow_485ym_955",
6278
+ discoverSourceConfirm: "_discoverSourceConfirm_485ym_964",
6279
+ discoverSourcePick: "_discoverSourcePick_485ym_970",
6280
+ discoverSourceRadio: "_discoverSourceRadio_485ym_979",
6281
+ discoverSourceMain: "_discoverSourceMain_485ym_987",
6282
+ discoverSourceHead: "_discoverSourceHead_485ym_995",
6283
+ discoverSourceUrl: "_discoverSourceUrl_485ym_1003",
6284
+ discoverSourceMore: "_discoverSourceMore_485ym_1013",
6285
+ discoverSourceLoading: "_discoverSourceLoading_485ym_1017",
6286
+ discoverSourceHint: "_discoverSourceHint_485ym_1027",
6287
+ discoverSourceError: "_discoverSourceError_485ym_1041",
6288
+ discoverSourceForm: "_discoverSourceForm_485ym_1047",
6289
+ discoverGrow: "_discoverGrow_485ym_1053",
6290
+ discoverField: "_discoverField_485ym_1058",
6291
+ discoverFieldLabel: "_discoverFieldLabel_485ym_1064",
6292
+ discoverConfirmHead: "_discoverConfirmHead_485ym_1069",
6293
+ discoverSkeletonFill: "_discoverSkeletonFill_485ym_1075",
6294
+ "wb-skeleton": "_wb-skeleton_485ym_1",
6295
+ discoverSkeletonBar: "_discoverSkeletonBar_485ym_1084",
6296
+ discoverSkeletonTitle: "_discoverSkeletonTitle_485ym_1091",
6297
+ discoverSkeletonDesc: "_discoverSkeletonDesc_485ym_1095"
6031
6298
  };
6032
6299
  //#endregion
6033
6300
  //#region src/app/layouts/market/discover-states.tsx
@@ -6108,6 +6375,151 @@ function MarketEmpty({ t }) {
6108
6375
  return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
6109
6376
  }
6110
6377
  //#endregion
6378
+ //#region src/app/layouts/rightbar/failure-card-text.ts
6379
+ var TITLE_KEY = {
6380
+ permission: "panels.market.failure.permission",
6381
+ "disk-full": "panels.market.failure.diskFull",
6382
+ sandbox: "panels.market.failure.sandbox",
6383
+ unknown: "panels.market.failure.unknown"
6384
+ };
6385
+ var ASK_AGENT_KEY = "panels.market.failure.askAgent";
6386
+ function shellPath(path) {
6387
+ return /^[\w./@%+-]+$/.test(path) ? path : `'${path.replaceAll("'", "'\\''")}'`;
6388
+ }
6389
+ function ownerLabel(uid) {
6390
+ return uid === 0 ? "root" : `uid ${uid}`;
6391
+ }
6392
+ function failureCardOf(failure, t) {
6393
+ const path = failure.path ?? "";
6394
+ const fix = failure.fix;
6395
+ if (fix.kind === "chown") {
6396
+ const ownerUid = failure.owner?.uid;
6397
+ return {
6398
+ title: t(TITLE_KEY[failure.kind]),
6399
+ fact: ownerUid === void 0 ? t("panels.market.failure.factMode", {
6400
+ path,
6401
+ mode: failure.mode ?? "?"
6402
+ }) : t("panels.market.failure.factOwner", {
6403
+ path,
6404
+ owner: ownerLabel(ownerUid),
6405
+ me: ownerLabel(failure.current.uid)
6406
+ }),
6407
+ fixLabel: t("panels.market.failure.copyFix"),
6408
+ fix: `sudo chown -R ${fix.uid}:${fix.gid} ${shellPath(fix.path)}`,
6409
+ copiedHint: t("panels.market.failure.copiedHint"),
6410
+ command: failure.command,
6411
+ output: failure.output,
6412
+ exitCode: failure.exitCode
6413
+ };
6414
+ }
6415
+ if (fix.kind === "chmod") return {
6416
+ title: t(TITLE_KEY[failure.kind]),
6417
+ fact: t("panels.market.failure.factMode", {
6418
+ path,
6419
+ mode: failure.mode ?? "?"
6420
+ }),
6421
+ fixLabel: t("panels.market.failure.copyFix"),
6422
+ fix: `chmod -R u+w ${shellPath(fix.path)}`,
6423
+ copiedHint: t("panels.market.failure.copiedHint"),
6424
+ command: failure.command,
6425
+ output: failure.output,
6426
+ exitCode: failure.exitCode
6427
+ };
6428
+ if (fix.kind === "space") return {
6429
+ title: t(TITLE_KEY[failure.kind]),
6430
+ fact: t("panels.market.failure.factSpace", { path }),
6431
+ fixLabel: t("panels.market.failure.copyFix"),
6432
+ fix: `du -sh ${shellPath(fix.path)}`,
6433
+ copiedHint: t("panels.market.failure.copiedHint"),
6434
+ command: failure.command,
6435
+ output: failure.output,
6436
+ exitCode: failure.exitCode
6437
+ };
6438
+ return {
6439
+ title: t(TITLE_KEY[failure.kind]),
6440
+ fact: t("panels.market.failure.factStuck", { path: path === "" ? t("panels.market.failure.nowhere") : path }),
6441
+ fixLabel: t(ASK_AGENT_KEY),
6442
+ fix: t("panels.market.failure.askAgentText", {
6443
+ command: failure.command,
6444
+ path: path === "" ? t("panels.market.failure.nowhere") : path,
6445
+ code: failure.exitCode === null ? "?" : String(failure.exitCode)
6446
+ }),
6447
+ copiedHint: t("panels.market.failure.askAgentHint"),
6448
+ command: failure.command,
6449
+ output: failure.output,
6450
+ exitCode: failure.exitCode
6451
+ };
6452
+ }
6453
+ var FailureCard_module_default = {
6454
+ block: "_block_mxnbc_1",
6455
+ head: "_head_mxnbc_9",
6456
+ title: "_title_mxnbc_16",
6457
+ fact: "_fact_mxnbc_22",
6458
+ actions: "_actions_mxnbc_30",
6459
+ hint: "_hint_mxnbc_38",
6460
+ output: "_output_mxnbc_44"
6461
+ };
6462
+ //#endregion
6463
+ //#region src/app/layouts/rightbar/FailureCard.tsx
6464
+ var COPIED_MS$1 = 1200;
6465
+ function terminalLabels(t) {
6466
+ return {
6467
+ commandLine: (line) => t("panels.market.failure.term.commandLine", { line }),
6468
+ signal: (signal) => t("panels.market.failure.term.signal", { signal }),
6469
+ exitCode: (exitCode) => t("panels.market.failure.term.exitCode", { exitCode }),
6470
+ noExitCode: t("panels.market.failure.term.noExitCode"),
6471
+ running: t("panels.market.failure.term.running"),
6472
+ failed: t("panels.market.failure.term.failed"),
6473
+ done: t("panels.market.failure.term.done"),
6474
+ copy: t("panels.market.failure.term.copy"),
6475
+ copied: t("panels.market.failure.term.copied"),
6476
+ noOutput: t("panels.market.failure.term.noOutput"),
6477
+ collapseAria: t("panels.market.failure.term.collapse"),
6478
+ collapse: t("panels.market.failure.term.collapse"),
6479
+ expandAria: (hidden) => t("panels.market.failure.term.expandAria", { hidden }),
6480
+ expand: (hidden) => t("panels.market.failure.term.expand", { hidden })
6481
+ };
6482
+ }
6483
+ function FailureCard({ t, failure, onRecheck, rechecking }) {
6484
+ const model = failureCardOf(failure, t);
6485
+ const [copied, setCopied] = useState(false);
6486
+ const [open, setOpen] = useState(false);
6487
+ const onCopy = useCallback(() => {
6488
+ writeClipboard(model.fix).then((ok) => {
6489
+ if (!ok) return;
6490
+ setCopied(true);
6491
+ setTimeout(() => setCopied(false), COPIED_MS$1);
6492
+ });
6493
+ }, [model.fix]);
6494
+ return /* @__PURE__ */ createElement("div", { className: FailureCard_module_default.block }, /* @__PURE__ */ createElement("div", { className: FailureCard_module_default.head }, /* @__PURE__ */ createElement(StateDot, {
6495
+ state: "error",
6496
+ size: 8
6497
+ }), /* @__PURE__ */ createElement("span", { className: FailureCard_module_default.title }, model.title)), /* @__PURE__ */ createElement("p", { className: FailureCard_module_default.fact }, model.fact), /* @__PURE__ */ createElement("div", { className: FailureCard_module_default.actions }, /* @__PURE__ */ createElement(Button, {
6498
+ type: "button",
6499
+ size: "sm",
6500
+ variant: "ghost",
6501
+ onClick: onCopy
6502
+ }, copied ? t("panels.market.failure.copied") : model.fixLabel), /* @__PURE__ */ createElement(Button, {
6503
+ type: "button",
6504
+ size: "sm",
6505
+ variant: "ghost",
6506
+ disabled: rechecking,
6507
+ onClick: onRecheck
6508
+ }, t("panels.market.failure.recheck")), /* @__PURE__ */ createElement(Button, {
6509
+ type: "button",
6510
+ size: "sm",
6511
+ variant: "ghost",
6512
+ onClick: () => setOpen(!open)
6513
+ }, open ? t("panels.market.failure.hideOutput") : t("panels.market.failure.showOutput"))), copied ? /* @__PURE__ */ createElement("p", { className: FailureCard_module_default.hint }, model.copiedHint) : null, open ? /* @__PURE__ */ createElement(TerminalBlock, {
6514
+ command: model.command,
6515
+ output: model.output,
6516
+ exitCode: model.exitCode,
6517
+ maxLines: 8,
6518
+ labels: terminalLabels(t),
6519
+ className: FailureCard_module_default.output
6520
+ }) : null);
6521
+ }
6522
+ //#endregion
6111
6523
  //#region src/app/layouts/rightbar/market-section-icon.ts
6112
6524
  var SIZE$1 = 14;
6113
6525
  function marketSectionIcon(kind) {
@@ -6156,6 +6568,7 @@ var PROGRESS_KEY = {
6156
6568
  install: "panels.market.installing",
6157
6569
  update: "panels.market.updating",
6158
6570
  "update-bundle": "panels.market.updating",
6571
+ "install-version": "panels.market.updating",
6159
6572
  "remove-bundle": "panels.market.uninstalling",
6160
6573
  uninstall: "panels.market.uninstalling",
6161
6574
  "update-dependency": "panels.market.updating",
@@ -6169,6 +6582,7 @@ var ACTION_LABEL_KEY = {
6169
6582
  install: "panels.market.install",
6170
6583
  update: "panels.market.update",
6171
6584
  "update-bundle": "panels.market.update",
6585
+ "install-version": "panels.market.update",
6172
6586
  "remove-bundle": "panels.market.uninstall",
6173
6587
  uninstall: "panels.market.uninstall",
6174
6588
  "update-dependency": "panels.market.update",
@@ -6275,9 +6689,21 @@ function pendingRowOf(input) {
6275
6689
  ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
6276
6690
  };
6277
6691
  }
6692
+ function askAgentReason(row, t) {
6693
+ if (row.hint !== void 0) return t(row.hint);
6694
+ if (row.note !== void 0) return t(row.note.key, row.note.params);
6695
+ return t(MARKET_STATE_KEY[row.state]);
6696
+ }
6697
+ function askAgentText(row, t) {
6698
+ return t("panels.market.askAgentText", {
6699
+ name: marketRowTitle(row, t),
6700
+ unit: row.id,
6701
+ reason: askAgentReason(row, t)
6702
+ });
6703
+ }
6278
6704
  //#endregion
6279
6705
  //#region src/app/layouts/rightbar/SharedSection.tsx
6280
- function SharedLine({ t, row, pending, failure, onAct }) {
6706
+ function SharedLine({ t, row, pending, failure, onAct, onRecheck, rechecking }) {
6281
6707
  const running = pending !== null && pending.id === row.id ? pending : null;
6282
6708
  const locked = pending !== null;
6283
6709
  const actions = sharedActions(row);
@@ -6296,60 +6722,32 @@ function SharedLine({ t, row, pending, failure, onAct }) {
6296
6722
  }, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) })))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ createElement(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ createElement(Button, {
6297
6723
  key: action,
6298
6724
  type: "button",
6299
- size: "sm",
6300
- variant: "outline",
6301
- disabled: locked,
6302
- onClick: () => onAct(action)
6303
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure));
6304
- }
6305
- function SharedSection({ t, rows, pending, failureOf, act }) {
6306
- if (rows.length === 0) return null;
6307
- return /* @__PURE__ */ createElement("section", { className: `${MarketPage_module_default.marketSection} ${MarketPage_module_default.marketSectionQuiet}` }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ createElement("span", {
6308
- className: MarketPage_module_default.marketSectionIcon,
6309
- "aria-hidden": "true"
6310
- }, marketSectionIcon("shared")), /* @__PURE__ */ createElement("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ createElement("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ createElement(SharedLine, {
6311
- key: row.id,
6312
- t,
6313
- row,
6314
- pending,
6315
- failure: failureOf(row.id),
6316
- onAct: (action) => void act(row.id, action)
6317
- }))));
6318
- }
6319
- //#endregion
6320
- //#region src/app/layouts/rightbar/panel-write.ts
6321
- var PANEL_SETTLE_MS = 4e3;
6322
- function rowKey(row) {
6323
- return `${row.id}:${row.shown ? "1" : "0"}:${row.source}`;
6324
- }
6325
- function rowKeys(rows) {
6326
- return rows.map(rowKey).join(",");
6327
- }
6328
- function panelBoardSignature(units, plugins, own) {
6329
- return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
6330
- }
6331
- function machineBoardSignature(defaults, changed) {
6332
- const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
6333
- return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
6334
- }
6335
- function nextPending(pending, signature) {
6336
- return pending !== null && pending !== signature ? null : pending;
6337
- }
6338
- function useBoardSettle(signature) {
6339
- const [held, setHeld] = useState(null);
6340
- useEffect(() => {
6341
- setHeld((current) => nextPending(current, signature));
6342
- }, [signature]);
6343
- useEffect(() => {
6344
- if (held === null) return void 0;
6345
- const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
6346
- return () => clearTimeout(timer);
6347
- }, [held]);
6348
- return {
6349
- pending: held !== null,
6350
- begin: () => setHeld(signature),
6351
- clear: () => setHeld(null)
6352
- };
6725
+ size: "sm",
6726
+ variant: "outline",
6727
+ disabled: locked,
6728
+ onClick: () => onAct(action)
6729
+ }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : failure.failure === void 0 ? /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure.message) : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ createElement(FailureCard, {
6730
+ t,
6731
+ failure: failure.failure,
6732
+ onRecheck,
6733
+ rechecking
6734
+ })));
6735
+ }
6736
+ function SharedSection({ t, rows, pending, failureOf, act, onRecheck, rechecking }) {
6737
+ if (rows.length === 0) return null;
6738
+ return /* @__PURE__ */ createElement("section", { className: `${MarketPage_module_default.marketSection} ${MarketPage_module_default.marketSectionQuiet}` }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ createElement("span", {
6739
+ className: MarketPage_module_default.marketSectionIcon,
6740
+ "aria-hidden": "true"
6741
+ }, marketSectionIcon("shared")), /* @__PURE__ */ createElement("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ createElement("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ createElement(SharedLine, {
6742
+ key: row.id,
6743
+ t,
6744
+ row,
6745
+ pending,
6746
+ failure: failureOf(row.id),
6747
+ onAct: (action) => void act(row.id, action),
6748
+ onRecheck,
6749
+ rechecking
6750
+ }))));
6353
6751
  }
6354
6752
  //#endregion
6355
6753
  //#region src/shared/components/Tip.tsx
@@ -6371,6 +6769,25 @@ function Tip({ side = "bottom", align = "end", gap = 6, portal = true, ...rest }
6371
6769
  });
6372
6770
  }
6373
6771
  //#endregion
6772
+ //#region src/app/layouts/rightbar/AskAgentButton.tsx
6773
+ var COPIED_MS = 1200;
6774
+ function AskAgentButton({ t, text, label }) {
6775
+ const [copied, setCopied] = useState(false);
6776
+ const onCopy = useCallback(() => {
6777
+ writeClipboard(text).then((ok) => {
6778
+ if (!ok) return;
6779
+ setCopied(true);
6780
+ setTimeout(() => setCopied(false), COPIED_MS);
6781
+ });
6782
+ }, [text]);
6783
+ return /* @__PURE__ */ createElement(Button, {
6784
+ type: "button",
6785
+ size: "sm",
6786
+ variant: "ghost",
6787
+ onClick: onCopy
6788
+ }, copied ? t("panels.market.askAgentCopied") : label);
6789
+ }
6790
+ //#endregion
6374
6791
  //#region src/app/layouts/rightbar/market-section.tsx
6375
6792
  var dangerActions = [
6376
6793
  "uninstall",
@@ -6441,13 +6858,14 @@ function MarketLineStatus({ t, row, quiet }) {
6441
6858
  "aria-hidden": "true"
6442
6859
  }, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, noteText)));
6443
6860
  }
6444
- function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6861
+ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy, onRecheck, rechecking }) {
6445
6862
  const running = pending !== null && pending.id === row.id ? pending : null;
6446
6863
  const locked = pending !== null;
6447
6864
  const [migrationOpen, setMigrationOpen] = useState(false);
6448
6865
  const [dismissOpen, setDismissOpen] = useState(false);
6449
6866
  const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
6450
6867
  const actions = marketActions$1(row);
6868
+ const asksAgent = marketAsksAgent(row);
6451
6869
  const switchLocked = marketSwitchLocked(row);
6452
6870
  return /* @__PURE__ */ createElement("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ createElement("span", {
6453
6871
  className: MarketPage_module_default.marketIcon,
@@ -6459,7 +6877,11 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6459
6877
  t,
6460
6878
  row,
6461
6879
  quiet
6462
- })), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ createElement(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
6880
+ })), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ createElement(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 && !asksAgent ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketActions }, asksAgent ? /* @__PURE__ */ createElement(AskAgentButton, {
6881
+ t,
6882
+ text: askAgentText(row, t),
6883
+ label: t("panels.market.askAgent")
6884
+ }) : null, actions.map((action) => {
6463
6885
  const danger = dangerActions.includes(action);
6464
6886
  const update = updateActions.includes(action);
6465
6887
  return /* @__PURE__ */ createElement(Button, {
@@ -6482,7 +6904,12 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6482
6904
  disabled: boardBusy === true || locked || switchLocked,
6483
6905
  label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
6484
6906
  onChange: (next) => onDefault?.(next)
6485
- })))), failure === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure), /* @__PURE__ */ createElement(MarketLineDialogs, {
6907
+ })))), failure === null ? null : failure.failure === void 0 ? /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure.message) : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ createElement(FailureCard, {
6908
+ t,
6909
+ failure: failure.failure,
6910
+ onRecheck,
6911
+ rechecking
6912
+ })), /* @__PURE__ */ createElement(MarketLineDialogs, {
6486
6913
  t,
6487
6914
  migrationOpen,
6488
6915
  dismissOpen,
@@ -6498,12 +6925,12 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6498
6925
  }
6499
6926
  }));
6500
6927
  }
6501
- function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
6502
- if (rows.length === 0) return null;
6928
+ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead, onRecheck, rechecking }) {
6929
+ if (rows.length === 0 && keepHead !== true) return null;
6503
6930
  return /* @__PURE__ */ createElement("section", { className: MarketPage_module_default.marketSection }, titleKey === void 0 ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ createElement("span", {
6504
6931
  className: MarketPage_module_default.marketSectionIcon,
6505
6932
  "aria-hidden": "true"
6506
- }, icon), /* @__PURE__ */ createElement("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), rows.length === 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), rows.length === 0 ? null : /* @__PURE__ */ createElement("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ createElement(MarketLine, {
6933
+ }, icon), /* @__PURE__ */ createElement("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionCount }, rows.length), headAction === void 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionAction }, headAction)), rows.length === 0 ? null : /* @__PURE__ */ createElement("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ createElement(MarketLine, {
6507
6934
  key: row.id,
6508
6935
  t,
6509
6936
  row,
@@ -6511,7 +6938,9 @@ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confi
6511
6938
  failure: failureOf(row.id),
6512
6939
  onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
6513
6940
  onDefault: (next) => onDefault?.(row.id, next),
6514
- boardBusy
6941
+ boardBusy,
6942
+ onRecheck,
6943
+ rechecking
6515
6944
  }))));
6516
6945
  }
6517
6946
  //#endregion
@@ -6744,6 +7173,14 @@ function changeFailure(change, t) {
6744
7173
  if (change === void 0 || SHIPPED$1.includes(change.application)) return void 0;
6745
7174
  return failureReason(failureCode(change), change.application, t);
6746
7175
  }
7176
+ function appliedUnitsOf(value) {
7177
+ if (changeOf(value)?.application !== "applied") return [];
7178
+ const module = value?.module;
7179
+ if (typeof module !== "object" || module === null) return [];
7180
+ const record = module;
7181
+ if (record.kind !== "module") return [];
7182
+ return typeof record.unit === "string" && record.unit !== "" ? [record.unit] : [];
7183
+ }
6747
7184
  //#endregion
6748
7185
  //#region src/app/layouts/rightbar/market-update-verdict.ts
6749
7186
  function updateVerdictOf(input) {
@@ -6775,7 +7212,11 @@ function updateVerdictText(verdict, t, input) {
6775
7212
  }
6776
7213
  //#endregion
6777
7214
  //#region src/app/layouts/rightbar/market-act.ts
6778
- var STEADY_ACTIONS = /* @__PURE__ */ new Set(["update", "update-bundle"]);
7215
+ var STEADY_ACTIONS = /* @__PURE__ */ new Set([
7216
+ "update",
7217
+ "update-bundle",
7218
+ "install-version"
7219
+ ]);
6779
7220
  function assumedApplied(action) {
6780
7221
  return action === "update" || action === "update-dependency" || action === "update-plugin" || REMOVAL_ACTIONS.has(action);
6781
7222
  }
@@ -6819,18 +7260,34 @@ function marketActOf(options) {
6819
7260
  seats.setConfirming(null);
6820
7261
  seats.setFailed(null);
6821
7262
  seats.setNotice(null);
7263
+ const dependency = action === "update-dependency";
7264
+ const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench";
7265
+ const market = action === "install-version" ? row?.market : void 0;
7266
+ const marketSpec = market === void 0 || row?.pkg === void 0 ? void 0 : marketInstallTarget(row.pkg, market.version, market.source).spec;
7267
+ if (action === "install-version" && marketSpec === void 0) {
7268
+ seats.setPending(null);
7269
+ seats.setFailed({
7270
+ id,
7271
+ message: t("panels.market.failed", { reason: t("panels.market.noMarketSource") })
7272
+ });
7273
+ return;
7274
+ }
6822
7275
  const outcome = await send(action === "dismiss-followup" ? {
6823
7276
  action,
6824
7277
  id: row?.followUp?.id ?? ""
6825
- } : action === "update-dependency" ? {
7278
+ } : dependency ? {
6826
7279
  action,
6827
7280
  id
6828
- } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench" ? {
7281
+ } : byName ? {
6829
7282
  action,
6830
7283
  name: row?.pkg ?? ""
6831
- } : {
7284
+ } : marketSpec === void 0 ? {
6832
7285
  action,
6833
7286
  unit: id
7287
+ } : {
7288
+ action,
7289
+ spec: marketSpec,
7290
+ requestId: globalThis.crypto.randomUUID()
6834
7291
  });
6835
7292
  if (!outcome.ok) {
6836
7293
  onChanged({ force: true });
@@ -6838,7 +7295,8 @@ function marketActOf(options) {
6838
7295
  seats.setHeld(void 0);
6839
7296
  seats.setFailed({
6840
7297
  id,
6841
- message: t("panels.market.failed", { reason: outcome.message })
7298
+ message: t("panels.market.failed", { reason: outcome.message }),
7299
+ ...outcome.failure === void 0 ? {} : { failure: outcome.failure }
6842
7300
  });
6843
7301
  return;
6844
7302
  }
@@ -6895,6 +7353,109 @@ function marketActOf(options) {
6895
7353
  });
6896
7354
  };
6897
7355
  }
7356
+ //#endregion
7357
+ //#region src/app/layouts/rightbar/panel-write.ts
7358
+ var PANEL_SETTLE_MS = 4e3;
7359
+ function rowKey(row) {
7360
+ return `${row.id}:${row.shown ? "1" : "0"}:${row.source}`;
7361
+ }
7362
+ function rowKeys(rows) {
7363
+ return rows.map(rowKey).join(",");
7364
+ }
7365
+ function panelBoardSignature(units, plugins, own) {
7366
+ return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
7367
+ }
7368
+ function machineBoardSignature(defaults, changed) {
7369
+ const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
7370
+ return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
7371
+ }
7372
+ function nextPending(pending, signature) {
7373
+ return pending !== null && pending !== signature ? null : pending;
7374
+ }
7375
+ function useBoardSettle(signature) {
7376
+ const [held, setHeld] = useState(null);
7377
+ useEffect(() => {
7378
+ setHeld((current) => nextPending(current, signature));
7379
+ }, [signature]);
7380
+ useEffect(() => {
7381
+ if (held === null) return void 0;
7382
+ const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
7383
+ return () => clearTimeout(timer);
7384
+ }, [held]);
7385
+ return {
7386
+ pending: held !== null,
7387
+ begin: () => setHeld(signature),
7388
+ clear: () => setHeld(null)
7389
+ };
7390
+ }
7391
+ //#endregion
7392
+ //#region src/app/layouts/rightbar/use-market-default.ts
7393
+ function useMarketDefault(input) {
7394
+ const { t, mocked, defaults, changed, setNotice } = input;
7395
+ const boardWrite = useHostWrite({
7396
+ channel: "prefs",
7397
+ resource: "panels",
7398
+ networkText: t("panels.failed")
7399
+ });
7400
+ const [writing, setWriting] = useState(false);
7401
+ const settle = useBoardSettle(machineBoardSignature(defaults, changed));
7402
+ const setDefault = async (id, next) => {
7403
+ if (mocked) return;
7404
+ setWriting(true);
7405
+ settle.begin();
7406
+ const outcome = await boardWrite.send({
7407
+ action: next ? "show" : "hide",
7408
+ id,
7409
+ scope: "machine"
7410
+ });
7411
+ setWriting(false);
7412
+ if (!outcome.ok) {
7413
+ settle.clear();
7414
+ setNotice(t("panels.failed"));
7415
+ }
7416
+ };
7417
+ return {
7418
+ pending: writing || settle.pending,
7419
+ setDefault
7420
+ };
7421
+ }
7422
+ var market_check_module_default = {
7423
+ check: "_check_1g6tv_1",
7424
+ status: "_status_1g6tv_8",
7425
+ button: "_button_1g6tv_15",
7426
+ icon: "_icon_1g6tv_22"
7427
+ };
7428
+ //#endregion
7429
+ //#region src/app/layouts/market/market-check.tsx
7430
+ function MarketCheck({ t, checkedAt, latestCheck = {
7431
+ checked: 0,
7432
+ unknown: 0
7433
+ }, checking, failed, disabled, onCheck }) {
7434
+ const parts = [];
7435
+ if (checking) parts.push(t("panels.market.checkingNow"));
7436
+ else {
7437
+ if (latestCheck.checked > 0 && checkedAt !== null) parts.push(t("panels.market.checkedAt", { time: checkedAgo(checkedAt, t) }));
7438
+ if (failed) parts.push(t("panels.market.checkFailed"));
7439
+ else if (latestCheck.unknown > 0) parts.push(t("panels.market.latestPartial", { n: String(latestCheck.unknown) }));
7440
+ }
7441
+ const status = parts.length === 0 ? null : parts.join(" · ");
7442
+ return /* @__PURE__ */ createElement("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ createElement("span", {
7443
+ className: market_check_module_default.status,
7444
+ "aria-live": "polite"
7445
+ }, status), /* @__PURE__ */ createElement(Tip, { label: t("panels.market.checkUpdates") }, /* @__PURE__ */ createElement(Button, {
7446
+ type: "button",
7447
+ variant: "ghost",
7448
+ size: "sm",
7449
+ className: market_check_module_default.button,
7450
+ "aria-label": t("panels.market.checkUpdates"),
7451
+ disabled: disabled || checking,
7452
+ icon: /* @__PURE__ */ createElement("span", {
7453
+ className: `${market_check_module_default.icon}${checking ? " wb-spinning" : ""}`,
7454
+ "aria-hidden": "true"
7455
+ }, /* @__PURE__ */ createElement(IconRefreshOutlineRegular, { size: 14 })),
7456
+ onClick: onCheck
7457
+ })));
7458
+ }
6898
7459
  var PanelFoot_module_default = {
6899
7460
  foot: "_foot_1ud1j_1",
6900
7461
  footText: "_footText_1ud1j_13",
@@ -6912,6 +7473,8 @@ var CONFIRM_UNINSTALL = [
6912
7473
  "remove-bundle",
6913
7474
  "uninstall-plugin"
6914
7475
  ];
7476
+ var NO_ROWS = [];
7477
+ var NO_UNITS$1 = /* @__PURE__ */ new Set();
6915
7478
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6916
7479
  const [acknowledged, setAcknowledged] = useState(false);
6917
7480
  return /* @__PURE__ */ createElement(RiskConfirmation, {
@@ -6928,9 +7491,12 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6928
7491
  onConfirm
6929
7492
  });
6930
7493
  }
6931
- function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
6932
- const failureOf = (id) => failed?.id === id ? failed.message : null;
7494
+ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy, check, onRecheck, rechecking }) {
7495
+ const failureOf = (id) => failed?.id === id ? failed : null;
6933
7496
  const foot = marketFootVisible(shown, installedList);
7497
+ const sections = marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t)));
7498
+ const installed = sections.find((section) => section.id === "installed");
7499
+ const pendingSection = sections.find((section) => section.id === "not-installed");
6934
7500
  return /* @__PURE__ */ createElement(Fragment, null, notice === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ createElement(MarketSection, {
6935
7501
  t,
6936
7502
  rows: self === void 0 ? [] : [self],
@@ -6940,35 +7506,57 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
6940
7506
  failureOf,
6941
7507
  act,
6942
7508
  confirmActions: CONFIRM_UNINSTALL,
6943
- onConfirming
7509
+ onConfirming,
7510
+ onRecheck,
7511
+ rechecking
6944
7512
  }), self === void 0 ? null : /* @__PURE__ */ createElement("div", {
6945
7513
  className: MarketPage_module_default.marketSelfDivider,
6946
7514
  "aria-hidden": "true"
6947
- }), marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t))).map((section) => /* @__PURE__ */ createElement(MarketSection, {
6948
- key: section.id,
7515
+ }), /* @__PURE__ */ createElement(MarketSection, {
7516
+ t,
7517
+ titleKey: "panels.market.sectionInstalled",
7518
+ icon: marketSectionIcon("installed"),
7519
+ rows: installed?.rows ?? NO_ROWS,
7520
+ keepHead: true,
7521
+ headAction: check,
7522
+ onDefault: setDefault,
7523
+ boardBusy,
7524
+ pending,
7525
+ failureOf,
7526
+ act,
7527
+ confirmActions: CONFIRM_UNINSTALL,
7528
+ onConfirming,
7529
+ onRecheck,
7530
+ rechecking
7531
+ }), pendingSection === void 0 ? null : /* @__PURE__ */ createElement(MarketSection, {
6949
7532
  t,
6950
- titleKey: section.titleKey,
6951
- icon: marketSectionIcon(section.id === "installed" ? "installed" : "pending"),
6952
- rows: section.rows,
7533
+ titleKey: pendingSection.titleKey,
7534
+ icon: marketSectionIcon("pending"),
7535
+ rows: pendingSection.rows,
6953
7536
  onDefault: setDefault,
6954
7537
  boardBusy,
6955
7538
  pending,
6956
7539
  failureOf,
6957
7540
  act,
6958
7541
  confirmActions: CONFIRM_UNINSTALL,
6959
- onConfirming
6960
- })), /* @__PURE__ */ createElement(MarketSection, {
7542
+ onConfirming,
7543
+ onRecheck,
7544
+ rechecking
7545
+ }), /* @__PURE__ */ createElement(MarketSection, {
6961
7546
  t,
6962
7547
  titleKey: "panels.market.sectionPlugins",
6963
7548
  icon: marketSectionIcon("plugins"),
6964
7549
  rows: pluginList,
7550
+ headAction: check,
6965
7551
  onDefault: setDefault,
6966
7552
  boardBusy,
6967
7553
  pending,
6968
7554
  failureOf,
6969
7555
  act,
6970
7556
  confirmActions: CONFIRM_UNINSTALL,
6971
- onConfirming
7557
+ onConfirming,
7558
+ onRecheck,
7559
+ rechecking
6972
7560
  }), foot ? /* @__PURE__ */ createElement(PanelFoot, {
6973
7561
  size: "md",
6974
7562
  text: t("panels.market.foot")
@@ -6977,11 +7565,13 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
6977
7565
  rows: shared,
6978
7566
  pending,
6979
7567
  failureOf,
6980
- act
7568
+ act,
7569
+ onRecheck,
7570
+ rechecking
6981
7571
  }));
6982
7572
  }
6983
7573
  function useMarketScene(input) {
6984
- const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
7574
+ const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, installing, mock, defaults, changed, pending, failed } = input;
6985
7575
  const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
6986
7576
  const catalog = mock?.manifests ?? manifests;
6987
7577
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
@@ -6989,7 +7579,10 @@ function useMarketScene(input) {
6989
7579
  const source = liveManifests(marketable, effective, installedIdSet(mock === void 0 ? installed : void 0));
6990
7580
  const byDefault = new Set(defaults);
6991
7581
  const updateMap = mock?.updates ?? updates ?? {};
6992
- const rows = marketRows(source, effective, updateMap, byDefault, changed);
7582
+ const rows = checkingRows(marketRows(source, effective, updateMap, byDefault, changed), {
7583
+ all: installing,
7584
+ units: settling ?? NO_UNITS$1
7585
+ });
6993
7586
  const shared = sharedRows(source, effective);
6994
7587
  const removing = removingIdOf(pending, failed);
6995
7588
  const steady = useHeldRow(pending, (id) => catalog.some((manifest) => manifest.id === id));
@@ -7010,7 +7603,7 @@ function useMarketScene(input) {
7010
7603
  busyId
7011
7604
  };
7012
7605
  }
7013
- function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
7606
+ function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, updatesCheckedAt = null, updatesFailed = false, installed, installedRead, workbench, selfUpdate, plugins, settling, installing = false, mock, defaults = [], changed = {} }) {
7014
7607
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
7015
7608
  mock,
7016
7609
  onPending
@@ -7024,6 +7617,7 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
7024
7617
  updates,
7025
7618
  installed,
7026
7619
  settling,
7620
+ installing,
7027
7621
  mock,
7028
7622
  defaults,
7029
7623
  changed,
@@ -7035,29 +7629,14 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
7035
7629
  channel: "provision",
7036
7630
  networkText: t("panels.failed")
7037
7631
  });
7038
- const boardWrite = useHostWrite({
7039
- channel: "prefs",
7040
- resource: "panels",
7041
- networkText: t("panels.failed")
7632
+ const { pending: defaultPending, setDefault } = useMarketDefault({
7633
+ t,
7634
+ mocked: mock !== void 0,
7635
+ defaults,
7636
+ changed,
7637
+ setNotice
7042
7638
  });
7043
- const [writingDefault, setWritingDefault] = useState(false);
7044
- const settleDefault = useBoardSettle(machineBoardSignature(defaults, changed));
7045
- const { busy: boardBusy } = useVisibleBusy(writingDefault || settleDefault.pending, 500);
7046
- const setDefault = async (id, next) => {
7047
- if (mock !== void 0) return;
7048
- setWritingDefault(true);
7049
- settleDefault.begin();
7050
- const outcome = await boardWrite.send({
7051
- action: next ? "show" : "hide",
7052
- id,
7053
- scope: "machine"
7054
- });
7055
- setWritingDefault(false);
7056
- if (!outcome.ok) {
7057
- settleDefault.clear();
7058
- setNotice(t("panels.failed"));
7059
- }
7060
- };
7639
+ const { busy: boardBusy } = useVisibleBusy(defaultPending, 500);
7061
7640
  const pendingRow = pendingRowOf({
7062
7641
  pending,
7063
7642
  removing,
@@ -7104,6 +7683,21 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
7104
7683
  });
7105
7684
  const settled = marketSettled(freshness, installedRead);
7106
7685
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
7686
+ const { busy: checkingShown } = useVisibleBusy(freshness.checking, 500);
7687
+ const recheck = () => {
7688
+ setFailed(null);
7689
+ if (mock === void 0) onChanged({ force: true });
7690
+ };
7691
+ const latestCheck = latestCheckSummary(mock?.installed ?? installed);
7692
+ const check = /* @__PURE__ */ createElement(MarketCheck, {
7693
+ t,
7694
+ checkedAt: updatesCheckedAt,
7695
+ latestCheck,
7696
+ checking: checkingShown,
7697
+ failed: updatesFailed,
7698
+ disabled: pending !== null,
7699
+ onCheck: () => onChanged({ force: true })
7700
+ });
7107
7701
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ createElement(MarketChecking, { t });
7108
7702
  if (nothing) return /* @__PURE__ */ createElement(MarketEmpty, { t });
7109
7703
  return /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement(MarketBody, {
@@ -7119,20 +7713,33 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
7119
7713
  act,
7120
7714
  onConfirming: setConfirming,
7121
7715
  setDefault,
7122
- boardBusy
7123
- }), /* @__PURE__ */ createElement(ConfirmUninstall, {
7716
+ boardBusy,
7717
+ check,
7718
+ onRecheck: recheck,
7719
+ rechecking: checkingShown
7720
+ }), /* @__PURE__ */ createElement(UninstallConfirm, {
7721
+ t,
7722
+ confirming,
7723
+ row: confirmingRow,
7724
+ onClose: () => setConfirming(null),
7725
+ act,
7726
+ rowById
7727
+ }));
7728
+ }
7729
+ function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
7730
+ return /* @__PURE__ */ createElement(ConfirmUninstall, {
7124
7731
  key: confirming ?? "",
7125
7732
  t,
7126
- name: confirmingRow === void 0 ? null : marketRowTitle(confirmingRow, t),
7127
- onCancel: () => setConfirming(null),
7733
+ name: row === void 0 ? null : marketRowTitle(row, t),
7734
+ onCancel: onClose,
7128
7735
  onConfirm: () => {
7129
7736
  const id = confirming;
7130
- setConfirming(null);
7737
+ onClose();
7131
7738
  if (id === null) return;
7132
- const row = rowById.get(id);
7133
- act(id, row?.plugin === true ? "uninstall-plugin" : row?.pkg === void 0 ? "uninstall" : "remove-bundle");
7739
+ const target = rowById.get(id);
7740
+ act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
7134
7741
  }
7135
- }));
7742
+ });
7136
7743
  }
7137
7744
  //#endregion
7138
7745
  //#region ../../node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/plugin/localizedFormat.js
@@ -7409,13 +8016,17 @@ function MarketIcon({ src, size = ICON }) {
7409
8016
  function EntryAction({ t, entry, title, onInstall, onShowInstalled, installDisabled = false }) {
7410
8017
  const latest = latestVersionOf(entry);
7411
8018
  if (latest === void 0) return null;
7412
- if (latest.install === "installed" || latest.install === "update-available") return /* @__PURE__ */ createElement(Button, {
7413
- type: "button",
7414
- variant: "ghost",
7415
- size: "sm",
7416
- "aria-label": t("panels.discover.openInstalled", { name: title }),
7417
- onClick: () => onShowInstalled(entry.name)
7418
- }, t(latest.install === "update-available" ? "panels.discover.cardUpdate" : "panels.discover.cardInstalled"));
8019
+ if (latest.install === "installed" || latest.install === "update-available") {
8020
+ const update = latest.install === "update-available";
8021
+ return /* @__PURE__ */ createElement(Button, {
8022
+ type: "button",
8023
+ variant: "ghost",
8024
+ size: "sm",
8025
+ className: update ? MarketPage_module_default.discoverUpdateAction : void 0,
8026
+ "aria-label": t("panels.discover.openInstalled", { name: title }),
8027
+ onClick: () => onShowInstalled(entry.name)
8028
+ }, t(update ? "panels.discover.cardUpdate" : "panels.discover.cardInstalled"));
8029
+ }
7419
8030
  if (latest.compat === "incompatible") return /* @__PURE__ */ createElement(Tooltip, {
7420
8031
  label: t("panels.discover.noCompatibleVersion", { runtime: latest.engines?.dsh ?? "" }),
7421
8032
  side: "bottom",
@@ -7516,6 +8127,7 @@ function DiscoverVersions({ t, locale, entry, onInstall, installDisabled = false
7516
8127
  var MARKET_DISCOVER_ROUTE = "panels/market-discover";
7517
8128
  var MARKET_DOC_ROUTE = "panels/market-doc";
7518
8129
  var MARKET_GIT_PROBE_ROUTE = "panels/git-probe";
8130
+ var MARKET_INSTALLED_ROUTE = "panels/market-installed";
7519
8131
  var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
7520
8132
  var MARKET_SOURCES_ROUTE = "panels/market-sources";
7521
8133
  //#endregion
@@ -7529,6 +8141,9 @@ function readMarketSources() {
7529
8141
  function readGitProbe(url) {
7530
8142
  return apiGet(MARKET_GIT_PROBE_ROUTE, { url });
7531
8143
  }
8144
+ function readMarketInstalled() {
8145
+ return apiGet(MARKET_INSTALLED_ROUTE);
8146
+ }
7532
8147
  function readMarketDoc(name, version, kind) {
7533
8148
  return apiGet(MARKET_DOC_ROUTE, {
7534
8149
  name,
@@ -7732,10 +8347,24 @@ function stateText(t, state) {
7732
8347
  if (state === "unknown") return t("panels.discover.transportUnknown");
7733
8348
  return t("panels.discover.transportChecking");
7734
8349
  }
8350
+ function kindText(t, kind) {
8351
+ return t(kind === "ssh" ? "panels.discover.transportSsh" : "panels.discover.transportHttps");
8352
+ }
7735
8353
  function DiscoverTransport({ t, transport }) {
8354
+ const [open, setOpen] = useState(false);
8355
+ const chosenRow = transport.rows.find((row) => row.url === transport.chosen);
8356
+ const chosenState = chosenRow === void 0 ? void 0 : transport.states[chosenRow.url] ?? "checking";
8357
+ const probing = transport.probing;
8358
+ const summary = chosenRow !== void 0 ? kindText(t, chosenRow.kind) : probing ? t("panels.discover.transportChecking") : t("panels.discover.transportNone");
8359
+ const summaryState = probing || chosenState === void 0 ? "" : stateText(t, chosenState);
7736
8360
  const needsAuth = transport.rows.length > 0 && transport.rows.every((row) => transport.states[row.url] === "auth") && transport.customState !== "ok";
7737
8361
  const customBusy = transport.customState === "checking";
7738
- return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransport }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportTitle }, t("panels.discover.transportTitle")), /* @__PURE__ */ createElement("div", {
8362
+ return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransport }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransportHead }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportTitle }, t("panels.discover.transportTitle")), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportKind }, summary), summaryState === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, summaryState), /* @__PURE__ */ createElement(Button, {
8363
+ type: "button",
8364
+ variant: "ghost",
8365
+ size: "sm",
8366
+ onClick: () => setOpen((value) => !value)
8367
+ }, t(open ? "panels.discover.transportChangeHide" : "panels.discover.transportChange"))), open ? /* @__PURE__ */ createElement("div", {
7739
8368
  className: MarketPage_module_default.discoverTransportRows,
7740
8369
  role: "radiogroup",
7741
8370
  "aria-label": t("panels.discover.transportTitle")
@@ -7754,8 +8383,8 @@ function DiscoverTransport({ t, transport }) {
7754
8383
  value: row.url,
7755
8384
  checked: transport.chosen === row.url,
7756
8385
  onChange: () => transport.setChosen(row.url)
7757
- }), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportKind }, t(row.kind === "ssh" ? "panels.discover.transportSsh" : "panels.discover.transportHttps")), label === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, label));
7758
- })), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransportCustom }, /* @__PURE__ */ createElement(TextField, {
8386
+ }), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportKind }, kindText(t, row.kind)), label === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, label));
8387
+ })) : null, open ? /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransportCustom }, /* @__PURE__ */ createElement(TextField, {
7759
8388
  type: "text",
7760
8389
  className: MarketPage_module_default.discoverTransportInput,
7761
8390
  value: transport.custom,
@@ -7774,7 +8403,7 @@ function DiscoverTransport({ t, transport }) {
7774
8403
  disabled: transport.custom.trim() === "" || customBusy,
7775
8404
  "aria-busy": customBusy,
7776
8405
  onClick: transport.checkCustom
7777
- }, t(customBusy ? "panels.discover.transportChecking" : "panels.discover.transportTest")), transport.customState === null || stateText(t, transport.customState) === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, stateText(t, transport.customState))), needsAuth ? /* @__PURE__ */ createElement("p", {
8406
+ }, t(customBusy ? "panels.discover.transportChecking" : "panels.discover.transportTest")), transport.customState === null || stateText(t, transport.customState) === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, stateText(t, transport.customState))) : null, needsAuth ? /* @__PURE__ */ createElement("p", {
7778
8407
  className: MarketPage_module_default.discoverNotice,
7779
8408
  role: "note"
7780
8409
  }, /* @__PURE__ */ createElement(IconWarningOutlineRegular, {
@@ -7796,8 +8425,13 @@ function defaultOf(rows, states) {
7796
8425
  const fallback = rows.find((row) => usable(states[row.url]));
7797
8426
  return fallback === void 0 ? null : fallback.url;
7798
8427
  }
7799
- function useGitTransport(source) {
7800
- const rows = useMemo(() => source === null ? [] : gitTransportCandidates(source.url), [source]);
8428
+ function useGitTransport(source, preferredKind) {
8429
+ const rows = useMemo(() => {
8430
+ if (source === null) return [];
8431
+ const candidates = gitTransportCandidates(source.url);
8432
+ if (preferredKind === void 0) return candidates;
8433
+ return [...candidates].sort((left, right) => Number(right.kind === preferredKind) - Number(left.kind === preferredKind));
8434
+ }, [source, preferredKind]);
7801
8435
  const [results, setResults] = useState({});
7802
8436
  const [picked, setPicked] = useState(null);
7803
8437
  const [custom, setCustom] = useState("");
@@ -7848,12 +8482,13 @@ function useGitTransport(source) {
7848
8482
  }
7849
8483
  //#endregion
7850
8484
  //#region src/app/layouts/market/discover-confirm.tsx
7851
- function DiscoverConfirm({ t, locale, choice, onCancel, onConfirm }) {
8485
+ function DiscoverConfirm({ t, locale, choice, transports, onCancel, onConfirm }) {
7852
8486
  if (choice === null) return null;
7853
8487
  return /* @__PURE__ */ createElement(DiscoverConfirmBody, {
7854
8488
  t,
7855
8489
  locale,
7856
8490
  choice,
8491
+ transports,
7857
8492
  onCancel,
7858
8493
  onConfirm
7859
8494
  });
@@ -7861,9 +8496,10 @@ function DiscoverConfirm({ t, locale, choice, onCancel, onConfirm }) {
7861
8496
  function factLabel(t, kind) {
7862
8497
  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");
7863
8498
  }
7864
- function DiscoverConfirmBody({ t, locale, choice, onCancel, onConfirm }) {
8499
+ function DiscoverConfirmBody({ t, locale, choice, transports, onCancel, onConfirm }) {
7865
8500
  const git = choice.version.source.type === "git" ? choice.version.source : null;
7866
- const transport = useGitTransport(git);
8501
+ const host = git === null ? void 0 : gitAddressOf(git.url)?.host;
8502
+ const transport = useGitTransport(git, host === void 0 ? void 0 : transports[host]);
7867
8503
  const title = displayTitleOf(choice.entry, locale) || choice.entry.name;
7868
8504
  const facts = sourceFactsOf(choice.entry.name, choice.version).filter((fact) => git === null || fact.kind !== "repository");
7869
8505
  const ready = git === null || transport.ready;
@@ -7884,7 +8520,7 @@ function DiscoverConfirmBody({ t, locale, choice, onCancel, onConfirm }) {
7884
8520
  disabled: !ready,
7885
8521
  "aria-busy": git !== null && transport.probing,
7886
8522
  onClick: () => onConfirm(transport.chosen ?? void 0)
7887
- }, t("panels.discover.cardInstall")))
8523
+ }, git !== null && transport.probing ? /* @__PURE__ */ createElement(Spinner, { size: 12 }) : null, t(git !== null && transport.probing ? "panels.discover.transportChecking" : "panels.discover.cardInstall")))
7888
8524
  }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverDialogBody }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverConfirmHead }, /* @__PURE__ */ createElement("span", {
7889
8525
  className: MarketPage_module_default.discoverArtwork,
7890
8526
  "aria-hidden": "true"
@@ -8171,6 +8807,7 @@ function DiscoverDialogs({ t, d }) {
8171
8807
  t,
8172
8808
  locale: d.locale,
8173
8809
  choice: d.choice,
8810
+ transports: d.transports,
8174
8811
  onCancel: () => d.setChoice(null),
8175
8812
  onConfirm: d.install
8176
8813
  }), /* @__PURE__ */ createElement(DiscoverInitDialog, {
@@ -8412,6 +9049,8 @@ function useDiscover(t, active, onInstalled) {
8412
9049
  const [addingSource, setAddingSource] = useState(false);
8413
9050
  const [pendingSourceId, setPendingSourceId] = useState(null);
8414
9051
  const [knownSources, setKnownSources] = useState(null);
9052
+ const [installToken] = useState(() => `market-install:${globalThis.crypto.randomUUID()}`);
9053
+ usePublishMarketInstalling(installToken, installing !== null);
8415
9054
  const loaded = useRef(false);
8416
9055
  const loadTicket = useRef(0);
8417
9056
  const sourceTicket = useRef(0);
@@ -8437,7 +9076,8 @@ function useDiscover(t, active, onInstalled) {
8437
9076
  if (response === null || !response.ok) return;
8438
9077
  setKnownSources({
8439
9078
  sources: sourceRowsOf(response.sources),
8440
- selected: response.selected
9079
+ selected: response.selected,
9080
+ transports: response.transports ?? {}
8441
9081
  });
8442
9082
  }, []);
8443
9083
  const load = useCallback(async (force = false) => {
@@ -8457,7 +9097,8 @@ function useDiscover(t, active, onInstalled) {
8457
9097
  setPayload(response);
8458
9098
  setKnownSources({
8459
9099
  sources: response.sources,
8460
- selected: response.selected
9100
+ selected: response.selected,
9101
+ transports: {}
8461
9102
  });
8462
9103
  setLimit(50);
8463
9104
  }, [t]);
@@ -8623,7 +9264,7 @@ function useDiscover(t, active, onInstalled) {
8623
9264
  setDetail(null);
8624
9265
  beginSwitch();
8625
9266
  setKnownSources((current) => current === null ? current : {
8626
- sources: current.sources,
9267
+ ...current,
8627
9268
  selected: id
8628
9269
  });
8629
9270
  sources.send({
@@ -8662,6 +9303,7 @@ function useDiscover(t, active, onInstalled) {
8662
9303
  ...target.registry === void 0 ? {} : { registry: target.registry }
8663
9304
  }).then((outcome) => {
8664
9305
  if (!outcome.ok) return;
9306
+ publishMarketApplied(appliedUnitsOf(outcome.value));
8665
9307
  const verdict = installVerdictOf(outcome.value, t);
8666
9308
  if (verdict.kind === "failed") {
8667
9309
  provision.fail(verdict.text);
@@ -8703,6 +9345,7 @@ function useDiscover(t, active, onInstalled) {
8703
9345
  failure,
8704
9346
  sources: knownSources?.sources ?? payload?.sources ?? [],
8705
9347
  selected: knownSources?.selected ?? payload?.selected ?? null,
9348
+ transports: knownSources?.transports ?? {},
8706
9349
  entries,
8707
9350
  shown,
8708
9351
  total: sorted.length,
@@ -8872,7 +9515,7 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
8872
9515
  }
8873
9516
  //#endregion
8874
9517
  //#region src/app/layouts/market/market-header.tsx
8875
- function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd }) {
9518
+ function MarketHeader({ t, idPrefix, tab, busy, onTab, onAdd }) {
8876
9519
  const tabItems = useMemo(() => [{
8877
9520
  value: "installed",
8878
9521
  label: t("panels.market.tabInstalled"),
@@ -8884,23 +9527,14 @@ function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd
8884
9527
  id: `${idPrefix}-tab-discover`,
8885
9528
  panelId: `${idPrefix}-panel-discover`
8886
9529
  }], [idPrefix, t]);
8887
- return /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement(Tip, { label: t("panels.market.recheck") }, /* @__PURE__ */ createElement("button", {
8888
- type: "button",
8889
- className: `${MarketPage_module_default.marketIconButton}${checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
8890
- "aria-label": t("panels.market.checkUpdates"),
8891
- disabled: busy,
8892
- onClick: onReload
8893
- }, /* @__PURE__ */ createElement("span", {
8894
- className: MarketPage_module_default.marketIconWrap,
8895
- "aria-hidden": "true"
8896
- }, /* @__PURE__ */ createElement(IconRefreshOutlineRegular, null)))), /* @__PURE__ */ createElement(Button, {
9530
+ return /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ createElement(Button, {
8897
9531
  variant: "primary",
8898
9532
  size: "sm",
8899
9533
  className: MarketPage_module_default.marketAddButton,
8900
9534
  icon: /* @__PURE__ */ createElement(IconPlusOutlineRegular, { size: 13 }),
8901
9535
  disabled: busy,
8902
9536
  onClick: onAdd
8903
- }, t("panels.market.add.open"))))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketTabs }, /* @__PURE__ */ createElement(SegmentedTabs, {
9537
+ }, t("panels.market.add.open")))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketTabs }, /* @__PURE__ */ createElement(SegmentedTabs, {
8904
9538
  className: MarketPage_module_default.marketTabList,
8905
9539
  items: tabItems,
8906
9540
  value: tab,
@@ -9274,6 +9908,30 @@ function useBoardWorkspace(workspaces, sessions) {
9274
9908
  };
9275
9909
  }
9276
9910
  //#endregion
9911
+ //#region src/app/layouts/market/use-settling-modules.ts
9912
+ var NO_UNITS = /* @__PURE__ */ new Set();
9913
+ function unitsOf(key) {
9914
+ return key === "" ? [] : key.split("|");
9915
+ }
9916
+ function useSettlingModules(installedKey, rosterKey, activeKey) {
9917
+ const seenRef = useRef(null);
9918
+ const [settling, setSettling] = useState(NO_UNITS);
9919
+ useEffect(() => {
9920
+ const units = unitsOf(installedKey);
9921
+ const held = holdBack(units, new Set(unitsOf(rosterKey)), new Set(unitsOf(activeKey)), seenRef.current);
9922
+ seenRef.current = new Set(units);
9923
+ setSettling(held.length === 0 ? NO_UNITS : new Set(held));
9924
+ if (held.length === 0) return;
9925
+ const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
9926
+ return () => clearTimeout(timer);
9927
+ }, [
9928
+ installedKey,
9929
+ rosterKey,
9930
+ activeKey
9931
+ ]);
9932
+ return settling;
9933
+ }
9934
+ //#endregion
9277
9935
  //#region src/shared/api/installed-plugins.ts
9278
9936
  var INSTALLED_PLUGINS_ROUTE = "panels/plugins";
9279
9937
  //#endregion
@@ -9300,6 +9958,7 @@ var state = {
9300
9958
  selfUpdate: null,
9301
9959
  read: false,
9302
9960
  checking: false,
9961
+ failed: false,
9303
9962
  checkedAt: null
9304
9963
  };
9305
9964
  var listeners$2 = /* @__PURE__ */ new Set();
@@ -9319,6 +9978,18 @@ function subscribeModuleVersions(listener) {
9319
9978
  listeners$2.delete(listener);
9320
9979
  };
9321
9980
  }
9981
+ function withMarketUpdates(modules, rows) {
9982
+ if (rows.length === 0) return modules;
9983
+ const byPkg = new Map(rows.map((row) => [row.pkg, row]));
9984
+ return modules.map((module) => {
9985
+ const row = byPkg.get(module.pkg);
9986
+ return row === void 0 ? module : {
9987
+ ...module,
9988
+ latest: row.version,
9989
+ market: row
9990
+ };
9991
+ });
9992
+ }
9322
9993
  function publish$1(next) {
9323
9994
  state = next;
9324
9995
  for (const listener of [...listeners$2]) listener();
@@ -9332,19 +10003,26 @@ function runModuleVersionsRead(force = false, fresh = false) {
9332
10003
  ...state,
9333
10004
  checking: true
9334
10005
  });
9335
- const promise = Promise.all([readModuleVersions(force), readInstalledPlugins(force)]).catch(() => null).then((responses) => {
10006
+ const promise = Promise.all([
10007
+ readModuleVersions(force),
10008
+ readInstalledPlugins(force),
10009
+ readMarketInstalled()
10010
+ ]).catch(() => null).then((responses) => {
9336
10011
  if (at !== epoch) return;
9337
10012
  if (!force && seq < newestForceSeq) return;
9338
10013
  const versions = responses?.[0];
9339
10014
  const plugins = responses?.[1];
10015
+ const market = responses?.[2];
10016
+ const read = versions?.ok === true;
9340
10017
  publish$1({
9341
- modules: versions?.ok === true ? versions.modules : state.modules,
10018
+ modules: read ? withMarketUpdates(versions.modules, market?.ok === true ? market.modules : []) : state.modules,
9342
10019
  plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
9343
- workbench: versions?.ok === true ? versions.workbench ?? null : state.workbench,
9344
- selfUpdate: versions?.ok === true ? versions.selfUpdate ?? null : state.selfUpdate,
10020
+ workbench: read ? versions.workbench ?? null : state.workbench,
10021
+ selfUpdate: read ? versions.selfUpdate ?? null : state.selfUpdate,
9345
10022
  read: true,
9346
10023
  checking: false,
9347
- checkedAt: Date.now()
10024
+ failed: !read,
10025
+ checkedAt: read ? Date.now() : state.checkedAt
9348
10026
  });
9349
10027
  }).finally(() => {
9350
10028
  if (inFlight?.promise === promise) inFlight = null;
@@ -9380,6 +10058,7 @@ function useModuleVersions() {
9380
10058
  selfUpdate: value.selfUpdate,
9381
10059
  read: value.read,
9382
10060
  checking: value.checking,
10061
+ failed: value.failed,
9383
10062
  checkedAt: value.checkedAt,
9384
10063
  reload
9385
10064
  };
@@ -9635,18 +10314,79 @@ function AddModuleResult({ t, state }) {
9635
10314
  }, t("panels.market.add.failed", { reason })) : kind === "restart" ? /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("p", { className: AddModule_module_default.resultWarn }, t("panels.market.add.doneRestart")), why === void 0 ? null : /* @__PURE__ */ createElement("p", { className: AddModule_module_default.resultMeta }, why)) : kind === "quiet" ? null : /* @__PURE__ */ createElement("p", { className: AddModule_module_default.result }, t("panels.market.add.tookEffect")), builds.length === 0 ? null : /* @__PURE__ */ createElement("div", { className: AddModule_module_default.approval }, /* @__PURE__ */ createElement("p", { className: AddModule_module_default.approvalTitle }, t("panels.market.add.approveTitle")), /* @__PURE__ */ createElement("p", { className: AddModule_module_default.approvalText }, t("panels.market.add.approveHint", { packages: builds.join("、") })), /* @__PURE__ */ createElement("p", { className: AddModule_module_default.approvalCaution }, t("panels.market.add.approveCaution"))), supply === void 0 || outcome.supply.state !== "failed" && (kind === "failed" || kind === "cancelled") ? null : /* @__PURE__ */ createElement("p", { className: supplyTone(outcome.supply.state) }, t(supply, { reason: outcome.supply.reason ?? "" })), state.failure === null ? null : /* @__PURE__ */ createElement("p", { className: AddModule_module_default.problem }, state.failure), outcome.change.errorDetail === void 0 ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("p", { className: AddModule_module_default.detailLabel }, t("panels.market.add.details")), /* @__PURE__ */ createElement("p", { className: AddModule_module_default.detail }, outcome.change.errorDetail)));
9636
10315
  }
9637
10316
  //#endregion
10317
+ //#region src/app/layouts/market/add-module-registry-prefs.ts
10318
+ var DEFAULT_REGISTRY_CHOICE = {
10319
+ kind: "default",
10320
+ value: ""
10321
+ };
10322
+ function isRegistryKind(value) {
10323
+ return value === "default" || value === "url" || value === "custom";
10324
+ }
10325
+ function parseRegistryChoice(raw) {
10326
+ if (raw === null) return DEFAULT_REGISTRY_CHOICE;
10327
+ let value;
10328
+ try {
10329
+ value = JSON.parse(raw);
10330
+ } catch {
10331
+ return DEFAULT_REGISTRY_CHOICE;
10332
+ }
10333
+ if (typeof value !== "object" || value === null) return DEFAULT_REGISTRY_CHOICE;
10334
+ const record = value;
10335
+ if (!isRegistryKind(record.kind)) return DEFAULT_REGISTRY_CHOICE;
10336
+ if (record.kind === "default") return DEFAULT_REGISTRY_CHOICE;
10337
+ if (record.kind === "custom") return {
10338
+ kind: "custom",
10339
+ value: ""
10340
+ };
10341
+ if (typeof record.value !== "string" || !customRegistryAllowed(record.value)) return DEFAULT_REGISTRY_CHOICE;
10342
+ return {
10343
+ kind: "url",
10344
+ value: record.value.trim()
10345
+ };
10346
+ }
10347
+ function readRegistryPrefs() {
10348
+ const custom = readText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM);
10349
+ return {
10350
+ choice: parseRegistryChoice(readText(STORAGE_KEY_MARKET_REGISTRY)),
10351
+ custom: custom === null ? "" : custom.trim()
10352
+ };
10353
+ }
10354
+ function writeRegistryChoice(choice) {
10355
+ if (choice.kind === "custom") {
10356
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
10357
+ kind: "custom",
10358
+ value: ""
10359
+ }));
10360
+ return;
10361
+ }
10362
+ if (choice.kind === "url" && customRegistryAllowed(choice.value)) {
10363
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
10364
+ kind: "url",
10365
+ value: choice.value.trim()
10366
+ }));
10367
+ return;
10368
+ }
10369
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify(DEFAULT_REGISTRY_CHOICE));
10370
+ }
10371
+ function writeRegistryCustom(value) {
10372
+ const text = value.trim();
10373
+ writeText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM, text === "" ? null : text);
10374
+ }
10375
+ function reconcileRegistryChoice(choice, choices) {
10376
+ if (choice.kind !== "url") return choice;
10377
+ return choices.some((option) => option.choice.kind === "url" && option.choice.value === choice.value) ? choice : DEFAULT_REGISTRY_CHOICE;
10378
+ }
10379
+ //#endregion
9638
10380
  //#region src/app/layouts/market/use-add-module.ts
9639
10381
  function newRequestId() {
9640
10382
  return crypto.randomUUID();
9641
10383
  }
9642
10384
  function useAddModule(options) {
9643
10385
  const { onInstalled, failedText } = options;
10386
+ const [prefs] = useState(readRegistryPrefs);
9644
10387
  const [spec, setSpec] = useState("");
9645
- const [choice, setChoice] = useState({
9646
- kind: "default",
9647
- value: ""
9648
- });
9649
- const [custom, setCustom] = useState("");
10388
+ const [choice, setChoice] = useState(prefs.choice);
10389
+ const [custom, setCustom] = useState(prefs.custom);
9650
10390
  const [registryOpen, setRegistryOpen] = useState(false);
9651
10391
  const [guideOpen, setGuideOpen] = useState(false);
9652
10392
  const [phase, setPhase] = useState("idle");
@@ -9658,6 +10398,8 @@ function useAddModule(options) {
9658
10398
  const generationRef = useRef(0);
9659
10399
  const requestIdRef = useRef("");
9660
10400
  const { busy: classifying } = useVisibleBusy(phase === "inspecting", 500);
10401
+ const [installToken] = useState(() => `market-install:${newRequestId()}`);
10402
+ usePublishMarketInstalling(installToken, phase === "installing");
9661
10403
  const write = useHostWrite({
9662
10404
  channel: "provision",
9663
10405
  networkText: failedText
@@ -9674,7 +10416,9 @@ function useAddModule(options) {
9674
10416
  let alive = true;
9675
10417
  readBundleRegistries().then((response) => {
9676
10418
  if (!alive) return;
9677
- setChoices(registryOptions(response.ok ? response.registries : null));
10419
+ const options = registryOptions(response.ok ? response.registries : null);
10420
+ setChoices(options);
10421
+ setChoice((previous) => reconcileRegistryChoice(previous, options));
9678
10422
  });
9679
10423
  return () => {
9680
10424
  alive = false;
@@ -9741,6 +10485,7 @@ function useAddModule(options) {
9741
10485
  supply: value.supply,
9742
10486
  ...value.plugin === void 0 ? {} : { plugin: value.plugin }
9743
10487
  });
10488
+ publishMarketApplied(appliedUnitsOf(value));
9744
10489
  setPhase("result");
9745
10490
  if (value.change.application === "applied" || value.change.application === "restart-required") onInstalled();
9746
10491
  });
@@ -9785,6 +10530,14 @@ function useAddModule(options) {
9785
10530
  setPreview(null);
9786
10531
  setPhase("idle");
9787
10532
  }, []);
10533
+ const choose = useCallback((next) => {
10534
+ setChoice(next);
10535
+ writeRegistryChoice(next);
10536
+ }, []);
10537
+ const chooseCustom = useCallback((value) => {
10538
+ setCustom(value);
10539
+ writeRegistryCustom(value);
10540
+ }, []);
9788
10541
  return {
9789
10542
  spec,
9790
10543
  choice,
@@ -9800,10 +10553,8 @@ function useAddModule(options) {
9800
10553
  removing,
9801
10554
  builds: outcome?.change.pendingBuilds ?? [],
9802
10555
  setSpec,
9803
- setChoice: useCallback((next) => {
9804
- setChoice(next);
9805
- }, []),
9806
- setCustom,
10556
+ setChoice: choose,
10557
+ setCustom: chooseCustom,
9807
10558
  toggleRegistry: useCallback(() => setRegistryOpen((value) => !value), []),
9808
10559
  closeRegistry: useCallback(() => setRegistryOpen(false), []),
9809
10560
  toggleGuide: useCallback(() => setGuideOpen((value) => !value), []),
@@ -9926,7 +10677,6 @@ var MOCK_FRESHNESS = {
9926
10677
  checking: false,
9927
10678
  checkedAt: null
9928
10679
  };
9929
- var NO_UNITS = /* @__PURE__ */ new Set();
9930
10680
  function useLiveManifests(units) {
9931
10681
  const subscribe = useCallback((listener) => units.subscribe(listener), [units]);
9932
10682
  const revision = useCallback(() => units.version(), [units]);
@@ -9953,7 +10703,8 @@ function makeMarketEntryIcon(units) {
9953
10703
  installed: modules === null ? void 0 : withClientRefusals(modules, units.refusals()),
9954
10704
  plugins,
9955
10705
  workbench,
9956
- busy: useMarketBusy()
10706
+ busy: useMarketBusy(),
10707
+ ...useMarketInstallState()
9957
10708
  });
9958
10709
  useEffect(() => {
9959
10710
  publishPanelHint(MARKET_PANEL_ID, hint);
@@ -9968,8 +10719,9 @@ function MarketPanel({ t, units, titleOf }) {
9968
10719
  const manifests = useLiveManifests(units);
9969
10720
  const installable = useInstallableUnits(units);
9970
10721
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
9971
- const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, read: installedRead, reload: reloadVersions } = useModuleVersions();
10722
+ const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, failed: versionsFailed, checkedAt: versionsCheckedAt, read: installedRead, reload: reloadVersions } = useModuleVersions();
9972
10723
  const machineBoard = useEnabledUnits(0, null);
10724
+ const install = useMarketInstallState();
9973
10725
  const [adding, setAdding] = useState(false);
9974
10726
  const [acting, setActing] = useState(false);
9975
10727
  const [tab, setTab] = useState("installed");
@@ -10011,27 +10763,11 @@ function MarketPanel({ t, units, titleOf }) {
10011
10763
  forceProbe,
10012
10764
  reloadVersions
10013
10765
  ]);
10014
- const installedKey = (installed ?? []).map((module) => module.unit).join("|");
10015
- const rosterKey = manifests.map((manifest) => manifest.id).join("|");
10016
- const activeKey = Object.keys(capabilities ?? {}).join("|");
10017
- const seenRef = useRef(null);
10018
- const [settling, setSettling] = useState(NO_UNITS);
10019
- useEffect(() => {
10020
- const units = installedKey === "" ? [] : installedKey.split("|");
10021
- const held = holdBack(units, new Set(rosterKey === "" ? [] : rosterKey.split("|")), new Set(activeKey === "" ? [] : activeKey.split("|")), seenRef.current);
10022
- seenRef.current = new Set(units);
10023
- setSettling(held.length === 0 ? NO_UNITS : new Set(held));
10024
- if (held.length === 0) return;
10025
- const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
10026
- return () => clearTimeout(timer);
10027
- }, [
10028
- installedKey,
10029
- rosterKey,
10030
- activeKey
10031
- ]);
10766
+ const settling = useSettlingModules((installed ?? []).map((module) => module.unit).join("|"), manifests.map((manifest) => manifest.id).join("|"), Object.keys(capabilities ?? {}).join("|"));
10767
+ const held = install.applied.size === 0 ? settling : /* @__PURE__ */ new Set([...settling, ...install.applied]);
10032
10768
  const freshness = {
10033
10769
  loaded: capabilities !== null,
10034
- checking,
10770
+ checking: checking || versionsChecking,
10035
10771
  checkedAt
10036
10772
  };
10037
10773
  const pendingFreshness = {
@@ -10044,16 +10780,13 @@ function MarketPanel({ t, units, titleOf }) {
10044
10780
  const mockNonce = devMarket.pick.nonce;
10045
10781
  const shownFreshness = mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS;
10046
10782
  const shownRead = mock === void 0 ? installedRead : mock.installedRead ?? true;
10047
- const shownChecking = shownFreshness.checking || mock === void 0 && versionsChecking;
10048
- const busy = !marketSettled(shownFreshness, shownRead) || shownChecking || acting;
10783
+ const busy = !marketSettled(shownFreshness, shownRead) || acting;
10049
10784
  return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketPage }, /* @__PURE__ */ createElement(MarketHeader, {
10050
10785
  t,
10051
10786
  idPrefix: MARKET_PANEL_ID,
10052
10787
  tab,
10053
10788
  busy,
10054
- checking: shownChecking,
10055
10789
  onTab: setTab,
10056
- onReload: () => reload({ force: true }),
10057
10790
  onAdd: openAddModule
10058
10791
  }), devMarket.strip, /* @__PURE__ */ createElement("div", {
10059
10792
  id: `${MARKET_PANEL_ID}-panel-installed`,
@@ -10071,12 +10804,15 @@ function MarketPanel({ t, units, titleOf }) {
10071
10804
  onChanged: reload,
10072
10805
  onPending: setActing,
10073
10806
  updates,
10807
+ updatesCheckedAt: versionsCheckedAt,
10808
+ updatesFailed: versionsFailed,
10074
10809
  installed,
10075
10810
  installedRead: shownRead,
10076
10811
  workbench,
10077
10812
  selfUpdate,
10078
10813
  plugins,
10079
- settling: mock === void 0 ? settling : void 0,
10814
+ settling: mock === void 0 ? held : void 0,
10815
+ installing: mock === void 0 ? install.installing : false,
10080
10816
  mock,
10081
10817
  defaults: machineBoard?.defaults ?? [],
10082
10818
  changed: machineBoard?.changed ?? {}
@@ -11563,6 +12299,7 @@ function createClientUnitRegistry(options = {}) {
11563
12299
  return manifestsCache;
11564
12300
  },
11565
12301
  refusals: () => refusals,
12302
+ declared: () => [...known.values()],
11566
12303
  installable: () => installableIds,
11567
12304
  setManifests(manifests, installable) {
11568
12305
  known = new Map(manifests.map((manifest) => [manifest.id, manifest]));
@@ -12507,6 +13244,45 @@ function MarketSourceApprovalSeat({ tool, args, t }) {
12507
13244
  }, []);
12508
13245
  return createElement(ApprovalPlan, { rows: marketSourceRows(tool, args, payload, t) });
12509
13246
  }
13247
+ function pluginToolIndexOf(manifests) {
13248
+ const index = /* @__PURE__ */ new Map();
13249
+ for (const manifest of manifests) for (const tool of manifest.tools) {
13250
+ if (tool.opencli === void 0) continue;
13251
+ index.set(tool.name, tool.opencli);
13252
+ }
13253
+ return index;
13254
+ }
13255
+ function argText(value) {
13256
+ if (typeof value === "string") return value;
13257
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
13258
+ const text = JSON.stringify(value);
13259
+ return text === void 0 ? String(value) : text;
13260
+ }
13261
+ function pluginApprovalRows(origin, args, t) {
13262
+ const rows = [{
13263
+ label: t("approval.plugin.name"),
13264
+ value: origin.plugin
13265
+ }, {
13266
+ label: t("approval.plugin.command"),
13267
+ value: origin.command
13268
+ }];
13269
+ const note = args[APPROVAL_NOTE_ARG];
13270
+ if (typeof note === "string" && note.trim() !== "") rows.push({
13271
+ label: t("approval.plugin.note"),
13272
+ value: note.replace(/\s+/g, " ").trim()
13273
+ });
13274
+ for (const name of origin.args) {
13275
+ if (!(name in args)) continue;
13276
+ rows.push({
13277
+ label: name,
13278
+ value: argText(args[name])
13279
+ });
13280
+ }
13281
+ return rows;
13282
+ }
13283
+ function shellApprovalRenderer(manifests) {
13284
+ return (input, t) => shellApprovalDetail(input, t, pluginToolIndexOf(manifests()));
13285
+ }
12510
13286
  function shellClaimsApprovalDetail(tool) {
12511
13287
  return ALL_TOOLS.includes(tool);
12512
13288
  }
@@ -12518,7 +13294,9 @@ function stopApprovalRows(args, t) {
12518
13294
  value: `${unit === "" ? "<unit>" : unit} · ${id === "" ? "<id>" : id}`
12519
13295
  }];
12520
13296
  }
12521
- function shellApprovalPlan(input, t) {
13297
+ function shellApprovalPlan(input, t, pluginTools) {
13298
+ const origin = pluginTools?.get(input.tool);
13299
+ if (origin !== void 0) return { rows: pluginApprovalRows(origin, input.args, t) };
12522
13300
  if (input.tool === "workbench_diy_record_prepare") return {
12523
13301
  rows: recordApprovalRows(input.args, t),
12524
13302
  warn: t("approval.record.noSwitch")
@@ -12529,7 +13307,7 @@ function shellApprovalPlan(input, t) {
12529
13307
  };
12530
13308
  return shellClaimsApprovalDetail(input.tool) ? { rows: [] } : void 0;
12531
13309
  }
12532
- function shellApprovalDetail(input, t) {
13310
+ function shellApprovalDetail(input, t, pluginTools) {
12533
13311
  if (input.tool === "workbench_diy_publish") return createElement(PublishApprovalSeat, {
12534
13312
  args: input.args,
12535
13313
  t
@@ -12539,7 +13317,7 @@ function shellApprovalDetail(input, t) {
12539
13317
  args: input.args,
12540
13318
  t
12541
13319
  });
12542
- const plan = shellApprovalPlan(input, t);
13320
+ const plan = shellApprovalPlan(input, t, pluginTools);
12543
13321
  if (plan === void 0) return void 0;
12544
13322
  if (plan.rows.length === 0) return createElement(Fragment, null);
12545
13323
  return /* @__PURE__ */ createElement(ApprovalPlan, {
@@ -12889,6 +13667,10 @@ function Breadcrumbs({ trail, onGoTo, titleKeyOf, t }) {
12889
13667
  }, /* @__PURE__ */ createElement("span", { className: Breadcrumbs_module_default.tabTitle }, stepLabel(step, titleKeyOf, t))));
12890
13668
  }));
12891
13669
  }
13670
+ var BoardEmpty_module_default = {
13671
+ actions: "_actions_smeq7_1",
13672
+ action: "_action_smeq7_1"
13673
+ };
12892
13674
  //#endregion
12893
13675
  //#region src/app/layouts/rightbar/BoardEmpty.tsx
12894
13676
  function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
@@ -12896,20 +13678,23 @@ function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
12896
13678
  icon: /* @__PURE__ */ createElement(IconBrandMark, { size: 32 }),
12897
13679
  title: t("panels.empty"),
12898
13680
  hint: t("panels.emptyHint"),
12899
- action: /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement(Button, {
13681
+ action: /* @__PURE__ */ createElement("div", { className: BoardEmpty_module_default.actions }, /* @__PURE__ */ createElement(Button, {
12900
13682
  type: "button",
12901
13683
  size: "sm",
12902
13684
  variant: "primary",
13685
+ className: BoardEmpty_module_default.action,
12903
13686
  onClick: onBuildModule
12904
13687
  }, t("panels.buildModule")), /* @__PURE__ */ createElement(Button, {
12905
13688
  type: "button",
12906
13689
  size: "sm",
12907
13690
  variant: "toolbar",
13691
+ className: BoardEmpty_module_default.action,
12908
13692
  onClick: onOpenModules
12909
13693
  }, t("panels.choose")), /* @__PURE__ */ createElement(Button, {
12910
13694
  type: "button",
12911
13695
  size: "sm",
12912
13696
  variant: "toolbar",
13697
+ className: BoardEmpty_module_default.action,
12913
13698
  onClick: onOpenMarket
12914
13699
  }, t("panels.browseMarket")))
12915
13700
  });
@@ -15452,7 +16237,7 @@ function messagesOf(units) {
15452
16237
  ...face.messages === void 0 ? {} : { messages: face.messages }
15453
16238
  }));
15454
16239
  }
15455
- 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_jfyof_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_jfyof_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_jfyof_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_jfyof_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_jfyof_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_jfyof_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_jfyof_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_jfyof_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_jfyof_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_jfyof_39 ._marketVersion_jfyof_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_jfyof_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_jfyof_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_jfyof_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_jfyof_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_jfyof_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_jfyof_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_jfyof_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_jfyof_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_jfyof_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_jfyof_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_jfyof_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_jfyof_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_jfyof_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_jfyof_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_jfyof_175 ._marketSectionTitle_jfyof_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_jfyof_175 ._marketName_jfyof_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_jfyof_175 ._marketIcon_jfyof_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_jfyof_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_jfyof_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_jfyof_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_jfyof_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_jfyof_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_jfyof_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_jfyof_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_jfyof_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_jfyof_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_jfyof_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_jfyof_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_jfyof_263[hidden] {\n display: none;\n}\n\n._marketTabs_jfyof_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_jfyof_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_jfyof_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_jfyof_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_jfyof_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_jfyof_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_jfyof_312 svg {\n animation: _wb-spin_jfyof_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_jfyof_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_jfyof_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_jfyof_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_jfyof_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_jfyof_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_jfyof_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_jfyof_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_jfyof_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_jfyof_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_jfyof_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_jfyof_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_jfyof_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_jfyof_395 {\n flex: none;\n}\n\n._discoverSearch_jfyof_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_jfyof_407 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_jfyof_412 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_jfyof_407 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_jfyof_399 ._discoverSearchClear_jfyof_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_jfyof_421:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_jfyof_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_jfyof_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_jfyof_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_jfyof_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_jfyof_399 {\n grid-area: search;\n }\n\n ._discoverSort_jfyof_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_jfyof_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_jfyof_472 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_jfyof_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_jfyof_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_jfyof_488:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_jfyof_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_jfyof_514 {\n object-fit: contain;\n}\n\n._discoverMain_jfyof_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_jfyof_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_jfyof_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_jfyof_534::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_jfyof_534:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_jfyof_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_jfyof_565 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_jfyof_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_jfyof_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_jfyof_587 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_jfyof_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_jfyof_602 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_jfyof_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_jfyof_616 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_jfyof_607 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_jfyof_626 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_jfyof_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_jfyof_632:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_jfyof_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_jfyof_655 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_jfyof_659 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_jfyof_665 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_jfyof_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_jfyof_678 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_jfyof_685 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_jfyof_690 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_jfyof_695 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_jfyof_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_jfyof_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_jfyof_713 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_jfyof_719 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_jfyof_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_jfyof_734 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_jfyof_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_jfyof_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_jfyof_757 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_jfyof_764 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_jfyof_764:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_jfyof_774 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_jfyof_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_jfyof_790 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_jfyof_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_jfyof_804 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_jfyof_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_jfyof_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_jfyof_819 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_jfyof_837 {\n align-self: center;\n}\n\n._discoverTransport_jfyof_841 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_jfyof_847 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRows_jfyof_852 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_jfyof_852 {\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_jfyof_852:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_jfyof_852:has(._discoverTransportRadio_jfyof_873:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_jfyof_852:has(._discoverTransportRadio_jfyof_873:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_jfyof_873 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_jfyof_887 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_jfyof_893 {\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_jfyof_852[data-state='ok'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='auth'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='unreachable'] ._discoverTransportState_jfyof_893,\n._discoverTransportRow_jfyof_852[data-state='unknown'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_jfyof_913 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_jfyof_919 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_jfyof_924 {\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_jfyof_935 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_jfyof_941 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_jfyof_945 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_jfyof_951 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_jfyof_959 {\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_jfyof_968 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_jfyof_974 {\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_jfyof_983 {\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_jfyof_991 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_jfyof_999 {\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_jfyof_1007 {\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_jfyof_1017 {\n flex: none;\n}\n\n._discoverSourceLoading_jfyof_1021 {\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_jfyof_1031 {\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_jfyof_1031 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_jfyof_1045 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_jfyof_1051 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_jfyof_1057 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_jfyof_1062 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_jfyof_1068 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_jfyof_1073 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_jfyof_1079 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_jfyof_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_jfyof_502._discoverSkeletonFill_jfyof_1079 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_jfyof_1088 {\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_jfyof_1095 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_jfyof_1099 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_jfyof_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_jfyof_1079 {\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*/";
16240
+ var COMPONENT_CSS_MARKER = ".wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n padding-top: 0;\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: grid;\n grid-template-columns: minmax(var(--wb-len-56), auto) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-2);\n align-items: baseline;\n margin: 0;\n}\n.wb-approvalRow {\n display: contents;\n}\n.wb-approvalLabel {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-card-gutter);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n cursor: default;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-formProblem {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\n:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n.wb-selectSearch:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-settings-card-fill);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settings .wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._marketList_485ym_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_485ym_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_485ym_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_485ym_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_485ym_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_485ym_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_485ym_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_485ym_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_485ym_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_485ym_39 ._marketVersion_485ym_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_485ym_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_485ym_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_485ym_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_485ym_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_485ym_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_485ym_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_485ym_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_485ym_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_485ym_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_485ym_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_485ym_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_485ym_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_485ym_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_485ym_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_485ym_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_485ym_183 ._marketSectionTitle_485ym_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_485ym_183 ._marketName_485ym_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_485ym_183 ._marketIcon_485ym_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_485ym_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_485ym_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_485ym_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._marketFailureSeat_485ym_220 {\n grid-column: 2 / -1;\n min-width: 0;\n}\n\n._marketEmpty_485ym_225 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_485ym_230 {\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_485ym_230 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_485ym_248 {\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_485ym_256 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_485ym_261 {\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_485ym_267 {\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_485ym_276 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_485ym_276[hidden] {\n display: none;\n}\n\n._marketTabs_485ym_286 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_485ym_291 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketAddButton_485ym_296 {\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_485ym_225 {\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_485ym_313 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverPage_485ym_318 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_485ym_325 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_485ym_332 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_485ym_338 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_485ym_343 {\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_485ym_350 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_485ym_356 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_485ym_361 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_485ym_366 {\n flex: none;\n}\n\n._discoverSearch_485ym_370 {\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_485ym_378 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_485ym_383 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_485ym_378 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_485ym_370 ._discoverSearchClear_485ym_392 {\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_485ym_392:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_485ym_332 {\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_485ym_338 {\n grid-area: market;\n }\n\n ._discoverMarketButton_485ym_343 {\n margin-left: 0;\n }\n\n ._discoverLabels_485ym_356 {\n grid-area: labels;\n }\n\n ._discoverSearch_485ym_370 {\n grid-area: search;\n }\n\n ._discoverSort_485ym_361 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_485ym_366 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_485ym_443 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_485ym_450 {\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_485ym_459 {\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_485ym_459:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_485ym_473 {\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_485ym_485 {\n object-fit: contain;\n}\n\n._discoverMain_485ym_489 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_485ym_497 {\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_485ym_505 {\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_485ym_505::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_485ym_505:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_485ym_505: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_485ym_536 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_485ym_542 {\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_485ym_551 {\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_485ym_558 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_485ym_564 {\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_485ym_573 {\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_485ym_578 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_485ym_583 {\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_485ym_592 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_485ym_583 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_485ym_602 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_485ym_608 {\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_485ym_608:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_485ym_608: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_485ym_631 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_485ym_635 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_485ym_641 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_485ym_647 {\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_485ym_654 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_485ym_661 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_485ym_666 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_485ym_671 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_485ym_676 {\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_485ym_682 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_485ym_689 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_485ym_695 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_485ym_700 {\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_485ym_710 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_485ym_716 {\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_485ym_724 {\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_485ym_733 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_485ym_740 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_485ym_740:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_485ym_750 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_485ym_758 {\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_485ym_766 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_485ym_771 {\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_485ym_780 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_485ym_786 {\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_485ym_795 {\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_485ym_795 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_485ym_813 {\n align-self: center;\n}\n\n._discoverTransport_485ym_817 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportHead_485ym_823 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_485ym_830 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportHead_485ym_823 ._discoverTransportKind_485ym_835 {\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportHead_485ym_823 ._discoverTransportState_485ym_840 {\n margin-left: 0;\n}\n\n._discoverTransportHead_485ym_823 > :last-child {\n margin-left: auto;\n}\n\n._discoverTransportRows_485ym_848 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_485ym_848 {\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_485ym_848:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_485ym_848:has(._discoverTransportRadio_485ym_869:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_485ym_848:has(._discoverTransportRadio_485ym_869:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_485ym_869 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_485ym_835 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_485ym_840 {\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_485ym_848[data-state='ok'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_485ym_848[data-state='auth'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_485ym_848[data-state='unreachable'] ._discoverTransportState_485ym_840,\n._discoverTransportRow_485ym_848[data-state='unknown'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_485ym_909 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_485ym_915 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_485ym_920 {\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_485ym_931 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_485ym_937 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_485ym_941 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_485ym_947 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_485ym_955 {\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_485ym_964 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_485ym_970 {\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_485ym_979 {\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_485ym_987 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_485ym_995 {\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_485ym_1003 {\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_485ym_1013 {\n flex: none;\n}\n\n._discoverSourceLoading_485ym_1017 {\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_485ym_1027 {\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_485ym_1027 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_485ym_1041 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_485ym_1047 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_485ym_1053 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_485ym_1058 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_485ym_1064 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_485ym_1069 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_485ym_1075 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_485ym_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_485ym_473._discoverSkeletonFill_485ym_1075 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_485ym_1084 {\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_485ym_1091 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_485ym_1095 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_485ym_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_485ym_1075 {\n animation: none;\n }\n}\n\n._block_mxnbc_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-2) 0 var(--wb-len-8);\n min-width: 0;\n}\n\n._head_mxnbc_9 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._title_mxnbc_16 {\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._fact_mxnbc_22 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._actions_mxnbc_30 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-2);\n margin-left: calc(-1 * var(--wb-len-8));\n}\n\n._hint_mxnbc_38 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._output_mxnbc_44 {\n margin-top: var(--wb-len-2);\n min-width: 0;\n}\n._check_1g6tv_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n min-width: 0;\n}\n\n._status_1g6tv_8 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-caption);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n._button_1g6tv_15 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n}\n\n._icon_1g6tv_22 {\n display: inline-flex;\n}\n\n@media (max-width: 720px) {\n ._status_1g6tv_8 {\n display: none;\n }\n}\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1lv8f_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1lv8f_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1lv8f_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1lv8f_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1lv8f_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1lv8f_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1lv8f_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1lv8f_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1lv8f_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1lv8f_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1lv8f_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1lv8f_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1lv8f_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1lv8f_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1lv8f_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1lv8f_351,\n._resultWarn_1lv8f_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1lv8f_383 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1lv8f_403 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._rows_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failure_11oac_45 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_7 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_zyzt3_21 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_zyzt3_51 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_zyzt3_51 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_zyzt3_3 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_zyzt3_125 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_zyzt3_133 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_zyzt3_4 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_zyzt3_159 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_zyzt3_192 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_zyzt3_250 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._actions_smeq7_1 {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--wb-len-8);\n max-width: 100%;\n}\n\n._action_smeq7_1 {\n flex: none;\n white-space: nowrap;\n}\n\n@container (max-width: 340px) {\n ._actions_smeq7_1 {\n flex-direction: column;\n width: var(--wb-len-220);\n max-width: 100%;\n }\n\n ._action_smeq7_1 {\n width: 100%;\n }\n}\n._trigger_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_15ptp_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_15ptp_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_15ptp_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_15ptp_119 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_15ptp_134 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_15ptp_170 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_15ptp_178 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_1whum_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1cmz0_74 ._rowAction_1cmz0_84 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
15456
16241
  function workbenchCss() {
15457
16242
  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}`;
15458
16243
  }
@@ -15701,7 +16486,7 @@ function mount(ctx) {
15701
16486
  inject: () => ({
15702
16487
  t: ctx.locale.bind(LOCALE_NS),
15703
16488
  units: units.all(),
15704
- renderShell: shellApprovalDetail
16489
+ renderShell: shellApprovalRenderer(units.declared)
15705
16490
  })
15706
16491
  }, ApprovalDetail));
15707
16492
  ctx.slots.inject("conversation.session.header.corner", () => ctx.slots.register({