dsh-github-flow 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.en.md +287 -143
  2. package/README.md +270 -125
  3. package/docs/UPGRADE-NOTES.md +12 -9
  4. package/docs/architecture.md +126 -126
  5. package/lib/api/routes-actions.js +249 -0
  6. package/lib/api/routes-overview.js +94 -2
  7. package/lib/cache.d.ts +4 -0
  8. package/lib/cache.js +14 -0
  9. package/lib/client.d.ts +14 -1
  10. package/lib/client.js +4287 -2500
  11. package/lib/commands/gh.d.ts +6 -1
  12. package/lib/commands/gh.js +144 -71
  13. package/lib/executor/git-parser.d.ts +57 -0
  14. package/lib/executor/git-parser.js +255 -0
  15. package/lib/executor/platform-guide.d.ts +14 -0
  16. package/lib/executor/platform-guide.js +40 -0
  17. package/lib/executor/process-utils.d.ts +51 -0
  18. package/lib/executor/process-utils.js +162 -0
  19. package/lib/executor/version-utils.d.ts +12 -0
  20. package/lib/executor/version-utils.js +27 -0
  21. package/lib/executor.d.ts +70 -48
  22. package/lib/executor.js +371 -356
  23. package/lib/git-watcher.d.ts +36 -0
  24. package/lib/git-watcher.js +91 -0
  25. package/lib/main.js +37 -3
  26. package/lib/renderers/agent-task.d.ts +16 -0
  27. package/lib/renderers/agent-task.js +107 -0
  28. package/lib/renderers/cache.d.ts +8 -0
  29. package/lib/renderers/cache.js +66 -0
  30. package/lib/renderers/codespace.d.ts +16 -0
  31. package/lib/renderers/codespace.js +103 -0
  32. package/lib/renderers/common.d.ts +24 -0
  33. package/lib/renderers/common.js +88 -0
  34. package/lib/renderers/discussion.d.ts +16 -0
  35. package/lib/renderers/discussion.js +101 -0
  36. package/lib/renderers/gist.d.ts +15 -0
  37. package/lib/renderers/gist.js +99 -0
  38. package/lib/renderers/issue.d.ts +4 -0
  39. package/lib/renderers/issue.js +70 -0
  40. package/lib/renderers/label.d.ts +4 -0
  41. package/lib/renderers/label.js +48 -0
  42. package/lib/renderers/markdown.d.ts +19 -32
  43. package/lib/renderers/markdown.js +19 -624
  44. package/lib/renderers/pr.d.ts +4 -0
  45. package/lib/renderers/pr.js +107 -0
  46. package/lib/renderers/project.d.ts +20 -0
  47. package/lib/renderers/project.js +128 -0
  48. package/lib/renderers/release.d.ts +4 -0
  49. package/lib/renderers/release.js +74 -0
  50. package/lib/renderers/repo.d.ts +4 -0
  51. package/lib/renderers/repo.js +149 -0
  52. package/lib/renderers/ruleset.d.ts +4 -0
  53. package/lib/renderers/ruleset.js +74 -0
  54. package/lib/renderers/run.d.ts +4 -0
  55. package/lib/renderers/run.js +79 -0
  56. package/lib/renderers/skill.d.ts +34 -0
  57. package/lib/renderers/skill.js +241 -0
  58. package/lib/renderers/status.d.ts +28 -0
  59. package/lib/renderers/status.js +176 -0
  60. package/lib/telemetry.d.ts +70 -0
  61. package/lib/telemetry.js +161 -0
  62. package/lib/tools/agent-task.d.ts +54 -0
  63. package/lib/tools/agent-task.js +135 -0
  64. package/lib/tools/cache.d.ts +64 -0
  65. package/lib/tools/cache.js +186 -0
  66. package/lib/tools/codespace.d.ts +51 -0
  67. package/lib/tools/codespace.js +154 -0
  68. package/lib/tools/discussion.d.ts +70 -0
  69. package/lib/tools/discussion.js +195 -0
  70. package/lib/tools/gist.d.ts +155 -0
  71. package/lib/tools/gist.js +190 -0
  72. package/lib/tools/help.js +214 -13
  73. package/lib/tools/image-utils.d.ts +8 -0
  74. package/lib/tools/image-utils.js +34 -0
  75. package/lib/tools/issue.d.ts +8 -1
  76. package/lib/tools/issue.js +26 -4
  77. package/lib/tools/label.d.ts +80 -0
  78. package/lib/tools/label.js +237 -0
  79. package/lib/tools/pr.d.ts +8 -0
  80. package/lib/tools/pr.js +48 -3
  81. package/lib/tools/project.d.ts +80 -0
  82. package/lib/tools/project.js +241 -0
  83. package/lib/tools/repo.js +13 -1
  84. package/lib/tools/ruleset.d.ts +80 -0
  85. package/lib/tools/ruleset.js +177 -0
  86. package/lib/tools/skill.d.ts +24 -1
  87. package/lib/tools/skill.js +115 -5
  88. package/lib/tools/status.d.ts +40 -0
  89. package/lib/tools/status.js +58 -0
  90. package/lib/types.d.ts +44 -0
  91. package/lib/ui/auth-guide-card.d.ts +4 -0
  92. package/lib/ui/auth-guide-card.js +161 -0
  93. package/lib/ui/branch-selector.d.ts +10 -0
  94. package/lib/ui/branch-selector.js +163 -0
  95. package/lib/ui/commit-modal.d.ts +8 -0
  96. package/lib/ui/commit-modal.js +219 -0
  97. package/lib/ui/help-modal.d.ts +15 -0
  98. package/lib/ui/help-modal.js +202 -0
  99. package/lib/ui/icons.d.ts +7 -0
  100. package/lib/ui/icons.js +53 -0
  101. package/lib/ui/network-banner.d.ts +10 -0
  102. package/lib/ui/network-banner.js +54 -0
  103. package/lib/ui/storage.d.ts +35 -0
  104. package/lib/ui/storage.js +158 -0
  105. package/lib/ui/styles.d.ts +6 -0
  106. package/lib/ui/styles.js +1544 -0
  107. package/lib/ui/sync-settings-modal.d.ts +11 -0
  108. package/lib/ui/sync-settings-modal.js +350 -0
  109. package/lib/ui/sync-status-badge.d.ts +8 -0
  110. package/lib/ui/sync-status-badge.js +64 -0
  111. package/lib/ui/upgrade-card.d.ts +7 -0
  112. package/lib/ui/upgrade-card.js +222 -0
  113. package/lib/ui/utils.d.ts +45 -0
  114. package/lib/ui/utils.js +226 -0
  115. package/lib/ui/workspace-panel.d.ts +4 -0
  116. package/lib/ui/workspace-panel.js +489 -0
  117. package/lib/upgrade-manager.d.ts +5 -1
  118. package/lib/upgrade-manager.js +24 -1
  119. package/lib/version.d.ts +1 -1
  120. package/lib/version.js +1 -1
  121. package/package.json +2 -2
@@ -0,0 +1,53 @@
1
+ /**
2
+ * 官方高清 SVG 矢量组件与图标徽章
3
+ */
4
+ export function renderOctocat(size = 18, color = "currentColor") {
5
+ return React.createElement("svg", {
6
+ viewBox: "0 0 16 16",
7
+ width: size,
8
+ height: size,
9
+ fill: color,
10
+ style: { flexShrink: 0, display: "inline-block", verticalAlign: "middle" }
11
+ }, React.createElement("path", {
12
+ fillRule: "evenodd",
13
+ clipRule: "evenodd",
14
+ d: "M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.72 6.56 11.52C4.78 11.32 2.92 10.63 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.32 9.47 11.52C9.76 11.77 10.01 12.25 10.01 13C10.01 14.08 10 14.95 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z"
15
+ }));
16
+ }
17
+ export function renderGitIcon(size = 14, color = "#1296db") {
18
+ return React.createElement("svg", {
19
+ viewBox: "0 0 1024 1024",
20
+ width: size,
21
+ height: size,
22
+ style: { flexShrink: 0, display: "inline-block", verticalAlign: "middle" }
23
+ }, React.createElement("path", {
24
+ fill: color,
25
+ d: "M943.078 472.342L551.076 80.34c-21.859-21.859-57.626-21.859-79.485 0L79.589 472.342c-21.859 21.859-21.859 57.626 0 79.485l392.002 392.002c21.859 21.859 57.626 21.859 79.485 0l392.002-392.002c21.858-21.858 21.858-57.626 0-79.485z m-249.083 113.12c-37.939 0-68.693-30.755-68.693-68.693a68.532 68.532 0 0 1 4.136-23.521l-86.88-86.88v237.369c21.391 11.639 35.908 34.313 35.908 60.378 0 37.939-30.755 68.693-68.693 68.693s-68.693-30.755-68.693-68.693c0-27.314 15.944-50.903 39.03-61.973v-250.25c-23.022-10.642-39.03-33.879-39.03-60.907 0-7.808 1.401-15.272 3.853-22.243L344.061 207.871l44.159-44.159L490.738 266.23c5.58-1.503 11.418-2.378 17.473-2.378 37.076 0 67.132 30.056 67.132 67.132 0 6.055-0.875 11.893-2.378 17.473l102.241 102.241a68.68 68.68 0 0 1 18.789-2.623c37.939 0 68.693 30.755 68.693 68.693s-30.754 68.694-68.693 68.694z"
26
+ }));
27
+ }
28
+ export function renderOctocatBadge(size = 32) {
29
+ return React.createElement("div", {
30
+ className: "dsh-octocat-badge",
31
+ style: {
32
+ width: size + "px",
33
+ height: size + "px",
34
+ borderRadius: Math.round(size * 0.25) + "px",
35
+ }
36
+ }, renderOctocat(Math.round(size * 0.58), "#ffffff"));
37
+ }
38
+ export function renderPluginBadge(hFactory) {
39
+ var h = hFactory;
40
+ return h("button", {
41
+ className: "dsh-github-plugin-badge",
42
+ type: "button",
43
+ title: "本界面由第三方插件 dsh-github-flow 提供(非 DSH / GitHub 官方)。点击查看关于。",
44
+ onClick: function (e) {
45
+ e.stopPropagation();
46
+ e.preventDefault();
47
+ try {
48
+ window.dispatchEvent(new CustomEvent("dsh-github-open-about"));
49
+ }
50
+ catch (err) { }
51
+ },
52
+ }, "插件");
53
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 网络连接异常与离线状态醒目横幅组件
3
+ */
4
+ export declare function NetworkAlertBanner(props: {
5
+ isRightbar?: boolean;
6
+ networkErrorReason?: string | null;
7
+ lastSyncedAt?: number;
8
+ onRefresh?: () => void;
9
+ onOpenProxy?: () => void;
10
+ }): any;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 网络连接异常与离线状态醒目横幅组件
3
+ */
4
+ export function NetworkAlertBanner(props) {
5
+ var isRightbar = Boolean(props.isRightbar);
6
+ var reason = props.networkErrorReason || "无法连接至 GitHub API 服务器(网络超时或被防火墙/代理阻断),本次未能获取最新数据。";
7
+ var lastSyncedAt = props.lastSyncedAt || 0;
8
+ var onRefresh = props.onRefresh || (() => { });
9
+ var onOpenProxy = props.onOpenProxy || (() => {
10
+ try {
11
+ window.dispatchEvent(new CustomEvent("dsh-github-open-proxy"));
12
+ }
13
+ catch (e) { }
14
+ });
15
+ var formatTime = function (ts) {
16
+ if (!ts)
17
+ return "未知时间";
18
+ var diff = Date.now() - ts;
19
+ var MIN = 60 * 1000, HOUR = 60 * MIN, DAY = 24 * HOUR;
20
+ if (diff < MIN)
21
+ return "刚刚";
22
+ if (diff < HOUR)
23
+ return Math.floor(diff / MIN) + " 分钟前";
24
+ if (diff < DAY)
25
+ return Math.floor(diff / HOUR) + " 小时前";
26
+ return new Date(ts).toLocaleDateString();
27
+ };
28
+ var h = React.createElement;
29
+ return h("div", {
30
+ className: "dsh-github-network-alert",
31
+ style: {
32
+ display: "flex",
33
+ flexDirection: "column",
34
+ gap: "6px",
35
+ padding: isRightbar ? "10px 12px" : "12px 16px",
36
+ marginBottom: "12px",
37
+ borderRadius: "8px",
38
+ background: "rgba(240, 136, 62, 0.12)",
39
+ border: "1px solid rgba(240, 136, 62, 0.4)",
40
+ fontSize: "12px",
41
+ color: "var(--dsw-alias-label-primary, #1f2328)",
42
+ },
43
+ }, h("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", flexWrap: "wrap", gap: "6px" } }, h("div", { style: { display: "flex", alignItems: "center", gap: "6px", fontWeight: 600, color: "var(--dsw-alias-state-attention-primary, #9a6700)" } }, h("span", null, "⚠️"), h("span", null, "网络连接失败,当前展示离线历史数据")), h("div", { style: { display: "flex", alignItems: "center", gap: "6px", flexShrink: 0 } }, h("button", {
44
+ className: "dsh-github-btn-sm",
45
+ onClick: onRefresh,
46
+ title: "重新发起网络连接刷新",
47
+ style: { padding: "3px 8px", fontSize: "11px", cursor: "pointer" },
48
+ }, "🔄 重试刷新"), h("button", {
49
+ className: "dsh-github-btn-sm",
50
+ onClick: onOpenProxy,
51
+ title: "打开网络代理设置配置 HTTP/SOCKS5 代理",
52
+ style: { padding: "3px 8px", fontSize: "11px", cursor: "pointer" },
53
+ }, "⚙️ 配置代理"))), h("div", { style: { fontSize: "11px", color: "var(--dsw-alias-label-secondary, #656d76)", lineHeight: 1.4 } }, reason + (lastSyncedAt ? `(当前数据快照同步于 ${formatTime(lastSyncedAt)})` : "")));
54
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 本地持久化缓存状态机与偏好配置存储管理
3
+ */
4
+ export declare const GLOBAL_OVERVIEW_CACHE_KEY = "dsh_github_global_overview_snapshot_v1";
5
+ export declare const SYNC_SETTINGS_STORAGE_KEY = "dsh_github_sync_settings_v1";
6
+ export declare const DEFAULT_SYNC_SETTINGS: {
7
+ strategy: string;
8
+ cloudSyncIntervalMs: number;
9
+ localGitWatch: boolean;
10
+ };
11
+ export declare function getLocalSyncSettings(): any;
12
+ export declare function saveLocalSyncSettings(settings: any): void;
13
+ export declare function getStoredGlobalOverview(): any;
14
+ export declare function saveStoredGlobalOverview(data: any): void;
15
+ export declare function clearStoredGlobalOverview(): void;
16
+ export declare function getCacheStorageMeta(): {
17
+ exists: boolean;
18
+ sizeKb: number;
19
+ savedAt: any;
20
+ };
21
+ export declare function getRightbarStorageKey(cwd: string | null): string;
22
+ export declare function getStoredRightbarSnapshot(cwd: string | null): {
23
+ data: any;
24
+ savedAt: any;
25
+ } | null;
26
+ export declare function saveStoredRightbarData(cwd: string | null, data: any): void;
27
+ export declare const HEADER_CARDS_STORAGE_KEY = "dsh_github_header_cards_visible_v1";
28
+ /**
29
+ * 读取右侧栏上方仓库卡片与快捷操作栏的折叠/展开偏好(默认为 true 展开)
30
+ */
31
+ export declare function getStoredHeaderCardsVisible(): boolean;
32
+ /**
33
+ * 持久化保存右侧栏上方仓库卡片与快捷操作栏的展开/折叠偏好
34
+ */
35
+ export declare function saveStoredHeaderCardsVisible(visible: boolean): void;
@@ -0,0 +1,158 @@
1
+ /**
2
+ * 本地持久化缓存状态机与偏好配置存储管理
3
+ */
4
+ export const GLOBAL_OVERVIEW_CACHE_KEY = "dsh_github_global_overview_snapshot_v1";
5
+ export const SYNC_SETTINGS_STORAGE_KEY = "dsh_github_sync_settings_v1";
6
+ export const DEFAULT_SYNC_SETTINGS = {
7
+ strategy: "swr", // 'swr' | 'auto' | 'manual'
8
+ cloudSyncIntervalMs: 600000, // 云端定时周期:默认 10 分钟 (600,000ms,下限 5分钟)
9
+ localGitWatch: true, // 本地 .git 改动实时感知 (仅右侧栏当前工作区生效,默认开启)
10
+ };
11
+ export function getLocalSyncSettings() {
12
+ try {
13
+ var raw = localStorage.getItem(SYNC_SETTINGS_STORAGE_KEY);
14
+ if (!raw)
15
+ return DEFAULT_SYNC_SETTINGS;
16
+ var parsed = JSON.parse(raw);
17
+ var merged = Object.assign({}, DEFAULT_SYNC_SETTINGS, parsed);
18
+ if (merged.strategy === "interval" || parsed.cloudAutoSync === true) {
19
+ merged.strategy = "auto";
20
+ saveLocalSyncSettings(merged);
21
+ }
22
+ if (typeof merged.cloudSyncIntervalMs !== "number" || merged.cloudSyncIntervalMs < 300000) {
23
+ merged.cloudSyncIntervalMs = 600000;
24
+ }
25
+ if (typeof parsed.localGitWatch !== "boolean") {
26
+ merged.localGitWatch = true;
27
+ }
28
+ return merged;
29
+ }
30
+ catch (e) {
31
+ return DEFAULT_SYNC_SETTINGS;
32
+ }
33
+ }
34
+ export function saveLocalSyncSettings(settings) {
35
+ try {
36
+ localStorage.setItem(SYNC_SETTINGS_STORAGE_KEY, JSON.stringify(settings));
37
+ if (typeof window !== "undefined") {
38
+ window.dispatchEvent(new CustomEvent("dsh-github-sync-settings-change", { detail: settings }));
39
+ }
40
+ }
41
+ catch (e) { }
42
+ }
43
+ export function getStoredGlobalOverview() {
44
+ try {
45
+ var raw = localStorage.getItem(GLOBAL_OVERVIEW_CACHE_KEY);
46
+ if (!raw)
47
+ return null;
48
+ var parsed = JSON.parse(raw);
49
+ if (!parsed || !parsed.data) {
50
+ return null;
51
+ }
52
+ if (typeof parsed.savedAt === "number") {
53
+ return parsed;
54
+ }
55
+ return null;
56
+ }
57
+ catch (e) {
58
+ return null;
59
+ }
60
+ }
61
+ export function saveStoredGlobalOverview(data) {
62
+ if (!data || !data.auth || data.auth.networkError) {
63
+ return;
64
+ }
65
+ try {
66
+ localStorage.setItem(GLOBAL_OVERVIEW_CACHE_KEY, JSON.stringify({
67
+ data: data,
68
+ savedAt: Date.now(),
69
+ }));
70
+ }
71
+ catch (e) { }
72
+ }
73
+ export function clearStoredGlobalOverview() {
74
+ try {
75
+ localStorage.removeItem(GLOBAL_OVERVIEW_CACHE_KEY);
76
+ if (typeof localStorage !== "undefined") {
77
+ for (var i = localStorage.length - 1; i >= 0; i--) {
78
+ var k = localStorage.key(i);
79
+ if (k && k.indexOf("dsh_github_rightbar_snapshot_") === 0) {
80
+ localStorage.removeItem(k);
81
+ }
82
+ }
83
+ }
84
+ if (typeof window !== "undefined") {
85
+ window.dispatchEvent(new CustomEvent("dsh-github-cache-cleared"));
86
+ }
87
+ }
88
+ catch (e) { }
89
+ }
90
+ export function getCacheStorageMeta() {
91
+ try {
92
+ var raw = localStorage.getItem(GLOBAL_OVERVIEW_CACHE_KEY);
93
+ if (!raw)
94
+ return { exists: false, sizeKb: 0, savedAt: 0 };
95
+ var parsed = JSON.parse(raw);
96
+ var sizeKb = Math.round((raw.length * 2) / 1024 * 10) / 10;
97
+ return { exists: true, sizeKb: sizeKb, savedAt: parsed?.savedAt || 0 };
98
+ }
99
+ catch (e) {
100
+ return { exists: false, sizeKb: 0, savedAt: 0 };
101
+ }
102
+ }
103
+ export function getRightbarStorageKey(cwd) {
104
+ var safe = (cwd || "default").replace(/[^a-zA-Z0-9_-]/g, "_");
105
+ return "dsh_github_rightbar_snapshot_" + safe;
106
+ }
107
+ export function getStoredRightbarSnapshot(cwd) {
108
+ try {
109
+ var key = getRightbarStorageKey(cwd);
110
+ var raw = localStorage.getItem(key);
111
+ if (!raw)
112
+ return null;
113
+ var parsed = JSON.parse(raw);
114
+ if (!parsed || !parsed.data) {
115
+ return null;
116
+ }
117
+ return { data: parsed.data, savedAt: typeof parsed.savedAt === "number" ? parsed.savedAt : 0 };
118
+ }
119
+ catch (e) {
120
+ return null;
121
+ }
122
+ }
123
+ export function saveStoredRightbarData(cwd, data) {
124
+ if (!data || !data.auth || data.auth.networkError)
125
+ return;
126
+ try {
127
+ var key = getRightbarStorageKey(cwd);
128
+ localStorage.setItem(key, JSON.stringify({
129
+ data: data,
130
+ savedAt: Date.now(),
131
+ }));
132
+ }
133
+ catch (e) { }
134
+ }
135
+ export const HEADER_CARDS_STORAGE_KEY = "dsh_github_header_cards_visible_v1";
136
+ /**
137
+ * 读取右侧栏上方仓库卡片与快捷操作栏的折叠/展开偏好(默认为 true 展开)
138
+ */
139
+ export function getStoredHeaderCardsVisible() {
140
+ try {
141
+ var raw = localStorage.getItem(HEADER_CARDS_STORAGE_KEY);
142
+ if (raw === null || raw === undefined)
143
+ return true;
144
+ return raw !== "false";
145
+ }
146
+ catch (e) {
147
+ return true;
148
+ }
149
+ }
150
+ /**
151
+ * 持久化保存右侧栏上方仓库卡片与快捷操作栏的展开/折叠偏好
152
+ */
153
+ export function saveStoredHeaderCardsVisible(visible) {
154
+ try {
155
+ localStorage.setItem(HEADER_CARDS_STORAGE_KEY, visible ? "true" : "false");
156
+ }
157
+ catch (e) { }
158
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * DSH GitHub Flow - 主题自适应样式系统 (Light / Dark 动态联动)
3
+ * 遵循 DSH 原生 DSW (DeepSeek Web) 设计语言规范
4
+ */
5
+ export declare const GITHUB_PANEL_CSS = "\n/* 1. \u4FA7\u8FB9\u680F\u56FE\u6807\u4E0E\u5916\u58F3 */\n.dsh-github-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n cursor: pointer;\n color: var(--dsw-alias-label-secondary, #656d76);\n transition: color 0.15s ease;\n}\n.dsh-github-icon:hover {\n color: var(--dsw-alias-label-primary, #1f2328);\n}\n.dsh-github-icon-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 7px;\n background: transparent;\n color: inherit;\n border: 1px solid transparent;\n transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);\n}\n.dsh-github-icon-inner.active {\n background: var(--dsw-alias-bg-module-platform, rgba(9, 105, 218, 0.08));\n color: var(--dsw-alias-link, #0969da);\n border-color: var(--dsw-alias-border-l2, rgba(9, 105, 218, 0.2));\n}\n\nbody[data-ds-dark-theme] .dsh-github-icon {\n color: var(--dsw-alias-label-secondary, #9ca3af);\n}\nbody[data-ds-dark-theme] .dsh-github-icon:hover {\n color: var(--dsw-alias-label-primary, #ffffff);\n}\nbody[data-ds-dark-theme] .dsh-github-icon-inner.active {\n background: linear-gradient(135deg, rgba(46, 160, 67, 0.3) 0%, rgba(31, 111, 235, 0.45) 100%);\n color: #ffffff;\n box-shadow: 0 0 12px rgba(31, 111, 235, 0.4);\n border-color: rgba(88, 166, 255, 0.45);\n}\n\n/* 2. Octocat \u79D1\u6280\u52CB\u7AE0 Badge */\n.dsh-octocat-badge {\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #1f6feb 0%, #0969da 60%, #8957e5 100%);\n box-shadow: 0 2px 6px rgba(9, 105, 218, 0.25);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-octocat-badge {\n background: linear-gradient(135deg, #2ea043 0%, #1f6feb 60%, #8957e5 100%);\n box-shadow: 0 2px 8px rgba(31, 111, 235, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n\n/* 3. \u5BB9\u5668\u89C6\u56FE\uFF08\u4E3B\u9762\u677F\u4E0E\u53F3\u4FA7\u62BD\u5C49\u680F\uFF09 */\n.dsh-github-panel {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n padding: 24px 32px;\n box-sizing: border-box;\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, #1f2328);\n font-family: var(--dsw-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n}\n\n.dsh-github-rightbar-container {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow-y: auto;\n padding: 16px 18px;\n box-sizing: border-box;\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, #1f2328);\n font-family: var(--dsw-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n}\n\nbody[data-ds-dark-theme] .dsh-github-panel,\nbody[data-ds-dark-theme] .dsh-github-rightbar-container {\n background: var(--dsw-alias-bg-base, #151517);\n color: var(--dsw-alias-label-primary, #ececec);\n}\n\n/* 4. \u5934\u90E8\u533A\u57DF */\n.dsh-github-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e5e7eb);\n}\nbody[data-ds-dark-theme] .dsh-github-header {\n border-bottom-color: var(--dsw-alias-border-l1, #2c2c2e);\n}\n.dsh-github-title {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n.dsh-github-title h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-title h2 {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n\n/* 5. \u5237\u65B0\u6309\u94AE */\n.dsh-github-refresh-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n font-size: 12px;\n font-weight: 500;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n color: var(--dsw-alias-label-primary, #1f2328);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-refresh-btn:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover, #ebeef2);\n border-color: var(--dsw-alias-border-l3, #d0d7de);\n}\n.dsh-github-refresh-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\nbody[data-ds-dark-theme] .dsh-github-refresh-btn {\n border-color: var(--dsw-alias-border-l1, #38383c);\n background: var(--dsw-alias-bg-layer-2, #242528);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-refresh-btn:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover, #2f3034);\n border-color: rgba(255, 255, 255, 0.25);\n}\n\n/* 6. \u6982\u89C8\u5361\u7247\u4E0E\u7F51\u683C */\n.dsh-github-overview-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 14px;\n margin-bottom: 20px;\n}\n.dsh-github-card {\n padding: 14px 16px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2, #e5e7eb);\n background: var(--dsw-alias-bg-layer-1, #fcfcfd);\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);\n margin-bottom: 12px;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\nbody[data-ds-dark-theme] .dsh-github-card {\n border-color: var(--dsw-alias-border-l1, #303034);\n background: var(--dsw-alias-bg-layer-2, #212124);\n box-shadow: none;\n}\n.dsh-github-card-title {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--dsw-alias-label-tertiary, #656d76);\n margin-bottom: 6px;\n font-weight: 500;\n}\nbody[data-ds-dark-theme] .dsh-github-card-title {\n color: var(--dsw-alias-label-tertiary, #888);\n}\n.dsh-github-card-value {\n font-size: 15px;\n font-weight: 600;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-card-value {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n.dsh-github-card-desc {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #656d76);\n margin-top: 4px;\n line-height: 1.4;\n}\nbody[data-ds-dark-theme] .dsh-github-card-desc {\n color: var(--dsw-alias-label-secondary, #bbb);\n}\n.dsh-github-card-subtext {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #8c959f);\n margin-top: 6px;\n}\nbody[data-ds-dark-theme] .dsh-github-card-subtext {\n color: var(--dsw-alias-label-tertiary, #888);\n}\n\n/* 7. \u5FBD\u7AE0\uFF08Badges\uFF09 */\n.dsh-github-badge {\n display: inline-flex;\n align-items: center;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 12px;\n font-weight: 500;\n line-height: 16px;\n}\n.dsh-badge-green {\n background: rgba(46, 160, 67, 0.12);\n color: #1a7f37;\n border: 1px solid rgba(46, 160, 67, 0.2);\n}\n.dsh-badge-red {\n background: rgba(207, 34, 46, 0.12);\n color: #cf222e;\n border: 1px solid rgba(207, 34, 46, 0.2);\n}\n.dsh-badge-yellow {\n background: rgba(154, 103, 0, 0.12);\n color: #9a6700;\n border: 1px solid rgba(154, 103, 0, 0.2);\n}\n.dsh-badge-blue {\n background: rgba(9, 105, 218, 0.12);\n color: #0969da;\n border: 1px solid rgba(9, 105, 218, 0.2);\n}\n.dsh-badge-purple {\n background: rgba(137, 87, 229, 0.12);\n color: #8250df;\n border: 1px solid rgba(137, 87, 229, 0.2);\n}\nbody[data-ds-dark-theme] .dsh-badge-green {\n background: rgba(46, 160, 67, 0.22);\n color: #3fb950;\n border-color: rgba(46, 160, 67, 0.3);\n}\nbody[data-ds-dark-theme] .dsh-badge-red {\n background: rgba(248, 81, 73, 0.22);\n color: #f85149;\n border-color: rgba(248, 81, 73, 0.3);\n}\nbody[data-ds-dark-theme] .dsh-badge-yellow {\n background: rgba(210, 153, 34, 0.22);\n color: #d29922;\n border-color: rgba(210, 153, 34, 0.3);\n}\nbody[data-ds-dark-theme] .dsh-badge-blue {\n background: rgba(56, 139, 253, 0.22);\n color: #58a6ff;\n border-color: rgba(56, 139, 253, 0.3);\n}\nbody[data-ds-dark-theme] .dsh-badge-purple {\n background: rgba(163, 113, 247, 0.22);\n color: #bc8cff;\n border-color: rgba(163, 113, 247, 0.3);\n}\n\n/* \u63D2\u4EF6\u8EAB\u4EFD\u5FBD\u6807\uFF1A\u6807\u8BC6\u754C\u9762\u7531\u7B2C\u4E09\u65B9\u63D2\u4EF6 dsh-github-flow \u63D0\u4F9B\uFF08\u975E DSH/GitHub \u5B98\u65B9\uFF09 */\n.dsh-github-plugin-badge {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 500;\n padding: 1px 7px;\n border-radius: 10px;\n line-height: 14px;\n vertical-align: middle;\n margin-left: 8px;\n text-decoration: none !important;\n background: rgba(125, 133, 144, 0.12);\n color: #656d76;\n border: 1px solid rgba(125, 133, 144, 0.25);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-plugin-badge:hover {\n background: rgba(125, 133, 144, 0.2);\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-plugin-badge {\n background: rgba(139, 148, 158, 0.18);\n color: #8b949e;\n border-color: rgba(139, 148, 158, 0.3);\n}\nbody[data-ds-dark-theme] .dsh-github-plugin-badge:hover {\n background: rgba(139, 148, 158, 0.28);\n color: #f0f6fc;\n}\n\n/* 7.5. \u5206\u7C7B\u7B5B\u9009\u836F\u4E38\u680F */\n.dsh-github-pills {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n margin-bottom: 12px;\n}\n.dsh-github-pill-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border-radius: 14px;\n font-size: 11px;\n font-weight: 500;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n color: var(--dsw-alias-label-secondary, #656d76);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-pill-btn:hover {\n color: var(--dsw-alias-label-primary, #1f2328);\n border-color: var(--dsw-alias-border-l3, #b0b8c1);\n}\n.dsh-github-pill-btn.active {\n background: var(--dsw-alias-bg-module-platform, rgba(9, 105, 218, 0.1));\n color: var(--dsw-alias-link, #0969da);\n border-color: var(--dsw-alias-link, #0969da);\n font-weight: 600;\n}\nbody[data-ds-dark-theme] .dsh-github-pill-btn {\n background: var(--dsw-alias-bg-layer-2, #21262d);\n color: var(--dsw-alias-label-secondary, #8b949e);\n border-color: var(--dsw-alias-border-l1, #30363d);\n}\nbody[data-ds-dark-theme] .dsh-github-pill-btn:hover {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n border-color: #8b949e;\n}\nbody[data-ds-dark-theme] .dsh-github-pill-btn.active {\n background: rgba(56, 139, 253, 0.18);\n color: #58a6ff;\n border-color: #58a6ff;\n}\n\n/* 8. \u5FEB\u6377\u64CD\u4F5C\u7F51\u683C */\n.dsh-github-quick-actions {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n margin-bottom: 16px;\n}\n.dsh-github-action-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n padding: 8px 10px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n color: var(--dsw-alias-label-primary, #1f2328);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-action-btn:hover {\n background: var(--dsw-alias-interactive-bg-hover, #ebeef2);\n border-color: var(--dsw-alias-link, #0969da);\n color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-action-btn {\n border-color: var(--dsw-alias-border-l1, #444);\n background: var(--dsw-alias-bg-layer-2, #28282b);\n color: var(--dsw-alias-label-primary, #fff);\n}\nbody[data-ds-dark-theme] .dsh-github-action-btn:hover {\n background: var(--dsw-alias-interactive-bg-hover, #343438);\n border-color: #58a6ff;\n color: #58a6ff;\n}\n\n/* \u7EC4\u5408\u5F0F\u5FEB\u6377\u64CD\u4F5C\u6309\u94AE (AI \u667A\u80FD\u88C5\u586B\u4E3B\u64CD\u4F5C + \u5B98\u65B9\u5916\u94FE\u76F4\u8FBE) */\n.dsh-github-split-btn {\n display: flex;\n align-items: stretch;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n overflow: hidden;\n transition: all 0.15s ease;\n}\n.dsh-github-split-btn:hover {\n border-color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-split-btn {\n border-color: var(--dsw-alias-border-l1, #444);\n background: var(--dsw-alias-bg-layer-2, #28282b);\n}\nbody[data-ds-dark-theme] .dsh-github-split-btn:hover {\n border-color: #58a6ff;\n}\n.dsh-github-split-main {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n padding: 8px 8px;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-primary, #1f2328);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n}\n.dsh-github-split-main:hover {\n background: var(--dsw-alias-interactive-bg-hover, #ebeef2);\n color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-split-main {\n color: var(--dsw-alias-label-primary, #fff);\n}\nbody[data-ds-dark-theme] .dsh-github-split-main:hover {\n background: var(--dsw-alias-interactive-bg-hover, #343438);\n color: #58a6ff;\n}\n.dsh-github-split-link {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 8px;\n border-left: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: transparent;\n color: var(--dsw-alias-label-tertiary, #656d76);\n font-size: 12px;\n font-weight: bold;\n text-decoration: none !important;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-split-link:hover {\n background: var(--dsw-alias-interactive-bg-hover, #ebeef2);\n color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-split-link {\n border-left-color: var(--dsw-alias-border-l1, #444);\n color: var(--dsw-alias-label-secondary, #9ca3af);\n}\nbody[data-ds-dark-theme] .dsh-github-split-link:hover {\n background: var(--dsw-alias-interactive-bg-hover, #343438);\n color: #58a6ff;\n}\n\n/* 9. \u6A21\u5757\u5206\u533A\u4E0E\u5217\u8868 */\n.dsh-github-section {\n margin-bottom: 20px;\n}\n.dsh-github-section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n}\n.dsh-github-section-header h3 {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-secondary, #656d76);\n}\nbody[data-ds-dark-theme] .dsh-github-section-header h3 {\n color: var(--dsw-alias-label-secondary, #ccc);\n}\n.dsh-github-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.dsh-github-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 10px 14px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #e5e7eb);\n background: var(--dsw-alias-bg-layer-1, #fcfcfd);\n transition: border-color 0.15s ease, background 0.15s ease;\n}\n.dsh-github-item:hover {\n border-color: var(--dsw-alias-border-l3, #d0d7de);\n background: var(--dsw-alias-interactive-bg-hover, #f6f8fa);\n}\nbody[data-ds-dark-theme] .dsh-github-item {\n border-color: var(--dsw-alias-border-l1, #333336);\n background: var(--dsw-alias-bg-layer-2, #252528);\n}\nbody[data-ds-dark-theme] .dsh-github-item:hover {\n border-color: var(--dsw-alias-border-l2, #555);\n background: var(--dsw-alias-interactive-bg-hover, #2c2c30);\n}\n.dsh-github-item-title {\n font-size: 13px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary, #1f2328);\n text-decoration: none;\n transition: color 0.15s ease;\n}\n.dsh-github-item-title:hover {\n color: var(--dsw-alias-link, #0969da);\n text-decoration: underline;\n}\nbody[data-ds-dark-theme] .dsh-github-item-title {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-item-title:hover {\n color: #58a6ff;\n}\n.dsh-github-item-desc {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #656d76);\n line-height: 1.4;\n}\nbody[data-ds-dark-theme] .dsh-github-item-desc {\n color: var(--dsw-alias-label-secondary, #bbb);\n}\n.dsh-github-item-meta {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #656d76);\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 8px;\n}\nbody[data-ds-dark-theme] .dsh-github-item-meta {\n color: var(--dsw-alias-label-secondary, #8c8c8c);\n}\n\n/* 10. \u5C0F\u6309\u94AE\u6837\u5F0F\uFF08\u5728 GitHub \u6253\u5F00\u7B49\uFF09 */\n.dsh-github-btn-sm {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n color: var(--dsw-alias-label-primary, #1f2328);\n cursor: pointer;\n text-decoration: none !important;\n transition: all 0.15s ease;\n}\n.dsh-github-btn-sm:hover {\n background: var(--dsw-alias-interactive-bg-hover, #ebeef2);\n border-color: var(--dsw-alias-border-l3, #b0b8c1);\n color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-btn-sm {\n border-color: var(--dsw-alias-border-l1, #444);\n background: var(--dsw-alias-bg-layer-2, #26272b);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-btn-sm:hover {\n background: var(--dsw-alias-interactive-bg-hover, #33343a);\n border-color: rgba(255, 255, 255, 0.25);\n color: #58a6ff;\n}\n\n/* 11. \u7A7A\u72B6\u6001 */\n.dsh-github-empty {\n padding: 24px;\n text-align: center;\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary, #656d76);\n border: 1px dashed var(--dsw-alias-border-l2, #d0d7de);\n border-radius: 8px;\n background: rgba(0, 0, 0, 0.01);\n}\nbody[data-ds-dark-theme] .dsh-github-empty {\n color: var(--dsw-alias-label-tertiary, #888);\n border-color: var(--dsw-alias-border-l1, #38383c);\n background: rgba(255, 255, 255, 0.01);\n}\n\n/* 12. Tabs \u5BFC\u822A\u680F */\n.dsh-github-tabs {\n display: flex;\n gap: 8px;\n margin-bottom: 18px;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e5e7eb);\n padding-bottom: 8px;\n}\nbody[data-ds-dark-theme] .dsh-github-tabs {\n border-bottom-color: var(--dsw-alias-border-l1, #303034);\n}\n.dsh-github-tab-btn {\n padding: 6px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary, #656d76);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-tab-btn:hover {\n color: var(--dsw-alias-label-primary, #1f2328);\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05));\n}\n.dsh-github-tab-btn.active {\n color: var(--dsw-alias-link, #0969da);\n background: rgba(9, 105, 218, 0.1);\n font-weight: 600;\n}\nbody[data-ds-dark-theme] .dsh-github-tab-btn {\n color: var(--dsw-alias-label-secondary, #8c8c8c);\n}\nbody[data-ds-dark-theme] .dsh-github-tab-btn:hover {\n color: var(--dsw-alias-label-primary, #fff);\n background: var(--dsw-alias-interactive-bg-hover, rgba(255, 255, 255, 0.06));\n}\nbody[data-ds-dark-theme] .dsh-github-tab-btn.active {\n color: #58a6ff;\n background: rgba(88, 166, 255, 0.15);\n}\n\n/* 13. \u641C\u7D22\u8F93\u5165\u6846 */\n.dsh-github-search-input {\n width: 100%;\n max-width: 320px;\n padding: 6px 12px;\n font-size: 12px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, #1f2328);\n outline: none;\n margin-bottom: 14px;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n.dsh-github-search-input:focus {\n border-color: var(--dsw-alias-link, #0969da);\n box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.15);\n}\nbody[data-ds-dark-theme] .dsh-github-search-input {\n border-color: var(--dsw-alias-border-l1, #444);\n background: var(--dsw-alias-bg-layer-2, #212124);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-search-input:focus {\n border-color: #58a6ff;\n box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.2);\n}\n\n/* 14. \u5DE5\u4F5C\u533A\u77E9\u9635\u6761\u76EE\u4E13\u5C5E\u7C7B */\n.dsh-github-workspace-card {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n}\n.dsh-github-ws-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-ws-title {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n.dsh-github-ws-path {\n font-size: 12px;\n color: var(--dsw-alias-label-tertiary, #656d76);\n font-family: var(--ds-font-family-code, monospace);\n}\nbody[data-ds-dark-theme] .dsh-github-ws-path {\n color: var(--dsw-alias-label-tertiary, #888);\n}\n.dsh-github-ws-repo-link {\n color: var(--dsw-alias-link, #0969da);\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-weight: 500;\n}\nbody[data-ds-dark-theme] .dsh-github-ws-repo-link {\n color: #58a6ff;\n}\n.dsh-github-repo-link {\n color: var(--dsw-alias-link, #0969da);\n text-decoration: none;\n font-weight: 600;\n}\n.dsh-github-repo-link:hover {\n text-decoration: underline;\n}\nbody[data-ds-dark-theme] .dsh-github-repo-link {\n color: #58a6ff;\n}\n.dsh-github-subheading {\n font-size: 14px;\n font-weight: 600;\n margin: 0 0 10px 0;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-subheading {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n\n/* 15. \u5C31\u7EEA\u5F15\u5BFC\u6A2A\u5E45 (Setup Guide Banner) */\n.dsh-github-guide-card {\n padding: 16px;\n border-radius: 8px;\n margin-bottom: 16px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n}\n.dsh-github-guide-card.warning {\n border-color: rgba(210, 153, 34, 0.4);\n background: rgba(210, 153, 34, 0.08);\n}\n.dsh-github-guide-card.danger {\n border-color: rgba(248, 81, 73, 0.4);\n background: rgba(248, 81, 73, 0.08);\n}\n.dsh-github-guide-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 15px;\n font-weight: 600;\n margin-bottom: 6px;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-guide-header {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n.dsh-github-guide-desc {\n font-size: 13px;\n color: var(--dsw-alias-label-secondary, #656d76);\n line-height: 1.5;\n margin-bottom: 12px;\n}\nbody[data-ds-dark-theme] .dsh-github-guide-desc {\n color: var(--dsw-alias-label-secondary, #8c8c8c);\n}\n.dsh-github-cmd-box {\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--dsw-alias-bg-base, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n border-radius: 6px;\n padding: 8px 12px;\n font-family: var(--ds-font-family-code, monospace);\n font-size: 13px;\n color: var(--dsw-alias-label-primary, #1f2328);\n margin-bottom: 12px;\n}\nbody[data-ds-dark-theme] .dsh-github-cmd-box {\n background: var(--dsw-alias-bg-layer-2, #161b22);\n border-color: var(--dsw-alias-border-l1, #30363d);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n.dsh-github-copy-btn {\n padding: 4px 10px;\n font-size: 12px;\n border-radius: 4px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n color: var(--dsw-alias-label-primary, #1f2328);\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\nbody[data-ds-dark-theme] .dsh-github-copy-btn {\n background: var(--dsw-alias-bg-layer-2, #21262d);\n border-color: var(--dsw-alias-border-l1, #30363d);\n color: var(--dsw-alias-label-primary, #c9d1d9);\n}\n.dsh-github-copy-btn:hover {\n background: var(--dsw-alias-interactive-bg-hover, #ebeef1);\n}\nbody[data-ds-dark-theme] .dsh-github-copy-btn:hover {\n background: #30363d;\n}\n.dsh-github-copy-btn.copied {\n color: #2da44e !important;\n border-color: #2da44e !important;\n background: rgba(45, 164, 78, 0.15) !important;\n}\n.dsh-github-steps-list {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #656d76);\n line-height: 1.6;\n margin: 0 0 12px 18px;\n padding: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-steps-list {\n color: var(--dsw-alias-label-secondary, #8c8c8c);\n}\n.dsh-github-guide-actions {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n.dsh-github-guide-tip {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #8c8c8c);\n margin-top: 10px;\n line-height: 1.4;\n}\n\n/* 16. \u8BBE\u7F6E\u5F39\u7A97 (Settings Modal)\uFF1A\u5DE6\u4FA7\u5206\u533A\u5BFC\u822A + \u53F3\u4FA7\u5185\u5BB9\u533A */\n.dsh-github-modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.45);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 99999;\n backdrop-filter: blur(2px);\n}\n.dsh-github-modal-dialog {\n width: 92%;\n max-width: 640px;\n max-height: 86vh;\n display: flex;\n flex-direction: column;\n background: var(--dsw-alias-bg-base, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n border-radius: 12px;\n box-shadow: 0 16px 32px rgba(0, 0, 0, 0.18);\n padding: 0;\n box-sizing: border-box;\n overflow: hidden;\n color: var(--dsw-alias-label-primary, #1f2328);\n font-family: var(--dsw-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n}\nbody[data-ds-dark-theme] .dsh-github-modal-dialog {\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n border-color: var(--dsw-alias-border-l1, #30363d);\n box-shadow: 0 16px 36px rgba(0, 0, 0, 0.45);\n}\n.dsh-github-modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 18px 22px 14px;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-modal-header {\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n}\n.dsh-github-modal-body {\n display: flex;\n min-height: 0;\n flex: 1;\n}\n.dsh-github-settings-nav {\n flex-shrink: 0;\n width: 148px;\n padding: 14px 10px;\n border-right: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n display: flex;\n flex-direction: column;\n gap: 4px;\n box-sizing: border-box;\n}\nbody[data-ds-dark-theme] .dsh-github-settings-nav {\n border-right-color: var(--dsw-alias-border-l1, #30363d);\n}\n.dsh-github-settings-nav-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border-radius: 6px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n text-align: left;\n color: var(--dsw-alias-label-secondary, #656d76);\n transition: background 0.12s ease, color 0.12s ease;\n}\n.dsh-github-settings-nav-item:hover {\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n color: var(--dsw-alias-label-primary, #1f2328);\n}\n.dsh-github-settings-nav-item.active {\n background: rgba(9, 105, 218, 0.1);\n color: var(--dsw-alias-link, #0969da);\n font-weight: 600;\n}\nbody[data-ds-dark-theme] .dsh-github-settings-nav-item:hover {\n background: rgba(240, 246, 252, 0.06);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-settings-nav-item.active {\n background: rgba(88, 166, 255, 0.15);\n color: #58a6ff;\n}\n.dsh-github-settings-content {\n flex: 1;\n min-width: 0;\n padding: 18px 22px 20px;\n overflow-y: auto;\n box-sizing: border-box;\n}\n@media (max-width: 560px) {\n .dsh-github-modal-body {\n flex-direction: column;\n }\n .dsh-github-settings-nav {\n width: 100%;\n flex-direction: row;\n border-right: none;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #d0d7e0);\n overflow-x: auto;\n }\n body[data-ds-dark-theme] .dsh-github-settings-nav {\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n }\n .dsh-github-settings-nav-item {\n white-space: nowrap;\n }\n}\n.dsh-github-modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 14px 22px;\n border-top: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-modal-footer {\n border-top-color: var(--dsw-alias-border-l1, #30363d);\n}\n.dsh-github-radio-card {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n margin-bottom: 8px;\n cursor: pointer;\n transition: all 0.15s ease;\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n}\n.dsh-github-radio-card:hover {\n border-color: var(--dsw-alias-link, #0969da);\n}\n.dsh-github-radio-card.active {\n border-color: var(--dsw-alias-link, #0969da);\n background: rgba(9, 105, 218, 0.08);\n}\nbody[data-ds-dark-theme] .dsh-github-radio-card {\n background: var(--dsw-alias-bg-base, #161b22);\n border-color: var(--dsw-alias-border-l1, #30363d);\n}\nbody[data-ds-dark-theme] .dsh-github-radio-card.active {\n border-color: #58a6ff;\n background: rgba(88, 166, 255, 0.12);\n}\n\n.dsh-github-select {\n width: 100%;\n padding: 8px 12px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, #1f2328);\n font-size: 13px;\n outline: none;\n cursor: pointer;\n box-sizing: border-box;\n color-scheme: light;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n.dsh-github-select:focus {\n border-color: var(--dsw-alias-link, #0969da);\n box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.15);\n}\n.dsh-github-select option {\n background-color: #ffffff;\n color: #1f2328;\n padding: 6px 10px;\n}\nbody[data-ds-dark-theme] .dsh-github-select {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n color-scheme: dark;\n}\nbody[data-ds-dark-theme] .dsh-github-select:focus {\n border-color: #58a6ff;\n box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.2);\n}\nbody[data-ds-dark-theme] .dsh-github-select option {\n background-color: #1e1e22;\n color: #f0f6fc;\n}\n\n.dsh-github-input {\n padding: 7px 12px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, #1f2328);\n font-size: 13px;\n outline: none;\n box-sizing: border-box;\n color-scheme: light;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n.dsh-github-input:focus {\n border-color: var(--dsw-alias-link, #0969da);\n box-shadow: 0 0 0 3px rgba(9, 105, 218, 0.15);\n}\n.dsh-github-input::placeholder {\n color: var(--dsw-alias-label-tertiary, #8c959f);\n}\nbody[data-ds-dark-theme] .dsh-github-input {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n color-scheme: dark;\n}\nbody[data-ds-dark-theme] .dsh-github-input:focus {\n border-color: #58a6ff;\n box-shadow: 0 0 0 3px rgba(88, 166, 255, 0.2);\n}\n\n.dsh-github-cache-info-box {\n padding: 10px 12px;\n border-radius: 6px;\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n margin-bottom: 20px;\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #656d76);\n transition: all 0.15s ease;\n}\nbody[data-ds-dark-theme] .dsh-github-cache-info-box {\n background: var(--dsw-alias-bg-base, #161b22);\n border-color: var(--dsw-alias-border-l1, #30363d);\n color: var(--dsw-alias-label-secondary, #8c8c8c);\n}\n\n.dsh-github-about-star-box {\n padding: 12px 14px;\n border-radius: 8px;\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n}\nbody[data-ds-dark-theme] .dsh-github-about-star-box {\n background: var(--dsw-alias-bg-base, #161b22);\n border-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-primary-btn {\n padding: 5px 14px;\n font-weight: 600;\n white-space: nowrap;\n background: var(--dsw-alias-link, #0969da);\n border-color: var(--dsw-alias-link, #0969da);\n color: #ffffff;\n}\n.dsh-github-primary-btn:hover {\n background: var(--dsw-alias-link, #0969da);\n border-color: var(--dsw-alias-link, #0969da);\n color: #ffffff;\n opacity: 0.88;\n}\nbody[data-ds-dark-theme] .dsh-github-primary-btn {\n background: #58a6ff;\n border-color: #58a6ff;\n color: #0d1117;\n}\nbody[data-ds-dark-theme] .dsh-github-primary-btn:hover {\n background: #58a6ff;\n border-color: #58a6ff;\n color: #0d1117;\n opacity: 0.88;\n}\n\n.dsh-github-radio {\n accent-color: var(--dsw-alias-link, #0969da);\n cursor: pointer;\n margin-top: 3px;\n}\nbody[data-ds-dark-theme] .dsh-github-radio {\n accent-color: #58a6ff;\n}\n\n#dsh-github-commit-dialog {\n max-width: 600px;\n width: calc(100vw - 48px);\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n border-radius: 12px;\n padding: 0;\n box-sizing: border-box;\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, #1f2328);\n box-shadow: 0 16px 36px rgba(0, 0, 0, 0.22);\n font-family: var(--dsw-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n}\n#dsh-github-commit-dialog::backdrop {\n background: rgba(0, 0, 0, 0.45);\n backdrop-filter: blur(2px);\n}\nbody[data-ds-dark-theme] #dsh-github-commit-dialog {\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n border-color: var(--dsw-alias-border-l1, #30363d);\n color: var(--dsw-alias-label-primary, #ececec);\n box-shadow: 0 16px 36px rgba(0, 0, 0, 0.5);\n}\n.dsh-github-commit-row {\n transition: background 0.15s ease;\n}\n.dsh-github-commit-row:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05));\n}\nbody[data-ds-dark-theme] .dsh-github-commit-row:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(255, 255, 255, 0.08));\n}\nbody[data-ds-dark-theme] .dsh-github-commit-pre {\n background: var(--dsw-alias-bg-base, #151517) !important;\n color: #ececec !important;\n border: 1px solid #30363d !important;\n}\n.dsh-github-dialog-close-btn:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.08)) !important;\n opacity: 1 !important;\n}\n\n.dsh-github-branch-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n font-size: 11px;\n font-weight: 500;\n border-radius: 12px;\n border: 1px solid rgba(46, 160, 67, 0.4);\n background: rgba(46, 160, 67, 0.12);\n color: var(--dsw-alias-state-success, #2ea043);\n cursor: pointer;\n transition: all 0.15s ease;\n user-select: none;\n}\n.dsh-github-branch-btn:hover {\n background: rgba(46, 160, 67, 0.22);\n border-color: rgba(46, 160, 67, 0.6);\n}\nbody[data-ds-dark-theme] .dsh-github-branch-btn {\n border-color: rgba(56, 139, 253, 0.4);\n background: rgba(56, 139, 253, 0.15);\n color: #58a6ff;\n}\nbody[data-ds-dark-theme] .dsh-github-branch-btn:hover {\n background: rgba(56, 139, 253, 0.25);\n border-color: #58a6ff;\n}\n\n.dsh-github-branch-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 5px;\n width: 290px;\n max-height: 380px;\n background: var(--dsw-alias-bg-base, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.16);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\nbody[data-ds-dark-theme] .dsh-github-branch-dropdown {\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n border-color: var(--dsw-alias-border-l1, #30363d);\n box-shadow: 0 8px 28px rgba(0, 0, 0, 0.5);\n}\n\n.dsh-github-branch-search {\n padding: 8px 10px;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n}\nbody[data-ds-dark-theme] .dsh-github-branch-search {\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n}\n.dsh-github-branch-input {\n width: 100%;\n padding: 5px 8px;\n box-sizing: border-box;\n font-size: 11px;\n border-radius: 5px;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-primary, #1f2328);\n outline: none;\n}\nbody[data-ds-dark-theme] .dsh-github-branch-input {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-base, #151517);\n color: #ececec;\n}\n.dsh-github-branch-input:focus {\n border-color: var(--dsw-alias-link, #0969da);\n}\n\n.dsh-github-branch-list {\n flex: 1;\n overflow-y: auto;\n max-height: 280px;\n padding: 4px 0;\n}\n.dsh-github-branch-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n font-size: 12px;\n cursor: pointer;\n transition: background 0.12s ease;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-branch-item {\n color: var(--dsw-alias-label-primary, #ececec);\n}\n.dsh-github-branch-item:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05));\n}\nbody[data-ds-dark-theme] .dsh-github-branch-item:hover {\n background: rgba(255, 255, 255, 0.08);\n}\n.dsh-github-branch-item.active {\n font-weight: 600;\n color: var(--dsw-alias-state-success, #1a7f37);\n}\nbody[data-ds-dark-theme] .dsh-github-branch-item.active {\n color: #3fb950;\n}\n\n/* 15. \u72EC\u7ACB\u6C89\u6D78\u5F0F\u6307\u5357\u5927\u7A97\u53E3 (Help Modal) \u53CC\u4E3B\u9898\u4F53\u7CFB */\n.dsh-github-help-dialog {\n width: 920px;\n max-width: 92vw;\n height: 85vh;\n max-height: 85vh;\n display: flex;\n flex-direction: column;\n border-radius: 12px;\n background: var(--dsw-alias-bg-base, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.22);\n color: var(--dsw-alias-label-primary, #1f2328);\n font-family: var(--dsw-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif);\n overflow: hidden;\n box-sizing: border-box;\n}\nbody[data-ds-dark-theme] .dsh-github-help-dialog {\n background: var(--dsw-alias-bg-layer-2, #1c2128);\n border-color: var(--dsw-alias-border-l1, #30363d);\n color: var(--dsw-alias-label-primary, #f0f6fc);\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.65);\n}\n\n.dsh-github-help-header {\n padding: 16px 22px;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n background: var(--dsw-alias-bg-base, #ffffff);\n}\nbody[data-ds-dark-theme] .dsh-github-help-header {\n background: var(--dsw-alias-bg-layer-2, #1c2128);\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-help-nav {\n display: flex;\n gap: 8px;\n padding: 10px 22px;\n background: var(--dsw-alias-bg-module-platform, rgba(9, 105, 218, 0.05));\n border-bottom: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-help-nav {\n background: rgba(56, 139, 253, 0.08);\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-help-tab-btn {\n padding: 6px 14px;\n font-size: 13px;\n font-weight: 500;\n border-radius: 6px;\n background: transparent;\n color: var(--dsw-alias-label-secondary, #656d76);\n border: 1px solid transparent;\n cursor: pointer;\n transition: all 0.15s ease;\n}\nbody[data-ds-dark-theme] .dsh-github-help-tab-btn {\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\n.dsh-github-help-tab-btn:hover {\n background: rgba(0, 0, 0, 0.05);\n}\nbody[data-ds-dark-theme] .dsh-github-help-tab-btn:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #f0f6fc;\n}\n.dsh-github-help-tab-btn.active {\n font-weight: 600;\n background: var(--dsw-alias-link, #0969da);\n color: #ffffff !important;\n border-color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-help-tab-btn.active {\n background: #1f6feb;\n border-color: #1f6feb;\n}\n\n.dsh-github-help-scroll-body {\n flex: 1;\n overflow-y: auto;\n padding: 22px;\n box-sizing: border-box;\n}\n.dsh-github-help-scroll-body::-webkit-scrollbar {\n width: 6px;\n}\n.dsh-github-help-scroll-body::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n}\nbody[data-ds-dark-theme] .dsh-github-help-scroll-body::-webkit-scrollbar-thumb {\n background: #30363d;\n}\n\n.dsh-github-help-card {\n padding: 16px 18px;\n margin-bottom: 14px;\n border-radius: 8px;\n background: var(--dsw-alias-bg-module-platform, rgba(9, 105, 218, 0.04));\n border: 1px solid var(--dsw-alias-border-l2, rgba(9, 105, 218, 0.18));\n transition: border-color 0.15s ease;\n}\nbody[data-ds-dark-theme] .dsh-github-help-card {\n background: rgba(56, 139, 253, 0.05);\n border-color: rgba(56, 139, 253, 0.18);\n}\n.dsh-github-help-card:hover {\n border-color: rgba(9, 105, 218, 0.35);\n}\nbody[data-ds-dark-theme] .dsh-github-help-card:hover {\n border-color: rgba(56, 139, 253, 0.4);\n}\n\n.dsh-github-prompt-box {\n padding: 10px 14px;\n margin-bottom: 8px;\n border-radius: 6px;\n background: #f6f8fa;\n border: 1px solid #d0d7de;\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 12px;\n line-height: 1.5;\n color: var(--dsw-alias-label-primary, #1f2328);\n word-break: break-all;\n}\nbody[data-ds-dark-theme] .dsh-github-prompt-box {\n background: #0d1117;\n border-color: #30363d;\n color: #79c0ff;\n}\n\n.dsh-github-help-step-badge {\n width: 28px;\n height: 28px;\n border-radius: 50%;\n background: var(--dsw-alias-link, #0969da);\n color: #ffffff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n font-size: 14px;\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-help-step-badge {\n background: #1f6feb;\n box-shadow: 0 0 10px rgba(31, 111, 235, 0.35);\n}\n\n.dsh-github-help-footer {\n padding: 12px 22px;\n border-top: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--dsw-alias-bg-base, #ffffff);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-help-footer {\n background: var(--dsw-alias-bg-layer-2, #1c2128);\n border-top-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-help-title {\n font-weight: 600;\n font-size: 14px;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-help-title {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n\n.dsh-github-help-desc {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #656d76);\n line-height: 1.5;\n}\nbody[data-ds-dark-theme] .dsh-github-help-desc {\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\n\n/* 16. \u672A\u63D0\u4EA4\u6587\u4EF6\u6E05\u5355\u4EA4\u4E92\u4E0E Git Diff \u5BF9\u6BD4\u89C6\u56FE */\n.dsh-github-dirty-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 6px;\n border-radius: 6px;\n cursor: pointer;\n transition: background-color 0.15s ease;\n user-select: none;\n}\n.dsh-github-dirty-item:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05));\n}\nbody[data-ds-dark-theme] .dsh-github-dirty-item:hover {\n background: rgba(255, 255, 255, 0.08);\n}\n.dsh-github-dirty-item:active {\n background: var(--dsw-alias-interactive-bg-active, rgba(0, 0, 0, 0.08));\n}\nbody[data-ds-dark-theme] .dsh-github-dirty-item:active {\n background: rgba(255, 255, 255, 0.12);\n}\n\n.dsh-github-inline-diff-view {\n animation: dsh-github-fade-in 0.15s ease-out;\n}\n@keyframes dsh-github-fade-in {\n from { opacity: 0; transform: translateY(2px); }\n to { opacity: 1; transform: translateY(0); }\n}\nbody[data-ds-dark-theme] .dsh-github-inline-diff-content {\n background-color: var(--dsw-alias-bg-layer-2, #1c2128) !important;\n border-color: var(--dsw-alias-border-l1, #30363d) !important;\n}\n\n/* 17. \u63D0\u4EA4\u8BE6\u60C5\u6587\u4EF6\u53D8\u66F4\u7EDF\u8BA1\u7ED3\u6784\u5316\u9AD8\u4EAE */\n.dsh-github-stat-list {\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n}\nbody[data-ds-dark-theme] .dsh-github-stat-list {\n border-color: var(--dsw-alias-border-l1, #30363d) !important;\n background: var(--dsw-alias-bg-layer-2, #1c2128) !important;\n}\n\n.dsh-github-stat-row {\n transition: background-color 0.15s ease;\n}\n.dsh-github-stat-row:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.04));\n}\nbody[data-ds-dark-theme] .dsh-github-stat-row:hover {\n background: rgba(255, 255, 255, 0.06);\n}\n\n/* 18. \u53F3\u4FA7\u680F\u4E0A\u65B9\u5361\u7247\u6298\u53E0/\u5C55\u5F00\u52A8\u753B\u4E0E\u6309\u94AE\u6837\u5F0F */\n.dsh-github-header-cards-collapsed {\n display: none !important;\n}\n\n.dsh-github-btn-sm.active {\n background: var(--dsw-alias-state-attention-subtle, rgba(234, 179, 8, 0.15)) !important;\n color: var(--dsw-alias-state-attention-primary, #9a6700) !important;\n border-color: var(--dsw-alias-state-attention-primary, #d29922) !important;\n}\nbody[data-ds-dark-theme] .dsh-github-btn-sm.active {\n background: rgba(234, 179, 8, 0.2) !important;\n color: #f0b72f !important;\n border-color: #d29922 !important;\n}\n";
6
+ export declare function injectStyles(): () => void;