@dsh-workbench/core 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +3 -0
  2. package/client.js +675 -319
  3. package/dist/client/client.body.js +675 -319
  4. package/dist/client/index.js +675 -319
  5. package/dist/host/index.js +445 -37
  6. package/dist/types/app/layouts/market/discover-sources-dialog.d.ts +4 -0
  7. package/dist/types/app/layouts/market/discover-states.d.ts +3 -0
  8. package/dist/types/app/layouts/market/use-add-module.d.ts +0 -1
  9. package/dist/types/app/layouts/market/use-discover.d.ts +1 -0
  10. package/dist/types/app/layouts/rightbar/MarketView.d.ts +3 -1
  11. package/dist/types/app/layouts/rightbar/market-names.d.ts +8 -0
  12. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +11 -3
  13. package/dist/types/app/layouts/rightbar/market-rows.d.ts +6 -4
  14. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +4 -3
  15. package/dist/types/app/units/unit-titles.d.ts +3 -0
  16. package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
  17. package/dist/types/kernel/contract/market-index.d.ts +1 -1
  18. package/dist/types/modules/panels/model/diy-tools.d.ts +1 -1
  19. package/dist/types/modules/panels/model/market-dispatch.d.ts +8 -0
  20. package/dist/types/modules/panels/model/market-follow-up.d.ts +16 -0
  21. package/dist/types/modules/panels/model/market-sources-act.d.ts +2 -0
  22. package/dist/types/modules/panels/model/market-types.d.ts +5 -0
  23. package/dist/types/modules/panels/model/market.d.ts +2 -0
  24. package/dist/types/modules/panels/model/publish-preview-routes.d.ts +1 -1
  25. package/dist/types/shared/api/host/diy-publish-preview.d.ts +11 -0
  26. package/dist/types/shared/api/host/follow-up-dismiss.d.ts +2 -0
  27. package/dist/types/shared/api/host/migrate-workbench.d.ts +20 -0
  28. package/dist/types/shared/api/host/migration-follow-up.d.ts +12 -0
  29. package/dist/types/shared/hooks/market-queries.d.ts +3 -2
  30. package/dist/types/shared/hooks/resource-view.d.ts +14 -0
  31. package/dist/types/shared/hooks/use-api-resource.d.ts +3 -7
  32. package/package.json +3 -3
  33. package/skills/workbench-module-diy/FAMILY.md +1 -1
  34. package/skills/workbench-module-diy/REVIEW.md +2 -2
  35. package/skills/workbench-module-diy/SKILL.md +1 -0
  36. package/skills/workbench-module-diy/TOOLS.md +1 -1
  37. package/skills/workbench-module-diy/WIRING.md +3 -1
  38. package/skills/workbench-module-diy/WRITES.md +1 -1
@@ -2726,6 +2726,32 @@ var SIDEBAR_EDITION_RESOURCE = "sidebarEdition";
2726
2726
  //#region ../shared/dist/contract/protocol/unit-manifests.js
2727
2727
  var UNIT_MANIFESTS_ROUTE = "unit-manifests";
2728
2728
  //#endregion
2729
+ //#region ../shared/dist/contract/unit.js
2730
+ /**
2731
+ * 外壳替模块名合成的词表键:模块自己不必写名字键,名字直接从清单里的 title 注册进来。
2732
+ * @param unit 单元 id。
2733
+ * @returns 该单元名字在词表里的键。
2734
+ */
2735
+ function unitTitleKey(unit) {
2736
+ return `dsh-workbench.unit.${unit}.title`;
2737
+ }
2738
+ /**
2739
+ * 模块声明的全部环境需要(没写就是空表)。
2740
+ * @param manifest 模块清单。
2741
+ * @returns need 列表。
2742
+ */
2743
+ function needsOf(manifest) {
2744
+ return manifest.needs ?? [];
2745
+ }
2746
+ /**
2747
+ * 市场门槛要看的那些需要:声明了 extension / lib 就算(不要求写了来源)。
2748
+ * @param manifest 模块清单。
2749
+ * @returns extension / lib 的 need 列表。
2750
+ */
2751
+ function supplyNeedsOf(manifest) {
2752
+ return needsOf(manifest).filter((need) => need.kind === "extension" || need.kind === "lib");
2753
+ }
2754
+ //#endregion
2729
2755
  //#region ../shared/dist/contract/needs.js
2730
2756
  function text(value) {
2731
2757
  return typeof value === "string" ? value.trim() : "";
@@ -2788,24 +2814,6 @@ Object.freeze({
2788
2814
  })
2789
2815
  });
2790
2816
  //#endregion
2791
- //#region ../shared/dist/contract/unit.js
2792
- /**
2793
- * 模块声明的全部环境需要(没写就是空表)。
2794
- * @param manifest 模块清单。
2795
- * @returns need 列表。
2796
- */
2797
- function needsOf(manifest) {
2798
- return manifest.needs ?? [];
2799
- }
2800
- /**
2801
- * 市场门槛要看的那些需要:声明了 extension / lib 就算(不要求写了来源)。
2802
- * @param manifest 模块清单。
2803
- * @returns extension / lib 的 need 列表。
2804
- */
2805
- function supplyNeedsOf(manifest) {
2806
- return needsOf(manifest).filter((need) => need.kind === "extension" || need.kind === "lib");
2807
- }
2808
- //#endregion
2809
2817
  //#region ../shared/dist/i18n/settings.js
2810
2818
  /** 「工作台设置」这一组的词条:配置同步 / 新建工作台。 */
2811
2819
  var zhSettings = {
@@ -3074,15 +3082,14 @@ var en = {
3074
3082
  "panels.market.update": "Update",
3075
3083
  "panels.market.swapSlow": "Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.",
3076
3084
  "panels.market.removeSlow": "Not removed yet — maybe a slow network or an uninstall that did not finish. Check again in a moment; if it stays like this, restart dsh.",
3077
- "panels.market.updateNoChange": "Not updated: you were on {from}, and after the run the disk still has that version; the newest on the registry is {latest}.",
3085
+ "panels.market.updateNoChange": "Update failed: still {from}. The newest on the registry is {latest} — press Update again.",
3078
3086
  "panels.market.updateUnknownVersion": "(unknown)",
3079
- "panels.market.updateGone": "Not updated: after the run the module cannot be read from disk.",
3080
- "panels.market.updateRestored": "Not updated: the new version was missing from disk, so {version} was put back.",
3087
+ "panels.market.updateGone": "Update failed: the module is gone after the update.",
3088
+ "panels.market.updateRestored": "Update failed: the new version could not be found after the update, so {version} was put back.",
3081
3089
  "panels.market.updateBehind": "Installed {installed}, but the newest on the registry is {latest} — not the latest; you can update once more.",
3082
- "panels.market.selfUpdateFailed": "Self-update failed: {reason}",
3090
+ "panels.market.selfUpdateFailed": "Workbench update failed: {reason}",
3083
3091
  "panels.market.selfUpdateUnknown": "the outside process left no reason (see ~/.dsh/workbench/self-update.log)",
3084
- "panels.market.selfUpdateRolledBack": "Not swapped; rolled back to {version}.",
3085
- "panels.market.selfUpdateNeedsMigrate": "Workbench updated. Old sessions and projects are not merged automatically: quit every dsh, then run dsh-workbench migrate (--force to merge again).",
3092
+ "panels.market.selfUpdateRolledBack": "Workbench update failed; rolled back to {version}.",
3086
3093
  "panels.market.uninstall": "Uninstall",
3087
3094
  "panels.market.uninstallLabel": "Uninstall {name}",
3088
3095
  "panels.market.installing": "Installing…",
@@ -3104,9 +3111,27 @@ var en = {
3104
3111
  "panels.market.empty": "No modules available",
3105
3112
  "panels.market.sectionPlugins": "Installed opencli plugins",
3106
3113
  "panels.market.moduleOutdated": "update available",
3114
+ "panels.market.updateNeedsWorkbench": "this version needs a newer workbench first",
3115
+ "panels.market.updateIncompatible": "the new version does not match this workbench, so it cannot be installed now",
3107
3116
  "panels.market.moduleRefused": "This module does not match this workbench, so it cannot be used for now.",
3108
3117
  "panels.market.moduleRestartHint": "restart dsh once to bring it up",
3109
3118
  "panels.market.pendingRestart": "restart required",
3119
+ "panels.market.pendingFollowUp": "old data to migrate",
3120
+ "panels.market.migrationHint": "old sessions and projects are not merged yet",
3121
+ "panels.market.migrateAction": "Migrate old data",
3122
+ "panels.market.migrating": "Migrating…",
3123
+ "panels.market.migrateConfirmTitle": "Migrate old data?",
3124
+ "panels.market.migrateConfirmDetail": "Quit dsh web / Desktop first. Only missing data is added; nothing is overwritten.",
3125
+ "panels.market.migrateConfirmAck": "I've quit dsh web / Desktop",
3126
+ "panels.market.migrateConfirmYes": "Start migration",
3127
+ "panels.market.migrateDone": "Migration complete: {added} projects added; restart the workbench and dsh web to see them.",
3128
+ "panels.market.dismissFollowUp": "Don't remind me",
3129
+ "panels.market.dismissing": "Dismissing…",
3130
+ "panels.market.dismissFollowUpTitle": "Stop reminding about this?",
3131
+ "panels.market.dismissFollowUpDetail": "The reminder will be hidden from the market, but old data will not be migrated or deleted. Old sessions and projects stay in the old directory and won't appear in the new version; you can still run dsh-workbench migrate later.",
3132
+ "panels.market.dismissFollowUpAck": "I understand the old data won't appear automatically",
3133
+ "panels.market.dismissFollowUpYes": "Don't remind me",
3134
+ "panels.market.dismissed": "No longer reminded; old data stays in the old directory and can still be migrated with dsh-workbench migrate.",
3110
3135
  "panels.market.workbenchName": "Workbench",
3111
3136
  "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.",
3112
3137
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
@@ -3190,7 +3215,7 @@ var en = {
3190
3215
  "panels.market.add.exampleTitle": "Examples",
3191
3216
  "panels.market.add.exampleFill": "Fill in an example",
3192
3217
  "panels.market.add.registryLabel": "Source",
3193
- "panels.market.add.registryProfile": "This profile's registry",
3218
+ "panels.market.add.registryProfile": "This workbench's registry",
3194
3219
  "panels.market.add.registryPnpm": "pnpm's own registry",
3195
3220
  "panels.market.add.check": "Check",
3196
3221
  "panels.market.add.checking": "Checking…",
@@ -3211,12 +3236,16 @@ var en = {
3211
3236
  "panels.market.tabs": "The two faces of the module market",
3212
3237
  "panels.tab.discover": "Discover",
3213
3238
  "panels.discover.loading": "Reading the index",
3239
+ "panels.discover.slowHint": "Slow to load: finish any authorization prompt, or switch sources.",
3214
3240
  "panels.discover.lead": "Browse modules from an index source; install and go.",
3215
3241
  "panels.discover.addSource": "Add",
3216
3242
  "panels.discover.addingSource": "Adding…",
3217
3243
  "panels.discover.addFirstSource": "Add index source",
3218
3244
  "panels.discover.removeSource": "Remove",
3219
3245
  "panels.discover.removeSourceNamed": "Remove {url}",
3246
+ "panels.discover.useSource": "Use",
3247
+ "panels.discover.useSourceNamed": "Use {label}",
3248
+ "panels.discover.sourceCurrent": "In use",
3220
3249
  "panels.discover.refresh": "Refresh",
3221
3250
  "panels.discover.search": "Search modules",
3222
3251
  "panels.discover.all": "All",
@@ -3228,8 +3257,8 @@ var en = {
3228
3257
  "panels.discover.sourcePlaceholder": "https://example.com/index.json or git@git.example.com:wb/market.git",
3229
3258
  "panels.discover.sourceRef": "Branch",
3230
3259
  "panels.discover.sourcePath": "Index file",
3231
- "panels.discover.sourceLocal": "Local clone (optional)",
3232
- "panels.discover.sourceLocalHint": "Leave empty to clone into ~/.dsh/workbench/market-index/.",
3260
+ "panels.discover.sourceLocal": "Local copy folder (optional)",
3261
+ "panels.discover.sourceLocalHint": "Leave empty to keep it in ~/.dsh/workbench/market-index/.",
3233
3262
  "panels.discover.save": "Save and refresh",
3234
3263
  "panels.discover.cancel": "Cancel",
3235
3264
  "panels.discover.retry": "Retry",
@@ -3242,9 +3271,9 @@ var en = {
3242
3271
  "panels.discover.missingIndex": "This repository has no {path} yet.",
3243
3272
  "panels.discover.initTitle": "Initialize this repository as a module market index?",
3244
3273
  "panels.discover.initCta": "Initialize market index",
3245
- "panels.discover.initWhat": "It will write market.json and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their artifacts under packages/<unit>/. The repository stays owned by its owner.",
3274
+ "panels.discover.initWhat": "It will write market.json and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their build files under packages/<unit>/. The repository stays owned by its owner.",
3246
3275
  "panels.discover.initBranch": "Branch",
3247
- "panels.discover.initBranchHint": "The index and artifacts go to this branch; an empty repository gets it created.",
3276
+ "panels.discover.initBranchHint": "The index and build files go to this branch; an empty repository gets it created.",
3248
3277
  "panels.discover.initBranchBad": "Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.",
3249
3278
  "panels.discover.initOk": "Initialize",
3250
3279
  "panels.discover.initBusy": "Initializing…",
@@ -3348,11 +3377,11 @@ var en = {
3348
3377
  "panels.market.add.doneApplied": "Installed and live.",
3349
3378
  "panels.market.add.doneRestart": "Installed — restart once to pick it up.",
3350
3379
  "panels.market.add.restartWhy": "Why this needs a restart: {reason}",
3351
- "panels.market.add.restartWhy.no-hmr": "this configuration only applies changes at startup (hot reload is off)",
3380
+ "panels.market.add.restartWhy.no-hmr": "this configuration is only read at startup, so a restart is needed",
3352
3381
  "panels.market.add.restartWhy.package-moved": "an installed package now resolves to another directory, or the change replaced something dsh itself provides",
3353
3382
  "panels.market.add.restartWhy.host-module": "the change reaches modules dsh itself loaded",
3354
- "panels.market.add.restartWhy.unmanaged-plugin": "the change reaches a plugin running outside the plugin list",
3355
- "panels.market.add.restartWhy.module-comparison": "dsh could not compare loaded plugins with their files",
3383
+ "panels.market.add.restartWhy.unmanaged-plugin": "the change reaches a plugin that is running but not on the install list",
3384
+ "panels.market.add.restartWhy.module-comparison": "dsh could not confirm that the running plugin is the copy installed on this machine",
3356
3385
  "panels.market.add.cancelled": "Cancelled.",
3357
3386
  "panels.market.add.failed": "Didn't work: {reason}",
3358
3387
  "panels.market.add.removed": "It has been removed.",
@@ -3362,10 +3391,10 @@ var en = {
3362
3391
  "panels.market.add.removedRestart": "Removed — restart once to finish.",
3363
3392
  "panels.market.add.remove": "Remove it",
3364
3393
  "panels.market.add.problem.invalidSpec": "That is not a spec we accept: it cannot be empty or start with a dash.",
3365
- "panels.market.add.problem.alreadyInstalled": "That package is already in the profile (add @version to switch versions).",
3394
+ "panels.market.add.problem.alreadyInstalled": "That package is already in this workbench (add @version to switch versions).",
3366
3395
  "panels.market.add.problem.notFound": "No such package on that source. Try another name or version.",
3367
3396
  "panels.market.add.problem.notAPackage": "There is no package at that location. Pick a folder that contains a package.json.",
3368
- "panels.market.add.problem.notABundle": "It is an npm package, but not a dsh plugin (it is missing the dsh wiring declaration).",
3397
+ "panels.market.add.problem.notABundle": "It is an npm package, but not a dsh plugin (dsh cannot find what to load inside it).",
3369
3398
  "panels.market.add.problem.network": "The source is unreachable. Check the network and retry.",
3370
3399
  "panels.market.add.problem.unknown": "The check did not pass (reason unknown). Open the install details for the raw output, or retry.",
3371
3400
  "panels.market.add.reason.invalidSpec": "the spec is not accepted",
@@ -3373,7 +3402,7 @@ var en = {
3373
3402
  "panels.market.add.reason.notBundle": "it is not a dsh plugin package",
3374
3403
  "panels.market.add.reason.notRemovable": "it ships with the installation and cannot be removed",
3375
3404
  "panels.market.add.reason.bundleInUse": "something is still using it",
3376
- "panels.market.add.reason.stopProfile": "this configuration has no hot reload, so stop the process first",
3405
+ "panels.market.add.reason.stopProfile": "this configuration needs a restart, so stop the workbench first",
3377
3406
  "panels.market.add.reason.staleApproval": "the scripts to allow changed — start over",
3378
3407
  "panels.market.add.reason.operationError": "pnpm failed (see the install output)",
3379
3408
  "panels.market.add.reason.buildBlocked": "pnpm blocked install scripts",
@@ -3403,8 +3432,8 @@ var en = {
3403
3432
  "blocker.forbidden.titleGeneric": "No access",
3404
3433
  "blocker.forbidden.hint": "You are signed in, but this project/repo is not permitted for your account.",
3405
3434
  "blocker.forbidden.open": "Open permissions page",
3406
- "blocker.timeout.hint": "The headless browser may not have started; retrying usually helps.",
3407
- "blocker.exec.hint": "Make sure opencli is installed and on PATH (which opencli).",
3435
+ "blocker.timeout.hint": "The background browser may not have started; retrying usually helps.",
3436
+ "blocker.exec.hint": "Make sure opencli is installed and runs from your terminal (which opencli).",
3408
3437
  "blocker.unknown.title": "Something went wrong",
3409
3438
  "panels.reading": "Reading the panel setup…",
3410
3439
  "panels.cardBroken": "This module will not render: {unit} ({reason})",
@@ -3418,7 +3447,7 @@ var en = {
3418
3447
  "env.elapsed": "Waiting {seconds}s",
3419
3448
  "env.stepFailed.install": "install failed",
3420
3449
  "env.stepFailed.path": "installed but not found",
3421
- "env.stepFailed.shell": "no shell channel",
3450
+ "env.stepFailed.shell": "cannot reach the command line",
3422
3451
  "env.toolchain.ok": "Looks good",
3423
3452
  "env.toolchain.warn": "Almost ready",
3424
3453
  "env.opencli.ok": "Ready",
@@ -3435,10 +3464,10 @@ var en = {
3435
3464
  "env.fix.title": "How to fix it",
3436
3465
  "env.fix.why": "The workbench uses its own background tool (installed separately from the one in your terminal), and it is not set up on this machine yet.",
3437
3466
  "env.fix.whyPath": "The background tool is installed, but this environment cannot find it — usually a PATH or shell-session issue.",
3438
- "env.fix.whyShell": "The workbench has no shell channel, so it cannot fetch data — you cannot install this from here; someone needs to fix the background environment.",
3467
+ "env.fix.whyShell": "The workbench cannot reach the command line on this machine, so it cannot fetch data — you cannot install this from here; someone needs to fix the background environment.",
3439
3468
  "env.fix.step": "Run this in a terminal, then hit Retry:",
3440
3469
  "env.fix.stepPath": "Open a new terminal window (or make sure npm’s global bin directory is on PATH), then hit Retry.",
3441
- "env.fix.stepShell": "Restart the workbench (or dsh); if it keeps happening, the shell channel is not wired up.",
3470
+ "env.fix.stepShell": "Restart the workbench (or dsh); if it keeps happening, the workbench still cannot reach the command line.",
3442
3471
  "env.fix.permission": "Permission denied: rerun with sudo, or point npm’s global directory at your home.",
3443
3472
  "env.fix.network": "Network unreachable: check your network or proxy, then retry.",
3444
3473
  "env.fix.details": "Details (for troubleshooting)",
@@ -3467,9 +3496,9 @@ var en = {
3467
3496
  "env.warm.done": "Ready ({n} sites)",
3468
3497
  "env.warm.short": "Could not sign in early this time — nothing breaks; the first read fills it in",
3469
3498
  "env.unit.failed": "This module cannot start",
3470
- "env.unit.failedHint": "It failed while assembling itself; other modules are unaffected.",
3471
- "env.unit.unchecked": "Cannot check: no shell channel",
3472
- "env.unit.uncheckedHint": "The module is not the problem — the shell channel is unavailable. Restart the workbench.",
3499
+ "env.unit.failedHint": "It failed while starting up; other modules are unaffected.",
3500
+ "env.unit.unchecked": "Cannot check: no command line",
3501
+ "env.unit.uncheckedHint": "The module is not the problem — the workbench cannot reach the command line. Restart the workbench.",
3473
3502
  "adapterSet.not-configured": "No adapter set configured; using the default.",
3474
3503
  "adapterSet.no-profile": "No profile found, so the adapter set cannot load; using the default.",
3475
3504
  "adapterSet.malformed": "An adapter set must be a package name (for example @acme/adapters-set); using the default.",
@@ -3512,7 +3541,7 @@ var en = {
3512
3541
  "sidebarEdition.official": "Official",
3513
3542
  "sidebarEdition.officialHint": "Matches dsh exactly and stays stable: search, view options, show more, archive, add workspace — no waiting for us to catch up. Pick it to keep things simple.",
3514
3543
  "sidebarEdition.custom": "Custom",
3515
- "sidebarEdition.customHint": "Built for multi-project work: one project per dropdown, recency-first sessions, edge fades, marquee, DIY new session. Easier when you juggle projects.",
3544
+ "sidebarEdition.customHint": "Built for multi-project work: one project per dropdown, recency-first sessions, long names scroll, edges fade, DIY new session. Easier when you juggle projects.",
3516
3545
  "sidebarEdition.saving": "Configuring…",
3517
3546
  "sidebarEdition.reloadRequired": "Saved. Reload the page to apply — no workbench restart needed.",
3518
3547
  "sidebarEdition.reload": "Reload page",
@@ -3541,25 +3570,25 @@ var en = {
3541
3570
  "record.act.halt": "Halt",
3542
3571
  "approval.record.site": "Site",
3543
3572
  "approval.record.what": "Records",
3544
- "approval.record.lands": "Lands in",
3573
+ "approval.record.lands": "Saves to",
3545
3574
  "approval.record.noUrl": "no site given (this call gets refused)",
3546
3575
  "approval.record.oneAction": "one action",
3547
3576
  "approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
3548
- "approval.longTask.what": "Stops",
3549
- "approval.longTask.signal": "stopping only sends an interrupt signal — how the platform-side run finishes is up to the module",
3577
+ "approval.longTask.what": "Task to stop",
3578
+ "approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
3550
3579
  "approval.publish.module": "Module",
3551
3580
  "approval.publish.target": "Target",
3552
3581
  "approval.publish.version": "Version",
3553
3582
  "approval.publish.author": "Author",
3554
- "approval.publish.authorMissing": "unsigned (commits use the local git identity)",
3583
+ "approval.publish.authorMissing": "unsigned",
3555
3584
  "approval.publish.registry": "Registry",
3556
3585
  "approval.publish.repo": "Repository",
3557
3586
  "approval.publish.branch": "Branch",
3558
3587
  "approval.publish.defaultBranch": "default branch",
3559
- "approval.publish.artifacts": "Artifacts",
3588
+ "approval.publish.artifacts": "Build files",
3560
3589
  "approval.publish.index": "Index",
3561
3590
  "approval.publish.commits": "Commits",
3562
- "approval.publish.twoCommits": "artifacts + market.json in 2 commits, one push",
3591
+ "approval.publish.twoCommits": "build files + market.json in 2 commits, one push",
3563
3592
  "approval.publish.reading": "Reading…",
3564
3593
  "approval.publish.changelog": "Changelog for {version}",
3565
3594
  "approval.publish.changelogMissing": "No changelog entry for {version}; publishing will be blocked",
@@ -3707,15 +3736,14 @@ var dictionaries = {
3707
3736
  "panels.market.update": "更新",
3708
3737
  "panels.market.swapSlow": "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。",
3709
3738
  "panels.market.removeSlow": "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。",
3710
- "panels.market.updateNoChange": "没换成:点下去是 {from},跑完盘上还是这一版;源上最新是 {latest}。",
3739
+ "panels.market.updateNoChange": "更新失败:还是 {from};源上最新是 {latest},可以再点一次「更新」。",
3711
3740
  "panels.market.updateUnknownVersion": "(问不到)",
3712
- "panels.market.updateGone": "没换成:更新跑完盘上读不到这个模块。",
3713
- "panels.market.updateRestored": "没换成:盘上已经读不到新版本,已把 {version} 装回去。",
3741
+ "panels.market.updateGone": "更新失败:更新后找不到这个模块。",
3742
+ "panels.market.updateRestored": "更新失败:更新后找不到新版本,已把 {version} 装回去。",
3714
3743
  "panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。",
3715
- "panels.market.selfUpdateFailed": "自更新没成:{reason}",
3744
+ "panels.market.selfUpdateFailed": "工作台更新失败:{reason}",
3716
3745
  "panels.market.selfUpdateUnknown": "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)",
3717
- "panels.market.selfUpdateRolledBack": "没换成,已回滚到 {version}。",
3718
- "panels.market.selfUpdateNeedsMigrate": "工作台已更新。旧会话 / 项目不会自动并:先退出所有 dsh,再运行 dsh-workbench migrate(--force 可补并)。",
3746
+ "panels.market.selfUpdateRolledBack": "工作台更新失败,已回滚到 {version}。",
3719
3747
  "panels.market.uninstall": "卸载",
3720
3748
  "panels.market.uninstallLabel": "卸载 {name}",
3721
3749
  "panels.market.installing": "正在安装…",
@@ -3737,9 +3765,27 @@ var dictionaries = {
3737
3765
  "panels.market.empty": "暂无可用模块",
3738
3766
  "panels.market.sectionPlugins": "已安装 opencli 插件",
3739
3767
  "panels.market.moduleOutdated": "有新版",
3768
+ "panels.market.updateNeedsWorkbench": "新版本要先把工作台升级才能用",
3769
+ "panels.market.updateIncompatible": "新版本和当前的工作台不匹配,暂时不能更新",
3740
3770
  "panels.market.moduleRefused": "模块版本与工作台不匹配,暂时无法使用",
3741
3771
  "panels.market.moduleRestartHint": "重启后生效",
3742
3772
  "panels.market.pendingRestart": "重启后生效",
3773
+ "panels.market.pendingFollowUp": "旧数据待迁移",
3774
+ "panels.market.migrationHint": "旧会话和项目还没搬过来",
3775
+ "panels.market.migrateAction": "迁移旧数据",
3776
+ "panels.market.migrating": "正在迁移…",
3777
+ "panels.market.migrateConfirmTitle": "迁移旧数据?",
3778
+ "panels.market.migrateConfirmDetail": "先退出 dsh web / Desktop。迁移只补缺、不覆盖;旧目录保留。",
3779
+ "panels.market.migrateConfirmAck": "我已经退出 dsh web / Desktop",
3780
+ "panels.market.migrateConfirmYes": "开始迁移",
3781
+ "panels.market.migrateDone": "迁移完成:补了 {added} 个项目;重启工作台和 dsh web 后出现。",
3782
+ "panels.market.dismissFollowUp": "不再提醒",
3783
+ "panels.market.dismissing": "正在收起…",
3784
+ "panels.market.dismissFollowUpTitle": "不再提醒这件事?",
3785
+ "panels.market.dismissFollowUpDetail": "提示会从模块市场收起,但不会迁移或删除旧数据。旧会话和项目仍留在旧目录,新版本里看不到;以后需要时仍可运行 dsh-workbench migrate。",
3786
+ "panels.market.dismissFollowUpAck": "我知道旧数据不会自动出现",
3787
+ "panels.market.dismissFollowUpYes": "不再提醒",
3788
+ "panels.market.dismissed": "已不再提醒;旧数据仍在旧目录,需要时仍可运行 dsh-workbench migrate。",
3743
3789
  "panels.market.workbenchName": "工作台",
3744
3790
  "panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
3745
3791
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
@@ -3823,7 +3869,7 @@ var dictionaries = {
3823
3869
  "panels.market.add.exampleTitle": "示例",
3824
3870
  "panels.market.add.exampleFill": "填入示例",
3825
3871
  "panels.market.add.registryLabel": "安装源",
3826
- "panels.market.add.registryProfile": "这个 profile 配的源",
3872
+ "panels.market.add.registryProfile": "这份工作台配的源",
3827
3873
  "panels.market.add.registryPnpm": "pnpm 自己配的源",
3828
3874
  "panels.market.add.check": "预检",
3829
3875
  "panels.market.add.checking": "正在预检…",
@@ -3844,12 +3890,16 @@ var dictionaries = {
3844
3890
  "panels.market.tabs": "模块市场的两个面",
3845
3891
  "panels.tab.discover": "发现",
3846
3892
  "panels.discover.loading": "正在读取索引",
3893
+ "panels.discover.slowHint": "读取较慢:如有授权提示,先完成它,或换一个索引源。",
3847
3894
  "panels.discover.lead": "从索引源浏览模块;装上就能用。",
3848
3895
  "panels.discover.addSource": "添加",
3849
3896
  "panels.discover.addingSource": "正在添加…",
3850
3897
  "panels.discover.addFirstSource": "添加索引源",
3851
3898
  "panels.discover.removeSource": "移除",
3852
3899
  "panels.discover.removeSourceNamed": "移除 {url}",
3900
+ "panels.discover.useSource": "使用",
3901
+ "panels.discover.useSourceNamed": "使用 {label}",
3902
+ "panels.discover.sourceCurrent": "当前使用",
3853
3903
  "panels.discover.refresh": "刷新",
3854
3904
  "panels.discover.search": "搜索模块",
3855
3905
  "panels.discover.all": "全部",
@@ -3861,8 +3911,8 @@ var dictionaries = {
3861
3911
  "panels.discover.sourcePlaceholder": "https://example.com/index.json 或 git@git.example.com:wb/market.git",
3862
3912
  "panels.discover.sourceRef": "分支",
3863
3913
  "panels.discover.sourcePath": "索引文件",
3864
- "panels.discover.sourceLocal": "本地 clone(可选)",
3865
- "panels.discover.sourceLocalHint": "不填就 clone 到 ~/.dsh/workbench/market-index/。",
3914
+ "panels.discover.sourceLocal": "本地副本目录(可选)",
3915
+ "panels.discover.sourceLocalHint": "不填就放到 ~/.dsh/workbench/market-index/。",
3866
3916
  "panels.discover.save": "保存并刷新",
3867
3917
  "panels.discover.cancel": "取消",
3868
3918
  "panels.discover.retry": "重试",
@@ -3875,9 +3925,9 @@ var dictionaries = {
3875
3925
  "panels.discover.missingIndex": "仓库里还没有索引文件 {path}",
3876
3926
  "panels.discover.initTitle": "把这个仓库初始化成模块市场索引?",
3877
3927
  "panels.discover.initCta": "初始化成市场索引",
3878
- "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把产物提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3928
+ "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3879
3929
  "panels.discover.initBranch": "分支",
3880
- "panels.discover.initBranchHint": "索引与产物都发到这个分支;空仓库会新建它。",
3930
+ "panels.discover.initBranchHint": "索引和打包文件都发到这个分支;空仓库会新建它。",
3881
3931
  "panels.discover.initBranchBad": "分支名只能用字母、数字、点、下划线、斜杠或短横线",
3882
3932
  "panels.discover.initOk": "初始化",
3883
3933
  "panels.discover.initBusy": "正在初始化…",
@@ -3981,11 +4031,11 @@ var dictionaries = {
3981
4031
  "panels.market.add.doneApplied": "装好了,已经生效。",
3982
4032
  "panels.market.add.doneRestart": "装好了,重启一次才生效。",
3983
4033
  "panels.market.add.restartWhy": "为什么这一版要重启:{reason}",
3984
- "panels.market.add.restartWhy.no-hmr": "这个配置只在启动时应用改动(没开热更新)",
4034
+ "panels.market.add.restartWhy.no-hmr": "这份配置只在启动时读一次,改了得重启",
3985
4035
  "panels.market.add.restartWhy.package-moved": "某个已经装着的包换到了新的目录,或者这一下换掉了 dsh 自己提供的那份",
3986
4036
  "panels.market.add.restartWhy.host-module": "这一下动到了 dsh 自己加载的模块",
3987
- "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了插件清单之外正在跑的插件",
3988
- "panels.market.add.restartWhy.module-comparison": "dsh 没能把已加载的插件与盘上的文件对上",
4037
+ "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了没登记过、正在运行的插件",
4038
+ "panels.market.add.restartWhy.module-comparison": "dsh 没法确认正在跑的插件就是这台机器上装好的那一份",
3989
4039
  "panels.market.add.cancelled": "已取消。",
3990
4040
  "panels.market.add.failed": "没成功:{reason}",
3991
4041
  "panels.market.add.removed": "已经移除了。",
@@ -3995,10 +4045,10 @@ var dictionaries = {
3995
4045
  "panels.market.add.removedRestart": "卸掉了,重启一次才彻底生效。",
3996
4046
  "panels.market.add.remove": "移除它",
3997
4047
  "panels.market.add.problem.invalidSpec": "这个写法不认:不能是空的,也不能以横杠开头。",
3998
- "panels.market.add.problem.alreadyInstalled": "这个包已经在 profile 里了(要换版本请带上 @版本)。",
4048
+ "panels.market.add.problem.alreadyInstalled": "这个包已经在这份工作台里了(要换版本请带上 @版本)。",
3999
4049
  "panels.market.add.problem.notFound": "源上没有这个包。换个包名或版本再试。",
4000
4050
  "panels.market.add.problem.notAPackage": "这个位置没有包。选一个包含 package.json 的目录。",
4001
- "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(缺 dsh 的接线声明)。",
4051
+ "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(dsh 在里面找不到该加载什么)。",
4002
4052
  "panels.market.add.problem.network": "源连不上。检查网络后重试。",
4003
4053
  "panels.market.add.problem.unknown": "预检没通过(原因未知)。展开安装详情看原始输出,或重试。",
4004
4054
  "panels.market.add.reason.invalidSpec": "写法不认",
@@ -4006,7 +4056,7 @@ var dictionaries = {
4006
4056
  "panels.market.add.reason.notBundle": "它不是一个 dsh 插件包",
4007
4057
  "panels.market.add.reason.notRemovable": "它是安装自带的组合包,不能卸",
4008
4058
  "panels.market.add.reason.bundleInUse": "还有东西在用它,卸不掉",
4009
- "panels.market.add.reason.stopProfile": "这个配置没开热更新,得先停掉进程",
4059
+ "panels.market.add.reason.stopProfile": "这份配置改了要重启,得先停掉工作台",
4010
4060
  "panels.market.add.reason.staleApproval": "要允许的安装脚本已经变了,重新来一次",
4011
4061
  "panels.market.add.reason.operationError": "pnpm 执行出错(详情见安装输出)",
4012
4062
  "panels.market.add.reason.buildBlocked": "pnpm 拦下了安装脚本",
@@ -4029,15 +4079,15 @@ var dictionaries = {
4029
4079
  "blocker.market.open": "去模块市场",
4030
4080
  "blocker.login.title": "需要登录 {platform}",
4031
4081
  "blocker.login.titleGeneric": "需要登录",
4032
- "blocker.login.hint": "工作台用你的浏览器登录态;登录一次就行,之后不用再登。",
4082
+ "blocker.login.hint": "工作台借你浏览器里的登录状态;登录一次就行,之后不用再登。",
4033
4083
  "blocker.login.go": "去登录",
4034
4084
  "blocker.login.manual": "在终端执行该插件的登录命令(见插件的文档),按提示完成登录后重试。",
4035
4085
  "blocker.forbidden.title": "没有权限访问 {platform}",
4036
4086
  "blocker.forbidden.titleGeneric": "没有权限",
4037
4087
  "blocker.forbidden.hint": "账号已登录,但没有这个项目/仓库的权限;申请之后再试。",
4038
4088
  "blocker.forbidden.open": "打开权限页",
4039
- "blocker.timeout.hint": "无头浏览器可能没起来,重试一次通常就好。",
4040
- "blocker.exec.hint": "确认 opencli 已安装且在 PATH 里(which opencli)。",
4089
+ "blocker.timeout.hint": "后台浏览器没起来,重试一次通常就好。",
4090
+ "blocker.exec.hint": "确认 opencli 已经装好、在终端里能直接运行(which opencli)。",
4041
4091
  "blocker.unknown.title": "出了点问题",
4042
4092
  "panels.reading": "正在读取面板配置…",
4043
4093
  "panels.cardBroken": "这个模块起不来:{unit}({reason})",
@@ -4051,7 +4101,7 @@ var dictionaries = {
4051
4101
  "env.elapsed": "已等待 {seconds} 秒",
4052
4102
  "env.stepFailed.install": "装不上",
4053
4103
  "env.stepFailed.path": "装了但还找不到",
4054
- "env.stepFailed.shell": "执行通道不可用",
4104
+ "env.stepFailed.shell": "连不上命令行",
4055
4105
  "env.toolchain.ok": "正常",
4056
4106
  "env.toolchain.warn": "还没完全准备好",
4057
4107
  "env.opencli.ok": "已就绪",
@@ -4068,10 +4118,10 @@ var dictionaries = {
4068
4118
  "env.fix.title": "怎么解决",
4069
4119
  "env.fix.why": "工作台用它自己那份后台工具(与你在终端里那套分开装,互不影响),这台机器上还没装好它。",
4070
4120
  "env.fix.whyPath": "后台工具装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。",
4071
- "env.fix.whyShell": "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4121
+ "env.fix.whyShell": "工作台拿不到这台机器的命令行,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4072
4122
  "env.fix.step": "在终端里运行下面这条命令,装好之后点「重试」:",
4073
4123
  "env.fix.stepPath": "新开一个终端窗口(或确认 npm 的全局 bin 目录在 PATH 里),然后点「重试」。",
4074
- "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明执行通道没配好。",
4124
+ "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明工作台还是拿不到命令行。",
4075
4125
  "env.fix.permission": "权限不够:在命令前加 sudo 重跑,或先把 npm 的全局目录配到你的用户目录。",
4076
4126
  "env.fix.network": "网络不通:检查网络或代理设置后重试。",
4077
4127
  "env.fix.details": "详细输出(排障用)",
@@ -4100,9 +4150,9 @@ var dictionaries = {
4100
4150
  "env.warm.done": "已就绪({n} 个站点)",
4101
4151
  "env.warm.short": "这次没提前连上 —— 不影响用,第一次取数会自己补",
4102
4152
  "env.unit.failed": "这个模块起不来",
4103
- "env.unit.failedHint": "它自己装配时报了错,别的模块不受影响。",
4104
- "env.unit.unchecked": "检测不了:拿不到执行通道",
4105
- "env.unit.uncheckedHint": "不是这个模块的问题,是执行通道不可用 —— 重启一次工作台再试。",
4153
+ "env.unit.failedHint": "它自己启动时报了错,别的模块不受影响。",
4154
+ "env.unit.unchecked": "检测不了:拿不到命令行",
4155
+ "env.unit.uncheckedHint": "不是这个模块的问题,是工作台拿不到命令行 —— 重启一次工作台再试。",
4106
4156
  "adapterSet.not-configured": "没配置适配器集合,用默认的。",
4107
4157
  "adapterSet.no-profile": "找不到 profile,没法加载适配器集合;先用默认的。",
4108
4158
  "adapterSet.malformed": "适配器集合要写包名(如 @acme/adapters-set);先用默认的。",
@@ -4145,7 +4195,7 @@ var dictionaries = {
4145
4195
  "sidebarEdition.official": "官方",
4146
4196
  "sidebarEdition.officialHint": "跟 dsh 官方一致、最稳:搜索、视图选项、显示更多、归档、添加工作区都齐,升级也不等我们适配。想省心就选它。",
4147
4197
  "sidebarEdition.custom": "自定义",
4148
- "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,两端淡出、跑马灯、工坊 DIY 新会话。项目多时更顺手。",
4198
+ "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,名字自动滚动、两侧渐隐,工坊 DIY 新会话。项目多时更顺手。",
4149
4199
  "sidebarEdition.saving": "配置中…",
4150
4200
  "sidebarEdition.reloadRequired": "已写入。刷新页面后生效(不用重启工作台)。",
4151
4201
  "sidebarEdition.reload": "刷新页面",
@@ -4174,25 +4224,25 @@ var dictionaries = {
4174
4224
  "record.act.halt": "停",
4175
4225
  "approval.record.site": "站点",
4176
4226
  "approval.record.what": "录制功能",
4177
- "approval.record.lands": "落点",
4227
+ "approval.record.lands": "保存到",
4178
4228
  "approval.record.noUrl": "没给站点地址(这次会被当场拒)",
4179
4229
  "approval.record.oneAction": "一次操作",
4180
4230
  "approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
4181
- "approval.longTask.what": "要停的那一趟",
4182
- "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 平台侧那趟活儿的收尾看模块自己",
4231
+ "approval.longTask.what": "要停的那次任务",
4232
+ "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
4183
4233
  "approval.publish.module": "模块",
4184
4234
  "approval.publish.target": "目标",
4185
4235
  "approval.publish.version": "版本",
4186
4236
  "approval.publish.author": "作者",
4187
- "approval.publish.authorMissing": "未署名(提交用本机 git 身份)",
4237
+ "approval.publish.authorMissing": "未署名",
4188
4238
  "approval.publish.registry": "源",
4189
4239
  "approval.publish.repo": "仓库",
4190
4240
  "approval.publish.branch": "分支",
4191
4241
  "approval.publish.defaultBranch": "默认分支",
4192
- "approval.publish.artifacts": "产物",
4242
+ "approval.publish.artifacts": "打包文件",
4193
4243
  "approval.publish.index": "索引",
4194
4244
  "approval.publish.commits": "提交",
4195
- "approval.publish.twoCommits": "产物 + market.json 两个 commit,一次 push",
4245
+ "approval.publish.twoCommits": "打包文件 + market.json 两次提交,一次推送",
4196
4246
  "approval.publish.reading": "读取中…",
4197
4247
  "approval.publish.changelog": "{version} 的更新日志",
4198
4248
  "approval.publish.changelogMissing": "这一版还没有更新日志({version}),发布会被拦下",
@@ -4968,6 +5018,7 @@ var MARKET_STATE_KEY = {
4968
5018
  broken: "panels.market.broken",
4969
5019
  outdated: "panels.market.moduleOutdated",
4970
5020
  "pending-restart": "panels.market.pendingRestart",
5021
+ "pending-followup": "panels.market.pendingFollowUp",
4971
5022
  missing: "panels.market.missing",
4972
5023
  unchecked: "panels.market.unchecked",
4973
5024
  unknown: "panels.market.unchecked"
@@ -4980,6 +5031,7 @@ var MARKET_DOT = {
4980
5031
  broken: "error",
4981
5032
  outdated: "warning",
4982
5033
  "pending-restart": "warning",
5034
+ "pending-followup": "warning",
4983
5035
  missing: "idle",
4984
5036
  unchecked: "idle",
4985
5037
  unknown: "idle"
@@ -5004,35 +5056,32 @@ function refusalReasons(host, client) {
5004
5056
  if (reported.length > 0) return reported;
5005
5057
  return [...new Set(client ?? [])];
5006
5058
  }
5007
- function mergeTitles(known, manifests) {
5008
- let next = null;
5009
- for (const manifest of manifests) {
5010
- const titleKey = manifest.card?.titleKey;
5011
- if (titleKey === void 0 || known.has(manifest.id)) continue;
5012
- next ??= new Map(known);
5013
- next.set(manifest.id, titleKey);
5014
- }
5015
- return next ?? known;
5059
+ function updateBlockHintOf(block) {
5060
+ return block === "needs-workbench" ? "panels.market.updateNeedsWorkbench" : "panels.market.updateIncompatible";
5016
5061
  }
5017
5062
  function installedIdSet(installed) {
5018
5063
  if (installed === void 0) return null;
5019
5064
  return new Set(installed.map((item) => item.unit));
5020
5065
  }
5021
- function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5066
+ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5022
5067
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
5023
5068
  const rows = [];
5024
5069
  for (const module of modules) {
5025
5070
  if (listed.has(module.unit)) continue;
5026
5071
  const latest = module.local === true ? void 0 : module.latest;
5027
5072
  const outdated = latest !== void 0 && latest !== module.installed;
5073
+ const blocked = outdated ? module.latestBlocked : void 0;
5028
5074
  const loaded = titles.has(module.unit);
5029
5075
  const refused = refusalReasons(module.refused, module.clientRefused);
5030
5076
  const pending = !loaded && refused.length === 0;
5077
+ const titleKey = titles.get(module.unit);
5078
+ const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
5031
5079
  rows.push({
5032
5080
  id: module.unit,
5033
- titleKey: titles.get(module.unit) ?? known?.get(module.unit) ?? module.pkg,
5081
+ titleKey: titleKey ?? module.unit,
5082
+ ...remembered === void 0 ? {} : { label: remembered },
5034
5083
  state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
5035
- ...pending ? { hint: "panels.market.moduleRestartHint" } : {},
5084
+ ...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
5036
5085
  ...refused.length === 0 ? {} : { note: {
5037
5086
  key: "panels.market.moduleRefused",
5038
5087
  params: {}
@@ -5040,7 +5089,7 @@ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE_
5040
5089
  ...module.local === true ? { local: true } : {},
5041
5090
  pkg: module.pkg,
5042
5091
  canInstall: false,
5043
- canUpdate: outdated,
5092
+ canUpdate: outdated && blocked === void 0,
5044
5093
  canUninstall: true,
5045
5094
  version: {
5046
5095
  installed: module.installed,
@@ -5048,7 +5097,8 @@ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE_
5048
5097
  },
5049
5098
  ...outdated ? { moduleUpdate: {
5050
5099
  installed: module.installed,
5051
- latest
5100
+ latest,
5101
+ ...blocked === void 0 ? {} : { blocked }
5052
5102
  } } : {},
5053
5103
  defaultShown: defaults.has(module.unit),
5054
5104
  defaultChanged: changed[module.unit] ?? 0
@@ -5061,11 +5111,14 @@ function marketSwitchLocked(row) {
5061
5111
  return SWITCH_LOCKED.has(row.state);
5062
5112
  }
5063
5113
  function marketActions$1(row) {
5064
- if (row.workbench === true) return row.canUpdate ? ["update-workbench"] : [];
5114
+ if (row.workbench === true) {
5115
+ if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
5116
+ return row.canUpdate ? ["update-workbench"] : [];
5117
+ }
5065
5118
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
5066
5119
  return [
5067
5120
  ...row.canInstall ? ["install"] : [],
5068
- ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : ["update-bundle"],
5121
+ ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
5069
5122
  ...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
5070
5123
  ];
5071
5124
  }
@@ -5143,7 +5196,7 @@ function liveManifests(manifests, capabilities, installed) {
5143
5196
  return manifests.filter((manifest) => !gone.has(manifest.id));
5144
5197
  }
5145
5198
  function marketHasUpdates(rows, shared = []) {
5146
- return rows.some((row) => row.state === "outdated" || row.moduleUpdate !== void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
5199
+ return rows.some((row) => row.moduleUpdate === void 0 ? row.state === "outdated" : row.moduleUpdate.blocked === void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
5147
5200
  }
5148
5201
  function marketUpdatesOf(modules) {
5149
5202
  if (modules === null) return {};
@@ -5153,6 +5206,7 @@ function marketUpdatesOf(modules) {
5153
5206
  next[module.unit] = {
5154
5207
  installed: module.installed,
5155
5208
  ...local || module.latest === void 0 ? {} : { latest: module.latest },
5209
+ ...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
5156
5210
  ...local ? { local: true } : {}
5157
5211
  };
5158
5212
  }
@@ -5191,9 +5245,11 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5191
5245
  const reAdopt = capability?.released === true && !installDeclared;
5192
5246
  const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
5193
5247
  installed: entry.installed,
5194
- latest: entry.latest
5248
+ latest: entry.latest,
5249
+ ...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
5195
5250
  };
5196
5251
  const shown = moduleUpdate === void 0 ? state : "outdated";
5252
+ const hint = moduleUpdate?.blocked === void 0 ? shown === "unknown" || shown === "unchecked" ? "panels.market.uncheckedHint" : void 0 : updateBlockHintOf(moduleUpdate.blocked);
5197
5253
  rows.push({
5198
5254
  id: manifest.id,
5199
5255
  titleKey: manifest.card?.titleKey ?? manifest.id,
@@ -5201,7 +5257,7 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5201
5257
  canInstall: state !== "installed" && (install || reAdopt),
5202
5258
  canUpdate: onMachine && isOutdated(capability),
5203
5259
  canUninstall: onMachine,
5204
- ...shown === "unknown" || shown === "unchecked" ? { hint: "panels.market.uncheckedHint" } : {},
5260
+ ...hint === void 0 ? {} : { hint },
5205
5261
  ...entry === void 0 ? {} : { version: {
5206
5262
  installed: entry.installed,
5207
5263
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
@@ -5266,11 +5322,14 @@ function workbenchRow(version) {
5266
5322
  installed: version.installed,
5267
5323
  latest
5268
5324
  } : void 0;
5325
+ const stale = !local && version.running !== void 0 && version.running !== version.installed;
5326
+ const followUp = version.followUp;
5327
+ const followUpState = !stale && followUp !== void 0;
5269
5328
  return {
5270
5329
  id: WORKBENCH_ROW_ID,
5271
5330
  titleKey: WORKBENCH_TITLE_KEY,
5272
5331
  workbench: true,
5273
- state: !local && version.running !== void 0 && version.running !== version.installed ? "pending-restart" : update === void 0 ? "installed" : "outdated",
5332
+ state: stale ? "pending-restart" : followUpState ? "pending-followup" : update === void 0 ? "installed" : "outdated",
5274
5333
  canInstall: false,
5275
5334
  canUpdate: update !== void 0,
5276
5335
  canUninstall: false,
@@ -5280,6 +5339,8 @@ function workbenchRow(version) {
5280
5339
  ...latest === void 0 ? {} : { latest }
5281
5340
  },
5282
5341
  ...update === void 0 ? {} : { moduleUpdate: update },
5342
+ ...followUp === void 0 ? {} : { followUp },
5343
+ ...followUpState ? { hint: "panels.market.migrationHint" } : {},
5283
5344
  pkg: version.pkg
5284
5345
  };
5285
5346
  }
@@ -5287,6 +5348,7 @@ function workbenchRow(version) {
5287
5348
  //#region src/app/layouts/rightbar/market-hint.ts
5288
5349
  var PROBLEM_KEY = "panels.market.hasProblem";
5289
5350
  var RESTART_KEY = "panels.market.pendingRestart";
5351
+ var FOLLOWUP_KEY = "panels.market.pendingFollowUp";
5290
5352
  var UNKNOWN_KEY = "panels.market.unchecked";
5291
5353
  var UPDATES_KEY = "panels.market.hasNew";
5292
5354
  function isProblem(row) {
@@ -5317,12 +5379,14 @@ function marketHintOf(input) {
5317
5379
  ];
5318
5380
  const problem = rows.some(isProblem);
5319
5381
  const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
5382
+ const followUp = rows.some((row) => row.state === "pending-followup");
5320
5383
  const rosterRead = input.modules !== null;
5321
5384
  const unknown = rows.some((row) => isUnknown(row, rosterRead));
5322
5385
  const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
5323
5386
  const more = [];
5324
5387
  if (problem) {
5325
5388
  if (restart) more.push(RESTART_KEY);
5389
+ if (followUp) more.push(FOLLOWUP_KEY);
5326
5390
  if (unknown) more.push(UNKNOWN_KEY);
5327
5391
  if (updates) more.push(UPDATES_KEY);
5328
5392
  return {
@@ -5332,6 +5396,7 @@ function marketHintOf(input) {
5332
5396
  };
5333
5397
  }
5334
5398
  if (restart) {
5399
+ if (followUp) more.push(FOLLOWUP_KEY);
5335
5400
  if (unknown) more.push(UNKNOWN_KEY);
5336
5401
  if (updates) more.push(UPDATES_KEY);
5337
5402
  return {
@@ -5340,6 +5405,15 @@ function marketHintOf(input) {
5340
5405
  ...more.length === 0 ? {} : { moreKeys: more }
5341
5406
  };
5342
5407
  }
5408
+ if (followUp) {
5409
+ if (unknown) more.push(UNKNOWN_KEY);
5410
+ if (updates) more.push(UPDATES_KEY);
5411
+ return {
5412
+ labelKey: FOLLOWUP_KEY,
5413
+ tone: "warning",
5414
+ ...more.length === 0 ? {} : { moreKeys: more }
5415
+ };
5416
+ }
5343
5417
  if (unknown) {
5344
5418
  if (updates) more.push(UPDATES_KEY);
5345
5419
  return {
@@ -5635,114 +5709,118 @@ function useMarketTransient(input) {
5635
5709
  };
5636
5710
  }
5637
5711
  var MarketPage_module_default = {
5638
- marketList: "_marketList_9dzu9_1",
5639
- marketRow: "_marketRow_9dzu9_10",
5640
- marketIcon: "_marketIcon_9dzu9_20",
5641
- marketMain: "_marketMain_9dzu9_32",
5642
- marketName: "_marketName_9dzu9_39",
5643
- marketStatus: "_marketStatus_9dzu9_48",
5644
- marketStateText: "_marketStateText_9dzu9_58",
5645
- marketSep: "_marketSep_9dzu9_62",
5646
- marketReason: "_marketReason_9dzu9_66",
5647
- marketVersion: "_marketVersion_9dzu9_72",
5648
- marketLocalTag: "_marketLocalTag_9dzu9_94",
5649
- marketEnd: "_marketEnd_9dzu9_105",
5650
- marketSwitchSeat: "_marketSwitchSeat_9dzu9_112",
5651
- marketActions: "_marketActions_9dzu9_125",
5652
- marketUpdateAction: "_marketUpdateAction_9dzu9_131",
5653
- marketSelfDivider: "_marketSelfDivider_9dzu9_137",
5654
- marketSection: "_marketSection_9dzu9_143",
5655
- marketSectionHead: "_marketSectionHead_9dzu9_150",
5656
- marketSectionIcon: "_marketSectionIcon_9dzu9_156",
5657
- marketSectionTitle: "_marketSectionTitle_9dzu9_163",
5658
- marketSectionCount: "_marketSectionCount_9dzu9_169",
5659
- marketSectionQuiet: "_marketSectionQuiet_9dzu9_175",
5660
- marketProgress: "_marketProgress_9dzu9_188",
5661
- marketNote: "_marketNote_9dzu9_198",
5662
- marketFailure: "_marketFailure_9dzu9_205",
5663
- marketEmpty: "_marketEmpty_9dzu9_212",
5664
- marketPage: "_marketPage_9dzu9_217",
5665
- marketPageHead: "_marketPageHead_9dzu9_235",
5666
- marketPageTitle: "_marketPageTitle_9dzu9_243",
5667
- marketPageIntro: "_marketPageIntro_9dzu9_248",
5668
- marketPageTools: "_marketPageTools_9dzu9_254",
5669
- marketPanel: "_marketPanel_9dzu9_263",
5670
- marketTabs: "_marketTabs_9dzu9_273",
5671
- marketTabList: "_marketTabList_9dzu9_278",
5672
- marketIconButton: "_marketIconButton_9dzu9_283",
5673
- marketIconWrap: "_marketIconWrap_9dzu9_308",
5674
- marketIconButtonSpinning: "_marketIconButtonSpinning_9dzu9_312",
5675
- "wb-spin": "_wb-spin_9dzu9_1",
5676
- marketAddButton: "_marketAddButton_9dzu9_316",
5677
- marketEmptyTitle: "_marketEmptyTitle_9dzu9_333",
5678
- discoverPage: "_discoverPage_9dzu9_347",
5679
- discoverBar: "_discoverBar_9dzu9_354",
5680
- discoverTools: "_discoverTools_9dzu9_361",
5681
- discoverMarket: "_discoverMarket_9dzu9_367",
5682
- discoverMarketButton: "_discoverMarketButton_9dzu9_372",
5683
- discoverMarketName: "_discoverMarketName_9dzu9_379",
5684
- discoverLabels: "_discoverLabels_9dzu9_385",
5685
- discoverSort: "_discoverSort_9dzu9_390",
5686
- discoverRefresh: "_discoverRefresh_9dzu9_395",
5687
- discoverSearch: "_discoverSearch_9dzu9_399",
5688
- discoverChips: "_discoverChips_9dzu9_440",
5689
- discoverList: "_discoverList_9dzu9_447",
5690
- discoverCard: "_discoverCard_9dzu9_456",
5691
- discoverArtwork: "_discoverArtwork_9dzu9_470",
5692
- discoverArtworkImage: "_discoverArtworkImage_9dzu9_482",
5693
- discoverMain: "_discoverMain_9dzu9_486",
5694
- discoverTitleRow: "_discoverTitleRow_9dzu9_494",
5695
- discoverCardOpen: "_discoverCardOpen_9dzu9_502",
5696
- discoverStrong: "_discoverStrong_9dzu9_533",
5697
- discoverDesc: "_discoverDesc_9dzu9_539",
5698
- discoverMeta: "_discoverMeta_9dzu9_548",
5699
- discoverMuted: "_discoverMuted_9dzu9_555",
5700
- discoverEnd: "_discoverEnd_9dzu9_561",
5701
- discoverBlocked: "_discoverBlocked_9dzu9_570",
5702
- discoverEmpty: "_discoverEmpty_9dzu9_575",
5703
- discoverEmptyTitle: "_discoverEmptyTitle_9dzu9_584",
5704
- discoverDetail: "_discoverDetail_9dzu9_594",
5705
- discoverCrumb: "_discoverCrumb_9dzu9_600",
5706
- discoverCrumbIcon: "_discoverCrumbIcon_9dzu9_623",
5707
- discoverDetailHead: "_discoverDetailHead_9dzu9_627",
5708
- discoverDetailTitle: "_discoverDetailTitle_9dzu9_633",
5709
- discoverDetailText: "_discoverDetailText_9dzu9_639",
5710
- discoverDetailPanel: "_discoverDetailPanel_9dzu9_646",
5711
- discoverDetailTabs: "_discoverDetailTabs_9dzu9_653",
5712
- discoverDetailTabList: "_discoverDetailTabList_9dzu9_658",
5713
- discoverDocBody: "_discoverDocBody_9dzu9_663",
5714
- discoverDocNotice: "_discoverDocNotice_9dzu9_668",
5715
- discoverSection: "_discoverSection_9dzu9_674",
5716
- discoverSectionTitle: "_discoverSectionTitle_9dzu9_681",
5717
- discoverFacts: "_discoverFacts_9dzu9_687",
5718
- discoverFactRow: "_discoverFactRow_9dzu9_692",
5719
- discoverFactKind: "_discoverFactKind_9dzu9_702",
5720
- discoverFactValue: "_discoverFactValue_9dzu9_708",
5721
- discoverCode: "_discoverCode_9dzu9_716",
5722
- discoverTags: "_discoverTags_9dzu9_725",
5723
- discoverLink: "_discoverLink_9dzu9_732",
5724
- discoverVersions: "_discoverVersions_9dzu9_742",
5725
- discoverVersionRow: "_discoverVersionRow_9dzu9_750",
5726
- discoverVersionName: "_discoverVersionName_9dzu9_758",
5727
- discoverError: "_discoverError_9dzu9_763",
5728
- discoverFailure: "_discoverFailure_9dzu9_772",
5729
- discoverNotice: "_discoverNotice_9dzu9_778",
5730
- discoverMore: "_discoverMore_9dzu9_796",
5731
- discoverDialog: "_discoverDialog_9dzu9_800",
5732
- discoverDialogBody: "_discoverDialogBody_9dzu9_804",
5733
- discoverSourceList: "_discoverSourceList_9dzu9_810",
5734
- discoverSourceRow: "_discoverSourceRow_9dzu9_818",
5735
- discoverSourceError: "_discoverSourceError_9dzu9_826",
5736
- discoverSourceForm: "_discoverSourceForm_9dzu9_832",
5737
- discoverGrow: "_discoverGrow_9dzu9_838",
5738
- discoverField: "_discoverField_9dzu9_843",
5739
- discoverFieldLabel: "_discoverFieldLabel_9dzu9_849",
5740
- discoverConfirmHead: "_discoverConfirmHead_9dzu9_854",
5741
- discoverSkeletonFill: "_discoverSkeletonFill_9dzu9_860",
5742
- "wb-skeleton": "_wb-skeleton_9dzu9_1",
5743
- discoverSkeletonBar: "_discoverSkeletonBar_9dzu9_869",
5744
- discoverSkeletonTitle: "_discoverSkeletonTitle_9dzu9_876",
5745
- discoverSkeletonDesc: "_discoverSkeletonDesc_9dzu9_880"
5712
+ marketList: "_marketList_bnt61_1",
5713
+ marketRow: "_marketRow_bnt61_10",
5714
+ marketIcon: "_marketIcon_bnt61_20",
5715
+ marketMain: "_marketMain_bnt61_32",
5716
+ marketName: "_marketName_bnt61_39",
5717
+ marketStatus: "_marketStatus_bnt61_48",
5718
+ marketStateText: "_marketStateText_bnt61_58",
5719
+ marketSep: "_marketSep_bnt61_62",
5720
+ marketReason: "_marketReason_bnt61_66",
5721
+ marketVersion: "_marketVersion_bnt61_72",
5722
+ marketLocalTag: "_marketLocalTag_bnt61_94",
5723
+ marketEnd: "_marketEnd_bnt61_105",
5724
+ marketSwitchSeat: "_marketSwitchSeat_bnt61_112",
5725
+ marketActions: "_marketActions_bnt61_125",
5726
+ marketUpdateAction: "_marketUpdateAction_bnt61_131",
5727
+ marketSelfDivider: "_marketSelfDivider_bnt61_137",
5728
+ marketSection: "_marketSection_bnt61_143",
5729
+ marketSectionHead: "_marketSectionHead_bnt61_150",
5730
+ marketSectionIcon: "_marketSectionIcon_bnt61_156",
5731
+ marketSectionTitle: "_marketSectionTitle_bnt61_163",
5732
+ marketSectionCount: "_marketSectionCount_bnt61_169",
5733
+ marketSectionQuiet: "_marketSectionQuiet_bnt61_175",
5734
+ marketProgress: "_marketProgress_bnt61_188",
5735
+ marketNote: "_marketNote_bnt61_198",
5736
+ marketFailure: "_marketFailure_bnt61_205",
5737
+ marketEmpty: "_marketEmpty_bnt61_212",
5738
+ marketPage: "_marketPage_bnt61_217",
5739
+ marketPageHead: "_marketPageHead_bnt61_235",
5740
+ marketPageTitle: "_marketPageTitle_bnt61_243",
5741
+ marketPageIntro: "_marketPageIntro_bnt61_248",
5742
+ marketPageTools: "_marketPageTools_bnt61_254",
5743
+ marketPanel: "_marketPanel_bnt61_263",
5744
+ marketTabs: "_marketTabs_bnt61_273",
5745
+ marketTabList: "_marketTabList_bnt61_278",
5746
+ marketIconButton: "_marketIconButton_bnt61_283",
5747
+ marketIconWrap: "_marketIconWrap_bnt61_308",
5748
+ marketIconButtonSpinning: "_marketIconButtonSpinning_bnt61_312",
5749
+ "wb-spin": "_wb-spin_bnt61_1",
5750
+ marketAddButton: "_marketAddButton_bnt61_316",
5751
+ marketEmptyTitle: "_marketEmptyTitle_bnt61_333",
5752
+ discoverPage: "_discoverPage_bnt61_347",
5753
+ discoverBar: "_discoverBar_bnt61_354",
5754
+ discoverTools: "_discoverTools_bnt61_361",
5755
+ discoverMarket: "_discoverMarket_bnt61_367",
5756
+ discoverMarketButton: "_discoverMarketButton_bnt61_372",
5757
+ discoverMarketName: "_discoverMarketName_bnt61_379",
5758
+ discoverLabels: "_discoverLabels_bnt61_385",
5759
+ discoverSort: "_discoverSort_bnt61_390",
5760
+ discoverRefresh: "_discoverRefresh_bnt61_395",
5761
+ discoverSearch: "_discoverSearch_bnt61_399",
5762
+ discoverChips: "_discoverChips_bnt61_440",
5763
+ discoverList: "_discoverList_bnt61_447",
5764
+ discoverCard: "_discoverCard_bnt61_456",
5765
+ discoverArtwork: "_discoverArtwork_bnt61_470",
5766
+ discoverArtworkImage: "_discoverArtworkImage_bnt61_482",
5767
+ discoverMain: "_discoverMain_bnt61_486",
5768
+ discoverTitleRow: "_discoverTitleRow_bnt61_494",
5769
+ discoverCardOpen: "_discoverCardOpen_bnt61_502",
5770
+ discoverStrong: "_discoverStrong_bnt61_533",
5771
+ discoverDesc: "_discoverDesc_bnt61_539",
5772
+ discoverMeta: "_discoverMeta_bnt61_548",
5773
+ discoverMuted: "_discoverMuted_bnt61_555",
5774
+ discoverEnd: "_discoverEnd_bnt61_561",
5775
+ discoverBlocked: "_discoverBlocked_bnt61_570",
5776
+ discoverEmpty: "_discoverEmpty_bnt61_575",
5777
+ discoverEmptyTitle: "_discoverEmptyTitle_bnt61_584",
5778
+ discoverDetail: "_discoverDetail_bnt61_594",
5779
+ discoverCrumb: "_discoverCrumb_bnt61_600",
5780
+ discoverCrumbIcon: "_discoverCrumbIcon_bnt61_623",
5781
+ discoverDetailHead: "_discoverDetailHead_bnt61_627",
5782
+ discoverDetailTitle: "_discoverDetailTitle_bnt61_633",
5783
+ discoverDetailText: "_discoverDetailText_bnt61_639",
5784
+ discoverDetailPanel: "_discoverDetailPanel_bnt61_646",
5785
+ discoverDetailTabs: "_discoverDetailTabs_bnt61_653",
5786
+ discoverDetailTabList: "_discoverDetailTabList_bnt61_658",
5787
+ discoverDocBody: "_discoverDocBody_bnt61_663",
5788
+ discoverDocNotice: "_discoverDocNotice_bnt61_668",
5789
+ discoverSection: "_discoverSection_bnt61_674",
5790
+ discoverSectionTitle: "_discoverSectionTitle_bnt61_681",
5791
+ discoverFacts: "_discoverFacts_bnt61_687",
5792
+ discoverFactRow: "_discoverFactRow_bnt61_692",
5793
+ discoverFactKind: "_discoverFactKind_bnt61_702",
5794
+ discoverFactValue: "_discoverFactValue_bnt61_708",
5795
+ discoverCode: "_discoverCode_bnt61_716",
5796
+ discoverTags: "_discoverTags_bnt61_725",
5797
+ discoverLink: "_discoverLink_bnt61_732",
5798
+ discoverVersions: "_discoverVersions_bnt61_742",
5799
+ discoverVersionRow: "_discoverVersionRow_bnt61_750",
5800
+ discoverVersionName: "_discoverVersionName_bnt61_758",
5801
+ discoverError: "_discoverError_bnt61_763",
5802
+ discoverFailure: "_discoverFailure_bnt61_772",
5803
+ discoverLoading: "_discoverLoading_bnt61_778",
5804
+ discoverNotice: "_discoverNotice_bnt61_787",
5805
+ discoverMore: "_discoverMore_bnt61_805",
5806
+ discoverDialog: "_discoverDialog_bnt61_809",
5807
+ discoverDialogBody: "_discoverDialogBody_bnt61_813",
5808
+ discoverSourceList: "_discoverSourceList_bnt61_819",
5809
+ discoverSourceRow: "_discoverSourceRow_bnt61_827",
5810
+ discoverSourceCurrent: "_discoverSourceCurrent_bnt61_836",
5811
+ discoverSourceLoading: "_discoverSourceLoading_bnt61_843",
5812
+ discoverSourceHint: "_discoverSourceHint_bnt61_853",
5813
+ discoverSourceError: "_discoverSourceError_bnt61_867",
5814
+ discoverSourceForm: "_discoverSourceForm_bnt61_873",
5815
+ discoverGrow: "_discoverGrow_bnt61_879",
5816
+ discoverField: "_discoverField_bnt61_884",
5817
+ discoverFieldLabel: "_discoverFieldLabel_bnt61_890",
5818
+ discoverConfirmHead: "_discoverConfirmHead_bnt61_895",
5819
+ discoverSkeletonFill: "_discoverSkeletonFill_bnt61_901",
5820
+ "wb-skeleton": "_wb-skeleton_bnt61_1",
5821
+ discoverSkeletonBar: "_discoverSkeletonBar_bnt61_910",
5822
+ discoverSkeletonTitle: "_discoverSkeletonTitle_bnt61_917",
5823
+ discoverSkeletonDesc: "_discoverSkeletonDesc_bnt61_921"
5746
5824
  };
5747
5825
  //#endregion
5748
5826
  //#region src/app/layouts/market/discover-states.tsx
@@ -5766,6 +5844,13 @@ function DiscoverSkeleton({ label }) {
5766
5844
  function DiscoverEmptyText({ text }) {
5767
5845
  return /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.discoverMuted }, text);
5768
5846
  }
5847
+ function DiscoverLoading({ label }) {
5848
+ return /* @__PURE__ */ createElement("p", {
5849
+ className: MarketPage_module_default.discoverLoading,
5850
+ role: "status",
5851
+ "aria-live": "polite"
5852
+ }, /* @__PURE__ */ createElement(StateDot, { state: "ongoing" }), label);
5853
+ }
5769
5854
  function DiscoverFailure({ t, text, onRetry }) {
5770
5855
  return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverFailure }, /* @__PURE__ */ createElement("p", {
5771
5856
  className: MarketPage_module_default.discoverError,
@@ -5834,6 +5919,18 @@ function sharedRowKind(row) {
5834
5919
  return row.kind === "extension" ? "plugin" : "lib";
5835
5920
  }
5836
5921
  //#endregion
5922
+ //#region src/app/layouts/rightbar/market-names.ts
5923
+ function namesOf(t, modules, titleOf) {
5924
+ const shown = /* @__PURE__ */ new Map();
5925
+ for (const module of modules) {
5926
+ const key = unitTitleKey(module.unit);
5927
+ const live = t(key);
5928
+ const name = live !== key && live !== "" ? live : titleOf(module.title);
5929
+ if (name !== "") shown.set(module.unit, name);
5930
+ }
5931
+ return shown;
5932
+ }
5933
+ //#endregion
5837
5934
  //#region src/app/layouts/rightbar/market-view-text.ts
5838
5935
  var PROGRESS_KEY = {
5839
5936
  install: "panels.market.installing",
@@ -5844,7 +5941,9 @@ var PROGRESS_KEY = {
5844
5941
  "update-dependency": "panels.market.updating",
5845
5942
  "update-plugin": "panels.market.updating",
5846
5943
  "uninstall-plugin": "panels.market.uninstalling",
5847
- "update-workbench": "panels.market.updating"
5944
+ "update-workbench": "panels.market.updating",
5945
+ "migrate-workbench": "panels.market.migrating",
5946
+ "dismiss-followup": "panels.market.dismissing"
5848
5947
  };
5849
5948
  var ACTION_LABEL_KEY = {
5850
5949
  install: "panels.market.install",
@@ -5855,7 +5954,9 @@ var ACTION_LABEL_KEY = {
5855
5954
  "update-dependency": "panels.market.update",
5856
5955
  "update-plugin": "panels.market.update",
5857
5956
  "uninstall-plugin": "panels.market.uninstall",
5858
- "update-workbench": "panels.market.update"
5957
+ "update-workbench": "panels.market.update",
5958
+ "migrate-workbench": "panels.market.migrateAction",
5959
+ "dismiss-followup": "panels.market.dismissFollowUp"
5859
5960
  };
5860
5961
  function holdOf(pending, application) {
5861
5962
  if (pending === null || pending.row === void 0) return void 0;
@@ -5903,12 +6004,9 @@ function withPinnedRow(rows, pinned) {
5903
6004
  function marketFootVisible(shown, installed) {
5904
6005
  return shown.length > 0 || installed.length > 0;
5905
6006
  }
5906
- function useMarketTitles(manifests, mocked) {
5907
- const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
5908
- useEffect(() => {
5909
- if (!mocked) setTitles((known) => mergeTitles(known, manifests));
5910
- }, [manifests, mocked]);
5911
- return titles;
6007
+ var NO_NAMES = /* @__PURE__ */ new Map();
6008
+ function marketNamesOf(t, modules, titleOf, mocked) {
6009
+ return mocked ? NO_NAMES : namesOf(t, modules, titleOf);
5912
6010
  }
5913
6011
  function useHeldRow(pending, backInRoster) {
5914
6012
  const [held, setHeld] = useState(void 0);
@@ -5944,10 +6042,11 @@ function pendingRowOf(input) {
5944
6042
  const { pending, removing } = input;
5945
6043
  if (removing === null || pending === null) return void 0;
5946
6044
  if (input.rows.some((row) => row.id === removing)) return void 0;
6045
+ const name = pending.label ?? input.names.get(removing);
5947
6046
  return {
5948
6047
  id: removing,
5949
- titleKey: pending.titleKey ?? input.titles.get(removing) ?? removing,
5950
- ...pending.label === void 0 ? {} : { label: pending.label },
6048
+ titleKey: pending.titleKey ?? removing,
6049
+ ...name === void 0 ? {} : { label: name },
5951
6050
  state: "installed",
5952
6051
  canInstall: false,
5953
6052
  canUpdate: false,
@@ -6064,49 +6163,120 @@ var updateActions = [
6064
6163
  "update-plugin",
6065
6164
  "update-workbench"
6066
6165
  ];
6166
+ function MigrationConfirm({ t, onConfirm, onCancel }) {
6167
+ const [acknowledged, setAcknowledged] = useState(false);
6168
+ return /* @__PURE__ */ createElement(RiskConfirmation, {
6169
+ open: true,
6170
+ title: t("panels.market.migrateConfirmTitle"),
6171
+ description: t("panels.market.migrateConfirmDetail"),
6172
+ acknowledgeLabel: t("panels.market.migrateConfirmAck"),
6173
+ cancelLabel: t("panels.market.confirmNo"),
6174
+ closeLabel: t("panels.market.confirmNo"),
6175
+ confirmLabel: t("panels.market.migrateConfirmYes"),
6176
+ acknowledged,
6177
+ onAcknowledgedChange: setAcknowledged,
6178
+ onCancel,
6179
+ onConfirm
6180
+ });
6181
+ }
6182
+ function DismissFollowUpConfirm({ t, onConfirm, onCancel }) {
6183
+ const [acknowledged, setAcknowledged] = useState(false);
6184
+ return /* @__PURE__ */ createElement(RiskConfirmation, {
6185
+ open: true,
6186
+ title: t("panels.market.dismissFollowUpTitle"),
6187
+ description: t("panels.market.dismissFollowUpDetail"),
6188
+ acknowledgeLabel: t("panels.market.dismissFollowUpAck"),
6189
+ cancelLabel: t("panels.market.confirmNo"),
6190
+ closeLabel: t("panels.market.confirmNo"),
6191
+ confirmLabel: t("panels.market.dismissFollowUpYes"),
6192
+ acknowledged,
6193
+ onAcknowledgedChange: setAcknowledged,
6194
+ onCancel,
6195
+ onConfirm
6196
+ });
6197
+ }
6198
+ function MarketLineDialogs({ t, migrationOpen, dismissOpen, onMigrationCancel, onMigrationConfirm, onDismissCancel, onDismissConfirm }) {
6199
+ return /* @__PURE__ */ createElement(Fragment, null, migrationOpen ? /* @__PURE__ */ createElement(MigrationConfirm, {
6200
+ t,
6201
+ onCancel: onMigrationCancel,
6202
+ onConfirm: onMigrationConfirm
6203
+ }) : null, dismissOpen ? /* @__PURE__ */ createElement(DismissFollowUpConfirm, {
6204
+ t,
6205
+ onCancel: onDismissCancel,
6206
+ onConfirm: onDismissConfirm
6207
+ }) : null);
6208
+ }
6209
+ function MarketLineStatus({ t, row, quiet }) {
6210
+ const stateText = t(MARKET_STATE_KEY[row.state]);
6211
+ const noteText = row.note === void 0 ? null : t(row.note.key, row.note.params);
6212
+ if (quiet) return null;
6213
+ return /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketStatus }, row.state === "checking" ? /* @__PURE__ */ createElement(Spinner, { size: 14 }) : /* @__PURE__ */ createElement(StateDot, {
6214
+ state: MARKET_DOT[row.state],
6215
+ size: 9
6216
+ }), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketStateText }, stateText), row.hint === void 0 ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("span", {
6217
+ className: MarketPage_module_default.marketSep,
6218
+ "aria-hidden": "true"
6219
+ }, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, t(row.hint))), noteText === null ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("span", {
6220
+ className: MarketPage_module_default.marketSep,
6221
+ "aria-hidden": "true"
6222
+ }, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, noteText)));
6223
+ }
6067
6224
  function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6068
6225
  const running = pending !== null && pending.id === row.id ? pending : null;
6069
6226
  const locked = pending !== null;
6227
+ const [migrationOpen, setMigrationOpen] = useState(false);
6228
+ const [dismissOpen, setDismissOpen] = useState(false);
6070
6229
  const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
6071
6230
  const actions = marketActions$1(row);
6072
6231
  const switchLocked = marketSwitchLocked(row);
6073
- const stateText = t(MARKET_STATE_KEY[row.state]);
6074
- const noteText = row.note === void 0 ? null : t(row.note.key, row.note.params);
6075
6232
  return /* @__PURE__ */ createElement("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ createElement("span", {
6076
6233
  className: MarketPage_module_default.marketIcon,
6077
6234
  "aria-hidden": "true"
6078
6235
  }, packageIcon(marketRowKind(row))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketName }, marketRowTitle(row, t), row.versionLabel === void 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketVersion }, row.versionLabel), row.version === void 0 || row.versionLabel !== void 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketVersion }, row.version.installed !== void 0 && row.version.latest !== void 0 && row.version.installed !== row.version.latest ? t("panels.market.versionArrow", {
6079
6236
  from: row.version.installed,
6080
6237
  to: row.version.latest
6081
- }) : row.version.installed ?? row.version.latest ?? ""), row.local === true ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketLocalTag }, t("panels.market.localMark")) : null), quiet ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketStatus }, row.state === "checking" ? /* @__PURE__ */ createElement(Spinner, { size: 14 }) : /* @__PURE__ */ createElement(StateDot, {
6082
- state: MARKET_DOT[row.state],
6083
- size: 9
6084
- }), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketStateText }, stateText), row.hint === void 0 ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("span", {
6085
- className: MarketPage_module_default.marketSep,
6086
- "aria-hidden": "true"
6087
- }, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, t(row.hint))), noteText === null ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("span", {
6088
- className: MarketPage_module_default.marketSep,
6089
- "aria-hidden": "true"
6090
- }, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, noteText)))), /* @__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) => {
6238
+ }) : row.version.installed ?? row.version.latest ?? ""), row.local === true ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketLocalTag }, t("panels.market.localMark")) : null), /* @__PURE__ */ createElement(MarketLineStatus, {
6239
+ t,
6240
+ row,
6241
+ quiet
6242
+ })), /* @__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) => {
6091
6243
  const danger = dangerActions.includes(action);
6092
6244
  const update = updateActions.includes(action);
6093
6245
  return /* @__PURE__ */ createElement(Button, {
6094
6246
  key: action,
6095
6247
  type: "button",
6096
6248
  size: "sm",
6097
- variant: action === "install" ? "primary" : "outline",
6249
+ variant: action === "install" || action === "migrate-workbench" ? "primary" : "outline",
6098
6250
  className: danger ? "wb-dangerAction" : update ? MarketPage_module_default.marketUpdateAction : void 0,
6099
6251
  icon: danger ? /* @__PURE__ */ createElement(IconTrashOutlineRegular, { size: 13 }) : void 0,
6100
6252
  "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
6101
6253
  disabled: locked,
6102
- onClick: () => onAct(action)
6254
+ onClick: () => {
6255
+ if (action === "migrate-workbench") setMigrationOpen(true);
6256
+ else if (action === "dismiss-followup") setDismissOpen(true);
6257
+ else onAct(action);
6258
+ }
6103
6259
  }, t(ACTION_LABEL_KEY[action]));
6104
6260
  })), row.defaultShown === void 0 ? null : /* @__PURE__ */ createElement(Tip, { label: t(switchLocked ? "panels.market.defaultLocked" : "panels.market.defaultHint") }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSwitchSeat }, /* @__PURE__ */ createElement(Switch, {
6105
6261
  checked: row.defaultShown,
6106
6262
  disabled: boardBusy === true || locked || switchLocked,
6107
6263
  label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
6108
6264
  onChange: (next) => onDefault?.(next)
6109
- })))), failure === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure));
6265
+ })))), failure === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure), /* @__PURE__ */ createElement(MarketLineDialogs, {
6266
+ t,
6267
+ migrationOpen,
6268
+ dismissOpen,
6269
+ onMigrationCancel: () => setMigrationOpen(false),
6270
+ onMigrationConfirm: () => {
6271
+ setMigrationOpen(false);
6272
+ onAct("migrate-workbench");
6273
+ },
6274
+ onDismissCancel: () => setDismissOpen(false),
6275
+ onDismissConfirm: () => {
6276
+ setDismissOpen(false);
6277
+ onAct("dismiss-followup");
6278
+ }
6279
+ }));
6110
6280
  }
6111
6281
  function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
6112
6282
  if (rows.length === 0) return null;
@@ -6421,10 +6591,13 @@ function marketActOf(options) {
6421
6591
  seats.setConfirming(null);
6422
6592
  seats.setFailed(null);
6423
6593
  seats.setNotice(null);
6424
- const outcome = await send(action === "update-dependency" ? {
6594
+ const outcome = await send(action === "dismiss-followup" ? {
6595
+ action,
6596
+ id: row?.followUp?.id ?? ""
6597
+ } : action === "update-dependency" ? {
6425
6598
  action,
6426
6599
  id
6427
- } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" ? {
6600
+ } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench" ? {
6428
6601
  action,
6429
6602
  name: row?.pkg ?? ""
6430
6603
  } : {
@@ -6442,6 +6615,21 @@ function marketActOf(options) {
6442
6615
  return;
6443
6616
  }
6444
6617
  const value = outcome.value;
6618
+ if (action === "dismiss-followup") {
6619
+ onChanged({ force: true });
6620
+ seats.setPending(null);
6621
+ seats.setHeld(void 0);
6622
+ seats.setNotice(t("panels.market.dismissed"));
6623
+ return;
6624
+ }
6625
+ if (action === "migrate-workbench") {
6626
+ const added = recordOf(value)?.["added"];
6627
+ onChanged({ force: true });
6628
+ seats.setPending(null);
6629
+ seats.setHeld(void 0);
6630
+ seats.setNotice(t("panels.market.migrateDone", { added: typeof added === "number" ? String(added) : "0" }));
6631
+ return;
6632
+ }
6445
6633
  const change = changeOf(value);
6446
6634
  const failure = updateVerdictText(updateVerdictOf({
6447
6635
  action,
@@ -6496,9 +6684,6 @@ var CONFIRM_UNINSTALL = [
6496
6684
  "remove-bundle",
6497
6685
  "uninstall-plugin"
6498
6686
  ];
6499
- function marketMigrationNotice(t, update) {
6500
- return update?.migration === "needed" ? t("panels.market.selfUpdateNeedsMigrate") : null;
6501
- }
6502
6687
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6503
6688
  const [acknowledged, setAcknowledged] = useState(false);
6504
6689
  return /* @__PURE__ */ createElement(RiskConfirmation, {
@@ -6568,8 +6753,8 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
6568
6753
  }));
6569
6754
  }
6570
6755
  function useMarketScene(input) {
6571
- const { manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
6572
- const titles = useMarketTitles(manifests, mock !== void 0);
6756
+ const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
6757
+ const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
6573
6758
  const catalog = mock?.manifests ?? manifests;
6574
6759
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
6575
6760
  const effective = mock === void 0 ? capabilities : mock.capabilities;
@@ -6583,13 +6768,13 @@ function useMarketScene(input) {
6583
6768
  const pinned = pinnedRowOf(pending, steady.held);
6584
6769
  const busyId = heldIdOf(pending, steady.held);
6585
6770
  return {
6586
- titles,
6771
+ names,
6587
6772
  catalog,
6588
6773
  effective,
6589
6774
  updateMap,
6590
6775
  rows,
6591
6776
  shared,
6592
- installedList: installedRows((mock?.installed ?? installed ?? []).filter((module) => module.unit !== pinned?.id && (!(settling?.has(module.unit) ?? false) || module.unit === busyId) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), titles, byDefault, changed),
6777
+ installedList: installedRows((mock?.installed ?? installed ?? []).filter((module) => module.unit !== pinned?.id && (!(settling?.has(module.unit) ?? false) || module.unit === busyId) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), mock === void 0 ? names : void 0, byDefault, changed),
6593
6778
  byDefault,
6594
6779
  steady,
6595
6780
  pinned,
@@ -6597,12 +6782,14 @@ function useMarketScene(input) {
6597
6782
  busyId
6598
6783
  };
6599
6784
  }
6600
- function MarketView({ t, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
6785
+ function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
6601
6786
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
6602
6787
  mock,
6603
6788
  onPending
6604
6789
  });
6605
- const { titles, effective, updateMap, rows, shared, installedList, byDefault, steady, pinned, removing, busyId } = useMarketScene({
6790
+ const { names, effective, updateMap, rows, shared, installedList, byDefault, steady, pinned, removing, busyId } = useMarketScene({
6791
+ t,
6792
+ titleOf,
6606
6793
  manifests,
6607
6794
  installable,
6608
6795
  capabilities,
@@ -6647,7 +6834,7 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
6647
6834
  pending,
6648
6835
  removing,
6649
6836
  rows,
6650
- titles
6837
+ names
6651
6838
  });
6652
6839
  const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
6653
6840
  const shown = withPinnedRow(pendingRow === void 0 ? rows : [...rows, pendingRow], pinned);
@@ -6675,21 +6862,18 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
6675
6862
  send: (body) => provision.send(body),
6676
6863
  onChanged
6677
6864
  });
6678
- const landed = pendingLanded(pending, updateMap, effective, workbench?.installed, shared, pluginSource === null ? null : pluginList, {
6679
- units: installed === void 0 ? null : new Set(installed.map((module) => module.unit)),
6680
- plugins: pluginSource === null ? null : new Set(pluginList.map((row) => row.id))
6681
- });
6682
- const effectiveSelfUpdate = mock?.selfUpdate ?? selfUpdate;
6683
6865
  useSettleHold({
6684
6866
  pending,
6685
- landed,
6867
+ landed: pendingLanded(pending, updateMap, effective, workbench?.installed, shared, pluginSource === null ? null : pluginList, {
6868
+ units: installed === void 0 ? null : new Set(installed.map((module) => module.unit)),
6869
+ plugins: pluginSource === null ? null : new Set(pluginList.map((row) => row.id))
6870
+ }),
6686
6871
  t,
6687
6872
  onChanged,
6688
- selfUpdate: effectiveSelfUpdate,
6873
+ selfUpdate: mock?.selfUpdate ?? selfUpdate,
6689
6874
  setPending,
6690
6875
  setFailed
6691
6876
  });
6692
- const migrationNotice = marketMigrationNotice(t, effectiveSelfUpdate);
6693
6877
  const settled = marketSettled(freshness, installedRead);
6694
6878
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
6695
6879
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ createElement(MarketChecking, { t });
@@ -6703,7 +6887,7 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
6703
6887
  shared,
6704
6888
  pending,
6705
6889
  failed,
6706
- notice: notice ?? migrationNotice,
6890
+ notice,
6707
6891
  act,
6708
6892
  onConfirming: setConfirming,
6709
6893
  setDefault,
@@ -6919,7 +7103,7 @@ function sourceFromUrl(raw) {
6919
7103
  if (url === "" || url.includes("#") || hasCredentials(url)) return { ok: false };
6920
7104
  if (HTTP.test(url)) {
6921
7105
  const asGit = REPO_FILE.test(url);
6922
- const label = hostOf(url);
7106
+ const label = asGit ? sourceSuffix(url) || hostOf(url) : hostOf(url);
6923
7107
  if (label === "") return { ok: false };
6924
7108
  return {
6925
7109
  ok: true,
@@ -6952,6 +7136,13 @@ function sameSourceUrl(left, right) {
6952
7136
  function sourceSuffix(url) {
6953
7137
  return (withoutTrailingSlash(url).split(/[/:]/).filter((part) => part !== "").pop() ?? "").replace(/\.git$/, "");
6954
7138
  }
7139
+ function sourceTransport(url) {
7140
+ if (GIT_SSH.test(url) || /^ssh:\/\//i.test(url) || /^git\+ssh:\/\//i.test(url)) return "ssh";
7141
+ if (/^git:\/\//i.test(url)) return "git";
7142
+ if (/^https:\/\//i.test(url)) return "https";
7143
+ if (/^http:\/\//i.test(url)) return "http";
7144
+ return "";
7145
+ }
6955
7146
  function sourceLabelsOf(sources) {
6956
7147
  const counts = /* @__PURE__ */ new Map();
6957
7148
  for (const source of sources) counts.set(source.label, (counts.get(source.label) ?? 0) + 1);
@@ -6962,7 +7153,8 @@ function sourceLabelsOf(sources) {
6962
7153
  continue;
6963
7154
  }
6964
7155
  const suffix = sourceSuffix(source.url);
6965
- labels.set(source.id, suffix === "" ? source.url : `${source.label} · ${suffix}`);
7156
+ const detail = suffix !== "" && suffix !== source.label ? suffix : sourceTransport(source.url);
7157
+ labels.set(source.id, detail === "" ? source.url : `${detail} · ${source.label}`);
6966
7158
  }
6967
7159
  return labels;
6968
7160
  }
@@ -7089,11 +7281,15 @@ function DiscoverVersions({ t, locale, entry, onInstall }) {
7089
7281
  var MARKET_DISCOVER_ROUTE = "panels/market-discover";
7090
7282
  var MARKET_DOC_ROUTE = "panels/market-doc";
7091
7283
  var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
7284
+ var MARKET_SOURCES_ROUTE = "panels/market-sources";
7092
7285
  //#endregion
7093
7286
  //#region src/shared/hooks/market-queries.ts
7094
7287
  function readMarketDiscover(options = {}) {
7095
7288
  return apiGet(MARKET_DISCOVER_ROUTE, options.force === true ? { force: "1" } : {});
7096
7289
  }
7290
+ function readMarketSources() {
7291
+ return apiGet(MARKET_SOURCES_ROUTE);
7292
+ }
7097
7293
  function readMarketDoc(name, version, kind) {
7098
7294
  return apiGet(MARKET_DOC_ROUTE, {
7099
7295
  name,
@@ -7101,10 +7297,11 @@ function readMarketDoc(name, version, kind) {
7101
7297
  kind
7102
7298
  });
7103
7299
  }
7104
- function readPublishPreview(unit, version) {
7300
+ function readPublishPreview(unit, version, author) {
7105
7301
  return apiGet(MARKET_PUBLISH_PREVIEW_ROUTE, {
7106
7302
  unit,
7107
- ...version === void 0 || version === "" ? {} : { version }
7303
+ ...version === void 0 || version === "" ? {} : { version },
7304
+ ...author === void 0 || author === "" ? {} : { author }
7108
7305
  });
7109
7306
  }
7110
7307
  //#endregion
@@ -7358,6 +7555,7 @@ function DiscoverSourcesDialog(props) {
7358
7555
  const [url, setUrl] = useState("");
7359
7556
  const [problem, setProblem] = useState(null);
7360
7557
  const pending = props.busy || props.adding;
7558
+ const selectedVisible = props.sources.some((source) => source.id === props.selected);
7361
7559
  const add = () => {
7362
7560
  if (pending) return;
7363
7561
  const parsed = sourceFromUrl(url);
@@ -7380,13 +7578,29 @@ function DiscoverSourcesDialog(props) {
7380
7578
  closeLabel: t("panels.discover.close"),
7381
7579
  description: t("panels.discover.sourcesIntro"),
7382
7580
  className: MarketPage_module_default.discoverDialog
7383
- }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverDialogBody }, props.sources.length === 0 ? null : /* @__PURE__ */ createElement("ul", {
7581
+ }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverDialogBody }, props.loading && !selectedVisible ? props.slow ? /* @__PURE__ */ createElement("p", {
7582
+ className: MarketPage_module_default.discoverNotice,
7583
+ role: "note"
7584
+ }, /* @__PURE__ */ createElement(IconWarningOutlineRegular, {
7585
+ size: 14,
7586
+ "aria-hidden": "true"
7587
+ }), /* @__PURE__ */ createElement("span", null, t("panels.discover.slowHint"))) : /* @__PURE__ */ createElement(DiscoverLoading, { label: t("panels.discover.loading") }) : null, props.sources.length === 0 ? null : /* @__PURE__ */ createElement("ul", {
7384
7588
  className: MarketPage_module_default.discoverSourceList,
7385
7589
  "aria-label": t("panels.discover.sourcesLabel")
7386
7590
  }, props.sources.map((source) => /* @__PURE__ */ createElement("li", {
7387
7591
  key: source.id,
7388
7592
  className: MarketPage_module_default.discoverSourceRow
7389
- }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverStrong }, source.label), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverMeta }, source.url), props.problem?.id === source.id ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverSourceError }, props.problem.detail) : null), /* @__PURE__ */ createElement(Tooltip, {
7593
+ }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverStrong }, source.label), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverMeta }, source.url), !props.loading && props.problem?.id === source.id ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverSourceError }, props.problem.detail) : null), source.id === props.selected ? props.loading ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverSourceLoading }, /* @__PURE__ */ createElement(StateDot, { state: "ongoing" }), t("panels.discover.loading")) : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverSourceCurrent }, t("panels.discover.sourceCurrent")) : /* @__PURE__ */ createElement(Button, {
7594
+ type: "button",
7595
+ variant: "ghost",
7596
+ size: "sm",
7597
+ "aria-label": t("panels.discover.useSourceNamed", { label: source.label }),
7598
+ disabled: pending,
7599
+ onClick: () => {
7600
+ props.onSelect(source.id);
7601
+ props.onClose();
7602
+ }
7603
+ }, t("panels.discover.useSource")), /* @__PURE__ */ createElement(Tooltip, {
7390
7604
  label: t("panels.discover.removeSource"),
7391
7605
  side: "bottom",
7392
7606
  portal: true,
@@ -7399,7 +7613,13 @@ function DiscoverSourcesDialog(props) {
7399
7613
  "aria-label": t("panels.discover.removeSourceNamed", { url: source.url }),
7400
7614
  disabled: pending,
7401
7615
  onClick: () => props.onRemove(source.id)
7402
- }))))), /* @__PURE__ */ createElement("form", {
7616
+ })), source.id === props.selected && props.loading && props.slow ? /* @__PURE__ */ createElement("span", {
7617
+ className: MarketPage_module_default.discoverSourceHint,
7618
+ role: "note"
7619
+ }, /* @__PURE__ */ createElement(IconWarningOutlineRegular, {
7620
+ size: 12,
7621
+ "aria-hidden": "true"
7622
+ }), t("panels.discover.slowHint")) : null))), /* @__PURE__ */ createElement("form", {
7403
7623
  className: MarketPage_module_default.discoverSourceForm,
7404
7624
  onSubmit: (event) => {
7405
7625
  event.preventDefault();
@@ -7442,12 +7662,16 @@ function DiscoverDialogs({ t, d }) {
7442
7662
  t,
7443
7663
  open: d.manageOpen,
7444
7664
  sources: d.sources,
7665
+ selected: d.selected,
7666
+ loading: d.loading,
7667
+ slow: d.slow,
7445
7668
  problem: d.problem,
7446
7669
  busy: d.busy,
7447
7670
  adding: d.addingSource,
7448
7671
  onClose: () => d.setManageOpen(false),
7449
7672
  onAdd: d.addSource,
7450
- onRemove: d.removeSourceById
7673
+ onRemove: d.removeSourceById,
7674
+ onSelect: d.selectSource
7451
7675
  }), /* @__PURE__ */ createElement(DiscoverConfirm, {
7452
7676
  t,
7453
7677
  locale: d.locale,
@@ -7544,6 +7768,7 @@ function DiscoverToolbar(props) {
7544
7768
  value: text,
7545
7769
  placeholder: t("panels.discover.search"),
7546
7770
  "aria-label": t("panels.discover.search"),
7771
+ disabled: props.loading,
7547
7772
  onChange: (event) => setText(event.currentTarget.value)
7548
7773
  }), props.labels.length === 0 ? null : /* @__PURE__ */ createElement(Menu, {
7549
7774
  className: MarketPage_module_default.discoverLabels,
@@ -7592,6 +7817,7 @@ function DiscoverToolbar(props) {
7592
7817
  variant: "ghost",
7593
7818
  "aria-haspopup": "menu",
7594
7819
  "aria-expanded": open === "sort",
7820
+ disabled: props.loading,
7595
7821
  onClick: () => setOpen(open === "sort" ? null : "sort")
7596
7822
  }, t("panels.discover.sortWith", { label: sortName }), /* @__PURE__ */ createElement(IconChevronDownOutlineRegular, {
7597
7823
  size: 12,
@@ -7630,6 +7856,12 @@ var SHIPPED = [
7630
7856
  "restart-required",
7631
7857
  "overridden"
7632
7858
  ];
7859
+ function sourceRowsOf(sources) {
7860
+ return sources.map((source) => ({
7861
+ ...source,
7862
+ writable: source.kind === "http" ? false : null
7863
+ }));
7864
+ }
7633
7865
  function installVerdictOf(value, t) {
7634
7866
  const change = changeOf(value);
7635
7867
  if (change === void 0) return { kind: "quiet" };
@@ -7643,6 +7875,7 @@ function installVerdictOf(value, t) {
7643
7875
  function useDiscover(t, active, onInstalled) {
7644
7876
  const [payload, setPayload] = useState(null);
7645
7877
  const [loading, setLoading] = useState(true);
7878
+ const [slow, setSlow] = useState(false);
7646
7879
  const [failure, setFailure] = useState(null);
7647
7880
  const [query, setQuery] = useState("");
7648
7881
  const [category, setCategory] = useState(null);
@@ -7655,7 +7888,10 @@ function useDiscover(t, active, onInstalled) {
7655
7888
  const [choice, setChoice] = useState(null);
7656
7889
  const [notice, setNotice] = useState(null);
7657
7890
  const [addingSource, setAddingSource] = useState(false);
7891
+ const [knownSources, setKnownSources] = useState(null);
7658
7892
  const loaded = useRef(false);
7893
+ const loadTicket = useRef(0);
7894
+ const sourceTicket = useRef(0);
7659
7895
  const locale = useMemo(() => localeNow(), []);
7660
7896
  const sources = useHostWrite({
7661
7897
  channel: "actions",
@@ -7666,11 +7902,27 @@ function useDiscover(t, active, onInstalled) {
7666
7902
  channel: "provision",
7667
7903
  networkText: t("panels.discover.failed")
7668
7904
  });
7905
+ const loadSources = useCallback(async () => {
7906
+ const ticket = sourceTicket.current + 1;
7907
+ sourceTicket.current = ticket;
7908
+ const response = await readMarketSources().catch(() => null);
7909
+ if (sourceTicket.current !== ticket) return;
7910
+ if (response === null || !response.ok) return;
7911
+ setKnownSources({
7912
+ sources: sourceRowsOf(response.sources),
7913
+ selected: response.selected
7914
+ });
7915
+ }, []);
7669
7916
  const load = useCallback(async (force = false) => {
7917
+ const ticket = loadTicket.current + 1;
7918
+ loadTicket.current = ticket;
7670
7919
  setLoading(true);
7920
+ setSlow(false);
7671
7921
  setFailure(null);
7672
7922
  const response = await readMarketDiscover({ force }).catch(() => null);
7923
+ if (loadTicket.current !== ticket) return;
7673
7924
  setLoading(false);
7925
+ setSlow(false);
7674
7926
  if (response === null || !response.ok) {
7675
7927
  setFailure(t("panels.discover.unreadable"));
7676
7928
  return;
@@ -7678,11 +7930,29 @@ function useDiscover(t, active, onInstalled) {
7678
7930
  setPayload(response);
7679
7931
  setLimit(50);
7680
7932
  }, [t]);
7933
+ const beginSwitch = () => {
7934
+ loadTicket.current += 1;
7935
+ sourceTicket.current += 1;
7936
+ setFailure(null);
7937
+ setPayload(null);
7938
+ setLoading(true);
7939
+ setSlow(false);
7940
+ };
7681
7941
  useEffect(() => {
7682
7942
  if (!active || loaded.current) return;
7683
7943
  loaded.current = true;
7944
+ loadSources();
7684
7945
  load();
7685
- }, [active, load]);
7946
+ }, [
7947
+ active,
7948
+ load,
7949
+ loadSources
7950
+ ]);
7951
+ useEffect(() => {
7952
+ if (!loading) return void 0;
7953
+ const timer = setTimeout(() => setSlow(true), 8e3);
7954
+ return () => clearTimeout(timer);
7955
+ }, [loading]);
7686
7956
  useEffect(() => subscribeFactRevision(CAPABILITY_FACT, () => {
7687
7957
  if (!loaded.current) return;
7688
7958
  load(true);
@@ -7736,6 +8006,8 @@ function useDiscover(t, active, onInstalled) {
7736
8006
  const done = typeof value?.["branch"] === "string" ? value["branch"] : branch;
7737
8007
  setInitOpen(false);
7738
8008
  setNotice(t("panels.discover.initDone", { branch: done }));
8009
+ beginSwitch();
8010
+ await loadSources();
7739
8011
  await load(true);
7740
8012
  });
7741
8013
  };
@@ -7753,8 +8025,11 @@ function useDiscover(t, active, onInstalled) {
7753
8025
  id
7754
8026
  },
7755
8027
  select: true
7756
- }).then(async (outcome) => {
7757
- if (outcome.ok) await load(true);
8028
+ }).then((outcome) => {
8029
+ if (!outcome.ok) return;
8030
+ beginSwitch();
8031
+ loadSources();
8032
+ load(true);
7758
8033
  }).finally(() => setAddingSource(false));
7759
8034
  };
7760
8035
  const removeSourceById = (id) => {
@@ -7766,6 +8041,8 @@ function useDiscover(t, active, onInstalled) {
7766
8041
  }).then(async (outcome) => {
7767
8042
  if (!outcome.ok) return;
7768
8043
  setDetail(null);
8044
+ beginSwitch();
8045
+ await loadSources();
7769
8046
  await load(true);
7770
8047
  });
7771
8048
  };
@@ -7778,11 +8055,23 @@ function useDiscover(t, active, onInstalled) {
7778
8055
  setSelectedLabels([]);
7779
8056
  setSort("default");
7780
8057
  setDetail(null);
8058
+ beginSwitch();
8059
+ setKnownSources((current) => current === null ? current : {
8060
+ sources: current.sources,
8061
+ selected: id
8062
+ });
7781
8063
  sources.send({
7782
8064
  action: "select",
7783
8065
  id
7784
8066
  }).then(async (outcome) => {
7785
- if (outcome.ok) await load(true);
8067
+ if (!outcome.ok) {
8068
+ setLoading(false);
8069
+ setSlow(false);
8070
+ loadSources();
8071
+ return;
8072
+ }
8073
+ await loadSources();
8074
+ await load(true);
7786
8075
  });
7787
8076
  };
7788
8077
  const install = () => {
@@ -7817,9 +8106,10 @@ function useDiscover(t, active, onInstalled) {
7817
8106
  locale,
7818
8107
  payload,
7819
8108
  loading,
8109
+ slow,
7820
8110
  failure,
7821
- sources: payload?.sources ?? [],
7822
- selected: payload?.selected ?? null,
8111
+ sources: payload?.sources ?? knownSources?.sources ?? [],
8112
+ selected: payload?.selected ?? knownSources?.selected ?? null,
7823
8113
  entries,
7824
8114
  shown,
7825
8115
  total: sorted.length,
@@ -7890,35 +8180,45 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
7890
8180
  t,
7891
8181
  d
7892
8182
  });
7893
- if (d.payload === null) return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverPage }, d.loading ? /* @__PURE__ */ createElement(DiscoverSkeleton, { label: t("panels.discover.loading") }) : /* @__PURE__ */ createElement(DiscoverFailure, {
8183
+ const slowHint = !d.manageOpen && d.loading && d.slow ? /* @__PURE__ */ createElement("p", {
8184
+ className: MarketPage_module_default.discoverNotice,
8185
+ role: "note"
8186
+ }, /* @__PURE__ */ createElement(IconWarningOutlineRegular, {
8187
+ size: 14,
8188
+ "aria-hidden": "true"
8189
+ }), /* @__PURE__ */ createElement("span", null, t("panels.discover.slowHint"))) : null;
8190
+ if (d.payload === null) return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverPage }, d.sources.length === 0 ? null : toolbar, d.loading ? /* @__PURE__ */ createElement(DiscoverSkeleton, { label: t("panels.discover.loading") }) : /* @__PURE__ */ createElement(DiscoverFailure, {
7894
8191
  t,
7895
8192
  text: t("panels.discover.sourcesFailed"),
7896
8193
  onRetry: d.reload
7897
- }), dialogs);
8194
+ }), slowHint, d.writeFailed === null ? null : /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.discoverError }, d.writeFailed), dialogs);
7898
8195
  if (d.payload.state === "no-source") return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverPage }, /* @__PURE__ */ createElement(DiscoverNoSource, {
7899
8196
  t,
7900
8197
  onAdd: () => d.setManageOpen(true)
7901
8198
  }), dialogs);
7902
- const readFailed = d.payload.state === "invalid" ? t("panels.discover.invalid") : d.payload.state === "unreadable" ? t("panels.discover.unreadable") : null;
8199
+ const failed = d.payload.state === "invalid" || d.payload.state === "unreadable";
8200
+ const readFailed = !d.loading && failed ? d.payload.state === "invalid" ? t("panels.discover.invalid") : t("panels.discover.unreadable") : null;
8201
+ const uninitialized = d.loading ? null : d.uninitialized;
8202
+ const retrying = d.loading && failed;
7903
8203
  const emptyText = unfiltered({
7904
8204
  query: d.query,
7905
8205
  category: d.category,
7906
8206
  labels: d.selectedLabels
7907
8207
  }) ? t("panels.discover.empty") : t("panels.discover.noMatch");
7908
- return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverPage }, toolbar, d.payload.stale === true ? /* @__PURE__ */ createElement("p", {
8208
+ return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverPage }, toolbar, d.loading && !d.manageOpen ? /* @__PURE__ */ createElement(DiscoverLoading, { label: t("panels.discover.loading") }) : null, slowHint, !d.loading && d.payload.stale === true ? /* @__PURE__ */ createElement("p", {
7909
8209
  className: MarketPage_module_default.discoverNotice,
7910
8210
  role: "note"
7911
8211
  }, /* @__PURE__ */ createElement(IconWarningOutlineRegular, {
7912
8212
  size: 14,
7913
8213
  "aria-hidden": "true"
7914
- }), /* @__PURE__ */ createElement("span", null, t("panels.discover.stale"))) : null, d.uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ createElement(DiscoverFailure, {
8214
+ }), /* @__PURE__ */ createElement("span", null, t("panels.discover.stale"))) : null, uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ createElement(DiscoverFailure, {
7915
8215
  t,
7916
8216
  text: readFailed,
7917
8217
  onRetry: d.reload
7918
8218
  }) : /* @__PURE__ */ createElement(DiscoverUninitialized, {
7919
8219
  t,
7920
- path: d.uninitialized.path,
7921
- empty: d.uninitialized.empty,
8220
+ path: uninitialized.path,
8221
+ empty: uninitialized.empty,
7922
8222
  onInit: () => d.setInitOpen(true)
7923
8223
  }), d.notice === null ? null : /* @__PURE__ */ createElement("p", {
7924
8224
  className: MarketPage_module_default.discoverNotice,
@@ -7937,7 +8237,7 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
7937
8237
  version
7938
8238
  }),
7939
8239
  onShowInstalled
7940
- }) : readFailed !== null || d.uninitialized !== null ? null : d.shown.length === 0 ? /* @__PURE__ */ createElement(DiscoverEmptyText, { text: emptyText }) : /* @__PURE__ */ createElement(DiscoverRows, {
8240
+ }) : readFailed !== null || uninitialized !== null || retrying ? null : d.shown.length === 0 ? /* @__PURE__ */ createElement(DiscoverEmptyText, { text: emptyText }) : /* @__PURE__ */ createElement(DiscoverRows, {
7941
8241
  t,
7942
8242
  locale: d.locale,
7943
8243
  entries: d.shown,
@@ -8718,7 +9018,7 @@ function newRequestId() {
8718
9018
  return crypto.randomUUID();
8719
9019
  }
8720
9020
  function useAddModule(options) {
8721
- const { open, onInstalled, failedText } = options;
9021
+ const { onInstalled, failedText } = options;
8722
9022
  const [spec, setSpec] = useState("");
8723
9023
  const [choice, setChoice] = useState({
8724
9024
  kind: "default",
@@ -8749,7 +9049,6 @@ function useAddModule(options) {
8749
9049
  networkText: failedText
8750
9050
  });
8751
9051
  useEffect(() => {
8752
- if (!open) return void 0;
8753
9052
  let alive = true;
8754
9053
  readBundleRegistries().then((response) => {
8755
9054
  if (!alive) return;
@@ -8758,19 +9057,8 @@ function useAddModule(options) {
8758
9057
  return () => {
8759
9058
  alive = false;
8760
9059
  };
8761
- }, [open]);
9060
+ }, []);
8762
9061
  const registry = registryOf(choice, custom);
8763
- useEffect(() => {
8764
- if (open) return;
8765
- generationRef.current += 1;
8766
- setGuideOpen(false);
8767
- setRegistryOpen(false);
8768
- setProblem(null);
8769
- setPreview(null);
8770
- setOutcome(null);
8771
- setFailure(null);
8772
- setPhase("idle");
8773
- }, [open]);
8774
9062
  const check = useCallback(() => {
8775
9063
  const wanted = spec.trim();
8776
9064
  if (wanted === "") return;
@@ -8907,15 +9195,21 @@ function useAddModule(options) {
8907
9195
  //#endregion
8908
9196
  //#region src/app/layouts/market/AddModuleDialog.tsx
8909
9197
  function AddModuleDialog({ t, open, onClose, onInstalled }) {
9198
+ if (!open) return null;
9199
+ return /* @__PURE__ */ createElement(AddModuleContent, {
9200
+ t,
9201
+ onClose,
9202
+ onInstalled
9203
+ });
9204
+ }
9205
+ function AddModuleContent({ t, onClose, onInstalled }) {
8910
9206
  const real = useAddModule({
8911
- open,
8912
9207
  onInstalled,
8913
9208
  failedText: t("panels.failed")
8914
9209
  });
8915
9210
  const devAdd = devSurface.useStrips("addModule", []);
8916
9211
  const mock = devAdd.current;
8917
9212
  const state = mock === void 0 ? real : devSurface.addModuleState(real, mock);
8918
- if (!open) return null;
8919
9213
  const installing = state.phase === "installing";
8920
9214
  const checking = state.phase === "inspecting";
8921
9215
  const empty = state.spec.trim() === "";
@@ -8975,7 +9269,7 @@ function AddModuleDialog({ t, open, onClose, onInstalled }) {
8975
9269
  onClick: () => state.install()
8976
9270
  }, t("panels.market.add.retry")) : null) : null);
8977
9271
  return /* @__PURE__ */ createElement(Modal, {
8978
- open,
9272
+ open: true,
8979
9273
  onClose: () => {
8980
9274
  if (!installing) onClose();
8981
9275
  },
@@ -9048,7 +9342,7 @@ function makeMarketEntryIcon(units) {
9048
9342
  return /* @__PURE__ */ createElement(IconModules, { size });
9049
9343
  };
9050
9344
  }
9051
- function MarketPanel({ t, units }) {
9345
+ function MarketPanel({ t, units, titleOf }) {
9052
9346
  const manifests = useLiveManifests(units);
9053
9347
  const installable = useInstallableUnits(units);
9054
9348
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
@@ -9146,6 +9440,7 @@ function MarketPanel({ t, units }) {
9146
9440
  }, /* @__PURE__ */ createElement(MarketView, {
9147
9441
  key: `${mock?.id ?? "real-market"}-${mockNonce}`,
9148
9442
  t,
9443
+ titleOf,
9149
9444
  manifests,
9150
9445
  installable,
9151
9446
  capabilities,
@@ -9181,6 +9476,10 @@ function MarketPanel({ t, units }) {
9181
9476
  }
9182
9477
  function registerMarketPanel(ctx, units) {
9183
9478
  const t = ctx.locale.bind(LOCALE_NS);
9479
+ const titleOf = (title) => title === void 0 ? "" : ctx.locale.resolveText?.({
9480
+ zh: title.zh,
9481
+ en: title.en
9482
+ }) ?? title.zh;
9184
9483
  ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({
9185
9484
  name: "sidebar.panellist",
9186
9485
  id: MARKET_PANEL_ID,
@@ -9192,7 +9491,10 @@ function registerMarketPanel(ctx, units) {
9192
9491
  name: "main",
9193
9492
  key: MARKET_PANEL_ID,
9194
9493
  locale: LOCALE_NS,
9195
- inject: () => ({ units })
9494
+ inject: () => ({
9495
+ units,
9496
+ titleOf
9497
+ })
9196
9498
  }, MarketPanel));
9197
9499
  }
9198
9500
  //#endregion
@@ -9244,6 +9546,14 @@ function flush() {
9244
9546
  }).catch(() => void 0);
9245
9547
  }
9246
9548
  //#endregion
9549
+ //#region src/shared/hooks/resource-view.ts
9550
+ var IDLE = { phase: "idle" };
9551
+ var LOADING = { phase: "loading" };
9552
+ function resourceViewOf(enabled, current, identity) {
9553
+ if (!enabled) return IDLE;
9554
+ return current.identity === identity ? current.state : LOADING;
9555
+ }
9556
+ //#endregion
9247
9557
  //#region src/shared/hooks/use-api-resource.ts
9248
9558
  var use_api_resource_exports = /* @__PURE__ */ __exportAll({
9249
9559
  readKeyOf: () => readKeyOf,
@@ -9315,7 +9625,10 @@ function useApiResource(route, query, refreshToken, options = {}) {
9315
9625
  const identity = resourceIdentity(route, query, options.key);
9316
9626
  const factRev = useFactRevision(options.fact ?? factOfRoute(route));
9317
9627
  const key = readKeyOf(identity, refreshToken, factRev);
9318
- const [state, setState] = useState(() => enabled ? { phase: "loading" } : { phase: "idle" });
9628
+ const [current, setCurrent] = useState(() => ({
9629
+ identity,
9630
+ state: enabled ? LOADING : IDLE
9631
+ }));
9319
9632
  const lastIdentity = useRef(null);
9320
9633
  const queryRef = useRef(query);
9321
9634
  useEffect(() => {
@@ -9324,17 +9637,23 @@ function useApiResource(route, query, refreshToken, options = {}) {
9324
9637
  useEffect(() => {
9325
9638
  if (!enabled) {
9326
9639
  lastIdentity.current = null;
9327
- setState({ phase: "idle" });
9328
9640
  return;
9329
9641
  }
9330
9642
  let cancelled = false;
9643
+ const put = (state) => setCurrent({
9644
+ identity,
9645
+ state
9646
+ });
9331
9647
  const sameIdentity = lastIdentity.current === identity;
9332
9648
  lastIdentity.current = identity;
9333
- setState((prev) => sameIdentity && prev.value !== void 0 ? {
9334
- phase: "loading",
9335
- value: prev.value,
9336
- ...prev.at === void 0 ? {} : { at: prev.at }
9337
- } : { phase: "loading" });
9649
+ setCurrent((prev) => ({
9650
+ identity,
9651
+ state: sameIdentity && prev.state.value !== void 0 ? {
9652
+ phase: "loading",
9653
+ value: prev.state.value,
9654
+ ...prev.state.at === void 0 ? {} : { at: prev.state.at }
9655
+ } : LOADING
9656
+ }));
9338
9657
  const flight = requestResource(route, queryRef.current, key);
9339
9658
  const owner = options.report === false ? null : unitOfRoute(route);
9340
9659
  if (owner !== null) reportPanelRead({
@@ -9345,7 +9664,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9345
9664
  flight.task.then((response) => {
9346
9665
  if (cancelled) return;
9347
9666
  if (response.ok) {
9348
- setState({
9667
+ put({
9349
9668
  phase: "ready",
9350
9669
  value: response,
9351
9670
  at: Date.now()
@@ -9357,7 +9676,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9357
9676
  });
9358
9677
  return;
9359
9678
  }
9360
- setState({
9679
+ put({
9361
9680
  phase: "error",
9362
9681
  error: response.error
9363
9682
  });
@@ -9373,7 +9692,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9373
9692
  }).catch((reason) => {
9374
9693
  if (cancelled) return;
9375
9694
  const message = reason instanceof Error ? reason.message : String(reason);
9376
- setState({
9695
+ put({
9377
9696
  phase: "error",
9378
9697
  error: {
9379
9698
  code: "network",
@@ -9404,7 +9723,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9404
9723
  options.fact,
9405
9724
  options.report
9406
9725
  ]);
9407
- return state;
9726
+ return resourceViewOf(enabled, current, identity);
9408
9727
  }
9409
9728
  //#endregion
9410
9729
  //#region src/shared/hooks/use-diy-debug.ts
@@ -10451,6 +10770,26 @@ function assembleClientUnits(registry) {
10451
10770
  for (const face of CLIENT_UNITS) registry.register(face);
10452
10771
  }
10453
10772
  //#endregion
10773
+ //#region src/app/units/unit-titles.ts
10774
+ var UNIT_TITLES_OWNER = "dsh-workbench";
10775
+ function unitTitlesOf(manifests) {
10776
+ const zh = {};
10777
+ const en = {};
10778
+ for (const manifest of manifests) {
10779
+ const title = manifest.title;
10780
+ if (title === void 0 || title.zh.trim() === "" || title.en.trim() === "") continue;
10781
+ zh[unitTitleKey(manifest.id)] = title.zh;
10782
+ en[unitTitleKey(manifest.id)] = title.en;
10783
+ }
10784
+ return {
10785
+ unit: UNIT_TITLES_OWNER,
10786
+ messages: {
10787
+ zh,
10788
+ en
10789
+ }
10790
+ };
10791
+ }
10792
+ //#endregion
10454
10793
  //#region src/kernel/client/board-registry.ts
10455
10794
  function createBoardRegistry() {
10456
10795
  const modules = [];
@@ -10526,6 +10865,10 @@ function createClientUnitRegistry(options = {}) {
10526
10865
  let installableIds = null;
10527
10866
  let revision = 0;
10528
10867
  let manifestsCache;
10868
+ let titleSignature = "";
10869
+ function titlesOf(manifests) {
10870
+ return manifests.flatMap((manifest) => manifest.title === void 0 ? [] : [`${manifest.id}=${manifest.title.zh}/${manifest.title.en}`]).join("|");
10871
+ }
10529
10872
  function notify() {
10530
10873
  revision += 1;
10531
10874
  for (const listener of [...listeners]) try {
@@ -10605,7 +10948,10 @@ function createClientUnitRegistry(options = {}) {
10605
10948
  for (const entry of registrations) {
10606
10949
  const next = known.get(entry.unit);
10607
10950
  if (entry.mounted === null) {
10608
- if (next !== void 0 && attach(entry)) changed = true;
10951
+ if (next !== void 0) {
10952
+ attach(entry);
10953
+ changed = true;
10954
+ }
10609
10955
  continue;
10610
10956
  }
10611
10957
  if (next === void 0) {
@@ -10614,6 +10960,11 @@ function createClientUnitRegistry(options = {}) {
10614
10960
  changed = true;
10615
10961
  }
10616
10962
  }
10963
+ const titles = titlesOf(manifests);
10964
+ if (titles !== titleSignature) {
10965
+ titleSignature = titles;
10966
+ changed = true;
10967
+ }
10617
10968
  if (!changed) return;
10618
10969
  manifestsCache = void 0;
10619
10970
  notify();
@@ -11384,6 +11735,7 @@ function publishRows(args, preview, t) {
11384
11735
  const unit = textOf(args, "unit");
11385
11736
  const target = textOf(args, "target");
11386
11737
  const version = textOf(args, "version");
11738
+ const author = textOf(args, "author");
11387
11739
  const rows = [
11388
11740
  {
11389
11741
  label: t("approval.publish.module"),
@@ -11399,7 +11751,7 @@ function publishRows(args, preview, t) {
11399
11751
  },
11400
11752
  {
11401
11753
  label: t("approval.publish.author"),
11402
- value: preview === void 0 ? t("approval.publish.reading") : preview?.author === void 0 || preview.author === "" ? t("approval.publish.authorMissing") : preview.author
11754
+ value: author !== "" ? author : preview === void 0 ? t("approval.publish.reading") : preview?.author === void 0 || preview.author === "" ? t("approval.publish.authorMissing") : preview.author
11403
11755
  }
11404
11756
  ];
11405
11757
  const market = preview?.market;
@@ -11446,17 +11798,22 @@ function PublishChangelogSeat({ changelog, t }) {
11446
11798
  function PublishApprovalSeat({ args, t }) {
11447
11799
  const unit = textOf(args, "unit");
11448
11800
  const version = textOf(args, "version");
11801
+ const author = textOf(args, "author");
11449
11802
  const [preview, setPreview] = useState(() => unit === "" ? null : void 0);
11450
11803
  useEffect(() => {
11451
11804
  if (unit === "") return;
11452
11805
  let live = true;
11453
- readPublishPreview(unit, version).then((response) => {
11806
+ readPublishPreview(unit, version, author).then((response) => {
11454
11807
  if (live) setPreview(response.ok ? response.preview : null);
11455
11808
  });
11456
11809
  return () => {
11457
11810
  live = false;
11458
11811
  };
11459
- }, [unit, version]);
11812
+ }, [
11813
+ unit,
11814
+ version,
11815
+ author
11816
+ ]);
11460
11817
  return createElement(ApprovalPlan, { rows: publishRows(args, preview, t) }, createElement(PublishChangelogSeat, {
11461
11818
  changelog: preview?.changelog,
11462
11819
  t
@@ -12221,10 +12578,10 @@ function dismissPanelByPointer(next, scope, onOpenChange) {
12221
12578
  //#region src/app/layouts/rightbar/PanelModules.tsx
12222
12579
  function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshToken, manifests, onOpenMarket }) {
12223
12580
  const { capabilities, checkedAt, forceProbe } = useCapabilityMap(refreshToken);
12224
- const [decided, setDecided] = useState(false);
12581
+ const decided = useRef(false);
12225
12582
  useEffect(() => {
12226
- if (!open || decided) return;
12227
- setDecided(true);
12583
+ if (!open || decided.current) return;
12584
+ decided.current = true;
12228
12585
  if (!shouldProbeOnEnter({
12229
12586
  checkedAt,
12230
12587
  now: Date.now(),
@@ -12234,7 +12591,6 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
12234
12591
  forceProbe();
12235
12592
  }, [
12236
12593
  open,
12237
- decided,
12238
12594
  checkedAt,
12239
12595
  forceProbe
12240
12596
  ]);
@@ -14374,7 +14730,7 @@ function messagesOf(units) {
14374
14730
  ...face.messages === void 0 ? {} : { messages: face.messages }
14375
14731
  }));
14376
14732
  }
14377
- var COMPONENT_CSS_MARKER = ".wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n padding-top: 0;\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n}\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n.wb-approvalLabel {\n flex: none;\n width: var(--wb-len-56);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-card-gutter);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n cursor: default;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-formProblem {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\n:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n.wb-selectSearch:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-settings-card-fill);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settings .wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._marketList_9dzu9_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._marketRow_9dzu9_10 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_9dzu9_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_9dzu9_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_9dzu9_39 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketStatus_9dzu9_48 {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketStateText_9dzu9_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_9dzu9_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_9dzu9_66 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._marketName_9dzu9_39 ._marketVersion_9dzu9_72 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_9dzu9_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_9dzu9_72::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketLocalTag_9dzu9_94 {\n margin-left: var(--wb-len-8);\n padding: 0 var(--wb-len-6);\n border: var(--wb-len-1) solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n}\n\n._marketEnd_9dzu9_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_9dzu9_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_9dzu9_112::before {\n content: '';\n width: 0;\n height: var(--wb-len-14);\n border-left: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketActions_9dzu9_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_9dzu9_131 {\n color: var(--dsw-alias-state-warn-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._marketSelfDivider_9dzu9_137 {\n height: 0;\n margin-top: calc(0px - var(--wb-len-16));\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_9dzu9_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_9dzu9_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_9dzu9_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_9dzu9_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_9dzu9_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketSectionTitle_9dzu9_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketName_9dzu9_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketIcon_9dzu9_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_9dzu9_188 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_9dzu9_198 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_9dzu9_205 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_9dzu9_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_9dzu9_217 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_9dzu9_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_9dzu9_235 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_9dzu9_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_9dzu9_248 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_9dzu9_254 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketPanel_9dzu9_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_9dzu9_263[hidden] {\n display: none;\n}\n\n._marketTabs_9dzu9_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_9dzu9_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_9dzu9_283 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_9dzu9_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_9dzu9_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_9dzu9_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_9dzu9_312 svg {\n animation: _wb-spin_9dzu9_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_9dzu9_316 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_9dzu9_212 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketEmptyTitle_9dzu9_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_9dzu9_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_9dzu9_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_9dzu9_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_9dzu9_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_9dzu9_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_9dzu9_372 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_9dzu9_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_9dzu9_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_9dzu9_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_9dzu9_395 {\n flex: none;\n}\n\n._discoverSearch_9dzu9_399 {\n box-sizing: border-box;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_9dzu9_361 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_9dzu9_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_9dzu9_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_9dzu9_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_9dzu9_399 {\n grid-area: search;\n }\n\n ._discoverSort_9dzu9_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_9dzu9_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_9dzu9_440 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_9dzu9_447 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_9dzu9_456 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_9dzu9_456:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_9dzu9_470 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_9dzu9_482 {\n object-fit: contain;\n}\n\n._discoverMain_9dzu9_486 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_9dzu9_494 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_9dzu9_502 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_9dzu9_502::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_9dzu9_502:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_9dzu9_502:focus-visible::after {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverStrong_9dzu9_533 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_9dzu9_539 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_9dzu9_548 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_9dzu9_555 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_9dzu9_561 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_9dzu9_570 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_9dzu9_575 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_9dzu9_584 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_9dzu9_575 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_9dzu9_594 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_9dzu9_600 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_9dzu9_600:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_9dzu9_600:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverCrumbIcon_9dzu9_623 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_9dzu9_627 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_9dzu9_633 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_9dzu9_639 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_9dzu9_646 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_9dzu9_653 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_9dzu9_658 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_9dzu9_663 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_9dzu9_668 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_9dzu9_674 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_9dzu9_681 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_9dzu9_687 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_9dzu9_692 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_9dzu9_702 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_9dzu9_708 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_9dzu9_716 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_9dzu9_725 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_9dzu9_732 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_9dzu9_732:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_9dzu9_742 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_9dzu9_750 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_9dzu9_758 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_9dzu9_763 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_9dzu9_772 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverNotice_9dzu9_778 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_9dzu9_778 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_9dzu9_796 {\n align-self: center;\n}\n\n._discoverDialog_9dzu9_800 {\n width: min(var(--wb-len-480), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_9dzu9_804 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_9dzu9_810 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_9dzu9_818 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceError_9dzu9_826 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_9dzu9_832 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_9dzu9_838 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_9dzu9_843 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_9dzu9_849 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_9dzu9_854 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_9dzu9_860 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_9dzu9_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_9dzu9_470._discoverSkeletonFill_9dzu9_860 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_9dzu9_869 {\n display: block;\n height: var(--wb-len-12);\n margin: var(--wb-len-4) 0;\n border-radius: var(--dsw-radius-xs);\n}\n\n._discoverSkeletonTitle_9dzu9_876 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_9dzu9_880 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_9dzu9_1 {\n 0% {\n opacity: 1;\n }\n 40% {\n opacity: 0.6;\n }\n 80%,\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._discoverSkeletonFill_9dzu9_860 {\n animation: none;\n }\n}\n\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1lv8f_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1lv8f_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1lv8f_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1lv8f_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1lv8f_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1lv8f_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1lv8f_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1lv8f_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1lv8f_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1lv8f_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1lv8f_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1lv8f_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1lv8f_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1lv8f_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1lv8f_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1lv8f_351,\n._resultWarn_1lv8f_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1lv8f_383 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1lv8f_403 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._rows_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failure_11oac_45 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_7 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_zyzt3_21 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_zyzt3_51 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_zyzt3_51 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_zyzt3_3 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_zyzt3_125 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_zyzt3_133 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_zyzt3_4 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_zyzt3_159 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_zyzt3_192 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_zyzt3_250 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_15ptp_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_15ptp_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_15ptp_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_15ptp_119 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_15ptp_134 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_15ptp_170 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_15ptp_178 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_1whum_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1cmz0_74 ._rowAction_1cmz0_84 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
14733
+ 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_bnt61_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_bnt61_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_bnt61_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_bnt61_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_bnt61_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_bnt61_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_bnt61_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_bnt61_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_bnt61_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_bnt61_39 ._marketVersion_bnt61_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_bnt61_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_bnt61_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_bnt61_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_bnt61_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_bnt61_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_bnt61_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_bnt61_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_bnt61_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_bnt61_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_bnt61_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_bnt61_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_bnt61_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_bnt61_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_bnt61_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_bnt61_175 ._marketSectionTitle_bnt61_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_bnt61_175 ._marketName_bnt61_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_bnt61_175 ._marketIcon_bnt61_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_bnt61_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_bnt61_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_bnt61_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_bnt61_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_bnt61_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_bnt61_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_bnt61_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_bnt61_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_bnt61_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_bnt61_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_bnt61_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_bnt61_263[hidden] {\n display: none;\n}\n\n._marketTabs_bnt61_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_bnt61_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_bnt61_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_bnt61_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_bnt61_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_bnt61_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_bnt61_312 svg {\n animation: _wb-spin_bnt61_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_bnt61_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_bnt61_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_bnt61_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_bnt61_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_bnt61_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_bnt61_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_bnt61_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_bnt61_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_bnt61_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_bnt61_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_bnt61_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_bnt61_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_bnt61_395 {\n flex: none;\n}\n\n._discoverSearch_bnt61_399 {\n box-sizing: border-box;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_bnt61_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_bnt61_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_bnt61_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_bnt61_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_bnt61_399 {\n grid-area: search;\n }\n\n ._discoverSort_bnt61_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_bnt61_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_bnt61_440 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_bnt61_447 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_bnt61_456 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_bnt61_456:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_bnt61_470 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_bnt61_482 {\n object-fit: contain;\n}\n\n._discoverMain_bnt61_486 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_bnt61_494 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_bnt61_502 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_bnt61_502::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_bnt61_502:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_bnt61_502:focus-visible::after {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverStrong_bnt61_533 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_bnt61_539 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_bnt61_548 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_bnt61_555 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_bnt61_561 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_bnt61_570 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_bnt61_575 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_bnt61_584 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_bnt61_575 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_bnt61_594 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_bnt61_600 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_bnt61_600:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_bnt61_600:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverCrumbIcon_bnt61_623 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_bnt61_627 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_bnt61_633 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_bnt61_639 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_bnt61_646 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_bnt61_653 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_bnt61_658 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_bnt61_663 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_bnt61_668 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_bnt61_674 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_bnt61_681 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_bnt61_687 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_bnt61_692 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_bnt61_702 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_bnt61_708 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_bnt61_716 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_bnt61_725 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_bnt61_732 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_bnt61_732:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_bnt61_742 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_bnt61_750 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_bnt61_758 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_bnt61_763 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_bnt61_772 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_bnt61_778 {\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_bnt61_787 {\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_bnt61_787 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_bnt61_805 {\n align-self: center;\n}\n\n._discoverDialog_bnt61_809 {\n width: min(var(--wb-len-480), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_bnt61_813 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_bnt61_819 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_bnt61_827 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceCurrent_bnt61_836 {\n flex: none;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n white-space: nowrap;\n}\n\n._discoverSourceLoading_bnt61_843 {\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_bnt61_853 {\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_bnt61_853 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_bnt61_867 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_bnt61_873 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_bnt61_879 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_bnt61_884 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_bnt61_890 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_bnt61_895 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_bnt61_901 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_bnt61_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_bnt61_470._discoverSkeletonFill_bnt61_901 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_bnt61_910 {\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_bnt61_917 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_bnt61_921 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_bnt61_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_bnt61_901 {\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*/";
14378
14734
  function workbenchCss() {
14379
14735
  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}`;
14380
14736
  }
@@ -14426,7 +14782,7 @@ function mount(ctx) {
14426
14782
  let disposeDictionary;
14427
14783
  const publish = () => {
14428
14784
  disposeDictionary?.();
14429
- const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, messagesOf(units.all()));
14785
+ const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, [unitTitlesOf(units.manifests()), ...messagesOf(units.all())]);
14430
14786
  for (const problem of problems) console.warn(`[dsh-workbench] 套件 ${problem.unit} 的文案没并进来(只有它少了这几句):${problem.reason}`);
14431
14787
  disposeDictionary = ctx.locale.register(LOCALE_NS, merged);
14432
14788
  };