@chatcode/cco-better-sidebar 0.18.0-rc.3 → 0.18.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +19 -1
  2. package/README_EN.md +19 -1
  3. package/lib/client-editor.js +326 -258
  4. package/lib/client-mermaid.js +312 -259
  5. package/lib/client-registry.js +1392 -605
  6. package/lib/client-terminal.js +328 -260
  7. package/lib/client.js +1352 -565
  8. package/lib/index.js +162 -5
  9. package/lib/types/client/LogoutConfirmDialog.d.ts +5 -0
  10. package/lib/types/client/PluginMarketSettingsSection.d.ts +7 -0
  11. package/lib/types/client/PluginMarketView.d.ts +7 -0
  12. package/lib/types/client/api.d.ts +15 -0
  13. package/lib/types/client/builtins/tabs.d.ts +6 -3
  14. package/lib/types/client/locales.d.ts +23 -0
  15. package/lib/types/client/plugin-market-catalog.d.ts +25 -0
  16. package/lib/types/client/ui-tweaks/branding.d.ts +1 -1
  17. package/lib/types/client/ui-tweaks/index.d.ts +1 -1
  18. package/lib/types/client/ui-tweaks/sidebar-header.d.ts +6 -0
  19. package/lib/types/client/ui-tweaks/typography.d.ts +9 -0
  20. package/lib/types/login-page-script.d.ts +2 -0
  21. package/lib/types/login-route.d.ts +2 -0
  22. package/lib/types/plugin-market-api.d.ts +5 -0
  23. package/lib/types/plugin-market-shared.d.ts +37 -0
  24. package/lib/types/ui-tweaks/config.d.ts +5 -6
  25. package/package.json +1 -1
  26. package/src/client/AccountMenu.tsx +12 -2
  27. package/src/client/LogoutConfirmDialog.tsx +39 -0
  28. package/src/client/PluginMarketSettingsSection.tsx +55 -0
  29. package/src/client/PluginMarketView.module.css +35 -0
  30. package/src/client/PluginMarketView.tsx +154 -0
  31. package/src/client/api.ts +7 -0
  32. package/src/client/builtins/tabs.tsx +16 -3
  33. package/src/client/index.tsx +10 -1
  34. package/src/client/locales-ja.ts +23 -0
  35. package/src/client/locales.ts +48 -0
  36. package/src/client/plugin-market-catalog.ts +90 -0
  37. package/src/client/sidebar.module.css +81 -19
  38. package/src/client/ui-tweaks/branding.tsx +25 -16
  39. package/src/client/ui-tweaks/index.tsx +36 -99
  40. package/src/client/ui-tweaks/sidebar-header.ts +73 -0
  41. package/src/client/ui-tweaks/typography.ts +38 -0
  42. package/src/index.ts +2 -0
  43. package/src/login-page-script.ts +107 -0
  44. package/src/login-route.ts +7 -4
  45. package/src/plugin-market-api.ts +42 -0
  46. package/src/plugin-market-shared.ts +21 -0
  47. package/src/ui-tweaks/config.ts +10 -10
@@ -2006,8 +2006,31 @@ window.__ModuleLoader__.load({
2006
2006
  */
2007
2007
  /** The ja dictionary (key-set-equal to zh, enforced by the type annotation in locales.ts). */
2008
2008
  const ja$1 = {
2009
+ pluginMarketTitle: "プラグインマーケット",
2010
+ pluginMarketProjectDirectory: "プロジェクトディレクトリ:{path}",
2011
+ pluginMarketInstalledTab: "インストール済み",
2012
+ pluginMarketRefresh: "更新",
2013
+ pluginMarketLoading: "プラグインを読み込み中…",
2014
+ pluginMarketRefreshing: "一覧を更新中…",
2015
+ pluginMarketEmpty: "プラグインはありません。",
2016
+ pluginMarketBack: "戻る",
2017
+ pluginMarketInstall: "インストール",
2018
+ pluginMarketUninstall: "アンインストール",
2019
+ pluginMarketProject: "プロジェクト",
2020
+ pluginMarketUser: "ユーザー",
2021
+ pluginMarketInstalled: "プラグインをインストールしました。",
2022
+ pluginMarketUninstalled: "プラグインをアンインストールしました。",
2023
+ pluginMarketSubtitle: "マーケットを参照し、プロジェクトまたはユーザー環境にインストールします。",
2024
+ pluginMarketSearch: "マーケットやプラグインを検索",
2025
+ pluginMarketDefault: "デフォルト",
2026
+ pluginMarketBrowse: "プラグインを見る",
2027
+ pluginMarketNoDescription: "説明なし",
2028
+ pluginMarketInstalling: "インストール中…",
2029
+ pluginMarketUninstalling: "アンインストール中…",
2009
2030
  accountMenuSettings: "設定",
2010
2031
  accountMenuLogout: "ログアウト",
2032
+ accountMenuLogoutConfirmTitle: "ログアウトしますか?",
2033
+ accountMenuLogoutConfirmDescription: "ChatCode CLI からログアウトしますか?続行するには再度ログインする必要があります。",
2011
2034
  accountMenuLabel: "アカウントメニュー",
2012
2035
  updateMenu: "更新を確認 / 今すぐ更新",
2013
2036
  updateNav: "更新",
@@ -9582,8 +9605,31 @@ window.__ModuleLoader__.load({
9582
9605
  */
9583
9606
  /** The zh dictionary (also registered into the ChatCode CLI locale registry under {@link LOCALE_NS}). */
9584
9607
  const zh$1 = {
9608
+ pluginMarketTitle: "插件市场",
9609
+ pluginMarketProjectDirectory: "项目目录:{path}",
9610
+ pluginMarketInstalledTab: "已安装",
9611
+ pluginMarketRefresh: "刷新",
9612
+ pluginMarketLoading: "正在加载插件…",
9613
+ pluginMarketRefreshing: "正在刷新列表…",
9614
+ pluginMarketEmpty: "暂无插件。",
9615
+ pluginMarketBack: "返回",
9616
+ pluginMarketInstall: "安装",
9617
+ pluginMarketUninstall: "卸载",
9618
+ pluginMarketProject: "项目级",
9619
+ pluginMarketUser: "用户级",
9620
+ pluginMarketInstalled: "插件安装成功。",
9621
+ pluginMarketUninstalled: "插件卸载成功。",
9622
+ pluginMarketSubtitle: "浏览插件市场,选择安装到当前项目或用户环境。",
9623
+ pluginMarketSearch: "搜索市场或插件",
9624
+ pluginMarketDefault: "默认",
9625
+ pluginMarketBrowse: "查看插件",
9626
+ pluginMarketNoDescription: "暂无描述",
9627
+ pluginMarketInstalling: "安装中…",
9628
+ pluginMarketUninstalling: "卸载中…",
9585
9629
  accountMenuSettings: "设置",
9586
9630
  accountMenuLogout: "退出登录",
9631
+ accountMenuLogoutConfirmTitle: "退出登录?",
9632
+ accountMenuLogoutConfirmDescription: "确定要退出 ChatCode CLI 吗?退出后需要重新登录才能继续使用。",
9587
9633
  accountMenuLabel: "账户菜单",
9588
9634
  updateMenu: "检查更新 / 一键更新",
9589
9635
  updateNav: "更新",
@@ -10052,8 +10098,31 @@ window.__ModuleLoader__.load({
10052
10098
  };
10053
10099
  /** The en dictionary (key-set-equal to zh, enforced by the type annotation). */
10054
10100
  const en$1 = {
10101
+ pluginMarketTitle: "Plugin marketplace",
10102
+ pluginMarketProjectDirectory: "Project directory: {path}",
10103
+ pluginMarketInstalledTab: "Installed",
10104
+ pluginMarketRefresh: "Refresh",
10105
+ pluginMarketLoading: "Loading plugins…",
10106
+ pluginMarketRefreshing: "Refreshing list…",
10107
+ pluginMarketEmpty: "No plugins.",
10108
+ pluginMarketBack: "Back",
10109
+ pluginMarketInstall: "Install",
10110
+ pluginMarketUninstall: "Uninstall",
10111
+ pluginMarketProject: "Project",
10112
+ pluginMarketUser: "User",
10113
+ pluginMarketInstalled: "Plugin installed.",
10114
+ pluginMarketUninstalled: "Plugin uninstalled.",
10115
+ pluginMarketSubtitle: "Browse marketplaces and install plugins for your project or user.",
10116
+ pluginMarketSearch: "Search marketplaces or plugins",
10117
+ pluginMarketDefault: "Default",
10118
+ pluginMarketBrowse: "Browse plugins",
10119
+ pluginMarketNoDescription: "No description",
10120
+ pluginMarketInstalling: "Installing…",
10121
+ pluginMarketUninstalling: "Uninstalling…",
10055
10122
  accountMenuSettings: "Settings",
10056
10123
  accountMenuLogout: "Log out",
10124
+ accountMenuLogoutConfirmTitle: "Log out?",
10125
+ accountMenuLogoutConfirmDescription: "Are you sure you want to log out of ChatCode CLI? You will need to sign in again to continue.",
10057
10126
  accountMenuLabel: "Account menu",
10058
10127
  updateMenu: "Check for updates / Update now",
10059
10128
  updateNav: "Update",
@@ -10526,6 +10595,8 @@ window.__ModuleLoader__.load({
10526
10595
  */
10527
10596
  const LOCALE_NS = "betterSidebar";
10528
10597
  const accountAndModelFallback = {
10598
+ accountMenuLogoutConfirmTitle: en$1.accountMenuLogoutConfirmTitle,
10599
+ accountMenuLogoutConfirmDescription: en$1.accountMenuLogoutConfirmDescription,
10529
10600
  chatcodeGateChecking: en$1.chatcodeGateChecking,
10530
10601
  chatcodeGateUnverified: en$1.chatcodeGateUnverified,
10531
10602
  chatcodeGatePending: en$1.chatcodeGatePending,
@@ -12089,305 +12160,310 @@ window.__ModuleLoader__.load({
12089
12160
  }
12090
12161
  //#endregion
12091
12162
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/sidebar.module.css.mjs
12092
- const css$5 = ".FV0QMq_releaseNotesOverlay{z-index:120;pointer-events:auto;background:color-mix(in srgb, var(--dsw-alias-bg-base) 72%, transparent);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.FV0QMq_releaseNotesDialog{width:min(720px,100%);max-height:min(760px,100vh - 48px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.FV0QMq_releaseNotesHeader,.FV0QMq_releaseNotesFooter{align-items:center;padding:16px 20px;display:flex}.FV0QMq_releaseNotesHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;gap:16px}.FV0QMq_releaseNotesHeader h2{font:var(--dsw-font-s-18);margin:0}.FV0QMq_releaseNotesContent{min-height:120px;font:var(--dsw-font-s-14);padding:20px;overflow:auto}.FV0QMq_releaseNotesFooter{border-top:1px solid var(--dsw-alias-border-l1);justify-content:flex-end}.FV0QMq_releaseNotesIconButton,.FV0QMq_releaseNotesButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);cursor:pointer}.FV0QMq_releaseNotesIconButton:hover,.FV0QMq_releaseNotesButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_releaseNotesIconButton{width:32px;height:32px;font:var(--dsw-font-s-18);border-radius:50%;padding:0}.FV0QMq_releaseNotesButton{min-width:84px;min-height:36px;font:var(--dsw-font-s-14);border-radius:8px;padding:6px 16px}.FV0QMq_updateList{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.FV0QMq_updateList li{font:var(--dsw-font-s-14);justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateVersions{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-secondary)}.FV0QMq_updateOk{color:var(--dsw-alias-state-success-primary)}.FV0QMq_updateError,.FV0QMq_updateErrorText{color:var(--dsw-alias-state-error-primary)}.FV0QMq_updateErrorText{white-space:pre-wrap;font:var(--dsw-font-s-14);margin:12px 0 0}.FV0QMq_updateCommand{background:var(--dsw-alias-bg-layer-3);font-family:var(--dsw-font-code,var(--ds-font-family-code,monospace));white-space:pre-wrap;word-break:break-all;user-select:all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-size:12px;overflow-x:auto}.FV0QMq_updateSettingsRow{justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateSettingsText{flex-direction:column;gap:2px;min-width:0;display:flex}.FV0QMq_updateSettingsTitle{font:var(--dsw-font-s-14)}.FV0QMq_updateSettingsDesc{font:var(--dsw-font-s-13);color:var(--dsw-alias-label-secondary)}.FV0QMq_updateSettingsBlock{flex-direction:column;gap:12px;display:flex}.FV0QMq_updateBody{font:var(--dsw-font-s-14);margin:20px 0 0}.FV0QMq_updateFooter{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.FV0QMq_updateInline{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;padding:16px}[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:clip}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}[data-dsh-pinned-sessions]{flex:none;min-width:0}.FV0QMq_pinnedSessions{border-bottom:1px solid var(--dsw-alias-border-l1);margin:0 0 6px;padding:4px 0 6px}.FV0QMq_pinnedSessionsHeading{height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);align-items:center;padding:0 4px;display:flex}.FV0QMq_pinnedSessionsList{gap:1px;display:grid}[data-slot=sidebar\\.workspaces] [class*=_sessionRow][data-dsh-session-pinned]{display:none}.FV0QMq_pinnedSessionRow{border-radius:8px;align-items:center;min-width:0;height:32px;display:flex;position:relative}.FV0QMq_pinnedSessionRow:hover,.FV0QMq_pinnedSessionRow:focus-within{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionOpen,.FV0QMq_pinnedSessionMore,.FV0QMq_pinnedSessionMenu button{font:inherit;cursor:pointer;border:0}.FV0QMq_pinnedSessionOpen{min-width:0;height:100%;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-s-14);background:0 0;flex:1;align-items:center;gap:8px;padding:0 6px 0 8px;display:flex}.FV0QMq_pinnedSessionOpen[aria-current=page]{color:var(--dsw-alias-brand-primary)}.FV0QMq_pinnedSessionDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_pinnedSessionDot[data-running]{background:var(--dsw-alias-state-success-primary)}.FV0QMq_pinnedSessionTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_pinnedSessionMore{width:28px;height:28px;color:var(--dsw-alias-label-secondary);letter-spacing:1px;background:0 0;border-radius:50%;justify-content:center;align-items:center;margin-right:2px;padding:0;display:inline-flex}.FV0QMq_pinnedSessionMore:hover,.FV0QMq_pinnedSessionMore[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedSessionMenu{z-index:1101;box-sizing:border-box;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);border-radius:10px;min-width:150px;padding:4px;position:absolute;top:calc(100% + 2px);right:0}.FV0QMq_pinnedSessionMenu button{width:100%;min-height:32px;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-xxs-12);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.FV0QMq_pinnedSessionMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionMenuDivider{background:var(--dsw-alias-border-l1);height:1px;margin:4px}.FV0QMq_accountMenu{z-index:3;box-sizing:border-box;width:var(--dsh-account-menu-width,280px);border-top:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);pointer-events:auto;position:absolute;bottom:0;left:0}.FV0QMq_accountTrigger,.FV0QMq_accountItem{color:var(--dsw-alias-fg-base);font:inherit;cursor:pointer;border:0}.FV0QMq_accountTrigger{box-sizing:border-box;width:100%;min-height:52px;padding:10px 14px max(10px, env(safe-area-inset-bottom));background:var(--dsw-alias-bg-layer-1);font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:0;align-items:center;gap:8px;display:flex}.FV0QMq_accountTrigger:hover,.FV0QMq_accountTrigger[aria-expanded=true]{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountTrigger:focus-visible,.FV0QMq_accountItem:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountAvatar{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);width:28px;height:28px;color:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;place-items:center;font-weight:600;display:grid;position:relative}.FV0QMq_accountName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_accountDropdown{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);z-index:1;border-radius:12px;width:min(252px,100% - 16px);padding:10px 8px 8px;display:grid;position:absolute;bottom:calc(100% + 8px);left:8px}.FV0QMq_accountDropdownHeader{min-height:36px;font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);align-items:center;gap:8px;padding:0 8px 8px;display:flex}.FV0QMq_accountMenuDivider{background:var(--dsw-alias-border-l2);height:1px;margin:0 4px 6px}.FV0QMq_accountItem{text-align:left;min-height:32px;font:var(--dsw-font-s-14);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:0 10px;display:flex}.FV0QMq_accountItem:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountPresence{box-sizing:content-box;border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;width:6px;height:6px;margin-left:auto}.FV0QMq_accountTrigger .FV0QMq_accountPresence{border-color:var(--dsw-alias-bg-layer-1)}.FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(3px + env(safe-area-inset-top)));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.FV0QMq_toggleClusterNative{z-index:auto;flex:none;align-items:center;position:static;inset:auto}button[data-dsh-better-sidebar-toggle]{display:none}body:not([data-dsh-native-sidebar-toggle]) .FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:var(--dsh-sidebar-toggle-reserve,188px)}.FV0QMq_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.FV0QMq_manualButton{min-width:94px;height:28px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:6px;margin-right:4px;padding:0 10px;display:inline-flex}.FV0QMq_manualButton:hover,.FV0QMq_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_toggleButton:disabled,.FV0QMq_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.FV0QMq_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.FV0QMq_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.FV0QMq_panel[data-dragging]{transition:none}.FV0QMq_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.FV0QMq_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_panelBody{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.FV0QMq_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.FV0QMq_bottomPanel[data-dragging]{transition:none}.FV0QMq_panel,.FV0QMq_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .FV0QMq_panel,body[data-dsh-sidebar-dragging] .FV0QMq_bottomPanel{will-change:transform}.FV0QMq_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.FV0QMq_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_bottomClose{z-index:4;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:3px;right:6px}.FV0QMq_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_bottomPanel .FV0QMq_tabBar{padding-right:40px}.FV0QMq_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.FV0QMq_floatWindowDragging{will-change:left, top, width, height}.FV0QMq_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_floatWindowDragging .FV0QMq_floatHeader{cursor:grabbing}.FV0QMq_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.FV0QMq_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.FV0QMq_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.FV0QMq_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.FV0QMq_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_manualButton,.FV0QMq_tabBar,.FV0QMq_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(var(--dsh-title-bar-strip,40px) + 3px))}body[data-dsh-title-bar-compat] .FV0QMq_panel{padding-top:var(--dsh-title-bar-strip,40px)}.FV0QMq_cornerHandle{left:-6px;bottom:calc(var(--dsh-sidebar-height,0px) + 6px);z-index:2;cursor:nwse-resize;touch-action:none;width:12px;height:12px;position:absolute}.FV0QMq_cornerHandle:hover,.FV0QMq_cornerHandle[data-dragging]{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_iconButton:disabled{opacity:.4;cursor:default}.FV0QMq_workbench,.FV0QMq_split{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_splitRow{flex-direction:row}.FV0QMq_splitCol{flex-direction:column}.FV0QMq_splitChild{display:flex;position:relative;overflow:hidden}.FV0QMq_divider{z-index:3;touch-action:none;flex:none;position:relative}.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.FV0QMq_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.FV0QMq_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.FV0QMq_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.FV0QMq_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.FV0QMq_divider:hover:after,.FV0QMq_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.FV0QMq_dropLeft{width:25%;top:0;bottom:0;left:0}.FV0QMq_dropRight{width:25%;top:0;bottom:0;right:0}.FV0QMq_dropUp{height:25%;top:0;left:0;right:0}.FV0QMq_dropDown{height:25%;bottom:0;left:0;right:0}.FV0QMq_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.FV0QMq_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.FV0QMq_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_paneTabHidden{display:none}.FV0QMq_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.FV0QMq_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.FV0QMq_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.FV0QMq_paneCard:disabled{opacity:.45;cursor:default}.FV0QMq_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.FV0QMq_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.FV0QMq_tabList::-webkit-scrollbar{display:none}.FV0QMq_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.FV0QMq_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.FV0QMq_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.FV0QMq_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.FV0QMq_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.FV0QMq_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.FV0QMq_explorerRowRevealed+.FV0QMq_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.FV0QMq_explorerRowRevealed:has(+.FV0QMq_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.FV0QMq_explorerDir{font:var(--dsw-font-s-strong-14)}.FV0QMq_explorerHidden{opacity:.45}.FV0QMq_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerBroken .FV0QMq_explorerName{color:var(--dsw-alias-state-error-primary)}.FV0QMq_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.FV0QMq_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_explorerRow:hover .FV0QMq_explorerRef,.FV0QMq_explorerRow:focus-within .FV0QMq_explorerRef{display:inline-flex}.FV0QMq_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes FV0QMq_dsh-row-in{0%{opacity:0}}.FV0QMq_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.FV0QMq_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.FV0QMq_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.FV0QMq_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadDropChatHint{z-index:1002;pointer-events:none;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.FV0QMq_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.FV0QMq_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.FV0QMq_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.FV0QMq_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.FV0QMq_uploadOverlayTitle>svg{flex:none}.FV0QMq_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.FV0QMq_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.FV0QMq_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.FV0QMq_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.FV0QMq_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.FV0QMq_editor{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.FV0QMq_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_editorBody{flex:1;min-height:0;display:flex}.FV0QMq_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.FV0QMq_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.FV0QMq_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.FV0QMq_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_editorTreePanelFull{flex:1}.FV0QMq_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.FV0QMq_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.FV0QMq_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorStatusError{color:var(--dsw-alias-state-error-primary)}.FV0QMq_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.FV0QMq_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.FV0QMq_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.FV0QMq_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.FV0QMq_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.FV0QMq_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.FV0QMq_fenceError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;display:flex}.FV0QMq_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.FV0QMq_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.FV0QMq_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.FV0QMq_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.FV0QMq_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_sandboxStatusOff .FV0QMq_sandboxDot{background:var(--dsw-alias-state-error-primary)}.FV0QMq_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.FV0QMq_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browser{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.FV0QMq_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.FV0QMq_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.FV0QMq_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.FV0QMq_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.FV0QMq_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.FV0QMq_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.FV0QMq_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.FV0QMq_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.FV0QMq_editorCmHidden{display:none}.FV0QMq_editorCm .cm-editor{height:100%}.FV0QMq_editorCm .cm-scroller{padding:12px 16px}.FV0QMq_editorCm .cm-editor.cm-focused{outline:none}.FV0QMq_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.FV0QMq_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.FV0QMq_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.FV0QMq_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.FV0QMq_editorImageWrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.FV0QMq_editorImage{object-fit:contain;max-width:100%;max-height:100%}.FV0QMq_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.FV0QMq_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.FV0QMq_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.FV0QMq_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.FV0QMq_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.FV0QMq_mermaidBody svg{max-width:100%;height:auto}.FV0QMq_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.FV0QMq_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.FV0QMq_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.FV0QMq_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.FV0QMq_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.FV0QMq_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.FV0QMq_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.FV0QMq_mermaidModalStage svg:active{cursor:grabbing}.FV0QMq_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.FV0QMq_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.FV0QMq_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.FV0QMq_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.FV0QMq_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_editorPdfFrameBlocked{pointer-events:none}.FV0QMq_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.FV0QMq_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .FV0QMq_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .FV0QMq_editorPdfDragShield{pointer-events:auto!important}.FV0QMq_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.FV0QMq_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.FV0QMq_terminal .xterm{height:100%}.FV0QMq_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.FV0QMq_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.FV0QMq_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.FV0QMq_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.FV0QMq_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.FV0QMq_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.FV0QMq_terminalDepsHint{opacity:.9}.FV0QMq_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.FV0QMq_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.FV0QMq_terminalDepsNote{opacity:.85}.FV0QMq_terminalDepsActions{align-items:center;gap:8px;display:flex}.FV0QMq_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.FV0QMq_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.FV0QMq_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.FV0QMq_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.FV0QMq_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.FV0QMq_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.FV0QMq_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.FV0QMq_gitLink:hover:not(:disabled){text-decoration:underline}.FV0QMq_gitLink:disabled{opacity:.4;cursor:default}.FV0QMq_gitRow{min-height:34px;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.FV0QMq_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.FV0QMq_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.FV0QMq_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.FV0QMq_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.FV0QMq_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.FV0QMq_gitDiffFile:disabled{cursor:default}.FV0QMq_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.FV0QMq_gitDiffFileChevronExpanded{transform:rotate(90deg)}.FV0QMq_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.FV0QMq_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.FV0QMq_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.FV0QMq_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.FV0QMq_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.FV0QMq_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.FV0QMq_gitDiffCode{flex:1;min-width:0;overflow:visible}.FV0QMq_gitDiffCtx{color:var(--dsw-alias-label-primary)}.FV0QMq_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.FV0QMq_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.FV0QMq_gitDiffMeta{padding-left:2px}.FV0QMq_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.FV0QMq_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.FV0QMq_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.FV0QMq_gitCommitInput{flex:1;min-width:0}.FV0QMq_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.FV0QMq_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.FV0QMq_gitCommitButton:disabled{opacity:.45;cursor:default}.FV0QMq_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.FV0QMq_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.FV0QMq_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.FV0QMq_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.FV0QMq_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.FV0QMq_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_gitLogMore:disabled{opacity:.5;cursor:default}.FV0QMq_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.FV0QMq_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.FV0QMq_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_toggleButton:focus-visible,.FV0QMq_manualButton:focus-visible,.FV0QMq_bottomClose:focus-visible,.FV0QMq_iconButton:focus-visible,.FV0QMq_tab:focus-visible,.FV0QMq_tabClose:focus-visible,.FV0QMq_tabBarPlus:focus-visible,.FV0QMq_paneCard:focus-visible,.FV0QMq_explorerRow:focus-visible,.FV0QMq_explorerRef:focus-visible,.FV0QMq_gitRowMain:focus-visible,.FV0QMq_gitLink:focus-visible,.FV0QMq_gitCommitButton:focus-visible,.FV0QMq_gitLogRow:focus-visible,.FV0QMq_gitLogMore:focus-visible,.FV0QMq_gitDiffFile:focus-visible,.FV0QMq_gitDiffExpand:focus-visible,.FV0QMq_terminalRetry:focus-visible,.FV0QMq_editorModeButton:focus-visible,.FV0QMq_editorDownloadLink:focus-visible,.FV0QMq_editorPptxButton:focus-visible,.FV0QMq_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.FV0QMq_panel,.FV0QMq_panelHidden,.FV0QMq_bottomPanel,.FV0QMq_bottomPanelHidden,.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_tab,.FV0QMq_tabBarPlus,.FV0QMq_paneCard,.FV0QMq_explorerRow,.FV0QMq_gitRow,.FV0QMq_divider,.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:148px}.FV0QMq_tab{min-width:48px;max-width:128px}}.FV0QMq_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.FV0QMq_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.FV0QMq_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.FV0QMq_editorHtmlBlock{margin:8px 0}.FV0QMq_editorHtmlBlock img,.FV0QMq_editorHtmlBlock video{max-width:100%}.FV0QMq_editorHtmlBlock details{margin:4px 0;padding:4px 0}.FV0QMq_editorHtmlBlock summary{cursor:pointer}.FV0QMq_tocBar{z-index:3;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.FV0QMq_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.FV0QMq_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.FV0QMq_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.FV0QMq_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocItem[data-level=\"2\"]{padding-left:18px}.FV0QMq_tocItem[data-level=\"3\"]{padding-left:28px}.FV0QMq_tocItem[data-level=\"4\"]{padding-left:38px}.FV0QMq_tocItem[data-level=\"5\"]{padding-left:48px}.FV0QMq_tocItem[data-level=\"6\"]{padding-left:58px}.FV0QMq_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes FV0QMq_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.FV0QMq_tocFlash{border-radius:4px;animation:1.2s ease-out FV0QMq_dsh-toc-flash}.FV0QMq_chatcodeGate{z-index:2147483000;isolation:isolate;background-color:var(--dsw-alias-tooltip-bg);background-image:linear-gradient(135deg, var(--dsw-alias-tooltip-bg) 0%, var(--dsw-alias-brand-primary) 48%, var(--dsw-alias-tooltip-bg) 100%);color:var(--dsw-alias-fg-base);pointer-events:auto;place-items:center;padding:24px;display:grid;position:fixed;inset:0;overflow:hidden}.FV0QMq_chatcodeGateCard{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:linear-gradient(145deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));width:min(460px,100%);box-shadow:var(--dsw-shadow-lv3);text-align:center;border-radius:20px;padding:40px 36px;position:relative}.FV0QMq_chatcodeGateContent{position:relative}.FV0QMq_chatcodeGateCard h1{font:var(--dsw-font-heading-lg);letter-spacing:-.02em;margin:0 0 12px;font-size:clamp(32px,5vw,46px);line-height:1.1}.FV0QMq_chatcodeGateCard p{max-width:29em;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-s-14);margin:0 auto;line-height:1.7}.FV0QMq_chatcodeGateError{border:1px solid color-mix(in srgb, var(--dsw-alias-fg-error) 36%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-fg-error) 8%, transparent);border-radius:10px;padding:9px 11px;position:relative;color:var(--dsw-alias-fg-error)!important;font:var(--dsw-font-xxs-12)!important;margin-top:16px!important;line-height:1.5!important}.FV0QMq_chatcodeGateActions{justify-content:center;gap:10px;margin:28px 0 14px;display:flex;position:relative}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:42px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:10px;padding:9px 17px}.FV0QMq_chatcodeGateActions button:first-child{border-color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-state-error-primary);min-width:152px;min-height:46px;color:var(--dsw-alias-label-primary-inverted)}.FV0QMq_chatcodeGateActions button:first-child:hover:not(:disabled){box-shadow:var(--dsw-shadow-lv2);transform:translateY(-2px);border-color:var(--dsw-alias-state-error-primary)!important;background:var(--dsw-alias-state-error-primary)!important;color:var(--dsw-alias-label-primary-inverted)!important}.FV0QMq_chatcodeGateActions button:not(:first-child):hover:not(:disabled),.FV0QMq_chatcodeGateCard a:hover{border-color:var(--dsw-alias-button-primary-hover);background:var(--dsw-alias-button-primary-hover);color:var(--dsw-alias-label-primary-inverted);transform:translateY(-1px)}.FV0QMq_chatcodeGateActions button:disabled{cursor:default;opacity:.55}.FV0QMq_chatcodeGateCard a{align-items:center;text-decoration:none;display:inline-flex;position:relative}.FV0QMq_chatcodeGateActions button:focus-visible,.FV0QMq_chatcodeGateCard a:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:3px}@media (width<=480px){.FV0QMq_chatcodeGate{padding:16px}.FV0QMq_chatcodeGateCard{padding:32px 24px}.FV0QMq_chatcodeGateActions{flex-direction:column;align-items:stretch}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{justify-content:center}}";
12093
- const tagId$5 = "dsh-external/dsh-better-sidebar/sidebar.module.css";
12094
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
12163
+ const css$6 = ".FV0QMq_releaseNotesOverlay{z-index:120;pointer-events:auto;background:color-mix(in srgb, var(--dsw-alias-bg-base) 72%, transparent);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.FV0QMq_releaseNotesDialog{width:min(720px,100%);max-height:min(760px,100vh - 48px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.FV0QMq_releaseNotesHeader,.FV0QMq_releaseNotesFooter{align-items:center;padding:16px 20px;display:flex}.FV0QMq_releaseNotesHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;gap:16px}.FV0QMq_releaseNotesHeader h2{font:var(--dsw-font-s-18);margin:0}.FV0QMq_releaseNotesContent{min-height:120px;font:var(--dsw-font-s-14);padding:20px;overflow:auto}.FV0QMq_releaseNotesFooter{border-top:1px solid var(--dsw-alias-border-l1);justify-content:flex-end}.FV0QMq_releaseNotesIconButton,.FV0QMq_releaseNotesButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);cursor:pointer}.FV0QMq_releaseNotesIconButton:hover,.FV0QMq_releaseNotesButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_releaseNotesIconButton{width:32px;height:32px;font:var(--dsw-font-s-18);border-radius:50%;padding:0}.FV0QMq_releaseNotesButton{min-width:84px;min-height:36px;font:var(--dsw-font-s-14);border-radius:8px;padding:6px 16px}.FV0QMq_updateList{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.FV0QMq_updateList li{font:var(--dsw-font-s-14);justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateVersions{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-secondary)}.FV0QMq_updateOk{color:var(--dsw-alias-state-success-primary)}.FV0QMq_updateError,.FV0QMq_updateErrorText{color:var(--dsw-alias-state-error-primary)}.FV0QMq_updateErrorText{white-space:pre-wrap;font:var(--dsw-font-s-14);margin:12px 0 0}.FV0QMq_updateCommand{background:var(--dsw-alias-bg-layer-3);font-family:var(--dsw-font-code,var(--ds-font-family-code,monospace));white-space:pre-wrap;word-break:break-all;user-select:all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-size:12px;overflow-x:auto}.FV0QMq_updateSettingsRow{justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateSettingsText{flex-direction:column;gap:2px;min-width:0;display:flex}.FV0QMq_updateSettingsTitle{font:var(--dsw-font-s-14)}.FV0QMq_updateSettingsDesc{font:var(--dsw-font-s-13);color:var(--dsw-alias-label-secondary)}.FV0QMq_updateSettingsBlock{flex-direction:column;gap:12px;display:flex}.FV0QMq_updateBody{font:var(--dsw-font-s-14);margin:20px 0 0}.FV0QMq_updateFooter{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.FV0QMq_updateInline{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;padding:16px}[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:clip}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}[data-dsh-pinned-sessions]{flex:none;min-width:0}.FV0QMq_pinnedSessions{border-bottom:1px solid var(--dsw-alias-border-l1);margin:0 0 6px;padding:4px 0 6px}.FV0QMq_pinnedSessionsHeading{height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);align-items:center;padding:0 4px;display:flex}.FV0QMq_pinnedSessionsList{gap:1px;display:grid}[data-slot=sidebar\\.workspaces] [class*=_sessionRow][data-dsh-session-pinned]{display:none}.FV0QMq_pinnedSessionRow{border-radius:8px;align-items:center;min-width:0;height:32px;display:flex;position:relative}.FV0QMq_pinnedSessionRow:hover,.FV0QMq_pinnedSessionRow:focus-within{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionOpen,.FV0QMq_pinnedSessionMore,.FV0QMq_pinnedSessionMenu button{font:inherit;cursor:pointer;border:0}.FV0QMq_pinnedSessionOpen{min-width:0;height:100%;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-s-14);background:0 0;flex:1;align-items:center;gap:8px;padding:0 6px 0 8px;display:flex}.FV0QMq_pinnedSessionOpen[aria-current=page]{color:var(--dsw-alias-brand-primary)}.FV0QMq_pinnedSessionDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_pinnedSessionDot[data-running]{background:var(--dsw-alias-state-success-primary)}.FV0QMq_pinnedSessionTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_pinnedSessionMore{width:28px;height:28px;color:var(--dsw-alias-label-secondary);letter-spacing:1px;background:0 0;border-radius:50%;justify-content:center;align-items:center;margin-right:2px;padding:0;display:inline-flex}.FV0QMq_pinnedSessionMore:hover,.FV0QMq_pinnedSessionMore[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedSessionMenu{z-index:1101;box-sizing:border-box;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);border-radius:10px;min-width:150px;padding:4px;position:absolute;top:calc(100% + 2px);right:0}.FV0QMq_pinnedSessionMenu button{width:100%;min-height:32px;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-xxs-12);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.FV0QMq_pinnedSessionMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionMenuDivider{background:var(--dsw-alias-border-l1);height:1px;margin:4px}.FV0QMq_accountMenu{z-index:3;box-sizing:border-box;width:var(--dsh-account-menu-width,280px);border-top:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);pointer-events:auto;position:absolute;bottom:0;left:0}.FV0QMq_accountTrigger,.FV0QMq_accountItem{color:var(--dsw-alias-fg-base);font:inherit;cursor:pointer;border:0}.FV0QMq_accountTrigger{box-sizing:border-box;width:100%;min-height:44px;padding:8px 12px max(8px, env(safe-area-inset-bottom));background:var(--dsw-alias-bg-layer-1);font:var(--dsw-font-xs-13);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:0;align-items:center;gap:8px;display:flex}.FV0QMq_accountTrigger:hover,.FV0QMq_accountTrigger[aria-expanded=true]{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountTrigger:focus-visible,.FV0QMq_accountItem:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountAvatar{box-sizing:border-box;background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);width:24px;height:24px;color:var(--dsw-alias-fg-accent);font:var(--dsw-font-xxs-12);border-radius:50%;flex:none;place-items:center;font-weight:600;display:grid;position:relative}.FV0QMq_accountName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_accountDropdown{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);z-index:1;border-radius:10px;width:min(224px,100% - 16px);padding:8px 6px 6px;display:grid;position:absolute;bottom:calc(100% + 8px);left:8px}.FV0QMq_accountDropdownHeader{min-width:0;min-height:28px;font:var(--dsw-font-xs-13);align-items:center;gap:8px;padding:0 6px 6px;display:flex}.FV0QMq_accountMenuDivider{background:var(--dsw-alias-border-l2);height:1px;margin:0 4px 4px}.FV0QMq_accountItem{text-align:left;min-height:30px;font:var(--dsw-font-xs-13);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:0 8px;display:flex}.FV0QMq_accountItem:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountPresence{box-sizing:content-box;border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;width:6px;height:6px;margin-left:auto}.FV0QMq_accountTrigger .FV0QMq_accountPresence{border-color:var(--dsw-alias-bg-layer-1)}.FV0QMq_accountLogoutDialog{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:min(400px,100vw - 32px);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);color:var(--dsw-alias-fg-base);font:var(--dsw-font-s-14);border-radius:16px;margin:auto;padding:24px;overflow:auto}.FV0QMq_accountLogoutDialog::backdrop{background:var(--dsw-alias-bg-mask-1)}.FV0QMq_accountLogoutTitle{font:var(--dsw-font-base-strong-16);margin:0}.FV0QMq_accountLogoutDescription{color:var(--dsw-alias-label-secondary);margin:12px 0 24px}.FV0QMq_accountLogoutActions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.FV0QMq_accountLogoutActions button{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:34px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xs-13);cursor:pointer;border-radius:8px;padding:6px 14px}.FV0QMq_accountLogoutActions button:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountLogoutActions button:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountLogoutActions .FV0QMq_accountLogoutConfirm{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(3px + env(safe-area-inset-top)));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.FV0QMq_toggleClusterNative{z-index:auto;flex:none;align-items:center;position:static;inset:auto}button[data-dsh-better-sidebar-toggle]{display:none}body:not([data-dsh-native-sidebar-toggle]) .FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:var(--dsh-sidebar-toggle-reserve,188px)}.FV0QMq_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.FV0QMq_manualButton{min-width:94px;height:28px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:6px;margin-right:4px;padding:0 10px;display:inline-flex}.FV0QMq_manualButton:hover,.FV0QMq_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_toggleButton:disabled,.FV0QMq_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.FV0QMq_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.FV0QMq_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.FV0QMq_panel[data-dragging]{transition:none}.FV0QMq_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.FV0QMq_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_panelBody{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.FV0QMq_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.FV0QMq_bottomPanel[data-dragging]{transition:none}.FV0QMq_panel,.FV0QMq_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .FV0QMq_panel,body[data-dsh-sidebar-dragging] .FV0QMq_bottomPanel{will-change:transform}.FV0QMq_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.FV0QMq_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_bottomClose{z-index:4;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:3px;right:6px}.FV0QMq_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_bottomPanel .FV0QMq_tabBar{padding-right:40px}.FV0QMq_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.FV0QMq_floatWindowDragging{will-change:left, top, width, height}.FV0QMq_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_floatWindowDragging .FV0QMq_floatHeader{cursor:grabbing}.FV0QMq_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.FV0QMq_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.FV0QMq_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.FV0QMq_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.FV0QMq_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_manualButton,.FV0QMq_tabBar,.FV0QMq_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(var(--dsh-title-bar-strip,40px) + 3px))}body[data-dsh-title-bar-compat] .FV0QMq_panel{padding-top:var(--dsh-title-bar-strip,40px)}.FV0QMq_cornerHandle{left:-6px;bottom:calc(var(--dsh-sidebar-height,0px) + 6px);z-index:2;cursor:nwse-resize;touch-action:none;width:12px;height:12px;position:absolute}.FV0QMq_cornerHandle:hover,.FV0QMq_cornerHandle[data-dragging]{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_iconButton:disabled{opacity:.4;cursor:default}.FV0QMq_workbench,.FV0QMq_split{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_splitRow{flex-direction:row}.FV0QMq_splitCol{flex-direction:column}.FV0QMq_splitChild{display:flex;position:relative;overflow:hidden}.FV0QMq_divider{z-index:3;touch-action:none;flex:none;position:relative}.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.FV0QMq_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.FV0QMq_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.FV0QMq_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.FV0QMq_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.FV0QMq_divider:hover:after,.FV0QMq_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.FV0QMq_dropLeft{width:25%;top:0;bottom:0;left:0}.FV0QMq_dropRight{width:25%;top:0;bottom:0;right:0}.FV0QMq_dropUp{height:25%;top:0;left:0;right:0}.FV0QMq_dropDown{height:25%;bottom:0;left:0;right:0}.FV0QMq_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.FV0QMq_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.FV0QMq_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_paneTabHidden{display:none}.FV0QMq_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.FV0QMq_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.FV0QMq_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.FV0QMq_paneCard:disabled{opacity:.45;cursor:default}.FV0QMq_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.FV0QMq_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.FV0QMq_tabList::-webkit-scrollbar{display:none}.FV0QMq_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.FV0QMq_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.FV0QMq_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.FV0QMq_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.FV0QMq_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.FV0QMq_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.FV0QMq_explorerRowRevealed+.FV0QMq_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.FV0QMq_explorerRowRevealed:has(+.FV0QMq_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.FV0QMq_explorerDir{font:var(--dsw-font-s-strong-14)}.FV0QMq_explorerHidden{opacity:.45}.FV0QMq_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerBroken .FV0QMq_explorerName{color:var(--dsw-alias-state-error-primary)}.FV0QMq_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.FV0QMq_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_explorerRow:hover .FV0QMq_explorerRef,.FV0QMq_explorerRow:focus-within .FV0QMq_explorerRef{display:inline-flex}.FV0QMq_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes FV0QMq_dsh-row-in{0%{opacity:0}}.FV0QMq_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.FV0QMq_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.FV0QMq_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.FV0QMq_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadDropChatHint{z-index:1002;pointer-events:none;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.FV0QMq_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.FV0QMq_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.FV0QMq_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.FV0QMq_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.FV0QMq_uploadOverlayTitle>svg{flex:none}.FV0QMq_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.FV0QMq_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.FV0QMq_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.FV0QMq_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.FV0QMq_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.FV0QMq_editor{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.FV0QMq_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_editorBody{flex:1;min-height:0;display:flex}.FV0QMq_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.FV0QMq_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.FV0QMq_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.FV0QMq_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_editorTreePanelFull{flex:1}.FV0QMq_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.FV0QMq_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.FV0QMq_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorStatusError{color:var(--dsw-alias-state-error-primary)}.FV0QMq_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.FV0QMq_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.FV0QMq_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.FV0QMq_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.FV0QMq_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.FV0QMq_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.FV0QMq_fenceError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;display:flex}.FV0QMq_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.FV0QMq_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.FV0QMq_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.FV0QMq_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.FV0QMq_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_sandboxStatusOff .FV0QMq_sandboxDot{background:var(--dsw-alias-state-error-primary)}.FV0QMq_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.FV0QMq_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browser{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.FV0QMq_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.FV0QMq_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.FV0QMq_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.FV0QMq_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.FV0QMq_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.FV0QMq_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.FV0QMq_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.FV0QMq_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.FV0QMq_editorCmHidden{display:none}.FV0QMq_editorCm .cm-editor{height:100%}.FV0QMq_editorCm .cm-scroller{padding:12px 16px}.FV0QMq_editorCm .cm-editor.cm-focused{outline:none}.FV0QMq_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.FV0QMq_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.FV0QMq_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.FV0QMq_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.FV0QMq_editorImageWrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.FV0QMq_editorImage{object-fit:contain;max-width:100%;max-height:100%}.FV0QMq_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.FV0QMq_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.FV0QMq_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.FV0QMq_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.FV0QMq_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.FV0QMq_mermaidBody svg{max-width:100%;height:auto}.FV0QMq_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.FV0QMq_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.FV0QMq_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.FV0QMq_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.FV0QMq_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.FV0QMq_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.FV0QMq_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.FV0QMq_mermaidModalStage svg:active{cursor:grabbing}.FV0QMq_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.FV0QMq_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.FV0QMq_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.FV0QMq_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.FV0QMq_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_editorPdfFrameBlocked{pointer-events:none}.FV0QMq_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.FV0QMq_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .FV0QMq_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .FV0QMq_editorPdfDragShield{pointer-events:auto!important}.FV0QMq_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.FV0QMq_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.FV0QMq_terminal .xterm{height:100%}.FV0QMq_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.FV0QMq_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.FV0QMq_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.FV0QMq_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.FV0QMq_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.FV0QMq_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.FV0QMq_terminalDepsHint{opacity:.9}.FV0QMq_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.FV0QMq_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.FV0QMq_terminalDepsNote{opacity:.85}.FV0QMq_terminalDepsActions{align-items:center;gap:8px;display:flex}.FV0QMq_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.FV0QMq_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.FV0QMq_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.FV0QMq_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.FV0QMq_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.FV0QMq_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.FV0QMq_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.FV0QMq_gitLink:hover:not(:disabled){text-decoration:underline}.FV0QMq_gitLink:disabled{opacity:.4;cursor:default}.FV0QMq_gitRow{min-height:34px;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.FV0QMq_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.FV0QMq_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.FV0QMq_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.FV0QMq_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.FV0QMq_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.FV0QMq_gitDiffFile:disabled{cursor:default}.FV0QMq_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.FV0QMq_gitDiffFileChevronExpanded{transform:rotate(90deg)}.FV0QMq_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.FV0QMq_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.FV0QMq_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.FV0QMq_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.FV0QMq_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.FV0QMq_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.FV0QMq_gitDiffCode{flex:1;min-width:0;overflow:visible}.FV0QMq_gitDiffCtx{color:var(--dsw-alias-label-primary)}.FV0QMq_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.FV0QMq_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.FV0QMq_gitDiffMeta{padding-left:2px}.FV0QMq_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.FV0QMq_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.FV0QMq_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.FV0QMq_gitCommitInput{flex:1;min-width:0}.FV0QMq_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.FV0QMq_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.FV0QMq_gitCommitButton:disabled{opacity:.45;cursor:default}.FV0QMq_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.FV0QMq_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.FV0QMq_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.FV0QMq_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.FV0QMq_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.FV0QMq_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_gitLogMore:disabled{opacity:.5;cursor:default}.FV0QMq_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.FV0QMq_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.FV0QMq_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_toggleButton:focus-visible,.FV0QMq_manualButton:focus-visible,.FV0QMq_bottomClose:focus-visible,.FV0QMq_iconButton:focus-visible,.FV0QMq_tab:focus-visible,.FV0QMq_tabClose:focus-visible,.FV0QMq_tabBarPlus:focus-visible,.FV0QMq_paneCard:focus-visible,.FV0QMq_explorerRow:focus-visible,.FV0QMq_explorerRef:focus-visible,.FV0QMq_gitRowMain:focus-visible,.FV0QMq_gitLink:focus-visible,.FV0QMq_gitCommitButton:focus-visible,.FV0QMq_gitLogRow:focus-visible,.FV0QMq_gitLogMore:focus-visible,.FV0QMq_gitDiffFile:focus-visible,.FV0QMq_gitDiffExpand:focus-visible,.FV0QMq_terminalRetry:focus-visible,.FV0QMq_editorModeButton:focus-visible,.FV0QMq_editorDownloadLink:focus-visible,.FV0QMq_editorPptxButton:focus-visible,.FV0QMq_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.FV0QMq_panel,.FV0QMq_panelHidden,.FV0QMq_bottomPanel,.FV0QMq_bottomPanelHidden,.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_tab,.FV0QMq_tabBarPlus,.FV0QMq_paneCard,.FV0QMq_explorerRow,.FV0QMq_gitRow,.FV0QMq_divider,.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:148px}.FV0QMq_tab{min-width:48px;max-width:128px}}.FV0QMq_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.FV0QMq_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.FV0QMq_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.FV0QMq_editorHtmlBlock{margin:8px 0}.FV0QMq_editorHtmlBlock img,.FV0QMq_editorHtmlBlock video{max-width:100%}.FV0QMq_editorHtmlBlock details{margin:4px 0;padding:4px 0}.FV0QMq_editorHtmlBlock summary{cursor:pointer}.FV0QMq_tocBar{z-index:3;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.FV0QMq_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.FV0QMq_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.FV0QMq_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.FV0QMq_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocItem[data-level=\"2\"]{padding-left:18px}.FV0QMq_tocItem[data-level=\"3\"]{padding-left:28px}.FV0QMq_tocItem[data-level=\"4\"]{padding-left:38px}.FV0QMq_tocItem[data-level=\"5\"]{padding-left:48px}.FV0QMq_tocItem[data-level=\"6\"]{padding-left:58px}.FV0QMq_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes FV0QMq_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.FV0QMq_tocFlash{border-radius:4px;animation:1.2s ease-out FV0QMq_dsh-toc-flash}.FV0QMq_chatcodeGate{z-index:2147483000;isolation:isolate;background-color:var(--dsw-alias-tooltip-bg);background-image:linear-gradient(135deg, var(--dsw-alias-tooltip-bg) 0%, var(--dsw-alias-brand-primary) 48%, var(--dsw-alias-tooltip-bg) 100%);color:var(--dsw-alias-fg-base);pointer-events:auto;place-items:center;padding:24px;display:grid;position:fixed;inset:0;overflow:hidden}.FV0QMq_chatcodeGateCard{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:linear-gradient(145deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));width:min(460px,100%);box-shadow:var(--dsw-shadow-lv3);text-align:center;border-radius:20px;padding:40px 36px;position:relative}.FV0QMq_chatcodeGateContent{position:relative}.FV0QMq_chatcodeGateCard h1{font:var(--dsw-font-heading-lg);letter-spacing:-.02em;margin:0 0 12px;font-size:clamp(32px,5vw,46px);line-height:1.1}.FV0QMq_chatcodeGateCard p{max-width:29em;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-s-14);margin:0 auto;line-height:1.7}.FV0QMq_chatcodeGateError{border:1px solid color-mix(in srgb, var(--dsw-alias-fg-error) 36%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-fg-error) 8%, transparent);border-radius:10px;padding:9px 11px;position:relative;color:var(--dsw-alias-fg-error)!important;font:var(--dsw-font-xxs-12)!important;margin-top:16px!important;line-height:1.5!important}.FV0QMq_chatcodeGateActions{justify-content:center;gap:10px;margin:28px 0 14px;display:flex;position:relative}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:42px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:10px;padding:9px 17px}.FV0QMq_chatcodeGateActions button:first-child{border-color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-state-error-primary);min-width:152px;min-height:46px;color:var(--dsw-alias-label-primary-inverted)}.FV0QMq_chatcodeGateActions button:first-child:hover:not(:disabled){box-shadow:var(--dsw-shadow-lv2);transform:translateY(-2px);border-color:var(--dsw-alias-state-error-primary)!important;background:var(--dsw-alias-state-error-primary)!important;color:var(--dsw-alias-label-primary-inverted)!important}.FV0QMq_chatcodeGateActions button:not(:first-child):hover:not(:disabled),.FV0QMq_chatcodeGateCard a:hover{border-color:var(--dsw-alias-button-primary-hover);background:var(--dsw-alias-button-primary-hover);color:var(--dsw-alias-label-primary-inverted);transform:translateY(-1px)}.FV0QMq_chatcodeGateActions button:disabled{cursor:default;opacity:.55}.FV0QMq_chatcodeGateCard a{align-items:center;text-decoration:none;display:inline-flex;position:relative}.FV0QMq_chatcodeGateActions button:focus-visible,.FV0QMq_chatcodeGateCard a:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:3px}@media (width<=480px){.FV0QMq_chatcodeGate{padding:16px}.FV0QMq_chatcodeGateCard{padding:32px 24px}.FV0QMq_chatcodeGateActions{flex-direction:column;align-items:stretch}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{justify-content:center}}";
12164
+ const tagId$6 = "dsh-external/dsh-better-sidebar/sidebar.module.css";
12165
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
12095
12166
  const tag = document.createElement("style");
12096
12167
  tag.dataset.plugin = "dsh-external/dsh-better-sidebar";
12097
- tag.dataset.pluginCss = tagId$5;
12098
- tag.textContent = css$5;
12168
+ tag.dataset.pluginCss = tagId$6;
12169
+ tag.textContent = css$6;
12099
12170
  document.head.appendChild(tag);
12100
12171
  }
12101
12172
  var sidebar_module_css_default = {
12102
- "chatcodeGateContent": "FV0QMq_chatcodeGateContent",
12103
- "explorerHidden": "FV0QMq_explorerHidden",
12104
- "editorPdfDragShield": "FV0QMq_editorPdfDragShield",
12105
- "pane": "FV0QMq_pane",
12106
- "mermaidBody": "FV0QMq_mermaidBody",
12107
- "uploadOverlayProgressFill": "FV0QMq_uploadOverlayProgressFill",
12108
- "gitDiffDel": "FV0QMq_gitDiffDel",
12109
- "tocItemText": "FV0QMq_tocItemText",
12110
- "splitRow": "FV0QMq_splitRow",
12111
- "gitLogHash": "FV0QMq_gitLogHash",
12112
- "updateList": "FV0QMq_updateList",
12113
- "mermaidHeader": "FV0QMq_mermaidHeader",
12114
- "bottomPanel": "FV0QMq_bottomPanel",
12115
- "iconButton": "FV0QMq_iconButton",
12116
- "mermaidCode": "FV0QMq_mermaidCode",
12117
- "gitDiffTab": "FV0QMq_gitDiffTab",
12118
- "gitRow": "FV0QMq_gitRow",
12173
+ "browserMessage": "FV0QMq_browserMessage",
12174
+ "pinnedSessionsList": "FV0QMq_pinnedSessionsList",
12175
+ "dividerCol": "FV0QMq_dividerCol",
12176
+ "dropCenter": "FV0QMq_dropCenter",
12119
12177
  "releaseNotesFooter": "FV0QMq_releaseNotesFooter",
12120
- "tabBarDrop": "FV0QMq_tabBarDrop",
12121
- "editorPlaceholder": "FV0QMq_editorPlaceholder",
12122
- "browserBar": "FV0QMq_browserBar",
12123
- "dividerRow": "FV0QMq_dividerRow",
12124
- "mermaidModalStage": "FV0QMq_mermaidModalStage",
12125
- "dropRight": "FV0QMq_dropRight",
12126
- "editorPathInput": "FV0QMq_editorPathInput",
12127
- "editorHeader": "FV0QMq_editorHeader",
12128
- "gitCommitButton": "FV0QMq_gitCommitButton",
12129
- "pinnedSessionTitle": "FV0QMq_pinnedSessionTitle",
12130
- "explorerRowDropTarget": "FV0QMq_explorerRowDropTarget",
12131
- "paneDrop": "FV0QMq_paneDrop",
12132
- "gitRowMain": "FV0QMq_gitRowMain",
12133
- "gitLink": "FV0QMq_gitLink",
12134
- "uploadDropChatCard": "FV0QMq_uploadDropChatCard",
12135
- "explorerBroken": "FV0QMq_explorerBroken",
12136
- "selectionPopup": "FV0QMq_selectionPopup",
12137
- "git": "FV0QMq_git",
12138
- "sandboxDot": "FV0QMq_sandboxDot",
12139
- "tabClose": "FV0QMq_tabClose",
12140
- "updateBody": "FV0QMq_updateBody",
12141
- "editorSearchHint": "FV0QMq_editorSearchHint",
12142
- "gitSection": "FV0QMq_gitSection",
12143
- "gitDiffCode": "FV0QMq_gitDiffCode",
12144
- "toggleClusterNative": "FV0QMq_toggleClusterNative",
12145
- "uploadOverlayCancel": "FV0QMq_uploadOverlayCancel",
12146
- "editor": "FV0QMq_editor",
12147
- "editorPdfDragShieldActive": "FV0QMq_editorPdfDragShieldActive",
12148
- "editorTreePanel": "FV0QMq_editorTreePanel",
12149
- "terminalDepsCommandRow": "FV0QMq_terminalDepsCommandRow",
12150
- "mermaidWrap": "FV0QMq_mermaidWrap",
12151
- "updateVersions": "FV0QMq_updateVersions",
12152
- "toggleCluster": "FV0QMq_toggleCluster",
12153
- "bottomPanelHidden": "FV0QMq_bottomPanelHidden",
12154
- "openWithName": "FV0QMq_openWithName",
12178
+ "dropOverlay": "FV0QMq_dropOverlay",
12179
+ "editorBody": "FV0QMq_editorBody",
12180
+ "editorTreeDock": "FV0QMq_editorTreeDock",
12181
+ "uploadOverlay": "FV0QMq_uploadOverlay",
12155
12182
  "updateSettingsTitle": "FV0QMq_updateSettingsTitle",
12156
- "floatClose": "FV0QMq_floatClose",
12157
- "editorBinaryNotice": "FV0QMq_editorBinaryNotice",
12158
- "editorTreeResize": "FV0QMq_editorTreeResize",
12159
- "editorPdfFrameBlocked": "FV0QMq_editorPdfFrameBlocked",
12160
- "pinnedSessions": "FV0QMq_pinnedSessions",
12161
- "openWithPinActive": "FV0QMq_openWithPinActive",
12162
- "explorerDir": "FV0QMq_explorerDir",
12163
- "editorError": "FV0QMq_editorError",
12164
- "mermaidInfo": "FV0QMq_mermaidInfo",
12165
- "chatcodeGateActions": "FV0QMq_chatcodeGateActions",
12166
- "gitDiff": "FV0QMq_gitDiff",
12167
- "pinnedSessionsList": "FV0QMq_pinnedSessionsList",
12168
- "pinnedSessionMenuDivider": "FV0QMq_pinnedSessionMenuDivider",
12169
- "terminalDepsHint": "FV0QMq_terminalDepsHint",
12170
- "tab": "FV0QMq_tab",
12171
12183
  "gitEmpty": "FV0QMq_gitEmpty",
12172
- "explorerRoot": "FV0QMq_explorerRoot",
12173
- "pinnedTab": "FV0QMq_pinnedTab",
12174
- "gitDiffFile": "FV0QMq_gitDiffFile",
12175
- "dropLeft": "FV0QMq_dropLeft",
12176
- "browserBlockedDesc": "FV0QMq_browserBlockedDesc",
12184
+ "floatClose": "FV0QMq_floatClose",
12185
+ "tabBadge": "FV0QMq_tabBadge",
12186
+ "paneContent": "FV0QMq_paneContent",
12187
+ "explorerCopied": "FV0QMq_explorerCopied",
12188
+ "producedChip": "FV0QMq_producedChip",
12189
+ "editorBanner": "FV0QMq_editorBanner",
12177
12190
  "browserStart": "FV0QMq_browserStart",
12178
- "dropCenter": "FV0QMq_dropCenter",
12179
- "terminalRepairCommand": "FV0QMq_terminalRepairCommand",
12180
- "gitDiffLine": "FV0QMq_gitDiffLine",
12181
- "gitDiffFileChevronExpanded": "FV0QMq_gitDiffFileChevronExpanded",
12182
12191
  "gitLogRef": "FV0QMq_gitLogRef",
12183
- "terminalDepsBanner": "FV0QMq_terminalDepsBanner",
12184
- "gitLogSubject": "FV0QMq_gitLogSubject",
12185
- "panelResize": "FV0QMq_panelResize",
12186
- "sandboxStatusText": "FV0QMq_sandboxStatusText",
12192
+ "releaseNotesContent": "FV0QMq_releaseNotesContent",
12193
+ "releaseNotesHeader": "FV0QMq_releaseNotesHeader",
12194
+ "pinnedSessionDot": "FV0QMq_pinnedSessionDot",
12187
12195
  "editorImage": "FV0QMq_editorImage",
12188
- "editorSearchInput": "FV0QMq_editorSearchInput",
12189
- "floatContent": "FV0QMq_floatContent",
12190
- "accountMenu": "FV0QMq_accountMenu",
12191
- "editorBody": "FV0QMq_editorBody",
12192
- "editorSearchResult": "FV0QMq_editorSearchResult",
12193
- "accountAvatar": "FV0QMq_accountAvatar",
12194
- "editorHtml": "FV0QMq_editorHtml",
12195
- "browserInput": "FV0QMq_browserInput",
12196
- "gitSectionHeader": "FV0QMq_gitSectionHeader",
12197
- "gitLogMeta": "FV0QMq_gitLogMeta",
12198
- "tabBar": "FV0QMq_tabBar",
12199
- "manualButton": "FV0QMq_manualButton",
12200
- "gitDiffFileChevron": "FV0QMq_gitDiffFileChevron",
12201
- "bottomClose": "FV0QMq_bottomClose",
12202
- "gitLogRow": "FV0QMq_gitLogRow",
12203
- "mermaidError": "FV0QMq_mermaidError",
12204
- "mermaidModal": "FV0QMq_mermaidModal",
12205
- "gitDiffFilePath": "FV0QMq_gitDiffFilePath",
12206
- "explorerRowRevealed": "FV0QMq_explorerRowRevealed",
12207
- "gitRowSelected": "FV0QMq_gitRowSelected",
12208
- "releaseNotesDialog": "FV0QMq_releaseNotesDialog",
12209
- "editorModeButton": "FV0QMq_editorModeButton",
12210
- "terminalDepsNote": "FV0QMq_terminalDepsNote",
12211
- "gitDiffMeta": "FV0QMq_gitDiffMeta",
12212
- "uploadOverlayTitle": "FV0QMq_uploadOverlayTitle",
12213
- "gitDiffFileOld": "FV0QMq_gitDiffFileOld",
12214
- "gitBadge": "FV0QMq_gitBadge",
12215
- "updateSettingsText": "FV0QMq_updateSettingsText",
12216
- "dropDown": "FV0QMq_dropDown",
12217
- "chatcodeGateCard": "FV0QMq_chatcodeGateCard",
12218
- "terminalBanner": "FV0QMq_terminalBanner",
12219
- "editorTitle": "FV0QMq_editorTitle",
12220
- "boundaryError": "FV0QMq_boundaryError",
12221
- "uploadDropZonePill": "FV0QMq_uploadDropZonePill",
12196
+ "terminalBannerUrl": "FV0QMq_terminalBannerUrl",
12197
+ "gitDiffHunk": "FV0QMq_gitDiffHunk",
12198
+ "editorPdfFrameBlocked": "FV0QMq_editorPdfFrameBlocked",
12199
+ "explorerRow": "FV0QMq_explorerRow",
12200
+ "tabList": "FV0QMq_tabList",
12201
+ "gitHeader": "FV0QMq_gitHeader",
12202
+ "dropLeft": "FV0QMq_dropLeft",
12222
12203
  "floatHeader": "FV0QMq_floatHeader",
12223
- "accountName": "FV0QMq_accountName",
12224
- "browserBlockedActions": "FV0QMq_browserBlockedActions",
12225
- "editorMd": "FV0QMq_editorMd",
12226
- "releaseNotesButton": "FV0QMq_releaseNotesButton",
12227
- "gitLogLine2": "FV0QMq_gitLogLine2",
12228
- "divider": "FV0QMq_divider",
12229
- "tocItem": "FV0QMq_tocItem",
12230
- "toggleButton": "FV0QMq_toggleButton",
12231
- "uploadDropZone": "FV0QMq_uploadDropZone",
12232
- "editorStatus": "FV0QMq_editorStatus",
12233
- "mermaidCopy": "FV0QMq_mermaidCopy",
12234
- "browserBlocked": "FV0QMq_browserBlocked",
12235
- "gitDiffTabHeader": "FV0QMq_gitDiffTabHeader",
12236
- "gitConfirmDesc": "FV0QMq_gitConfirmDesc",
12204
+ "bottomPanel": "FV0QMq_bottomPanel",
12205
+ "tabBarPlus": "FV0QMq_tabBarPlus",
12206
+ "editorHeader": "FV0QMq_editorHeader",
12207
+ "gitDiffTabTitle": "FV0QMq_gitDiffTabTitle",
12208
+ "gitSectionHeader": "FV0QMq_gitSectionHeader",
12209
+ "dirtyDot": "FV0QMq_dirtyDot",
12210
+ "updateSettingsRow": "FV0QMq_updateSettingsRow",
12211
+ "orphanedType": "FV0QMq_orphanedType",
12237
12212
  "tabBoundaryError": "FV0QMq_tabBoundaryError",
12238
- "accountPresence": "FV0QMq_accountPresence",
12239
- "accountItem": "FV0QMq_accountItem",
12213
+ "editorStatusError": "FV0QMq_editorStatusError",
12214
+ "editorMain": "FV0QMq_editorMain",
12240
12215
  "accountMenuDivider": "FV0QMq_accountMenuDivider",
12241
- "paneTab": "FV0QMq_paneTab",
12242
- "workbench": "FV0QMq_workbench",
12243
- "dropUp": "FV0QMq_dropUp",
12244
- "sandboxStatusOn": "FV0QMq_sandboxStatusOn",
12245
- "gitDiffCtx": "FV0QMq_gitDiffCtx",
12246
- "gitCommitInput": "FV0QMq_gitCommitInput",
12247
- "editorHtmlBlock": "FV0QMq_editorHtmlBlock",
12248
- "tocButton": "FV0QMq_tocButton",
12249
- "terminalWrap": "FV0QMq_terminalWrap",
12250
- "floatDropHintLabel": "FV0QMq_floatDropHintLabel",
12251
- "dropOverlay": "FV0QMq_dropOverlay",
12252
- "explorerSymlink": "FV0QMq_explorerSymlink",
12253
- "mermaidModalHint": "FV0QMq_mermaidModalHint",
12254
- "tabBadge": "FV0QMq_tabBadge",
12255
- "pinnedSessionsHeading": "FV0QMq_pinnedSessionsHeading",
12256
- "fenceError": "FV0QMq_fenceError",
12257
- "accountTrigger": "FV0QMq_accountTrigger",
12258
- "editorCm": "FV0QMq_editorCm",
12259
- "browser": "FV0QMq_browser",
12260
- "dividerActive": "FV0QMq_dividerActive",
12261
- "pinnedSessionRow": "FV0QMq_pinnedSessionRow",
12262
- "gitLogMore": "FV0QMq_gitLogMore",
12263
- "updateErrorText": "FV0QMq_updateErrorText",
12264
- "browserFrame": "FV0QMq_browserFrame",
12265
- "producedChip": "FV0QMq_producedChip",
12266
- "bottomResizeActive": "FV0QMq_bottomResizeActive",
12216
+ "tab": "FV0QMq_tab",
12217
+ "uploadOverlayCard": "FV0QMq_uploadOverlayCard",
12218
+ "editorPlaceholder": "FV0QMq_editorPlaceholder",
12219
+ "updateList": "FV0QMq_updateList",
12220
+ "editorPdfToolbar": "FV0QMq_editorPdfToolbar",
12221
+ "gitRowSelected": "FV0QMq_gitRowSelected",
12222
+ "gitDiff": "FV0QMq_gitDiff",
12223
+ "uploadOverlayProgress": "FV0QMq_uploadOverlayProgress",
12224
+ "updateSettingsBlock": "FV0QMq_updateSettingsBlock",
12225
+ "gitDiffMetaText": "FV0QMq_gitDiffMetaText",
12226
+ "explorerBody": "FV0QMq_explorerBody",
12227
+ "gitDiffHunkSection": "FV0QMq_gitDiffHunkSection",
12228
+ "sandboxAction": "FV0QMq_sandboxAction",
12229
+ "editorModeActive": "FV0QMq_editorModeActive",
12230
+ "git": "FV0QMq_git",
12231
+ "updateVersions": "FV0QMq_updateVersions",
12232
+ "producedLabel": "FV0QMq_producedLabel",
12233
+ "accountDropdownHeader": "FV0QMq_accountDropdownHeader",
12267
12234
  "editorPdf": "FV0QMq_editorPdf",
12268
- "terminalDepsActions": "FV0QMq_terminalDepsActions",
12269
- "editorTreeDock": "FV0QMq_editorTreeDock",
12235
+ "gitConfirmDesc": "FV0QMq_gitConfirmDesc",
12236
+ "updateCommand": "FV0QMq_updateCommand",
12237
+ "updateSettingsDesc": "FV0QMq_updateSettingsDesc",
12238
+ "pinnedSessionRow": "FV0QMq_pinnedSessionRow",
12239
+ "sandboxDot": "FV0QMq_sandboxDot",
12240
+ "gitBadge": "FV0QMq_gitBadge",
12241
+ "tabBar": "FV0QMq_tabBar",
12270
12242
  "gitWorktreeRow": "FV0QMq_gitWorktreeRow",
12271
- "splitChild": "FV0QMq_splitChild",
12243
+ "updateBody": "FV0QMq_updateBody",
12244
+ "gitError": "FV0QMq_gitError",
12245
+ "uploadOverlayStatus": "FV0QMq_uploadOverlayStatus",
12246
+ "editorPdfStage": "FV0QMq_editorPdfStage",
12247
+ "divider": "FV0QMq_divider",
12248
+ "browser": "FV0QMq_browser",
12249
+ "gitDiffHunkHeader": "FV0QMq_gitDiffHunkHeader",
12250
+ "updateSettingsText": "FV0QMq_updateSettingsText",
12251
+ "dividerRow": "FV0QMq_dividerRow",
12252
+ "editorSearchInput": "FV0QMq_editorSearchInput",
12272
12253
  "editorImageWrap": "FV0QMq_editorImageWrap",
12273
- "floatWindowDragging": "FV0QMq_floatWindowDragging",
12274
- "gitBranchSelect": "FV0QMq_gitBranchSelect",
12254
+ "releaseNotesButton": "FV0QMq_releaseNotesButton",
12255
+ "accountTrigger": "FV0QMq_accountTrigger",
12256
+ "gitDiffFileOld": "FV0QMq_gitDiffFileOld",
12257
+ "mermaidMarkdown": "FV0QMq_mermaidMarkdown",
12258
+ "gitPlaceholder": "FV0QMq_gitPlaceholder",
12259
+ "browserBlockedActions": "FV0QMq_browserBlockedActions",
12260
+ "gitDiffTabHeader": "FV0QMq_gitDiffTabHeader",
12261
+ "uploadOverlayProgressFill": "FV0QMq_uploadOverlayProgressFill",
12262
+ "gitRowMain": "FV0QMq_gitRowMain",
12275
12263
  "dsh-row-in": "FV0QMq_dsh-row-in",
12276
- "updateSettingsBlock": "FV0QMq_updateSettingsBlock",
12277
- "uploadDropChatHint": "FV0QMq_uploadDropChatHint",
12278
- "openWithChevron": "FV0QMq_openWithChevron",
12279
- "editorModeActive": "FV0QMq_editorModeActive",
12280
- "gitWorktreeLabel": "FV0QMq_gitWorktreeLabel",
12281
- "explorerBody": "FV0QMq_explorerBody",
12282
- "editorTreeSearch": "FV0QMq_editorTreeSearch",
12283
- "producedRow": "FV0QMq_producedRow",
12284
- "pinnedSessionDot": "FV0QMq_pinnedSessionDot",
12285
- "releaseNotesOverlay": "FV0QMq_releaseNotesOverlay",
12286
- "accountDropdown": "FV0QMq_accountDropdown",
12287
- "editorCmHidden": "FV0QMq_editorCmHidden",
12288
- "editorStatusError": "FV0QMq_editorStatusError",
12289
- "dsh-toc-flash": "FV0QMq_dsh-toc-flash",
12290
- "floatDropHint": "FV0QMq_floatDropHint",
12264
+ "terminal": "FV0QMq_terminal",
12265
+ "gitDiffAdd": "FV0QMq_gitDiffAdd",
12266
+ "openWithName": "FV0QMq_openWithName",
12267
+ "editorCm": "FV0QMq_editorCm",
12268
+ "tabActive": "FV0QMq_tabActive",
12269
+ "floatDropHintLabel": "FV0QMq_floatDropHintLabel",
12270
+ "browserInput": "FV0QMq_browserInput",
12271
+ "uploadDropZonePill": "FV0QMq_uploadDropZonePill",
12272
+ "sandboxStatusOn": "FV0QMq_sandboxStatusOn",
12273
+ "explorerBroken": "FV0QMq_explorerBroken",
12274
+ "dropUp": "FV0QMq_dropUp",
12275
+ "editorTreeResize": "FV0QMq_editorTreeResize",
12276
+ "explorerError": "FV0QMq_explorerError",
12277
+ "mermaidBody": "FV0QMq_mermaidBody",
12291
12278
  "editorBinary": "FV0QMq_editorBinary",
12292
- "gitDiffTabTitle": "FV0QMq_gitDiffTabTitle",
12293
- "paneCard": "FV0QMq_paneCard",
12294
- "gitDiffHunk": "FV0QMq_gitDiffHunk",
12295
- "pinnedSessionMore": "FV0QMq_pinnedSessionMore",
12296
- "accountDropdownHeader": "FV0QMq_accountDropdownHeader",
12297
- "tocFlash": "FV0QMq_tocFlash",
12298
- "gitDiffNum": "FV0QMq_gitDiffNum",
12299
12279
  "gitDiffFileTag": "FV0QMq_gitDiffFileTag",
12300
- "uploadDropZoneText": "FV0QMq_uploadDropZoneText",
12301
- "editorTreePanelFull": "FV0QMq_editorTreePanelFull",
12302
- "tabBarPlus": "FV0QMq_tabBarPlus",
12303
- "uploadOverlayStatus": "FV0QMq_uploadOverlayStatus",
12304
- "paneTabHidden": "FV0QMq_paneTabHidden",
12305
- "gitHeader": "FV0QMq_gitHeader",
12306
- "chatcodeGate": "FV0QMq_chatcodeGate",
12280
+ "gitLogRow": "FV0QMq_gitLogRow",
12281
+ "terminalDepsActions": "FV0QMq_terminalDepsActions",
12282
+ "mermaidCopy": "FV0QMq_mermaidCopy",
12283
+ "accountAvatar": "FV0QMq_accountAvatar",
12284
+ "releaseNotesOverlay": "FV0QMq_releaseNotesOverlay",
12285
+ "uploadDropHero": "FV0QMq_uploadDropHero",
12286
+ "gitDiffExpand": "FV0QMq_gitDiffExpand",
12307
12287
  "editorDocxZoomRange": "FV0QMq_editorDocxZoomRange",
12308
- "mermaidModalToolbar": "FV0QMq_mermaidModalToolbar",
12309
- "gitLogLine1": "FV0QMq_gitLogLine1",
12288
+ "mermaidModalButton": "FV0QMq_mermaidModalButton",
12289
+ "tocFlash": "FV0QMq_tocFlash",
12290
+ "editorPptxButton": "FV0QMq_editorPptxButton",
12291
+ "terminalDepsTitle": "FV0QMq_terminalDepsTitle",
12292
+ "pinnedSessionMore": "FV0QMq_pinnedSessionMore",
12310
12293
  "explorer": "FV0QMq_explorer",
12311
- "dirtyDot": "FV0QMq_dirtyDot",
12312
- "gitError": "FV0QMq_gitError",
12313
- "updateFooter": "FV0QMq_updateFooter",
12314
- "updateSettingsDesc": "FV0QMq_updateSettingsDesc",
12315
- "editorTreeToggleActive": "FV0QMq_editorTreeToggleActive",
12294
+ "toggleCluster": "FV0QMq_toggleCluster",
12295
+ "explorerSymlink": "FV0QMq_explorerSymlink",
12296
+ "editorPdfFrame": "FV0QMq_editorPdfFrame",
12297
+ "gitDiffCode": "FV0QMq_gitDiffCode",
12298
+ "openWithChevron": "FV0QMq_openWithChevron",
12299
+ "editorMd": "FV0QMq_editorMd",
12300
+ "split": "FV0QMq_split",
12301
+ "mermaidCode": "FV0QMq_mermaidCode",
12302
+ "chatcodeGateCard": "FV0QMq_chatcodeGateCard",
12303
+ "chatcodeGate": "FV0QMq_chatcodeGate",
12304
+ "mermaidInfo": "FV0QMq_mermaidInfo",
12305
+ "updateError": "FV0QMq_updateError",
12306
+ "bottomResizeActive": "FV0QMq_bottomResizeActive",
12307
+ "gitCommit": "FV0QMq_gitCommit",
12308
+ "tocBar": "FV0QMq_tocBar",
12309
+ "chatcodeGateActions": "FV0QMq_chatcodeGateActions",
12310
+ "floatWindow": "FV0QMq_floatWindow",
12311
+ "releaseNotesDialog": "FV0QMq_releaseNotesDialog",
12312
+ "terminalWrap": "FV0QMq_terminalWrap",
12313
+ "uploadDropZoneText": "FV0QMq_uploadDropZoneText",
12314
+ "panelResize": "FV0QMq_panelResize",
12315
+ "pinnedSessionsHeading": "FV0QMq_pinnedSessionsHeading",
12316
+ "paneEmptyCards": "FV0QMq_paneEmptyCards",
12317
+ "accountLogoutConfirm": "FV0QMq_accountLogoutConfirm",
12318
+ "gitName": "FV0QMq_gitName",
12319
+ "gitLogSubject": "FV0QMq_gitLogSubject",
12320
+ "paneDrop": "FV0QMq_paneDrop",
12321
+ "explorerName": "FV0QMq_explorerName",
12322
+ "editorPdfDragShield": "FV0QMq_editorPdfDragShield",
12323
+ "uploadDropZone": "FV0QMq_uploadDropZone",
12324
+ "tabClose": "FV0QMq_tabClose",
12316
12325
  "editorDownloadLink": "FV0QMq_editorDownloadLink",
12317
- "terminalDepsTitle": "FV0QMq_terminalDepsTitle",
12318
- "producedMore": "FV0QMq_producedMore",
12319
- "floatTitle": "FV0QMq_floatTitle",
12320
- "explorerCopied": "FV0QMq_explorerCopied",
12321
- "explorerHeader": "FV0QMq_explorerHeader",
12322
- "editorPdfStage": "FV0QMq_editorPdfStage",
12323
- "gitDiffHunkHeader": "FV0QMq_gitDiffHunkHeader",
12324
- "floatResize": "FV0QMq_floatResize",
12325
- "gitPlaceholder": "FV0QMq_gitPlaceholder",
12326
+ "sandboxStatus": "FV0QMq_sandboxStatus",
12327
+ "explorerHidden": "FV0QMq_explorerHidden",
12328
+ "tocPanel": "FV0QMq_tocPanel",
12329
+ "editorPathInput": "FV0QMq_editorPathInput",
12330
+ "mermaidModalStage": "FV0QMq_mermaidModalStage",
12331
+ "pinnedSessionMenuDivider": "FV0QMq_pinnedSessionMenuDivider",
12332
+ "releaseNotesIconButton": "FV0QMq_releaseNotesIconButton",
12333
+ "editorTreeToggleActive": "FV0QMq_editorTreeToggleActive",
12334
+ "openWithLabel": "FV0QMq_openWithLabel",
12335
+ "paneTab": "FV0QMq_paneTab",
12336
+ "explorerRoot": "FV0QMq_explorerRoot",
12337
+ "panelBody": "FV0QMq_panelBody",
12338
+ "bottomResize": "FV0QMq_bottomResize",
12339
+ "browserBlockedTitle": "FV0QMq_browserBlockedTitle",
12340
+ "editorTitle": "FV0QMq_editorTitle",
12341
+ "gitDiffLine": "FV0QMq_gitDiffLine",
12342
+ "gitLogLine1": "FV0QMq_gitLogLine1",
12343
+ "gitDiffTab": "FV0QMq_gitDiffTab",
12344
+ "editorSearchHint": "FV0QMq_editorSearchHint",
12345
+ "floatContent": "FV0QMq_floatContent",
12346
+ "editorTreeSearch": "FV0QMq_editorTreeSearch",
12347
+ "pinnedSessionOpen": "FV0QMq_pinnedSessionOpen",
12348
+ "browserBlockedDesc": "FV0QMq_browserBlockedDesc",
12349
+ "panel": "FV0QMq_panel",
12350
+ "bottomClose": "FV0QMq_bottomClose",
12351
+ "openWithPin": "FV0QMq_openWithPin",
12352
+ "mermaidWrap": "FV0QMq_mermaidWrap",
12353
+ "gitWorktreeLabel": "FV0QMq_gitWorktreeLabel",
12354
+ "updateErrorText": "FV0QMq_updateErrorText",
12355
+ "chatcodeGateError": "FV0QMq_chatcodeGateError",
12356
+ "pinnedTab": "FV0QMq_pinnedTab",
12357
+ "uploadOverlayCancel": "FV0QMq_uploadOverlayCancel",
12358
+ "bottomPanelHidden": "FV0QMq_bottomPanelHidden",
12359
+ "manualButton": "FV0QMq_manualButton",
12360
+ "toggleClusterNative": "FV0QMq_toggleClusterNative",
12361
+ "browserBlocked": "FV0QMq_browserBlocked",
12362
+ "explorerRowRevealed": "FV0QMq_explorerRowRevealed",
12363
+ "tabBarDrop": "FV0QMq_tabBarDrop",
12326
12364
  "tabTitle": "FV0QMq_tabTitle",
12327
- "updateError": "FV0QMq_updateError",
12328
- "uploadOverlay": "FV0QMq_uploadOverlay",
12329
- "terminalRetry": "FV0QMq_terminalRetry",
12330
- "explorerName": "FV0QMq_explorerName",
12331
- "uploadOverlayCard": "FV0QMq_uploadOverlayCard",
12332
- "editorPptxButton": "FV0QMq_editorPptxButton",
12365
+ "explorerRowDropTarget": "FV0QMq_explorerRowDropTarget",
12366
+ "accountPresence": "FV0QMq_accountPresence",
12367
+ "editorHtml": "FV0QMq_editorHtml",
12368
+ "accountLogoutDescription": "FV0QMq_accountLogoutDescription",
12369
+ "terminalDepsNote": "FV0QMq_terminalDepsNote",
12370
+ "gitDiffFileChevron": "FV0QMq_gitDiffFileChevron",
12371
+ "gitDiffFilePath": "FV0QMq_gitDiffFilePath",
12372
+ "gitCommitButton": "FV0QMq_gitCommitButton",
12373
+ "gitLogLine2": "FV0QMq_gitLogLine2",
12374
+ "mermaidHeader": "FV0QMq_mermaidHeader",
12375
+ "browserFrame": "FV0QMq_browserFrame",
12376
+ "accountName": "FV0QMq_accountName",
12333
12377
  "explorerRef": "FV0QMq_explorerRef",
12334
- "releaseNotesIconButton": "FV0QMq_releaseNotesIconButton",
12335
- "releaseNotesHeader": "FV0QMq_releaseNotesHeader",
12336
- "updateOk": "FV0QMq_updateOk",
12337
- "floatWindow": "FV0QMq_floatWindow",
12338
- "editorMain": "FV0QMq_editorMain",
12339
- "editorBanner": "FV0QMq_editorBanner",
12340
- "explorerError": "FV0QMq_explorerError",
12341
- "sandboxAction": "FV0QMq_sandboxAction",
12342
- "dividerCol": "FV0QMq_dividerCol",
12343
- "gitDiffExpand": "FV0QMq_gitDiffExpand",
12344
- "uploadDropHero": "FV0QMq_uploadDropHero",
12345
- "panelHidden": "FV0QMq_panelHidden",
12378
+ "uploadDropChatCard": "FV0QMq_uploadDropChatCard",
12379
+ "gitLogHash": "FV0QMq_gitLogHash",
12380
+ "gitRow": "FV0QMq_gitRow",
12381
+ "dropRight": "FV0QMq_dropRight",
12382
+ "gitDiffFileChevronExpanded": "FV0QMq_gitDiffFileChevronExpanded",
12383
+ "editorStatus": "FV0QMq_editorStatus",
12384
+ "selectionPopup": "FV0QMq_selectionPopup",
12385
+ "floatDropHint": "FV0QMq_floatDropHint",
12386
+ "browserBar": "FV0QMq_browserBar",
12387
+ "updateInline": "FV0QMq_updateInline",
12388
+ "terminalRetry": "FV0QMq_terminalRetry",
12389
+ "explorerHeader": "FV0QMq_explorerHeader",
12390
+ "gitLink": "FV0QMq_gitLink",
12391
+ "editorHtmlBlock": "FV0QMq_editorHtmlBlock",
12392
+ "tocItemText": "FV0QMq_tocItemText",
12346
12393
  "explorerEmpty": "FV0QMq_explorerEmpty",
12347
- "bottomResize": "FV0QMq_bottomResize",
12348
- "producedLabel": "FV0QMq_producedLabel",
12349
- "editorPdfFrame": "FV0QMq_editorPdfFrame",
12350
- "tocPanel": "FV0QMq_tocPanel",
12351
- "paneEmptyCards": "FV0QMq_paneEmptyCards",
12352
- "gitDiffHunkSection": "FV0QMq_gitDiffHunkSection",
12353
- "terminal": "FV0QMq_terminal",
12354
- "panel": "FV0QMq_panel",
12355
- "chatcodeGateError": "FV0QMq_chatcodeGateError",
12356
- "sandboxStatusOff": "FV0QMq_sandboxStatusOff",
12394
+ "sandboxStatusText": "FV0QMq_sandboxStatusText",
12395
+ "floatTitle": "FV0QMq_floatTitle",
12396
+ "pinnedSessionTitle": "FV0QMq_pinnedSessionTitle",
12397
+ "updateFooter": "FV0QMq_updateFooter",
12398
+ "toggleButton": "FV0QMq_toggleButton",
12399
+ "splitChild": "FV0QMq_splitChild",
12400
+ "gitDiffCtx": "FV0QMq_gitDiffCtx",
12401
+ "tocItemLevel": "FV0QMq_tocItemLevel",
12402
+ "floatResize": "FV0QMq_floatResize",
12403
+ "dsh-toc-flash": "FV0QMq_dsh-toc-flash",
12404
+ "editorCmHidden": "FV0QMq_editorCmHidden",
12405
+ "gitLogMeta": "FV0QMq_gitLogMeta",
12406
+ "accountLogoutActions": "FV0QMq_accountLogoutActions",
12407
+ "paneTabHidden": "FV0QMq_paneTabHidden",
12408
+ "editorError": "FV0QMq_editorError",
12409
+ "pinnedSessions": "FV0QMq_pinnedSessions",
12410
+ "explorerDir": "FV0QMq_explorerDir",
12411
+ "editorPdfDragShieldActive": "FV0QMq_editorPdfDragShieldActive",
12412
+ "gitDiffFile": "FV0QMq_gitDiffFile",
12413
+ "editorModeButton": "FV0QMq_editorModeButton",
12414
+ "gitSection": "FV0QMq_gitSection",
12415
+ "paneCard": "FV0QMq_paneCard",
12416
+ "floatWindowDragging": "FV0QMq_floatWindowDragging",
12417
+ "mermaidError": "FV0QMq_mermaidError",
12418
+ "editorSearchResult": "FV0QMq_editorSearchResult",
12419
+ "boundaryError": "FV0QMq_boundaryError",
12420
+ "gitCommitInput": "FV0QMq_gitCommitInput",
12421
+ "editorModeToggle": "FV0QMq_editorModeToggle",
12422
+ "accountLogoutTitle": "FV0QMq_accountLogoutTitle",
12423
+ "terminalDepsHint": "FV0QMq_terminalDepsHint",
12424
+ "terminalDepsBanner": "FV0QMq_terminalDepsBanner",
12425
+ "chatcodeGateContent": "FV0QMq_chatcodeGateContent",
12426
+ "panelResizeActive": "FV0QMq_panelResizeActive",
12427
+ "editorBinaryNotice": "FV0QMq_editorBinaryNotice",
12428
+ "dropDown": "FV0QMq_dropDown",
12357
12429
  "splitCol": "FV0QMq_splitCol",
12430
+ "browserBlockedButton": "FV0QMq_browserBlockedButton",
12431
+ "sandboxStatusOff": "FV0QMq_sandboxStatusOff",
12432
+ "mermaidModalHint": "FV0QMq_mermaidModalHint",
12433
+ "terminalBanner": "FV0QMq_terminalBanner",
12434
+ "gitDiffMeta": "FV0QMq_gitDiffMeta",
12435
+ "editorTreePanelFull": "FV0QMq_editorTreePanelFull",
12436
+ "openWithPinActive": "FV0QMq_openWithPinActive",
12437
+ "dividerActive": "FV0QMq_dividerActive",
12438
+ "editorTreePanel": "FV0QMq_editorTreePanel",
12439
+ "gitLogMore": "FV0QMq_gitLogMore",
12440
+ "iconButton": "FV0QMq_iconButton",
12441
+ "updateOk": "FV0QMq_updateOk",
12442
+ "uploadOverlayTitle": "FV0QMq_uploadOverlayTitle",
12443
+ "pane": "FV0QMq_pane",
12444
+ "workbench": "FV0QMq_workbench",
12445
+ "mermaidModal": "FV0QMq_mermaidModal",
12446
+ "gitDiffNum": "FV0QMq_gitDiffNum",
12358
12447
  "pinnedSessionMenu": "FV0QMq_pinnedSessionMenu",
12359
- "tabActive": "FV0QMq_tabActive",
12360
- "panelBody": "FV0QMq_panelBody",
12361
- "mermaidModalButton": "FV0QMq_mermaidModalButton",
12362
- "mermaidMarkdown": "FV0QMq_mermaidMarkdown",
12363
- "gitDiffAdd": "FV0QMq_gitDiffAdd",
12364
- "panelResizeActive": "FV0QMq_panelResizeActive",
12365
- "openWithLabel": "FV0QMq_openWithLabel",
12366
- "paneContent": "FV0QMq_paneContent",
12367
- "gitCommit": "FV0QMq_gitCommit",
12368
- "browserBlockedTitle": "FV0QMq_browserBlockedTitle",
12369
- "tabList": "FV0QMq_tabList",
12370
- "editorPdfToolbar": "FV0QMq_editorPdfToolbar",
12371
- "uploadOverlayProgress": "FV0QMq_uploadOverlayProgress",
12372
- "sandboxStatus": "FV0QMq_sandboxStatus",
12373
- "updateCommand": "FV0QMq_updateCommand",
12374
- "releaseNotesContent": "FV0QMq_releaseNotesContent",
12375
- "updateInline": "FV0QMq_updateInline",
12376
- "updateSettingsRow": "FV0QMq_updateSettingsRow",
12377
- "orphanedType": "FV0QMq_orphanedType",
12378
- "browserMessage": "FV0QMq_browserMessage",
12448
+ "accountMenu": "FV0QMq_accountMenu",
12379
12449
  "cornerHandle": "FV0QMq_cornerHandle",
12380
- "editorModeToggle": "FV0QMq_editorModeToggle",
12381
- "tocBar": "FV0QMq_tocBar",
12382
- "gitDiffMetaText": "FV0QMq_gitDiffMetaText",
12383
- "pinnedSessionOpen": "FV0QMq_pinnedSessionOpen",
12384
- "split": "FV0QMq_split",
12385
- "openWithPin": "FV0QMq_openWithPin",
12386
- "terminalBannerUrl": "FV0QMq_terminalBannerUrl",
12387
- "browserBlockedButton": "FV0QMq_browserBlockedButton",
12388
- "tocItemLevel": "FV0QMq_tocItemLevel",
12389
- "explorerRow": "FV0QMq_explorerRow",
12390
- "gitName": "FV0QMq_gitName"
12450
+ "uploadDropChatHint": "FV0QMq_uploadDropChatHint",
12451
+ "editor": "FV0QMq_editor",
12452
+ "mermaidModalToolbar": "FV0QMq_mermaidModalToolbar",
12453
+ "terminalDepsCommandRow": "FV0QMq_terminalDepsCommandRow",
12454
+ "gitDiffDel": "FV0QMq_gitDiffDel",
12455
+ "producedMore": "FV0QMq_producedMore",
12456
+ "gitBranchSelect": "FV0QMq_gitBranchSelect",
12457
+ "accountDropdown": "FV0QMq_accountDropdown",
12458
+ "fenceError": "FV0QMq_fenceError",
12459
+ "terminalRepairCommand": "FV0QMq_terminalRepairCommand",
12460
+ "producedRow": "FV0QMq_producedRow",
12461
+ "tocItem": "FV0QMq_tocItem",
12462
+ "tocButton": "FV0QMq_tocButton",
12463
+ "accountItem": "FV0QMq_accountItem",
12464
+ "accountLogoutDialog": "FV0QMq_accountLogoutDialog",
12465
+ "splitRow": "FV0QMq_splitRow",
12466
+ "panelHidden": "FV0QMq_panelHidden"
12391
12467
  };
12392
12468
  //#endregion
12393
12469
  //#region src/client/intercept.tsx
@@ -12649,6 +12725,21 @@ window.__ModuleLoader__.load({
12649
12725
  }
12650
12726
  /** The sidebar API surface (session scope threaded through every call). */
12651
12727
  const api = {
12728
+ pluginMarketContext: (scope, signal) => call("plugins.context", scopePayload(scope, {}), signal),
12729
+ pluginMarketplaces: (signal) => call("plugins.marketplaces", {}, signal),
12730
+ pluginCatalog: (marketplaceId, signal) => call("plugins.catalog", {
12731
+ marketplaceId,
12732
+ includeMetadata: true
12733
+ }, signal),
12734
+ pluginsInstalled: (scope, signal) => call("plugins.installed", scopePayload(scope, {}), signal),
12735
+ pluginInstall: (scope, pluginId, installScope) => call("plugins.install", scopePayload(scope, {
12736
+ pluginId,
12737
+ scope: installScope
12738
+ })),
12739
+ pluginUninstall: (scope, pluginId, installScope) => call("plugins.uninstall", scopePayload(scope, {
12740
+ pluginId,
12741
+ scope: installScope
12742
+ })),
12652
12743
  chatcodeStatus: (signal) => call("chatcode.status", {}, signal),
12653
12744
  chatcodeStart: () => call("chatcode.start", {}),
12654
12745
  chatcodeCancel: (sessionId) => call("chatcode.cancel", { sessionId }),
@@ -14949,82 +15040,82 @@ window.__ModuleLoader__.load({
14949
15040
  }
14950
15041
  //#endregion
14951
15042
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/SideCardSection.module.css.mjs
14952
- const css$4 = ".N4aF0W_section{flex-direction:column;gap:16px;width:100%;max-width:760px;display:flex}.N4aF0W_intro{color:var(--dsw-alias-label-tertiary);margin:0;padding:0 2px;font-size:13px;line-height:20px}.N4aF0W_group{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:16px;flex-direction:column;flex:none;gap:8px;padding:20px;display:flex}.N4aF0W_groupHeading{color:var(--dsw-alias-label-primary);align-items:baseline;gap:7px;padding:0 2px 6px;font-size:13px;font-weight:600;line-height:20px;display:flex}.N4aF0W_count{background:var(--dsw-alias-accent-soft,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px}.N4aF0W_grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.N4aF0W_card{border:1px solid var(--dsw-alias-border-l2);min-height:106px;font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:12px;flex-direction:column;transition:background .12s,border-color .12s;display:flex;position:relative;overflow:hidden}.N4aF0W_card:not(.N4aF0W_cardOn):hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_cardOn{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 45%, transparent);background:var(--dsw-alias-interactive-bg-active)}.N4aF0W_cardMain{border-radius:inherit;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;gap:6px;padding:12px;display:flex}.N4aF0W_cardMain:focus-visible,.N4aF0W_cardSettings:focus-visible,.N4aF0W_rowGear:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardTop{align-items:center;gap:8px;min-width:0;min-height:28px;display:flex}.N4aF0W_cardIconChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:28px;height:28px;color:var(--dsw-alias-label-tertiary);border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.N4aF0W_cardOn .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);background:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 12%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardTitle{min-width:0;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.N4aF0W_cardOn .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_cardSwitch{flex:none;align-items:center;display:inline-flex}.N4aF0W_cardSwitchTrack{box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;align-items:center;width:30px;height:16px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_cardSwitchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:10px;height:10px;transition:transform .15s,background .15s;display:block}.N4aF0W_cardOn .N4aF0W_cardSwitchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardOn .N4aF0W_cardSwitchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(14px)}.N4aF0W_cardDesc{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;line-height:16px;overflow:hidden}.N4aF0W_addCard{border-style:dashed;border-color:var(--dsw-alias-border-l2);text-align:left;align-items:flex-start;padding:12px}.N4aF0W_addCard:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_addCard:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardOn .N4aF0W_cardDesc{color:var(--dsw-alias-label-secondary)}.N4aF0W_cardSettings{border:0;border-top:1px solid var(--dsw-alias-border-l1);width:100%;color:var(--dsw-alias-label-secondary);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:6px;padding:6px 12px;font-size:11px;font-weight:500;line-height:16px;transition:background .12s,color .12s;display:flex}.N4aF0W_cardOn .N4aF0W_cardSettings{border-top-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 18%, transparent)}.N4aF0W_cardSettings:hover{background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_rowGear{border:1px solid var(--dsw-alias-border-l2);width:22px;height:22px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.N4aF0W_rowGear:hover{border-color:var(--dsw-alias-interactive-bg-hover-accent);background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_row{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;padding:12px 2px;display:flex}.N4aF0W_row:last-child{border-bottom:none}.N4aF0W_rowText{flex-direction:column;gap:4px;min-width:0;display:flex}.N4aF0W_title{color:var(--dsw-alias-label-primary);font-size:14px;line-height:22px}.N4aF0W_desc{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.N4aF0W_switch{cursor:pointer;flex:none;display:inline-flex;position:relative}.N4aF0W_switchInput{opacity:0;width:1px;height:1px;margin:0;position:absolute}.N4aF0W_switchTrack{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;align-items:center;width:36px;height:20px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_switchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:14px;height:14px;transition:transform .15s,background .15s;display:block}.N4aF0W_switch:hover .N4aF0W_switchTrack{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack .N4aF0W_switchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(16px)}.N4aF0W_switchInput:focus-visible+.N4aF0W_switchTrack{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_control{flex:none;align-items:center;gap:6px;display:flex}.N4aF0W_percentInput{width:76px}.N4aF0W_typedInput{width:200px}.N4aF0W_typedInputNumber{width:76px}.N4aF0W_selectAnchor{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);max-width:220px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:4px 8px;font-size:13px;line-height:20px;display:flex}.N4aF0W_selectAnchor:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_selectAnchorIcon{flex:none;display:inline-flex}.N4aF0W_selectAnchorText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.N4aF0W_selectOption{align-items:center;gap:10px;min-width:200px;display:flex}.N4aF0W_selectOptionIcon{color:var(--dsw-alias-label-secondary);flex:none;display:inline-flex}.N4aF0W_selectOptionText{flex-direction:column;min-width:0;display:flex}.N4aF0W_suffix{color:var(--dsw-alias-label-secondary);font-size:14px;line-height:22px}.N4aF0W_cssTextArea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-height:120px;color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code,monospace);resize:vertical;border-radius:8px;padding:8px 10px;font-size:12px;line-height:1.6}.N4aF0W_cssTextArea:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_popupDialog.N4aF0W_popupDialog{width:min(460px,100%)}.N4aF0W_popupRows{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-scrollbar-bg-l2,transparent) transparent;flex-direction:column;gap:8px;width:100%;max-height:min(52vh,440px);padding-right:4px;display:flex;overflow:hidden auto}.N4aF0W_popupRows::-webkit-scrollbar{width:6px}.N4aF0W_popupRows::-webkit-scrollbar-thumb{background:var(--dsw-alias-scrollbar-bg-l2,var(--dsw-alias-border-l2));border-radius:3px}.N4aF0W_popupRows::-webkit-scrollbar-thumb:hover{background:var(--dsw-alias-scrollbar-hover-l2,var(--dsw-alias-label-dimmed))}.N4aF0W_popupRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:12px 14px;transition:border-color .16s,background .16s;display:flex}.N4aF0W_popupRow:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_done{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.N4aF0W_done:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.N4aF0W_error{color:var(--dsw-alias-state-error-primary);padding:10px 0 2px;font-size:12px;line-height:17px}.N4aF0W_pluginModal.N4aF0W_pluginModal{width:min(560px,100%)}.N4aF0W_pluginList{flex-direction:column;gap:12px;width:100%;display:flex}.N4aF0W_pluginTopicBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;border-radius:8px;padding:6px 12px;font-size:12px;line-height:18px}.N4aF0W_pluginTopicBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginTopicBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEmpty{color:var(--dsw-alias-label-tertiary);padding:20px 2px;font-size:12px;line-height:18px}.N4aF0W_pluginEntry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;gap:4px;padding:12px;display:flex}.N4aF0W_pluginEntryHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.N4aF0W_pluginEntryActions{flex:none;align-items:center;gap:6px;display:inline-flex}.N4aF0W_pluginJumpBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginJumpBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginJumpBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginName{appearance:none;min-width:0;font:inherit;color:var(--dsw-alias-label-primary);text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:600;line-height:20px;text-decoration:none;overflow:hidden}.N4aF0W_pluginName:hover{color:var(--dsw-alias-button-primary-fill);text-decoration:underline}.N4aF0W_pluginDesc{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.N4aF0W_pluginInstall{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);white-space:nowrap;border-radius:8px;padding:6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:16px;display:block;overflow-x:auto}.N4aF0W_pluginCopyBtn{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginCopyBtn:hover{background:var(--dsw-alias-button-primary-hover)}.N4aF0W_pluginCopyBtn:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){.N4aF0W_card,.N4aF0W_cardSettings,.N4aF0W_cardSwitchTrack,.N4aF0W_cardSwitchThumb,.N4aF0W_rowGear,.N4aF0W_popupRow,.N4aF0W_switchTrack,.N4aF0W_switchThumb{transition:none}}.N4aF0W_pluginSearch{box-sizing:border-box;appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:8px;padding:6px 10px;font-size:12px;line-height:18px}.N4aF0W_pluginSearch::placeholder{color:var(--dsw-alias-label-tertiary)}.N4aF0W_pluginSearch:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEntries{flex-direction:column;gap:10px;max-height:46vh;padding-right:2px;display:flex;overflow:hidden auto}.N4aF0W_pluginGroup{flex-direction:column;gap:8px;display:flex}.N4aF0W_pluginGroupHeading{color:var(--dsw-alias-label-secondary);padding:2px 2px 0;font-size:12px;font-weight:600;line-height:18px}.N4aF0W_openWithEditorRow{grid-template-columns:1fr 1.5fr auto auto;align-items:center;gap:8px;min-width:0;display:grid}.N4aF0W_openWithEditorInput,.N4aF0W_openWithEditorTemplate{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-width:0;color:var(--dsw-alias-label-primary);font:inherit;border-radius:8px;padding:5px 8px;font-size:13px;line-height:20px}.N4aF0W_openWithEditorInput:focus-visible,.N4aF0W_openWithEditorTemplate:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.N4aF0W_openWithFamily{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.N4aF0W_openWithRemove{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.N4aF0W_openWithRemove:hover{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2)}.N4aF0W_openWithHint{color:var(--dsw-alias-state-error-primary);padding:0 2px;font-size:12px;line-height:17px}";
14953
- const tagId$4 = "dsh-external/dsh-better-sidebar/SideCardSection.module.css";
14954
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
15043
+ const css$5 = ".N4aF0W_section{flex-direction:column;gap:16px;width:100%;max-width:760px;display:flex}.N4aF0W_intro{color:var(--dsw-alias-label-tertiary);margin:0;padding:0 2px;font-size:13px;line-height:20px}.N4aF0W_group{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:16px;flex-direction:column;flex:none;gap:8px;padding:20px;display:flex}.N4aF0W_groupHeading{color:var(--dsw-alias-label-primary);align-items:baseline;gap:7px;padding:0 2px 6px;font-size:13px;font-weight:600;line-height:20px;display:flex}.N4aF0W_count{background:var(--dsw-alias-accent-soft,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px}.N4aF0W_grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.N4aF0W_card{border:1px solid var(--dsw-alias-border-l2);min-height:106px;font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:12px;flex-direction:column;transition:background .12s,border-color .12s;display:flex;position:relative;overflow:hidden}.N4aF0W_card:not(.N4aF0W_cardOn):hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_cardOn{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 45%, transparent);background:var(--dsw-alias-interactive-bg-active)}.N4aF0W_cardMain{border-radius:inherit;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;gap:6px;padding:12px;display:flex}.N4aF0W_cardMain:focus-visible,.N4aF0W_cardSettings:focus-visible,.N4aF0W_rowGear:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardTop{align-items:center;gap:8px;min-width:0;min-height:28px;display:flex}.N4aF0W_cardIconChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:28px;height:28px;color:var(--dsw-alias-label-tertiary);border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.N4aF0W_cardOn .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);background:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 12%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardTitle{min-width:0;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.N4aF0W_cardOn .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_cardSwitch{flex:none;align-items:center;display:inline-flex}.N4aF0W_cardSwitchTrack{box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;align-items:center;width:30px;height:16px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_cardSwitchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:10px;height:10px;transition:transform .15s,background .15s;display:block}.N4aF0W_cardOn .N4aF0W_cardSwitchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardOn .N4aF0W_cardSwitchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(14px)}.N4aF0W_cardDesc{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;line-height:16px;overflow:hidden}.N4aF0W_addCard{border-style:dashed;border-color:var(--dsw-alias-border-l2);text-align:left;align-items:flex-start;padding:12px}.N4aF0W_addCard:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_addCard:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardOn .N4aF0W_cardDesc{color:var(--dsw-alias-label-secondary)}.N4aF0W_cardSettings{border:0;border-top:1px solid var(--dsw-alias-border-l1);width:100%;color:var(--dsw-alias-label-secondary);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:6px;padding:6px 12px;font-size:11px;font-weight:500;line-height:16px;transition:background .12s,color .12s;display:flex}.N4aF0W_cardOn .N4aF0W_cardSettings{border-top-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 18%, transparent)}.N4aF0W_cardSettings:hover{background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_rowGear{border:1px solid var(--dsw-alias-border-l2);width:22px;height:22px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.N4aF0W_rowGear:hover{border-color:var(--dsw-alias-interactive-bg-hover-accent);background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_row{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;padding:12px 2px;display:flex}.N4aF0W_row:last-child{border-bottom:none}.N4aF0W_rowText{flex-direction:column;gap:4px;min-width:0;display:flex}.N4aF0W_title{color:var(--dsw-alias-label-primary);font-size:14px;line-height:22px}.N4aF0W_desc{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.N4aF0W_switch{cursor:pointer;flex:none;display:inline-flex;position:relative}.N4aF0W_switchInput{opacity:0;width:1px;height:1px;margin:0;position:absolute}.N4aF0W_switchTrack{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;align-items:center;width:36px;height:20px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_switchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:14px;height:14px;transition:transform .15s,background .15s;display:block}.N4aF0W_switch:hover .N4aF0W_switchTrack{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack .N4aF0W_switchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(16px)}.N4aF0W_switchInput:focus-visible+.N4aF0W_switchTrack{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_control{flex:none;align-items:center;gap:6px;display:flex}.N4aF0W_percentInput{width:76px}.N4aF0W_typedInput{width:200px}.N4aF0W_typedInputNumber{width:76px}.N4aF0W_selectAnchor{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);max-width:220px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:4px 8px;font-size:13px;line-height:20px;display:flex}.N4aF0W_selectAnchor:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_selectAnchorIcon{flex:none;display:inline-flex}.N4aF0W_selectAnchorText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.N4aF0W_selectOption{align-items:center;gap:10px;min-width:200px;display:flex}.N4aF0W_selectOptionIcon{color:var(--dsw-alias-label-secondary);flex:none;display:inline-flex}.N4aF0W_selectOptionText{flex-direction:column;min-width:0;display:flex}.N4aF0W_suffix{color:var(--dsw-alias-label-secondary);font-size:14px;line-height:22px}.N4aF0W_cssTextArea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-height:120px;color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code,monospace);resize:vertical;border-radius:8px;padding:8px 10px;font-size:12px;line-height:1.6}.N4aF0W_cssTextArea:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_popupDialog.N4aF0W_popupDialog{width:min(460px,100%)}.N4aF0W_popupRows{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-scrollbar-bg-l2,transparent) transparent;flex-direction:column;gap:8px;width:100%;max-height:min(52vh,440px);padding-right:4px;display:flex;overflow:hidden auto}.N4aF0W_popupRows::-webkit-scrollbar{width:6px}.N4aF0W_popupRows::-webkit-scrollbar-thumb{background:var(--dsw-alias-scrollbar-bg-l2,var(--dsw-alias-border-l2));border-radius:3px}.N4aF0W_popupRows::-webkit-scrollbar-thumb:hover{background:var(--dsw-alias-scrollbar-hover-l2,var(--dsw-alias-label-dimmed))}.N4aF0W_popupRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:12px 14px;transition:border-color .16s,background .16s;display:flex}.N4aF0W_popupRow:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_done{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.N4aF0W_done:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.N4aF0W_error{color:var(--dsw-alias-state-error-primary);padding:10px 0 2px;font-size:12px;line-height:17px}.N4aF0W_pluginModal.N4aF0W_pluginModal{width:min(560px,100%)}.N4aF0W_pluginList{flex-direction:column;gap:12px;width:100%;display:flex}.N4aF0W_pluginTopicBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;border-radius:8px;padding:6px 12px;font-size:12px;line-height:18px}.N4aF0W_pluginTopicBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginTopicBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEmpty{color:var(--dsw-alias-label-tertiary);padding:20px 2px;font-size:12px;line-height:18px}.N4aF0W_pluginEntry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;gap:4px;padding:12px;display:flex}.N4aF0W_pluginEntryHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.N4aF0W_pluginEntryActions{flex:none;align-items:center;gap:6px;display:inline-flex}.N4aF0W_pluginJumpBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginJumpBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginJumpBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginName{appearance:none;min-width:0;font:inherit;color:var(--dsw-alias-label-primary);text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:600;line-height:20px;text-decoration:none;overflow:hidden}.N4aF0W_pluginName:hover{color:var(--dsw-alias-button-primary-fill);text-decoration:underline}.N4aF0W_pluginDesc{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.N4aF0W_pluginInstall{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);white-space:nowrap;border-radius:8px;padding:6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:16px;display:block;overflow-x:auto}.N4aF0W_pluginCopyBtn{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginCopyBtn:hover{background:var(--dsw-alias-button-primary-hover)}.N4aF0W_pluginCopyBtn:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){.N4aF0W_card,.N4aF0W_cardSettings,.N4aF0W_cardSwitchTrack,.N4aF0W_cardSwitchThumb,.N4aF0W_rowGear,.N4aF0W_popupRow,.N4aF0W_switchTrack,.N4aF0W_switchThumb{transition:none}}.N4aF0W_pluginSearch{box-sizing:border-box;appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:8px;padding:6px 10px;font-size:12px;line-height:18px}.N4aF0W_pluginSearch::placeholder{color:var(--dsw-alias-label-tertiary)}.N4aF0W_pluginSearch:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEntries{flex-direction:column;gap:10px;max-height:46vh;padding-right:2px;display:flex;overflow:hidden auto}.N4aF0W_pluginGroup{flex-direction:column;gap:8px;display:flex}.N4aF0W_pluginGroupHeading{color:var(--dsw-alias-label-secondary);padding:2px 2px 0;font-size:12px;font-weight:600;line-height:18px}.N4aF0W_openWithEditorRow{grid-template-columns:1fr 1.5fr auto auto;align-items:center;gap:8px;min-width:0;display:grid}.N4aF0W_openWithEditorInput,.N4aF0W_openWithEditorTemplate{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-width:0;color:var(--dsw-alias-label-primary);font:inherit;border-radius:8px;padding:5px 8px;font-size:13px;line-height:20px}.N4aF0W_openWithEditorInput:focus-visible,.N4aF0W_openWithEditorTemplate:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.N4aF0W_openWithFamily{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.N4aF0W_openWithRemove{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.N4aF0W_openWithRemove:hover{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2)}.N4aF0W_openWithHint{color:var(--dsw-alias-state-error-primary);padding:0 2px;font-size:12px;line-height:17px}";
15044
+ const tagId$5 = "dsh-external/dsh-better-sidebar/SideCardSection.module.css";
15045
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
14955
15046
  const tag = document.createElement("style");
14956
15047
  tag.dataset.plugin = "dsh-external/dsh-better-sidebar";
14957
- tag.dataset.pluginCss = tagId$4;
14958
- tag.textContent = css$4;
15048
+ tag.dataset.pluginCss = tagId$5;
15049
+ tag.textContent = css$5;
14959
15050
  document.head.appendChild(tag);
14960
15051
  }
14961
15052
  var SideCardSection_module_css_default = {
14962
- "intro": "N4aF0W_intro",
14963
- "groupHeading": "N4aF0W_groupHeading",
14964
- "pluginModal": "N4aF0W_pluginModal",
14965
- "selectOptionText": "N4aF0W_selectOptionText",
14966
- "cardIconChip": "N4aF0W_cardIconChip",
14967
- "pluginEntries": "N4aF0W_pluginEntries",
14968
- "pluginEntry": "N4aF0W_pluginEntry",
14969
- "cardSwitchTrack": "N4aF0W_cardSwitchTrack",
15053
+ "percentInput": "N4aF0W_percentInput",
15054
+ "popupDialog": "N4aF0W_popupDialog",
14970
15055
  "openWithEditorTemplate": "N4aF0W_openWithEditorTemplate",
14971
- "popupRow": "N4aF0W_popupRow",
14972
- "title": "N4aF0W_title",
14973
- "desc": "N4aF0W_desc",
14974
- "selectAnchorIcon": "N4aF0W_selectAnchorIcon",
15056
+ "cardSwitch": "N4aF0W_cardSwitch",
15057
+ "count": "N4aF0W_count",
15058
+ "pluginEmpty": "N4aF0W_pluginEmpty",
15059
+ "cardDesc": "N4aF0W_cardDesc",
15060
+ "pluginEntryHead": "N4aF0W_pluginEntryHead",
15061
+ "pluginGroup": "N4aF0W_pluginGroup",
15062
+ "rowText": "N4aF0W_rowText",
14975
15063
  "selectOption": "N4aF0W_selectOption",
14976
- "control": "N4aF0W_control",
15064
+ "pluginEntry": "N4aF0W_pluginEntry",
15065
+ "openWithRemove": "N4aF0W_openWithRemove",
15066
+ "title": "N4aF0W_title",
14977
15067
  "selectOptionIcon": "N4aF0W_selectOptionIcon",
15068
+ "rowGear": "N4aF0W_rowGear",
15069
+ "switchThumb": "N4aF0W_switchThumb",
15070
+ "control": "N4aF0W_control",
14978
15071
  "suffix": "N4aF0W_suffix",
14979
- "pluginEntryHead": "N4aF0W_pluginEntryHead",
14980
- "pluginGroupHeading": "N4aF0W_pluginGroupHeading",
14981
- "done": "N4aF0W_done",
14982
- "openWithRemove": "N4aF0W_openWithRemove",
14983
- "pluginInstall": "N4aF0W_pluginInstall",
15072
+ "groupHeading": "N4aF0W_groupHeading",
14984
15073
  "addCard": "N4aF0W_addCard",
14985
- "count": "N4aF0W_count",
14986
- "selectAnchorText": "N4aF0W_selectAnchorText",
14987
- "switchThumb": "N4aF0W_switchThumb",
14988
- "switch": "N4aF0W_switch",
14989
- "row": "N4aF0W_row",
15074
+ "popupRow": "N4aF0W_popupRow",
15075
+ "openWithEditorInput": "N4aF0W_openWithEditorInput",
14990
15076
  "openWithHint": "N4aF0W_openWithHint",
14991
- "cardDesc": "N4aF0W_cardDesc",
14992
- "switchTrack": "N4aF0W_switchTrack",
15077
+ "pluginTopicBtn": "N4aF0W_pluginTopicBtn",
15078
+ "pluginGroupHeading": "N4aF0W_pluginGroupHeading",
15079
+ "pluginCopyBtn": "N4aF0W_pluginCopyBtn",
15080
+ "cardOn": "N4aF0W_cardOn",
15081
+ "selectAnchor": "N4aF0W_selectAnchor",
15082
+ "cssTextArea": "N4aF0W_cssTextArea",
14993
15083
  "pluginJumpBtn": "N4aF0W_pluginJumpBtn",
14994
- "card": "N4aF0W_card",
14995
- "cardSwitch": "N4aF0W_cardSwitch",
15084
+ "error": "N4aF0W_error",
15085
+ "cardMain": "N4aF0W_cardMain",
15086
+ "pluginSearch": "N4aF0W_pluginSearch",
15087
+ "selectAnchorText": "N4aF0W_selectAnchorText",
15088
+ "cardSettings": "N4aF0W_cardSettings",
15089
+ "intro": "N4aF0W_intro",
14996
15090
  "pluginName": "N4aF0W_pluginName",
15091
+ "section": "N4aF0W_section",
15092
+ "cardSwitchTrack": "N4aF0W_cardSwitchTrack",
15093
+ "typedInput": "N4aF0W_typedInput",
15094
+ "cardIconChip": "N4aF0W_cardIconChip",
15095
+ "row": "N4aF0W_row",
15096
+ "switch": "N4aF0W_switch",
15097
+ "switchInput": "N4aF0W_switchInput",
15098
+ "pluginList": "N4aF0W_pluginList",
14997
15099
  "cardSwitchThumb": "N4aF0W_cardSwitchThumb",
14998
- "typedInputNumber": "N4aF0W_typedInputNumber",
14999
- "pluginEmpty": "N4aF0W_pluginEmpty",
15000
- "pluginCopyBtn": "N4aF0W_pluginCopyBtn",
15001
- "cardMain": "N4aF0W_cardMain",
15100
+ "popupRows": "N4aF0W_popupRows",
15101
+ "pluginEntries": "N4aF0W_pluginEntries",
15002
15102
  "openWithEditorRow": "N4aF0W_openWithEditorRow",
15003
- "openWithEditorInput": "N4aF0W_openWithEditorInput",
15004
- "percentInput": "N4aF0W_percentInput",
15005
- "rowGear": "N4aF0W_rowGear",
15006
- "openWithFamily": "N4aF0W_openWithFamily",
15103
+ "pluginEntryActions": "N4aF0W_pluginEntryActions",
15104
+ "pluginModal": "N4aF0W_pluginModal",
15007
15105
  "cardTop": "N4aF0W_cardTop",
15106
+ "desc": "N4aF0W_desc",
15008
15107
  "cardTitle": "N4aF0W_cardTitle",
15009
- "pluginEntryActions": "N4aF0W_pluginEntryActions",
15010
- "pluginTopicBtn": "N4aF0W_pluginTopicBtn",
15011
- "group": "N4aF0W_group",
15012
- "pluginGroup": "N4aF0W_pluginGroup",
15013
- "cardOn": "N4aF0W_cardOn",
15014
- "rowText": "N4aF0W_rowText",
15015
- "switchInput": "N4aF0W_switchInput",
15016
- "error": "N4aF0W_error",
15017
- "cardSettings": "N4aF0W_cardSettings",
15018
- "popupDialog": "N4aF0W_popupDialog",
15019
- "popupRows": "N4aF0W_popupRows",
15020
- "section": "N4aF0W_section",
15108
+ "done": "N4aF0W_done",
15109
+ "selectAnchorIcon": "N4aF0W_selectAnchorIcon",
15021
15110
  "grid": "N4aF0W_grid",
15022
- "cssTextArea": "N4aF0W_cssTextArea",
15023
- "pluginSearch": "N4aF0W_pluginSearch",
15024
- "selectAnchor": "N4aF0W_selectAnchor",
15025
- "pluginDesc": "N4aF0W_pluginDesc",
15026
- "typedInput": "N4aF0W_typedInput",
15027
- "pluginList": "N4aF0W_pluginList"
15111
+ "switchTrack": "N4aF0W_switchTrack",
15112
+ "group": "N4aF0W_group",
15113
+ "card": "N4aF0W_card",
15114
+ "typedInputNumber": "N4aF0W_typedInputNumber",
15115
+ "selectOptionText": "N4aF0W_selectOptionText",
15116
+ "openWithFamily": "N4aF0W_openWithFamily",
15117
+ "pluginInstall": "N4aF0W_pluginInstall",
15118
+ "pluginDesc": "N4aF0W_pluginDesc"
15028
15119
  };
15029
15120
  //#endregion
15030
15121
  //#region src/client/open-with-settings.tsx
@@ -16992,6 +17083,462 @@ window.__ModuleLoader__.load({
16992
17083
  });
16993
17084
  }
16994
17085
  //#endregion
17086
+ //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/PluginMarketView.module.css.mjs
17087
+ const css$4 = ".wFPghq_root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);padding:4px;overflow:auto}.wFPghq_head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:8px;display:flex}.wFPghq_head>span{box-sizing:border-box;flex:1;min-width:220px;max-width:380px}.wFPghq_title{margin:0;font-size:16px;font-weight:600;line-height:24px}.wFPghq_subtitle,.wFPghq_project,.wFPghq_meta,.wFPghq_state{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.wFPghq_project{overflow-wrap:anywhere}.wFPghq_toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 12px;display:flex}.wFPghq_tabs{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.wFPghq_tabs button{white-space:nowrap}.wFPghq_tabs button[aria-pressed=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font-weight:600}.wFPghq_breadcrumb{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;align-items:center;gap:8px;margin:4px 0 12px;display:flex}.wFPghq_breadcrumb button{white-space:nowrap;flex-shrink:0}.wFPghq_breadcrumb>span:last-child{min-width:0}.wFPghq_warning{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:8px;margin:10px 0;padding:8px 10px;font-size:12px}.wFPghq_error,.wFPghq_notice{overflow-wrap:anywhere;border-radius:8px;margin:10px 0;padding:8px 10px;font-size:12px}.wFPghq_error{color:var(--dsw-alias-state-danger-primary);background:var(--dsw-alias-state-danger-bg)}.wFPghq_notice{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-bg)}.wFPghq_grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));gap:10px;margin-top:12px;display:grid}.wFPghq_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;min-width:0;min-height:150px;padding:12px;display:flex}.wFPghq_cardHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.wFPghq_card h3{overflow-wrap:anywhere;margin:0;font-size:14px;font-weight:600;line-height:20px}.wFPghq_description{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:3;overflow-wrap:anywhere;-webkit-box-orient:vertical;flex:1;margin:8px 0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.wFPghq_meta{overflow-wrap:anywhere;min-height:18px}.wFPghq_actions{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.wFPghq_projectInstall.wFPghq_projectInstall{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.wFPghq_projectInstall.wFPghq_projectInstall:hover:not(:disabled){background-color:var(--dsw-alias-button-primary-fill)!important;color:var(--dsw-alias-label-primary-foreground)!important}.wFPghq_marketCard{text-align:left;color:inherit;font:inherit;cursor:pointer;width:100%}.wFPghq_marketCard:hover:not(:disabled){border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover)}.wFPghq_marketCard:disabled{cursor:not-allowed;opacity:.5}.wFPghq_spinning{animation:1s linear infinite wFPghq_marketRefresh;display:inline-flex}@keyframes wFPghq_marketRefresh{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.wFPghq_spinning{animation:none}}.wFPghq_marketCard:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.wFPghq_enter{color:var(--dsw-alias-label-secondary);justify-content:space-between;align-items:center;gap:8px;font-size:12px;line-height:18px;display:flex}@media (width<=640px){.wFPghq_head{flex-direction:column}.wFPghq_head>span{width:100%;min-width:0;max-width:none}}";
17088
+ const tagId$4 = "dsh-external/dsh-better-sidebar/PluginMarketView.module.css";
17089
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
17090
+ const tag = document.createElement("style");
17091
+ tag.dataset.plugin = "dsh-external/dsh-better-sidebar";
17092
+ tag.dataset.pluginCss = tagId$4;
17093
+ tag.textContent = css$4;
17094
+ document.head.appendChild(tag);
17095
+ }
17096
+ var PluginMarketView_module_css_default = {
17097
+ "cardHead": "wFPghq_cardHead",
17098
+ "actions": "wFPghq_actions",
17099
+ "toolbar": "wFPghq_toolbar",
17100
+ "project": "wFPghq_project",
17101
+ "marketCard": "wFPghq_marketCard",
17102
+ "subtitle": "wFPghq_subtitle",
17103
+ "breadcrumb": "wFPghq_breadcrumb",
17104
+ "head": "wFPghq_head",
17105
+ "tabs": "wFPghq_tabs",
17106
+ "marketRefresh": "wFPghq_marketRefresh",
17107
+ "error": "wFPghq_error",
17108
+ "notice": "wFPghq_notice",
17109
+ "card": "wFPghq_card",
17110
+ "projectInstall": "wFPghq_projectInstall",
17111
+ "enter": "wFPghq_enter",
17112
+ "root": "wFPghq_root",
17113
+ "state": "wFPghq_state",
17114
+ "meta": "wFPghq_meta",
17115
+ "warning": "wFPghq_warning",
17116
+ "grid": "wFPghq_grid",
17117
+ "description": "wFPghq_description",
17118
+ "title": "wFPghq_title",
17119
+ "spinning": "wFPghq_spinning"
17120
+ };
17121
+ //#endregion
17122
+ //#region src/client/PluginMarketView.tsx
17123
+ /** Two catalog levels with project/user actions directly on plugin cards. */
17124
+ function PluginMarketView({ scope, visible, catalog }) {
17125
+ const snapshot = (0, react.useSyncExternalStore)(catalog.subscribe, catalog.getSnapshot);
17126
+ const [marketId, setMarketId] = (0, react.useState)(null);
17127
+ const [tab, setTab] = (0, react.useState)("markets");
17128
+ const [query, setQuery] = (0, react.useState)("");
17129
+ const [installed, setInstalled] = (0, react.useState)([]);
17130
+ const [recordsReady, setRecordsReady] = (0, react.useState)(false);
17131
+ const [recordsError, setRecordsError] = (0, react.useState)("");
17132
+ const [message, setMessage] = (0, react.useState)();
17133
+ const [working, setWorking] = (0, react.useState)();
17134
+ const [revision, setRevision] = (0, react.useState)(0);
17135
+ const pending = (0, react.useRef)(false);
17136
+ const breadcrumbNode = (0, react.useRef)(null);
17137
+ const mutationVersion = (0, react.useRef)(0);
17138
+ const focusBack = (0, react.useRef)(false);
17139
+ const scopeKey = `${scope.sessionId}\0${scope.cwd ?? ""}`;
17140
+ const latestScope = (0, react.useRef)(scopeKey);
17141
+ latestScope.current = scopeKey;
17142
+ const markets = snapshot.markets?.data?.marketplaces ?? [];
17143
+ const market = markets.find((item) => item.id === marketId);
17144
+ const catalogEntry = tab === "markets" && marketId ? snapshot.plugins[marketId] : snapshot.markets;
17145
+ const loading = snapshot.refresh?.status === "loading" || tab === "markets" && (!catalogEntry || catalogEntry.status === "loading");
17146
+ const blocked = loading || snapshot.refresh?.status === "error";
17147
+ (0, react.useEffect)(() => {
17148
+ if (!visible) return;
17149
+ catalog.start();
17150
+ if (tab === "markets" && marketId) catalog.ensure(marketId);
17151
+ }, [
17152
+ catalog,
17153
+ visible,
17154
+ tab,
17155
+ marketId
17156
+ ]);
17157
+ (0, react.useEffect)(() => {
17158
+ setQuery("");
17159
+ }, [tab, marketId]);
17160
+ (0, react.useEffect)(() => {
17161
+ if (focusBack.current) {
17162
+ breadcrumbNode.current?.querySelector("button")?.focus();
17163
+ focusBack.current = false;
17164
+ }
17165
+ }, [marketId]);
17166
+ (0, react.useEffect)(() => {
17167
+ setInstalled([]);
17168
+ setRecordsReady(false);
17169
+ setRecordsError("");
17170
+ setMessage(void 0);
17171
+ }, [scopeKey]);
17172
+ (0, react.useEffect)(() => {
17173
+ if (!visible) return;
17174
+ const controller = new AbortController();
17175
+ let active = true;
17176
+ let reading = false;
17177
+ const read = async () => {
17178
+ if (pending.current || reading) return;
17179
+ reading = true;
17180
+ const version = mutationVersion.current;
17181
+ try {
17182
+ const records = await api.pluginsInstalled(scope, controller.signal);
17183
+ if (active && !pending.current && version === mutationVersion.current) {
17184
+ setInstalled(records);
17185
+ setRecordsReady(true);
17186
+ setRecordsError("");
17187
+ }
17188
+ } catch (cause) {
17189
+ if (active && version === mutationVersion.current) setRecordsError(cause instanceof Error ? cause.message : String(cause));
17190
+ } finally {
17191
+ reading = false;
17192
+ }
17193
+ };
17194
+ read();
17195
+ const timer = setInterval(() => {
17196
+ read();
17197
+ }, 2e3);
17198
+ return () => {
17199
+ active = false;
17200
+ clearInterval(timer);
17201
+ controller.abort();
17202
+ };
17203
+ }, [
17204
+ scopeKey,
17205
+ visible,
17206
+ revision
17207
+ ]);
17208
+ const perform = async (plugin, installScope) => {
17209
+ const refreshStatus = catalog.getSnapshot().refresh?.status;
17210
+ if (pending.current || !recordsReady || blocked || refreshStatus === "loading" || refreshStatus === "error") return;
17211
+ const key = scopeKey;
17212
+ const present = installed.some((item) => item.id === plugin.id && item.scope === installScope);
17213
+ pending.current = true;
17214
+ mutationVersion.current++;
17215
+ setWorking({
17216
+ id: plugin.id,
17217
+ scope: installScope
17218
+ });
17219
+ setMessage(void 0);
17220
+ try {
17221
+ if (present) await api.pluginUninstall(scope, plugin.id, installScope);
17222
+ else await api.pluginInstall(scope, plugin.id, installScope);
17223
+ const records = await api.pluginsInstalled(scope);
17224
+ if (latestScope.current === key) {
17225
+ setInstalled(records);
17226
+ setRecordsReady(true);
17227
+ setRecordsError("");
17228
+ setMessage({
17229
+ text: t(present ? "pluginMarketUninstalled" : "pluginMarketInstalled"),
17230
+ error: false
17231
+ });
17232
+ }
17233
+ } catch (cause) {
17234
+ if (latestScope.current === key) setMessage({
17235
+ text: cause instanceof Error ? cause.message : String(cause),
17236
+ error: true
17237
+ });
17238
+ } finally {
17239
+ pending.current = false;
17240
+ setWorking(void 0);
17241
+ }
17242
+ };
17243
+ const refresh = () => {
17244
+ if (loading || pending.current) return;
17245
+ catalog.refresh(tab === "markets" && marketId ? marketId : void 0);
17246
+ setRevision((value) => value + 1);
17247
+ setMessage(void 0);
17248
+ };
17249
+ const term = query.trim().toLocaleLowerCase();
17250
+ const matches = (item) => `${item.name} ${item.description}`.toLocaleLowerCase().includes(term);
17251
+ const filteredPlugins = (tab === "installed" ? [...new Map(installed.map((item) => [item.id, item])).values()] : marketId ? snapshot.plugins[marketId]?.data ?? [] : []).filter(matches);
17252
+ const filteredMarkets = markets.filter(matches);
17253
+ const showMarkets = tab === "markets" && !marketId;
17254
+ const error = snapshot.refresh?.error || (tab === "markets" ? catalogEntry?.error : "") || recordsError;
17255
+ const warning = [snapshot.markets?.data?.warning, marketId ? snapshot.plugins[marketId]?.warning : ""].filter(Boolean).join("\n");
17256
+ const hasData = tab === "installed" ? recordsReady : !!catalogEntry?.data;
17257
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
17258
+ className: PluginMarketView_module_css_default.root,
17259
+ "aria-label": t("pluginMarketTitle"),
17260
+ "aria-busy": loading,
17261
+ "data-chatcode-plugin-market": true,
17262
+ children: [
17263
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
17264
+ className: PluginMarketView_module_css_default.head,
17265
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
17266
+ className: PluginMarketView_module_css_default.title,
17267
+ children: t("pluginMarketTitle")
17268
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17269
+ className: PluginMarketView_module_css_default.subtitle,
17270
+ children: t("pluginMarketSubtitle")
17271
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Input, {
17272
+ disabled: blocked,
17273
+ value: query,
17274
+ onChange: (event) => setQuery(event.target.value),
17275
+ placeholder: t("pluginMarketSearch"),
17276
+ "aria-label": t("pluginMarketSearch")
17277
+ })]
17278
+ }),
17279
+ scope.cwd ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17280
+ className: PluginMarketView_module_css_default.project,
17281
+ children: t("pluginMarketProjectDirectory", { path: scope.cwd })
17282
+ }) : null,
17283
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
17284
+ className: PluginMarketView_module_css_default.toolbar,
17285
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
17286
+ className: PluginMarketView_module_css_default.tabs,
17287
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
17288
+ size: "sm",
17289
+ variant: "ghost",
17290
+ disabled: blocked,
17291
+ "aria-pressed": tab === "markets",
17292
+ onClick: () => setTab("markets"),
17293
+ children: t("pluginMarketTitle")
17294
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
17295
+ size: "sm",
17296
+ variant: "ghost",
17297
+ disabled: blocked,
17298
+ "aria-pressed": tab === "installed",
17299
+ onClick: () => setTab("installed"),
17300
+ children: t("pluginMarketInstalledTab")
17301
+ })]
17302
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
17303
+ size: "sm",
17304
+ variant: "outline",
17305
+ "aria-label": t("pluginMarketRefresh"),
17306
+ disabled: snapshot.markets?.status === "loading" || loading || !!working,
17307
+ onClick: refresh,
17308
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
17309
+ "aria-hidden": "true",
17310
+ className: loading ? PluginMarketView_module_css_default.spinning : void 0,
17311
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline14, {})
17312
+ }), t(loading ? "pluginMarketRefreshing" : "pluginMarketRefresh")]
17313
+ })]
17314
+ }),
17315
+ warning && tab === "markets" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17316
+ className: PluginMarketView_module_css_default.warning,
17317
+ role: "status",
17318
+ children: warning
17319
+ }) : null,
17320
+ error ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17321
+ className: PluginMarketView_module_css_default.error,
17322
+ role: "status",
17323
+ children: error
17324
+ }) : null,
17325
+ message ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17326
+ className: message.error ? PluginMarketView_module_css_default.error : PluginMarketView_module_css_default.notice,
17327
+ role: "status",
17328
+ children: message.text
17329
+ }) : null,
17330
+ tab === "markets" && marketId ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
17331
+ ref: breadcrumbNode,
17332
+ className: PluginMarketView_module_css_default.breadcrumb,
17333
+ children: [
17334
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
17335
+ size: "sm",
17336
+ variant: "ghost",
17337
+ disabled: blocked,
17338
+ onClick: () => setMarketId(null),
17339
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronLeftOutline14, {}), t("pluginMarketBack")]
17340
+ }),
17341
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
17342
+ "aria-hidden": "true",
17343
+ children: "/"
17344
+ }),
17345
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: market?.name ?? marketId })
17346
+ ]
17347
+ }) : null,
17348
+ loading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17349
+ className: PluginMarketView_module_css_default.state,
17350
+ role: "status",
17351
+ children: t(hasData ? "pluginMarketRefreshing" : "pluginMarketLoading")
17352
+ }) : null,
17353
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
17354
+ className: PluginMarketView_module_css_default.grid,
17355
+ "aria-busy": loading,
17356
+ children: showMarkets ? filteredMarkets.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
17357
+ type: "button",
17358
+ disabled: blocked,
17359
+ className: `${PluginMarketView_module_css_default.card} ${PluginMarketView_module_css_default.marketCard}`,
17360
+ onClick: () => {
17361
+ focusBack.current = true;
17362
+ setMarketId(item.id);
17363
+ },
17364
+ children: [
17365
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
17366
+ className: PluginMarketView_module_css_default.cardHead,
17367
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: item.name }), item.official ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, { children: t("pluginMarketDefault") }) : null]
17368
+ }),
17369
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17370
+ className: PluginMarketView_module_css_default.description,
17371
+ children: item.description || t("pluginMarketNoDescription")
17372
+ }),
17373
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
17374
+ className: PluginMarketView_module_css_default.enter,
17375
+ children: [t("pluginMarketBrowse"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronRightOutline14, {})]
17376
+ })
17377
+ ]
17378
+ }, item.id)) : filteredPlugins.map((item) => {
17379
+ const records = installed.filter((record) => record.id === item.id);
17380
+ const marketName = markets.find((value) => value.id === item.marketplaceId)?.name ?? item.marketplaceId;
17381
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
17382
+ className: PluginMarketView_module_css_default.card,
17383
+ "aria-label": item.name,
17384
+ "data-plugin-id": item.id,
17385
+ children: [
17386
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
17387
+ className: PluginMarketView_module_css_default.cardHead,
17388
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: item.name }), records.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, { children: t("pluginMarketInstalledTab") }) : null]
17389
+ }),
17390
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17391
+ className: PluginMarketView_module_css_default.description,
17392
+ children: item.description || t("pluginMarketNoDescription")
17393
+ }),
17394
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
17395
+ className: PluginMarketView_module_css_default.meta,
17396
+ children: [marketName, tab === "installed" && records[0]?.version ? ` · ${records[0].version}` : ""]
17397
+ }),
17398
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
17399
+ className: PluginMarketView_module_css_default.actions,
17400
+ children: ["project", "user"].map((installScope) => {
17401
+ const present = records.some((record) => record.scope === installScope);
17402
+ const busy = working?.id === item.id && working.scope === installScope;
17403
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
17404
+ size: "sm",
17405
+ variant: installScope === "project" && !present ? "primary" : "outline",
17406
+ className: installScope === "project" && !present ? PluginMarketView_module_css_default.projectInstall : void 0,
17407
+ disabled: blocked || !!working || !recordsReady,
17408
+ onClick: () => {
17409
+ perform(item, installScope);
17410
+ },
17411
+ children: [
17412
+ t(busy ? present ? "pluginMarketUninstalling" : "pluginMarketInstalling" : present ? "pluginMarketUninstall" : "pluginMarketInstall"),
17413
+ " · ",
17414
+ t(installScope === "project" ? "pluginMarketProject" : "pluginMarketUser")
17415
+ ]
17416
+ }, installScope);
17417
+ })
17418
+ })
17419
+ ]
17420
+ }, item.id);
17421
+ })
17422
+ }),
17423
+ !loading && hasData && (showMarkets ? filteredMarkets : filteredPlugins).length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
17424
+ className: PluginMarketView_module_css_default.state,
17425
+ children: t("pluginMarketEmpty")
17426
+ }) : null
17427
+ ]
17428
+ });
17429
+ }
17430
+ //#endregion
17431
+ //#region src/client/plugin-market-catalog.ts
17432
+ /** App-lifetime remote catalogs, shared by Settings and the sidebar tab. */
17433
+ function createPluginMarketCatalog() {
17434
+ let snapshot = { plugins: {} };
17435
+ let disposed = false;
17436
+ const listeners = /* @__PURE__ */ new Set();
17437
+ const controllers = /* @__PURE__ */ new Set();
17438
+ const requests = /* @__PURE__ */ new Map();
17439
+ const publish = (next) => {
17440
+ if (disposed) return;
17441
+ snapshot = next;
17442
+ listeners.forEach((listener) => listener());
17443
+ };
17444
+ const load = (key, current, update, request) => {
17445
+ if (disposed) return Promise.resolve(void 0);
17446
+ const pending = requests.get(key);
17447
+ if (pending) return pending;
17448
+ const entry = {
17449
+ status: "loading",
17450
+ data: current()?.data
17451
+ };
17452
+ const controller = new AbortController();
17453
+ controllers.add(controller);
17454
+ update(entry);
17455
+ const result = request(controller.signal).then(({ data, warning }) => {
17456
+ if (current() === entry) update({
17457
+ status: "ready",
17458
+ data,
17459
+ ...warning ? { warning } : {}
17460
+ });
17461
+ }, (cause) => {
17462
+ const error = cause instanceof Error ? cause.message : String(cause);
17463
+ if (current() === entry) update({
17464
+ status: "error",
17465
+ data: entry.data,
17466
+ error
17467
+ });
17468
+ return error;
17469
+ }).finally(() => {
17470
+ controllers.delete(controller);
17471
+ requests.delete(key);
17472
+ });
17473
+ requests.set(key, result);
17474
+ return result;
17475
+ };
17476
+ const markets = (force = false) => {
17477
+ if (!force && snapshot.markets) return Promise.resolve(void 0);
17478
+ return load("markets", () => snapshot.markets, (entry) => publish({
17479
+ ...snapshot,
17480
+ markets: entry
17481
+ }), async (signal) => ({ data: await api.pluginMarketplaces(signal) }));
17482
+ };
17483
+ const plugins = (id, force = false) => {
17484
+ if (!force && snapshot.plugins[id]) return Promise.resolve(void 0);
17485
+ return load(`plugins:${id}`, () => snapshot.plugins[id], (entry) => publish({
17486
+ ...snapshot,
17487
+ plugins: {
17488
+ ...snapshot.plugins,
17489
+ [id]: entry
17490
+ }
17491
+ }), async (signal) => {
17492
+ const result = await api.pluginCatalog(id, signal);
17493
+ return Array.isArray(result) ? { data: result } : {
17494
+ data: result.plugins,
17495
+ warning: result.warning
17496
+ };
17497
+ });
17498
+ };
17499
+ return {
17500
+ subscribe: (listener) => {
17501
+ listeners.add(listener);
17502
+ return () => {
17503
+ listeners.delete(listener);
17504
+ };
17505
+ },
17506
+ getSnapshot: () => snapshot,
17507
+ start: () => {
17508
+ markets();
17509
+ },
17510
+ ensure: (id) => {
17511
+ plugins(id);
17512
+ },
17513
+ refresh: (id) => {
17514
+ if (disposed || snapshot.refresh?.status === "loading") return;
17515
+ const ids = new Set(Object.keys(snapshot.plugins));
17516
+ if (id) ids.add(id);
17517
+ publish({
17518
+ ...snapshot,
17519
+ refresh: { status: "loading" }
17520
+ });
17521
+ Promise.all([markets(true), ...[...ids].map((key) => plugins(key, true))]).then((results) => {
17522
+ const errors = [...new Set(results.filter((value) => value !== void 0))];
17523
+ publish({
17524
+ ...snapshot,
17525
+ refresh: errors.length ? {
17526
+ status: "error",
17527
+ error: errors.join("\n")
17528
+ } : { status: "ready" }
17529
+ });
17530
+ });
17531
+ },
17532
+ dispose: () => {
17533
+ disposed = true;
17534
+ controllers.forEach((controller) => controller.abort());
17535
+ controllers.clear();
17536
+ requests.clear();
17537
+ listeners.clear();
17538
+ }
17539
+ };
17540
+ }
17541
+ //#endregion
16995
17542
  //#region src/client/builtins/tabs.tsx
16996
17543
  /**
16997
17544
  * Lazy wrapper over the terminal view: xterm (and its stylesheet) is fetched
@@ -17015,8 +17562,9 @@ window.__ModuleLoader__.load({
17015
17562
  function uiTerminalCount(state) {
17016
17563
  return allLeaves(state.splits).flatMap((leaf) => leaf.tabs).filter((tab) => tab.type === "terminal" && !isAgentTabId(tab.id)).length;
17017
17564
  }
17018
- /** The 5 built-in tab descriptors. */
17565
+ /** The 6 built-in tab descriptors. */
17019
17566
  function builtinTabs(ctx, options = {}) {
17567
+ const pluginMarketCatalog = options.pluginMarketCatalog ?? createPluginMarketCatalog();
17020
17568
  return [
17021
17569
  {
17022
17570
  id: "editor",
@@ -17188,6 +17736,18 @@ window.__ModuleLoader__.load({
17188
17736
  }),
17189
17737
  component: (props) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BrowserView, { ...props })
17190
17738
  },
17739
+ {
17740
+ id: "plugin-market",
17741
+ title: () => t("pluginMarketTitle"),
17742
+ icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconGlobeOutline16, { size }),
17743
+ order: 60,
17744
+ single: true,
17745
+ component: ({ scope, visible }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PluginMarketView, {
17746
+ scope,
17747
+ visible,
17748
+ catalog: pluginMarketCatalog
17749
+ })
17750
+ },
17191
17751
  {
17192
17752
  id: "diff",
17193
17753
  title: () => t("git"),
@@ -18835,6 +19395,62 @@ window.__ModuleLoader__.load({
18835
19395
  location.replace(chatcodeLoginRoute(location));
18836
19396
  }
18837
19397
  //#endregion
19398
+ //#region src/client/LogoutConfirmDialog.tsx
19399
+ /** Native modal supplies an inert background and default Cancel focus until a choice is made. */
19400
+ function LogoutConfirmDialog({ onCancel, onConfirm }) {
19401
+ const ref = (0, react.useRef)(null);
19402
+ const titleId = (0, react.useId)();
19403
+ const descriptionId = (0, react.useId)();
19404
+ (0, react.useEffect)(() => {
19405
+ const dialog = ref.current;
19406
+ dialog?.showModal();
19407
+ return () => {
19408
+ if (dialog?.open) dialog.close();
19409
+ };
19410
+ }, []);
19411
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dialog", {
19412
+ ref,
19413
+ className: sidebar_module_css_default.accountLogoutDialog,
19414
+ role: "alertdialog",
19415
+ "aria-modal": "true",
19416
+ "aria-labelledby": titleId,
19417
+ "aria-describedby": descriptionId,
19418
+ onCancel: (event) => {
19419
+ event.preventDefault();
19420
+ onCancel();
19421
+ },
19422
+ onKeyDown: (event) => {
19423
+ event.stopPropagation();
19424
+ },
19425
+ children: [
19426
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
19427
+ id: titleId,
19428
+ className: sidebar_module_css_default.accountLogoutTitle,
19429
+ children: t("accountMenuLogoutConfirmTitle")
19430
+ }),
19431
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
19432
+ id: descriptionId,
19433
+ className: sidebar_module_css_default.accountLogoutDescription,
19434
+ children: t("accountMenuLogoutConfirmDescription")
19435
+ }),
19436
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19437
+ className: sidebar_module_css_default.accountLogoutActions,
19438
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
19439
+ type: "button",
19440
+ autoFocus: true,
19441
+ onClick: onCancel,
19442
+ children: t("cancel")
19443
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
19444
+ type: "button",
19445
+ className: sidebar_module_css_default.accountLogoutConfirm,
19446
+ onClick: onConfirm,
19447
+ children: t("accountMenuLogout")
19448
+ })]
19449
+ })
19450
+ ]
19451
+ });
19452
+ }
19453
+ //#endregion
18838
19454
  //#region src/client/AccountMenu.tsx
18839
19455
  /**
18840
19456
  * Bottom-left account control.
@@ -18926,6 +19542,7 @@ window.__ModuleLoader__.load({
18926
19542
  function AccountMenu() {
18927
19543
  const rootRef = (0, react.useRef)(null);
18928
19544
  const [open, setOpen] = (0, react.useState)(false);
19545
+ const [logoutTarget, setLogoutTarget] = (0, react.useState)();
18929
19546
  const [userName, setUserName] = (0, react.useState)("User");
18930
19547
  const { chatcode, busy, error, loginUrl, startLogin, logout: logoutChatcode } = useChatcodeAccount();
18931
19548
  (0, react.useEffect)(() => {
@@ -18948,143 +19565,160 @@ window.__ModuleLoader__.load({
18948
19565
  }, []);
18949
19566
  (0, react.useEffect)(() => {
18950
19567
  if (error === "status") redirectToChatcodeLogin();
18951
- }, [error]);
18952
- (0, react.useEffect)(() => {
18953
- let current;
18954
- let originalStyle;
18955
- const sync = () => {
18956
- const next = nativeSettingsButton(rootRef.current);
18957
- const width = railWidthOf(next);
18958
- if (width !== void 0) rootRef.current?.style.setProperty("--dsh-account-menu-width", `${width}px`);
18959
- if (next === current) return;
18960
- if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
18961
- current = next;
18962
- originalStyle = current?.style.cssText;
18963
- if (current !== void 0) current.style.visibility = "hidden";
18964
- };
18965
- sync();
18966
- const observer = new MutationObserver(sync);
18967
- observer.observe(document.body, {
18968
- childList: true,
18969
- subtree: true,
18970
- characterData: true
18971
- });
18972
- return () => {
18973
- observer.disconnect();
18974
- if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
18975
- };
18976
- }, []);
18977
- const openSettings = () => {
18978
- setOpen(false);
18979
- nativeSettingsButton(rootRef.current)?.click();
18980
- };
18981
- const chatcodeName = chatcode?.userName?.trim() || chatcode?.emailAddress?.trim() || userName;
18982
- const signedIn = chatcode?.validation === "valid" && chatcode.expired !== true;
18983
- const hasChatcodeAccount = chatcode?.available === true && chatcode.configured === true;
18984
- const canStartChatcodeLogin = chatcode?.available === true && !hasChatcodeAccount && !(chatcode.configured === true && chatcode.validation === "unavailable");
18985
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18986
- ref: rootRef,
18987
- className: sidebar_module_css_default.accountMenu,
18988
- children: [open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18989
- className: sidebar_module_css_default.accountDropdown,
18990
- role: "menu",
18991
- "aria-label": t("accountMenuLabel"),
18992
- children: [
18993
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
18994
- className: sidebar_module_css_default.accountDropdownHeader,
18995
- children: [
18996
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
18997
- className: sidebar_module_css_default.accountAvatar,
18998
- children: chatcodeName.slice(0, 1).toUpperCase()
18999
- }),
19000
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19001
- className: sidebar_module_css_default.accountName,
19002
- children: chatcodeName
19003
- }),
19004
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19005
- className: sidebar_module_css_default.accountPresence,
19006
- style: { opacity: signedIn ? 1 : .25 },
19007
- "aria-hidden": "true"
19008
- })
19009
- ]
19010
- }),
19011
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: sidebar_module_css_default.accountMenuDivider }),
19012
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19013
- type: "button",
19014
- role: "menuitem",
19015
- className: sidebar_module_css_default.accountItem,
19016
- onClick: openSettings,
19017
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsIcon, {}), t("accountMenuSettings")]
19018
- }),
19019
- error === "operation" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19020
- role: "alert",
19021
- className: sidebar_module_css_default.accountItem,
19022
- children: t("accountMenuChatcodeError")
19023
- }),
19024
- (chatcode?.login?.state === "failed" || chatcode?.login?.state === "timed-out") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19025
- role: "alert",
19026
- className: sidebar_module_css_default.accountItem,
19027
- children: t("accountMenuChatcodeRetry")
19028
- }),
19029
- loginUrl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
19030
- "data-dsh-external": "true",
19031
- className: sidebar_module_css_default.accountItem,
19032
- href: loginUrl,
19033
- target: "_blank",
19034
- rel: "noopener noreferrer",
19035
- onClick: (event) => {
19036
- event.stopPropagation();
19037
- },
19038
- children: t("accountMenuChatcodeOpen")
19039
- }),
19040
- chatcode?.available === true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [canStartChatcodeLogin && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19041
- type: "button",
19042
- role: "menuitem",
19043
- className: sidebar_module_css_default.accountItem,
19044
- disabled: busy,
19045
- onClick: startLogin,
19046
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), busy ? t("accountMenuChatcodeStarting") : t("accountMenuChatcodeLogin")]
19047
- }), hasChatcodeAccount && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19048
- type: "button",
19049
- role: "menuitem",
19050
- className: sidebar_module_css_default.accountItem,
19051
- disabled: busy,
19052
- onClick: logoutChatcode,
19053
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), t("accountMenuLogout")]
19054
- })] }),
19055
- chatcode?.available === false && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19056
- type: "button",
19057
- role: "menuitem",
19058
- className: sidebar_module_css_default.accountItem,
19059
- onClick: logout,
19060
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), t("accountMenuLogout")]
19061
- })
19062
- ]
19063
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19064
- type: "button",
19065
- className: sidebar_module_css_default.accountTrigger,
19066
- "aria-expanded": open,
19067
- "aria-haspopup": "menu",
19068
- "aria-label": t("accountMenuLabel"),
19069
- onClick: () => {
19070
- setOpen((value) => !value);
19071
- },
19072
- children: [
19073
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19074
- className: sidebar_module_css_default.accountAvatar,
19075
- children: chatcodeName.slice(0, 1).toUpperCase()
19076
- }),
19077
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19078
- className: sidebar_module_css_default.accountName,
19079
- children: chatcodeName
19080
- }),
19081
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19082
- className: sidebar_module_css_default.accountPresence,
19083
- style: { opacity: signedIn ? 1 : .25 },
19084
- "aria-hidden": "true"
19085
- })
19086
- ]
19087
- })]
19568
+ }, [error]);
19569
+ (0, react.useEffect)(() => {
19570
+ let current;
19571
+ let originalStyle;
19572
+ const sync = () => {
19573
+ const next = nativeSettingsButton(rootRef.current);
19574
+ const width = railWidthOf(next);
19575
+ if (width !== void 0) rootRef.current?.style.setProperty("--dsh-account-menu-width", `${width}px`);
19576
+ if (next === current) return;
19577
+ if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
19578
+ current = next;
19579
+ originalStyle = current?.style.cssText;
19580
+ if (current !== void 0) current.style.visibility = "hidden";
19581
+ };
19582
+ sync();
19583
+ const observer = new MutationObserver(sync);
19584
+ observer.observe(document.body, {
19585
+ childList: true,
19586
+ subtree: true,
19587
+ characterData: true
19588
+ });
19589
+ return () => {
19590
+ observer.disconnect();
19591
+ if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
19592
+ };
19593
+ }, []);
19594
+ const openSettings = () => {
19595
+ setOpen(false);
19596
+ nativeSettingsButton(rootRef.current)?.click();
19597
+ };
19598
+ const chatcodeName = chatcode?.userName?.trim() || chatcode?.emailAddress?.trim() || userName;
19599
+ const signedIn = chatcode?.validation === "valid" && chatcode.expired !== true;
19600
+ const hasChatcodeAccount = chatcode?.available === true && chatcode.configured === true;
19601
+ const canStartChatcodeLogin = chatcode?.available === true && !hasChatcodeAccount && !(chatcode.configured === true && chatcode.validation === "unavailable");
19602
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19603
+ ref: rootRef,
19604
+ className: sidebar_module_css_default.accountMenu,
19605
+ children: [
19606
+ open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19607
+ className: sidebar_module_css_default.accountDropdown,
19608
+ role: "menu",
19609
+ "aria-label": t("accountMenuLabel"),
19610
+ children: [
19611
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19612
+ className: sidebar_module_css_default.accountDropdownHeader,
19613
+ children: [
19614
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19615
+ className: sidebar_module_css_default.accountAvatar,
19616
+ children: chatcodeName.slice(0, 1).toUpperCase()
19617
+ }),
19618
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19619
+ className: sidebar_module_css_default.accountName,
19620
+ children: chatcodeName
19621
+ }),
19622
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19623
+ className: sidebar_module_css_default.accountPresence,
19624
+ style: { opacity: signedIn ? 1 : .25 },
19625
+ "aria-hidden": "true"
19626
+ })
19627
+ ]
19628
+ }),
19629
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: sidebar_module_css_default.accountMenuDivider }),
19630
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19631
+ type: "button",
19632
+ role: "menuitem",
19633
+ className: sidebar_module_css_default.accountItem,
19634
+ onClick: openSettings,
19635
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsIcon, {}), t("accountMenuSettings")]
19636
+ }),
19637
+ error === "operation" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19638
+ role: "alert",
19639
+ className: sidebar_module_css_default.accountItem,
19640
+ children: t("accountMenuChatcodeError")
19641
+ }),
19642
+ (chatcode?.login?.state === "failed" || chatcode?.login?.state === "timed-out") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
19643
+ role: "alert",
19644
+ className: sidebar_module_css_default.accountItem,
19645
+ children: t("accountMenuChatcodeRetry")
19646
+ }),
19647
+ loginUrl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
19648
+ "data-dsh-external": "true",
19649
+ className: sidebar_module_css_default.accountItem,
19650
+ href: loginUrl,
19651
+ target: "_blank",
19652
+ rel: "noopener noreferrer",
19653
+ onClick: (event) => {
19654
+ event.stopPropagation();
19655
+ },
19656
+ children: t("accountMenuChatcodeOpen")
19657
+ }),
19658
+ chatcode?.available === true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [canStartChatcodeLogin && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19659
+ type: "button",
19660
+ role: "menuitem",
19661
+ className: sidebar_module_css_default.accountItem,
19662
+ disabled: busy,
19663
+ onClick: startLogin,
19664
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), busy ? t("accountMenuChatcodeStarting") : t("accountMenuChatcodeLogin")]
19665
+ }), hasChatcodeAccount && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19666
+ type: "button",
19667
+ role: "menuitem",
19668
+ className: sidebar_module_css_default.accountItem,
19669
+ disabled: busy,
19670
+ onClick: () => {
19671
+ setLogoutTarget("chatcode");
19672
+ },
19673
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), t("accountMenuLogout")]
19674
+ })] }),
19675
+ chatcode?.available === false && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19676
+ type: "button",
19677
+ role: "menuitem",
19678
+ className: sidebar_module_css_default.accountItem,
19679
+ onClick: () => {
19680
+ setLogoutTarget("browser");
19681
+ },
19682
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), t("accountMenuLogout")]
19683
+ })
19684
+ ]
19685
+ }),
19686
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
19687
+ type: "button",
19688
+ className: sidebar_module_css_default.accountTrigger,
19689
+ "aria-expanded": open,
19690
+ "aria-haspopup": "menu",
19691
+ "aria-label": t("accountMenuLabel"),
19692
+ onClick: () => {
19693
+ setOpen((value) => !value);
19694
+ },
19695
+ children: [
19696
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19697
+ className: sidebar_module_css_default.accountAvatar,
19698
+ children: chatcodeName.slice(0, 1).toUpperCase()
19699
+ }),
19700
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19701
+ className: sidebar_module_css_default.accountName,
19702
+ children: chatcodeName
19703
+ }),
19704
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
19705
+ className: sidebar_module_css_default.accountPresence,
19706
+ style: { opacity: signedIn ? 1 : .25 },
19707
+ "aria-hidden": "true"
19708
+ })
19709
+ ]
19710
+ }),
19711
+ logoutTarget !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutConfirmDialog, {
19712
+ onCancel: () => {
19713
+ setLogoutTarget(void 0);
19714
+ },
19715
+ onConfirm: () => {
19716
+ setLogoutTarget(void 0);
19717
+ if (logoutTarget === "chatcode") logoutChatcode();
19718
+ else logout();
19719
+ }
19720
+ })
19721
+ ]
19088
19722
  });
19089
19723
  }
19090
19724
  //#endregion
@@ -21730,21 +22364,21 @@ window.__ModuleLoader__.load({
21730
22364
  document.head.appendChild(tag);
21731
22365
  }
21732
22366
  var CodingPlanModelsSettings_module_css_default = {
21733
- "modelDescription": "kn_HcG_modelDescription",
21734
- "status": "kn_HcG_status",
22367
+ "models": "kn_HcG_models",
22368
+ "modelSelected": "kn_HcG_modelSelected",
21735
22369
  "meta": "kn_HcG_meta",
21736
- "refresh": "kn_HcG_refresh",
21737
22370
  "selected": "kn_HcG_selected",
21738
- "group": "kn_HcG_group",
21739
- "heading": "kn_HcG_heading",
21740
- "headingRow": "kn_HcG_headingRow",
21741
- "modelId": "kn_HcG_modelId",
21742
22371
  "modelTop": "kn_HcG_modelTop",
21743
- "modelSelected": "kn_HcG_modelSelected",
21744
- "modelName": "kn_HcG_modelName",
22372
+ "modelId": "kn_HcG_modelId",
22373
+ "refresh": "kn_HcG_refresh",
22374
+ "status": "kn_HcG_status",
21745
22375
  "description": "kn_HcG_description",
21746
- "models": "kn_HcG_models",
21747
- "model": "kn_HcG_model"
22376
+ "model": "kn_HcG_model",
22377
+ "modelName": "kn_HcG_modelName",
22378
+ "headingRow": "kn_HcG_headingRow",
22379
+ "heading": "kn_HcG_heading",
22380
+ "modelDescription": "kn_HcG_modelDescription",
22381
+ "group": "kn_HcG_group"
21748
22382
  };
21749
22383
  //#endregion
21750
22384
  //#region src/client/CodingPlanModelsSettings.tsx
@@ -22913,48 +23547,48 @@ window.__ModuleLoader__.load({
22913
23547
  document.head.appendChild(tag);
22914
23548
  }
22915
23549
  var UsageHeatmapSection_module_css_default = {
22916
- "todayDot": "iUwB6a_todayDot",
22917
- "empty": "iUwB6a_empty",
22918
- "headerRow": "iUwB6a_headerRow",
22919
- "refreshButton": "iUwB6a_refreshButton",
23550
+ "cellDay": "iUwB6a_cellDay",
23551
+ "cellTokens": "iUwB6a_cellTokens",
23552
+ "cellToday": "iUwB6a_cellToday",
23553
+ "tooltipBelow": "iUwB6a_tooltipBelow",
23554
+ "state": "iUwB6a_state",
22920
23555
  "monthLabel": "iUwB6a_monthLabel",
22921
- "legend": "iUwB6a_legend",
23556
+ "section": "iUwB6a_section",
23557
+ "stats": "iUwB6a_stats",
23558
+ "dshSidebarUsageSpin": "iUwB6a_dshSidebarUsageSpin",
22922
23559
  "stat": "iUwB6a_stat",
22923
- "grid": "iUwB6a_grid",
22924
- "legendSwatch": "iUwB6a_legendSwatch",
22925
- "tooltipBelow": "iUwB6a_tooltipBelow",
22926
- "tooltipSplit": "iUwB6a_tooltipSplit",
22927
- "total": "iUwB6a_total",
23560
+ "empty": "iUwB6a_empty",
23561
+ "totalNumber": "iUwB6a_totalNumber",
23562
+ "cellHover": "iUwB6a_cellHover",
23563
+ "tooltipDate": "iUwB6a_tooltipDate",
22928
23564
  "stateError": "iUwB6a_stateError",
22929
- "todayLabel": "iUwB6a_todayLabel",
23565
+ "cellFuture": "iUwB6a_cellFuture",
23566
+ "footer": "iUwB6a_footer",
22930
23567
  "overview": "iUwB6a_overview",
22931
- "totalValue": "iUwB6a_totalValue",
22932
- "stats": "iUwB6a_stats",
22933
- "gridBody": "iUwB6a_gridBody",
22934
- "spin": "iUwB6a_spin",
22935
- "cell": "iUwB6a_cell",
23568
+ "legendSwatch": "iUwB6a_legendSwatch",
23569
+ "tooltip": "iUwB6a_tooltip",
22936
23570
  "statLabel": "iUwB6a_statLabel",
23571
+ "totalValue": "iUwB6a_totalValue",
23572
+ "tooltipTokens": "iUwB6a_tooltipTokens",
22937
23573
  "weekdays": "iUwB6a_weekdays",
22938
- "group": "iUwB6a_group",
22939
- "cellTokens": "iUwB6a_cellTokens",
22940
- "totalUnit": "iUwB6a_totalUnit",
22941
- "cellFuture": "iUwB6a_cellFuture",
22942
- "state": "iUwB6a_state",
22943
- "dshSidebarUsageSpin": "iUwB6a_dshSidebarUsageSpin",
22944
- "tooltip": "iUwB6a_tooltip",
22945
- "monthNav": "iUwB6a_monthNav",
22946
- "cellDay": "iUwB6a_cellDay",
22947
- "statValue": "iUwB6a_statValue",
22948
- "footer": "iUwB6a_footer",
23574
+ "spin": "iUwB6a_spin",
23575
+ "headerRow": "iUwB6a_headerRow",
22949
23576
  "tooltipToday": "iUwB6a_tooltipToday",
22950
- "cellHover": "iUwB6a_cellHover",
22951
- "tooltipDate": "iUwB6a_tooltipDate",
23577
+ "legend": "iUwB6a_legend",
23578
+ "grid": "iUwB6a_grid",
22952
23579
  "monthButton": "iUwB6a_monthButton",
22953
- "section": "iUwB6a_section",
22954
- "totalNumber": "iUwB6a_totalNumber",
22955
- "tooltipTokens": "iUwB6a_tooltipTokens",
23580
+ "monthNav": "iUwB6a_monthNav",
23581
+ "refreshButton": "iUwB6a_refreshButton",
23582
+ "statValue": "iUwB6a_statValue",
23583
+ "totalUnit": "iUwB6a_totalUnit",
23584
+ "tooltipSplit": "iUwB6a_tooltipSplit",
23585
+ "gridBody": "iUwB6a_gridBody",
23586
+ "group": "iUwB6a_group",
23587
+ "total": "iUwB6a_total",
23588
+ "todayLabel": "iUwB6a_todayLabel",
23589
+ "cell": "iUwB6a_cell",
22956
23590
  "retry": "iUwB6a_retry",
22957
- "cellToday": "iUwB6a_cellToday"
23591
+ "todayDot": "iUwB6a_todayDot"
22958
23592
  };
22959
23593
  //#endregion
22960
23594
  //#region src/client/UsageHeatmapSection.tsx
@@ -23330,34 +23964,34 @@ window.__ModuleLoader__.load({
23330
23964
  document.head.appendChild(tag);
23331
23965
  }
23332
23966
  var AiRatioSection_module_css_default = {
23333
- "tableWrap": "JtMahq_tableWrap",
23334
- "pager": "JtMahq_pager",
23335
- "overview": "JtMahq_overview",
23967
+ "section": "JtMahq_section",
23968
+ "adoptedValue": "JtMahq_adoptedValue",
23336
23969
  "cardRatio": "JtMahq_cardRatio",
23337
- "ratioBar": "JtMahq_ratioBar",
23338
- "state": "JtMahq_state",
23970
+ "dash": "JtMahq_dash",
23971
+ "exportButton": "JtMahq_exportButton",
23339
23972
  "primaryButton": "JtMahq_primaryButton",
23340
23973
  "dateInput": "JtMahq_dateInput",
23341
- "queryRow": "JtMahq_queryRow",
23342
- "ratioCardHigh": "JtMahq_ratioCardHigh",
23343
- "exportButton": "JtMahq_exportButton",
23344
- "dash": "JtMahq_dash",
23345
- "cardValue": "JtMahq_cardValue",
23346
- "ratioCardLow": "JtMahq_ratioCardLow",
23974
+ "tableWrap": "JtMahq_tableWrap",
23347
23975
  "table": "JtMahq_table",
23348
- "addedValue": "JtMahq_addedValue",
23349
- "aiValue": "JtMahq_aiValue",
23976
+ "num": "JtMahq_num",
23977
+ "ratioCardLow": "JtMahq_ratioCardLow",
23350
23978
  "ratioValue": "JtMahq_ratioValue",
23351
- "section": "JtMahq_section",
23352
- "tableHeading": "JtMahq_tableHeading",
23353
- "card": "JtMahq_card",
23979
+ "ratioBar": "JtMahq_ratioBar",
23354
23980
  "dateCell": "JtMahq_dateCell",
23981
+ "state": "JtMahq_state",
23982
+ "ratioCardHigh": "JtMahq_ratioCardHigh",
23355
23983
  "cardLabel": "JtMahq_cardLabel",
23356
- "adoptedValue": "JtMahq_adoptedValue",
23984
+ "pager": "JtMahq_pager",
23985
+ "cardValue": "JtMahq_cardValue",
23986
+ "stateError": "JtMahq_stateError",
23987
+ "overview": "JtMahq_overview",
23988
+ "card": "JtMahq_card",
23357
23989
  "commitsValue": "JtMahq_commitsValue",
23358
- "num": "JtMahq_num",
23990
+ "aiValue": "JtMahq_aiValue",
23359
23991
  "pageInfo": "JtMahq_pageInfo",
23360
- "stateError": "JtMahq_stateError"
23992
+ "tableHeading": "JtMahq_tableHeading",
23993
+ "addedValue": "JtMahq_addedValue",
23994
+ "queryRow": "JtMahq_queryRow"
23361
23995
  };
23362
23996
  //#endregion
23363
23997
  //#region src/client/AiRatioSection.tsx
@@ -23954,6 +24588,77 @@ window.__ModuleLoader__.load({
23954
24588
  });
23955
24589
  }
23956
24590
  //#endregion
24591
+ //#region src/client/PluginMarketSettingsSection.tsx
24592
+ /** Replace the product's market settings seat through the public slot API. */
24593
+ function PluginMarketSettingsSection({ ctx, catalog }) {
24594
+ const sessionId = useCurrentSessionId(ctx) ?? "";
24595
+ const sessions = (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => ctx.sessions.list.subscribe(listener), [ctx]), (0, react.useCallback)(() => ctx.sessions.list.getSnapshot(), [ctx]));
24596
+ (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => ctx.locale.subscribe(listener), [ctx]), (0, react.useCallback)(() => ctx.locale.getSnapshot(), [ctx]));
24597
+ const cwd = sessions.byId[sessionId]?.cwd;
24598
+ const key = `${sessionId}\0${cwd ?? ""}`;
24599
+ const [context, setContext] = (0, react.useState)();
24600
+ const [error, setError] = (0, react.useState)("");
24601
+ const [revision, setRevision] = (0, react.useState)(0);
24602
+ (0, react.useEffect)(() => {
24603
+ const controller = new AbortController();
24604
+ let active = true;
24605
+ setError("");
24606
+ api.pluginMarketContext({
24607
+ sessionId,
24608
+ cwd
24609
+ }, controller.signal).then((scope) => {
24610
+ if (active) setContext({
24611
+ key,
24612
+ scope
24613
+ });
24614
+ }).catch((cause) => {
24615
+ if (active) setError(cause instanceof Error ? cause.message : String(cause));
24616
+ });
24617
+ return () => {
24618
+ active = false;
24619
+ controller.abort();
24620
+ };
24621
+ }, [
24622
+ sessionId,
24623
+ cwd,
24624
+ revision
24625
+ ]);
24626
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
24627
+ "data-chatcode-plugin-market-settings": true,
24628
+ children: context?.key === key ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PluginMarketView, {
24629
+ scope: context.scope,
24630
+ catalog,
24631
+ visible: true
24632
+ }, key) : error ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
24633
+ role: "status",
24634
+ children: error
24635
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
24636
+ type: "button",
24637
+ onClick: () => setRevision((value) => value + 1),
24638
+ children: t("pluginMarketRefresh")
24639
+ })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
24640
+ role: "status",
24641
+ children: t("pluginMarketLoading")
24642
+ })
24643
+ });
24644
+ }
24645
+ function registerPluginMarketSettings(ctx, catalog) {
24646
+ ctx.slots.inject("settings.section", () => ctx.slots.register({
24647
+ name: "settings.section",
24648
+ id: "market",
24649
+ order: 40,
24650
+ priority: -10,
24651
+ label: () => t("pluginMarketTitle"),
24652
+ inject: () => ({
24653
+ ctx,
24654
+ catalog
24655
+ })
24656
+ }, ({ ctx, catalog }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PluginMarketSettingsSection, {
24657
+ ctx,
24658
+ catalog
24659
+ }) })));
24660
+ }
24661
+ //#endregion
23957
24662
  //#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/layout.css.mjs
23958
24663
  const css = "/**\n * Layout push: when a panel is open it OCCUPIES the layout instead of\n * floating over it — the app shell (#root, the AppFrame three-column grid)\n * gives up space. Only the center column is flexible (1fr), so the right\n * panel's width squeeze (margin-right on #root) lands exactly on the\n * conversation output and the input bar, like a VSCode sidebar.\n *\n * The width rides `calc(100% - var(...))` instead of a bare margin on a\n * full-width box: some desktop shells (DSH Desktop, #208) set #root to\n * width:100%, where a margin would overflow the viewport additively —\n * the calc keeps the box at exactly 100% minus the push in every shell.\n * Width and margin transition in lockstep (same variable, same duration\n * and easing), so expand/collapse animates the content width exactly as\n * the bare-margin version did.\n *\n * The bottom panel squeezes ONLY the center column — it must not cover the\n * app's own left sidebar or the right panel. The anchor is the frame's\n * center grid item through stable slot/data attributes, not a positional\n * path: current hosts put [data-slot=\"main\"] directly inside the center\n * column, while earlier hosts exposed [data-pane=\"conversation\"] or a\n * [data-slot=\"conversation\"] child. A stretched grid item shrinks by its\n * margins, so the conversation content (output + input bar) lifts without\n * touching the sidebars.\n *\n * The sizes ride CSS variables updated by the Sidebar shell (0 while\n * collapsed); expand/collapse animates both the margins and the panel\n * slides on the same theme duration. Drags disable the transition so the\n * layout tracks the pointer.\n */\n#root {\n margin-right: var(--dsh-sidebar-width, 0px);\n width: calc(100% - var(--dsh-sidebar-width, 0px));\n transition:\n margin-right var(--ds-transition-duration-slow) var(--ds-ease-in-out),\n width var(--ds-transition-duration-slow) var(--ds-ease-in-out);\n}\n\n/* The AppFrame's center column, anchored by data attributes (see above).\n Composite selector: current DSH puts `[data-slot=\"main\"]` directly inside\n the center grid item; earlier shells name the item\n `[data-pane=\"conversation\"]` or put `[data-slot=\"conversation\"]` inside it.\n Every selector resolves to that same center element. */\n#root :has(> [data-slot=\"main\"]),\n#root [data-dsh-frame] > [data-pane=\"conversation\"],\n#root :has(> [data-slot=\"conversation\"]) {\n margin-bottom: var(--dsh-sidebar-height, 0px);\n /* Grid/flex items default to min-height:auto. A long unbreakable token\n (OAuth URL) then grows this column past the viewport and clips the\n composer + left-rail Settings row. min-height:0 lets the cell shrink;\n overflow-wrap lets the token wrap instead of forcing its intrinsic\n size. The host's own descendants remain responsible for scrolling. */\n min-height: 0;\n overflow-wrap: anywhere;\n transition: margin-bottom var(--ds-transition-duration-slow) var(--ds-ease-in-out);\n}\n\n/* On older hosts, a collapsed sidebar puts the fallback cluster in the\n top-right corner. Push the DSH session header's right padding out so its\n utilities yield instead of hiding under the cluster. Current DSH hosts put\n the controls directly beside the Session log action and set\n data-dsh-native-sidebar-toggle, so this rule stays inactive. The Sidebar\n shell publishes the required reserve; 188px is the older-host fallback. Anchor on\n the header's slot host wrapper ([data-slot=\"conversation.session.header\"])\n rather than a positional path: DSH 0.1.x nests the header several levels\n under the center column. The Sidebar shell toggles the body attributes with\n the host capability and panel open state. */\nbody[data-dsh-sidebar-collapsed]:not([data-dsh-native-sidebar-toggle]) [data-slot=\"conversation.session.header\"] > header {\n padding-right: var(--dsh-sidebar-toggle-reserve, 188px);\n}\n\nbody[data-dsh-sidebar-dragging] #root,\nbody[data-dsh-sidebar-dragging] #root :has(> [data-slot=\"main\"]),\nbody[data-dsh-sidebar-dragging] #root [data-dsh-frame] > [data-pane=\"conversation\"],\nbody[data-dsh-sidebar-dragging] #root :has(> [data-slot=\"conversation\"]) {\n transition: none;\n}\n\n/* DSH 0.1.x gives external settings sections a generic gear and exposes no\n icon field in the settings.section contract. settings-nav-icon.ts marks\n only this plugin's localized row; render the requested Lucide\n gallery-horizontal-end SVG as a currentColor mask so it follows the native\n nav hover/active colors without changing the shell's 16px icon rhythm. */\n[data-dsh-better-sidebar-settings-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-settings-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 7v10'/%3E%3Cpath d='M6 5v14'/%3E%3Crect width='12' height='18' x='10' y='3' rx='2'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 7v10'/%3E%3Cpath d='M6 5v14'/%3E%3Crect width='12' height='18' x='10' y='3' rx='2'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n/* Some host/plugin settings rows receive their SVG only after the global\n plugin group is expanded. Paint stable fallbacks immediately so the nav\n never opens with blank icon slots; a late host SVG is hidden to avoid a\n duplicate. */\n[data-dsh-better-sidebar-general-nav] > svg:first-child,\n[data-dsh-better-sidebar-plugin-market-nav] > svg:first-child,\n[data-dsh-better-sidebar-ui-tweaks-nav] > svg:first-child,\n[data-dsh-better-sidebar-skill-market-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-general-nav]::before,\n[data-dsh-better-sidebar-plugin-market-nav]::before,\n[data-dsh-better-sidebar-ui-tweaks-nav]::before,\n[data-dsh-better-sidebar-skill-market-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n}\n\n[data-dsh-better-sidebar-general-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9 7 7M17 17l2.1 2.1M19.1 4.9 17 7M7 17l-2.1 2.1'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9 7 7M17 17l2.1 2.1M19.1 4.9 17 7M7 17l-2.1 2.1'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-plugin-market-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-ui-tweaks-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-skill-market-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m12 3-1.7 4.3L6 9l4.3 1.7L12 15l1.7-4.3L18 9l-4.3-1.7Z'/%3E%3Cpath d='m5 15-.8 2.2L2 18l2.2.8L5 21l.8-2.2L8 18l-2.2-.8Z'/%3E%3Cpath d='m19 14-1 2.5-2.5 1L18 18.5l1 2.5 1-2.5 2.5-1-2.5-1Z'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m12 3-1.7 4.3L6 9l4.3 1.7L12 15l1.7-4.3L18 9l-4.3-1.7Z'/%3E%3Cpath d='m5 15-.8 2.2L2 18l2.2.8L5 21l.8-2.2L8 18l-2.2-.8Z'/%3E%3Cpath d='m19 14-1 2.5-2.5 1L18 18.5l1 2.5 1-2.5 2.5-1-2.5-1Z'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n/* The \"Token 用量\" heatmap section's nav row: same marker scheme as above,\n painting a calendar glyph (Lucide calendar-days) — a month of days is the\n section's whole subject. */\n[data-dsh-better-sidebar-usage-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-usage-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M16 2v4'/%3E%3Cpath d='M8 2v4'/%3E%3Cpath d='M3 10h18'/%3E%3Cpath d='M8 14h.01'/%3E%3Cpath d='M12 14h.01'/%3E%3Cpath d='M16 14h.01'/%3E%3Cpath d='M8 18h.01'/%3E%3Cpath d='M12 18h.01'/%3E%3Cpath d='M16 18h.01'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M16 2v4'/%3E%3Cpath d='M8 2v4'/%3E%3Cpath d='M3 10h18'/%3E%3Cpath d='M8 14h.01'/%3E%3Cpath d='M12 14h.01'/%3E%3Cpath d='M16 14h.01'/%3E%3Cpath d='M8 18h.01'/%3E%3Cpath d='M12 18h.01'/%3E%3Cpath d='M16 18h.01'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-ai-ratio-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-ai-ratio-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M2.25 13.75h11.5M4.5 13.75v-3.5M7.5 13.75v-6.5M10.5 13.75v-4.5' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3Cpath d='M13 .9l.5 1.6 1.6.5-1.6.5-.5 1.6-.5-1.6-1.6-.5 1.6-.5z' fill='black'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M2.25 13.75h11.5M4.5 13.75v-3.5M7.5 13.75v-6.5M10.5 13.75v-4.5' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3Cpath d='M13 .9l.5 1.6 1.6.5-1.6.5-.5 1.6-.5-1.6-1.6-.5 1.6-.5z' fill='black'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n/* The \"更新\" section's nav row: same marker scheme, painting an upward\n arrow (Lucide arrow-up) — an upgrade/one-click-update is the section's\n whole purpose. */\n[data-dsh-better-sidebar-update-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-update-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 7-7 7 7'/%3E%3Cpath d='M12 19V5'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 7-7 7 7'/%3E%3Cpath d='M12 19V5'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n@media (prefers-reduced-motion: reduce) {\n #root,\n #root :has(> [data-slot=\"main\"]),\n #root [data-dsh-frame] > [data-pane=\"conversation\"],\n #root :has(> [data-slot=\"conversation\"]) {\n transition: none;\n }\n}\n\n[data-dsh-hidden-runtime-context] {\n display: none !important;\n}\n";
23959
24664
  const tagId = "dsh-external/dsh-better-sidebar/layout.css";
@@ -28530,6 +29235,69 @@ to{transform:translateX(-8px)}
28530
29235
  };
28531
29236
  }
28532
29237
  //#endregion
29238
+ //#region src/client/ui-tweaks/sidebar-header.ts
29239
+ /** Compact sidebar chrome; the host retains every button, shortcut and drag surface. */
29240
+ const SIDEBAR_HEADER_CSS = `
29241
+ .dut-sidebar-header{height:44px !important;padding:0 4px !important;margin-bottom:8px !important;gap:8px !important}
29242
+ .dut-sidebar-brand{min-width:0 !important;background:transparent !important;box-shadow:none !important}
29243
+ .dut-sidebar-identity{height:24px !important;gap:8px !important}
29244
+ .dut-sidebar-wordmark{font:var(--dsw-font-s-strong-14) !important;letter-spacing:-.01em !important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
29245
+ .dut-sidebar-toggle{width:28px !important;height:28px !important;border-radius:8px !important;color:var(--dsw-alias-label-secondary) !important}
29246
+ .dut-sidebar-toggle:hover{background:var(--dsw-alias-interactive-bg-hover) !important}
29247
+ /* Reuse the original ChatCode primary-action red, scoped to this marked CTA. */
29248
+ .dut-sidebar-new-session{height:40px !important;justify-content:flex-start !important;gap:8px !important;margin:0 0 10px !important;padding:8px 10px !important;border:1px solid #9B0B09 !important;border-radius:10px !important;background:linear-gradient(135deg,#9B0B09,#b71916) !important;color:#fff !important;font:var(--dsw-font-s-strong-14) !important;font-weight:600 !important;box-shadow:none !important;transform:none !important}
29249
+ .dut-sidebar-new-session:hover{background:linear-gradient(135deg,#b71916,#cf302c) !important}
29250
+ .dut-sidebar-new-session:active{background:#9B0B09 !important}
29251
+ .dut-sidebar-new-session:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}
29252
+ .dut-sidebar-new-session > span:first-child{flex:1;min-width:0;overflow:hidden;mask-image:none !important}
29253
+ .dut-sidebar-new-session > span:first-child > span{width:auto !important;justify-content:flex-start !important;gap:8px !important;min-width:0}
29254
+ .dut-sidebar-new-session > span:first-child > span > svg{width:16px;height:16px;flex:none;color:inherit}
29255
+ .dut-sidebar-new-session > span:first-child > span > span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
29256
+ .dut-sidebar-new-session > span + span{opacity:1 !important;flex:none;color:color-mix(in srgb,currentColor 75%,transparent);font:var(--dsw-font-xxs-12)}
29257
+ /* Temporary navigation-only hide. Remove this block to restore Plugins;
29258
+ registrations, settings, installed plugins and other panel entries stay intact. */
29259
+ nav:is([aria-label="全局面板"],[aria-label="Global panels"]) > button:is([aria-label="插件"],[aria-label="Plugins"]),
29260
+ nav:is([aria-label="全局面板"],[aria-label="Global panels"]):has(> button:is([aria-label="插件"],[aria-label="Plugins"]):only-child){display:none !important}
29261
+ `;
29262
+ const HEADER_CLASSES = [
29263
+ "dut-sidebar-header",
29264
+ "dut-sidebar-brand",
29265
+ "dut-sidebar-identity",
29266
+ "dut-sidebar-wordmark",
29267
+ "dut-sidebar-toggle",
29268
+ "dut-sidebar-new-session"
29269
+ ];
29270
+ /** Mark only the expanded brand row and its adjacent native New Session button. */
29271
+ function syncSidebarHeader() {
29272
+ const desired = /* @__PURE__ */ new Map();
29273
+ const mark = (element, className) => {
29274
+ if (!(element instanceof HTMLElement)) return;
29275
+ const classes = desired.get(element) ?? /* @__PURE__ */ new Set();
29276
+ classes.add(className);
29277
+ desired.set(element, classes);
29278
+ };
29279
+ for (const name of document.querySelectorAll(".dut-sidebar-brand-name,.dut-brand-title")) {
29280
+ const row = name.closest("[data-window-drag]");
29281
+ const logo = row?.querySelector(".dut-sidebar-logo,.dut-left-logo");
29282
+ if (!row || !logo) continue;
29283
+ const brand = [...row.children].find((child) => child.contains(name) && child.contains(logo));
29284
+ if (!brand) continue;
29285
+ mark(row, "dut-sidebar-header");
29286
+ mark(brand, "dut-sidebar-brand");
29287
+ mark(logo.closest("[class*=\"brandIdentity\"]"), "dut-sidebar-identity");
29288
+ mark(name, "dut-sidebar-wordmark");
29289
+ for (const button of row.querySelectorAll("button")) if (!brand.contains(button) && button !== brand) mark(button, "dut-sidebar-toggle");
29290
+ const next = row.nextElementSibling;
29291
+ if (next instanceof HTMLButtonElement) mark(next, "dut-sidebar-new-session");
29292
+ }
29293
+ for (const className of HEADER_CLASSES) for (const element of document.querySelectorAll(`.${className}`)) if (!desired.get(element)?.has(className)) element.classList.remove(className);
29294
+ for (const [element, classes] of desired) element.classList.add(...classes);
29295
+ }
29296
+ /** Restore native header styling when the branding effect is disposed. */
29297
+ function clearSidebarHeader() {
29298
+ for (const className of HEADER_CLASSES) for (const element of document.querySelectorAll(`.${className}`)) element.classList.remove(className);
29299
+ }
29300
+ //#endregion
28533
29301
  //#region src/client/ui-tweaks/branding.tsx
28534
29302
  /** Browser URL for the project-owned `assets/logo.svg` file. */
28535
29303
  const PROJECT_LOGO_URL = "/_dsh/ui-tweaks/assets/logo.svg";
@@ -28537,6 +29305,8 @@ to{transform:translateX(-8px)}
28537
29305
  const HERO_TITLE = "与世界,深一度对话";
28538
29306
  const LEGACY_HOST_BRAND_TEXT = /DSH\s*(?:Local\s*Build|本地构建)|DeepSeek\s*Harness|ChatCode\s*CLI/giu;
28539
29307
  const LEGACY_HOST_BRAND_LABEL_TEXT = /^(?:DSH\s*(?:Local\s*Build|本地构建)|ChatCode\s*CLI)$/iu;
29308
+ const BRAND_SURFACE = "[class*=\"brandIdentity\"],[class*=\"brandName\"],[class*=\"headline\"],.dut-sidebar-brand-name";
29309
+ const USER_CONTENT = "input,textarea,[contenteditable],[role=\"textbox\"],pre,code,script,style";
28540
29310
  const HOST_BUILD_VERSION_TEXT = /^v?\d+\.\d+\.\d+(?:[-+][0-9a-z.-]+)*$/iu;
28541
29311
  const HERO_HEADLINE = /探索未至之境/u;
28542
29312
  const HERO_PREVIEW_TEXT = /^(?:预览版|Preview)$/iu;
@@ -28603,14 +29373,11 @@ body:not([data-ds-dark-theme]) .dut-unicom-primary-action:active{transform:trans
28603
29373
  hovered, the host owns the complete interaction treatment again. */
28604
29374
  body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B09 !important}
28605
29375
  .dut-project-logo{display:block;object-fit:contain}
28606
- .dut-left-logo{width:44px !important;height:44px !important}
28607
- .dut-brand-title{font-size:18px !important;font-weight:600 !important}
28608
- .dut-sidebar-logo{width:44px !important;height:44px !important}
28609
- /* The alpha sidebar keeps its slotted identity at 24px and clips the brand
28610
- button. Give only our expanded identity the full artwork height so the
28611
- 44px knot is not cropped by that host-owned overflow boundary. */
28612
- [class*="brandIdentity"]:has(.dut-sidebar-logo){height:44px !important}
28613
- .dut-sidebar-brand-name{font-size:18px !important;line-height:22px !important;font-weight:600 !important;letter-spacing:0 !important;white-space:nowrap}
29376
+ .dut-left-logo{width:24px !important;height:24px !important}
29377
+ .dut-brand-title{font:var(--dsw-font-s-strong-14) !important}
29378
+ .dut-sidebar-logo{width:24px !important;height:24px !important}
29379
+ .dut-sidebar-brand-name{font:var(--dsw-font-s-strong-14) !important;letter-spacing:-.01em !important;white-space:nowrap}
29380
+ ${SIDEBAR_HEADER_CSS}
28614
29381
  .dut-brand-version{display:none !important}
28615
29382
  .dut-hero-preview{display:none !important}
28616
29383
  .dut-hero-logo{width:60px !important;height:60px !important}
@@ -28619,8 +29386,10 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
28619
29386
  .dut-settings-logo{width:19px;height:19px;object-fit:contain}
28620
29387
  `;
28621
29388
  function hasPrimaryLabel(button) {
29389
+ if (button.closest("[data-chatcode-plugin-market], [data-plugin-module]")) return false;
28622
29390
  const label = `${button.textContent ?? ""} ${button.getAttribute("aria-label") ?? ""} ${button.title}`.trim().toLowerCase();
28623
- return /(?:^|\s)(new session|send|install)(?:\s|$)|新会话|发送|(?:^|\s)安装(?:\s|$)/u.test(label);
29391
+ if (button.classList.contains("dut-sidebar-brand") || button.classList.contains("dut-sidebar-new-session")) return false;
29392
+ return /(?:^|\s)(send|install)(?:\s|$)|发送|(?:^|\s)安装(?:\s|$)/u.test(label);
28624
29393
  }
28625
29394
  /** Replace one host SVG while retaining its generated layout class names. */
28626
29395
  function replaceHostLogo(svg) {
@@ -28687,17 +29456,21 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
28687
29456
  badge.classList.add("dut-hero-preview");
28688
29457
  badge.setAttribute("aria-hidden", "true");
28689
29458
  });
28690
- document.querySelectorAll("body *").forEach((element) => {
28691
- if (element.childElementCount !== 0 || !LEGACY_HOST_BRAND_LABEL_TEXT.test(element.textContent?.trim() ?? "")) return;
28692
- if (element.textContent !== PROJECT_NAME) element.textContent = PROJECT_NAME;
28693
- element.classList.add("dut-brand-title");
28694
- replaceLogoBesideBrandLabel(element);
28695
- hideVersionBesideBrandLabel(element);
29459
+ document.querySelectorAll(BRAND_SURFACE).forEach((surface) => {
29460
+ surface.querySelectorAll("*").forEach((element) => {
29461
+ if (element.closest(USER_CONTENT) !== null) return;
29462
+ if (element.childElementCount !== 0 || !LEGACY_HOST_BRAND_LABEL_TEXT.test(element.textContent?.trim() ?? "")) return;
29463
+ if (element.textContent !== PROJECT_NAME) element.textContent = PROJECT_NAME;
29464
+ element.classList.add("dut-brand-title");
29465
+ replaceLogoBesideBrandLabel(element);
29466
+ hideVersionBesideBrandLabel(element);
29467
+ });
28696
29468
  });
28697
29469
  const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
28698
29470
  let node;
28699
29471
  while ((node = walker.nextNode()) !== null) {
28700
- if (node.parentElement?.closest("script,style") !== null) continue;
29472
+ const parent = node.parentElement;
29473
+ if (parent === null || parent.closest(USER_CONTENT) !== null || parent.closest(BRAND_SURFACE) === null) continue;
28701
29474
  if (LEGACY_HOST_BRAND_TEXT.test(node.data)) {
28702
29475
  LEGACY_HOST_BRAND_TEXT.lastIndex = 0;
28703
29476
  node.data = node.data.replace(LEGACY_HOST_BRAND_TEXT, PROJECT_NAME);
@@ -28717,6 +29490,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
28717
29490
  const svg = host.matches("svg") ? host : host.querySelector("svg");
28718
29491
  if (svg instanceof SVGElement) replaceHostLogo(svg);
28719
29492
  });
29493
+ syncSidebarHeader();
28720
29494
  document.querySelectorAll("button").forEach((button) => {
28721
29495
  button.classList.toggle("dut-unicom-primary-action", hasPrimaryLabel(button));
28722
29496
  });
@@ -28761,11 +29535,50 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
28761
29535
  return () => {
28762
29536
  observer.disconnect();
28763
29537
  if (frame !== void 0) window.cancelAnimationFrame(frame);
29538
+ clearSidebarHeader();
28764
29539
  favicon.remove();
28765
29540
  style.remove();
28766
29541
  };
28767
29542
  }
28768
29543
  //#endregion
29544
+ //#region src/client/ui-tweaks/typography.ts
29545
+ /** Font overrides for the conversation, preserving the live theme families. */
29546
+ /**
29547
+ * Apply the UI Tweaks size and spacing preferences to the host's prose tokens.
29548
+ * @param fontSize - Selected body size in pixels.
29549
+ * @param lineHeight - Vertical-spacing unit; 16 retains the normal rhythm.
29550
+ * @param codeFontSize - Selected code-block size in pixels.
29551
+ * @returns Theme-token overrides for a runtime stylesheet.
29552
+ */
29553
+ function buildFontCss(fontSize, lineHeight, codeFontSize) {
29554
+ const parts = [];
29555
+ const base = "var(--dsw-font-markdown-base-font-family, var(--dsw-font-family))";
29556
+ const code = "var(--dsw-font-markdown-code-block-font-family, var(--ds-font-family-code))";
29557
+ const token = (name, size, leading, family, weight = 400, style = "normal") => {
29558
+ const line = Math.max(12, Math.round(leading * (lineHeight / 16)));
29559
+ parts.push(`--${name}:${style} ${weight} ${size}px/${line}px ${family}`);
29560
+ parts.push(`--${name}-font-size:${size}px`);
29561
+ parts.push(`--${name}-line-height:${line}px`);
29562
+ parts.push(`--${name}-font-weight:${weight}`);
29563
+ parts.push(`--${name}-font-style:${style}`);
29564
+ };
29565
+ const bodyLine = fontSize + 10;
29566
+ token("dsw-font-markdown-base", fontSize, bodyLine, base);
29567
+ token("dsw-font-markdown-base-strong", fontSize, bodyLine, base, 600);
29568
+ token("dsw-font-markdown-base-italic", fontSize, bodyLine, base, 400, "italic");
29569
+ token("dsw-font-markdown-base-strong-italic", fontSize, bodyLine, base, 600, "italic");
29570
+ token("dsw-font-markdown-h1", fontSize + 4, bodyLine + 4, base, 600);
29571
+ token("dsw-font-markdown-h2", fontSize + 2, bodyLine + 2, base, 600);
29572
+ token("dsw-font-markdown-h3", fontSize + 1, bodyLine + 1, base, 600);
29573
+ token("dsw-font-markdown-h4", fontSize, bodyLine, base, 600);
29574
+ token("dsw-font-markdown-table", fontSize, bodyLine, base);
29575
+ token("dsw-font-markdown-table-head", fontSize, bodyLine, base, 500);
29576
+ token("dsw-font-markdown-code", codeFontSize, codeFontSize + 7, "var(--dsw-font-markdown-code-font-family, var(--ds-font-family-code))");
29577
+ token("dsw-font-markdown-code-block", codeFontSize, codeFontSize + 7, code);
29578
+ token("dsw-font-markdown-code-block-small", Math.max(8, codeFontSize - 2), codeFontSize + 3, code);
29579
+ return `body{${parts.join(";")}}`;
29580
+ }
29581
+ //#endregion
28769
29582
  //#region src/client/ui-tweaks/index.tsx
28770
29583
  /**
28771
29584
  * dsh-ui-tweaks — browser half.
@@ -28777,12 +29590,12 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
28777
29590
  */
28778
29591
  const NS = "ui-tweaks";
28779
29592
  const SETTINGS_ROUTE = "/_dsh/ui-tweaks/settings";
28780
- const DEFAULT_FONT_SIZE = 16;
29593
+ const DEFAULT_FONT_SIZE = 14;
28781
29594
  const MIN_FONT_SIZE = 10;
28782
29595
  const MAX_FONT_SIZE = 32;
28783
29596
  /** Legacy: code font as a percentage of the message font size (81% = stock 13/16). */
28784
29597
  const DEFAULT_CODE_FONT_SCALE = 81;
28785
- /** Absolute code font size (px): 13 matches the host default at a 16px body. */
29598
+ /** Default absolute code-block size, paired with 14px prose. */
28786
29599
  const DEFAULT_CODE_FONT_SIZE = 13;
28787
29600
  const MIN_CODE_FONT_SIZE = 8;
28788
29601
  const MAX_CODE_FONT_SIZE = 32;
@@ -28800,7 +29613,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
28800
29613
  fontSize: "Message font size",
28801
29614
  fontSizeHint: `Number between ${MIN_FONT_SIZE} and ${MAX_FONT_SIZE}; applies to message text, headings, tables and code.`,
28802
29615
  codeFontSize: "Code font size",
28803
- codeFontSizeHint: `Absolute code size in px (${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}); ${DEFAULT_CODE_FONT_SIZE}px is ChatCode CLI's default at a 16px body. Applies to code blocks; inline code follows proportionally.`,
29616
+ codeFontSizeHint: `Absolute code size in px (${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}); ${DEFAULT_CODE_FONT_SIZE}px is ChatCode CLI's default at a 14px body. Applies to code blocks; inline code follows proportionally.`,
28804
29617
  lineHeight: "Line spacing",
28805
29618
  lineHeightHint: `Base vertical spacing in px: gaps between message rows (Think ↔ tool cards) and blocks inside one reply, plus text line-height, paragraph and list margins, all scale from it; ${DEFAULT_LINE_HEIGHT} is ChatCode CLI's default.`,
28806
29619
  tableStyle: "Table style",
@@ -28997,7 +29810,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
28997
29810
  fontSize: "消息字体大小",
28998
29811
  fontSizeHint: `取值 ${MIN_FONT_SIZE}–${MAX_FONT_SIZE},作用于消息正文、标题、表格与代码。`,
28999
29812
  codeFontSize: "代码字号",
29000
- codeFontSizeHint: `代码绝对字号,取值 ${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}px;${DEFAULT_CODE_FONT_SIZE}px 为 ChatCode CLI 默认(正文 16 时)。作用于代码块,行内代码按比例跟随。`,
29813
+ codeFontSizeHint: `代码绝对字号,取值 ${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}px;${DEFAULT_CODE_FONT_SIZE}px 为 ChatCode CLI 默认(正文 14 时)。作用于代码块,行内代码按比例跟随。`,
29001
29814
  lineHeight: "行高",
29002
29815
  lineHeightHint: `回复区垂直间距的基准值:消息之间(如 Think ↔ 工具卡片)、回复内块之间、正文行高、段落与列表边距都按它缩放;取值 ${MIN_LINE_HEIGHT}–${MAX_LINE_HEIGHT}px,${DEFAULT_LINE_HEIGHT} 为 ChatCode CLI 默认。`,
29003
29816
  tableStyle: "表格样式",
@@ -29186,9 +29999,10 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
29186
29999
  };
29187
30000
  function resolveValue(value) {
29188
30001
  const fontSize = typeof value?.fontSize === "number" ? value.fontSize : DEFAULT_FONT_SIZE;
30002
+ const codeFontScale = value?.codeFontScale ?? DEFAULT_CODE_FONT_SCALE;
29189
30003
  return {
29190
30004
  fontSize,
29191
- codeFontSize: typeof value?.codeFontSize === "number" ? Math.min(MAX_CODE_FONT_SIZE, Math.max(MIN_CODE_FONT_SIZE, value.codeFontSize)) : Math.max(8, Math.round(fontSize * (13 / 16) * ((value?.codeFontScale ?? DEFAULT_CODE_FONT_SCALE) / DEFAULT_CODE_FONT_SCALE))),
30005
+ codeFontSize: typeof value?.codeFontSize === "number" ? Math.min(MAX_CODE_FONT_SIZE, Math.max(MIN_CODE_FONT_SIZE, value.codeFontSize)) : codeFontScale === DEFAULT_CODE_FONT_SCALE ? DEFAULT_CODE_FONT_SIZE : Math.max(8, Math.round(fontSize * (13 / 16) * (codeFontScale / DEFAULT_CODE_FONT_SCALE))),
29192
30006
  lineHeight: typeof value?.lineHeight === "number" ? value.lineHeight : DEFAULT_LINE_HEIGHT,
29193
30007
  tableStyle: value?.tableStyle === "claude" ? "claude" : "default",
29194
30008
  gitBarEnabled: value?.gitBarEnabled ?? false,
@@ -29206,41 +30020,6 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
29206
30020
  notifySound: value?.notifySound ?? false
29207
30021
  };
29208
30022
  }
29209
- /** Scale one theme px value proportionally to the chosen base size. */
29210
- function rel(base, fontSize) {
29211
- return Math.max(8, Math.round(base / DEFAULT_FONT_SIZE * fontSize));
29212
- }
29213
- /** Rebuild the markdown font tokens for the chosen base size, keeping the theme faces. */
29214
- function buildFontCss(fontSize, lineHeight, codeFontSize) {
29215
- const cs = getComputedStyle(document.body);
29216
- const fam = (name, fallback) => {
29217
- const value = cs.getPropertyValue(name).trim();
29218
- return value.length > 0 ? value : fallback;
29219
- };
29220
- const base = fam("--dsw-font-markdown-base-font-family", "-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif");
29221
- const code = fam("--dsw-font-markdown-code-font-family", "\"SF Mono\", Consolas, monospace");
29222
- const codeBlock = fam("--dsw-font-markdown-code-block-font-family", "\"SF Mono\", Consolas, monospace");
29223
- const parts = [];
29224
- const token = (shorthand, size, baseLine, family) => {
29225
- const line = Math.max(12, Math.round(baseLine / DEFAULT_FONT_SIZE * fontSize * (lineHeight / DEFAULT_LINE_HEIGHT)));
29226
- parts.push(`--${shorthand}:${size}px/${line}px ${family}`);
29227
- parts.push(`--${shorthand}-font-size:${size}px`);
29228
- parts.push(`--${shorthand}-line-height:${line}px`);
29229
- };
29230
- const codePx = (blockRatio) => Math.max(8, Math.round(codeFontSize * blockRatio));
29231
- token("dsw-font-markdown-base", fontSize, 28, base);
29232
- token("dsw-font-markdown-base-strong", fontSize, 28, base);
29233
- token("dsw-font-markdown-base-italic", fontSize, 28, base);
29234
- token("dsw-font-markdown-base-strong-italic", fontSize, 28, base);
29235
- token("dsw-font-markdown-h1", rel(24, fontSize), 34, base);
29236
- token("dsw-font-markdown-h2", rel(22, fontSize), 32, base);
29237
- token("dsw-font-markdown-h3", rel(20, fontSize), 30, base);
29238
- token("dsw-font-markdown-h4", fontSize, 28, base);
29239
- token("dsw-font-markdown-code", codePx(14 / 13), 22, code);
29240
- token("dsw-font-markdown-code-block", codePx(1), 22, codeBlock);
29241
- token("dsw-font-markdown-code-block-small", codePx(12 / 13), 18, codeBlock);
29242
- return `body{${parts.join(";")}}`;
29243
- }
29244
30023
  /**
29245
30024
  * Claude Desktop-ish markdown table look: light-gray rounded cell cards with
29246
30025
  * small gaps, no borders. Cells share the theme's inline-code background and
@@ -29248,7 +30027,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
29248
30027
  * renderer, so headers and cells always match.
29249
30028
  */
29250
30029
  const CLAUDE_TABLE_CSS = `
29251
- div[data-slot="conversation.chat.node"] table{
30030
+ div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table{
29252
30031
  border-collapse:separate !important;
29253
30032
  border-spacing:3px !important;
29254
30033
  width:100% !important;
@@ -29259,7 +30038,7 @@ div[data-slot="conversation.chat.node"] table{
29259
30038
  border:none !important;
29260
30039
  font-size:var(--dsw-font-markdown-base-font-size) !important;
29261
30040
  }
29262
- div[data-slot="conversation.chat.node"] table thead th{
30041
+ div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table thead th{
29263
30042
  background:var(--dsw-alias-markdown-inline-code) !important;
29264
30043
  color:inherit !important;
29265
30044
  font-weight:400 !important;
@@ -29268,7 +30047,7 @@ div[data-slot="conversation.chat.node"] table thead th{
29268
30047
  border:none !important;
29269
30048
  border-radius:6px !important;
29270
30049
  }
29271
- div[data-slot="conversation.chat.node"] table tbody td{
30050
+ div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table tbody td{
29272
30051
  background:var(--dsw-alias-markdown-inline-code) !important;
29273
30052
  color:inherit !important;
29274
30053
  font-size:inherit !important;
@@ -29277,8 +30056,8 @@ div[data-slot="conversation.chat.node"] table tbody td{
29277
30056
  border:none !important;
29278
30057
  border-radius:6px !important;
29279
30058
  }
29280
- div[data-slot="conversation.chat.node"] table code,
29281
- div[data-slot="conversation.chat.node"] table pre{
30059
+ div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table code,
30060
+ div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table pre{
29282
30061
  background:transparent !important;
29283
30062
  border:none !important;
29284
30063
  box-shadow:none !important;
@@ -29287,24 +30066,23 @@ div[data-slot="conversation.chat.node"] table pre{
29287
30066
  function buildRuntimeCss(value) {
29288
30067
  const rules = [];
29289
30068
  rules.push(buildFontCss(value.fontSize, value.lineHeight, value.codeFontSize));
29290
- rules.push(`[data-chat-flow-kind="user"] [class^="_text_"],[data-chat-flow-kind="steering"] [class^="_text_"],[data-pending-steering] [class^="_text_"]{font-size:var(--dsw-font-markdown-base-font-size) !important}`);
29291
- rules.push(`[data-composer-card="true"] textarea,[data-composer-card="true"] [data-input-backdrop],[data-composer-card="true"] [data-input-mirror]{font-size:var(--dsw-font-markdown-base-font-size) !important}`);
29292
- rules.push(`[data-composer-card="true"] textarea::placeholder{font-size:var(--dsw-font-markdown-base-font-size) !important}`);
29293
- rules.push(`div[data-slot="conversation.chat.node"] table th,div[data-slot="conversation.chat.node"] table td{font-size:var(--dsw-font-markdown-base-font-size) !important}`);
29294
- const stockCodeBlock = value.fontSize * (13 / 16);
30069
+ rules.push(`[data-chat-flow-kind="user"] [class*="_bubble"],[data-chat-flow-kind="steering"] [class*="_bubble"],[data-pending-steering] [class*="_bubble"]{font-size:var(--dsw-font-markdown-base-font-size) !important;line-height:var(--dsw-font-markdown-base-line-height) !important}`);
30070
+ rules.push(`[data-composer-card]{font:var(--dsw-font-markdown-base) !important}`);
30071
+ rules.push(`div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table th,div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table td{font-size:var(--dsw-font-markdown-base-font-size) !important;line-height:var(--dsw-font-markdown-base-line-height) !important}`);
30072
+ const stockCodeBlock = value.fontSize * (13 / 14);
29295
30073
  if (Math.abs(value.codeFontSize - stockCodeBlock) > .5) {
29296
- const em = (.875 * (value.codeFontSize / stockCodeBlock)).toFixed(3);
29297
- rules.push(`div[data-slot="conversation.chat.node"] div[class*="_markdown_"] :not(pre)>code{font-size:${em}em !important}`);
30074
+ const em = (.92 * (value.codeFontSize / stockCodeBlock)).toFixed(3);
30075
+ rules.push(`div[data-slot="conversation.chat.node"] div[class*="_markdown"]:not([data-markdown-variant="compact"]) :not(pre)>code{font-size:${em}em !important}`);
29298
30076
  }
29299
30077
  if (value.lineHeight !== DEFAULT_LINE_HEIGHT) {
29300
30078
  const n = value.lineHeight;
29301
- const md = `div[data-slot="conversation.chat.node"] div[class*="_markdown_"]`;
29302
- const liGap = Math.max(2, Math.round(6 * n / DEFAULT_LINE_HEIGHT));
30079
+ const md = `div[data-slot="conversation.chat.node"] div[class*="_markdown"]:not([data-markdown-variant="compact"])`;
30080
+ const liGap = Math.max(2, Math.round(4 * n / DEFAULT_LINE_HEIGHT));
29303
30081
  const liPGap = Math.max(2, Math.round(8 * n / DEFAULT_LINE_HEIGHT));
29304
- rules.push(`div[data-slot="conversation.view"] .Md3f7G_column{gap:${n}px !important}`);
29305
- rules.push(`div[data-slot="conversation.chat.node"] .Sxvs8a_body{gap:${n}px !important}`);
29306
- rules.push(`${md} p{margin:${n}px 0 !important}`);
29307
- rules.push(`${md} ul,${md} ol{margin:${n}px 0 !important}`);
30082
+ rules.push(`div[data-slot="conversation.view"] [data-chat-flow]{gap:${n}px !important}`);
30083
+ rules.push(`div[data-slot="conversation.chat.node"] [data-assistant-body]{--dsh-assistant-block-gap:${n}px}`);
30084
+ rules.push(`${md} p{margin:${Math.round(.75 * n)}px 0 !important}`);
30085
+ rules.push(`${md} ul,${md} ol{margin:${Math.round(.75 * n)}px 0 !important}`);
29308
30086
  rules.push(`${md} pre{margin:${n}px 0 !important}`);
29309
30087
  const codePad = Math.max(4, Math.round(16 * n / DEFAULT_LINE_HEIGHT));
29310
30088
  rules.push(`${md} pre{padding-top:${codePad}px !important;padding-bottom:${codePad}px !important}`);
@@ -29314,7 +30092,7 @@ div[data-slot="conversation.chat.node"] table pre{
29314
30092
  }
29315
30093
  rules.push(`${md} li:not(:first-child){margin-top:${liGap}px !important}`);
29316
30094
  rules.push(`${md} li>p{margin:${liPGap}px 0 !important}`);
29317
- rules.push(`${md} h1,${md} h2,${md} h3{margin:${2 * n}px 0 ${n}px !important}`);
30095
+ rules.push(`${md} h1,${md} h2,${md} h3{margin:${Math.round(1.5 * n)}px 0 ${Math.round(.75 * n)}px !important}`);
29318
30096
  rules.push(`${md} h4,${md} h5,${md} h6{margin:${n}px 0 !important}`);
29319
30097
  rules.push(`${md} hr{margin:${2 * n}px 0 !important}`);
29320
30098
  rules.push(`${md} blockquote{margin:${n}px 0 0 !important}`);
@@ -30827,6 +31605,11 @@ div[data-slot="conversation.chat.node"] table pre{
30827
31605
  };
30828
31606
  }, "dsh-better-sidebar: better-locale lazy integration");
30829
31607
  const sidebarStore = createSidebarStore();
31608
+ const pluginMarketCatalog = createPluginMarketCatalog();
31609
+ ctx.effect(() => {
31610
+ pluginMarketCatalog.start();
31611
+ return () => pluginMarketCatalog.dispose();
31612
+ }, "dsh-better-sidebar: plugin catalogs");
30830
31613
  ctx.effect(() => installSessionPins(ctx, sidebarStore), "dsh-better-sidebar: session pins");
30831
31614
  const service = createBetterSidebarService(sidebarStore);
30832
31615
  ctx.provide("betterSidebar", service);
@@ -30839,7 +31622,10 @@ div[data-slot="conversation.chat.node"] table pre{
30839
31622
  const tabs = allLeaves(snapshot.state.splits).concat(allLeaves(snapshot.state.bottomSplits)).flatMap((leaf) => leaf.tabs);
30840
31623
  for (const tab of tabs) if (tab.type === "terminal" && !isAgentTabId(tab.id) && tab.title === fallbackTitle) service.updateTab(tab.id, { title: name });
30841
31624
  }).catch(() => {});
30842
- ctx.effect(() => registerBuiltins(ctx, service, { terminalTitle: () => terminalTitle }), "dsh-better-sidebar: register built-in tabs and viewers");
31625
+ ctx.effect(() => registerBuiltins(ctx, service, {
31626
+ terminalTitle: () => terminalTitle,
31627
+ pluginMarketCatalog
31628
+ }), "dsh-better-sidebar: register built-in tabs and viewers");
30843
31629
  const fail = (phase, error) => {
30844
31630
  console.error(`[dsh-better-sidebar] ${phase} error:`, error);
30845
31631
  try {
@@ -31047,6 +31833,7 @@ div[data-slot="conversation.chat.node"] table pre{
31047
31833
  "Skill marketplace",
31048
31834
  "Skill Market"
31049
31835
  ], SKILL_MARKET_NAV_MARKER), "dsh-better-sidebar: skill market navigation icon fallback");
31836
+ registerPluginMarketSettings(ctx, pluginMarketCatalog);
31050
31837
  ctx.slots.inject("settings.section", () => ctx.slots.register({
31051
31838
  name: "settings.section",
31052
31839
  id: "better-sidebar",