dsh-github-flow 0.4.0 → 0.6.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.
- package/README.en.md +91 -12
- package/README.md +91 -12
- package/docs/UPGRADE-NOTES.md +9 -12
- package/docs/architecture.md +63 -29
- package/docs/images/1.png +0 -0
- package/lib/api/routes-actions.js +268 -5
- package/lib/api/routes-overview.js +147 -29
- package/lib/cache.d.ts +77 -4
- package/lib/cache.js +114 -7
- package/lib/client.d.ts +9 -4
- package/lib/client.js +5293 -942
- package/lib/commands/gh.d.ts +6 -1
- package/lib/commands/gh.js +144 -71
- package/lib/executor/error-classifier.d.ts +55 -0
- package/lib/executor/error-classifier.js +199 -0
- package/lib/executor/git-parser.d.ts +157 -1
- package/lib/executor/git-parser.js +513 -4
- package/lib/executor.d.ts +147 -4
- package/lib/executor.js +866 -77
- package/lib/main.js +28 -4
- package/lib/renderers/agent-task.d.ts +16 -0
- package/lib/renderers/agent-task.js +107 -0
- package/lib/renderers/codespace.d.ts +16 -0
- package/lib/renderers/codespace.js +103 -0
- package/lib/renderers/discussion.d.ts +16 -0
- package/lib/renderers/discussion.js +101 -0
- package/lib/renderers/markdown.d.ts +4 -0
- package/lib/renderers/markdown.js +4 -0
- package/lib/renderers/project.d.ts +20 -0
- package/lib/renderers/project.js +128 -0
- package/lib/renderers/skill.d.ts +30 -0
- package/lib/renderers/skill.js +180 -0
- package/lib/renderers/status.d.ts +5 -0
- package/lib/renderers/status.js +52 -0
- package/lib/telemetry.d.ts +70 -0
- package/lib/telemetry.js +161 -0
- package/lib/tools/agent-task.d.ts +54 -0
- package/lib/tools/agent-task.js +135 -0
- package/lib/tools/codespace.d.ts +51 -0
- package/lib/tools/codespace.js +154 -0
- package/lib/tools/discussion.d.ts +70 -0
- package/lib/tools/discussion.js +195 -0
- package/lib/tools/help.js +129 -14
- package/lib/tools/image-utils.d.ts +27 -0
- package/lib/tools/image-utils.js +73 -3
- package/lib/tools/project.d.ts +80 -0
- package/lib/tools/project.js +241 -0
- package/lib/tools/repo.js +13 -1
- package/lib/tools/skill.d.ts +24 -1
- package/lib/tools/skill.js +115 -5
- package/lib/tools/status.d.ts +3 -2
- package/lib/tools/status.js +9 -4
- package/lib/types.d.ts +336 -0
- package/lib/ui/commit-modal.js +144 -14
- package/lib/ui/help-modal.d.ts +21 -0
- package/lib/ui/help-modal.js +300 -0
- package/lib/ui/issue-modal.d.ts +14 -0
- package/lib/ui/issue-modal.js +366 -0
- package/lib/ui/markdown-lite.d.ts +66 -0
- package/lib/ui/markdown-lite.js +312 -0
- package/lib/ui/network-banner.d.ts +12 -0
- package/lib/ui/network-banner.js +35 -0
- package/lib/ui/pr-modal.d.ts +17 -0
- package/lib/ui/pr-modal.js +516 -0
- package/lib/ui/repo-badges.d.ts +43 -0
- package/lib/ui/repo-badges.js +82 -0
- package/lib/ui/repo-selector.d.ts +14 -0
- package/lib/ui/repo-selector.js +112 -0
- package/lib/ui/storage.d.ts +56 -0
- package/lib/ui/storage.js +163 -0
- package/lib/ui/styles.d.ts +1 -1
- package/lib/ui/styles.js +1219 -0
- package/lib/ui/sync-settings-modal.js +1 -1
- package/lib/ui/upgrade-card.js +39 -14
- package/lib/ui/utils.d.ts +35 -0
- package/lib/ui/utils.js +172 -0
- package/lib/ui/workspace-panel.js +198 -31
- package/lib/upgrade-manager.d.ts +5 -1
- package/lib/upgrade-manager.js +24 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 关联仓库(上游源仓库 ↔ 个人复刻 Fork)切换下拉组件。
|
|
3
|
+
*
|
|
4
|
+
* 为什么单仓库时返回 null:单仓库场景没有切换意义,保持现有卡片外观 100% 纯净零噪音;
|
|
5
|
+
* 仅在检测到当前工作区存在双 remote 或 Fork 关联拓扑时激活。
|
|
6
|
+
*/
|
|
7
|
+
export function RepoSelectorDropdown(props) {
|
|
8
|
+
var associatedRepos = Array.isArray(props.associatedRepos) ? props.associatedRepos : [];
|
|
9
|
+
var currentRepo = (props.currentRepo || '').toLowerCase();
|
|
10
|
+
var cwd = props.cwd;
|
|
11
|
+
var onRepoSwitched = props.onRepoSwitched || (() => { });
|
|
12
|
+
var showToast = props.showToast || (() => { });
|
|
13
|
+
// 严格遵守 React Hooks 铁律:所有 useState / useRef / useEffect 必须无条件在顶层执行,
|
|
14
|
+
// 严禁在任何条件分支/early return 之后调用 Hooks,杜绝触发
|
|
15
|
+
// "Rendered fewer hooks than expected" 的致命运行时崩溃。
|
|
16
|
+
var [isOpen, setIsOpen] = React.useState(false);
|
|
17
|
+
var [switching, setSwitching] = React.useState(false);
|
|
18
|
+
var containerRef = React.useRef(null);
|
|
19
|
+
React.useEffect(() => {
|
|
20
|
+
if (!isOpen)
|
|
21
|
+
return;
|
|
22
|
+
var handleClickOutside = (e) => {
|
|
23
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
24
|
+
setIsOpen(false);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
28
|
+
return () => document.removeEventListener('mousedown', handleClickOutside);
|
|
29
|
+
}, [isOpen]);
|
|
30
|
+
// Hooks 执行完毕后再进行单仓库零噪音短路返回
|
|
31
|
+
if (associatedRepos.length <= 1) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
var toggleOpen = (e) => {
|
|
35
|
+
e.stopPropagation();
|
|
36
|
+
setIsOpen(!isOpen);
|
|
37
|
+
};
|
|
38
|
+
var handleSwitch = async (targetRepo, targetRemote) => {
|
|
39
|
+
if (switching)
|
|
40
|
+
return;
|
|
41
|
+
setSwitching(true);
|
|
42
|
+
try {
|
|
43
|
+
var res = await fetch('/api/github/action', {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: { 'Content-Type': 'application/json' },
|
|
46
|
+
body: JSON.stringify({
|
|
47
|
+
action: 'set_default_repo',
|
|
48
|
+
cwd,
|
|
49
|
+
repo: targetRepo,
|
|
50
|
+
remote: targetRemote,
|
|
51
|
+
}),
|
|
52
|
+
});
|
|
53
|
+
var json = await res.json().catch(() => ({}));
|
|
54
|
+
if (!res.ok || !json.ok) {
|
|
55
|
+
showToast(`❌ 切换基准仓库失败:${json.error || json.message || res.statusText}`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
setIsOpen(false);
|
|
59
|
+
showToast(`✅ 已将基准仓库切换为 ${targetRepo}`);
|
|
60
|
+
onRepoSwitched(targetRepo);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
showToast(`❌ 切换请求异常:${err?.message || err}`);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
setSwitching(false);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
var roleLabel = (role) => {
|
|
70
|
+
switch (role) {
|
|
71
|
+
case 'fork': return '我的复刻';
|
|
72
|
+
case 'upstream': return '上游源仓库';
|
|
73
|
+
case 'parent': return '上游主干';
|
|
74
|
+
case 'origin': return 'origin';
|
|
75
|
+
default: return '远程关联';
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var roleBadgeTone = (role) => {
|
|
79
|
+
switch (role) {
|
|
80
|
+
case 'fork': return 'dsh-badge-purple';
|
|
81
|
+
case 'upstream':
|
|
82
|
+
case 'parent': return 'dsh-badge-readonly';
|
|
83
|
+
default: return 'dsh-badge-blue';
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
var h = React.createElement;
|
|
87
|
+
return h('div', {
|
|
88
|
+
ref: containerRef,
|
|
89
|
+
style: { position: 'relative', display: 'inline-flex', alignItems: 'center' },
|
|
90
|
+
className: 'dsh-github-repo-selector-container',
|
|
91
|
+
}, h('button', {
|
|
92
|
+
type: 'button',
|
|
93
|
+
className: 'dsh-github-repo-switch-trigger',
|
|
94
|
+
onClick: toggleOpen,
|
|
95
|
+
title: `当前关联 ${associatedRepos.length} 个远程仓库(点击切换基准)`,
|
|
96
|
+
disabled: switching,
|
|
97
|
+
}, h('span', null, switching ? '⏳' : '⇄'), h('span', { style: { fontSize: '11px', fontWeight: 500 } }, '切换仓库'), h('span', { style: { fontSize: '9px', opacity: 0.7 } }, '▾')), isOpen
|
|
98
|
+
? h('div', { className: 'dsh-github-repo-dropdown' }, h('div', { className: 'dsh-github-repo-dropdown-header' }, h('span', null, '选择当前工作区基准仓库'), h('span', { style: { fontSize: '11px', opacity: 0.6 } }, `${associatedRepos.length} 可用`)), h('div', { className: 'dsh-github-repo-dropdown-list' }, associatedRepos.map(function (item) {
|
|
99
|
+
var isSelected = item.isCurrent || item.nameWithOwner.toLowerCase() === currentRepo;
|
|
100
|
+
return h('div', {
|
|
101
|
+
key: item.nameWithOwner,
|
|
102
|
+
className: 'dsh-github-repo-item' + (isSelected ? ' selected' : ''),
|
|
103
|
+
title: isSelected ? '当前正在使用的基准仓库' : `点击切换基准为 ${item.nameWithOwner}`,
|
|
104
|
+
onClick: function () {
|
|
105
|
+
if (!isSelected && !switching) {
|
|
106
|
+
handleSwitch(item.nameWithOwner, item.remoteName);
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
}, h('div', { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '8px' } }, h('div', { style: { display: 'flex', alignItems: 'center', gap: '6px', minWidth: 0 } }, h('span', { style: { color: isSelected ? 'var(--dsw-alias-link, #0969da)' : 'inherit', fontWeight: isSelected ? 600 : 400 } }, item.nameWithOwner), h('span', { className: 'dsh-github-badge ' + roleBadgeTone(item.role), style: { fontSize: '10px', padding: '0 5px' } }, roleLabel(item.role))), isSelected ? h('span', { style: { color: 'var(--dsw-alias-state-success, #1a7f37)', fontWeight: 600 } }, '✓') : null));
|
|
110
|
+
})), h('div', { className: 'dsh-github-repo-dropdown-footer' }, '💡 切换后系统将自动调用 gh repo set-default 对齐终端与面板'))
|
|
111
|
+
: null);
|
|
112
|
+
}
|
package/lib/ui/storage.d.ts
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export declare const GLOBAL_OVERVIEW_CACHE_KEY = "dsh_github_global_overview_snapshot_v1";
|
|
5
5
|
export declare const SYNC_SETTINGS_STORAGE_KEY = "dsh_github_sync_settings_v1";
|
|
6
|
+
/** PR 审阅弹窗文件区布局偏好(宽度 + 折叠态) */
|
|
7
|
+
export declare const PR_FILE_PANE_STORAGE_KEY = "dsh_github_pr_file_pane_v1";
|
|
8
|
+
/** 文件区默认宽度与边界(px)。下限保证路径可读,上限由容器宽度动态收敛 */
|
|
9
|
+
export declare const PR_FILE_PANE_DEFAULT_WIDTH = 280;
|
|
10
|
+
export declare const PR_FILE_PANE_MIN_WIDTH = 160;
|
|
11
|
+
/** 文件区最多占容器宽度的比例——再宽就没地方看 diff 了 */
|
|
12
|
+
export declare const PR_FILE_PANE_MAX_RATIO = 0.6;
|
|
6
13
|
export declare const DEFAULT_SYNC_SETTINGS: {
|
|
7
14
|
strategy: string;
|
|
8
15
|
cloudSyncIntervalMs: number;
|
|
@@ -24,3 +31,52 @@ export declare function getStoredRightbarSnapshot(cwd: string | null): {
|
|
|
24
31
|
savedAt: any;
|
|
25
32
|
} | null;
|
|
26
33
|
export declare function saveStoredRightbarData(cwd: string | null, data: any): void;
|
|
34
|
+
export declare const HEADER_CARDS_STORAGE_KEY = "dsh_github_header_cards_visible_v1";
|
|
35
|
+
/**
|
|
36
|
+
* 读取右侧栏上方仓库卡片与快捷操作栏的折叠/展开偏好(默认为 true 展开)
|
|
37
|
+
*/
|
|
38
|
+
export declare function getStoredHeaderCardsVisible(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 持久化保存右侧栏上方仓库卡片与快捷操作栏的展开/折叠偏好
|
|
41
|
+
*/
|
|
42
|
+
export declare function saveStoredHeaderCardsVisible(visible: boolean): void;
|
|
43
|
+
/** 右侧栏 PR / Issue 状态筛选偏好(按 cwd 隔离,不同仓库各自记住选择) */
|
|
44
|
+
export declare const RIGHTBAR_STATE_FILTER_KEY = "dsh_github_rightbar_state_filter_v1";
|
|
45
|
+
/** 合法筛选值;任何非法输入一律回落 all,绝不让脏数据把列表筛成空白 */
|
|
46
|
+
export declare const PR_STATE_FILTERS: string[];
|
|
47
|
+
export declare const ISSUE_STATE_FILTERS: string[];
|
|
48
|
+
/**
|
|
49
|
+
* 读取右侧栏 PR / Issue 的状态筛选偏好。
|
|
50
|
+
*
|
|
51
|
+
* 为什么按 cwd 分开存:同一个浏览器可能同时开着多个工作区,
|
|
52
|
+
* PR 集中在 A 仓库、Issue 集中在 B 仓库时,用户对两者的关注档位不同,
|
|
53
|
+
* 共用一个 key 会导致切仓库后筛选被另一个仓库的选择覆盖。
|
|
54
|
+
*/
|
|
55
|
+
export declare function getStoredRightbarStateFilter(cwd: string | null): {
|
|
56
|
+
pr: string;
|
|
57
|
+
issue: string;
|
|
58
|
+
};
|
|
59
|
+
/** 保存右侧栏状态筛选偏好(写入失败静默——纯 UI 偏好不值得弹错) */
|
|
60
|
+
export declare function saveStoredRightbarStateFilter(cwd: string | null, next: {
|
|
61
|
+
pr?: string;
|
|
62
|
+
issue?: string;
|
|
63
|
+
}): void;
|
|
64
|
+
/**
|
|
65
|
+
* 把期望宽度收敛到合法区间。
|
|
66
|
+
*
|
|
67
|
+
* 抽成纯函数的原因:边界逻辑(未超限/低于下限/超过上限)是被单测断言的规则,
|
|
68
|
+
* 埋在事件回调里就只能靠人工点点看。dnd 拖拽最容易出的 bug 就是能拖成负数
|
|
69
|
+
* 或把 diff 区域挤成 0 宽度——这里一次性挡住。
|
|
70
|
+
*
|
|
71
|
+
* @param next 拖拽得到的候选宽度
|
|
72
|
+
* @param containerWidth 容器实际宽度(未知时传 0,此时只做下限保护)
|
|
73
|
+
*/
|
|
74
|
+
export declare function clampFilePaneWidth(next: number, containerWidth: number): number;
|
|
75
|
+
export interface PrFilePanePrefs {
|
|
76
|
+
width: number;
|
|
77
|
+
hidden: boolean;
|
|
78
|
+
}
|
|
79
|
+
/** 读取文件区偏好;任何异常或脏数据都退回默认值,绝不因偏好损坏打挂弹窗 */
|
|
80
|
+
export declare function getPrFilePanePrefs(): PrFilePanePrefs;
|
|
81
|
+
/** 持久化文件区偏好(写入失败静默——布局偏好不值得弹错) */
|
|
82
|
+
export declare function savePrFilePanePrefs(prefs: PrFilePanePrefs): void;
|
package/lib/ui/storage.js
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const GLOBAL_OVERVIEW_CACHE_KEY = "dsh_github_global_overview_snapshot_v1";
|
|
5
5
|
export const SYNC_SETTINGS_STORAGE_KEY = "dsh_github_sync_settings_v1";
|
|
6
|
+
/** PR 审阅弹窗文件区布局偏好(宽度 + 折叠态) */
|
|
7
|
+
export const PR_FILE_PANE_STORAGE_KEY = "dsh_github_pr_file_pane_v1";
|
|
8
|
+
/** 文件区默认宽度与边界(px)。下限保证路径可读,上限由容器宽度动态收敛 */
|
|
9
|
+
export const PR_FILE_PANE_DEFAULT_WIDTH = 280;
|
|
10
|
+
export const PR_FILE_PANE_MIN_WIDTH = 160;
|
|
11
|
+
/** 文件区最多占容器宽度的比例——再宽就没地方看 diff 了 */
|
|
12
|
+
export const PR_FILE_PANE_MAX_RATIO = 0.6;
|
|
6
13
|
export const DEFAULT_SYNC_SETTINGS = {
|
|
7
14
|
strategy: "swr", // 'swr' | 'auto' | 'manual'
|
|
8
15
|
cloudSyncIntervalMs: 600000, // 云端定时周期:默认 10 分钟 (600,000ms,下限 5分钟)
|
|
@@ -132,3 +139,159 @@ export function saveStoredRightbarData(cwd, data) {
|
|
|
132
139
|
}
|
|
133
140
|
catch (e) { }
|
|
134
141
|
}
|
|
142
|
+
export const HEADER_CARDS_STORAGE_KEY = "dsh_github_header_cards_visible_v1";
|
|
143
|
+
/**
|
|
144
|
+
* 读取右侧栏上方仓库卡片与快捷操作栏的折叠/展开偏好(默认为 true 展开)
|
|
145
|
+
*/
|
|
146
|
+
export function getStoredHeaderCardsVisible() {
|
|
147
|
+
try {
|
|
148
|
+
var raw = localStorage.getItem(HEADER_CARDS_STORAGE_KEY);
|
|
149
|
+
if (raw === null || raw === undefined)
|
|
150
|
+
return true;
|
|
151
|
+
return raw !== "false";
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 持久化保存右侧栏上方仓库卡片与快捷操作栏的展开/折叠偏好
|
|
159
|
+
*/
|
|
160
|
+
export function saveStoredHeaderCardsVisible(visible) {
|
|
161
|
+
try {
|
|
162
|
+
localStorage.setItem(HEADER_CARDS_STORAGE_KEY, visible ? "true" : "false");
|
|
163
|
+
}
|
|
164
|
+
catch (e) { }
|
|
165
|
+
}
|
|
166
|
+
/** 右侧栏 PR / Issue 状态筛选偏好(按 cwd 隔离,不同仓库各自记住选择) */
|
|
167
|
+
export const RIGHTBAR_STATE_FILTER_KEY = "dsh_github_rightbar_state_filter_v1";
|
|
168
|
+
/** 合法筛选值;任何非法输入一律回落 all,绝不让脏数据把列表筛成空白 */
|
|
169
|
+
export const PR_STATE_FILTERS = ["all", "open", "merged", "closed"];
|
|
170
|
+
export const ISSUE_STATE_FILTERS = ["all", "open", "closed"];
|
|
171
|
+
function sanitizeFilter(value, allowed) {
|
|
172
|
+
var v = typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
173
|
+
return allowed.indexOf(v) >= 0 ? v : "all";
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* 把 cwd 映射为存储作用域键。
|
|
177
|
+
*
|
|
178
|
+
* 为什么不能只用 `replace(/[^a-zA-Z0-9_-]/g, "_")`:那是把不同路径**压成同一个键**
|
|
179
|
+
* (实测 `/a/b` 与 `/a_b` 都会变成 `_a_b`),两个仓库的筛选会互相覆盖。
|
|
180
|
+
* 这里改为「可读前缀 + 全路径哈希后缀」:既保留排查时可辨认的目录名,
|
|
181
|
+
* 又让任意两条路径都落在不同键上。
|
|
182
|
+
*
|
|
183
|
+
* 散列只用于去重,不需要密码学强度;FNV-1a 足够且零依赖。
|
|
184
|
+
*/
|
|
185
|
+
function scopeKeyForCwd(cwd) {
|
|
186
|
+
var raw = typeof cwd === "string" && cwd ? cwd : "default";
|
|
187
|
+
var hash = 0x811c9dc5;
|
|
188
|
+
for (var i = 0; i < raw.length; i++) {
|
|
189
|
+
hash ^= raw.charCodeAt(i);
|
|
190
|
+
// FNV-1a 32 位:Math.imul 保证不丢精度
|
|
191
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
192
|
+
}
|
|
193
|
+
var readable = raw.replace(/[^a-zA-Z0-9_-]/g, "_").slice(-24);
|
|
194
|
+
return readable + "~" + hash.toString(36);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 读取右侧栏 PR / Issue 的状态筛选偏好。
|
|
198
|
+
*
|
|
199
|
+
* 为什么按 cwd 分开存:同一个浏览器可能同时开着多个工作区,
|
|
200
|
+
* PR 集中在 A 仓库、Issue 集中在 B 仓库时,用户对两者的关注档位不同,
|
|
201
|
+
* 共用一个 key 会导致切仓库后筛选被另一个仓库的选择覆盖。
|
|
202
|
+
*/
|
|
203
|
+
export function getStoredRightbarStateFilter(cwd) {
|
|
204
|
+
var fallback = { pr: "all", issue: "all" };
|
|
205
|
+
try {
|
|
206
|
+
var raw = localStorage.getItem(RIGHTBAR_STATE_FILTER_KEY);
|
|
207
|
+
if (!raw)
|
|
208
|
+
return fallback;
|
|
209
|
+
var parsed = JSON.parse(raw);
|
|
210
|
+
if (!parsed || typeof parsed !== "object")
|
|
211
|
+
return fallback;
|
|
212
|
+
var entry = parsed[scopeKeyForCwd(cwd)];
|
|
213
|
+
if (!entry || typeof entry !== "object")
|
|
214
|
+
return fallback;
|
|
215
|
+
return {
|
|
216
|
+
pr: sanitizeFilter(entry.pr, PR_STATE_FILTERS),
|
|
217
|
+
issue: sanitizeFilter(entry.issue, ISSUE_STATE_FILTERS),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
catch (e) {
|
|
221
|
+
return fallback;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/** 保存右侧栏状态筛选偏好(写入失败静默——纯 UI 偏好不值得弹错) */
|
|
225
|
+
export function saveStoredRightbarStateFilter(cwd, next) {
|
|
226
|
+
try {
|
|
227
|
+
var raw = localStorage.getItem(RIGHTBAR_STATE_FILTER_KEY);
|
|
228
|
+
var parsed = {};
|
|
229
|
+
if (raw) {
|
|
230
|
+
try {
|
|
231
|
+
var p = JSON.parse(raw);
|
|
232
|
+
if (p && typeof p === "object")
|
|
233
|
+
parsed = p;
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
// 历史脏数据:整体重置,避免一条坏记录永久污染全部仓库的筛选
|
|
237
|
+
parsed = {};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
var scope = scopeKeyForCwd(cwd);
|
|
241
|
+
var prev = parsed[scope] && typeof parsed[scope] === "object" ? parsed[scope] : {};
|
|
242
|
+
parsed[scope] = {
|
|
243
|
+
pr: sanitizeFilter(next.pr !== undefined ? next.pr : prev.pr, PR_STATE_FILTERS),
|
|
244
|
+
issue: sanitizeFilter(next.issue !== undefined ? next.issue : prev.issue, ISSUE_STATE_FILTERS),
|
|
245
|
+
};
|
|
246
|
+
localStorage.setItem(RIGHTBAR_STATE_FILTER_KEY, JSON.stringify(parsed));
|
|
247
|
+
}
|
|
248
|
+
catch (e) { }
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* 把期望宽度收敛到合法区间。
|
|
252
|
+
*
|
|
253
|
+
* 抽成纯函数的原因:边界逻辑(未超限/低于下限/超过上限)是被单测断言的规则,
|
|
254
|
+
* 埋在事件回调里就只能靠人工点点看。dnd 拖拽最容易出的 bug 就是能拖成负数
|
|
255
|
+
* 或把 diff 区域挤成 0 宽度——这里一次性挡住。
|
|
256
|
+
*
|
|
257
|
+
* @param next 拖拽得到的候选宽度
|
|
258
|
+
* @param containerWidth 容器实际宽度(未知时传 0,此时只做下限保护)
|
|
259
|
+
*/
|
|
260
|
+
export function clampFilePaneWidth(next, containerWidth) {
|
|
261
|
+
const min = PR_FILE_PANE_MIN_WIDTH;
|
|
262
|
+
const max = containerWidth > 0
|
|
263
|
+
? Math.max(min, Math.floor(containerWidth * PR_FILE_PANE_MAX_RATIO))
|
|
264
|
+
: Number.MAX_SAFE_INTEGER;
|
|
265
|
+
const value = Number.isFinite(next) ? Math.round(next) : PR_FILE_PANE_DEFAULT_WIDTH;
|
|
266
|
+
return Math.min(Math.max(value, min), max);
|
|
267
|
+
}
|
|
268
|
+
/** 读取文件区偏好;任何异常或脏数据都退回默认值,绝不因偏好损坏打挂弹窗 */
|
|
269
|
+
export function getPrFilePanePrefs() {
|
|
270
|
+
const fallback = { width: PR_FILE_PANE_DEFAULT_WIDTH, hidden: false };
|
|
271
|
+
try {
|
|
272
|
+
var raw = localStorage.getItem(PR_FILE_PANE_STORAGE_KEY);
|
|
273
|
+
if (!raw)
|
|
274
|
+
return fallback;
|
|
275
|
+
var parsed = JSON.parse(raw);
|
|
276
|
+
if (!parsed || typeof parsed !== "object")
|
|
277
|
+
return fallback;
|
|
278
|
+
var w = Number(parsed.width);
|
|
279
|
+
return {
|
|
280
|
+
width: Number.isFinite(w) ? clampFilePaneWidth(w, 0) : fallback.width,
|
|
281
|
+
hidden: parsed.hidden === true,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
catch (e) {
|
|
285
|
+
return fallback;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/** 持久化文件区偏好(写入失败静默——布局偏好不值得弹错) */
|
|
289
|
+
export function savePrFilePanePrefs(prefs) {
|
|
290
|
+
try {
|
|
291
|
+
localStorage.setItem(PR_FILE_PANE_STORAGE_KEY, JSON.stringify({
|
|
292
|
+
width: clampFilePaneWidth(prefs.width, 0),
|
|
293
|
+
hidden: prefs.hidden === true,
|
|
294
|
+
}));
|
|
295
|
+
}
|
|
296
|
+
catch (e) { }
|
|
297
|
+
}
|
package/lib/ui/styles.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* DSH GitHub Flow - 主题自适应样式系统 (Light / Dark 动态联动)
|
|
3
3
|
* 遵循 DSH 原生 DSW (DeepSeek Web) 设计语言规范
|
|
4
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";
|
|
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/* fork \u8840\u7F18\u884C\uFF1A\u8BF4\u660E\u300C\u8FD9\u662F\u8C01\u7684\u4E0A\u6E38\u300D\uFF0C\u4E0A\u6E38\u540D\u53EF\u70B9\u51FB */\n.dsh-github-fork-line {\n font-size: 12px;\n margin-top: 4px;\n color: var(--dsw-alias-label-secondary, #656d76);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\nbody[data-ds-dark-theme] .dsh-github-fork-line {\n color: var(--dsw-alias-label-secondary, #bbb);\n}\n.dsh-github-fork-line a {\n color: var(--dsw-alias-link, #0969da);\n text-decoration: none;\n font-weight: 600;\n}\n.dsh-github-fork-line a:hover {\n text-decoration: underline;\n}\nbody[data-ds-dark-theme] .dsh-github-fork-line a {\n color: #58a6ff;\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\n/*\n * \u53EA\u8BFB\u5FBD\u7AE0\uFF1A\u4E0E yellow \u540C\u8272\u7CFB\u4F46\u63CF\u8FB9\u66F4\u660E\u663E\uFF0C\u56E0\u4E3A\u300C\u4F60\u6539\u4E0D\u4E86\u300D\u662F\u9700\u8981\u88AB\u770B\u89C1\u7684\u7EA6\u675F\u3002\n * \u72EC\u7ACB\u7C7B\u800C\u975E\u590D\u7528 yellow\uFF0C\u662F\u4E3A\u4E86\u5C06\u6765\u8C03\u6574\u53EA\u8BFB\u8BED\u4E49\u7684\u89C6\u89C9\u5F3A\u5EA6\u65F6\u4E0D\u7275\u52A8\u5176\u4ED6\u9EC4\u8272\u5FBD\u7AE0\u3002\n */\n.dsh-badge-readonly {\n background: rgba(154, 103, 0, 0.12);\n color: #9a6700;\n border: 1px solid rgba(154, 103, 0, 0.35);\n font-weight: 600;\n}\nbody[data-ds-dark-theme] .dsh-badge-readonly {\n background: rgba(210, 153, 34, 0.18);\n color: #d29922;\n border-color: rgba(210, 153, 34, 0.4);\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\n/* 19. \u5173\u8054\u4ED3\u5E93\u5207\u6362\u5668 (RepoSelectorDropdown) */\n.dsh-github-repo-switch-trigger {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 7px;\n font-size: 11px;\n font-weight: 500;\n border-radius: 12px;\n border: 1px solid rgba(130, 80, 223, 0.35);\n background: rgba(130, 80, 223, 0.1);\n color: #8250df;\n cursor: pointer;\n transition: all 0.15s ease;\n user-select: none;\n line-height: 16px;\n}\n.dsh-github-repo-switch-trigger:hover {\n background: rgba(130, 80, 223, 0.2);\n border-color: rgba(130, 80, 223, 0.6);\n}\nbody[data-ds-dark-theme] .dsh-github-repo-switch-trigger {\n border-color: rgba(163, 113, 247, 0.4);\n background: rgba(163, 113, 247, 0.15);\n color: #a371f7;\n}\nbody[data-ds-dark-theme] .dsh-github-repo-switch-trigger:hover {\n background: rgba(163, 113, 247, 0.25);\n border-color: #a371f7;\n}\n\n.dsh-github-repo-dropdown {\n position: absolute;\n top: 100%;\n left: 0;\n margin-top: 5px;\n width: 320px;\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-repo-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-repo-dropdown-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n font-size: 11px;\n font-weight: 600;\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n color: var(--dsw-alias-label-secondary, #57606a);\n}\nbody[data-ds-dark-theme] .dsh-github-repo-dropdown-header {\n background: var(--dsw-alias-bg-layer-1, #16161a);\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\n\n.dsh-github-repo-dropdown-list {\n overflow-y: auto;\n max-height: 260px;\n padding: 4px 0;\n}\n\n.dsh-github-repo-item {\n padding: 7px 12px;\n font-size: 12px;\n cursor: pointer;\n transition: background 0.12s ease;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\n.dsh-github-repo-item:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05));\n}\nbody[data-ds-dark-theme] .dsh-github-repo-item {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-repo-item:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(255, 255, 255, 0.06));\n}\n.dsh-github-repo-item.selected {\n background: rgba(9, 105, 218, 0.08);\n}\nbody[data-ds-dark-theme] .dsh-github-repo-item.selected {\n background: rgba(56, 139, 253, 0.15);\n}\n\n.dsh-github-repo-dropdown-footer {\n padding: 6px 10px;\n font-size: 10px;\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n border-top: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n color: var(--dsw-alias-label-tertiary, #656d76);\n line-height: 1.4;\n}\nbody[data-ds-dark-theme] .dsh-github-repo-dropdown-footer {\n background: var(--dsw-alias-bg-layer-1, #16161a);\n border-top-color: var(--dsw-alias-border-l1, #30363d);\n color: var(--dsw-alias-label-tertiary, #8b949e);\n}\n\n.dsh-github-switch-quicklink {\n font-size: 11px;\n cursor: pointer;\n color: var(--dsw-alias-link, #0969da);\n text-decoration: none;\n font-weight: 500;\n display: inline-flex;\n align-items: center;\n gap: 3px;\n margin-left: 6px;\n padding: 1px 6px;\n border-radius: 4px;\n background: rgba(9, 105, 218, 0.08);\n border: 1px solid rgba(9, 105, 218, 0.2);\n}\n.dsh-github-switch-quicklink:hover {\n text-decoration: none;\n background: rgba(9, 105, 218, 0.16);\n border-color: rgba(9, 105, 218, 0.4);\n}\nbody[data-ds-dark-theme] .dsh-github-switch-quicklink {\n color: #58a6ff;\n background: rgba(56, 139, 253, 0.15);\n border-color: rgba(56, 139, 253, 0.3);\n}\nbody[data-ds-dark-theme] .dsh-github-switch-quicklink:hover {\n background: rgba(56, 139, 253, 0.25);\n border-color: rgba(56, 139, 253, 0.5);\n}\n\n/* 20. PR \u5728\u7EBF\u8BE6\u60C5\u4E0E\u4EE3\u7801\u5BA1\u9605\u5DE5\u4F5C\u53F0 (PrDetailModal) */\n.dsh-github-pr-modal-dialog {\n width: 95% !important;\n max-width: 1040px !important;\n height: 88vh !important;\n max-height: 88vh !important;\n display: flex !important;\n flex-direction: column !important;\n overflow: hidden !important;\n padding: 0 !important;\n}\n\n.dsh-github-pr-modal-header {\n padding: 12px 16px !important;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-modal-header {\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-1, #16161a);\n}\n\n.dsh-github-pr-modal-tabs {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 6px 16px;\n background: var(--dsw-alias-bg-base, #ffffff);\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-modal-tabs {\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-pr-tab-btn {\n padding: 5px 12px;\n font-size: 12px;\n font-weight: 500;\n border-radius: 6px;\n border: 1px solid transparent;\n background: transparent;\n color: var(--dsw-alias-label-secondary, #656d76);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-pr-tab-btn:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05));\n color: var(--dsw-alias-label-primary, #1f2328);\n}\n.dsh-github-pr-tab-btn.active {\n background: var(--dsw-alias-interactive-bg-active, rgba(9, 105, 218, 0.1));\n color: var(--dsw-alias-link, #0969da);\n font-weight: 600;\n border-color: rgba(9, 105, 218, 0.25);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-tab-btn {\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-tab-btn:hover {\n background: rgba(255, 255, 255, 0.06);\n color: #f0f6fc;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-tab-btn.active {\n background: rgba(56, 139, 253, 0.15);\n color: #58a6ff;\n border-color: rgba(56, 139, 253, 0.4);\n}\n\n.dsh-github-pr-conversation-pane {\n padding: 16px !important;\n overflow-y: auto !important;\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n /* \u6EDA\u5230\u8FB9\u754C\u65F6\u4E0D\u628A\u6EDA\u52A8\u4F20\u7ED9\u5F39\u7A97\u5916\u5C42\uFF0C\u907F\u514D\u6574\u9875\u8DDF\u7740\u6EDA */\n overscroll-behavior: contain;\n}\n\n.dsh-github-pr-checks-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n border-radius: 6px;\n font-size: 11px;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-checks-bar {\n background: var(--dsw-alias-bg-layer-1, #16161a);\n border-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-pr-body-card {\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n border-radius: 6px;\n background: var(--dsw-alias-bg-base, #ffffff);\n overflow: hidden;\n /*\n * flex: 0 0 auto \u662F\u6EDA\u52A8\u80FD\u5426\u5DE5\u4F5C\u7684\u5173\u952E\u3002\n * \u7236\u5BB9\u5668 .dsh-github-pr-conversation-pane \u662F flex-direction: column\uFF0C\n * flex \u5B50\u9879\u9ED8\u8BA4 flex-shrink: 1 \u2014\u2014 \u5185\u5BB9\u53D8\u957F\u65F6\u4F1A\u88AB\u300C\u538B\u7F29\u300D\u800C\u4E0D\u662F\u6491\u5F00\u7236\u5BB9\u5668\uFF0C\n * \u7236\u5BB9\u5668\u7684 overflow-y: auto \u4E8E\u662F\u6C38\u8FDC\u4E0D\u89E6\u53D1\uFF0C\u957F\u5185\u5BB9\u88AB\u76F4\u63A5\u88C1\u6389\u3002\n * \u7981\u6B62\u6536\u7F29\u540E\u5361\u7247\u9AD8\u5EA6\u7531\u5185\u5BB9\u51B3\u5B9A\uFF0C\u7236\u5BB9\u5668\u624D\u80FD\u771F\u6B63\u6EDA\u52A8\u3002\n */\n flex: 0 0 auto;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-body-card {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n}\n\n.dsh-github-pr-comment-card {\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n border-radius: 6px;\n background: var(--dsw-alias-bg-base, #ffffff);\n overflow: hidden;\n margin-bottom: 10px;\n /* \u540C body-card\uFF1A\u7981\u6B62\u6536\u7F29\uFF0C\u5426\u5219\u7236\u5BB9\u5668\u6EDA\u4E0D\u52A8\uFF08\u89C1\u4E0A\u65B9\u6CE8\u91CA\uFF09 */\n flex: 0 0 auto;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-comment-card {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n}\n\n.dsh-github-pr-comment-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 6px 12px;\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n font-size: 11px;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-comment-header {\n background: var(--dsw-alias-bg-layer-1, #16161a);\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-pr-files-pane {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.dsh-github-pr-file-list {\n width: 280px;\n flex-shrink: 0;\n border-right: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n overflow-y: auto;\n padding: 6px 0;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-file-list {\n border-right-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-1, #16161a);\n}\n\n/*\n * \u62D6\u62FD\u5206\u9694\u6761\u3002\u5BBD\u5EA6 6px \u800C\u975E\u5E38\u89C1\u7684 1px\uFF1A\u7EC6\u6761\u51E0\u4E4E\u70B9\u4E0D\u4E2D\uFF0C\n * \u662F\u5206\u680F\u62D6\u62FD\u6700\u5E38\u89C1\u7684\u53EF\u7528\u6027\u7F3A\u9677\u3002\n */\n.dsh-github-pr-splitter {\n position: relative;\n flex-shrink: 0;\n width: 6px;\n cursor: col-resize;\n background: var(--dsw-alias-border-l2, #e1e4e8);\n transition: background 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.dsh-github-pr-splitter:hover {\n background: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-splitter {\n background: var(--dsw-alias-border-l1, #30363d);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-splitter:hover {\n background: #58a6ff;\n}\n\n/* \u6298\u53E0\u6309\u94AE\u8D34\u5728\u5206\u9694\u6761\u4E2D\u90E8\uFF0C\u59CB\u7EC8\u53EF\u89C1\u2014\u2014\u6298\u53E0\u540E\u8FD9\u662F\u552F\u4E00\u7684\u89C6\u89C9\u6062\u590D\u63D0\u793A */\n.dsh-github-pr-splitter-toggle {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n width: 16px;\n height: 32px;\n padding: 0;\n border: 1px solid var(--dsw-alias-border-l2, #d0d7de);\n border-radius: 3px;\n background: var(--dsw-alias-bg-base, #ffffff);\n color: var(--dsw-alias-label-secondary, #656d76);\n font-size: 8px;\n line-height: 1;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n}\n.dsh-github-pr-splitter-toggle:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.06));\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-splitter-toggle {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-splitter-toggle:hover {\n background: rgba(255, 255, 255, 0.08);\n color: #f0f6fc;\n}\n\n/*\n * PR \u5361\u7247\u6807\u9898\u884C\uFF1A\u6807\u9898\u5728\u5DE6\u3001\u8DF3\u8F6C\u6309\u94AE\u9489\u5728\u6700\u53F3\uFF0C\u4E14\u4E25\u683C\u4FDD\u6301\u540C\u4E00\u884C\u3002\n *\n * \u4E3A\u4EC0\u4E48\u9700\u8981\u8FD9\u4E2A\u5BB9\u5668\uFF1A.dsh-github-item \u672C\u8EAB\u662F flex-direction: column\uFF0C\n * \u82E5\u628A\u6309\u94AE\u76F4\u63A5\u653E\u8FDB\u53BB\uFF0C\u5B83\u4F1A\u72EC\u5360\u4E00\u6574\u884C\u3001\u53EA\u5269\u4E00\u4E2A\u5B64\u96F6\u96F6\u7684 \u2197 \u5B57\u7B26\uFF0C\n * \u65E2\u4E11\u4E5F\u8BA9\u7528\u6237\u770B\u4E0D\u51FA\u8FD9\u662F\u53EF\u70B9\u7684\u5165\u53E3\u3002\u5305\u8FDB\u6A2A\u5411 flex \u884C\u5373\u53EF\u89E3\u51B3\u3002\n */\n.dsh-github-pr-title-row {\n display: flex;\n align-items: center; /* \u6807\u9898\u5DF2\u5F3A\u5236\u5355\u884C\uFF0C\u5C45\u4E2D\u5BF9\u9F50\u5373\u300C\u540C\u4E00\u884C\u300D */\n gap: 10px;\n width: 100%;\n min-width: 0;\n}\n.dsh-github-pr-title-row .dsh-github-item-title {\n /*\n * flex: 0 1 auto \u2014\u2014 \u6807\u9898\u6309\u81EA\u8EAB\u5185\u5BB9\u5BBD\u5EA6\u5360\u636E\uFF0C\u53EF\u6536\u7F29\uFF08shrink 1\uFF09\u4F46\u4E0D\u6491\u6EE1\uFF08grow 0\uFF09\u3002\n *\n * \u4E3A\u4EC0\u4E48\u4E0D\u662F flex: 1 1 0%\uFF1A\n * \u6807\u9898\u884C\u91CC\u73B0\u5728\u8FD8\u6709\u72B6\u6001\u5FBD\u7AE0\uFF08MERGED/CLOSED\uFF09\u8DDF\u5728\u6807\u9898\u53F3\u4FA7\u3002\n * \u82E5\u6807\u9898 grow \u6491\u6EE1\u5168\u90E8\u5269\u4F59\u7A7A\u95F4\uFF0C\u5FBD\u7AE0\u4F1A\u88AB\u9876\u5230\u6700\u53F3\u8FB9\u7D27\u8D34\u300CGitHub \u2197\u300D\u6309\u94AE\uFF0C\n * \u770B\u8D77\u6765\u50CF\u4E24\u4E2A\u53F3\u8FB9\u63A7\u4EF6\u6324\u5728\u4E00\u8D77\uFF0C\u800C\u4E0D\u662F\u300C\u6807\u9898 \u2192 \u72B6\u6001 \u2192 \u6309\u94AE\u300D\u7684\u9605\u8BFB\u987A\u5E8F\u3002\n * \u6539\u6210\u4E0D\u6491\u6EE1\u540E\uFF0C\u5FBD\u7AE0\u81EA\u7136\u7D27\u8DDF\u5728\u6807\u9898\u6587\u5B57\u4E4B\u540E\uFF1B\n * \u300C\u6309\u94AE\u8D34\u6700\u53F3\u300D\u7531\u6309\u94AE\u81EA\u8EAB\u7684 margin-left: auto \u4FDD\u8BC1\uFF0C\u4E0E\u6B64\u5904\u65E0\u5173\u3002\n */\n flex: 0 1 auto;\n /*\n * min-width: 0 \u662F\u5173\u952E\u3002flex \u5B50\u9879\u9ED8\u8BA4 min-width: auto\uFF0C\n * PR \u6807\u9898\u7ECF\u5E38\u5F88\u957F\uFF0C\u4F1A\u6491\u7834\u5BB9\u5668\u628A\u53F3\u4FA7\u5FBD\u7AE0\u4E0E\u6309\u94AE\u9876\u51FA\u53EF\u89C6\u533A\u2014\u2014\n * \u6CA1\u6709\u8FD9\u4E00\u884C\uFF0Ctext-overflow: ellipsis \u6839\u672C\u4E0D\u4F1A\u751F\u6548\u3002\n */\n min-width: 0;\n /*\n * white-space: nowrap + ellipsis\uFF1A\u6807\u9898\u53EA\u5360\u4E00\u884C\u3002\n * \u82E5\u5141\u8BB8\u6362\u884C\uFF0C\u6807\u9898\u53D8\u6210\u4E24\u4E09\u884C\u540E\u5FBD\u7AE0\u4E0E\u6309\u94AE\u4F1A\u6D6E\u5728\u9996\u884C\u53F3\u4FA7\uFF0C\n * \u89C6\u89C9\u4E0A\u4E0E\u6587\u5B57\u672B\u884C\u9519\u4F4D\u2014\u2014\u7528\u6237\u770B\u5230\u7684\u5C31\u662F\u300C\u6309\u94AE\u8DD1\u5230\u4E0A\u9762\u53BB\u4E86\u300D\u3002\n * \u5B8C\u6574\u6807\u9898\u901A\u8FC7 title \u5C5E\u6027\u60AC\u6D6E\u67E5\u770B\uFF0C\u8FD9\u4E5F\u662F GitHub \u81EA\u8EAB\u7684\u505A\u6CD5\u3002\n */\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n /* \u6807\u9898\u4E0E\u6309\u94AE\u4E4B\u95F4\u9760 flex \u5206\u914D\u7559\u767D\uFF0C\u4E0D\u989D\u5916\u52A0 margin */\n text-decoration: none;\n}\n\n/*\n * \u300CGitHub \u2197\u300D\u8DF3\u8F6C\u6309\u94AE\u3002\n *\n * \u89C6\u89C9\u89C4\u683C\u6309\u622A\u56FE\u53CD\u9988\u91CD\u505A\uFF1A\u539F\u5148\u662F font-size 11px / padding 2px 8px\uFF0C\n * \u5728\u6DF1\u8272\u80CC\u666F\u4E0A\u53C8\u77EE\u53C8\u5C0F\u3001\u4E0E 13px \u6807\u9898\u4E0D\u5339\u914D\uFF0C\u770B\u8D77\u6765\u50CF\u8D34\u5728\u6587\u5B57\u4E0A\u7684\u6807\u7B7E\u3002\n * \u73B0\u5728\u653E\u5927\u5230\u4E0E\u6807\u9898\u540C\u4E00\u89C6\u89C9\u91CF\u7EA7\uFF0C\u5E76\u7ED9\u51FA\u660E\u786E\u7684\u60AC\u6D6E\u53CD\u9988\u3002\n */\n.dsh-github-pr-gh-btn {\n flex-shrink: 0; /* \u6C38\u4E0D\u538B\u7F29\uFF0C\u5B81\u53EF\u8BA9\u6807\u9898\u7701\u7565 */\n /*\n * margin-left: auto \u662F\u53CC\u4FDD\u9669\uFF1A\u5373\u4F7F\u6807\u9898\u56E0\u67D0\u79CD\u539F\u56E0\u6CA1\u5403\u6EE1 flex \u7A7A\u95F4\n * \uFF08\u5982\u7236\u5BB9\u5668\u5BBD\u5EA6\u5F02\u5E38\u3001flex-basis \u88AB\u8986\u76D6\uFF09\uFF0C\u6309\u94AE\u4ECD\u4F1A\u88AB\u63A8\u5230\u6700\u53F3\u4FA7\uFF0C\n * \u800C\u4E0D\u662F\u7D27\u8D34\u5728\u6807\u9898\u6587\u5B57\u5C41\u80A1\u540E\u9762\u3002\n */\n margin-left: auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 12px;\n font-weight: 500;\n line-height: 18px;\n padding: 3px 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-secondary, #57606a);\n text-decoration: none;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n.dsh-github-pr-gh-btn:hover {\n color: var(--dsw-alias-link, #0969da);\n border-color: var(--dsw-alias-link, #0969da);\n background: var(--dsw-alias-interactive-bg-hover, #eaeef2);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-gh-btn {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-gh-btn:hover {\n color: #58a6ff;\n border-color: #58a6ff;\n background: rgba(56, 139, 253, 0.15);\n}\n\n.dsh-github-pr-file-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 6px 12px;\n font-size: 11px;\n font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace;\n cursor: pointer;\n color: var(--dsw-alias-label-primary, #1f2328);\n transition: background 0.12s ease;\n}\n.dsh-github-pr-file-item:hover {\n background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05));\n}\n.dsh-github-pr-file-item.selected {\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-pr-file-item {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-file-item:hover {\n background: rgba(255, 255, 255, 0.06);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-file-item.selected {\n background: rgba(56, 139, 253, 0.18);\n color: #58a6ff;\n}\n\n.dsh-github-pr-diff-viewer {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--dsw-alias-bg-base, #ffffff);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-diff-viewer {\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n}\n\n.dsh-github-pr-diff-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-diff-toolbar {\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-1, #16161a);\n}\n\n/* \u884C\u7EA7\u5BA1\u67E5\u8BC4\u8BBA\uFF1A\u4E0E\u5BF9\u8BDD\u533A\u8BC4\u8BBA\u89C6\u89C9\u533A\u5206\uFF08\u5DE6\u4FA7\u7D2B\u8272\u63CF\u8FB9\uFF0C\u6697\u793A\u300C\u6302\u5728\u4EE3\u7801\u4E0A\u300D\uFF09 */\n.dsh-github-pr-line-comments {\n border-top: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n padding: 10px 12px 14px;\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-line-comments {\n border-top-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-1, #16161a);\n}\n.dsh-github-pr-line-comments-title {\n font-size: 11px;\n font-weight: 600;\n margin-bottom: 8px;\n color: var(--dsw-alias-label-secondary, #656d76);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-line-comments-title {\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\n.dsh-github-pr-line-comment-item {\n border-left: 3px solid rgba(130, 80, 223, 0.5);\n border-radius: 4px;\n background: var(--dsw-alias-bg-base, #ffffff);\n padding: 8px 10px;\n margin-bottom: 8px;\n}\nbody[data-ds-dark-theme] .dsh-github-pr-line-comment-item {\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n border-left-color: rgba(163, 113, 247, 0.6);\n}\n.dsh-github-pr-line-comment-head {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n font-size: 11px;\n margin-bottom: 5px;\n}\n.dsh-github-pr-line-comment-body {\n font-size: 12px;\n line-height: 1.6;\n white-space: pre-wrap;\n word-break: break-word;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-pr-line-comment-body {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n\n/* 21. PR \u5F39\u7A97\u5185\u7684 Markdown \u6392\u7248 (markdown-lite) */\n.dsh-github-md-body {\n padding: 12px;\n font-size: 12px;\n line-height: 1.7;\n word-break: break-word;\n color: var(--dsw-alias-label-primary, #1f2328);\n}\nbody[data-ds-dark-theme] .dsh-github-md-body {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n\n/* \u6807\u9898\uFF1AGitHub \u7684\u5C42\u7EA7\u5DEE\u8DDD\u6BD4\u6D4F\u89C8\u5668\u9ED8\u8BA4\u5C0F\uFF0C\u907F\u514D h3 \u8FC7\u5927\u6491\u7834\u5361\u7247 */\n.dsh-github-md-body .dsh-github-md-heading {\n margin: 14px 0 8px 0;\n font-weight: 600;\n line-height: 1.4;\n}\n.dsh-github-md-body h1.dsh-github-md-heading { font-size: 17px; }\n.dsh-github-md-body h2.dsh-github-md-heading { font-size: 15px; }\n.dsh-github-md-body h3.dsh-github-md-heading { font-size: 14px; }\n.dsh-github-md-body h4.dsh-github-md-heading { font-size: 13px; }\n.dsh-github-md-body h5.dsh-github-md-heading,\n.dsh-github-md-body h6.dsh-github-md-heading { font-size: 12px; opacity: 0.9; }\n.dsh-github-md-body > .dsh-github-md-heading:first-child {\n margin-top: 0;\n}\n\n.dsh-github-md-body .dsh-github-md-p {\n margin: 0 0 10px 0;\n}\n.dsh-github-md-body .dsh-github-md-p:last-child {\n margin-bottom: 0;\n}\n\n/* \u884C\u5185\u4EE3\u7801\uFF1A\u7528\u8FB9\u6846 + \u5E95\u8272\u4E0E\u6B63\u6587\u533A\u5206\uFF0C\u6BD4\u5355\u7EAF\u6539\u5B57\u4F53\u66F4\u6613\u8FA8\u8BC6 */\n.dsh-github-md-body .dsh-github-md-inline-code {\n font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace;\n font-size: 0.92em;\n padding: 1px 5px;\n border-radius: 4px;\n background: var(--dsw-alias-bg-subtle, rgba(0, 0, 0, 0.06));\n border: 1px solid var(--dsw-alias-border-subtle, rgba(0, 0, 0, 0.08));\n word-break: break-all;\n}\nbody[data-ds-dark-theme] .dsh-github-md-body .dsh-github-md-inline-code {\n background: rgba(255, 255, 255, 0.1);\n border-color: rgba(255, 255, 255, 0.12);\n}\n\n/* \u56F4\u680F\u4EE3\u7801\u5757\uFF1A\u6A2A\u5411\u53EF\u6EDA\uFF0C\u7EDD\u4E0D\u6362\u884C\u2014\u2014\u6362\u884C\u4F1A\u6BC1\u6389\u7F29\u8FDB\u8BED\u4E49 */\n.dsh-github-md-body .dsh-github-md-pre {\n margin: 10px 0;\n padding: 10px 12px;\n border-radius: 6px;\n overflow-x: auto;\n max-height: 420px;\n background: var(--dsw-alias-bg-subtle, rgba(0, 0, 0, 0.04));\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n}\nbody[data-ds-dark-theme] .dsh-github-md-body .dsh-github-md-pre {\n background: rgba(0, 0, 0, 0.3);\n border-color: var(--dsw-alias-border-l1, #30363d);\n}\n.dsh-github-md-body .dsh-github-md-pre code {\n font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace;\n font-size: 11px;\n line-height: 1.55;\n white-space: pre;\n display: block;\n}\n\n.dsh-github-md-body .dsh-github-md-list {\n margin: 8px 0;\n padding-left: 22px;\n}\n.dsh-github-md-body .dsh-github-md-list li {\n margin: 4px 0;\n}\n.dsh-github-md-body .dsh-github-md-task {\n list-style: none;\n margin-left: -18px;\n display: flex;\n align-items: flex-start;\n gap: 6px;\n}\n.dsh-github-md-body .dsh-github-md-checkbox {\n flex-shrink: 0;\n opacity: 0.8;\n}\n\n.dsh-github-md-body .dsh-github-md-quote {\n margin: 10px 0;\n padding: 6px 12px;\n border-left: 3px solid var(--dsw-alias-border-l3, #d0d7de);\n color: var(--dsw-alias-label-secondary, #656d76);\n background: var(--dsw-alias-bg-subtle, rgba(0, 0, 0, 0.02));\n border-radius: 0 4px 4px 0;\n}\n\n.dsh-github-md-body .dsh-github-md-hr {\n margin: 14px 0;\n border: none;\n border-top: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n}\nbody[data-ds-dark-theme] .dsh-github-md-body .dsh-github-md-hr {\n border-top-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n.dsh-github-md-body .dsh-github-md-link {\n color: var(--dsw-alias-link, #0969da);\n text-decoration: none;\n}\n.dsh-github-md-body .dsh-github-md-link:hover {\n text-decoration: underline;\n}\nbody[data-ds-dark-theme] .dsh-github-md-body .dsh-github-md-link {\n color: #58a6ff;\n}\n\n/* \u6298\u53E0/\u5C55\u5F00\u6309\u94AE\uFF1A\u4F4E\u8C03\u7684\u6587\u672C\u6309\u94AE\uFF0C\u4E0D\u62A2\u6B63\u6587\u89C6\u89C9 */\n.dsh-github-md-expand-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin: 0 0 4px 12px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 500;\n border-radius: 5px;\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, #57606a);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n.dsh-github-md-expand-btn:hover {\n color: var(--dsw-alias-link, #0969da);\n border-color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-md-expand-btn {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\nbody[data-ds-dark-theme] .dsh-github-md-expand-btn:hover {\n color: #58a6ff;\n border-color: #58a6ff;\n}\n\n/* 22. Issue \u5728\u7EBF\u67E5\u770B\u5F39\u7A97 (IssueDetailModal)\n *\n * \u4E3A\u4EC0\u4E48\u662F\u5355\u5217\u800C\u4E0D\u662F PR \u90A3\u6837\u7684\u53CC\u680F\uFF1AIssue \u6CA1\u6709 diff \u8F7D\u8377\uFF0C\u6CA1\u6709\u9700\u8981\u5E76\u6392\n * \u5BF9\u7167\u7684\u7B2C\u4E8C\u4E2A\u4FE1\u606F\u6E90\u3002\u628A\u5BBD\u5EA6\u5168\u90E8\u8BA9\u7ED9 Markdown \u6B63\u6587\uFF0C\u884C\u5BBD\u66F4\u63A5\u8FD1 80 \u5B57\u7B26\u7684\n * \u53EF\u8BFB\u533A\u95F4\uFF0C\u957F\u8BA8\u8BBA\u8BFB\u8D77\u6765\u6BD4\u6324\u5728\u5DE6\u534A\u8FB9\u8212\u670D\u5F97\u591A\u3002\n */\n.dsh-github-issue-modal-dialog {\n width: 92% !important;\n max-width: 880px !important;\n height: 84vh !important;\n max-height: 84vh !important;\n display: flex !important;\n flex-direction: column !important;\n overflow: hidden !important;\n padding: 0 !important;\n}\n\n.dsh-github-issue-modal-header {\n padding: 12px 16px !important;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-layer-1, #f6f8fa);\n flex-shrink: 0;\n}\nbody[data-ds-dark-theme] .dsh-github-issue-modal-header {\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-1, #16161a);\n}\n\n.dsh-github-issue-conversation-pane {\n padding: 16px !important;\n overflow-y: auto !important;\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 12px;\n /* \u6EDA\u5230\u8FB9\u754C\u4E0D\u628A\u6EDA\u52A8\u4F20\u7ED9\u5F39\u7A97\u5916\u5C42\uFF0C\u907F\u514D\u6574\u9875\u8DDF\u7740\u6EDA */\n overscroll-behavior: contain;\n}\n\n/* \u5143\u6570\u636E\u6761\uFF1A\u6807\u7B7E/\u6307\u6D3E\u4EBA/\u91CC\u7A0B\u7891/\u5173\u8054 PR \u5168\u90E8\u4EE5\u80F6\u56CA\u5448\u73B0\uFF0C\u4E00\u884C\u4E0D\u591F\u81EA\u7136\u6362\u884C */\n.dsh-github-issue-meta {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 6px;\n flex: 0 0 auto;\n}\n.dsh-github-issue-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 999px;\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, #57606a);\n font-size: 11px;\n line-height: 18px;\n white-space: nowrap;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* \u6807\u7B7E\u80F6\u56CA\u81EA\u8EAB\u5E26 label \u8272\uFF08\u884C\u5185 background/borderColor \u8986\u76D6\uFF09\uFF0C\n * \u8FD9\u91CC\u7684\u7C7B\u53EA\u7528\u4E8E\u8272\u70B9\u4E0E\u6587\u5B57\u5BF9\u5176\uFF0C\u4E0D\u8BBE\u80CC\u666F\u4EE5\u514D\u884C\u5185\u6837\u5F0F\u5931\u6548\u65F6\u53D8\u6210\u7070\u5757 */\n.dsh-github-issue-label-chip {\n color: var(--dsw-alias-label-primary, #1f2328);\n}\n/* \u903E\u671F\u91CC\u7A0B\u7891\uFF1A\u7528\u9519\u8BEF\u8272\u63CF\u8FB9\u63D0\u793A\u300C\u8FD9\u6761\u5DF2\u7ECF\u8FC7\u671F\u4E86\u300D\uFF0C\u5426\u5219\u548C\u6B63\u5E38 milestone \u957F\u5F97\u4E00\u6837 */\n.dsh-github-issue-chip-overdue {\n border-color: rgba(207, 34, 46, 0.5);\n color: var(--dsw-alias-state-error-primary, #cf222e);\n}\nbody[data-ds-dark-theme] .dsh-github-issue-chip-overdue {\n border-color: rgba(248, 81, 73, 0.5);\n color: #f85149;\n}\n.dsh-github-issue-label-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n/* \u53EF\u70B9\u51FB\u7684\u80F6\u56CA\uFF08\u56FE\u7247\u6E05\u5355\u5F00\u5173\u3001\u5173\u8054 PR \u5916\u94FE\uFF09\u5FC5\u987B\u6709 hover \u53CD\u9988\uFF0C\u5426\u5219\u770B\u4E0D\u51FA\u53EF\u70B9 */\n.dsh-github-issue-chip-btn,\n.dsh-github-issue-chip-link {\n cursor: pointer;\n text-decoration: none;\n font-family: inherit;\n transition: border-color 0.15s ease, color 0.15s ease;\n}\n.dsh-github-issue-chip-btn:hover,\n.dsh-github-issue-chip-link:hover {\n color: var(--dsw-alias-link, #0969da);\n border-color: var(--dsw-alias-link, #0969da);\n}\nbody[data-ds-dark-theme] .dsh-github-issue-chip {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n color: var(--dsw-alias-label-secondary, #8b949e);\n}\nbody[data-ds-dark-theme] .dsh-github-issue-label-chip {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\nbody[data-ds-dark-theme] .dsh-github-issue-chip-btn:hover,\nbody[data-ds-dark-theme] .dsh-github-issue-chip-link:hover {\n color: #58a6ff;\n border-color: #58a6ff;\n}\n\n/* \u56FE\u7247\u6E05\u5355\uFF1A\u5C55\u5F00\u540E\u9010\u884C\u5217\u51FA\u5916\u94FE\uFF0C\u4E0D\u4E0E\u6B63\u6587\u6DF7\u6392 */\n.dsh-github-issue-image-badge {\n display: inline-flex;\n flex-direction: column;\n gap: 6px;\n max-width: 100%;\n}\n.dsh-github-issue-image-links {\n display: flex;\n flex-direction: column;\n gap: 3px;\n padding: 6px 8px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n background: var(--dsw-alias-bg-base, #ffffff);\n}\nbody[data-ds-dark-theme] .dsh-github-issue-image-links {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n}\n.dsh-github-issue-image-link {\n font-size: 11px;\n font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace;\n color: var(--dsw-alias-link, #0969da);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.dsh-github-issue-image-link:hover {\n text-decoration: underline;\n}\n\n/* \u6B63\u6587\u4E0E\u8BC4\u8BBA\u5361\u7247\uFF1A\u540C PR \u5F39\u7A97\uFF0Cflex: 0 0 auto \u662F\u6EDA\u52A8\u80FD\u5426\u5DE5\u4F5C\u7684\u524D\u63D0 */\n.dsh-github-issue-body-card,\n.dsh-github-issue-comment-card {\n border: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n border-radius: 6px;\n background: var(--dsw-alias-bg-base, #ffffff);\n overflow: hidden;\n /* \u7981\u6B62\u6536\u7F29\uFF1A\u7236\u5BB9\u5668\u662F column flex\uFF0C\u9ED8\u8BA4 flex-shrink:1 \u4F1A\u538B\u7F29\u5361\u7247\n * \u800C\u4E0D\u662F\u6491\u5F00\u7236\u5BB9\u5668\uFF0C\u5BFC\u81F4 overflow-y:auto \u6C38\u4E0D\u89E6\u53D1\uFF08\u957F Issue \u6EDA\u4E0D\u52A8\uFF09 */\n flex: 0 0 auto;\n}\n.dsh-github-issue-comment-card {\n margin-bottom: 10px;\n}\nbody[data-ds-dark-theme] .dsh-github-issue-body-card,\nbody[data-ds-dark-theme] .dsh-github-issue-comment-card {\n border-color: var(--dsw-alias-border-l1, #30363d);\n background: var(--dsw-alias-bg-layer-2, #1e1e22);\n}\n\n.dsh-github-issue-comment-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: var(--dsw-alias-bg-module-platform, #f6f8fa);\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e1e4e8);\n font-size: 11px;\n}\nbody[data-ds-dark-theme] .dsh-github-issue-comment-header {\n background: var(--dsw-alias-bg-layer-1, #16161a);\n border-bottom-color: var(--dsw-alias-border-l1, #30363d);\n}\n\n/* \u6B63\u6587\u5BB9\u5668\u4E0D\u52A0 padding\uFF1ACollapsibleBody \u5185\u90E8\u7684 .dsh-github-md-body \u5DF2\u6709 12px\uFF0C\n * \u53CC\u5C42\u53E0\u52A0\u4F1A\u8BA9\u6B63\u6587\u6BD4\u8BC4\u8BBA\u7F29\u8FDB\u66F4\u6DF1\uFF0C\u89C6\u89C9\u4E0A\u8BEF\u8BFB\u6210\u5F15\u7528\u5757 */\n.dsh-github-issue-body-content {\n padding: 0;\n}\n\n.dsh-github-issue-timeline-title {\n margin: 4px 0 0 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #1f2328);\n flex: 0 0 auto;\n}\nbody[data-ds-dark-theme] .dsh-github-issue-timeline-title {\n color: var(--dsw-alias-label-primary, #f0f6fc);\n}\n\n.dsh-github-issue-empty-timeline {\n padding: 16px 0;\n text-align: center;\n font-size: 12px;\n opacity: 0.6;\n flex: 0 0 auto;\n}\n";
|
|
6
6
|
export declare function injectStyles(): () => void;
|