zen-gitsync 2.1.30 → 2.2.2

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.md CHANGED
@@ -1,147 +1,148 @@
1
- # zen-gitsync
2
-
3
- `zen-gitsync` 是一个简单的命令行工具,用于自动化 Git 提交和推送操作。只需在控制台输入 `g`,并输入提交内容,即可自动执行 `git add`、`git commit` 和 `git push` 操作,极大提升 Git 工作流程的效率。
4
-
5
- ## 安装
6
-
7
- 通过 npm 安装 `zen-gitsync`,并进行全局安装:
8
-
9
- ```bash
10
- npm install -g zen-gitsync
11
- ```
12
-
13
- ## 使用方法
14
-
15
- 1. 在终端中,输入 `g` 并按回车。
16
- 2. 输入提交信息,按回车确认提交。
17
- 3. 工具将自动查看远程分支并自动提交
18
-
19
-
20
- ### 示例:
21
- #### 交互式提交:
22
- ```bash
23
- $ g
24
- 请输入你的提交信息: 修复了登录页样式问题
25
- ```
26
- #### 直接提交:
27
- ```bash
28
- $ g -y
29
- ```
30
- #### 设置默认提交信息:
31
- ```bash
32
- $ g --set-default-message="提交"
33
- ```
34
- #### 获取默认提交信息:
35
- ```bash
36
- $ g get-config
37
- ```
38
- #### 传入message直接提交:
39
- ```bash
40
- $ g -m <message>
41
- $ g -m=<message>
42
- ```
43
-
44
- #### 查看帮助
45
- ```shell
46
- $ g -h
47
- $ g --help
48
- ```
49
-
50
- #### 文件锁定功能
51
- ```shell
52
- # 锁定文件(锁定后的文件不会被包含在提交中)
53
- $ g --lock-file=config.json
54
-
55
- # 解锁文件
56
- $ g --unlock-file=config.json
57
-
58
- # 查看所有锁定的文件
59
- $ g --list-locked
60
-
61
- # 检查文件是否被锁定
62
- $ g --check-lock=config.json
63
- ```
64
-
65
- #### 定时执行自动提交,默认间隔1小时
66
- ```bash
67
- $ g -y --interval
68
- $ g -y --interval=<seconds>
69
- ```
70
- #### 指定目录提交
71
- ```bash
72
- $ g --path=<path>
73
- ```
74
-
75
- ```bash
76
- $ g --cwd=<path>
77
- ```
78
-
79
- #### 添加项目script
80
- ```json
81
- {
82
- "scripts": {
83
- "g:y": "g -y"
84
- }
85
- }
86
- ```
87
-
88
- #### cmd同步文件夹
89
- ```shell
90
- start /min cmd /k "g -y --path=你要同步的文件夹 --interval"
91
- ```
92
-
93
- #### cmd 定时执行命令
94
- ```shell
95
- start /min cmd /k "g --cmd=\"echo hello\" --cmd-interval=5" # 每5秒执行一次echo hello
96
- start /min cmd /k "g --cmd=\"echo at-time\" --at=23:59" # 在23:59执行一次echo at-time
97
- ```
98
-
99
- #### 不显示git diff内容
100
- ```shell
101
- $ g --no-diff
102
- ```
103
-
104
- #### 格式化打印git log
105
- ```shell
106
- $ g log
107
- $ g log --n=5
108
- ```
109
-
110
- ## ✨ 新特性 (v2.0.0)
111
- - 新增图形用户界面(GUI)模式
112
- - 支持标准化的提交信息格式
113
-
114
- ### 启动图形界面:
115
- ```shell
116
- $ g ui
117
- ```
118
-
119
- ## 🔒 文件锁定功能
120
-
121
- 文件锁定功能允许您临时排除某些文件不被包含在 Git 提交中,而无需修改 `.gitignore` 文件。这对于以下场景特别有用:
122
-
123
- - 临时排除配置文件(如包含敏感信息的配置)
124
- - 跳过正在开发中的实验性文件
125
- - 避免提交临时的调试文件
126
-
127
- ### 特点:
128
- - ✅ 不修改 `.gitignore` 文件
129
- - ✅ 支持命令行和 Web UI 操作
130
- - ✅ 锁定状态持久保存
131
- - ✅ 支持相对路径和绝对路径
132
- - ✅ 自动跳过锁定文件,显示清晰的提示信息
133
-
134
- ### 使用场景示例:
135
- ```shell
136
- # 锁定配置文件,避免提交敏感信息
137
- $ g --lock-file=.env
138
-
139
- # 锁定正在开发的功能文件
140
- $ g --lock-file=src/experimental-feature.js
141
-
142
- # 查看当前锁定的文件
143
- $ g --list-locked
144
-
145
- # 开发完成后解锁文件
146
- $ g --unlock-file=src/experimental-feature.js
147
- ```
1
+ # zen-gitsync
2
+
3
+ `zen-gitsync` 是一个简单的命令行工具,用于自动化 Git 提交和推送操作。只需在控制台输入 `g`,并输入提交内容,即可自动执行 `git add`、`git commit` 和 `git push` 操作,极大提升 Git 工作流程的效率。
4
+
5
+ ## 安装
6
+
7
+ 通过 npm 安装 `zen-gitsync`,并进行全局安装:
8
+
9
+ ```bash
10
+ npm install -g zen-gitsync
11
+ ```
12
+
13
+ ## 使用方法
14
+
15
+ 1. 在终端中,输入 `g` 并按回车。
16
+ 2. 输入提交信息,按回车确认提交。
17
+ 3. 工具将自动查看远程分支并自动提交
18
+
19
+
20
+ ### 示例:
21
+ #### 交互式提交:
22
+ ```bash
23
+ $ g
24
+ 请输入你的提交信息: 修复了登录页样式问题
25
+ ```
26
+ #### 直接提交:
27
+ ```bash
28
+ $ g -y
29
+ ```
30
+ #### 设置默认提交信息:
31
+ ```bash
32
+ $ g --set-default-message="提交"
33
+ ```
34
+ #### 获取默认提交信息:
35
+ ```bash
36
+ $ g get-config
37
+ ```
38
+ #### 传入message直接提交:
39
+ ```bash
40
+ $ g -m <message>
41
+ $ g -m=<message>
42
+ ```
43
+
44
+ #### 查看帮助
45
+ ```shell
46
+ $ g -h
47
+ $ g --help
48
+ ```
49
+
50
+ #### 文件锁定功能
51
+ ```shell
52
+ # 锁定文件(锁定后的文件不会被包含在提交中)
53
+ $ g --lock-file=config.json
54
+
55
+ # 解锁文件
56
+ $ g --unlock-file=config.json
57
+
58
+ # 查看所有锁定的文件
59
+ $ g --list-locked
60
+
61
+ # 检查文件是否被锁定
62
+ $ g --check-lock=config.json
63
+ ```
64
+
65
+ #### 定时执行自动提交,默认间隔1小时
66
+ ```bash
67
+ $ g -y --interval
68
+ $ g -y --interval=<seconds>
69
+ ```
70
+ #### 指定目录提交
71
+ ```bash
72
+ $ g --path=<path>
73
+ ```
74
+
75
+ ```bash
76
+ $ g --cwd=<path>
77
+ ```
78
+
79
+ #### 添加项目script
80
+ ```json
81
+ {
82
+ "scripts": {
83
+ "g:y": "g -y"
84
+ }
85
+ }
86
+ ```
87
+
88
+ #### cmd同步文件夹
89
+ ```shell
90
+ start /min cmd /k "g -y --path=你要同步的文件夹 --interval"
91
+ ```
92
+
93
+ #### cmd 定时执行命令
94
+ ```shell
95
+ start /min cmd /k "g --cmd=\"echo hello\" --cmd-interval=5" # 每5秒执行一次echo hello
96
+ start /min cmd /k "g --cmd=\"echo at-time\" --at=23:59" # 在23:59执行一次echo at-time
97
+ ```
98
+
99
+ #### 不显示git diff内容
100
+ ```shell
101
+ $ g --no-diff
102
+ ```
103
+
104
+ #### 格式化打印git log
105
+ ```shell
106
+ $ g log
107
+ $ g log --n=5
108
+ ```
109
+
110
+ ## ✨ 新特性 (v2.0.0)
111
+ - 新增图形用户界面(GUI)模式
112
+ - 支持标准化的提交信息格式
113
+
114
+ ### 启动图形界面:
115
+ ```shell
116
+ $ g ui
117
+ ```
118
+ ![Zen GitSync UI](https://raw.githubusercontent.com/xz333221/zen-gitsync/main/public/images/zen-gitsync-ui.png)
119
+
120
+ ## 🔒 文件锁定功能
121
+
122
+ 文件锁定功能允许您临时排除某些文件不被包含在 Git 提交中,而无需修改 `.gitignore` 文件。这对于以下场景特别有用:
123
+
124
+ - 临时排除配置文件(如包含敏感信息的配置)
125
+ - 跳过正在开发中的实验性文件
126
+ - 避免提交临时的调试文件
127
+
128
+ ### 特点:
129
+ - ✅ 不修改 `.gitignore` 文件
130
+ - ✅ 支持命令行和 Web UI 操作
131
+ - ✅ 锁定状态持久保存
132
+ - ✅ 支持相对路径和绝对路径
133
+ - ✅ 自动跳过锁定文件,显示清晰的提示信息
134
+
135
+ ### 使用场景示例:
136
+ ```shell
137
+ # 锁定配置文件,避免提交敏感信息
138
+ $ g --lock-file=.env
139
+
140
+ # 锁定正在开发的功能文件
141
+ $ g --lock-file=src/experimental-feature.js
142
+
143
+ # 查看当前锁定的文件
144
+ $ g --list-locked
145
+
146
+ # 开发完成后解锁文件
147
+ $ g --unlock-file=src/experimental-feature.js
148
+ ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zen-gitsync",
3
- "version": "2.1.30",
3
+ "version": "2.2.2",
4
4
  "description": "一个 git 自动查看差异并提交的工具",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -28,6 +28,11 @@
28
28
  "start:vue": "cd ./src/ui/client && npm run dev",
29
29
  "start:server": "node server.js",
30
30
  "start:server:no-open": "node server.js --no-open",
31
+ "nrm:ls": "nrm ls",
32
+ "change:nrm:npm": "nrm use npm",
33
+ "change:nrm:lenovo-nexus": "nrm use lenovo-nexus",
34
+ "update:g": "npm install -g zen-gitsync",
35
+ "npm:ls:g": "npm ls -g",
31
36
  "release": "node ./scripts/release.js",
32
37
  "release:win": ".\\scripts\\release.bat"
33
38
  },
@@ -493,22 +493,10 @@ async function publishToNpm() {
493
493
  return;
494
494
  }
495
495
 
496
- // 切换到官方npm registry
497
- console.log(chalk.gray('切换到官方npm registry...'));
498
- try {
499
- execSync('nrm use npm', { stdio: 'inherit' });
500
- // 等待1s
501
- await new Promise(resolve => setTimeout(resolve, 1000));
502
- console.log(chalk.green('已切换到官方npm registry'));
503
- } catch (error) {
504
- console.error(chalk.yellow('切换npm registry失败:'), error);
505
- console.log(chalk.yellow('继续使用当前registry发布...'));
506
- }
507
-
508
496
  // 执行npm发布
509
497
  console.log(chalk.gray('执行npm发布...'));
510
498
  try {
511
- execSync('npm publish', { stdio: 'inherit' });
499
+ execSync('npm publish --registry=https://registry.npmjs.org/', { stdio: 'inherit' });
512
500
  console.log(chalk.green('已成功发布到NPM'));
513
501
  } catch (error) {
514
502
  console.error(chalk.red('发布到NPM失败:'), error);
package/src/config.js CHANGED
@@ -2,6 +2,7 @@ import { promises as fs } from 'fs';
2
2
  import path from 'path';
3
3
  import os from 'os';
4
4
  import chalk from 'chalk';
5
+ import { execSync } from 'child_process';
5
6
 
6
7
  const configPath = path.join(os.homedir(), '.git-commit-tool.json');
7
8
 
@@ -12,19 +13,67 @@ const defaultConfig = {
12
13
  lockedFiles: [] // 添加锁定文件数组
13
14
  };
14
15
 
15
- // 异步读取配置文件
16
- async function loadConfig() {
16
+ // 规范化项目路径作为配置键
17
+ function normalizeProjectPath(p) {
18
+ const resolved = path.resolve(p);
19
+ return process.platform === 'win32' ? resolved.toLowerCase() : resolved;
20
+ }
21
+
22
+ // 获取当前项目的唯一键(优先使用 Git 根目录)
23
+ function getCurrentProjectKey() {
24
+ try {
25
+ const gitRoot = execSync('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();
26
+ if (gitRoot) return normalizeProjectPath(gitRoot);
27
+ } catch (_) {
28
+ // 非 Git 项目或 git 不可用,降级到 CWD
29
+ }
30
+ return normalizeProjectPath(process.cwd());
31
+ }
32
+
33
+ // 从磁盘读取原始配置对象
34
+ async function readRawConfigFile() {
17
35
  try {
18
36
  const data = await fs.readFile(configPath, 'utf-8');
19
- return { ...defaultConfig, ...JSON.parse(data) };
20
- } catch (error) {
21
- return defaultConfig;
37
+ return JSON.parse(data);
38
+ } catch (_) {
39
+ return null;
40
+ }
41
+ }
42
+
43
+ // 将原始配置对象写回磁盘
44
+ async function writeRawConfigFile(obj) {
45
+ await fs.writeFile(configPath, JSON.stringify(obj, null, 2), 'utf-8');
46
+ }
47
+
48
+ // 异步读取配置文件
49
+ async function loadConfig() {
50
+ const key = getCurrentProjectKey();
51
+ const raw = await readRawConfigFile();
52
+
53
+ // 兼容旧版(全局扁平结构)
54
+ if (raw && !raw.projects) {
55
+ return { ...defaultConfig, ...raw };
22
56
  }
57
+
58
+ // 新版结构:{ projects: { [key]: projectConfig }, global?: {...} }
59
+ const projectConfig = raw?.projects?.[key];
60
+ return { ...defaultConfig, ...(projectConfig || {}) };
23
61
  }
24
62
 
25
63
  // 异步保存配置
26
64
  async function saveConfig(config) {
27
- await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
65
+ const key = getCurrentProjectKey();
66
+ const raw = (await readRawConfigFile()) || {};
67
+
68
+ // 确保 projects 容器存在
69
+ if (!raw.projects || typeof raw.projects !== 'object') {
70
+ raw.projects = {};
71
+ }
72
+
73
+ // 写入当前项目配置
74
+ raw.projects[key] = { ...defaultConfig, ...config };
75
+
76
+ await writeRawConfigFile(raw);
28
77
  }
29
78
  // 文件锁定管理函数
30
79
  async function lockFile(filePath) {
@@ -82,6 +131,31 @@ async function getLockedFiles() {
82
131
  return config.lockedFiles || [];
83
132
  }
84
133
 
134
+ // 全局“最近访问的目录”管理(保存在原始配置的顶层)
135
+ const MAX_RECENT_DIRS = 12;
136
+
137
+ async function getRecentDirectories() {
138
+ const raw = await readRawConfigFile();
139
+ const list = raw?.recentDirectories;
140
+ return Array.isArray(list) ? list : [];
141
+ }
142
+
143
+ async function saveRecentDirectory(dirPath) {
144
+ if (!dirPath || typeof dirPath !== 'string') return;
145
+ const raw = (await readRawConfigFile()) || {};
146
+ let list = Array.isArray(raw.recentDirectories) ? raw.recentDirectories.slice() : [];
147
+
148
+ // 规范化:Windows 下统一为小写,去掉重复,保持最新在前
149
+ const normalized = normalizeProjectPath(dirPath);
150
+ list = list.filter(p => normalizeProjectPath(p) !== normalized);
151
+ list.unshift(dirPath);
152
+ if (list.length > MAX_RECENT_DIRS) list = list.slice(0, MAX_RECENT_DIRS);
153
+
154
+ raw.recentDirectories = list;
155
+ await writeRawConfigFile(raw);
156
+ return list;
157
+ }
158
+
85
159
  // 添加配置管理函数
86
160
  async function handleConfigCommands() {
87
161
  if (process.argv.includes('get-config')) {
@@ -109,5 +183,7 @@ export default {
109
183
  unlockFile,
110
184
  isFileLocked,
111
185
  listLockedFiles,
112
- getLockedFiles
186
+ getLockedFiles,
187
+ getRecentDirectories,
188
+ saveRecentDirectory
113
189
  };
@@ -0,0 +1 @@
1
+ .card[data-v-15b61579]{background-color:#fff;border-radius:12px;box-shadow:0 2px 12px #0000000a;border:1px solid rgba(0,0,0,.03);height:100%;width:100%;display:flex;flex-direction:column;overflow:hidden;transition:all .3s ease;position:relative}.status-header[data-v-15b61579]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #f0f0f0}.status-header h2[data-v-15b61579]{margin:0;font-size:16px;font-weight:500;color:#303133}.header-actions[data-v-15b61579]{display:flex;align-items:center;gap:8px}.card-content[data-v-15b61579]{padding:8px;overflow-y:auto;overflow-x:hidden;flex:1;display:flex;flex-direction:column}.status-box[data-v-15b61579]{white-space:pre-wrap;font-family:monospace;background-color:#f8f9fa;padding:16px;border-radius:8px;margin-bottom:20px;max-height:200px;overflow-y:auto;overflow-x:hidden;border:1px solid #f0f0f0;font-size:14px;line-height:1.5;width:100%;box-sizing:border-box}.file-list-container[data-v-15b61579]{overflow-y:auto;flex:1;width:100%;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}.file-group[data-v-15b61579]{background-color:#f8f9fa;border-radius:8px;overflow:hidden;border:1px solid #ebeef5;margin-bottom:4px;display:flex;flex-direction:column;transition:box-shadow .3s ease}.file-group[data-v-15b61579]:hover{box-shadow:0 4px 12px #0000000d}.file-group[data-v-15b61579]:last-child{margin-bottom:0;flex:1 1 auto}.file-group-header[data-v-15b61579]{font-size:12px;font-weight:600;padding:6px 12px;background-color:#f0f2f5;color:#606266;border-bottom:1px solid #ebeef5;flex-shrink:0;cursor:pointer;display:flex;align-items:center;gap:6px;transition:background-color .2s ease;-webkit-user-select:none;user-select:none;min-height:28px}.file-group-header[data-v-15b61579]:hover{background-color:#e9ecef}.collapse-icon[data-v-15b61579]{transition:transform .2s ease;font-size:14px;color:#6c757d}.collapse-icon.collapsed[data-v-15b61579]{transform:rotate(-90deg)}.file-list[data-v-15b61579]{overflow-y:visible;min-height:30px;max-height:none;flex-grow:1;padding:0;margin:0}.file-list-container[data-v-15b61579]::-webkit-scrollbar{width:6px;height:6px}.file-list-container[data-v-15b61579]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.file-list-container[data-v-15b61579]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.file-list-container[data-v-15b61579]::-webkit-scrollbar-track{background-color:transparent}.file-list[data-v-15b61579]:empty{display:none}.empty-file-container[data-v-15b61579]{overflow-y:hidden!important;display:flex;flex-direction:column;align-items:stretch;flex:1}.empty-file-group[data-v-15b61579]{padding:16px;text-align:center;color:#909399;font-size:13px;font-style:italic;display:flex;align-items:center;justify-content:center;min-height:50px;background-color:#f8f9fa;border-radius:4px;margin:8px}.file-item[data-v-15b61579]{padding:6px 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #ebeef5;cursor:pointer;transition:all .2s ease;min-height:32px}.file-item[data-v-15b61579]:last-child{border-bottom:none}.file-item[data-v-15b61579]:hover{background-color:#ecf5ff}.file-info[data-v-15b61579]{display:flex;align-items:center;flex-grow:1;overflow:hidden;gap:8px}.file-status-indicator[data-v-15b61579]{width:8px;height:8px;border-radius:50%;background-color:#409eff;flex-shrink:0}.file-status-indicator.added[data-v-15b61579]{background-color:#67c23a}.file-status-indicator.modified[data-v-15b61579]{background-color:#409eff}.file-status-indicator.deleted[data-v-15b61579]{background-color:#f56c6c}.file-status-indicator.untracked[data-v-15b61579]{background-color:#e6a23c}.file-name-section[data-v-15b61579]{display:flex;align-items:center;min-width:0;gap:8px}.file-path-section[data-v-15b61579]{display:flex;align-items:center;flex-shrink:0;max-width:200px}.file-name[data-v-15b61579]{font-weight:500;color:#303133;flex-shrink:0;line-height:1.3;font-size:13px}.file-directory[data-v-15b61579]{font-size:11px;color:#909399;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0}.file-actions[data-v-15b61579]{display:flex;opacity:0;transition:opacity .2s ease}.file-item:hover .file-actions[data-v-15b61579]{opacity:1}.file-action-btn[data-v-15b61579]{width:20px!important;height:20px!important;min-width:20px!important;padding:0!important;font-size:11px!important}.empty-status[data-v-15b61579]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;background-color:#f9f9f9;border-radius:8px;flex-grow:1}.empty-icon[data-v-15b61579]{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background-color:#f0f2f5;border-radius:50%;margin-bottom:16px;font-size:28px;color:#909399;animation:pulse-15b61579 2s infinite ease-in-out}@keyframes pulse-15b61579{0%{transform:scale(1);opacity:.7}50%{transform:scale(1.05);opacity:1}to{transform:scale(1);opacity:.7}}.empty-text[data-v-15b61579]{font-size:18px;font-weight:500;color:#606266;margin-bottom:8px}.empty-subtext[data-v-15b61579]{font-size:14px;color:#909399;margin-bottom:20px}.status-box-wrap[data-v-15b61579]{height:100%;display:flex;flex-direction:column;gap:16px}.branch-status-info[data-v-15b61579]{margin-bottom:0;background-color:#f8f9fa;border-radius:8px;overflow:hidden;border:1px solid #ebeef5;transition:all .3s ease}.branch-status-info[data-v-15b61579]:hover{box-shadow:0 4px 12px #0000000d}.branch-sync-status[data-v-15b61579]{display:flex;align-items:center;padding:12px 16px;border-left:3px solid #e6a23c;margin-bottom:0;background-color:#fdf6ec}.sync-status-content[data-v-15b61579]{display:flex;align-items:center;flex-wrap:wrap;gap:10px;width:100%}.status-badges[data-v-15b61579]{display:flex;flex-direction:column;gap:8px;width:100%}.status-badge[data-v-15b61579]{display:flex;align-items:center;width:100%;border-radius:4px;padding:8px 12px;transition:all .3s ease}.status-badge.el-tag--warning[data-v-15b61579]{background-color:#fdf6ec;border-color:#faecd8}.status-badge.el-tag--info[data-v-15b61579]{background-color:#f4f4f5;border-color:#e9e9eb}.status-badge[data-v-15b61579]:hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000000d}.badge-content[data-v-15b61579]{display:flex;align-items:center;gap:8px;font-size:13px}.diff-dialog[data-v-15b61579]{height:calc(100vh - 150px)}[data-v-15b61579] .el-dialog__body{height:calc(100vh - 320px);overflow:auto;padding:0}.diff-content[data-v-15b61579]{flex:1;overflow-y:auto;padding:16px 20px;background-color:#fafafa;height:100%}.diff-formatted[data-v-15b61579]{font-family:JetBrains Mono,Fira Code,Consolas,Courier New,monospace;font-size:14px;line-height:1.6;white-space:pre-wrap;padding-bottom:20px}.no-diff[data-v-15b61579]{display:flex;align-items:center;justify-content:center;height:100%;color:#909399;font-size:14px}.file-navigation[data-v-15b61579]{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;border-top:1px solid #ebeef5;background-color:#f9f9fb}.counter-tag[data-v-15b61579]{font-family:monospace;font-size:14px;padding:6px 12px;min-width:80px;text-align:center}.nav-button[data-v-15b61579]{min-width:120px;transition:all .3s ease}.nav-button[data-v-15b61579]:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.diff-formatted[data-v-15b61579]::-webkit-scrollbar,.diff-content[data-v-15b61579]::-webkit-scrollbar{width:6px;height:6px}.diff-formatted[data-v-15b61579]::-webkit-scrollbar-thumb,.diff-content[data-v-15b61579]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.diff-formatted[data-v-15b61579]::-webkit-scrollbar-thumb:hover,.diff-content[data-v-15b61579]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.diff-formatted[data-v-15b61579]::-webkit-scrollbar-track,.diff-content[data-v-15b61579]::-webkit-scrollbar-track{background-color:transparent}.diff-formatted[data-v-15b61579],.diff-content[data-v-15b61579]{scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}.auto-update-switch[data-v-15b61579] .el-switch__core{transition:all .3s ease-in-out;box-shadow:0 2px 5px #0000001a}.auto-update-switch[data-v-15b61579] .el-switch__core:hover{box-shadow:0 2px 8px #0003}.auto-update-switch.is-checked[data-v-15b61579] .el-switch__core{box-shadow:0 2px 5px #67c23a4d}.auto-update-switch.is-checked[data-v-15b61579] .el-switch__core:hover{box-shadow:0 2px 8px #67c23a80}.el-button[data-v-15b61579]{transition:all .3s ease}.el-button[data-v-15b61579]:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.card-content[data-v-15b61579] .el-loading-mask{background-color:#fffc;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:10}.card-content[data-v-15b61579] .el-loading-spinner{transform:scale(1.2)}.card-content[data-v-15b61579] .el-loading-text{font-size:16px;color:#409eff;font-weight:700;margin-top:10px}.diff-header{font-weight:700;background-color:#e6f1fc;padding:8px 12px;margin:10px 0;border-radius:6px;color:#0366d6;border-bottom:1px solid #c8e1ff}.diff-old-file,.diff-new-file{color:#586069;padding:4px 8px;font-family:monospace}.diff-hunk-header{color:#6f42c1;background-color:#f1f8ff;padding:4px 8px;margin:8px 0;border-radius:4px;font-family:monospace}.diff-added{background-color:#e6ffed;color:#22863a;padding:2px 8px;border-left:4px solid #22863a;font-family:monospace;display:block;margin:2px 0}.diff-removed{background-color:#ffeef0;color:#cb2431;padding:2px 8px;border-left:4px solid #cb2431;font-family:monospace;display:block;margin:2px 0}.diff-context{color:#444;padding:2px 8px;font-family:monospace;display:block;margin:2px 0;background-color:#fafbfc}.locked-files-group{background-color:#fff7e6;border:1px solid #ffd591}.locked-files-group .file-group-header{background-color:#fff2e8;color:#d46b08;display:flex;align-items:center;gap:8px}.locked-files-group .info-icon{color:#d46b08;cursor:help}.locked-file-item{background-color:#fffbf0;border-left:3px solid #ffa940}.locked-file-item:hover{background-color:#fff7e6}.file-status-indicator.locked{background-color:#ffa940;border-radius:50%;position:relative}.file-status-indicator.locked:before{content:"🔒";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:8px}.locked-file-name{color:#d46b08!important;font-weight:500;display:flex;align-items:center;gap:4px}.lock-indicator{color:#d46b08;font-size:12px;opacity:.8}.file-status-indicator.modified.locked{background:linear-gradient(45deg,#1890ff 50%,#ffa940 50%)}.file-status-indicator.untracked.locked,.file-status-indicator.added.locked{background:linear-gradient(45deg,#52c41a 50%,#ffa940 50%)}.file-status-indicator.deleted.locked{background:linear-gradient(45deg,#ff4d4f 50%,#ffa940 50%)}.empty-locked-files{text-align:center;padding:40px 20px;color:#666}.empty-locked-files .empty-icon{font-size:48px;color:#d9d9d9;margin-bottom:16px}.empty-locked-files p{margin:8px 0}.empty-tip{font-size:12px;color:#999}.locked-files-list{max-height:400px;overflow-y:auto}.locked-files-header{display:flex;align-items:center;gap:8px;padding:12px 16px;background-color:#fff7e6;border:1px solid #ffd591;border-radius:6px;margin-bottom:16px;color:#d46b08;font-weight:500}.locked-files-header .info-icon{color:#d46b08;cursor:help}.lock-feature-description{background-color:#f6f8fa;border:1px solid #e1e4e8;border-radius:8px;padding:16px;margin-bottom:16px}.description-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.description-icon{color:#1890ff;font-size:16px}.description-title{font-weight:600;color:#262626;font-size:14px}.description-content{font-size:13px;line-height:1.6;color:#595959}.description-content p{margin:8px 0}.description-content ul{margin:4px 0 12px;padding-left:20px}.description-content li{margin:4px 0}.locked-file-items{display:flex;flex-direction:column;gap:8px}.locked-file-item{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background-color:#fffbf0;border:1px solid #ffd591;border-radius:6px;transition:all .2s ease}.locked-file-item:hover{background-color:#fff7e6;border-color:#ffa940}@keyframes snakeBorder-361c9b7e{0%,to{border-top:2px solid #409EFF;border-right:2px solid transparent;border-bottom:2px solid transparent;border-left:2px solid transparent}25%{border-top:2px solid #409EFF;border-right:2px solid #67C23A;border-bottom:2px solid transparent;border-left:2px solid transparent}50%{border-top:2px solid transparent;border-right:2px solid #67C23A;border-bottom:2px solid #409EFF;border-left:2px solid transparent}75%{border-top:2px solid transparent;border-right:2px solid transparent;border-bottom:2px solid #409EFF;border-left:2px solid #67C23A}}@keyframes glowPulse-361c9b7e{0%,to{box-shadow:0 0 8px #409eff66}50%{box-shadow:0 0 12px #67c23a80}}.card[data-v-361c9b7e]{background-color:#fff;border-radius:8px;box-shadow:0 2px 10px #00000008;border:1px solid rgba(0,0,0,.03);height:100%;width:100%;display:flex;flex-direction:column;overflow:hidden;position:relative}.card-header h2[data-v-361c9b7e]{margin:0;font-size:16px;font-weight:500;color:#303133}.header-actions[data-v-361c9b7e]{display:flex;align-items:center;gap:8px}.card-content[data-v-361c9b7e]{padding:8px;overflow-y:auto;flex:1}.actions-section h3[data-v-361c9b7e]{margin-top:0;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #dcdfe6;font-size:16px;color:#303133;font-weight:500}.operations-wrapper[data-v-361c9b7e]{display:flex;gap:10px}.action-groups[data-v-361c9b7e]{display:flex;flex-direction:column;gap:12px}.action-group[data-v-361c9b7e]{background-color:#f9f9f9;border-radius:6px;padding:12px 14px;box-shadow:0 2px 8px #00000014;transition:all .3s ease;flex:1}.action-group[data-v-361c9b7e]:hover{box-shadow:0 4px 12px #0000001f}.group-title[data-v-361c9b7e]{font-size:13px;font-weight:700;margin-bottom:8px;color:#606266;text-align:left;display:block;position:relative;padding-left:6px;border-bottom:1px solid rgba(0,0,0,.06);padding-bottom:6px}.group-buttons[data-v-361c9b7e]{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;padding:0}.action-button[data-v-361c9b7e]{font-size:14px;font-weight:500;flex:1;min-width:100px;border-radius:4px;height:36px;padding:0 10px}.action-button[data-v-361c9b7e]:hover{transform:translateY(-1px);box-shadow:0 2px 5px #00000026}.action-button[data-v-361c9b7e]:active{transform:translateY(0)}.command-text[data-v-361c9b7e],.command-text-long[data-v-361c9b7e]{display:none}.standard-commit-form[data-v-361c9b7e]{display:flex;flex-direction:column;gap:8px;margin-bottom:15px}.standard-commit-header[data-v-361c9b7e]{display:flex;flex-direction:column;gap:4px;width:100%}.type-scope-container[data-v-361c9b7e]{display:flex;gap:10px;width:100%;margin-bottom:10px}.type-select[data-v-361c9b7e]{width:35%}.scope-wrapper[data-v-361c9b7e]{display:flex;align-items:center;gap:5px;width:65%}.commit-form[data-v-361c9b7e]{display:flex;flex-direction:column;gap:8px}.description-container[data-v-361c9b7e]{display:flex;align-items:center;gap:5px;width:100%}.scope-input[data-v-361c9b7e],.description-input[data-v-361c9b7e]{flex-grow:1}.settings-button[data-v-361c9b7e]{flex-shrink:0}.preview-section[data-v-361c9b7e]{background-color:#f5f7fa;padding:10px;border-radius:4px}.preview-title[data-v-361c9b7e]{font-weight:700;margin-bottom:5px}.preview-content[data-v-361c9b7e]{white-space:pre-wrap;font-family:monospace;margin:0;padding:10px;background-color:#ebeef5;border-radius:4px}.template-container[data-v-361c9b7e]{display:flex;flex-direction:column;height:calc(85vh - 100px);overflow-y:auto;padding:5px}.template-form[data-v-361c9b7e]{margin-bottom:20px;background-color:#f8f9fa;padding:15px;border-radius:6px;border:1px solid #ebeef5}.template-form-buttons[data-v-361c9b7e]{display:flex;gap:10px;margin-top:12px;justify-content:flex-end}.template-input[data-v-361c9b7e]{flex-grow:1}.template-list[data-v-361c9b7e]{overflow-y:auto;height:100%}.template-list h3[data-v-361c9b7e]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.template-item[data-v-361c9b7e]{margin-bottom:10px;transition:all .2s ease;border:1px solid #ebeef5}.template-item[data-v-361c9b7e]:hover{background-color:#f5f7fa;transform:translateY(-2px);box-shadow:0 2px 12px #0000001a}.template-content[data-v-361c9b7e]{flex-grow:1;margin-right:10px;word-break:break-all;padding:5px 0;color:#303133;font-weight:500}.template-actions[data-v-361c9b7e]{display:flex;gap:8px;justify-content:flex-end;min-width:180px;flex-shrink:0}.options-row[data-v-361c9b7e]{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.code-command[data-v-361c9b7e]{background-color:#2d2d2d;color:#f8f8f2;font-family:Courier New,Courier,monospace;padding:10px;border-radius:4px;overflow-x:auto;white-space:pre;font-size:14px}@media (min-width: 768px){.layout-container[data-v-361c9b7e]{flex-direction:row}.commit-section[data-v-361c9b7e]{flex:3}.actions-section[data-v-361c9b7e]{width:320px}.operations-wrapper[data-v-361c9b7e]{flex-direction:column}}.git-config-warning[data-v-361c9b7e]{width:100%}.config-command[data-v-361c9b7e]{background-color:#2d2d2d;color:#f8f8f2;font-family:Courier New,Courier,monospace;padding:10px;border-radius:4px;margin-top:10px;white-space:pre}@keyframes pushing-pulse-361c9b7e{0%{box-shadow:0 0 #67c23a66}70%{box-shadow:0 0 0 15px #67c23a00}to{box-shadow:0 0 #67c23a00}}@keyframes pushing-border-361c9b7e{0%{border-color:#67c23a}50%{border-color:#85ce61}to{border-color:#67c23a}}.card.is-pushing[data-v-361c9b7e]{animation:pushing-border-361c9b7e 1.5s infinite ease-in-out;box-shadow:0 4px 12px #0000001a;transition:all .3s ease}.push-button[data-v-361c9b7e]{background-color:#67c23a;border-color:#67c23a}.push-button[data-v-361c9b7e]:hover{background-color:#85ce61;border-color:#85ce61}.push-button.is-loading[data-v-361c9b7e],.push-button.is-loading[data-v-361c9b7e]:hover,.push-button.is-loading[data-v-361c9b7e]:focus{animation:pushing-pulse-361c9b7e 1.5s infinite;background-color:#67c23a!important;border-color:#67c23a!important}.el-button.push-button.is-loading .el-loading-spinner[data-v-361c9b7e]{color:#fff!important}@keyframes one-click-push-glow-361c9b7e{0%{box-shadow:0 0 5px #67c23a80}50%{box-shadow:0 0 20px #67c23acc}to{box-shadow:0 0 5px #67c23a80}}.action-button.one-click-push[data-v-361c9b7e]{position:relative;overflow:hidden}.action-button.one-click-push.is-loading[data-v-361c9b7e],.action-button.one-click-push.is-loading[data-v-361c9b7e]:hover{animation:one-click-push-glow-361c9b7e 1.5s infinite;background-color:#67c23a!important;border-color:#67c23a!important}@keyframes push-success-361c9b7e{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.push-success-indicator[data-v-361c9b7e]{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;background-color:#fff;border-radius:12px;padding:20px 30px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;align-items:center;justify-content:center;animation:push-success-361c9b7e .5s ease-out;z-index:9999;width:200px;height:200px}.push-success-icon[data-v-361c9b7e]{font-size:64px;color:#67c23a;margin-bottom:16px;animation:bounce-361c9b7e .8s ease-in-out}@keyframes bounce-361c9b7e{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-20px)}60%{transform:translateY(-10px)}}.push-success-text[data-v-361c9b7e]{font-size:20px;font-weight:700;color:#303133;text-align:center}.reset-button[data-v-361c9b7e]{background-color:#909399;border-color:#909399}.reset-button[data-v-361c9b7e]:hover{background-color:#a6a9ad;border-color:#a6a9ad}.el-button+.el-button[data-v-361c9b7e]{margin-left:0}.pushing-indicator[data-v-361c9b7e]{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;background-color:#409eff;border-radius:12px;padding:20px 30px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:9999;width:200px;height:200px;color:#fff}.form-bottom-actions[data-v-361c9b7e]{display:block;padding:8px;background-color:#f5f7fa;border-radius:6px;box-shadow:0 2px 8px #00000014;transition:all .3s ease}.form-bottom-actions[data-v-361c9b7e]:hover{box-shadow:0 4px 12px #0000001f}.actions-flex-container[data-v-361c9b7e]{display:flex;justify-content:space-between;gap:10px;width:100%}.left-actions[data-v-361c9b7e]{flex:3;display:flex;align-items:center}.right-actions[data-v-361c9b7e]{flex:2;display:flex;align-items:center;justify-content:center}.button-grid[data-v-361c9b7e]{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:6px;width:100%;height:100%}.button-grid .el-button[data-v-361c9b7e]{margin:0;height:100%;min-height:36px;display:flex;align-items:center;justify-content:center;padding:8px 15px}.button-grid .el-button[data-v-361c9b7e]:first-child{grid-column:1 / 2;grid-row:1 / 2}.button-grid .el-button[data-v-361c9b7e]:nth-child(2){grid-column:2 / 3;grid-row:1 / 2}.button-grid .el-button[data-v-361c9b7e]:last-child{grid-column:1 / 3;grid-row:2 / 3}.one-push-button[data-v-361c9b7e]{height:100%;width:100%;padding:10px 15px;background:linear-gradient(135deg,#4169e1,#5e81f4);border:none;border-radius:8px;box-shadow:0 4px 10px #4169e140;transition:all .3s ease}.one-push-content[data-v-361c9b7e]{display:flex;align-items:center;justify-content:center;height:100%}.one-push-icon[data-v-361c9b7e]{font-size:24px;margin-right:10px}.one-push-desc[data-v-361c9b7e]{font-size:12px;opacity:.8;margin-top:4px}.pushing-text[data-v-361c9b7e]{font-size:20px;font-weight:700;text-align:center}.pushing-spinner[data-v-361c9b7e]{margin-bottom:16px}.circular[data-v-361c9b7e]{height:64px;width:64px;animation:pushing-rotate-361c9b7e 2s linear infinite}.path[data-v-361c9b7e]{stroke:#fff;stroke-width:4;stroke-linecap:round;stroke-dasharray:90,150;stroke-dashoffset:0;animation:pushing-dash-361c9b7e 1.5s ease-in-out infinite}@keyframes pushing-rotate-361c9b7e{to{transform:rotate(360deg)}}@keyframes pushing-dash-361c9b7e{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.message-template-container[data-v-361c9b7e]{display:flex;flex-direction:column;height:calc(100vh - 278px);overflow:hidden}.templates-container[data-v-361c9b7e]{display:flex;gap:20px;margin-top:15px;flex:1;overflow:hidden}.message-templates-list[data-v-361c9b7e]{flex:3;display:flex;flex-direction:column;border-right:1px solid #ebeef5;padding-right:15px;height:calc(100vh - 432px)}.message-templates-list h3[data-v-361c9b7e]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.current-default-message[data-v-361c9b7e]{flex:2;display:flex;flex-direction:column;gap:15px;padding-left:15px}.current-default-message h3[data-v-361c9b7e]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.templates-scroll-area[data-v-361c9b7e]{overflow-y:auto;padding-right:5px;flex:1}.default-message-card[data-v-361c9b7e]{margin-bottom:15px;box-shadow:0 2px 8px #00000014;border-radius:4px;transition:all .3s ease}.default-message-card[data-v-361c9b7e]:hover{box-shadow:0 4px 12px #0000001f}.default-message-content[data-v-361c9b7e]{padding:12px 15px;background-color:#f0f9eb;border-left:3px solid #67c23a;font-weight:500;word-break:break-all;min-height:60px;display:flex;align-items:center;border-radius:0 4px 4px 0;color:#303133}.message-help-text[data-v-361c9b7e]{background-color:#f8f9fa;border-radius:4px;padding:15px;font-size:14px;color:#606266;border-left:3px solid #909399;margin-top:auto;box-shadow:0 2px 8px #0000000d}.message-help-text h4[data-v-361c9b7e]{margin-top:0;margin-bottom:10px;color:#303133;font-size:15px}.message-help-text p[data-v-361c9b7e]{margin:8px 0;line-height:1.5}.advanced-options-toggle[data-v-361c9b7e]{display:flex;align-items:center;justify-content:center;padding:8px 0;background-color:#f5f7fa;border-radius:4px;cursor:pointer;transition:all .3s ease;-webkit-user-select:none;user-select:none}.advanced-options-toggle[data-v-361c9b7e]:hover{background-color:#ebeef5;color:#409eff}.toggle-icon[data-v-361c9b7e]{margin-left:8px;transition:transform .3s ease}.toggle-icon.is-active[data-v-361c9b7e]{transform:rotate(180deg)}.advanced-fields[data-v-361c9b7e]{margin-top:10px;display:flex;flex-direction:column;gap:15px;animation:fade-in-361c9b7e .3s ease-in-out}@keyframes fade-in-361c9b7e{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.merge-dialog-content[data-v-361c9b7e]{padding:0 10px}.merge-intro[data-v-361c9b7e]{margin-bottom:20px;color:#606266}.merge-options[data-v-361c9b7e]{display:flex;flex-direction:column;gap:10px}.dialog-footer[data-v-361c9b7e]{display:flex;justify-content:flex-end;gap:10px}.merge-confirm-btn[data-v-361c9b7e]{margin-left:10px}.merge-button[data-v-361c9b7e]{background-color:#409eff;border-color:#409eff}.branch-group[data-v-361c9b7e]{border-top:none}.branch-group .group-title[data-v-361c9b7e]{color:#606266;font-weight:500;margin-bottom:12px}[data-v-361c9b7e] .el-checkbox__label{white-space:normal;line-height:1.4}.stash-list-content[data-v-361c9b7e]{padding:20px 0}.stash-list-actions[data-v-361c9b7e]{margin-top:20px;display:flex;justify-content:flex-end}.stash-dialog-content p[data-v-361c9b7e]{margin-bottom:20px;color:#606266}.reset-group[data-v-361c9b7e]{border-top:none}.card-header[data-v-361c9b7e]{padding:8px 16px;border-bottom:1px solid #f0f0f0;display:flex;justify-content:space-between;align-items:center}.git-tools-button[data-v-361c9b7e]{transition:transform .3s}.git-tools-button[data-v-361c9b7e]:hover{transform:rotate(90deg)}.layout-container[data-v-361c9b7e]{display:flex;flex-direction:column;gap:15px;height:100%}.commit-section[data-v-361c9b7e]{flex:1;width:100%;min-width:0}[data-v-361c9b7e] .git-operations-drawer .el-drawer__header{margin-bottom:10px;padding:12px 16px;border-bottom:1px solid #f0f0f0;font-size:16px;font-weight:500}[data-v-361c9b7e] .git-operations-drawer .el-drawer__body{padding:10px;overflow-y:auto}.actions-section[data-v-361c9b7e]{padding:0}.center-button-container[data-v-361c9b7e]{display:flex;justify-content:space-between;align-items:center;margin-top:10px;position:relative}.button-divider[data-v-361c9b7e]{height:1px;background:linear-gradient(to right,#dcdfe600,#dcdfe6,#dcdfe600);flex:1;margin:0 15px}.one-push-button[data-v-361c9b7e]{padding:0 25px;min-width:160px;height:40px;font-weight:500;border-radius:20px;box-shadow:0 2px 6px #4169e14d;transition:all .3s;position:relative;z-index:2}.one-push-button[data-v-361c9b7e]:hover{transform:translateY(-1px);box-shadow:0 4px 8px #4169e166}.action-separator[data-v-361c9b7e]{position:relative;text-align:center;margin:12px 0;height:20px}.separator-text[data-v-361c9b7e]{background-color:#f5f7fa;padding:0 10px;font-size:12px;color:#909399;position:relative;z-index:1}.action-separator[data-v-361c9b7e]:before{content:"";position:absolute;top:50%;left:0;right:0;height:1px;background-color:#e4e7ed;z-index:0}.one-push-container[data-v-361c9b7e]{display:flex;justify-content:center}.one-push-button[data-v-361c9b7e]{width:100%;max-width:300px;height:auto;padding:10px 20px;background:linear-gradient(135deg,#4169e1,#5e81f4);border:none;border-radius:8px;box-shadow:0 4px 10px #4169e140;transition:all .3s ease}.one-push-button[data-v-361c9b7e]:hover{transform:translateY(-2px);box-shadow:0 6px 12px #4169e159;background:linear-gradient(135deg,#3a5ecc,#4b6edf)}.one-push-button[data-v-361c9b7e]:active{transform:translateY(0);box-shadow:0 2px 6px #4169e133}.one-push-content[data-v-361c9b7e]{display:flex;align-items:center;justify-content:center}.one-push-icon[data-v-361c9b7e]{font-size:20px;margin-right:10px}.one-push-text[data-v-361c9b7e]{display:flex;flex-direction:column;align-items:flex-start;text-align:left}.one-push-title[data-v-361c9b7e]{font-size:16px;font-weight:500;line-height:1.2}.one-push-desc[data-v-361c9b7e]{font-size:12px;opacity:.8;margin-top:2px}.button-row[data-v-361c9b7e]{display:flex;justify-content:space-between;gap:10px;width:100%}.button-row .el-button[data-v-361c9b7e]{flex:1;min-width:100px}.center-button-container[data-v-361c9b7e],.button-divider[data-v-361c9b7e]{display:none}.git-cmd-tooltip{font-family:Consolas,Courier New,monospace!important;font-size:13px!important;font-weight:500!important;color:#303133!important;background-color:#f5f7fa!important;border:1px solid #dcdfe6!important;border-radius:4px!important;padding:8px 12px!important;box-shadow:0 2px 12px #0000001a!important}.template-dialog .el-dialog__header,.message-template-dialog .el-dialog__header,.merge-dialog .el-dialog__header{padding:15px 20px;margin-right:0;border-bottom:1px solid #ebeef5;background-color:#f8f9fa}.template-dialog .el-dialog__title,.message-template-dialog .el-dialog__title,.merge-dialog .el-dialog__title{font-size:16px;font-weight:600;color:#303133}.template-dialog .el-dialog__body,.message-template-dialog .el-dialog__body,.merge-dialog .el-dialog__body{padding:20px}.merge-dialog .el-dialog__footer{padding:15px 20px;border-top:1px solid #f0f0f0}.template-dialog .el-dialog__headerbtn,.message-template-dialog .el-dialog__headerbtn,.merge-dialog .el-dialog__headerbtn{top:15px;right:20px}.template-dialog .el-input__inner,.message-template-dialog .el-input__inner,.merge-dialog .el-input__inner{height:40px;line-height:40px}.template-dialog .el-button,.message-template-dialog .el-button{border-radius:4px;font-weight:500}.template-dialog .el-card,.message-template-dialog .el-card{border-radius:4px;overflow:hidden}.template-dialog .el-card__body,.message-template-dialog .el-card__body{padding:12px 15px}.template-dialog .el-empty__image,.message-template-dialog .el-empty__image{width:80px;height:80px}.card[data-v-081ce552]{background-color:#fff;border-radius:8px;box-shadow:0 2px 12px #0000001a;margin-bottom:20px;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}.log-header[data-v-081ce552]{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid #ebeef5;position:sticky;top:0;background-color:#fff;z-index:100}.fullscreen-mode .log-header[data-v-081ce552]{margin-bottom:10px;box-shadow:0 2px 8px #0000000d}.header-left[data-v-081ce552]{display:flex;align-items:center;gap:16px}.header-left h2[data-v-081ce552]{margin:0;font-size:16px;font-weight:600;color:#303133}.log-actions[data-v-081ce552]{display:flex;align-items:center;gap:12px}.action-button[data-v-081ce552]{transition:all .3s ease;border-radius:8px;border:1px solid transparent;box-shadow:0 2px 4px #0000001a;font-weight:500;padding:8px 16px;display:flex;align-items:center;justify-content:center;gap:8px}.action-button[data-v-081ce552]:hover{transform:translateY(-2px);box-shadow:0 4px 8px #00000026}.filter-button[data-v-081ce552]{background:linear-gradient(135deg,#e6a23c,#f0c78a);color:#fff;min-width:90px}.filter-button.active-filter[data-v-081ce552]{background:linear-gradient(135deg,#d48806,#e6a23c)}.filter-button .filter-badge[data-v-081ce552] .el-badge__content{background-color:#f56c6c;color:#fff;border:2px solid white;box-shadow:0 0 0 1px #e6a23c}.view-mode-button[data-v-081ce552]{background:linear-gradient(135deg,#409eff,#53a8ff);color:#fff}.view-mode-button.active-view[data-v-081ce552]{background:linear-gradient(135deg,#1890ff,#096dd9)}.commit-display-button[data-v-081ce552]{background:linear-gradient(135deg,#67c23a,#85ce61);color:#fff}.commit-display-button.active-commits[data-v-081ce552]{background:linear-gradient(135deg,#52c41a,#389e0d)}.refresh-button[data-v-081ce552]{background:linear-gradient(135deg,#909399,#c0c4cc);color:#fff;min-width:unset;padding:8px;border-radius:50%;width:36px;height:36px}.refresh-button[data-v-081ce552]:hover{background:linear-gradient(135deg,#606266,#909399)}.refresh-button-animated[data-v-081ce552]{animation:spin-081ce552 1s linear}@keyframes spin-081ce552{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.content-area[data-v-081ce552]{padding:10px 16px;flex:1;min-height:100px;height:calc(100% - 52px);display:flex;flex-direction:column;overflow:auto}.content-area-content[data-v-081ce552]{height:100%;display:flex;flex-direction:column}.content-area.with-filter[data-v-081ce552]{height:calc(100% - 112px);padding-top:0}.content-area>div[data-v-081ce552]{flex:1;display:flex;flex-direction:column}.el-table[data-v-081ce552]{--el-table-border-color: #f0f0f0;--el-table-header-bg-color: #f8f9fa;border-radius:8px;overflow:hidden}[data-v-081ce552] .el-table__header-wrapper{background-color:#f8f9fa}[data-v-081ce552] .el-table__header th{background-color:#f8f9fa;color:#606266;font-weight:600;height:36px;font-size:13px}[data-v-081ce552] .el-table__row{transition:all .2s ease}[data-v-081ce552] .el-table__row:hover{background-color:#ecf5ff!important}[data-v-081ce552] .el-table--striped .el-table__row--striped{background-color:#fafafa}[data-v-081ce552] .el-table__cell{padding:4px 0;font-size:13px}.branch-container[data-v-081ce552]{display:flex;flex-wrap:wrap;gap:4px;margin-right:8px;flex-shrink:0}.branch-tag[data-v-081ce552]{margin-right:0;border-radius:3px;transition:all .2s ease;font-size:10px;padding:1px 4px;height:16px;line-height:14px}.branch-tag[data-v-081ce552]:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.commit-count[data-v-081ce552]{margin-bottom:12px;font-size:14px;color:#606266;text-align:right}.graph-view[data-v-081ce552]{width:100%;flex:1;display:flex;flex-direction:column;overflow-y:auto;padding:0 8px}.graph-container[data-v-081ce552]{width:100%;flex:1;min-height:500px;border:1px solid #ebeef5;border-radius:8px;padding:16px;background-color:#fff;position:relative;box-shadow:0 2px 8px #00000008}.graph-container svg[data-v-081ce552]{transform-origin:top left;transition:transform .2s ease}.graph-controls[data-v-081ce552]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;background-color:#f8f9fa;padding:12px;border-radius:8px;border:1px solid #ebeef5}.zoom-controls[data-v-081ce552]{display:flex;gap:12px;align-items:center}.zoom-slider[data-v-081ce552]{width:200px}.scale-info[data-v-081ce552]{font-size:14px;color:#606266;background-color:#fff;padding:4px 10px;border-radius:4px;border:1px solid #ebeef5}.refresh-notification[data-v-081ce552]{background-color:#f0f9eb;color:#67c23a;padding:10px 15px;border-radius:8px;font-size:14px;border-left:4px solid #67c23a;animation:fadeOut-081ce552 2s forwards;position:fixed;top:20px;right:20px;z-index:9999;box-shadow:0 4px 12px #0000001a;max-width:300px;text-align:center}@keyframes fadeOut-081ce552{0%{opacity:0;transform:translateY(-20px)}20%{opacity:1;transform:translateY(0)}80%{opacity:1}to{opacity:0}}.author-name[data-v-081ce552]{cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;max-width:100%;font-weight:500;font-size:12px}.commit-hash[data-v-081ce552]{cursor:pointer;color:#409eff;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-weight:500;border-radius:3px;padding:1px 3px;background-color:#ecf5ff;transition:all .2s ease;font-size:11px}.commit-hash[data-v-081ce552]:hover{text-decoration:none;background-color:#d9ecff;box-shadow:0 2px 4px #0000000d}.commit-detail-container[data-v-081ce552]{display:flex;flex-direction:column;gap:20px}.commit-info[data-v-081ce552]{padding:16px;background-color:#f5f7fa;border-radius:8px;font-size:14px;display:flex;flex-direction:column;gap:16px}.commit-info-header[data-v-081ce552]{display:flex;flex-wrap:wrap;gap:16px;align-items:center;background-color:#fff;padding:16px;border-radius:8px;border:1px solid #e4e7ed}.info-item[data-v-081ce552]{display:flex;align-items:center;gap:8px}.item-label[data-v-081ce552]{font-weight:700;color:#606266;white-space:nowrap}.item-value[data-v-081ce552]{color:#333;word-break:break-all}.commit-message-container[data-v-081ce552]{display:flex;flex-direction:column;gap:8px}.message-label[data-v-081ce552]{font-weight:700;color:#606266}.commit-files-diff[data-v-081ce552]{margin-top:8px;display:flex;gap:20px;height:60vh}.files-list[data-v-081ce552]{width:25%;overflow-y:auto;background-color:#f5f7fa;border-radius:8px;padding:16px}.files-list h3[data-v-081ce552]{margin-top:0;padding-bottom:12px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:500}.files-list ul[data-v-081ce552]{list-style:none;padding:0;margin:0}.files-list li[data-v-081ce552]{padding:10px 12px;cursor:pointer;border-radius:4px;margin-bottom:6px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;transition:all .2s ease;border:1px solid transparent}.files-list li[data-v-081ce552]:hover{background-color:#ecf5ff;border-color:#d9ecff}.files-list li.active-file[data-v-081ce552]{background-color:#409eff;color:#fff;box-shadow:0 2px 6px #409eff4d}.file-diff[data-v-081ce552]{flex:1;display:flex;flex-direction:column;background-color:#f5f7fa;border-radius:8px;padding:16px;overflow:hidden}.file-diff h3[data-v-081ce552]{margin-top:0;padding-bottom:12px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:500}.diff-content[data-v-081ce552]{flex:1;overflow-y:auto;background-color:#fff;padding:16px;border-radius:8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:13px;line-height:1.6;border:1px solid #ebeef5}.diff-content[data-v-081ce552]::-webkit-scrollbar,.files-list[data-v-081ce552]::-webkit-scrollbar{width:6px;height:6px}.diff-content[data-v-081ce552]::-webkit-scrollbar-thumb,.files-list[data-v-081ce552]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.diff-content[data-v-081ce552]::-webkit-scrollbar-thumb:hover,.files-list[data-v-081ce552]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.diff-content[data-v-081ce552]::-webkit-scrollbar-track,.files-list[data-v-081ce552]::-webkit-scrollbar-track{background-color:transparent}.diff-content[data-v-081ce552],.files-list[data-v-081ce552]{scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}[data-v-081ce552] .commit-detail-dialog{--el-dialog-margin-top: 7vh}[data-v-081ce552] .commit-detail-dialog .el-dialog__body{padding:16px}.filter-panel-header[data-v-081ce552]{background-color:#f5f7fa;padding:16px;margin-bottom:16px;border-radius:8px;box-shadow:0 2px 12px #0000000d;transition:all .3s ease;width:100%;position:sticky;top:36px;z-index:99}.fullscreen-mode .filter-panel-header[data-v-081ce552]{position:sticky;top:60px;z-index:9;background-color:#fff;width:100%;border-radius:0;border-bottom:1px solid #ebeef5;box-shadow:0 2px 8px #0000000d}.filter-form[data-v-081ce552]{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}.filter-item[data-v-081ce552]{flex:1;min-width:200px}.filter-actions[data-v-081ce552]{display:flex;align-items:center;gap:10px;white-space:nowrap;flex-shrink:0}.filter-input[data-v-081ce552]{width:100%}.filter-input.date-range[data-v-081ce552]{width:100%;max-width:280px}.compact-label[data-v-081ce552]{color:#909399;font-size:12px;margin-right:6px;white-space:nowrap;font-weight:700;border-right:1px solid #dcdfe6;padding-right:8px}.filter-action-button[data-v-081ce552]{padding:8px 16px;border-radius:6px;transition:all .3s;min-width:70px;font-weight:500}.filter-action-button[data-v-081ce552]:hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.table-view-container[data-v-081ce552]{height:100%;display:flex;flex-direction:column;flex:1}.log-table[data-v-081ce552]{flex:1;width:100%}.commit-message-cell[data-v-081ce552]{display:flex;align-items:center;min-height:32px}.message-content[data-v-081ce552]{display:flex;align-items:center;gap:8px;width:100%}.message-text[data-v-081ce552]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:1.3}.copy-message-btn[data-v-081ce552]{opacity:0;transition:opacity .2s ease;padding:4px;min-width:auto;height:auto}.commit-message-cell:hover .copy-message-btn[data-v-081ce552]{opacity:1}.copy-message-btn[data-v-081ce552]:hover{color:#409eff}.fullscreen-mode .table-view-container[data-v-081ce552]{height:calc(100vh - 160px)}.fullscreen-mode .log-table[data-v-081ce552]{height:100%}.load-more-container[data-v-081ce552]{display:flex;flex-direction:column;align-items:center;padding:8px 0;border-top:1px dashed #ebeef5;gap:8px}.pagination-info[data-v-081ce552]{font-size:13px;color:#909399;margin-bottom:4px}.loading-more[data-v-081ce552]{display:flex;align-items:center;color:#909399;font-size:13px;gap:8px}.loading-spinner[data-v-081ce552]{width:16px;height:16px;border:2px solid #dcdfe6;border-top-color:#409eff;border-radius:50%;animation:spinner-081ce552 1s linear infinite}@keyframes spinner-081ce552{to{transform:rotate(360deg)}}.load-more-button[data-v-081ce552]{cursor:pointer;color:#409eff;font-size:13px;padding:6px 16px;border:1px solid #d9ecff;background-color:#ecf5ff;border-radius:4px;transition:all .3s;font-weight:500}.no-more-data[data-v-081ce552]{color:#909399;font-size:13px;font-style:italic;display:flex;flex-direction:column;align-items:center}.total-loaded[data-v-081ce552]{font-size:12px;margin-top:4px;color:#c0c4cc}@keyframes fadeIn-081ce552{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.context-menu-item[data-v-081ce552]{padding:10px 16px;cursor:pointer;font-size:14px;display:flex;align-items:center;transition:all .2s ease;color:#606266}.context-menu-item[data-v-081ce552]:hover{background-color:#f5f7fa;color:#409eff}.context-menu-item i[data-v-081ce552]{margin-right:10px;font-size:16px}[data-v-081ce552] .el-table--border .el-table__inner-wrapper tr{border:none!important}[data-v-081ce552] .el-table--border .el-table__inner-wrapper td{border-right:none!important;border-bottom:none!important}[data-v-081ce552] .el-table--border .el-table__inner-wrapper th{border-right:none!important}[data-v-081ce552] .el-table--border,[data-v-081ce552] .el-table--border .el-table__inner-wrapper{border:none!important}[data-v-081ce552] .el-table--border:after,[data-v-081ce552] .el-table--border:before,[data-v-081ce552] .el-table__inner-wrapper:after,[data-v-081ce552] .el-table__inner-wrapper:before{display:none!important}[data-v-081ce552] .el-table tr{background-color:transparent!important}[data-v-081ce552] .el-table--striped .el-table__body tr.el-table__row--striped td{background-color:#00000005!important}.fullscreen-mode[data-v-081ce552]{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:9999;margin:0;border-radius:0;border:none;box-shadow:none;background-color:#fff;display:flex;flex-direction:column;overflow:auto}.fullscreen-mode .log-header[data-v-081ce552]{position:sticky;top:0;z-index:10;background-color:#fff;padding:16px;margin-bottom:10px;width:100%}.fullscreen-mode .filter-panel-header[data-v-081ce552]{position:sticky;top:60px;z-index:9;background-color:#fff;width:100%}.fullscreen-mode .content-area[data-v-081ce552]{height:100vh;max-height:none;flex:1;overflow:auto}.fullscreen-mode .el-table[data-v-081ce552]{height:calc(100vh - 60px)}.fullscreen-mode .graph-view[data-v-081ce552]{height:calc(100vh - 140px)}.fullscreen-button[data-v-081ce552]{background:linear-gradient(135deg,#909399,#c0c4cc);color:#fff}.fullscreen-button.active-fullscreen[data-v-081ce552]{background:linear-gradient(135deg,#606266,#909399)}.context-menu[data-v-081ce552]{position:fixed;background:#fff;border:1px solid #dcdfe6;border-radius:8px;box-shadow:0 4px 16px #0000001a;padding:6px 0;z-index:3000;min-width:200px;animation:fadeIn-081ce552 .15s ease-out}.fullscreen-context-menu[data-v-081ce552]{z-index:999999}.icon-only-button[data-v-081ce552]{min-width:unset;width:36px;height:36px;padding:8px;border-radius:8px;display:flex;align-items:center;justify-content:center}.icon-only-button .el-icon[data-v-081ce552]{margin-right:0}.el-table .el-table__cell .cell{word-break:break-all}.diff-header{font-weight:700;background-color:#e6f1fc;padding:10px 16px;margin:12px 0;border-radius:6px;color:#0366d6;border-bottom:1px solid #c8e1ff}.diff-old-file,.diff-new-file{color:#586069;padding:4px 8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace}.diff-old-file{color:#cb2431}.diff-new-file{color:#22863a}.diff-hunk-header{color:#6f42c1;background-color:#f1f8ff;padding:4px 8px;margin:8px 0;border-radius:4px;font-family:JetBrains Mono,Fira Code,Consolas,monospace}.diff-added{background-color:#e6ffed;color:#22863a;padding:2px 8px;border-left:4px solid #22863a;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0}.diff-removed{background-color:#ffeef0;color:#cb2431;padding:2px 8px;border-left:4px solid #cb2431;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0}.diff-context{color:#444;padding:2px 8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0;background-color:#fafbfc}.load-more-button:hover{background-color:#d9ecff;box-shadow:0 2px 6px #409eff26;transform:translateY(-1px)}.command-history-button[data-v-3e9f6472]{transition:all .3s ease}.command-history-button[data-v-3e9f6472]:hover{transform:translateY(-2px);box-shadow:0 4px 12px #409eff4d}.command-history-dialog[data-v-3e9f6472]{border-radius:8px;z-index:9999!important}[data-v-3e9f6472] .command-history-dialog .el-dialog__header{padding:0;margin-right:0;border-bottom:1px solid #ebeef5}[data-v-3e9f6472] .command-history-dialog .el-overlay{z-index:9998!important}[data-v-3e9f6472] .command-history-dialog .el-dialog{z-index:9999!important}.dialog-header[data-v-3e9f6472]{padding:16px 20px;display:flex;justify-content:space-between;align-items:center;background-color:#f8f9fa}.dialog-header h2[data-v-3e9f6472]{margin:0;font-size:18px;font-weight:500;color:#303133}.header-actions[data-v-3e9f6472]{display:flex;align-items:center;gap:8px}.socket-status[data-v-3e9f6472]{font-size:12px}.clear-button[data-v-3e9f6472]{transition:all .3s}.clear-button[data-v-3e9f6472]:hover{transform:rotate(12deg);background-color:#ff4d4f;border-color:#ff4d4f}.copy-all-button[data-v-3e9f6472]{transition:all .3s;position:relative}.copy-all-button[data-v-3e9f6472]:hover{transform:translateY(-2px);background-color:#409eff;border-color:#409eff;box-shadow:0 2px 6px #409eff4d}.copy-commands-button[data-v-3e9f6472]{transition:all .3s;position:relative}.copy-commands-button[data-v-3e9f6472]:hover{transform:translateY(-2px);background-color:#67c23a;border-color:#67c23a;box-shadow:0 2px 6px #67c23a4d}.copy-commands-button[data-v-3e9f6472]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:12px;height:12px;border-radius:50%;background-color:#ffffff4d;opacity:0;transition:opacity .3s}.copy-all-button[data-v-3e9f6472]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:12px;height:12px;border-radius:50%;background-color:#ffffff4d;opacity:0;transition:opacity .3s}.copy-commands-button[data-v-3e9f6472]:active:after,.copy-all-button[data-v-3e9f6472]:active:after{opacity:1;animation:ripple-3e9f6472 .6s ease-out}@keyframes ripple-3e9f6472{0%{width:0;height:0;opacity:.5}to{width:30px;height:30px;opacity:0}}.dialog-content[data-v-3e9f6472]{padding:20px;overflow-y:auto;max-height:calc(80vh - 120px)}.loading-state[data-v-3e9f6472]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:100px}.loading-icon[data-v-3e9f6472]{font-size:36px;color:#409eff;margin-bottom:10px}.loading-text[data-v-3e9f6472]{font-size:14px;color:#606266}.history-list[data-v-3e9f6472]{display:flex;flex-direction:column;gap:8px}.history-item[data-v-3e9f6472]{border:1px solid #ebeef5;border-radius:4px;transition:all .2s;background-color:#f8f9fa;overflow:hidden}.history-item[data-v-3e9f6472]:hover{box-shadow:0 2px 12px #0000001a}.history-item.is-error[data-v-3e9f6472]{border-left:3px solid #f56c6c}.item-header[data-v-3e9f6472]{padding:10px 12px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:background-color .2s}.item-header[data-v-3e9f6472]:hover{background-color:#f0f2f5}.command-info[data-v-3e9f6472]{flex:1;min-width:0;overflow:hidden}.command-text[data-v-3e9f6472]{display:flex;align-items:center;gap:8px;margin-bottom:4px}.command-text code[data-v-3e9f6472]{font-family:Consolas,Courier New,monospace;font-size:13px;color:#303133;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.command-meta[data-v-3e9f6472]{display:flex;align-items:center;gap:16px;font-size:12px;color:#909399}.timestamp[data-v-3e9f6472],.duration[data-v-3e9f6472]{white-space:nowrap}.item-actions[data-v-3e9f6472]{display:flex;align-items:center;gap:6px;margin-left:8px}.item-details[data-v-3e9f6472]{padding:10px 12px;border-top:1px solid #ebeef5;background-color:#fff;display:flex;flex-direction:column;gap:12px}.output-section[data-v-3e9f6472]{display:flex;flex-direction:column;gap:6px}.output-section.error[data-v-3e9f6472]{border-left:3px solid #f56c6c;padding-left:8px}.output-section[data-v-3e9f6472]:not(.error){border-left:3px solid #67c23a;padding-left:8px}.output-header[data-v-3e9f6472]{display:flex;justify-content:space-between;align-items:center}.output-header h4[data-v-3e9f6472]{margin:0;font-size:14px;font-weight:500;color:#606266}.output-content[data-v-3e9f6472]{background-color:#f8f9fa;padding:10px;border-radius:4px;font-family:Consolas,Courier New,monospace;font-size:12px;white-space:pre-wrap;word-break:break-all;margin:0;max-height:300px;overflow-y:auto;border:1px solid #ebeef5}.status-tag[data-v-3e9f6472]{flex-shrink:0}.truncation-notice[data-v-3e9f6472]{margin-top:6px}.output-content[data-v-3e9f6472]::-webkit-scrollbar{width:6px;height:6px}.output-content[data-v-3e9f6472]::-webkit-scrollbar-thumb{background-color:#c0c4cc;border-radius:3px}.output-content[data-v-3e9f6472]::-webkit-scrollbar-track{background-color:#f5f7fa}.command-history-dialog{z-index:99999!important}.el-overlay{z-index:99998!important}.el-dialog{z-index:99999!important}.el-overlay.is-message-box{z-index:99998!important}.el-dialog.command-history-dialog{z-index:99999!important}body{font-family:Arial,sans-serif;margin:0;padding:0;background-color:#f5f5f5;overflow:hidden;height:100vh}.main-container{position:fixed;top:60px;bottom:60px;left:0;right:0;padding:10px;overflow:hidden;z-index:1001}.grid-layout{display:grid;grid-template-columns:2fr 4px 3fr;grid-template-rows:1fr 4px 1fr;grid-template-areas:"git-status v-resizer commit-form" "h-resizer h-resizer h-resizer" "log-list log-list log-list";gap:6px;height:100%}.git-status-panel{grid-area:git-status;overflow:hidden;max-height:100%;padding:0}.commit-form-panel{grid-area:commit-form;overflow:hidden;max-height:100%;padding:0}.log-list-panel{grid-area:log-list;overflow:hidden;max-height:100%;padding:0}.card{background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #0000000d;border:1px solid rgba(0,0,0,.03);height:100%;overflow:hidden;display:flex;flex-direction:column}.main-header{background-color:#24292e;color:#fff;padding:0 20px;display:flex;justify-content:space-between;align-items:center;position:fixed;top:0;left:0;right:0;z-index:1000;box-shadow:0 2px 10px #0003;height:60px;box-sizing:border-box}.header-left{display:flex;align-items:center;gap:10px;min-width:220px;flex:1}.logo{height:32px;width:auto}h1{margin:0;font-size:24px}.header-info{display:flex;align-items:center;gap:10px;justify-content:flex-end}#user-info{display:flex;align-items:center;background-color:#282c34b3;padding:6px 10px;border-radius:4px;border:1px solid rgba(255,255,255,.15);margin-right:10px;flex-shrink:0}.directory-selector{display:flex;flex-direction:row;justify-content:space-between;align-items:center;background-color:#282c34b3;border-radius:4px;padding:6px 10px;border:1px solid rgba(255,255,255,.15);box-shadow:0 2px 8px #00000026;flex-shrink:0}.command-history-section{display:flex;align-items:center;margin-left:12px}.directory-display{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.directory-path{font-family:monospace;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500;background-color:#0003;padding:4px 8px;border-radius:3px;border-left:3px solid #409EFF;flex:1;min-width:0;max-width:500px}.branch-label,.user-label,.user-name{font-weight:700;margin-right:5px}.user-email{color:#e0e0e0}.branch-name{font-family:monospace}.status-box{background-color:#f6f8fa;border:1px solid #e1e4e8;border-radius:3px;padding:15px;white-space:pre-wrap;font-family:monospace;overflow-y:auto}.tips{margin-top:20px;padding:15px;background-color:#f5f7fa;border-radius:5px;border-left:4px solid #409eff}.tips h3{margin-top:0;font-size:16px;margin-bottom:10px}.code-block{background-color:#2d2d2d;color:#f8f8f2;font-family:monospace;padding:10px 15px;border-radius:4px;margin-bottom:10px}.loading-container{display:flex;justify-content:center;align-items:center;height:100%}.loading-card{width:300px;text-align:center;padding:30px}.loading-spinner{font-size:48px;margin-bottom:20px;color:#409eff}.loading-text{font-size:18px;color:#606266}.user-settings-btn{margin-left:10px}.user-warning{color:#e6a23c;font-weight:700}.main-footer{background-color:#24292e;color:#fff;padding:10px 20px;display:flex;justify-content:space-between;align-items:center;position:fixed;bottom:0;left:0;right:0;z-index:100;box-shadow:0 -2px 10px #0000001a;height:60px;box-sizing:border-box}@media (max-width: 768px){.grid-layout{grid-template-columns:1fr;grid-template-rows:auto auto auto auto auto;grid-template-areas:"git-status" "v-resizer" "commit-form" "h-resizer" "log-list";gap:10px}.vertical-resizer{height:10px;cursor:row-resize}.vertical-resizer:after{width:30px;height:4px}.git-status-panel,.commit-form-panel,.log-list-panel{padding:0;max-height:none}.git-status-panel,.commit-form-panel{max-height:30vh}.log-list-panel{max-height:40vh}}.logo[data-v-a5d01110]{will-change:filter;transition:filter .3s}.logo[data-v-a5d01110]:hover{filter:drop-shadow(0 0 2em #42b883aa)}.branch-info[data-v-a5d01110]{display:flex;align-items:center;gap:10px}.branch-wrapper[data-v-a5d01110]{display:flex;align-items:center;background-color:#ffffff26;border-radius:4px;padding:8px 12px;box-shadow:0 2px 4px #0003;transition:all .3s}.branch-wrapper[data-v-a5d01110]:hover{background-color:#fff3}.branch-label[data-v-a5d01110]{font-weight:700;margin-right:10px;color:#fff}.branch-select[data-v-a5d01110]{width:200px;margin-right:10px}.create-branch-btn[data-v-a5d01110]{background-color:#2ea44f;border-color:#2ea44f;transition:all .3s;box-shadow:0 2px 4px #0003}.create-branch-btn[data-v-a5d01110]:hover{background-color:#3bbc63;border-color:#3bbc63;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.footer-right[data-v-a5d01110]{display:flex;align-items:center;gap:10px;color:#ffffffe6;font-size:13px;background-color:#ffffff1a;padding:8px 12px;border-radius:4px;box-shadow:0 2px 4px #0003}.repo-url-label[data-v-a5d01110]{font-weight:700;margin-right:8px;color:#fff}.repo-url[data-v-a5d01110]{color:#e6f7ff;font-family:monospace;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy-url-btn[data-v-a5d01110]{transition:all .3s;background-color:#1890ff;border-color:#1890ff;box-shadow:0 2px 4px #0003}.copy-url-btn[data-v-a5d01110]:hover{background-color:#40a9ff;border-color:#40a9ff;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.vertical-resizer[data-v-a5d01110]{grid-area:v-resizer;background-color:#e8e8e8;cursor:col-resize;transition:background-color .2s,box-shadow .2s;position:relative;z-index:10;border-radius:4px;box-shadow:0 0 2px #0000001a}.vertical-resizer[data-v-a5d01110]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:40px;background-color:#a0a0a0;border-radius:2px;transition:background-color .2s,width .2s,box-shadow .2s}.vertical-resizer[data-v-a5d01110]:hover,.vertical-resizer.active[data-v-a5d01110]{background-color:#d0d0d0;box-shadow:0 0 4px #0003}.vertical-resizer[data-v-a5d01110]:hover:after,.vertical-resizer.active[data-v-a5d01110]:after{background-color:#409eff;width:3px;box-shadow:0 0 6px #409eff99}.horizontal-resizer[data-v-a5d01110]{grid-area:h-resizer;background-color:#e8e8e8;cursor:row-resize;transition:background-color .2s,box-shadow .2s;position:relative;z-index:10;border-radius:4px;box-shadow:0 0 2px #0000001a}.horizontal-resizer[data-v-a5d01110]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:40px;height:2px;background-color:#a0a0a0;border-radius:2px;transition:background-color .2s,height .2s,box-shadow .2s}.horizontal-resizer[data-v-a5d01110]:hover,.horizontal-resizer.active[data-v-a5d01110]{background-color:#d0d0d0;box-shadow:0 0 4px #0003}.horizontal-resizer[data-v-a5d01110]:hover:after,.horizontal-resizer.active[data-v-a5d01110]:after{background-color:#409eff;height:3px;box-shadow:0 0 6px #409eff99}.vertical-resizer-bottom[data-v-a5d01110]{grid-area:v-resizer-bottom;background-color:#e8e8e8;cursor:col-resize;transition:background-color .2s,box-shadow .2s;position:relative;z-index:10;border-radius:4px;box-shadow:0 0 2px #0000001a}.vertical-resizer-bottom[data-v-a5d01110]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:40px;background-color:#a0a0a0;border-radius:2px;transition:background-color .2s,width .2s,box-shadow .2s}.vertical-resizer-bottom[data-v-a5d01110]:hover,.vertical-resizer-bottom.active[data-v-a5d01110]{background-color:#d0d0d0;box-shadow:0 0 4px #0003}.vertical-resizer-bottom[data-v-a5d01110]:hover:after,.vertical-resizer-bottom.active[data-v-a5d01110]:after{background-color:#409eff;width:3px;box-shadow:0 0 6px #409eff99}.directory-selector[data-v-a5d01110]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;background-color:#282c34b3;border-radius:4px;padding:8px 12px;margin-bottom:8px;border:1px solid rgba(255,255,255,.2);box-shadow:0 2px 8px #0003}.directory-display[data-v-a5d01110]{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.directory-path[data-v-a5d01110]{font-family:monospace;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500;background-color:#0003;padding:4px 8px;border-radius:3px;border-left:3px solid #409EFF;flex:1;min-width:0;max-width:350px}.directory-actions[data-v-a5d01110]{display:flex;gap:4px;margin-left:8px}.dir-button[data-v-a5d01110]{padding:4px;height:24px;width:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#409eff,#53a8ff);color:#fff;border:none;box-shadow:0 2px 4px #0003;transition:all .3s}.dir-button[data-v-a5d01110]:hover{transform:translateY(-1px);box-shadow:0 3px 6px #0000004d;background:linear-gradient(135deg,#53a8ff,#66b1ff)}.dir-button.el-button--info[data-v-a5d01110]{background:linear-gradient(135deg,#909399,#a6a9ad)}.dir-button.el-button--info[data-v-a5d01110]:hover{background:linear-gradient(135deg,#a6a9ad,#c0c4cc)}.directory-icon[data-v-a5d01110]{display:flex;justify-content:center;align-items:center;width:24px;height:24px;border-radius:3px;background-color:#409eff1a;color:#409eff;margin-right:2px}.directory-input-group[data-v-a5d01110]{display:flex;align-items:center;gap:8px;width:100%}.recent-directories[data-v-a5d01110]{display:flex;flex-wrap:wrap;gap:4px}.recent-dir-tag[data-v-a5d01110]{cursor:pointer;background-color:#e6f7ff;border:1px solid #91d5ff;padding:4px 8px;border-radius:4px}.directory-browser[data-v-a5d01110]{width:100%;height:400px;overflow:auto}.current-path[data-v-a5d01110]{padding:10px;background-color:#f5f7fa;border-radius:4px;margin-bottom:10px;border:1px solid #e4e7ed;display:flex;align-items:center;width:100%;box-sizing:border-box}.path-label[data-v-a5d01110]{font-weight:700;margin-right:5px;white-space:nowrap;flex-shrink:0}.path-value[data-v-a5d01110]{font-family:monospace;word-break:break-all;flex:1;min-width:0;background-color:#fff;padding:5px 8px;border-radius:3px;border:1px solid #dcdfe6;box-shadow:inset 0 1px 2px #0000000d;width:100%}.directory-list[data-v-a5d01110]{list-style:none!important;padding:0;margin:0;border:1px solid #e4e7ed;border-radius:4px;max-height:300px;overflow-y:auto;background-color:#fff;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.directory-item[data-v-a5d01110]{padding:10px 12px;border-bottom:1px solid #ebeef5;cursor:pointer;display:flex;align-items:center;transition:all .2s ease;position:relative;width:100%;box-sizing:border-box;list-style:none!important}.directory-item[data-v-a5d01110]:hover{background-color:#ecf5ff}.directory-item[data-v-a5d01110]:last-child{border-bottom:none}.parent-dir[data-v-a5d01110]{background-color:#f5f7fa;font-weight:500}.dir-icon[data-v-a5d01110]{margin-right:12px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.dir-name[data-v-a5d01110]{display:flex;align-items:center;font-size:14px;line-height:1.4}.folder-icon[data-v-a5d01110]{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:all .2s ease}.directory-item:hover .folder-icon[data-v-a5d01110]{transform:scale(1.1)}[data-v-a5d01110] .directory-browser-dialog{border-radius:8px;overflow:hidden}[data-v-a5d01110] .directory-browser-dialog .el-message-box__header{background-color:#f5f7fa;padding:15px 20px;border-bottom:1px solid #e4e7ed;position:relative}[data-v-a5d01110] .directory-browser-dialog .el-message-box__title{color:#409eff;font-weight:500;font-size:18px}[data-v-a5d01110] .directory-browser-dialog .el-message-box__headerbtn{position:absolute;top:15px;right:15px;width:24px;height:24px;border-radius:50%;background-color:#0000000d;transition:all .3s;display:flex;align-items:center;justify-content:center}[data-v-a5d01110] .directory-browser-dialog .el-message-box__headerbtn:hover{background-color:#0000001a;transform:rotate(90deg)}[data-v-a5d01110] .directory-browser-dialog .el-message-box__headerbtn .el-message-box__close{color:#606266;font-weight:700;font-size:16px}[data-v-a5d01110] .directory-browser-dialog .el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}[data-v-a5d01110] .directory-browser-dialog .el-message-box__content{padding:20px}.el-message-box__message{width:100%}.directory-browser-dialog{border-radius:8px;overflow:hidden}.directory-browser-dialog .el-message-box__header{background-color:#f5f7fa;padding:15px 20px;border-bottom:1px solid #e4e7ed;position:relative}.directory-browser-dialog .el-message-box__title{color:#409eff;font-weight:500;font-size:18px}.directory-browser-dialog .el-message-box__headerbtn{position:absolute;top:15px;right:15px;width:24px;height:24px;border-radius:50%;background-color:#0000000d;transition:all .3s;display:flex;align-items:center;justify-content:center}.directory-browser-dialog .el-message-box__headerbtn:hover{background-color:#0000001a;transform:rotate(90deg)}.directory-browser-dialog .el-message-box__headerbtn .el-message-box__close{color:#606266;font-weight:700;font-size:16px}.directory-browser-dialog .el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.directory-browser-dialog .el-message-box__content{padding:20px}.directory-browser-dialog .el-message-box__btns{padding:10px 20px 15px;border-top:1px solid #e4e7ed}.directory-browser{width:100%;height:400px;overflow:auto}.current-path{padding:10px;background-color:#f5f7fa;border-radius:4px;margin-bottom:10px;border:1px solid #e4e7ed;display:flex;align-items:center;width:100%;box-sizing:border-box}.path-label{font-weight:700;margin-right:5px;white-space:nowrap;flex-shrink:0}.path-value{font-family:monospace;word-break:break-all;flex:1;min-width:0;background-color:#fff;padding:5px 8px;border-radius:3px;border:1px solid #dcdfe6;box-shadow:inset 0 1px 2px #0000000d;width:100%}.directory-list{list-style:none!important;padding:0;margin:0;border:1px solid #e4e7ed;border-radius:4px;max-height:300px;overflow-y:auto;background-color:#fff;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.directory-item{padding:10px 12px;border-bottom:1px solid #ebeef5;cursor:pointer;display:flex;align-items:center;transition:all .2s ease;position:relative;width:100%;box-sizing:border-box;list-style:none!important}.directory-item:hover{background-color:#ecf5ff}.directory-item:last-child{border-bottom:none}.parent-dir{background-color:#f5f7fa;font-weight:500}.dir-icon{margin-right:12px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.dir-name{display:flex;align-items:center;font-size:14px;line-height:1.4}.folder-icon{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:all .2s ease}.directory-item:hover .folder-icon{transform:scale(1.1)}*{margin:0;padding:0}div{box-sizing:border-box}