@dsh-workbench/core 1.0.0 → 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 (41) hide show
  1. package/README.md +16 -3
  2. package/bin/dsh-workbench +38 -6
  3. package/client.js +669 -305
  4. package/dist/client/client.body.js +669 -305
  5. package/dist/client/index.js +669 -305
  6. package/dist/host/index.js +445 -37
  7. package/dist/types/app/layouts/market/discover-sources-dialog.d.ts +4 -0
  8. package/dist/types/app/layouts/market/discover-states.d.ts +3 -0
  9. package/dist/types/app/layouts/market/use-add-module.d.ts +0 -1
  10. package/dist/types/app/layouts/market/use-discover.d.ts +1 -0
  11. package/dist/types/app/layouts/rightbar/MarketView.d.ts +3 -1
  12. package/dist/types/app/layouts/rightbar/market-names.d.ts +8 -0
  13. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +11 -3
  14. package/dist/types/app/layouts/rightbar/market-rows.d.ts +6 -4
  15. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +4 -3
  16. package/dist/types/app/units/unit-titles.d.ts +3 -0
  17. package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
  18. package/dist/types/kernel/contract/market-index.d.ts +1 -1
  19. package/dist/types/modules/panels/model/diy-tools.d.ts +1 -1
  20. package/dist/types/modules/panels/model/market-dispatch.d.ts +8 -0
  21. package/dist/types/modules/panels/model/market-follow-up.d.ts +16 -0
  22. package/dist/types/modules/panels/model/market-sources-act.d.ts +2 -0
  23. package/dist/types/modules/panels/model/market-types.d.ts +5 -0
  24. package/dist/types/modules/panels/model/market.d.ts +2 -0
  25. package/dist/types/modules/panels/model/publish-preview-routes.d.ts +1 -1
  26. package/dist/types/shared/api/host/diy-publish-preview.d.ts +11 -0
  27. package/dist/types/shared/api/host/follow-up-dismiss.d.ts +2 -0
  28. package/dist/types/shared/api/host/migrate-workbench.d.ts +20 -0
  29. package/dist/types/shared/api/host/migration-follow-up.d.ts +12 -0
  30. package/dist/types/shared/hooks/market-queries.d.ts +3 -2
  31. package/dist/types/shared/hooks/resource-view.d.ts +14 -0
  32. package/dist/types/shared/hooks/use-api-resource.d.ts +3 -7
  33. package/package.json +3 -3
  34. package/scripts/seed-profile.sh +9 -7
  35. package/scripts/share-data-root.mjs +272 -64
  36. package/skills/workbench-module-diy/FAMILY.md +1 -1
  37. package/skills/workbench-module-diy/REVIEW.md +2 -2
  38. package/skills/workbench-module-diy/SKILL.md +1 -0
  39. package/skills/workbench-module-diy/TOOLS.md +1 -1
  40. package/skills/workbench-module-diy/WIRING.md +3 -1
  41. 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,14 +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}.",
3092
+ "panels.market.selfUpdateRolledBack": "Workbench update failed; rolled back to {version}.",
3085
3093
  "panels.market.uninstall": "Uninstall",
3086
3094
  "panels.market.uninstallLabel": "Uninstall {name}",
3087
3095
  "panels.market.installing": "Installing…",
@@ -3103,9 +3111,27 @@ var en = {
3103
3111
  "panels.market.empty": "No modules available",
3104
3112
  "panels.market.sectionPlugins": "Installed opencli plugins",
3105
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",
3106
3116
  "panels.market.moduleRefused": "This module does not match this workbench, so it cannot be used for now.",
3107
3117
  "panels.market.moduleRestartHint": "restart dsh once to bring it up",
3108
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.",
3109
3135
  "panels.market.workbenchName": "Workbench",
3110
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.",
3111
3137
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
@@ -3189,7 +3215,7 @@ var en = {
3189
3215
  "panels.market.add.exampleTitle": "Examples",
3190
3216
  "panels.market.add.exampleFill": "Fill in an example",
3191
3217
  "panels.market.add.registryLabel": "Source",
3192
- "panels.market.add.registryProfile": "This profile's registry",
3218
+ "panels.market.add.registryProfile": "This workbench's registry",
3193
3219
  "panels.market.add.registryPnpm": "pnpm's own registry",
3194
3220
  "panels.market.add.check": "Check",
3195
3221
  "panels.market.add.checking": "Checking…",
@@ -3210,12 +3236,16 @@ var en = {
3210
3236
  "panels.market.tabs": "The two faces of the module market",
3211
3237
  "panels.tab.discover": "Discover",
3212
3238
  "panels.discover.loading": "Reading the index",
3239
+ "panels.discover.slowHint": "Slow to load: finish any authorization prompt, or switch sources.",
3213
3240
  "panels.discover.lead": "Browse modules from an index source; install and go.",
3214
3241
  "panels.discover.addSource": "Add",
3215
3242
  "panels.discover.addingSource": "Adding…",
3216
3243
  "panels.discover.addFirstSource": "Add index source",
3217
3244
  "panels.discover.removeSource": "Remove",
3218
3245
  "panels.discover.removeSourceNamed": "Remove {url}",
3246
+ "panels.discover.useSource": "Use",
3247
+ "panels.discover.useSourceNamed": "Use {label}",
3248
+ "panels.discover.sourceCurrent": "In use",
3219
3249
  "panels.discover.refresh": "Refresh",
3220
3250
  "panels.discover.search": "Search modules",
3221
3251
  "panels.discover.all": "All",
@@ -3227,8 +3257,8 @@ var en = {
3227
3257
  "panels.discover.sourcePlaceholder": "https://example.com/index.json or git@git.example.com:wb/market.git",
3228
3258
  "panels.discover.sourceRef": "Branch",
3229
3259
  "panels.discover.sourcePath": "Index file",
3230
- "panels.discover.sourceLocal": "Local clone (optional)",
3231
- "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/.",
3232
3262
  "panels.discover.save": "Save and refresh",
3233
3263
  "panels.discover.cancel": "Cancel",
3234
3264
  "panels.discover.retry": "Retry",
@@ -3241,9 +3271,9 @@ var en = {
3241
3271
  "panels.discover.missingIndex": "This repository has no {path} yet.",
3242
3272
  "panels.discover.initTitle": "Initialize this repository as a module market index?",
3243
3273
  "panels.discover.initCta": "Initialize market index",
3244
- "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.",
3245
3275
  "panels.discover.initBranch": "Branch",
3246
- "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.",
3247
3277
  "panels.discover.initBranchBad": "Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.",
3248
3278
  "panels.discover.initOk": "Initialize",
3249
3279
  "panels.discover.initBusy": "Initializing…",
@@ -3347,11 +3377,11 @@ var en = {
3347
3377
  "panels.market.add.doneApplied": "Installed and live.",
3348
3378
  "panels.market.add.doneRestart": "Installed — restart once to pick it up.",
3349
3379
  "panels.market.add.restartWhy": "Why this needs a restart: {reason}",
3350
- "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",
3351
3381
  "panels.market.add.restartWhy.package-moved": "an installed package now resolves to another directory, or the change replaced something dsh itself provides",
3352
3382
  "panels.market.add.restartWhy.host-module": "the change reaches modules dsh itself loaded",
3353
- "panels.market.add.restartWhy.unmanaged-plugin": "the change reaches a plugin running outside the plugin list",
3354
- "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",
3355
3385
  "panels.market.add.cancelled": "Cancelled.",
3356
3386
  "panels.market.add.failed": "Didn't work: {reason}",
3357
3387
  "panels.market.add.removed": "It has been removed.",
@@ -3361,10 +3391,10 @@ var en = {
3361
3391
  "panels.market.add.removedRestart": "Removed — restart once to finish.",
3362
3392
  "panels.market.add.remove": "Remove it",
3363
3393
  "panels.market.add.problem.invalidSpec": "That is not a spec we accept: it cannot be empty or start with a dash.",
3364
- "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).",
3365
3395
  "panels.market.add.problem.notFound": "No such package on that source. Try another name or version.",
3366
3396
  "panels.market.add.problem.notAPackage": "There is no package at that location. Pick a folder that contains a package.json.",
3367
- "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).",
3368
3398
  "panels.market.add.problem.network": "The source is unreachable. Check the network and retry.",
3369
3399
  "panels.market.add.problem.unknown": "The check did not pass (reason unknown). Open the install details for the raw output, or retry.",
3370
3400
  "panels.market.add.reason.invalidSpec": "the spec is not accepted",
@@ -3372,7 +3402,7 @@ var en = {
3372
3402
  "panels.market.add.reason.notBundle": "it is not a dsh plugin package",
3373
3403
  "panels.market.add.reason.notRemovable": "it ships with the installation and cannot be removed",
3374
3404
  "panels.market.add.reason.bundleInUse": "something is still using it",
3375
- "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",
3376
3406
  "panels.market.add.reason.staleApproval": "the scripts to allow changed — start over",
3377
3407
  "panels.market.add.reason.operationError": "pnpm failed (see the install output)",
3378
3408
  "panels.market.add.reason.buildBlocked": "pnpm blocked install scripts",
@@ -3402,8 +3432,8 @@ var en = {
3402
3432
  "blocker.forbidden.titleGeneric": "No access",
3403
3433
  "blocker.forbidden.hint": "You are signed in, but this project/repo is not permitted for your account.",
3404
3434
  "blocker.forbidden.open": "Open permissions page",
3405
- "blocker.timeout.hint": "The headless browser may not have started; retrying usually helps.",
3406
- "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).",
3407
3437
  "blocker.unknown.title": "Something went wrong",
3408
3438
  "panels.reading": "Reading the panel setup…",
3409
3439
  "panels.cardBroken": "This module will not render: {unit} ({reason})",
@@ -3417,7 +3447,7 @@ var en = {
3417
3447
  "env.elapsed": "Waiting {seconds}s",
3418
3448
  "env.stepFailed.install": "install failed",
3419
3449
  "env.stepFailed.path": "installed but not found",
3420
- "env.stepFailed.shell": "no shell channel",
3450
+ "env.stepFailed.shell": "cannot reach the command line",
3421
3451
  "env.toolchain.ok": "Looks good",
3422
3452
  "env.toolchain.warn": "Almost ready",
3423
3453
  "env.opencli.ok": "Ready",
@@ -3434,10 +3464,10 @@ var en = {
3434
3464
  "env.fix.title": "How to fix it",
3435
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.",
3436
3466
  "env.fix.whyPath": "The background tool is installed, but this environment cannot find it — usually a PATH or shell-session issue.",
3437
- "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.",
3438
3468
  "env.fix.step": "Run this in a terminal, then hit Retry:",
3439
3469
  "env.fix.stepPath": "Open a new terminal window (or make sure npm’s global bin directory is on PATH), then hit Retry.",
3440
- "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.",
3441
3471
  "env.fix.permission": "Permission denied: rerun with sudo, or point npm’s global directory at your home.",
3442
3472
  "env.fix.network": "Network unreachable: check your network or proxy, then retry.",
3443
3473
  "env.fix.details": "Details (for troubleshooting)",
@@ -3466,9 +3496,9 @@ var en = {
3466
3496
  "env.warm.done": "Ready ({n} sites)",
3467
3497
  "env.warm.short": "Could not sign in early this time — nothing breaks; the first read fills it in",
3468
3498
  "env.unit.failed": "This module cannot start",
3469
- "env.unit.failedHint": "It failed while assembling itself; other modules are unaffected.",
3470
- "env.unit.unchecked": "Cannot check: no shell channel",
3471
- "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.",
3472
3502
  "adapterSet.not-configured": "No adapter set configured; using the default.",
3473
3503
  "adapterSet.no-profile": "No profile found, so the adapter set cannot load; using the default.",
3474
3504
  "adapterSet.malformed": "An adapter set must be a package name (for example @acme/adapters-set); using the default.",
@@ -3511,7 +3541,7 @@ var en = {
3511
3541
  "sidebarEdition.official": "Official",
3512
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.",
3513
3543
  "sidebarEdition.custom": "Custom",
3514
- "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.",
3515
3545
  "sidebarEdition.saving": "Configuring…",
3516
3546
  "sidebarEdition.reloadRequired": "Saved. Reload the page to apply — no workbench restart needed.",
3517
3547
  "sidebarEdition.reload": "Reload page",
@@ -3540,25 +3570,25 @@ var en = {
3540
3570
  "record.act.halt": "Halt",
3541
3571
  "approval.record.site": "Site",
3542
3572
  "approval.record.what": "Records",
3543
- "approval.record.lands": "Lands in",
3573
+ "approval.record.lands": "Saves to",
3544
3574
  "approval.record.noUrl": "no site given (this call gets refused)",
3545
3575
  "approval.record.oneAction": "one action",
3546
3576
  "approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
3547
- "approval.longTask.what": "Stops",
3548
- "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",
3549
3579
  "approval.publish.module": "Module",
3550
3580
  "approval.publish.target": "Target",
3551
3581
  "approval.publish.version": "Version",
3552
3582
  "approval.publish.author": "Author",
3553
- "approval.publish.authorMissing": "unsigned (commits use the local git identity)",
3583
+ "approval.publish.authorMissing": "unsigned",
3554
3584
  "approval.publish.registry": "Registry",
3555
3585
  "approval.publish.repo": "Repository",
3556
3586
  "approval.publish.branch": "Branch",
3557
3587
  "approval.publish.defaultBranch": "default branch",
3558
- "approval.publish.artifacts": "Artifacts",
3588
+ "approval.publish.artifacts": "Build files",
3559
3589
  "approval.publish.index": "Index",
3560
3590
  "approval.publish.commits": "Commits",
3561
- "approval.publish.twoCommits": "artifacts + market.json in 2 commits, one push",
3591
+ "approval.publish.twoCommits": "build files + market.json in 2 commits, one push",
3562
3592
  "approval.publish.reading": "Reading…",
3563
3593
  "approval.publish.changelog": "Changelog for {version}",
3564
3594
  "approval.publish.changelogMissing": "No changelog entry for {version}; publishing will be blocked",
@@ -3706,14 +3736,14 @@ var dictionaries = {
3706
3736
  "panels.market.update": "更新",
3707
3737
  "panels.market.swapSlow": "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。",
3708
3738
  "panels.market.removeSlow": "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。",
3709
- "panels.market.updateNoChange": "没换成:点下去是 {from},跑完盘上还是这一版;源上最新是 {latest}。",
3739
+ "panels.market.updateNoChange": "更新失败:还是 {from};源上最新是 {latest},可以再点一次「更新」。",
3710
3740
  "panels.market.updateUnknownVersion": "(问不到)",
3711
- "panels.market.updateGone": "没换成:更新跑完盘上读不到这个模块。",
3712
- "panels.market.updateRestored": "没换成:盘上已经读不到新版本,已把 {version} 装回去。",
3741
+ "panels.market.updateGone": "更新失败:更新后找不到这个模块。",
3742
+ "panels.market.updateRestored": "更新失败:更新后找不到新版本,已把 {version} 装回去。",
3713
3743
  "panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。",
3714
- "panels.market.selfUpdateFailed": "自更新没成:{reason}",
3744
+ "panels.market.selfUpdateFailed": "工作台更新失败:{reason}",
3715
3745
  "panels.market.selfUpdateUnknown": "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)",
3716
- "panels.market.selfUpdateRolledBack": "没换成,已回滚到 {version}。",
3746
+ "panels.market.selfUpdateRolledBack": "工作台更新失败,已回滚到 {version}。",
3717
3747
  "panels.market.uninstall": "卸载",
3718
3748
  "panels.market.uninstallLabel": "卸载 {name}",
3719
3749
  "panels.market.installing": "正在安装…",
@@ -3735,9 +3765,27 @@ var dictionaries = {
3735
3765
  "panels.market.empty": "暂无可用模块",
3736
3766
  "panels.market.sectionPlugins": "已安装 opencli 插件",
3737
3767
  "panels.market.moduleOutdated": "有新版",
3768
+ "panels.market.updateNeedsWorkbench": "新版本要先把工作台升级才能用",
3769
+ "panels.market.updateIncompatible": "新版本和当前的工作台不匹配,暂时不能更新",
3738
3770
  "panels.market.moduleRefused": "模块版本与工作台不匹配,暂时无法使用",
3739
3771
  "panels.market.moduleRestartHint": "重启后生效",
3740
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。",
3741
3789
  "panels.market.workbenchName": "工作台",
3742
3790
  "panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
3743
3791
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
@@ -3821,7 +3869,7 @@ var dictionaries = {
3821
3869
  "panels.market.add.exampleTitle": "示例",
3822
3870
  "panels.market.add.exampleFill": "填入示例",
3823
3871
  "panels.market.add.registryLabel": "安装源",
3824
- "panels.market.add.registryProfile": "这个 profile 配的源",
3872
+ "panels.market.add.registryProfile": "这份工作台配的源",
3825
3873
  "panels.market.add.registryPnpm": "pnpm 自己配的源",
3826
3874
  "panels.market.add.check": "预检",
3827
3875
  "panels.market.add.checking": "正在预检…",
@@ -3842,12 +3890,16 @@ var dictionaries = {
3842
3890
  "panels.market.tabs": "模块市场的两个面",
3843
3891
  "panels.tab.discover": "发现",
3844
3892
  "panels.discover.loading": "正在读取索引",
3893
+ "panels.discover.slowHint": "读取较慢:如有授权提示,先完成它,或换一个索引源。",
3845
3894
  "panels.discover.lead": "从索引源浏览模块;装上就能用。",
3846
3895
  "panels.discover.addSource": "添加",
3847
3896
  "panels.discover.addingSource": "正在添加…",
3848
3897
  "panels.discover.addFirstSource": "添加索引源",
3849
3898
  "panels.discover.removeSource": "移除",
3850
3899
  "panels.discover.removeSourceNamed": "移除 {url}",
3900
+ "panels.discover.useSource": "使用",
3901
+ "panels.discover.useSourceNamed": "使用 {label}",
3902
+ "panels.discover.sourceCurrent": "当前使用",
3851
3903
  "panels.discover.refresh": "刷新",
3852
3904
  "panels.discover.search": "搜索模块",
3853
3905
  "panels.discover.all": "全部",
@@ -3859,8 +3911,8 @@ var dictionaries = {
3859
3911
  "panels.discover.sourcePlaceholder": "https://example.com/index.json 或 git@git.example.com:wb/market.git",
3860
3912
  "panels.discover.sourceRef": "分支",
3861
3913
  "panels.discover.sourcePath": "索引文件",
3862
- "panels.discover.sourceLocal": "本地 clone(可选)",
3863
- "panels.discover.sourceLocalHint": "不填就 clone 到 ~/.dsh/workbench/market-index/。",
3914
+ "panels.discover.sourceLocal": "本地副本目录(可选)",
3915
+ "panels.discover.sourceLocalHint": "不填就放到 ~/.dsh/workbench/market-index/。",
3864
3916
  "panels.discover.save": "保存并刷新",
3865
3917
  "panels.discover.cancel": "取消",
3866
3918
  "panels.discover.retry": "重试",
@@ -3873,9 +3925,9 @@ var dictionaries = {
3873
3925
  "panels.discover.missingIndex": "仓库里还没有索引文件 {path}",
3874
3926
  "panels.discover.initTitle": "把这个仓库初始化成模块市场索引?",
3875
3927
  "panels.discover.initCta": "初始化成市场索引",
3876
- "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把产物提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3928
+ "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3877
3929
  "panels.discover.initBranch": "分支",
3878
- "panels.discover.initBranchHint": "索引与产物都发到这个分支;空仓库会新建它。",
3930
+ "panels.discover.initBranchHint": "索引和打包文件都发到这个分支;空仓库会新建它。",
3879
3931
  "panels.discover.initBranchBad": "分支名只能用字母、数字、点、下划线、斜杠或短横线",
3880
3932
  "panels.discover.initOk": "初始化",
3881
3933
  "panels.discover.initBusy": "正在初始化…",
@@ -3979,11 +4031,11 @@ var dictionaries = {
3979
4031
  "panels.market.add.doneApplied": "装好了,已经生效。",
3980
4032
  "panels.market.add.doneRestart": "装好了,重启一次才生效。",
3981
4033
  "panels.market.add.restartWhy": "为什么这一版要重启:{reason}",
3982
- "panels.market.add.restartWhy.no-hmr": "这个配置只在启动时应用改动(没开热更新)",
4034
+ "panels.market.add.restartWhy.no-hmr": "这份配置只在启动时读一次,改了得重启",
3983
4035
  "panels.market.add.restartWhy.package-moved": "某个已经装着的包换到了新的目录,或者这一下换掉了 dsh 自己提供的那份",
3984
4036
  "panels.market.add.restartWhy.host-module": "这一下动到了 dsh 自己加载的模块",
3985
- "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了插件清单之外正在跑的插件",
3986
- "panels.market.add.restartWhy.module-comparison": "dsh 没能把已加载的插件与盘上的文件对上",
4037
+ "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了没登记过、正在运行的插件",
4038
+ "panels.market.add.restartWhy.module-comparison": "dsh 没法确认正在跑的插件就是这台机器上装好的那一份",
3987
4039
  "panels.market.add.cancelled": "已取消。",
3988
4040
  "panels.market.add.failed": "没成功:{reason}",
3989
4041
  "panels.market.add.removed": "已经移除了。",
@@ -3993,10 +4045,10 @@ var dictionaries = {
3993
4045
  "panels.market.add.removedRestart": "卸掉了,重启一次才彻底生效。",
3994
4046
  "panels.market.add.remove": "移除它",
3995
4047
  "panels.market.add.problem.invalidSpec": "这个写法不认:不能是空的,也不能以横杠开头。",
3996
- "panels.market.add.problem.alreadyInstalled": "这个包已经在 profile 里了(要换版本请带上 @版本)。",
4048
+ "panels.market.add.problem.alreadyInstalled": "这个包已经在这份工作台里了(要换版本请带上 @版本)。",
3997
4049
  "panels.market.add.problem.notFound": "源上没有这个包。换个包名或版本再试。",
3998
4050
  "panels.market.add.problem.notAPackage": "这个位置没有包。选一个包含 package.json 的目录。",
3999
- "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(缺 dsh 的接线声明)。",
4051
+ "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(dsh 在里面找不到该加载什么)。",
4000
4052
  "panels.market.add.problem.network": "源连不上。检查网络后重试。",
4001
4053
  "panels.market.add.problem.unknown": "预检没通过(原因未知)。展开安装详情看原始输出,或重试。",
4002
4054
  "panels.market.add.reason.invalidSpec": "写法不认",
@@ -4004,7 +4056,7 @@ var dictionaries = {
4004
4056
  "panels.market.add.reason.notBundle": "它不是一个 dsh 插件包",
4005
4057
  "panels.market.add.reason.notRemovable": "它是安装自带的组合包,不能卸",
4006
4058
  "panels.market.add.reason.bundleInUse": "还有东西在用它,卸不掉",
4007
- "panels.market.add.reason.stopProfile": "这个配置没开热更新,得先停掉进程",
4059
+ "panels.market.add.reason.stopProfile": "这份配置改了要重启,得先停掉工作台",
4008
4060
  "panels.market.add.reason.staleApproval": "要允许的安装脚本已经变了,重新来一次",
4009
4061
  "panels.market.add.reason.operationError": "pnpm 执行出错(详情见安装输出)",
4010
4062
  "panels.market.add.reason.buildBlocked": "pnpm 拦下了安装脚本",
@@ -4027,15 +4079,15 @@ var dictionaries = {
4027
4079
  "blocker.market.open": "去模块市场",
4028
4080
  "blocker.login.title": "需要登录 {platform}",
4029
4081
  "blocker.login.titleGeneric": "需要登录",
4030
- "blocker.login.hint": "工作台用你的浏览器登录态;登录一次就行,之后不用再登。",
4082
+ "blocker.login.hint": "工作台借你浏览器里的登录状态;登录一次就行,之后不用再登。",
4031
4083
  "blocker.login.go": "去登录",
4032
4084
  "blocker.login.manual": "在终端执行该插件的登录命令(见插件的文档),按提示完成登录后重试。",
4033
4085
  "blocker.forbidden.title": "没有权限访问 {platform}",
4034
4086
  "blocker.forbidden.titleGeneric": "没有权限",
4035
4087
  "blocker.forbidden.hint": "账号已登录,但没有这个项目/仓库的权限;申请之后再试。",
4036
4088
  "blocker.forbidden.open": "打开权限页",
4037
- "blocker.timeout.hint": "无头浏览器可能没起来,重试一次通常就好。",
4038
- "blocker.exec.hint": "确认 opencli 已安装且在 PATH 里(which opencli)。",
4089
+ "blocker.timeout.hint": "后台浏览器没起来,重试一次通常就好。",
4090
+ "blocker.exec.hint": "确认 opencli 已经装好、在终端里能直接运行(which opencli)。",
4039
4091
  "blocker.unknown.title": "出了点问题",
4040
4092
  "panels.reading": "正在读取面板配置…",
4041
4093
  "panels.cardBroken": "这个模块起不来:{unit}({reason})",
@@ -4049,7 +4101,7 @@ var dictionaries = {
4049
4101
  "env.elapsed": "已等待 {seconds} 秒",
4050
4102
  "env.stepFailed.install": "装不上",
4051
4103
  "env.stepFailed.path": "装了但还找不到",
4052
- "env.stepFailed.shell": "执行通道不可用",
4104
+ "env.stepFailed.shell": "连不上命令行",
4053
4105
  "env.toolchain.ok": "正常",
4054
4106
  "env.toolchain.warn": "还没完全准备好",
4055
4107
  "env.opencli.ok": "已就绪",
@@ -4066,10 +4118,10 @@ var dictionaries = {
4066
4118
  "env.fix.title": "怎么解决",
4067
4119
  "env.fix.why": "工作台用它自己那份后台工具(与你在终端里那套分开装,互不影响),这台机器上还没装好它。",
4068
4120
  "env.fix.whyPath": "后台工具装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。",
4069
- "env.fix.whyShell": "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4121
+ "env.fix.whyShell": "工作台拿不到这台机器的命令行,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4070
4122
  "env.fix.step": "在终端里运行下面这条命令,装好之后点「重试」:",
4071
4123
  "env.fix.stepPath": "新开一个终端窗口(或确认 npm 的全局 bin 目录在 PATH 里),然后点「重试」。",
4072
- "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明执行通道没配好。",
4124
+ "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明工作台还是拿不到命令行。",
4073
4125
  "env.fix.permission": "权限不够:在命令前加 sudo 重跑,或先把 npm 的全局目录配到你的用户目录。",
4074
4126
  "env.fix.network": "网络不通:检查网络或代理设置后重试。",
4075
4127
  "env.fix.details": "详细输出(排障用)",
@@ -4098,9 +4150,9 @@ var dictionaries = {
4098
4150
  "env.warm.done": "已就绪({n} 个站点)",
4099
4151
  "env.warm.short": "这次没提前连上 —— 不影响用,第一次取数会自己补",
4100
4152
  "env.unit.failed": "这个模块起不来",
4101
- "env.unit.failedHint": "它自己装配时报了错,别的模块不受影响。",
4102
- "env.unit.unchecked": "检测不了:拿不到执行通道",
4103
- "env.unit.uncheckedHint": "不是这个模块的问题,是执行通道不可用 —— 重启一次工作台再试。",
4153
+ "env.unit.failedHint": "它自己启动时报了错,别的模块不受影响。",
4154
+ "env.unit.unchecked": "检测不了:拿不到命令行",
4155
+ "env.unit.uncheckedHint": "不是这个模块的问题,是工作台拿不到命令行 —— 重启一次工作台再试。",
4104
4156
  "adapterSet.not-configured": "没配置适配器集合,用默认的。",
4105
4157
  "adapterSet.no-profile": "找不到 profile,没法加载适配器集合;先用默认的。",
4106
4158
  "adapterSet.malformed": "适配器集合要写包名(如 @acme/adapters-set);先用默认的。",
@@ -4143,7 +4195,7 @@ var dictionaries = {
4143
4195
  "sidebarEdition.official": "官方",
4144
4196
  "sidebarEdition.officialHint": "跟 dsh 官方一致、最稳:搜索、视图选项、显示更多、归档、添加工作区都齐,升级也不等我们适配。想省心就选它。",
4145
4197
  "sidebarEdition.custom": "自定义",
4146
- "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,两端淡出、跑马灯、工坊 DIY 新会话。项目多时更顺手。",
4198
+ "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,名字自动滚动、两侧渐隐,工坊 DIY 新会话。项目多时更顺手。",
4147
4199
  "sidebarEdition.saving": "配置中…",
4148
4200
  "sidebarEdition.reloadRequired": "已写入。刷新页面后生效(不用重启工作台)。",
4149
4201
  "sidebarEdition.reload": "刷新页面",
@@ -4172,25 +4224,25 @@ var dictionaries = {
4172
4224
  "record.act.halt": "停",
4173
4225
  "approval.record.site": "站点",
4174
4226
  "approval.record.what": "录制功能",
4175
- "approval.record.lands": "落点",
4227
+ "approval.record.lands": "保存到",
4176
4228
  "approval.record.noUrl": "没给站点地址(这次会被当场拒)",
4177
4229
  "approval.record.oneAction": "一次操作",
4178
4230
  "approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
4179
- "approval.longTask.what": "要停的那一趟",
4180
- "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 平台侧那趟活儿的收尾看模块自己",
4231
+ "approval.longTask.what": "要停的那次任务",
4232
+ "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
4181
4233
  "approval.publish.module": "模块",
4182
4234
  "approval.publish.target": "目标",
4183
4235
  "approval.publish.version": "版本",
4184
4236
  "approval.publish.author": "作者",
4185
- "approval.publish.authorMissing": "未署名(提交用本机 git 身份)",
4237
+ "approval.publish.authorMissing": "未署名",
4186
4238
  "approval.publish.registry": "源",
4187
4239
  "approval.publish.repo": "仓库",
4188
4240
  "approval.publish.branch": "分支",
4189
4241
  "approval.publish.defaultBranch": "默认分支",
4190
- "approval.publish.artifacts": "产物",
4242
+ "approval.publish.artifacts": "打包文件",
4191
4243
  "approval.publish.index": "索引",
4192
4244
  "approval.publish.commits": "提交",
4193
- "approval.publish.twoCommits": "产物 + market.json 两个 commit,一次 push",
4245
+ "approval.publish.twoCommits": "打包文件 + market.json 两次提交,一次推送",
4194
4246
  "approval.publish.reading": "读取中…",
4195
4247
  "approval.publish.changelog": "{version} 的更新日志",
4196
4248
  "approval.publish.changelogMissing": "这一版还没有更新日志({version}),发布会被拦下",
@@ -4966,6 +5018,7 @@ var MARKET_STATE_KEY = {
4966
5018
  broken: "panels.market.broken",
4967
5019
  outdated: "panels.market.moduleOutdated",
4968
5020
  "pending-restart": "panels.market.pendingRestart",
5021
+ "pending-followup": "panels.market.pendingFollowUp",
4969
5022
  missing: "panels.market.missing",
4970
5023
  unchecked: "panels.market.unchecked",
4971
5024
  unknown: "panels.market.unchecked"
@@ -4978,6 +5031,7 @@ var MARKET_DOT = {
4978
5031
  broken: "error",
4979
5032
  outdated: "warning",
4980
5033
  "pending-restart": "warning",
5034
+ "pending-followup": "warning",
4981
5035
  missing: "idle",
4982
5036
  unchecked: "idle",
4983
5037
  unknown: "idle"
@@ -5002,35 +5056,32 @@ function refusalReasons(host, client) {
5002
5056
  if (reported.length > 0) return reported;
5003
5057
  return [...new Set(client ?? [])];
5004
5058
  }
5005
- function mergeTitles(known, manifests) {
5006
- let next = null;
5007
- for (const manifest of manifests) {
5008
- const titleKey = manifest.card?.titleKey;
5009
- if (titleKey === void 0 || known.has(manifest.id)) continue;
5010
- next ??= new Map(known);
5011
- next.set(manifest.id, titleKey);
5012
- }
5013
- return next ?? known;
5059
+ function updateBlockHintOf(block) {
5060
+ return block === "needs-workbench" ? "panels.market.updateNeedsWorkbench" : "panels.market.updateIncompatible";
5014
5061
  }
5015
5062
  function installedIdSet(installed) {
5016
5063
  if (installed === void 0) return null;
5017
5064
  return new Set(installed.map((item) => item.unit));
5018
5065
  }
5019
- function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5066
+ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5020
5067
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
5021
5068
  const rows = [];
5022
5069
  for (const module of modules) {
5023
5070
  if (listed.has(module.unit)) continue;
5024
5071
  const latest = module.local === true ? void 0 : module.latest;
5025
5072
  const outdated = latest !== void 0 && latest !== module.installed;
5073
+ const blocked = outdated ? module.latestBlocked : void 0;
5026
5074
  const loaded = titles.has(module.unit);
5027
5075
  const refused = refusalReasons(module.refused, module.clientRefused);
5028
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;
5029
5079
  rows.push({
5030
5080
  id: module.unit,
5031
- titleKey: titles.get(module.unit) ?? known?.get(module.unit) ?? module.pkg,
5081
+ titleKey: titleKey ?? module.unit,
5082
+ ...remembered === void 0 ? {} : { label: remembered },
5032
5083
  state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
5033
- ...pending ? { hint: "panels.market.moduleRestartHint" } : {},
5084
+ ...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
5034
5085
  ...refused.length === 0 ? {} : { note: {
5035
5086
  key: "panels.market.moduleRefused",
5036
5087
  params: {}
@@ -5038,7 +5089,7 @@ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE_
5038
5089
  ...module.local === true ? { local: true } : {},
5039
5090
  pkg: module.pkg,
5040
5091
  canInstall: false,
5041
- canUpdate: outdated,
5092
+ canUpdate: outdated && blocked === void 0,
5042
5093
  canUninstall: true,
5043
5094
  version: {
5044
5095
  installed: module.installed,
@@ -5046,7 +5097,8 @@ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE_
5046
5097
  },
5047
5098
  ...outdated ? { moduleUpdate: {
5048
5099
  installed: module.installed,
5049
- latest
5100
+ latest,
5101
+ ...blocked === void 0 ? {} : { blocked }
5050
5102
  } } : {},
5051
5103
  defaultShown: defaults.has(module.unit),
5052
5104
  defaultChanged: changed[module.unit] ?? 0
@@ -5059,11 +5111,14 @@ function marketSwitchLocked(row) {
5059
5111
  return SWITCH_LOCKED.has(row.state);
5060
5112
  }
5061
5113
  function marketActions$1(row) {
5062
- 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
+ }
5063
5118
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
5064
5119
  return [
5065
5120
  ...row.canInstall ? ["install"] : [],
5066
- ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : ["update-bundle"],
5121
+ ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
5067
5122
  ...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
5068
5123
  ];
5069
5124
  }
@@ -5141,7 +5196,7 @@ function liveManifests(manifests, capabilities, installed) {
5141
5196
  return manifests.filter((manifest) => !gone.has(manifest.id));
5142
5197
  }
5143
5198
  function marketHasUpdates(rows, shared = []) {
5144
- 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");
5145
5200
  }
5146
5201
  function marketUpdatesOf(modules) {
5147
5202
  if (modules === null) return {};
@@ -5151,6 +5206,7 @@ function marketUpdatesOf(modules) {
5151
5206
  next[module.unit] = {
5152
5207
  installed: module.installed,
5153
5208
  ...local || module.latest === void 0 ? {} : { latest: module.latest },
5209
+ ...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
5154
5210
  ...local ? { local: true } : {}
5155
5211
  };
5156
5212
  }
@@ -5189,9 +5245,11 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5189
5245
  const reAdopt = capability?.released === true && !installDeclared;
5190
5246
  const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
5191
5247
  installed: entry.installed,
5192
- latest: entry.latest
5248
+ latest: entry.latest,
5249
+ ...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
5193
5250
  };
5194
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);
5195
5253
  rows.push({
5196
5254
  id: manifest.id,
5197
5255
  titleKey: manifest.card?.titleKey ?? manifest.id,
@@ -5199,7 +5257,7 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5199
5257
  canInstall: state !== "installed" && (install || reAdopt),
5200
5258
  canUpdate: onMachine && isOutdated(capability),
5201
5259
  canUninstall: onMachine,
5202
- ...shown === "unknown" || shown === "unchecked" ? { hint: "panels.market.uncheckedHint" } : {},
5260
+ ...hint === void 0 ? {} : { hint },
5203
5261
  ...entry === void 0 ? {} : { version: {
5204
5262
  installed: entry.installed,
5205
5263
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
@@ -5264,11 +5322,14 @@ function workbenchRow(version) {
5264
5322
  installed: version.installed,
5265
5323
  latest
5266
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;
5267
5328
  return {
5268
5329
  id: WORKBENCH_ROW_ID,
5269
5330
  titleKey: WORKBENCH_TITLE_KEY,
5270
5331
  workbench: true,
5271
- 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",
5272
5333
  canInstall: false,
5273
5334
  canUpdate: update !== void 0,
5274
5335
  canUninstall: false,
@@ -5278,6 +5339,8 @@ function workbenchRow(version) {
5278
5339
  ...latest === void 0 ? {} : { latest }
5279
5340
  },
5280
5341
  ...update === void 0 ? {} : { moduleUpdate: update },
5342
+ ...followUp === void 0 ? {} : { followUp },
5343
+ ...followUpState ? { hint: "panels.market.migrationHint" } : {},
5281
5344
  pkg: version.pkg
5282
5345
  };
5283
5346
  }
@@ -5285,6 +5348,7 @@ function workbenchRow(version) {
5285
5348
  //#region src/app/layouts/rightbar/market-hint.ts
5286
5349
  var PROBLEM_KEY = "panels.market.hasProblem";
5287
5350
  var RESTART_KEY = "panels.market.pendingRestart";
5351
+ var FOLLOWUP_KEY = "panels.market.pendingFollowUp";
5288
5352
  var UNKNOWN_KEY = "panels.market.unchecked";
5289
5353
  var UPDATES_KEY = "panels.market.hasNew";
5290
5354
  function isProblem(row) {
@@ -5315,12 +5379,14 @@ function marketHintOf(input) {
5315
5379
  ];
5316
5380
  const problem = rows.some(isProblem);
5317
5381
  const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
5382
+ const followUp = rows.some((row) => row.state === "pending-followup");
5318
5383
  const rosterRead = input.modules !== null;
5319
5384
  const unknown = rows.some((row) => isUnknown(row, rosterRead));
5320
5385
  const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
5321
5386
  const more = [];
5322
5387
  if (problem) {
5323
5388
  if (restart) more.push(RESTART_KEY);
5389
+ if (followUp) more.push(FOLLOWUP_KEY);
5324
5390
  if (unknown) more.push(UNKNOWN_KEY);
5325
5391
  if (updates) more.push(UPDATES_KEY);
5326
5392
  return {
@@ -5330,6 +5396,7 @@ function marketHintOf(input) {
5330
5396
  };
5331
5397
  }
5332
5398
  if (restart) {
5399
+ if (followUp) more.push(FOLLOWUP_KEY);
5333
5400
  if (unknown) more.push(UNKNOWN_KEY);
5334
5401
  if (updates) more.push(UPDATES_KEY);
5335
5402
  return {
@@ -5338,6 +5405,15 @@ function marketHintOf(input) {
5338
5405
  ...more.length === 0 ? {} : { moreKeys: more }
5339
5406
  };
5340
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
+ }
5341
5417
  if (unknown) {
5342
5418
  if (updates) more.push(UPDATES_KEY);
5343
5419
  return {
@@ -5633,114 +5709,118 @@ function useMarketTransient(input) {
5633
5709
  };
5634
5710
  }
5635
5711
  var MarketPage_module_default = {
5636
- marketList: "_marketList_9dzu9_1",
5637
- marketRow: "_marketRow_9dzu9_10",
5638
- marketIcon: "_marketIcon_9dzu9_20",
5639
- marketMain: "_marketMain_9dzu9_32",
5640
- marketName: "_marketName_9dzu9_39",
5641
- marketStatus: "_marketStatus_9dzu9_48",
5642
- marketStateText: "_marketStateText_9dzu9_58",
5643
- marketSep: "_marketSep_9dzu9_62",
5644
- marketReason: "_marketReason_9dzu9_66",
5645
- marketVersion: "_marketVersion_9dzu9_72",
5646
- marketLocalTag: "_marketLocalTag_9dzu9_94",
5647
- marketEnd: "_marketEnd_9dzu9_105",
5648
- marketSwitchSeat: "_marketSwitchSeat_9dzu9_112",
5649
- marketActions: "_marketActions_9dzu9_125",
5650
- marketUpdateAction: "_marketUpdateAction_9dzu9_131",
5651
- marketSelfDivider: "_marketSelfDivider_9dzu9_137",
5652
- marketSection: "_marketSection_9dzu9_143",
5653
- marketSectionHead: "_marketSectionHead_9dzu9_150",
5654
- marketSectionIcon: "_marketSectionIcon_9dzu9_156",
5655
- marketSectionTitle: "_marketSectionTitle_9dzu9_163",
5656
- marketSectionCount: "_marketSectionCount_9dzu9_169",
5657
- marketSectionQuiet: "_marketSectionQuiet_9dzu9_175",
5658
- marketProgress: "_marketProgress_9dzu9_188",
5659
- marketNote: "_marketNote_9dzu9_198",
5660
- marketFailure: "_marketFailure_9dzu9_205",
5661
- marketEmpty: "_marketEmpty_9dzu9_212",
5662
- marketPage: "_marketPage_9dzu9_217",
5663
- marketPageHead: "_marketPageHead_9dzu9_235",
5664
- marketPageTitle: "_marketPageTitle_9dzu9_243",
5665
- marketPageIntro: "_marketPageIntro_9dzu9_248",
5666
- marketPageTools: "_marketPageTools_9dzu9_254",
5667
- marketPanel: "_marketPanel_9dzu9_263",
5668
- marketTabs: "_marketTabs_9dzu9_273",
5669
- marketTabList: "_marketTabList_9dzu9_278",
5670
- marketIconButton: "_marketIconButton_9dzu9_283",
5671
- marketIconWrap: "_marketIconWrap_9dzu9_308",
5672
- marketIconButtonSpinning: "_marketIconButtonSpinning_9dzu9_312",
5673
- "wb-spin": "_wb-spin_9dzu9_1",
5674
- marketAddButton: "_marketAddButton_9dzu9_316",
5675
- marketEmptyTitle: "_marketEmptyTitle_9dzu9_333",
5676
- discoverPage: "_discoverPage_9dzu9_347",
5677
- discoverBar: "_discoverBar_9dzu9_354",
5678
- discoverTools: "_discoverTools_9dzu9_361",
5679
- discoverMarket: "_discoverMarket_9dzu9_367",
5680
- discoverMarketButton: "_discoverMarketButton_9dzu9_372",
5681
- discoverMarketName: "_discoverMarketName_9dzu9_379",
5682
- discoverLabels: "_discoverLabels_9dzu9_385",
5683
- discoverSort: "_discoverSort_9dzu9_390",
5684
- discoverRefresh: "_discoverRefresh_9dzu9_395",
5685
- discoverSearch: "_discoverSearch_9dzu9_399",
5686
- discoverChips: "_discoverChips_9dzu9_440",
5687
- discoverList: "_discoverList_9dzu9_447",
5688
- discoverCard: "_discoverCard_9dzu9_456",
5689
- discoverArtwork: "_discoverArtwork_9dzu9_470",
5690
- discoverArtworkImage: "_discoverArtworkImage_9dzu9_482",
5691
- discoverMain: "_discoverMain_9dzu9_486",
5692
- discoverTitleRow: "_discoverTitleRow_9dzu9_494",
5693
- discoverCardOpen: "_discoverCardOpen_9dzu9_502",
5694
- discoverStrong: "_discoverStrong_9dzu9_533",
5695
- discoverDesc: "_discoverDesc_9dzu9_539",
5696
- discoverMeta: "_discoverMeta_9dzu9_548",
5697
- discoverMuted: "_discoverMuted_9dzu9_555",
5698
- discoverEnd: "_discoverEnd_9dzu9_561",
5699
- discoverBlocked: "_discoverBlocked_9dzu9_570",
5700
- discoverEmpty: "_discoverEmpty_9dzu9_575",
5701
- discoverEmptyTitle: "_discoverEmptyTitle_9dzu9_584",
5702
- discoverDetail: "_discoverDetail_9dzu9_594",
5703
- discoverCrumb: "_discoverCrumb_9dzu9_600",
5704
- discoverCrumbIcon: "_discoverCrumbIcon_9dzu9_623",
5705
- discoverDetailHead: "_discoverDetailHead_9dzu9_627",
5706
- discoverDetailTitle: "_discoverDetailTitle_9dzu9_633",
5707
- discoverDetailText: "_discoverDetailText_9dzu9_639",
5708
- discoverDetailPanel: "_discoverDetailPanel_9dzu9_646",
5709
- discoverDetailTabs: "_discoverDetailTabs_9dzu9_653",
5710
- discoverDetailTabList: "_discoverDetailTabList_9dzu9_658",
5711
- discoverDocBody: "_discoverDocBody_9dzu9_663",
5712
- discoverDocNotice: "_discoverDocNotice_9dzu9_668",
5713
- discoverSection: "_discoverSection_9dzu9_674",
5714
- discoverSectionTitle: "_discoverSectionTitle_9dzu9_681",
5715
- discoverFacts: "_discoverFacts_9dzu9_687",
5716
- discoverFactRow: "_discoverFactRow_9dzu9_692",
5717
- discoverFactKind: "_discoverFactKind_9dzu9_702",
5718
- discoverFactValue: "_discoverFactValue_9dzu9_708",
5719
- discoverCode: "_discoverCode_9dzu9_716",
5720
- discoverTags: "_discoverTags_9dzu9_725",
5721
- discoverLink: "_discoverLink_9dzu9_732",
5722
- discoverVersions: "_discoverVersions_9dzu9_742",
5723
- discoverVersionRow: "_discoverVersionRow_9dzu9_750",
5724
- discoverVersionName: "_discoverVersionName_9dzu9_758",
5725
- discoverError: "_discoverError_9dzu9_763",
5726
- discoverFailure: "_discoverFailure_9dzu9_772",
5727
- discoverNotice: "_discoverNotice_9dzu9_778",
5728
- discoverMore: "_discoverMore_9dzu9_796",
5729
- discoverDialog: "_discoverDialog_9dzu9_800",
5730
- discoverDialogBody: "_discoverDialogBody_9dzu9_804",
5731
- discoverSourceList: "_discoverSourceList_9dzu9_810",
5732
- discoverSourceRow: "_discoverSourceRow_9dzu9_818",
5733
- discoverSourceError: "_discoverSourceError_9dzu9_826",
5734
- discoverSourceForm: "_discoverSourceForm_9dzu9_832",
5735
- discoverGrow: "_discoverGrow_9dzu9_838",
5736
- discoverField: "_discoverField_9dzu9_843",
5737
- discoverFieldLabel: "_discoverFieldLabel_9dzu9_849",
5738
- discoverConfirmHead: "_discoverConfirmHead_9dzu9_854",
5739
- discoverSkeletonFill: "_discoverSkeletonFill_9dzu9_860",
5740
- "wb-skeleton": "_wb-skeleton_9dzu9_1",
5741
- discoverSkeletonBar: "_discoverSkeletonBar_9dzu9_869",
5742
- discoverSkeletonTitle: "_discoverSkeletonTitle_9dzu9_876",
5743
- 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"
5744
5824
  };
5745
5825
  //#endregion
5746
5826
  //#region src/app/layouts/market/discover-states.tsx
@@ -5764,6 +5844,13 @@ function DiscoverSkeleton({ label }) {
5764
5844
  function DiscoverEmptyText({ text }) {
5765
5845
  return /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.discoverMuted }, text);
5766
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
+ }
5767
5854
  function DiscoverFailure({ t, text, onRetry }) {
5768
5855
  return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverFailure }, /* @__PURE__ */ createElement("p", {
5769
5856
  className: MarketPage_module_default.discoverError,
@@ -5832,6 +5919,18 @@ function sharedRowKind(row) {
5832
5919
  return row.kind === "extension" ? "plugin" : "lib";
5833
5920
  }
5834
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
5835
5934
  //#region src/app/layouts/rightbar/market-view-text.ts
5836
5935
  var PROGRESS_KEY = {
5837
5936
  install: "panels.market.installing",
@@ -5842,7 +5941,9 @@ var PROGRESS_KEY = {
5842
5941
  "update-dependency": "panels.market.updating",
5843
5942
  "update-plugin": "panels.market.updating",
5844
5943
  "uninstall-plugin": "panels.market.uninstalling",
5845
- "update-workbench": "panels.market.updating"
5944
+ "update-workbench": "panels.market.updating",
5945
+ "migrate-workbench": "panels.market.migrating",
5946
+ "dismiss-followup": "panels.market.dismissing"
5846
5947
  };
5847
5948
  var ACTION_LABEL_KEY = {
5848
5949
  install: "panels.market.install",
@@ -5853,7 +5954,9 @@ var ACTION_LABEL_KEY = {
5853
5954
  "update-dependency": "panels.market.update",
5854
5955
  "update-plugin": "panels.market.update",
5855
5956
  "uninstall-plugin": "panels.market.uninstall",
5856
- "update-workbench": "panels.market.update"
5957
+ "update-workbench": "panels.market.update",
5958
+ "migrate-workbench": "panels.market.migrateAction",
5959
+ "dismiss-followup": "panels.market.dismissFollowUp"
5857
5960
  };
5858
5961
  function holdOf(pending, application) {
5859
5962
  if (pending === null || pending.row === void 0) return void 0;
@@ -5901,12 +6004,9 @@ function withPinnedRow(rows, pinned) {
5901
6004
  function marketFootVisible(shown, installed) {
5902
6005
  return shown.length > 0 || installed.length > 0;
5903
6006
  }
5904
- function useMarketTitles(manifests, mocked) {
5905
- const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
5906
- useEffect(() => {
5907
- if (!mocked) setTitles((known) => mergeTitles(known, manifests));
5908
- }, [manifests, mocked]);
5909
- 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);
5910
6010
  }
5911
6011
  function useHeldRow(pending, backInRoster) {
5912
6012
  const [held, setHeld] = useState(void 0);
@@ -5942,10 +6042,11 @@ function pendingRowOf(input) {
5942
6042
  const { pending, removing } = input;
5943
6043
  if (removing === null || pending === null) return void 0;
5944
6044
  if (input.rows.some((row) => row.id === removing)) return void 0;
6045
+ const name = pending.label ?? input.names.get(removing);
5945
6046
  return {
5946
6047
  id: removing,
5947
- titleKey: pending.titleKey ?? input.titles.get(removing) ?? removing,
5948
- ...pending.label === void 0 ? {} : { label: pending.label },
6048
+ titleKey: pending.titleKey ?? removing,
6049
+ ...name === void 0 ? {} : { label: name },
5949
6050
  state: "installed",
5950
6051
  canInstall: false,
5951
6052
  canUpdate: false,
@@ -6062,49 +6163,120 @@ var updateActions = [
6062
6163
  "update-plugin",
6063
6164
  "update-workbench"
6064
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
+ }
6065
6224
  function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6066
6225
  const running = pending !== null && pending.id === row.id ? pending : null;
6067
6226
  const locked = pending !== null;
6227
+ const [migrationOpen, setMigrationOpen] = useState(false);
6228
+ const [dismissOpen, setDismissOpen] = useState(false);
6068
6229
  const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
6069
6230
  const actions = marketActions$1(row);
6070
6231
  const switchLocked = marketSwitchLocked(row);
6071
- const stateText = t(MARKET_STATE_KEY[row.state]);
6072
- const noteText = row.note === void 0 ? null : t(row.note.key, row.note.params);
6073
6232
  return /* @__PURE__ */ createElement("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ createElement("span", {
6074
6233
  className: MarketPage_module_default.marketIcon,
6075
6234
  "aria-hidden": "true"
6076
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", {
6077
6236
  from: row.version.installed,
6078
6237
  to: row.version.latest
6079
- }) : 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, {
6080
- state: MARKET_DOT[row.state],
6081
- size: 9
6082
- }), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketStateText }, stateText), row.hint === void 0 ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("span", {
6083
- className: MarketPage_module_default.marketSep,
6084
- "aria-hidden": "true"
6085
- }, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, t(row.hint))), noteText === null ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("span", {
6086
- className: MarketPage_module_default.marketSep,
6087
- "aria-hidden": "true"
6088
- }, "·"), /* @__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) => {
6089
6243
  const danger = dangerActions.includes(action);
6090
6244
  const update = updateActions.includes(action);
6091
6245
  return /* @__PURE__ */ createElement(Button, {
6092
6246
  key: action,
6093
6247
  type: "button",
6094
6248
  size: "sm",
6095
- variant: action === "install" ? "primary" : "outline",
6249
+ variant: action === "install" || action === "migrate-workbench" ? "primary" : "outline",
6096
6250
  className: danger ? "wb-dangerAction" : update ? MarketPage_module_default.marketUpdateAction : void 0,
6097
6251
  icon: danger ? /* @__PURE__ */ createElement(IconTrashOutlineRegular, { size: 13 }) : void 0,
6098
6252
  "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
6099
6253
  disabled: locked,
6100
- 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
+ }
6101
6259
  }, t(ACTION_LABEL_KEY[action]));
6102
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, {
6103
6261
  checked: row.defaultShown,
6104
6262
  disabled: boardBusy === true || locked || switchLocked,
6105
6263
  label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
6106
6264
  onChange: (next) => onDefault?.(next)
6107
- })))), 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
+ }));
6108
6280
  }
6109
6281
  function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
6110
6282
  if (rows.length === 0) return null;
@@ -6419,10 +6591,13 @@ function marketActOf(options) {
6419
6591
  seats.setConfirming(null);
6420
6592
  seats.setFailed(null);
6421
6593
  seats.setNotice(null);
6422
- 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" ? {
6423
6598
  action,
6424
6599
  id
6425
- } : 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" ? {
6426
6601
  action,
6427
6602
  name: row?.pkg ?? ""
6428
6603
  } : {
@@ -6440,6 +6615,21 @@ function marketActOf(options) {
6440
6615
  return;
6441
6616
  }
6442
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
+ }
6443
6633
  const change = changeOf(value);
6444
6634
  const failure = updateVerdictText(updateVerdictOf({
6445
6635
  action,
@@ -6563,8 +6753,8 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
6563
6753
  }));
6564
6754
  }
6565
6755
  function useMarketScene(input) {
6566
- const { manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
6567
- 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);
6568
6758
  const catalog = mock?.manifests ?? manifests;
6569
6759
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
6570
6760
  const effective = mock === void 0 ? capabilities : mock.capabilities;
@@ -6578,13 +6768,13 @@ function useMarketScene(input) {
6578
6768
  const pinned = pinnedRowOf(pending, steady.held);
6579
6769
  const busyId = heldIdOf(pending, steady.held);
6580
6770
  return {
6581
- titles,
6771
+ names,
6582
6772
  catalog,
6583
6773
  effective,
6584
6774
  updateMap,
6585
6775
  rows,
6586
6776
  shared,
6587
- 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),
6588
6778
  byDefault,
6589
6779
  steady,
6590
6780
  pinned,
@@ -6592,12 +6782,14 @@ function useMarketScene(input) {
6592
6782
  busyId
6593
6783
  };
6594
6784
  }
6595
- 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 = {} }) {
6596
6786
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
6597
6787
  mock,
6598
6788
  onPending
6599
6789
  });
6600
- 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,
6601
6793
  manifests,
6602
6794
  installable,
6603
6795
  capabilities,
@@ -6642,7 +6834,7 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
6642
6834
  pending,
6643
6835
  removing,
6644
6836
  rows,
6645
- titles
6837
+ names
6646
6838
  });
6647
6839
  const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
6648
6840
  const shown = withPinnedRow(pendingRow === void 0 ? rows : [...rows, pendingRow], pinned);
@@ -6911,7 +7103,7 @@ function sourceFromUrl(raw) {
6911
7103
  if (url === "" || url.includes("#") || hasCredentials(url)) return { ok: false };
6912
7104
  if (HTTP.test(url)) {
6913
7105
  const asGit = REPO_FILE.test(url);
6914
- const label = hostOf(url);
7106
+ const label = asGit ? sourceSuffix(url) || hostOf(url) : hostOf(url);
6915
7107
  if (label === "") return { ok: false };
6916
7108
  return {
6917
7109
  ok: true,
@@ -6944,6 +7136,13 @@ function sameSourceUrl(left, right) {
6944
7136
  function sourceSuffix(url) {
6945
7137
  return (withoutTrailingSlash(url).split(/[/:]/).filter((part) => part !== "").pop() ?? "").replace(/\.git$/, "");
6946
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
+ }
6947
7146
  function sourceLabelsOf(sources) {
6948
7147
  const counts = /* @__PURE__ */ new Map();
6949
7148
  for (const source of sources) counts.set(source.label, (counts.get(source.label) ?? 0) + 1);
@@ -6954,7 +7153,8 @@ function sourceLabelsOf(sources) {
6954
7153
  continue;
6955
7154
  }
6956
7155
  const suffix = sourceSuffix(source.url);
6957
- 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}`);
6958
7158
  }
6959
7159
  return labels;
6960
7160
  }
@@ -7081,11 +7281,15 @@ function DiscoverVersions({ t, locale, entry, onInstall }) {
7081
7281
  var MARKET_DISCOVER_ROUTE = "panels/market-discover";
7082
7282
  var MARKET_DOC_ROUTE = "panels/market-doc";
7083
7283
  var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
7284
+ var MARKET_SOURCES_ROUTE = "panels/market-sources";
7084
7285
  //#endregion
7085
7286
  //#region src/shared/hooks/market-queries.ts
7086
7287
  function readMarketDiscover(options = {}) {
7087
7288
  return apiGet(MARKET_DISCOVER_ROUTE, options.force === true ? { force: "1" } : {});
7088
7289
  }
7290
+ function readMarketSources() {
7291
+ return apiGet(MARKET_SOURCES_ROUTE);
7292
+ }
7089
7293
  function readMarketDoc(name, version, kind) {
7090
7294
  return apiGet(MARKET_DOC_ROUTE, {
7091
7295
  name,
@@ -7093,10 +7297,11 @@ function readMarketDoc(name, version, kind) {
7093
7297
  kind
7094
7298
  });
7095
7299
  }
7096
- function readPublishPreview(unit, version) {
7300
+ function readPublishPreview(unit, version, author) {
7097
7301
  return apiGet(MARKET_PUBLISH_PREVIEW_ROUTE, {
7098
7302
  unit,
7099
- ...version === void 0 || version === "" ? {} : { version }
7303
+ ...version === void 0 || version === "" ? {} : { version },
7304
+ ...author === void 0 || author === "" ? {} : { author }
7100
7305
  });
7101
7306
  }
7102
7307
  //#endregion
@@ -7350,6 +7555,7 @@ function DiscoverSourcesDialog(props) {
7350
7555
  const [url, setUrl] = useState("");
7351
7556
  const [problem, setProblem] = useState(null);
7352
7557
  const pending = props.busy || props.adding;
7558
+ const selectedVisible = props.sources.some((source) => source.id === props.selected);
7353
7559
  const add = () => {
7354
7560
  if (pending) return;
7355
7561
  const parsed = sourceFromUrl(url);
@@ -7372,13 +7578,29 @@ function DiscoverSourcesDialog(props) {
7372
7578
  closeLabel: t("panels.discover.close"),
7373
7579
  description: t("panels.discover.sourcesIntro"),
7374
7580
  className: MarketPage_module_default.discoverDialog
7375
- }, /* @__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", {
7376
7588
  className: MarketPage_module_default.discoverSourceList,
7377
7589
  "aria-label": t("panels.discover.sourcesLabel")
7378
7590
  }, props.sources.map((source) => /* @__PURE__ */ createElement("li", {
7379
7591
  key: source.id,
7380
7592
  className: MarketPage_module_default.discoverSourceRow
7381
- }, /* @__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, {
7382
7604
  label: t("panels.discover.removeSource"),
7383
7605
  side: "bottom",
7384
7606
  portal: true,
@@ -7391,7 +7613,13 @@ function DiscoverSourcesDialog(props) {
7391
7613
  "aria-label": t("panels.discover.removeSourceNamed", { url: source.url }),
7392
7614
  disabled: pending,
7393
7615
  onClick: () => props.onRemove(source.id)
7394
- }))))), /* @__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", {
7395
7623
  className: MarketPage_module_default.discoverSourceForm,
7396
7624
  onSubmit: (event) => {
7397
7625
  event.preventDefault();
@@ -7434,12 +7662,16 @@ function DiscoverDialogs({ t, d }) {
7434
7662
  t,
7435
7663
  open: d.manageOpen,
7436
7664
  sources: d.sources,
7665
+ selected: d.selected,
7666
+ loading: d.loading,
7667
+ slow: d.slow,
7437
7668
  problem: d.problem,
7438
7669
  busy: d.busy,
7439
7670
  adding: d.addingSource,
7440
7671
  onClose: () => d.setManageOpen(false),
7441
7672
  onAdd: d.addSource,
7442
- onRemove: d.removeSourceById
7673
+ onRemove: d.removeSourceById,
7674
+ onSelect: d.selectSource
7443
7675
  }), /* @__PURE__ */ createElement(DiscoverConfirm, {
7444
7676
  t,
7445
7677
  locale: d.locale,
@@ -7536,6 +7768,7 @@ function DiscoverToolbar(props) {
7536
7768
  value: text,
7537
7769
  placeholder: t("panels.discover.search"),
7538
7770
  "aria-label": t("panels.discover.search"),
7771
+ disabled: props.loading,
7539
7772
  onChange: (event) => setText(event.currentTarget.value)
7540
7773
  }), props.labels.length === 0 ? null : /* @__PURE__ */ createElement(Menu, {
7541
7774
  className: MarketPage_module_default.discoverLabels,
@@ -7584,6 +7817,7 @@ function DiscoverToolbar(props) {
7584
7817
  variant: "ghost",
7585
7818
  "aria-haspopup": "menu",
7586
7819
  "aria-expanded": open === "sort",
7820
+ disabled: props.loading,
7587
7821
  onClick: () => setOpen(open === "sort" ? null : "sort")
7588
7822
  }, t("panels.discover.sortWith", { label: sortName }), /* @__PURE__ */ createElement(IconChevronDownOutlineRegular, {
7589
7823
  size: 12,
@@ -7622,6 +7856,12 @@ var SHIPPED = [
7622
7856
  "restart-required",
7623
7857
  "overridden"
7624
7858
  ];
7859
+ function sourceRowsOf(sources) {
7860
+ return sources.map((source) => ({
7861
+ ...source,
7862
+ writable: source.kind === "http" ? false : null
7863
+ }));
7864
+ }
7625
7865
  function installVerdictOf(value, t) {
7626
7866
  const change = changeOf(value);
7627
7867
  if (change === void 0) return { kind: "quiet" };
@@ -7635,6 +7875,7 @@ function installVerdictOf(value, t) {
7635
7875
  function useDiscover(t, active, onInstalled) {
7636
7876
  const [payload, setPayload] = useState(null);
7637
7877
  const [loading, setLoading] = useState(true);
7878
+ const [slow, setSlow] = useState(false);
7638
7879
  const [failure, setFailure] = useState(null);
7639
7880
  const [query, setQuery] = useState("");
7640
7881
  const [category, setCategory] = useState(null);
@@ -7647,7 +7888,10 @@ function useDiscover(t, active, onInstalled) {
7647
7888
  const [choice, setChoice] = useState(null);
7648
7889
  const [notice, setNotice] = useState(null);
7649
7890
  const [addingSource, setAddingSource] = useState(false);
7891
+ const [knownSources, setKnownSources] = useState(null);
7650
7892
  const loaded = useRef(false);
7893
+ const loadTicket = useRef(0);
7894
+ const sourceTicket = useRef(0);
7651
7895
  const locale = useMemo(() => localeNow(), []);
7652
7896
  const sources = useHostWrite({
7653
7897
  channel: "actions",
@@ -7658,11 +7902,27 @@ function useDiscover(t, active, onInstalled) {
7658
7902
  channel: "provision",
7659
7903
  networkText: t("panels.discover.failed")
7660
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
+ }, []);
7661
7916
  const load = useCallback(async (force = false) => {
7917
+ const ticket = loadTicket.current + 1;
7918
+ loadTicket.current = ticket;
7662
7919
  setLoading(true);
7920
+ setSlow(false);
7663
7921
  setFailure(null);
7664
7922
  const response = await readMarketDiscover({ force }).catch(() => null);
7923
+ if (loadTicket.current !== ticket) return;
7665
7924
  setLoading(false);
7925
+ setSlow(false);
7666
7926
  if (response === null || !response.ok) {
7667
7927
  setFailure(t("panels.discover.unreadable"));
7668
7928
  return;
@@ -7670,11 +7930,29 @@ function useDiscover(t, active, onInstalled) {
7670
7930
  setPayload(response);
7671
7931
  setLimit(50);
7672
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
+ };
7673
7941
  useEffect(() => {
7674
7942
  if (!active || loaded.current) return;
7675
7943
  loaded.current = true;
7944
+ loadSources();
7676
7945
  load();
7677
- }, [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]);
7678
7956
  useEffect(() => subscribeFactRevision(CAPABILITY_FACT, () => {
7679
7957
  if (!loaded.current) return;
7680
7958
  load(true);
@@ -7728,6 +8006,8 @@ function useDiscover(t, active, onInstalled) {
7728
8006
  const done = typeof value?.["branch"] === "string" ? value["branch"] : branch;
7729
8007
  setInitOpen(false);
7730
8008
  setNotice(t("panels.discover.initDone", { branch: done }));
8009
+ beginSwitch();
8010
+ await loadSources();
7731
8011
  await load(true);
7732
8012
  });
7733
8013
  };
@@ -7745,8 +8025,11 @@ function useDiscover(t, active, onInstalled) {
7745
8025
  id
7746
8026
  },
7747
8027
  select: true
7748
- }).then(async (outcome) => {
7749
- if (outcome.ok) await load(true);
8028
+ }).then((outcome) => {
8029
+ if (!outcome.ok) return;
8030
+ beginSwitch();
8031
+ loadSources();
8032
+ load(true);
7750
8033
  }).finally(() => setAddingSource(false));
7751
8034
  };
7752
8035
  const removeSourceById = (id) => {
@@ -7758,6 +8041,8 @@ function useDiscover(t, active, onInstalled) {
7758
8041
  }).then(async (outcome) => {
7759
8042
  if (!outcome.ok) return;
7760
8043
  setDetail(null);
8044
+ beginSwitch();
8045
+ await loadSources();
7761
8046
  await load(true);
7762
8047
  });
7763
8048
  };
@@ -7770,11 +8055,23 @@ function useDiscover(t, active, onInstalled) {
7770
8055
  setSelectedLabels([]);
7771
8056
  setSort("default");
7772
8057
  setDetail(null);
8058
+ beginSwitch();
8059
+ setKnownSources((current) => current === null ? current : {
8060
+ sources: current.sources,
8061
+ selected: id
8062
+ });
7773
8063
  sources.send({
7774
8064
  action: "select",
7775
8065
  id
7776
8066
  }).then(async (outcome) => {
7777
- 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);
7778
8075
  });
7779
8076
  };
7780
8077
  const install = () => {
@@ -7809,9 +8106,10 @@ function useDiscover(t, active, onInstalled) {
7809
8106
  locale,
7810
8107
  payload,
7811
8108
  loading,
8109
+ slow,
7812
8110
  failure,
7813
- sources: payload?.sources ?? [],
7814
- selected: payload?.selected ?? null,
8111
+ sources: payload?.sources ?? knownSources?.sources ?? [],
8112
+ selected: payload?.selected ?? knownSources?.selected ?? null,
7815
8113
  entries,
7816
8114
  shown,
7817
8115
  total: sorted.length,
@@ -7882,35 +8180,45 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
7882
8180
  t,
7883
8181
  d
7884
8182
  });
7885
- 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, {
7886
8191
  t,
7887
8192
  text: t("panels.discover.sourcesFailed"),
7888
8193
  onRetry: d.reload
7889
- }), dialogs);
8194
+ }), slowHint, d.writeFailed === null ? null : /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.discoverError }, d.writeFailed), dialogs);
7890
8195
  if (d.payload.state === "no-source") return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverPage }, /* @__PURE__ */ createElement(DiscoverNoSource, {
7891
8196
  t,
7892
8197
  onAdd: () => d.setManageOpen(true)
7893
8198
  }), dialogs);
7894
- 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;
7895
8203
  const emptyText = unfiltered({
7896
8204
  query: d.query,
7897
8205
  category: d.category,
7898
8206
  labels: d.selectedLabels
7899
8207
  }) ? t("panels.discover.empty") : t("panels.discover.noMatch");
7900
- 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", {
7901
8209
  className: MarketPage_module_default.discoverNotice,
7902
8210
  role: "note"
7903
8211
  }, /* @__PURE__ */ createElement(IconWarningOutlineRegular, {
7904
8212
  size: 14,
7905
8213
  "aria-hidden": "true"
7906
- }), /* @__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, {
7907
8215
  t,
7908
8216
  text: readFailed,
7909
8217
  onRetry: d.reload
7910
8218
  }) : /* @__PURE__ */ createElement(DiscoverUninitialized, {
7911
8219
  t,
7912
- path: d.uninitialized.path,
7913
- empty: d.uninitialized.empty,
8220
+ path: uninitialized.path,
8221
+ empty: uninitialized.empty,
7914
8222
  onInit: () => d.setInitOpen(true)
7915
8223
  }), d.notice === null ? null : /* @__PURE__ */ createElement("p", {
7916
8224
  className: MarketPage_module_default.discoverNotice,
@@ -7929,7 +8237,7 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
7929
8237
  version
7930
8238
  }),
7931
8239
  onShowInstalled
7932
- }) : 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, {
7933
8241
  t,
7934
8242
  locale: d.locale,
7935
8243
  entries: d.shown,
@@ -8710,7 +9018,7 @@ function newRequestId() {
8710
9018
  return crypto.randomUUID();
8711
9019
  }
8712
9020
  function useAddModule(options) {
8713
- const { open, onInstalled, failedText } = options;
9021
+ const { onInstalled, failedText } = options;
8714
9022
  const [spec, setSpec] = useState("");
8715
9023
  const [choice, setChoice] = useState({
8716
9024
  kind: "default",
@@ -8741,7 +9049,6 @@ function useAddModule(options) {
8741
9049
  networkText: failedText
8742
9050
  });
8743
9051
  useEffect(() => {
8744
- if (!open) return void 0;
8745
9052
  let alive = true;
8746
9053
  readBundleRegistries().then((response) => {
8747
9054
  if (!alive) return;
@@ -8750,19 +9057,8 @@ function useAddModule(options) {
8750
9057
  return () => {
8751
9058
  alive = false;
8752
9059
  };
8753
- }, [open]);
9060
+ }, []);
8754
9061
  const registry = registryOf(choice, custom);
8755
- useEffect(() => {
8756
- if (open) return;
8757
- generationRef.current += 1;
8758
- setGuideOpen(false);
8759
- setRegistryOpen(false);
8760
- setProblem(null);
8761
- setPreview(null);
8762
- setOutcome(null);
8763
- setFailure(null);
8764
- setPhase("idle");
8765
- }, [open]);
8766
9062
  const check = useCallback(() => {
8767
9063
  const wanted = spec.trim();
8768
9064
  if (wanted === "") return;
@@ -8899,15 +9195,21 @@ function useAddModule(options) {
8899
9195
  //#endregion
8900
9196
  //#region src/app/layouts/market/AddModuleDialog.tsx
8901
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 }) {
8902
9206
  const real = useAddModule({
8903
- open,
8904
9207
  onInstalled,
8905
9208
  failedText: t("panels.failed")
8906
9209
  });
8907
9210
  const devAdd = devSurface.useStrips("addModule", []);
8908
9211
  const mock = devAdd.current;
8909
9212
  const state = mock === void 0 ? real : devSurface.addModuleState(real, mock);
8910
- if (!open) return null;
8911
9213
  const installing = state.phase === "installing";
8912
9214
  const checking = state.phase === "inspecting";
8913
9215
  const empty = state.spec.trim() === "";
@@ -8967,7 +9269,7 @@ function AddModuleDialog({ t, open, onClose, onInstalled }) {
8967
9269
  onClick: () => state.install()
8968
9270
  }, t("panels.market.add.retry")) : null) : null);
8969
9271
  return /* @__PURE__ */ createElement(Modal, {
8970
- open,
9272
+ open: true,
8971
9273
  onClose: () => {
8972
9274
  if (!installing) onClose();
8973
9275
  },
@@ -9040,7 +9342,7 @@ function makeMarketEntryIcon(units) {
9040
9342
  return /* @__PURE__ */ createElement(IconModules, { size });
9041
9343
  };
9042
9344
  }
9043
- function MarketPanel({ t, units }) {
9345
+ function MarketPanel({ t, units, titleOf }) {
9044
9346
  const manifests = useLiveManifests(units);
9045
9347
  const installable = useInstallableUnits(units);
9046
9348
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
@@ -9138,6 +9440,7 @@ function MarketPanel({ t, units }) {
9138
9440
  }, /* @__PURE__ */ createElement(MarketView, {
9139
9441
  key: `${mock?.id ?? "real-market"}-${mockNonce}`,
9140
9442
  t,
9443
+ titleOf,
9141
9444
  manifests,
9142
9445
  installable,
9143
9446
  capabilities,
@@ -9173,6 +9476,10 @@ function MarketPanel({ t, units }) {
9173
9476
  }
9174
9477
  function registerMarketPanel(ctx, units) {
9175
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;
9176
9483
  ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({
9177
9484
  name: "sidebar.panellist",
9178
9485
  id: MARKET_PANEL_ID,
@@ -9184,7 +9491,10 @@ function registerMarketPanel(ctx, units) {
9184
9491
  name: "main",
9185
9492
  key: MARKET_PANEL_ID,
9186
9493
  locale: LOCALE_NS,
9187
- inject: () => ({ units })
9494
+ inject: () => ({
9495
+ units,
9496
+ titleOf
9497
+ })
9188
9498
  }, MarketPanel));
9189
9499
  }
9190
9500
  //#endregion
@@ -9236,6 +9546,14 @@ function flush() {
9236
9546
  }).catch(() => void 0);
9237
9547
  }
9238
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
9239
9557
  //#region src/shared/hooks/use-api-resource.ts
9240
9558
  var use_api_resource_exports = /* @__PURE__ */ __exportAll({
9241
9559
  readKeyOf: () => readKeyOf,
@@ -9307,7 +9625,10 @@ function useApiResource(route, query, refreshToken, options = {}) {
9307
9625
  const identity = resourceIdentity(route, query, options.key);
9308
9626
  const factRev = useFactRevision(options.fact ?? factOfRoute(route));
9309
9627
  const key = readKeyOf(identity, refreshToken, factRev);
9310
- const [state, setState] = useState(() => enabled ? { phase: "loading" } : { phase: "idle" });
9628
+ const [current, setCurrent] = useState(() => ({
9629
+ identity,
9630
+ state: enabled ? LOADING : IDLE
9631
+ }));
9311
9632
  const lastIdentity = useRef(null);
9312
9633
  const queryRef = useRef(query);
9313
9634
  useEffect(() => {
@@ -9316,17 +9637,23 @@ function useApiResource(route, query, refreshToken, options = {}) {
9316
9637
  useEffect(() => {
9317
9638
  if (!enabled) {
9318
9639
  lastIdentity.current = null;
9319
- setState({ phase: "idle" });
9320
9640
  return;
9321
9641
  }
9322
9642
  let cancelled = false;
9643
+ const put = (state) => setCurrent({
9644
+ identity,
9645
+ state
9646
+ });
9323
9647
  const sameIdentity = lastIdentity.current === identity;
9324
9648
  lastIdentity.current = identity;
9325
- setState((prev) => sameIdentity && prev.value !== void 0 ? {
9326
- phase: "loading",
9327
- value: prev.value,
9328
- ...prev.at === void 0 ? {} : { at: prev.at }
9329
- } : { 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
+ }));
9330
9657
  const flight = requestResource(route, queryRef.current, key);
9331
9658
  const owner = options.report === false ? null : unitOfRoute(route);
9332
9659
  if (owner !== null) reportPanelRead({
@@ -9337,7 +9664,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9337
9664
  flight.task.then((response) => {
9338
9665
  if (cancelled) return;
9339
9666
  if (response.ok) {
9340
- setState({
9667
+ put({
9341
9668
  phase: "ready",
9342
9669
  value: response,
9343
9670
  at: Date.now()
@@ -9349,7 +9676,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9349
9676
  });
9350
9677
  return;
9351
9678
  }
9352
- setState({
9679
+ put({
9353
9680
  phase: "error",
9354
9681
  error: response.error
9355
9682
  });
@@ -9365,7 +9692,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9365
9692
  }).catch((reason) => {
9366
9693
  if (cancelled) return;
9367
9694
  const message = reason instanceof Error ? reason.message : String(reason);
9368
- setState({
9695
+ put({
9369
9696
  phase: "error",
9370
9697
  error: {
9371
9698
  code: "network",
@@ -9396,7 +9723,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9396
9723
  options.fact,
9397
9724
  options.report
9398
9725
  ]);
9399
- return state;
9726
+ return resourceViewOf(enabled, current, identity);
9400
9727
  }
9401
9728
  //#endregion
9402
9729
  //#region src/shared/hooks/use-diy-debug.ts
@@ -10443,6 +10770,26 @@ function assembleClientUnits(registry) {
10443
10770
  for (const face of CLIENT_UNITS) registry.register(face);
10444
10771
  }
10445
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
10446
10793
  //#region src/kernel/client/board-registry.ts
10447
10794
  function createBoardRegistry() {
10448
10795
  const modules = [];
@@ -10518,6 +10865,10 @@ function createClientUnitRegistry(options = {}) {
10518
10865
  let installableIds = null;
10519
10866
  let revision = 0;
10520
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
+ }
10521
10872
  function notify() {
10522
10873
  revision += 1;
10523
10874
  for (const listener of [...listeners]) try {
@@ -10597,7 +10948,10 @@ function createClientUnitRegistry(options = {}) {
10597
10948
  for (const entry of registrations) {
10598
10949
  const next = known.get(entry.unit);
10599
10950
  if (entry.mounted === null) {
10600
- if (next !== void 0 && attach(entry)) changed = true;
10951
+ if (next !== void 0) {
10952
+ attach(entry);
10953
+ changed = true;
10954
+ }
10601
10955
  continue;
10602
10956
  }
10603
10957
  if (next === void 0) {
@@ -10606,6 +10960,11 @@ function createClientUnitRegistry(options = {}) {
10606
10960
  changed = true;
10607
10961
  }
10608
10962
  }
10963
+ const titles = titlesOf(manifests);
10964
+ if (titles !== titleSignature) {
10965
+ titleSignature = titles;
10966
+ changed = true;
10967
+ }
10609
10968
  if (!changed) return;
10610
10969
  manifestsCache = void 0;
10611
10970
  notify();
@@ -11376,6 +11735,7 @@ function publishRows(args, preview, t) {
11376
11735
  const unit = textOf(args, "unit");
11377
11736
  const target = textOf(args, "target");
11378
11737
  const version = textOf(args, "version");
11738
+ const author = textOf(args, "author");
11379
11739
  const rows = [
11380
11740
  {
11381
11741
  label: t("approval.publish.module"),
@@ -11391,7 +11751,7 @@ function publishRows(args, preview, t) {
11391
11751
  },
11392
11752
  {
11393
11753
  label: t("approval.publish.author"),
11394
- 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
11395
11755
  }
11396
11756
  ];
11397
11757
  const market = preview?.market;
@@ -11438,17 +11798,22 @@ function PublishChangelogSeat({ changelog, t }) {
11438
11798
  function PublishApprovalSeat({ args, t }) {
11439
11799
  const unit = textOf(args, "unit");
11440
11800
  const version = textOf(args, "version");
11801
+ const author = textOf(args, "author");
11441
11802
  const [preview, setPreview] = useState(() => unit === "" ? null : void 0);
11442
11803
  useEffect(() => {
11443
11804
  if (unit === "") return;
11444
11805
  let live = true;
11445
- readPublishPreview(unit, version).then((response) => {
11806
+ readPublishPreview(unit, version, author).then((response) => {
11446
11807
  if (live) setPreview(response.ok ? response.preview : null);
11447
11808
  });
11448
11809
  return () => {
11449
11810
  live = false;
11450
11811
  };
11451
- }, [unit, version]);
11812
+ }, [
11813
+ unit,
11814
+ version,
11815
+ author
11816
+ ]);
11452
11817
  return createElement(ApprovalPlan, { rows: publishRows(args, preview, t) }, createElement(PublishChangelogSeat, {
11453
11818
  changelog: preview?.changelog,
11454
11819
  t
@@ -12213,10 +12578,10 @@ function dismissPanelByPointer(next, scope, onOpenChange) {
12213
12578
  //#region src/app/layouts/rightbar/PanelModules.tsx
12214
12579
  function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshToken, manifests, onOpenMarket }) {
12215
12580
  const { capabilities, checkedAt, forceProbe } = useCapabilityMap(refreshToken);
12216
- const [decided, setDecided] = useState(false);
12581
+ const decided = useRef(false);
12217
12582
  useEffect(() => {
12218
- if (!open || decided) return;
12219
- setDecided(true);
12583
+ if (!open || decided.current) return;
12584
+ decided.current = true;
12220
12585
  if (!shouldProbeOnEnter({
12221
12586
  checkedAt,
12222
12587
  now: Date.now(),
@@ -12226,7 +12591,6 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
12226
12591
  forceProbe();
12227
12592
  }, [
12228
12593
  open,
12229
- decided,
12230
12594
  checkedAt,
12231
12595
  forceProbe
12232
12596
  ]);
@@ -14366,7 +14730,7 @@ function messagesOf(units) {
14366
14730
  ...face.messages === void 0 ? {} : { messages: face.messages }
14367
14731
  }));
14368
14732
  }
14369
- 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*/";
14370
14734
  function workbenchCss() {
14371
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}`;
14372
14736
  }
@@ -14418,7 +14782,7 @@ function mount(ctx) {
14418
14782
  let disposeDictionary;
14419
14783
  const publish = () => {
14420
14784
  disposeDictionary?.();
14421
- const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, messagesOf(units.all()));
14785
+ const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, [unitTitlesOf(units.manifests()), ...messagesOf(units.all())]);
14422
14786
  for (const problem of problems) console.warn(`[dsh-workbench] 套件 ${problem.unit} 的文案没并进来(只有它少了这几句):${problem.reason}`);
14423
14787
  disposeDictionary = ctx.locale.register(LOCALE_NS, merged);
14424
14788
  };