feat: update gitea config files

This commit is contained in:
chuan
2026-09-28 00:29:24 +08:00 Unverified
parent 98e8932a96
commit 31eeb4ef0c
51 changed files with 7828 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
{
"yaml.customTags": [
"!reset sequence"
]
}
+3
View File
@@ -0,0 +1,3 @@
.env
conf/app.ini
data/
+11
View File
@@ -0,0 +1,11 @@
# Optional: connect Gitea to the existing reverse proxy network.
# docker compose -f compose.yaml -f compose.proxy.yaml up -d
services:
server:
ports: !reset []
networks:
- web-network
networks:
web-network:
external: true
+18
View File
@@ -0,0 +1,18 @@
# Build first: bun run --cwd themes build:min
# docker compose -f compose.yaml -f compose.theme.yaml up -d
services:
server:
environment:
GITEA__ui__THEMES: github-dev,github-dev-dark
GITEA__ui__DEFAULT_THEME: github-dev-dark
volumes:
- type: bind
source: ./themes/dist/public
target: /data/gitea/public
bind:
create_host_path: false
- type: bind
source: ./themes/dist/templates
target: /data/gitea/templates
bind:
create_host_path: false
+20
View File
@@ -0,0 +1,20 @@
name: gitea
services:
server:
image: docker.gitea.com/gitea:1.27.3
container_name: gitea
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- type: bind
source: ./data
target: /data
bind:
create_host_path: false
- type: bind
source: ./conf
target: /data/gitea/conf
bind:
create_host_path: false
+7
View File
@@ -0,0 +1,7 @@
RUNNER_VERSION=0.6.1
GITEA_INSTANCE_URL=https://git.pchuan.top/
# Set the registration token before registering a new runner.
GITEA_RUNNER_REGISTRATION_TOKEN=
GITEA_RUNNER_NAME=gitea-linux-runner
GITEA_RUNNER_LABELS=ubuntu-latest:docker://ghcr.io/catthehacker/ubuntu:act-latest,ubuntu-22.04:docker://ghcr.io/catthehacker/ubuntu:act-22.04
DOCKER_HOST=unix:///var/run/docker.sock
+1
View File
@@ -0,0 +1 @@
.env
+22
View File
@@ -0,0 +1,22 @@
name: gitea-runner
services:
runner:
image: docker.io/gitea/act_runner:${RUNNER_VERSION:?Set RUNNER_VERSION in .env}
container_name: gitea-act-runner
restart: unless-stopped
env_file: .env
networks:
- web-network
volumes:
- act-runner-data:/data
- /var/run/docker.sock:/var/run/docker.sock
networks:
web-network:
external: true
volumes:
act-runner-data:
external: true
name: gitea_act-runner-data
+8
View File
@@ -0,0 +1,8 @@
.gitea
.gitea-src
.gitea-data
dist
release
node_modules
.playwright-mcp
.cache/
+2
View File
@@ -0,0 +1,2 @@
- 和 playwright-mcp 相关操作的临时文件放在文件夹u `.playwright-mcp` 下面
- `.gitea-src` 是 gitea 这个项目的官方源代码
+85
View File
@@ -0,0 +1,85 @@
# Gitea GitHub 主题
提供 `github-dev`、`github-dev-dark` 两套主题及已有模板定制。当前主题版本 **1.0.0**,适配 Gitea **1.27.3**。主题版本与 Gitea 版本独立维护。
## 构建
需要 Bun,预览另外需要 Docker Compose。在本目录运行:
```powershell
bun install --frozen-lockfile
bun run build
bun run build:min
```
唯一产物目录为 `dist/`,包含 `public/assets/css/` 和 `templates/`。不要手工编辑产物;构建会删除过期生成文件。原有主题名称保持不变。
## 开发与预览
```powershell
bun run compose:up
bun run dev
```
预览地址:http://localhost:3001 。开发配置自动初始化 SQLite,跳过安装向导。开发容器使用独立数据卷,不读取正式 Gitea 数据,关闭内置 Git SSH 功能,也没有发布 SSH 端口。
本次本地验收已创建 `theme-preview` 测试账号和同名示例仓库,示例页面位于 http://localhost:3001/theme-preview/theme-preview 。账号信息保存在忽略提交的 `.cache/preview-account.json`,它不是分发产物。新机器上需要自行注册测试账号。
`dev` 监听 CSS 和模板的新增、修改、删除。CSS 修改后刷新浏览器;模板或配置变更后重启容器:
```powershell
docker compose -f compose.dev.yaml restart server
bun run compose:logs
bun run compose:down
```
`compose:down` 保留预览数据卷。只监听本机 3001 端口,避免与主项目 3000 端口冲突。
## 修改位置
| 位置 | 用途 |
|---|---|
| `styles/light-colors.css`、`dark-colors.css` | 两套配色变量 |
| `styles/shared.css` | 共用样式导入顺序 |
| `styles/controls/` | 按钮、菜单、输入框等控件 |
| `styles/components/` | 仓库、Issue、Actions、导航等区域 |
| `styles/pages.css` | 页面布局 |
| `templates/` | 现有模板覆盖 |
| `build.ts` | 打包、产物同步、监听 |
样式直接写 CSS,由 Lightning CSS 处理导入、嵌套和压缩。明暗主题共用布局。原有 Google Fonts 引用暂时保留,字体加载依赖外网。
界面翻译由 Gitea 内置资源提供,主题不再下载、合并或挂载翻译。自定义签名徽章保留英文标签 Verified、Partially verified、Unverified,其悬浮说明继续使用 Gitea 提供的翻译。
## 接入主项目
在上一级 `gitea` 目录执行:
```powershell
bun run --cwd themes build:min
docker compose -f compose.yaml -f compose.theme.yaml up -d
```
同时使用反代网络:
```powershell
docker compose -f compose.yaml -f compose.proxy.yaml -f compose.theme.yaml up -d
```
`compose.theme.yaml` 挂载 `themes/dist/` 中的两个资源目录,设置主题列表和默认深色主题;需要显式加载。基础 Compose 独立可用。
Gitea Docker 启动时会将 `GITEA__ui__*` 写入 `conf/app.ini`。以后停用主题时,也需要移除该文件中的自定义 `THEMES`、`DEFAULT_THEME`,再重建容器。
主题产物属于额外挂载的数据。部署和备份时,除主服务 `data/`、`conf/` 外,还需保留主题产物及 Compose 配置;主题源码应纳入版本控制。
当前使用的 Gitea rootful 镜像启动时会调整 `/data` 下文件权限,因此主题挂载保留可写;源码目录不挂入容器,容器只访问构建产物。
## 升级与分发
已移除独立静态预览、自动发布和删除重建 release/tag 的工具。分发时构建并打包 `dist/` 内容即可。
升级先调整开发镜像,核对覆盖的官方模板,再检查登录、明暗切换、仓库文件列表、提交、Issue 和 Actions 页面。构建通过不代表页面兼容性已经验证。
本次 1.27.3 验收:启动及模板解析正常;首页、登录页、示例仓库、提交列表、文件页、Issue 列表与详情、Actions 页面 HTTP 检查通过;浏览器验证了仓库首页的明暗主题切换。实际 Actions 作业执行、签名提交及移动端布局尚未完整验收。
参考:[官方自定义说明](https://docs.gitea.com/administration/customizing-gitea/)。
+74
View File
@@ -0,0 +1,74 @@
import { watch } from "node:fs";
import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
import { dirname, join, resolve } from "node:path";
import { bundleAsync } from "lightningcss";
const root = import.meta.dir;
const output = join(root, "dist");
const minify = process.argv.includes("--minify");
const themes = { light: "github-dev", dark: "github-dev-dark" };
async function collect(directory: string, prefix: string, files: Map<string, Uint8Array>) {
for (const entry of await readdir(directory, { withFileTypes: true })) {
const source = join(directory, entry.name);
const target = join(prefix, entry.name);
if (entry.isDirectory()) await collect(source, target, files);
else if (entry.isFile() && !entry.name.endsWith(".md")) files.set(target, await readFile(source));
}
}
async function build() {
const files = new Map<string, Uint8Array>();
for (const [mode, name] of Object.entries(themes)) {
const result = await bundleAsync({
filename: join(root, "styles", `${mode}.css`),
minify,
targets: { chrome: 108 << 16, firefox: 108 << 16, safari: 16 << 16 },
resolver: {
resolve: (specifier, from) => /^https?:/.test(specifier)
? { external: specifier }
: resolve(dirname(from), specifier),
read: (file) => readFile(file, "utf8"),
},
});
files.set(`public/assets/css/theme-${name}.css`, result.code);
}
await collect(join(root, "templates"), "templates", files);
// Keep directories intact: Docker may bind-mount them while watching.
// Remove obsolete files only after all sources have compiled successfully.
await mkdir(output, { recursive: true });
const previous = new Map<string, Uint8Array>();
await collect(output, "", previous);
for (const relative of previous.keys()) {
if (!files.has(relative)) await rm(join(output, relative));
}
for (const [relative, content] of files) {
const target = join(output, relative);
await mkdir(dirname(target), { recursive: true });
await writeFile(target, content);
}
console.log(`Built ${files.size} files in dist${minify ? " (minified)" : ""}`);
}
await build();
if (process.argv.includes("--watch")) {
let timer: ReturnType<typeof setTimeout>;
let pending = Promise.resolve();
const rebuild = () => {
clearTimeout(timer);
timer = setTimeout(() => {
pending = pending.then(build).catch((error) => console.error("Build failed:", error));
}, 150);
};
const watchers = ["styles", "templates"].map((directory) =>
watch(join(root, directory), { recursive: true }, rebuild),
);
console.log("Watching styles and templates");
process.on("SIGINT", () => {
clearTimeout(timer);
watchers.forEach((watcher) => watcher.close());
process.exit(0);
});
}
+48
View File
@@ -0,0 +1,48 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "gitea-theme-dev",
"devDependencies": {
"@types/bun": "^1.3.14",
"lightningcss": "^1.32.0",
},
},
},
"packages": {
"@types/bun": ["@types/bun@1.3.14", "https://registry.npmmirror.com/@types/bun/-/bun-1.3.14.tgz", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
"@types/node": ["@types/node@25.8.0", "https://registry.npmmirror.com/@types/node/-/node-25.8.0.tgz", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ=="],
"bun-types": ["bun-types@1.3.14", "https://registry.npmmirror.com/bun-types/-/bun-types-1.3.14.tgz", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
"detect-libc": ["detect-libc@2.1.2", "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
"lightningcss": ["lightningcss@1.32.0", "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.32.0.tgz", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "https://registry.npmmirror.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="],
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="],
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="],
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="],
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="],
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="],
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="],
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="],
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "https://registry.npmmirror.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="],
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="],
"undici-types": ["undici-types@7.24.6", "https://registry.npmmirror.com/undici-types/-/undici-types-7.24.6.tgz", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="],
}
}
+32
View File
@@ -0,0 +1,32 @@
name: gitea-theme-dev
services:
server:
image: docker.gitea.com/gitea:1.27.3
environment:
- GITEA__database__DB_TYPE=sqlite3
- GITEA__security__INSTALL_LOCK=true
- GITEA__server__ROOT_URL=http://localhost:3001/
- GITEA__server__DISABLE_SSH=true
- GITEA__service_0x2E_explore__DISABLE_USERS_PAGE=true
- GITEA__service_0x2E_explore__DISABLE_ORGANIZATIONS_PAGE=true
- GITEA__service_0x2E_explore__DISABLE_CODE_PAGE=true
- GITEA__ui__THEMES=github-dev,github-dev-dark
- GITEA__ui__DEFAULT_THEME=github-dev-dark
volumes:
- preview-data:/data
- type: bind
source: ./dist/public
target: /data/gitea/public
bind:
create_host_path: false
- type: bind
source: ./dist/templates
target: /data/gitea/templates
bind:
create_host_path: false
ports:
- "127.0.0.1:3001:3000"
volumes:
preview-data:
+19
View File
@@ -0,0 +1,19 @@
{
"name": "gitea-theme-dev",
"version": "1.0.0",
"private": true,
"type": "module",
"description": "Bun-powered custom theme workspace for Gitea.",
"scripts": {
"build": "bun build.ts",
"dev": "bun build.ts --watch",
"build:min": "bun build.ts --minify",
"compose:up": "bun run build && docker compose -f compose.dev.yaml up -d",
"compose:down": "docker compose -f compose.dev.yaml down",
"compose:logs": "docker compose -f compose.dev.yaml logs -f server"
},
"devDependencies": {
"@types/bun": "^1.3.14",
"lightningcss": "^1.32.0"
}
}
+490
View File
@@ -0,0 +1,490 @@
/* 避免锚中设置界面里的 Actions */
.page-content.repository.actions:not(.settings) .flex-container {
/* Actions 列表 */
.flex-container-nav:before {
content: "Actions";
display: block;
font-size: 20px;
font-weight: 600;
margin-top: 6px;
margin-bottom: 8px;
}
/* 工作流列表 */
.flex-container-main {
/* 工作流列表标题栏菜单 */
.ui.top.attached.header {
padding: 16px;
&:has(+ .ui.info.attached.message) {
border-bottom: 0;
}
.ui.secondary.menu > .ui.dropdown {
color: var(--color-text-light-1);
}
}
/* 事件触发器 */
.ui.info.attached.message {
padding: 18px 16px;
/* 事件触发器按钮 */
.ui.mini.button {
padding: 3px 12px;
min-height: 27px;
font-size: 12px;
}
}
/* 工作流列表 */
.ui.attached.segment {
padding: 0;
border: 0;
.run-list {
border: 1px solid var(--color-light-border);
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
border-top: 0;
font-size: 12px;
/* 分支标签按钮 */
.run-list-ref {
background-color: var(--github-bgColor-accent-muted);
color: var(--github-fgColor-accent);
font-family: var(--fonts-monospace);
font-weight: 400;
padding: 0px 6px;
&:hover {
background-color: var(--github-bgColor-accent-muted);
color: var(--github-fgColor-accent);
text-decoration-line: underline !important;
}
}
/* 标签右侧任务信息 */
.run-list-item-right {
color: var(--color-text-light-1);
}
.flex-item {
padding: 16px;
line-height: 18px;
.flex-item-leading {
align-self: flex-start;
margin-top: 2px;
}
.flex-item-main {
gap: 0.5rem;
}
.flex-item-trailing {
> .ui.label {
border-radius: var(--border-radius);
}
> .ui.dropdown.jump {
border-radius: var(--border-radius);
color: var(--color-text-light-1);
&:hover {
background-color: var(--github-control-transparent-bgColor-hover);
}
.menu > .item {
font-size: 12px;
gap: 4px;
&:hover {
color: var(--color-text) !important;
}
}
}
}
}
}
}
}
}
.page-content.repository.actions:not(.settings) .ui.vertical.menu .item > .ui.red.label {
color: var(--color-error-text);
border: 1px solid var(--color-error-border);
background: var(--color-error-bg);
}
#runWorkflowDispatchForm {
font-size: 12px;
/* 描述类标签 */
.ui.field label {
font-weight: 600;
}
/* use workflow from 描述 */
.ui.inline.field {
> :first-child {
margin-right: 8px;
}
> :only-child {
margin-right: 0;
}
}
/* 分支选择按钮 */
.ui.dropdown.button.branch-selector-dropdown {
padding: 3px 21px 3px 12px;
min-height: 27px;
gap: 4px;
font-size: 12px;
.text {
line-height: 20px;
}
}
#runWorkflowDispatchModalInputs {
.ui.field > label {
margin-bottom: 6px;
}
/* 运行工作流按钮 */
.ui.tiny.button {
padding: 0px 8px;
min-height: 27px;
}
}
}
.page-content.repository.actions,
.action-view-header,
.action-view-body {
svg {
color: var(--color-text-light-1);
&.tw-text-text,
&.tw-text-text-light {
color: var(--color-text-light-1) !important;
}
}
}
.action-view-header {
.action-commit-summary {
/* yml 文件名 */
> span:first-child {
color: var(--github-fgColor-accent);
b {
font-weight: 400;
}
}
a:hover {
text-decoration: inherit;
}
/* 提交哈希 */
> a.muted:first-of-type {
text-decoration: underline;
}
/* 提交作者 */
> a.muted:last-of-type {
font-weight: 600;
}
/* 分支标签按钮 */
.ui.ui.ui.label {
background-color: var(--github-bgColor-accent-muted);
border-radius: var(--border-radius);
color: var(--github-fgColor-accent);
> a {
font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;
font-weight: 400;
opacity: 1;
}
}
}
}
.action-view-left.action-view-left.action-view-left {
margin-right: 28px;
max-width: 22vw;
.left-list-header {
font-size: 12px;
font-weight: 600;
margin-left: 0.5rem;
}
/* 双重确保覆盖原始样式 */
.job-brief-item.job-brief-item {
border-radius: var(--border-radius) !important;
padding: 8px;
position: relative;
margin-left: 0.5rem;
&:hover {
background-color: var(--color-console-hoverBg);
}
&.selected {
&:after {
overflow: visible;
background: var(--github-borderColor-accent-emphasis);
border-radius: var(--border-radius);
content: "";
height: 24px;
left: calc(0.5rem * -1);
position: absolute;
top: calc(50% - 12px);
width: 4px;
}
}
/* 状态图标 */
a > span:first-child {
display: flex;
align-items: center;
}
/* 默认隐藏重新运行按钮 */
a > svg.link-action {
display: none;
color: var(--color-console-fg-subtle) !important;
&:hover {
color: var(--color-text) !important;
}
}
/* 运行时长 */
a > span:last-child {
color: var(--color-console-fg-subtle);
font-size: 12px;
}
/* 鼠标移入时显示重新运行按钮 */
&:hover a > svg.link-action {
display: inline-block;
}
}
/* Run Details 列表 */
.ui.relaxed.list:last-of-type {
padding: 0;
.item {
border-radius: var(--border-radius) !important;
padding: 8px;
&:hover {
background-color: var(--color-console-hoverBg);
}
a {
color: inherit;
&:hover {
text-decoration: none;
}
}
}
}
}
@media (max-width: 767.98px) {
.action-view-left.action-view-left.action-view-left {
max-width: none;
}
}
.action-view-right {
box-shadow: var(--github-shadow-resting-small);
/* 提前加载高度和滚动条 */
min-height: calc(100vh - 245px);
/* 作业详情页标题 */
.job-info-header {
padding: 16px 12px 16px 24px !important;
height: 80px !important;
.job-info-header-left {
.job-info-header-title {
color: var(--github-fgColor-accent) !important;
}
.job-info-header-detail {
margin-top: 8px;
}
}
.job-info-header-right {
.ui.dropdown {
> .button {
background: unset;
border: unset;
padding: 7px !important;
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
}
.menu > .item > i.icon {
margin-right: 2px;
}
}
}
}
.job-step-container {
padding: 8px;
.job-step-section {
margin: 0 4px 4px;
/* 步骤标题, 双重确保覆盖原始样式 */
.job-step-summary.job-step-summary {
color: var(--color-console-fg-subtle);
padding: 8px !important;
height: 36px;
&.selected {
/* 滚动时固定在顶部的高度与 job-info-header 高度相同 */
top: 80px;
}
&.step-expandable:hover {
color: var(--color-console-fg-subtle);
}
.tw-mr-2:not(.svg) svg.svg {
margin: 1.5px 6px 0px 2px;
}
/* 绿色步骤状态改为白色 */
svg.tw-text-green {
color: var(--color-console-fg-subtle) !important;
}
&.selected {
/* 不被 hover 效果影响 */
color: var(--color-console-fg) !important;
background-color: var(--color-console-activeBg) !important;
svg.tw-text-green {
color: var(--color-console-fg) !important;
}
}
/* 步骤耗时 */
.step-summary-duration {
font-size: 12px;
font-family: var(--fonts-monospace);
}
}
/* 步骤日志 */
.job-step-logs {
animation: overlayAppearDown 200ms cubic-bezier(0.33, 1, 0.68, 1);;
/* 日志字体颜色白色 */
.job-log-line {
color: var(--color-console-fg);
/* 日志 */
.log-msg:hover {
/*被 hover 时覆盖 ANSI 颜色 */
* {
color: var(--color-console-fg);
}
/* 日志超链接 */
a:hover {
color: var(--color-primary) !important;
}
}
}
}
}
}
}
.action-view-right:has(.action-run-summary-view) {
min-height: auto;
}
.action-view-right .action-run-summary-view {
/* 工作流运行信息 */
.action-run-summary-block {
background: var(--color-body);
> .flex-text-block {
/* 工作流触发方式和触发时间 */
&:first-child {
font-size: 12px;
gap: 4px;
}
/* 工作流运行状态和运行时间 */
&:last-child {
color: var(--color-console-fg);
gap: 8px;
span {
font-weight: 600;
line-height: 1;
}
}
}
}
/* 流程图 */
.workflow-graph {
/* 流程图工作流信息标题 */
.graph-header {
background: var(--color-console-bg);
border-bottom: 0;
padding: 16px;
gap: 16px;
/* 流程图标题(目前仅为解释, 内容为 Workflow Dependencies), 无需显示 */
.graph-title {
display: none;
}
/* 流程图信息 */
.graph-stats {
align-self: flex-start;
font-size: 12px;
column-gap: 4px;
}
/* 流程图操作按钮组 */
> .flex-text-block {
gap: 8px;
.ui.compact.tiny.button {
width: 28px;
height: 28px;
min-height: 28px;
padding: 0;
}
}
}
/* 流程图 */
.graph-container {
background: var(--color-console-bg);
.graph-svg {
/* 节点之间的连线 */
.node-edge {
stroke: var(--color-light-border);
stroke-width: 2px;
}
/* 高亮连线 */
.highlighted-edge {
stroke-width: 3px !important;
}
&:has(.highlighted-edge) {
/* 有高亮线时, 降低其他线的颜色, 避免后面 path 未高亮元素遮挡高亮线 */
.node-edge {
opacity: 0.3;
&.highlighted-edge {
opacity: 1;
}
}
}
.job-node-group {
/* 节点 */
.job-rect {
fill: var(--github-workflow-card-bg);
stroke-width: 1px;
}
/* 节点上的端口 */
.node-port {
r: 5.5;
fill: var(--github-bgColor-neutral-emphasis);
stroke: var(--color-menu);
stroke-width: 3px;
}
&:hover {
filter: var(--github-shadow-resting-medium);
/* 保留 Gitea 节点悬浮色, 因为无法实现 GitHub 悬浮时降低其他节点颜色 */
.job-rect {
fill: var(--color-hover);
}
/* 节点上的端口 */
.node-port {
fill: var(--color-workflowEdgeHover);
}
}
/* 节点上的步骤状态图标 */
.job-status-icon-wrap {
span {
line-height: 1; /* 使图标垂直居中 */
}
}
}
}
}
}
}
+52
View File
@@ -0,0 +1,52 @@
.page-footer {
background-color: var(--color-body);
border-top: 0;
color: var(--color-text-light-1);
font-size: 12px;
gap: 32px;
justify-content: center;
padding: 16px 0 40px 0;
> .left-links {
gap: 4px;
a {
color: var(--color-text-light-1);
&:hover {
color: var(--color-primary);
}
}
strong {
font-weight: 400;
}
}
> .right-links {
gap: 16px;
> .ui.dropdown {
font-size: 12px;
&:hover {
color: var(--color-primary);
}
> .flex-text-inline {
gap: 4px;
}
}
> a {
border-left: 0;
color: var(--color-text-light-1);
padding-left: 0;
margin-left: 0;
&:hover {
color: var(--color-primary);
}
}
/* 主题按钮&菜单项 */
.ui.dropdown .theme-menu-item {
gap: 4px;
}
/* 主题菜单 */
.menu.theme-menu > .item > .theme-menu-item {
padding: 0;
}
}
}
+154
View File
@@ -0,0 +1,154 @@
#user-heatmap {
+ .divider:not(.divider-text) {
border-color: #0000;
margin: 8px 0px;
}
.total-contributions {
left: 25px + 20px;
bottom: 0 + 12px;
}
.total-contributions,
.vch__legend-right {
color: var(--color-text-light-1);
}
.vch__container {
padding: 12px 20px;
box-shadow:
0px 0px 0px 1px var(--color-light-border),
var(--github-shadow-resting-small);
border-radius: 12px;
/* 覆盖热力图和图例的背景色 */
.vch__day__square,
.vch__legend__wrapper rect {
/* 圆角 */
rx: 2.5px;
ry: 2.5px;
/* hover 时的圆角 */
border-radius: 0.75px;
/* 宽度和高度可以用来控制间隔 */
width: 9px;
height: 9px;
/* 边框 */
outline: 0.5px solid var(--github-contribution-default-borderColor-0);
/* 边框向内偏移 */
outline-offset: -0.5px;
&[style="fill: var(--color-secondary-alpha-60);"] {
fill: var(--github-contribution-default-bgColor-0) !important;
}
&[style="fill: var(--color-primary-light-4);"] {
fill: var(--github-contribution-default-bgColor-1) !important;
outline-color: var(--github-contribution-default-borderColor-1);
}
&[style="fill: var(--color-primary-light-2);"] {
fill: var(--github-contribution-default-bgColor-2) !important;
outline-color: var(--github-contribution-default-borderColor-2);
}
&[style="fill: var(--color-primary);"] {
fill: var(--github-contribution-default-bgColor-3) !important;
outline-color: var(--github-contribution-default-borderColor-3);
}
&[style="fill: var(--color-primary-dark-2);"] {
fill: var(--github-contribution-default-bgColor-4) !important;
outline-color: var(--github-contribution-default-borderColor-4);
}
&[style="fill: var(--color-primary-dark-4);"] {
fill: var(--github-contribution-default-bgColor-5) !important;
outline-color: var(--github-contribution-default-borderColor-5);
}
}
}
}
.activity-heatmap-container + .divider:not(.divider-text) {
border-color: #0000;
}
.flex-list#activity-feed {
border-radius: 12px;
box-shadow:
0px 0px 0px 1px var(--color-light-border),
var(--github-shadow-resting-small);
> .flex-item {
gap: 12px;
padding: 16px;
> .flex-item-leading {
img {
width: 24px;
height: 24px;
border-radius: 9999px;
}
}
/* 动态的主要内容 */
> .flex-item-main {
gap: 8px !important;
/* 动态的标题 */
> div:not([class]) {
display: flex;
align-items: baseline;
gap: 6px;
flex-wrap: wrap;
> a {
color: var(--color-text);
/* 不匹配作者 */
&:not([title]) {
/* 尽量只选中仓库名, 不匹配标签和分支 */
&:not([href*="tag"]):not([href*="branch"]) {
color: var(--color-primary);
text-decoration: underline;
}
}
}
relative-time {
color: var(--color-text-light-1);
font-size: 12px;
}
}
/* 动态的描述 */
> .tw-flex-col {
gap: 0px !important;
> .flex-text-block {
gap: 4px;
font-size: 12px;
color: var(--color-text-light-1);
img {
width: 16px;
height: 16px;
border-radius: 9999px;
}
.ui.sha.label {
margin-top: 0;
}
}
}
> .flex-item-body {
gap: 4px;
font-size: 12px;
color: var(--color-text-light-1);
}
> a {
font-size: 12px;
}
}
/* 动态的右侧 svg 图标 */
.flex-item-trailing {
align-self: center;
svg {
height: 18px;
width: 18px;
}
}
}
> .page.buttons {
border-top: 1px solid var(--color-secondary);
padding: 12px 0px;
}
}
+829
View File
@@ -0,0 +1,829 @@
/* 工单&PR标题右侧按钮 */
.repository.view.issue .issue-title-buttons > .ui.button {
padding: 0 12px;
height: 32px;
}
.issue-content-left {
.badge {
/* 时间线打开状态标签 */
&.tw-bg-green {
background-color: var(--github-bgColor-success-emphasis) !important;
}
/* 时间线关闭状态标签 */
&.tw-bg-red {
background-color: var(--github-bgColor-done-emphasis) !important;
}
/* 时间线合并状态标签 */
&.tw-bg-purple {
background-color: var(--github-bgColor-done-emphasis) !important;
}
}
}
/* 工单&PR状态标签 */
.ui.label.issue-state-label {
border-radius: 25px !important;
&.green {
color: var(--color-white) !important;
background-color: var(--github-bgColor-success-emphasis) !important;
border-color: var(--github-bgColor-success-emphasis) !important;
}
&.red {
color: var(--color-white) !important;
background-color: var(--github-bgColor-done-emphasis) !important;
border-color: var(--github-bgColor-done-emphasis) !important;
}
&.purple {
color: var(--color-white) !important;
background-color: var(--github-bgColor-done-emphasis) !important;
border-color: var(--github-bgColor-done-emphasis) !important;
}
}
.repository.view.issue .pull-desc code,
#issue-list .flex-item-body .branches .branch {
color: var(--github-fgColor-accent);
background-color: var(--github-bgColor-accent-muted);
border-radius: var(--border-radius);
font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace);
font-size: 12px;
padding: 0 5px;
line-height: 18px;
}
.repository.view.issue .pull-desc code {
padding-top: 3px;
padding-bottom: 3px;
a:hover {
text-decoration-line: none;
}
}
.repository {
/* Issue/PR 列表下的所有筛选菜单 */
&.issue-list .ui.dropdown .menu, .ui.menu .ui.dropdown .menu,
/* Issue/PR 详情下的右侧的上半部分选项菜单 */
&.issue.view .issue-content-right .ui.dropdown .scrolling.menu {
.item:hover:after {
content: "";
background-color: var(--github-borderColor-accent-emphasis);
border-radius: var(--border-radius);
height: 24px;
left: -8px;
position: absolute;
top: calc(50% - 12px);
width: 4px;
}
}
}
.repository.view.issue .comment-list .timeline-item.pull-merge-box {
/* 头像 */
.timeline-avatar {
border-radius: 9999px;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
svg {
width: 24px;
height: 24px;
}
/* PR 界面的 PR 操作评论 */
&.text {
color: var(--color-white) !important;
border-radius: var(--border-radius);
/* 操作评论边框 */
+ .content > .ui.attached.segment {
border-width: 1.5px;
}
&.grey {
background-color: var(--color-text-light-1);
}
&.green {
background-color: var(--github-bgColor-success-emphasis);
+ .content > .ui.attached.segment {
border-left-color: var(--github-bgColor-success-emphasis);
border-right-color: var(--github-bgColor-success-emphasis);
&:first-child {
border-top-color: var(--github-bgColor-success-emphasis);
}
&:last-child {
border-bottom-color: var(--github-bgColor-success-emphasis);
}
}
}
&.purple {
background-color: var(--github-bgColor-done-emphasis);
+ .content > .ui.attached.segment {
border-left-color: var(--github-bgColor-done-emphasis);
border-right-color: var(--github-bgColor-done-emphasis);
&:first-child {
border-top-color: var(--github-bgColor-done-emphasis);
}
&:last-child {
border-bottom-color: var(--github-bgColor-done-emphasis);
}
}
}
&.yellow {
background-color: var(--github-bgColor-attention-emphasis);
+ .content > .ui.attached.segment {
border-left-color: var(--github-bgColor-attention-emphasis);
border-right-color: var(--github-bgColor-attention-emphasis);
&:first-child {
border-top-color: var(--github-bgColor-attention-emphasis);
}
&:last-child {
border-bottom-color: var(--github-bgColor-attention-emphasis);
}
}
}
&.red {
background-color: var(--github-bgColor-danger-emphasis);
+ .content > .ui.attached.segment {
border-left-color: var(--github-bgColor-danger-emphasis);
border-right-color: var(--github-bgColor-danger-emphasis);
&:first-child {
border-top-color: var(--github-bgColor-danger-emphasis);
}
&:last-child {
border-bottom-color: var(--github-bgColor-danger-emphasis);
}
}
}
}
}
/* 检查状态 */
.commit-status-panel {
.commit-status-header {
background: var(--color-body);
padding: 16px;
font-size: 16px;
font-weight: 600;
.ui.right {
color: var(--color-text-light-1);
font-size: 14px;
font-weight: 400;
}
}
/* 检查状态列表 */
.commit-status-list {
background: var(--color-menu);
.commit-status-item {
border-radius: var(--border-radius);
padding: 2px 8px;
margin: 0px 8px;
height: 37px;
&:first-child {
margin-top: 8px;
}
&:last-child {
margin-bottom: 8px;
}
&:hover {
background-color: var(--color-hover-opaque);
}
}
}
}
/* 合并信息和操作 */
.merge-section {
color: var(--color-text-light-1);
padding: 16px;
display: grid;
gap: 8px;
&::before,
&::after {
display: none;
}
}
}
.page-content.repository.issue {
.issue-title-header {
.issue-title-meta {
.issue-state-label {
padding: 6px 9px !important;
}
.time-desc {
color: var(--color-text-light-1);
}
}
}
}
.comment .comment-container {
img.ui.avatar {
border-radius: 9999px;
}
/* 去除评论标题左侧指向头像的小箭头 */
.comment-header,
&:target .comment-header {
&:before,
&:after {
display: none;
}
}
/* 评论焦点样式 */
&:target {
.comment-container {
border-color: var(--github-borderColor-accent-emphasis) !important;
box-shadow: 0 0 0 1px var(--color-primary) !important;
}
}
.comment-header {
padding: 4px 4px 4px 16px;
min-height: 38px;
.comment-header-left {
/* bot 标签 */
.ui.basic.label {
height: 20px;
padding: 0 6px !important;
margin-left: 4px;
}
a:has(relative-time) {
text-decoration: underline;
}
/* 已编辑按钮 */
.content-history-menu {
color: var(--color-text-light-1) !important;
.menu .item {
font-size: 12px;
.ui.avatar {
height: 20px;
width: 20px;
}
}
}
}
}
.comment-header-right {
> .item,
> .label {
color: var(--color-text-light-1);
}
> .ui.label {
background-color: initial;
font-size: 12px;
height: 20px;
padding: 0 6px;
}
.context-dropdown {
height: 28px;
padding: 0 6px;
border-radius: var(--border-radius);
&:hover {
background-color: var(--github-control-transparent-bgColor-hover);
}
&:active {
background-color: var(--github-control-transparent-bgColor-active);
}
a.context-menu {
display: flex;
align-items: center;
&:hover {
color: inherit;
}
}
/* 评论菜单的删除按钮 */
.menu .item.delete-comment {
color: var(--color-red);
&:hover {
background-color: var(--color-red-badge-bg) !important;
color: var(--color-red-light);
}
&:active {
background-color: var(--github-control-danger-bgColor-active) !important;
}
}
}
}
/* 表情菜单按钮头部+底部 */
.ui.dropdown.action.select-reaction > a {
display: flex;
align-items: center;
justify-content: center;
background: var(--color-button);
border-radius: 9999px;
border: 1px solid var(--color-light-border);
color: var(--color-text-light-1);
padding: 0px 8px !important;
height: 28px;
width: 28px;
}
/* 底部表情栏 */
.bottom-reactions {
.ui.ui.ui.label {
background-color: unset !important;
border-radius: 9999px;
border-color: var(--color-light-border);
&:hover {
background-color: var(--color-reaction-hoverBg) !important;
border-color: var(--color-light-border);
}
.reaction {
font-size: 12px;
}
.reaction-count {
color: var(--color-text-light);
font-weight: 500;
margin-left: 0;
}
}
/* 显示表情菜单按钮 */
.select-reaction {
padding: 0;
/* 两个表情按钮看着怪怪的, 很难受 */
/* visibility: visible; */
}
}
}
.repository .comment.form .content .segment {
&::before,
&::after {
display: none;
}
}
/* 仓库页面的里程碑列表菜单栏 */
.page-content.repository.milestones,
.page-content.repository.milestone-issue-list,
.page-content.repository.issue-list {
--checkbox-size: 16px;
/* 头部筛选菜单栏 */
.issue-list-toolbar {
align-items: center;
align-content: center;
background-color: var(--color-box-header);
border: 1px solid var(--color-light-border);
border-bottom: 0;
border-top-left-radius: var(--border-radius);
border-top-right-radius: var(--border-radius);
height: 48px;
padding: 8px;
margin-top: 16px;
.issue-list-toolbar-left {
/* 复选框 */
input {
margin: 0 8px !important;
}
> .ui.compact.menu {
align-items: center;
border: 0;
> .item {
background: unset !important;
border-radius: var(--border-radius);
color: var(--color-text-light-1);
padding: 0px 8px;
height: 30px;
&:before {
display: none;
}
&:hover {
background: var(--github-control-transparent-bgColor-hover) !important;
}
&.active {
color: var(--color-text);
font-weight: 700;
}
}
}
}
.issue-list-toolbar-right > .ui.menu {
align-items: center;
> .item {
color: var(--color-text-light-1);
}
> .ui.button {
padding: 0 12px;
height: 32px;
}
}
img.ui.avatar {
border-radius: 9999px;
}
&#issue-actions {
.issue-list-toolbar-right > .ui.menu > .item {
padding: 0 12px;
height: 32px;
background: var(--color-button);
border: 1px solid var(--color-light-border);
color: var(--color-text);
&:hover {
background: var(--color-hover);
}
}
}
}
}
/* 里程碑详细页面的 Issue 列表 */
.page-content.repository.milestone-issue-list,
/* 顶部仪表板的 Issue 列表 */
.page-content.dashboard.issues,
/* 用户订阅的 Issue 列表 */
.page-content.user.notification,
/* 仓库 Issue 列表 */
.page-content.repository.issue-list {
.flex-list#issue-list {
border: 1px solid var(--color-light-border);
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
img.ui.avatar {
border-radius: 9999px;
}
> .flex-item {
align-items: center;
padding: 0;
min-height: 64px;
&:last-child {
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
}
&:hover {
background-color: var(--color-hover-opaque);
}
&:has(:checked) {
background-color: var(--github-bgColor-accent-muted);
}
> .flex-item-leading {
align-self: flex-start;
margin-top: 14px;
margin-left: 16px;
> .flex-text-inline {
margin-top: 0px !important;
/* 复选框 */
input {
margin-right: 8px !important;
}
}
}
> .flex-item-main {
gap: 4px;
.flex-item-header {
padding-top: 8px;
}
.flex-item-body {
font-size: 12px;
padding-bottom: 8px;
}
}
> .flex-item-trailing {
margin-right: 32px;
}
}
}
}
/* 里程碑列表 */
/* [TODO] 暂时排除项目的列表 */
.page-content.repository.milestones:not(.projects) .milestone-list {
border: 1px solid var(--color-light-border);
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
.milestone-card {
padding: 8px 16px 10px 16px;
.milestone-header {
h3 {
font-size: 16px;
font-weight: 500;
}
div span {
font-size: 14px;
font-weight: 600;
}
}
}
.milestone-toolbar {
font-size: 12px;
.group > a {
font-size: 13px;
}
}
}
@media (max-width: 1023.98px) {
.page-content.repository.milestones,
.page-content.repository.milestone-issue-list,
.page-content.repository.issue-list {
.issue-list-toolbar {
height: auto;
}
}
}
#issue-pins {
gap: 12px;
margin-bottom: 16px;
.issue-card {
padding: 16px 12px;
.content {
.issue-card-title {
font-size: 16px;
font-weight: 600;
}
svg {
color: var(--color-text-light-1);
height: 100%;
margin-right: 3px;
}
.meta {
font-size: 12px;
padding-top: 4px;
}
}
.issue-card-bottom {
display: none;
}
}
img.ui.avatar {
border-radius: 9999px;
}
}
/* 创建PR页面 */
.page-content.repository.diff.compare.pull,
/* 工单&创建工单&PR页面侧边栏 */
.page-content.repository.issue {
.issue-content {
img.ui.avatar {
border-radius: 9999px;
}
gap: 24px;
/* 侧边栏 */
.issue-content-right {
border: 0;
font-size: 12px;
padding: 0;
.ui.button {
font-size: 12px;
}
.ui.form,
a.fixed-text.muted,
span.text,
/* 列表项为空时的文字 */
span.item.empty-list,
p {
color: var(--color-text-light-1);
font-size: 12px;
}
/* WIP 前缀提示 */
> a,
.ui.dropdown.select-branch,
.ui.form,
a.fixed-text.muted,
span.text,
.ui.watching > div,
.ui.depending > div,
.flex-text-block,
.ui.list,
.toggle-wip,
p {
padding: 4px 8px;;
}
/* 允许维护者编辑 */
> .ui.checkbox {
margin: 4px 8px;
strong {
font-weight: 400;
}
}
.issue-sidebar-combo {
.ui.dropdown > a.fixed-text.muted {
align-items: center;
border-radius: var(--border-radius);
text-decoration-line: none;
height: 28px;
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
}
.ui.list {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
/* 评审人 */
.ui.relaxed.list {
.item {
/* 操作图标按钮 */
a.muted.icon {
color: var(--color-text-light-1);
&:hover {
color: var(--color-primary);
}
}
}
}
/* 标签菜单项 */
.ui.dropdown > .menu > .scrolling.menu > .item:has(.item-secondary-info) {
/* 修复标签菜单中描述文本过长没有换行挤掉标签的问题 */
display: grid !important;
grid-template-columns: auto auto 1fr;
row-gap: 0px; /* 去除行间距, 仅当有描述信息时才有间距(.tw-pl-\[20px\]) */
/* 如果是归档标签则隐藏 */
&.tw-hidden {
display: none !important;
}
/* 默认隐藏多余信息避免标签对齐问题 */
.item-secondary-info {
display: none;
grid-column: 2 / -1; /* 从第2列对齐 */
color: var(--color-text-light-1);
> .tw-pl-\[20px\] {
/* 已经与第二列对齐, 不需要额外的 padding */
padding-left: 0px !important;
padding-top: 4px;
/* 显示全部描述信息与 Github 保持一致 */
white-space: normal;
small {
font-size: 12px;
}
}
> .archived-label-hint {
/* 与父元素 item 的 padding 对齐 (dropdown.ts .ui.dropdown .menu > .item) */
top: 6px;
right: 8px;
}
/* 如果有描述信息则显示 */
&:has(.tw-pl-\[20px\]) {
display: block;
> .archived-label-hint {
top: 4px; /* 有描述信息的归档标签与标签对齐需要更高点 */
}
}
/* 如果有归档标签则显示 */
&:has(.archived-label-hint > .ui.label) {
display: block;
}
}
}
/* 修复菜单下拉打开时, 无法聚焦输入框 */
.menu input {
transition: none;
}
}
/* 时间追踪 */
> div:not([class]):not([id]) {
> .flex-text-block {
color: var(--color-text-light-1);
}
> .ui.buttons {
padding: 4px 8px;;
.button {
height: 30px;
min-height: 30px;
&:hover {
border-color: var(--color-light-border);
+ .button {
border-left-color: var(--color-light-border);
}
}
}
}
}
/* 选中日期颜色 */
.ui.form .due-date {
color: var(--color-text);
}
/* 分割线 */
> .divider {
margin: 12px 0 12px 8px;
width: calc(100% - 16px);
}
/* 订阅按钮 */
.ui.watching .ui.button {
padding: 0px 8px;
height: 30px;
min-height: 30px;
svg {
margin: 0 !important;
}
}
/* PIN 按钮 */
.form-fetch-action.single-button-form .ui.button,
/* 底部操作按钮 */
> .ui.show-modal.button {
border: 0;
background: unset;
font-weight: 400;
padding: 4px 8px;;
/* 好像是浏览器 BUG, 最后不生效, 必须 !important */
margin: 0 !important;
justify-content: left;
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
&:active {
background-color: var(--github-control-transparent-bgColor-active);
}
}
.ui.show-modal.button[data-modal="#sidebar-delete-issue"] {
color: var(--color-red);
svg {
color: inherit;
}
&:hover {
background-color: var(--color-red-badge-bg);
color: var(--color-red-light);
}
&:active {
background-color: var(--github-control-danger-bgColor-active) !important;
}
}
}
}
}
.repository.view.issue {
.comment-list {
/* 时间线本线 */
.timeline::before {
/* 不遮挡归档信息框, 归档信息框背景色有透明度时会漏出线 */
height: calc(100% - 62px);
}
.timeline-item,
.timeline-item-group {
padding: 12px 0;
.comment-text-line {
color: var(--color-text-light-1);
}
/* 事件 */
&.event {
/* 修复覆盖后的位置问题 */
padding-left: 15px;
/* 避免锚中批准的头像 */
.avatar-with-link .avatar {
width: 20px;
height: 20px;
}
/* 批准时间的头像 */
/* 头部居中偏移量(头像高度 - 标准行信息高度) / 2: (40px - 32px) / 2 = 4px */
.timeline-avatar {
top: -4px;
}
/* bot 标签 */
.comment-text-line .ui.basic.label {
height: 20px;
padding: 0 6px !important;
margin-left: 4px;
}
.badge {
border: 2px solid var(--color-body);
}
/* 仅匹配只有 badge */
[class="badge"] {
background-color: var(--github-control-bgColor-rest);
svg {
color: var(--color-text-light-1);
}
}
}
/* 提交 */
&.commits-list {
/* 每个提交之间的间隔 */
.flex-text-block {
padding-top: 4px;
}
.badge svg {
color: var(--color-text-light-1);
}
/* 仅覆盖左侧 commit 不覆盖右侧 SHA */
a.muted {
font-size: 12px;
color: var(--color-text-light-1);
text-decoration-line: underline;
&:hover {
color: var(--color-primary);
}
}
}
}
}
}
+197
View File
@@ -0,0 +1,197 @@
#navbar {
padding: 8px 16px; /* 上下内边距 + .navbar-left & .navbar-right 的 min-height = 64px */
min-height: 64px;
position: relative;
z-index: 1000;
.navbar-left,
.navbar-right {
min-height: 48px;
}
.navbar-right {
gap: 8px;
> .navbar-theme-toggle {
align-items: center;
justify-content: center;
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
color: var(--color-text);
height: 32px;
min-height: 32px;
min-width: 32px;
padding: 0;
width: 32px;
&:hover,
&.active {
background-color: var(--color-nav-hoverBg);
}
}
}
.navbar-left {
gap: 8px;
> .item {
padding: 4px 8px;
min-height: 20px;
&.active {
font-weight: 600;
}
&#navbar-logo {
/* 与下方的用户切换头像对齐 */
padding-left: 6px;
&:hover {
background: unset;
}
img {
height: 32px;
width: 32px;
}
}
}
}
/* 进入用户页面后, 避免注册, 登录和首页等意外覆盖 */
.navbar-right:has(.user-menu) {
gap: 8px;
/* 右侧按钮, 但不包括头像 */
> .item:not(.navbar-user-menu):not(.navbar-theme-toggle) {
align-items: center;
justify-content: center;
gap: 4px;
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
padding: 0;
height: 32px;
min-width: 32px;
min-height: 32px;
/* 纠正内容保证居中 */
.tw-relative {
height: 16px;
width: 16px;
}
.svg {
color: var(--color-text-light-1);
}
/* 带下拉菜单的按钮 */
&.ui.dropdown {
padding: 0 8px;
.text {
display: grid;
grid-auto-flow: column;
align-items: center;
> svg {
margin-right: 4px;
}
/* 三角号纠正高度保持居中 */
.not-mobile {
height: 16px;
}
}
&:hover {
background-color: var(--color-nav-hoverBg);
}
}
}
.item.ui.dropdown {
/* 头像菜单 */
&.navbar-user-menu {
padding: 0;
.text {
/* 不显示头像右侧的小箭头下拉菜单标识 */
> .not-mobile {
display: none;
}
/* 手机下的用户名 */
> .only-mobile {
margin-left: 12px;
font-weight: 600;
}
.navbar-avatar {
/* 头像 */
img {
border-radius: 9999px;
height: 32px;
max-height: 32px;
width: 32px;
max-width: 32px;
margin: 0 !important;
}
/* 管理员标识 */
.navbar-admin-badge {
height: 18px;
min-width: 18px;
bottom: calc(100% - 32px);
left: calc(100% - 11px);
padding: 2px;
border-color: var(--color-nav-bg); /* 锁定边框色, 避免鼠标悬浮时改变颜色 */
}
}
}
&.active {
background: unset;
}
}
}
/* 通知和计时器的圆点 */
a.item {
.notification_count,
.header-stopwatch-dot {
background-color: var(--github-bgColor-accent-emphasis);
border-radius: 9999px;
border-color: var(--color-nav-bg);
color: var(--color-white);
font-size: 9px;
font-weight: 600;
top: -15px;
left: 11px;
}
}
}
/* 用户菜单 */
.navbar-right .user-menu {
z-index: 1001;
width: var(--custom-user-menu-width, 192px);
max-width: 320px;
> .header {
font-size: 14px;
font-weight: 400;
margin: 0;
padding: 16px 16px 8px 16px;
strong {
font-weight: 600;
}
}
> .divider {
margin: 8px;
width: calc(100% - 16px);
}
}
}
/* 手机下的导航栏 */
@media (max-width: 767.98px) {
#navbar {
&.navbar-menu-open {
gap: 8px;
}
.navbar-mobile-right {
gap: 8px;
> .item {
align-items: center;
justify-content: center;
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
padding: 0;
height: 32px;
min-width: 32px;
min-height: 32px;
/* 纠正内容保证居中 */
.tw-relative {
height: 16px;
width: 16px;
}
.svg {
margin: 0;
}
}
}
}
}
@@ -0,0 +1,179 @@
.page-content.user.notification {
> .ui.container {
> .ui.attached.segment {
border: 0;
padding: 0;
> .divider {
display: none;
}
/* 订阅列表 */
&:has(#issue-list) {
> .tw-flex {
align-items: center;
align-content: center;
background-color: var(--color-box-header);
border: 1px solid var(--color-light-border);
border-bottom: 0;
border-top-left-radius: var(--border-radius);
border-top-right-radius: var(--border-radius);
height: 52px;
padding: 8px;
/* 左侧菜单 */
> .tw-flex:first-child > .ui.compact.menu {
align-items: center;
border: 0;
> .item {
background: unset !important;
border-radius: var(--border-radius);
color: var(--color-text-light-1);
padding: 0px 8px;
height: 30px;
&:before {
display: none;
}
&:hover {
background: var(--github-control-transparent-bgColor-hover) !important;
}
&.active {
color: var(--color-text);
font-weight: 700;
}
}
}
/* 右侧菜单 */
> .tw-flex:last-child > .ui.menu {
align-items: center;
> .item {
color: var(--color-text-light-1);
}
> .ui.button {
padding: 0 12px;
height: 32px;
}
}
}
}
/* 关注列表 */
> .flex-list:not([id]) {
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
> .flex-item {
padding: 16px;
> .flex-item-main {
gap: 4px;
> .flex-item-header {
> .flex-item-title {
gap: 12px;
}
> .flex-item-trailing {
color: var(--color-text-light-1);
font-size: 12px;
font-weight: 400;
gap: 16px;
.color-icon {
width: 12px;
height: 12px;
margin-right: 0 !important;
}
}
}
> .flex-item-body:last-child {
font-size: 12px;
}
}
}
}
}
/* 通知列表 */
&:has(#notification_table) {
> .flex-text-block:first-child {
background-color: var(--color-box-header);
border: 1px solid var(--color-light-border);
border-bottom: 0;
border-top-left-radius: var(--border-radius);
border-top-right-radius: var(--border-radius);
height: 52px;
padding: 8px;
margin-bottom: 0 !important;
/* 左侧菜单 */
> .ui.compact.menu {
align-items: center;
border: 0;
> .item {
background: unset !important;
border-radius: var(--border-radius);
color: var(--color-text-light-1);
padding: 0px 8px;
height: 30px;
&:before {
display: none;
}
&:hover {
background: var(--github-control-transparent-bgColor-hover) !important;
}
&.active {
color: var(--color-text);
font-weight: 700;
}
.notifications-unread-count {
margin-left: 4px;
}
}
}
}
/* 通知全部确认按钮 */
.ui.ui.ui.ui.mini.button {
height: 32px;
}
}
/* 通知列表 */
#notification_table {
border-top-left-radius: 0;
border-top-right-radius: 0;
color: var(--color-text-light-1);
> .notifications-item {
border-top: 1px solid var(--color-light-border);
padding: 12px !important;
&:first-child {
border-top: 0;
}
&:last-child {
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
&:hover {
border-bottom-left-radius: 0;
}
}
&:hover {
background: var(--github-bgColor-accent-muted);
box-shadow: 2px 0 0 var(--github-borderColor-accent-emphasis) inset;
color: var(--color-text);
}
> .notifications-link > div {
&:first-child {
font-size: 12px !important;
}
&:last-child {
font-size: 14px !important;
}
}
> .notifications-updated {
font-size: 12px;
}
> .notifications-buttons {
.interact-bg {
background: var(--github-bgColor-accent-muted) !important;
color: var(--color-text-light-1);
padding: 8px !important;
&:hover {
background: var(--github-control-transparent-bgColor-hover) !important;
color: var(--color-text);
}
}
}
}
}
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,211 @@
ul.gitea-github-theme-templates-commits-list {
margin: 0;
padding: 0;
list-style: none;
li.gitea-github-theme-commit {
border-bottom: 1px solid var(--color-secondary);
padding: 8px 16px;
gap: 4px;
display: grid;
grid-template-areas: "primary metadata actions" "secondary metadata actions";
grid-template-rows: repeat(2, auto);
grid-template-columns: minmax(30%, 1fr) minmax(0, max-content) min-content;
&:last-child {
border-bottom: none;
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
}
&:hover {
background-color: var(--color-hover-opaque);
}
.message {
grid-area: primary;
.commit-summary {
font-size: 16px;
font-weight: 500;
white-space: pre-wrap;
}
.ellipsis-button {
padding: unset;
height: 1.5rem;
min-width: 1.75rem;
background: unset;
border: unset;
vertical-align: bottom;
&:hover {
background: var(--color-hover);
}
}
.commit-body {
font-size: 12px;
font-weight: 400;
color: var(--color-text-light-1);
margin: 8px 0;
}
}
.metadata {
grid-area: secondary;
font-size: 12px;
color: var(--color-text-light-1);
display: flex;
align-items: center;
flex-direction: row;
gap: 4px;
.author-wrapper {
display: flex;
align-items: center;
}
img.ui.avatar {
border-radius: 9999px;
margin-right: 4px;
}
.ui.label svg {
min-width: 12px;
min-height: 12px;
width: 12px;
height: 12px;
}
}
.extra {
grid-area: metadata;
display: flex;
align-items: center;
flex-direction: row;
flex-wrap: wrap;
column-gap: 8px;
.gitea-github-theme-tag {
border-width: 1.5px;
border-radius: 9999px;
height: 25px;
}
}
.actions {
grid-area: actions;
display: flex;
align-items: center;
flex-direction: row;
gap: 4px;
color: var(--color-text-light-1);
.gitea-github-theme-action {
justify-content: center;
height: 28px;
width: 28px;
}
}
}
}
@media (max-width: 767.98px) {
ul.gitea-github-theme-templates-commits-list {
li.gitea-github-theme-commit {
grid-template-areas: "primary primary" "metadata actions" "secondary actions";
grid-template-rows: repeat(3, auto);
}
}
}
a.ui.label.commit-id-short.gitea-github-theme-commit-sha {
gap: 8px;
padding: unset;
margin: unset;
height: 26px;
margin: 0 4px;
&.commit-is-signed {
&:hover {
background-color: unset !important;
}
span.ui.label.commit-sign-badge.commit-is-signed {
margin: unset;
}
}
.gitea-github-theme-sha {
border-radius: var(--border-radius);
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji",
"Segoe UI Emoji";
font-weight: 500;
padding: 0px 8px;
height: 26px;
min-width: 85px; /* 非等宽字体导致不对齐, 目前看到最大长度为 83px */
display: flex;
align-items: center;
justify-content: center;
&:hover {
background-color: var(--color-hover);
}
}
}
.ui.label.commit-sign-badge.gitea-github-theme-commit-sign-badge {
font-family:
-apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji",
"Segoe UI Emoji";
font-weight: 500;
}
.gitea-github-theme-templates {
/* 仓库按钮行 */
&.repo-button-row {
margin: 0 0 16px 0;
.repo-button-row-left .repository-summary {
/* 分支/标签样式 */
> .item {
display: inline-flex;
align-items: center;
gap: 4px;
border-radius: var(--border-radius);
color: var(--color-text-light-1);
padding: 4px;
height: 32px;
min-height: 32px;
&:hover {
background-color: var(--github-control-transparent-bgColor-hover);
text-decoration-line: none;
}
svg {
color: var(--github-button-invisible-iconColor-rest);
margin-right: 4px;
}
b {
color: var(--color-caret);
}
}
}
}
}
/* 仓库页和文件列表文件夹页的最后一次提交 */
.repository.file.list #repo-files-table .gitea-github-theme-templates.repo-file-line.repo-file-last-commit {
padding-right: 10px;
/* 提交时间 */
.gitea-github-theme-latest-time {
color: var(--color-text-light-1);
font-size: 12px;
}
/* 提交历史按钮 */
.gitea-github-theme-latest-commit {
display: inline-flex;
align-items: center;
gap: 4px;
border-radius: var(--border-radius);
padding: 0px 8px;
min-height: 28px;
height: 28px;
font-size: 12px;
font-weight: 500;
&:hover {
background-color: var(--github-control-transparent-bgColor-hover);
color: inherit;
text-decoration-line: none;
}
svg {
color: var(--github-button-invisible-iconColor-rest);
}
}
}
+66
View File
@@ -0,0 +1,66 @@
/* 设置右面板的内容 */
.user-main-content,
.repo-setting-content,
.user-setting-content,
.org-setting-content,
.admin-setting-content,
/* 仓库动态页面 */
/* 新建页面内容 */
.page-content.repository.new-repo,
.page-content.repository.new.migrate,
.page-content.repository.new.fork,
.page-content.organization.new.org {
.ui.top.attached.header {
border: 0;
font-size: 20px;
font-weight: 400;
background-color: unset !important;
margin-bottom: 0.25rem;
padding-left: 0;
padding-right: 0;
> .ui.right {
right: 0;
}
}
.ui.attached.segment {
background-color: unset;
border-top-left-radius: var(--border-radius) !important;
border-top-right-radius: var(--border-radius) !important;
border-bottom-left-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border: 1px solid var(--color-light-border) !important;
+ .ui.attached.segment {
border-top-width: 0 !important;
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
}
/* 隐藏的元素下面的元素, 目前仅适用于在后台控制中的自我检查 */
&.tw-hidden + .ui.attached.segment {
border-top-width: 1px !important;
border-top-left-radius: var(--border-radius) !important;
border-top-right-radius: var(--border-radius) !important;
}
&:has(+ :not(.ui.attached.segment)),
&:last-child {
border-bottom-left-radius: var(--border-radius) !important;
border-bottom-right-radius: var(--border-radius) !important;
}
}
.ui.attached.segment.error {
border: 1px solid var(--color-error-border) !important;
}
}
.page-content.repository.commits .flex-container-main:has(.ui.header.activity-header) {
> .ui.attached.segment {
border-radius: 0;
&:has(+ :not(.ui.attached.segment)) {
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
}
}
}
+21
View File
@@ -0,0 +1,21 @@
body {
line-height: 1.5;
}
a {
text-underline-offset: 0.2rem; /* 0.2rem 可以始终保持下划线不受 overflow: hidden 的影响 */
}
/* 默认代码块 */
code:not(.code-inner) {
padding: 0.2em 0.4em;
}
/* 快捷键提示(输入框内) */
kbd {
background-color: #0000;
font-size: 12px;
box-shadow: none;
padding: 4px;
min-width: 20px;
line-height: 10px;
}
+140
View File
@@ -0,0 +1,140 @@
.ui.button {
min-height: 30px;
font-weight: 500;
padding: 9px 16px;
&.ui {
gap: 8px;
}
}
.ui.button:not(.primary):not(.red) svg {
color: var(--color-text-light-1);
}
/* 主色调按钮 */
.ui.primary {
&.button,
/* 按钮组, PR 里的压缩合并按钮 */
&.buttons .button {
color: var(--github-button-primary-fgColor-rest);
background-color: var(--github-button-primary-bgColor-rest);
border-color: var(--github-button-primary-borderColor-rest);
box-shadow: var(--github-shadow-resting-small);
&:hover {
color: var(--github-button-primary-fgColor-rest);
background-color: var(--github-button-primary-bgColor-hover);
border-color: var(--github-button-primary-borderColor-hover);
}
&:active {
color: var(--github-button-primary-fgColor-rest);
background-color: var(--github-button-primary-bgColor-hover);
border-color: var(--github-button-primary-borderColor-hover);
background-color: var(--github-button-primary-bgColor-active);
}
svg {
color: inherit;
}
}
/* 按钮组整体有阴影 */
&.buttons {
box-shadow: var(--github-shadow-resting-small);
.button {
/* 按钮组里的按钮无阴影 */
box-shadow: none;
}
}
}
/* 主色调基本按钮和普通按钮一样 */
/* 作者的关注按钮 */
.ui.basic.primary.button {
background-color: var(--color-button);
color: var(--color-text);
border-color: var(--color-light-border);
box-shadow: none;
&:hover {
background-color: var(--color-hover);
color: var(--color-text);
border-color: var(--color-light-border);
}
}
/* 普通按钮边框色不变 */
.ui.basic.button,
/* 仓库点星等数字标签按钮边框色不变 */
.ui.labeled.button > .label {
&:hover {
border-color: var(--color-light-border);
}
}
/* 普通按钮激活时背景色 */
.ui.button:active,
.ui.basic.buttons .button:active,
.ui.basic.button:active,
.ui.basic.buttons .active.button,
.ui.basic.active.button,
.ui.basic.buttons .active.button:hover,
.ui.basic.active.button:hover {
background-color: var(--github-button-default-bgColor-active);
}
.ui.red.button,
.ui.basic.red.buttons .button,
.ui.basic.red.button {
color: var(--github-button-danger-fgColor-rest);
background-color: var(--github-button-danger-bgColor-rest);
/* 一些按钮边框色为红色, 比如危险操作区, 统一为暗色边框和 github 一致 */
border-color: var(--color-light-border);
&:hover {
color: var(--github-button-danger-fgColor-hover);
background-color: var(--github-button-danger-bgColor-hover);
border-color: var(--github-button-danger-borderColor-hover);
box-shadow: var(--github-shadow-resting-small);
}
&:active {
color: var(--github-button-danger-fgColor-hover);
background-color: var(--github-button-danger-bgColor-active);
border-color: var(--github-button-danger-borderColor-hover);
box-shadow: var(--github-shadow-resting-small);
}
}
/* 修复一些主色调或者其他小按钮的高度避免过高 */
.ui.small.buttons .button,
.ui.ui.ui.ui.small.button {
min-height: 26px;
height: 32px;
}
/* 修复仓库页仓库操作按钮高度对齐和修正 */
.repo-button-row .ui.button {
min-height: 32px;
height: 32px;
}
/* 修复因上面小按钮高度导致仓库星标克隆等按钮高度过高 */
.repo-header {
.ui.ui.ui.ui.small.compact.button,
.ui.labeled.button > .label {
height: 28px;
min-height: 28px;
line-height: 1.5;
}
}
.ui.ui.ui.ui.small.button.compact .ui.tiny.buttons .button,
.ui.ui.ui.ui.tiny.button {
min-height: 20px;
}
/* 修复关注&派生 hover 意外点亮右侧 label 左边框 */
.ui.ui.ui.ui.small.button {
z-index: 0;
}
/* 代码复制按钮 */
.ui.button.code-copy {
padding: 4px 6px;
min-height: 28px;
}
+344
View File
@@ -0,0 +1,344 @@
.ui.dropdown.branch-selector-dropdown > .menu {
width: var(--custom-branch-menu-width, 320px);
max-width: 640px;
> .menu > .item {
animation: overlayAppearDown 200ms cubic-bezier(0.33, 1, 0.68, 1);;
height: 32px;
}
/* 分支/标签切换 */
> .branch-tag-tab {
> .branch-tag-item {
font-weight: 500;
padding: 8px 12px;
height: 32px;
line-height: 1.15;
svg {
display: none;
}
&.active {
background: var(--color-body);
}
&:hover {
color: inherit;
&:not(.active) {
background: var(--color-hover);
border: 1px solid var(--color-secondary);
border-bottom: 0;
border-top-left-radius: var(--border-radius);
border-top-right-radius: var(--border-radius);
}
}
}
}
}
@media (max-width: 767.98px) {
/* 修复手机下分支菜单宽度过宽 */
.ui.dropdown.branch-selector-dropdown > .menu {
width: auto;
}
}
.ui.dropdown,
.ui.menu .ui.dropdown {
.menu {
animation: overlayAppearDown 200ms cubic-bezier(0.33, 1, 0.68, 1);;
/* 统一所有下拉菜单的样式 */
background-color: var(--color-menu);
border: none !important;
border-radius: 12px !important;
box-shadow: var(--github-shadow-floating-small);
/* 修复 lightingcss 导致的优先级问题 */
&.scrolling {
box-shadow: none !important;
}
/* 忽略隐藏 */
> .item:not(.tw-hidden) {
display: flex !important;
align-items: center;
align-content: center;
padding: 6px 8px !important;
min-height: 32px;
border-radius: var(--border-radius) !important;
gap: 4px;
&:not(.emoji) {
margin: 0 8px;
}
&:not(.emoji):first-of-type {
margin-top: 8px;
/* 工单详细页面的标签菜单中的清除选中标签按钮 */
&.clear-selection {
margin-top: 0px;
}
}
/* 不知道为什么提交差异对比页面操作中的 cherrypick 按钮无法被选中 */
&.cherry-pick-button,
/* 下一个 item 是最后一个并且被隐藏时, 目前仅在顶部导航栏工单和 PR 仪表板的菜单中出现 */
&:has(+ .tw-hidden:last-of-type),
&:not(.emoji):last-of-type {
margin-bottom: 8px;
}
&:hover {
background-color: var(--github-control-transparent-bgColor-hover) !important;
}
&:active {
background-color: var(--github-control-transparent-bgColor-active) !important;
}
&.selected {
background-color: var(--color-active) !important;
&:hover {
background-color: var(--github-control-transparent-bgColor-hover) !important;
}
&:active {
background-color: var(--github-control-transparent-bgColor-active) !important;
}
}
&.active,
&.selected {
&:after {
content: "";
background-color: var(--github-borderColor-accent-emphasis);
border-radius: var(--border-radius);
height: 24px;
left: -8px;
position: absolute;
top: calc(50% - 12px);
width: 4px;;
}
}
svg {
margin-top: 2px;
margin-right: 2px;
}
/* 复选框对齐 */
.ui.checkbox input[type="checkbox"] {
top: 3px;
}
/* 修复 Wiki 页面下搜索框中搜索时, 显示隐藏的项目 */
&.filtered {
display: none !important;
}
}
/* 当筛选后, 让菜单提供边距, 因为无法确定保留的是菜单中哪个 item */
/* 不是所有菜单都提供边距方式, 原因为比如会导致分支菜单中的查看所有分支上间隔缺失, 这种方式单独为 Wiki 菜单做处理 */
/* 有筛选(.filtered)且有筛选结果(.selected)时提供菜单边距, 没结果时提供会导致多余的菜单边框线 */
&:has(> .item.filtered):has(> .item.selected) {
padding: 8px 0px;
> .item {
&:first-of-type {
margin-top: 0;
}
&:last-of-type {
margin-bottom: 0;
}
}
}
> .divider {
margin: 8px 0;
}
&:after {
display: none !important;
}
}
}
/* 向下弹出的下拉菜单向下偏移 */
.ui.dropdown:not(.upward),
.ui.menu .ui.dropdown:not(.upward) {
> .menu {
margin-top: 4px !important;
}
}
/* 向上弹出的下拉菜单向上偏移 */
.ui.dropdown.upward,
.ui.menu .ui.dropdown.upward {
> .menu {
animation: overlayAppearUp 200ms cubic-bezier(0.33, 1, 0.68, 1);;
margin-bottom: 4px !important;
}
}
/* 修复 wiki 的页面下拉菜单圆角 */
.ui.floating.dropdown > .menu {
border-radius: 12px !important;
}
/* 修复嵌套菜单的圆角问题, wiki 页面和组织页面的用户下拉菜单 */
.ui.dropdown .menu {
.scrolling.menu {
border-radius: 0 0 12px 12px !important;
}
/* 修复仪表板切换用户按钮菜单下无创建组织按钮时的菜单圆角 */
&.context-user-switch {
.scrolling.menu:last-child {
border-radius: 0 0 12px 12px !important;
}
}
}
/* 修复下拉菜单元素溢出问题 */
/* 用户菜单 */
.user-menu>.item,
/* Issue/PR 菜单 */
.ui.menu .ui.dropdown.item .menu .item {
width: calc(100% - 16px); /* 减去上方 item 的 margin 左右边距 */
}
/* 去掉下拉菜单的边框线 */
/* 设置里的下拉菜单 */
.ui.selection.dropdown .menu > .item {
border: unset;
}
/* 修复一些菜单下的菜单元素溢出问题 */
/* 目前主要为分支菜单 */
.ui.dropdown .menu .menu {
border-radius: 12px !important;
}
/* 修复按钮阴影被覆盖缺少边框线的问题 */
/* 仓库动态页面的右侧按钮, 比如时间周期 */
.ui.floating.dropdown .menu {
box-shadow: var(--github-shadow-floating-small) !important;
}
.ui.dropdown.action.select-reaction.active .menu:has(.emoji) {
display: flex !important;
flex-direction: row;
gap: 4px;
padding: 4px;
min-width: auto;
> .item.emoji {
font-size: 14px;
min-height: 32px;
height: 32px;
margin: 0px;
&:hover {
background-color: var(--github-bgColor-accent-emphasis) !important;
}
}
}
/* 排除可以选择的输入搜索框和创建仓库的拥有者 */
.ui.selection.dropdown:not(.search):not(.ellipsis-text-items),
.ui.selection.dropdown.active:not(.search):not(.ellipsis-text-items) {
background-color: var(--color-button);
border-color: var(--color-light-border);
border-radius: var(--border-radius);
padding: 8px 16px;
min-height: 32px;
&:focus {
background: var(--color-button);
border-color: var(--color-light-border);
}
&:hover {
background: var(--color-hover);
border-color: var(--color-light-border);
}
/* 悬停提供伪元素 */
.item:hover:after {
content: "";
background-color: var(--github-borderColor-accent-emphasis);
border-radius: var(--border-radius);
height: 24px;
left: -8px;
position: absolute;
top: calc(50% - 12px);
width: 4px;;
}
}
/* 修复 Gitea 1.26 增加的阴影样式 */
.ui.selection.dropdown,
.ui.selection.dropdown.active {
/* 修复 Gitea 1.26 多余的阴影 */
&:hover {
box-shadow: none;
/* 修复 Gitea 1.26 覆盖的阴影 */
.menu {
box-shadow: var(--github-shadow-floating-small);
}
}
}
/* 修复顶部导航栏工单管理/请求合并页面搜索框旁的选择下拉框按钮内容过窄 */
.list-header-search .ui.action.input > .dropdown.small {
padding: 8px 40px 8px 16px;
}
/* 发布版本页面的分支按钮, 覆盖 Gitea 的样式, 避免按钮元素高度不一致 */
.repository.new.release .target .selection.dropdown {
padding-top: 8px;
padding-bottom: 8px;
}
/* 这个按钮项目前只在创建仓库的拥有者 */
/* 不实现伪元素, 因为 .item 设置溢出的元素会被截断 */
.ui.selection.dropdown.ellipsis-text-items,
.ui.selection.dropdown.activeellipsis-text-items {
&:focus {
background: var(--color-button);
border-color: var(--color-light-border);
}
&:hover {
background: var(--color-hover);
border-color: var(--color-light-border);
}
}
/* 选择输入框效果和输入框 focus 效果一样 */
.ui.selection.dropdown.active.search {
background: var(--color-body);
/* 向内部添加一个 1px 的边框 */
box-shadow: inset 0 0 0 1px var(--github-borderColor-accent-emphasis);
outline: none;
}
/* 覆盖选择输入框向上弹出时的 hover 效果, 原阴影会覆盖加厚的边框线 */
.ui.selection.dropdown.active.search.upward:hover {
box-shadow: inset 0 0 0 1px var(--github-borderColor-accent-emphasis);
}
/* 由于之前的排除导致样式优先级变高, 小按钮去除圆角 */
.ui.action.input > .dropdown.small:not(:first-child) {
border-radius: 0;
}
/* 排除一些小按钮, 例如软件包类型, 通常相邻有元素 */
.ui.selection.dropdown.active:not(.small) {
border-bottom-left-radius: var(--border-radius) !important;
border-bottom-right-radius: var(--border-radius) !important;
}
/* 修复 Gitea 1.26 (:not(:focus)) 导致的小按钮右边框出现问题, 例如软件包类型, 通常相邻有元素 */
.ui.action.input:not([class*="left action"]) > .ui.small.dropdown.selection {
border-right: none;
}
/* 修复因为上面的排除导致的圆角问题 */
/* 具体工单页面下依赖菜单选择框 */
#new-dependency-drop-list.ui.selection.dropdown.active,
/* 提交图分支选择框 */
#git-graph-container #flow-select-refs-dropdown {
border-bottom-right-radius: 0 !important;
}
/* 修复选择框的下拉菜单向上显示时的样式问题 */
.ui.upward.selection.dropdown.visible:not(.small),
.ui.active.upward.selection.dropdown:not(.small) {
border-top-left-radius: var(--border-radius) !important;
border-top-right-radius: var(--border-radius) !important;
}
/* 工单标签菜单中的标签换行和颜色 */
/* 标签页面的标签选择框 */
.page-content.repository.labels .ui.selection.dropdown.active,
/* 创建仓库页面的标签选择框 */
.page-content.repository.new-repo .ui.search.selection.dropdown {
> .menu > .item {
flex-direction: column;
align-items: flex-start;
> i {
color: var(--color-text-light-1);
}
}
}
/* 具体工单页面下依赖菜单选择框 */
#new-dependency-drop-list.ui.selection.dropdown {
/* 高度对齐问题, 应该与 input 框高度一致 */
min-height: 32px;
}
+72
View File
@@ -0,0 +1,72 @@
textarea,
/* 排除复选框和单选框 */
input:not([type=checkbox],[type=radio]),
.ui.input input:not([type=checkbox],[type=radio]),
/* 排除可以选择的输入搜索框 */
.ui.form input:not([type]):not(.search),
.ui.form select,
.ui.form textarea,
.ui.form input[type="date"],
.ui.form input[type="datetime-local"],
.ui.form input[type="email"],
.ui.form input[type="file"],
.ui.form input[type="number"],
.ui.form input[type="password"],
.ui.form input[type="search"],
.ui.form input[type="tel"],
.ui.form input[type="text"],
.ui.form input[type="time"],
.ui.form input[type="url"] {
box-shadow: var(--github-shadow-inset);
border-radius: var(--border-radius);
padding: 8px 12px;
&:focus,
&:focus-visible {
background: var(--color-body);
border-color: var(--github-borderColor-accent-emphasis);
/* 向内部添加一个 1px 的边框 */
box-shadow: inset 0 0 0 1px var(--github-borderColor-accent-emphasis);
outline: none;
}
}
.ui.input {
height: 32px;
}
/* 由于输入框高度, 需要输入框在表单中垂直居中 */
/* 管理员页面仓库搜索表单 */
.ui.form#repo-search-form {
align-items: center;
}
/* 下拉菜单的输入框 */
.ui.dropdown.dropdown .menu > .input {
margin: 12px 10px;
}
/* 复选框 */
input[type="checkbox"],
.ui.checkbox input[type="checkbox"] {
background-color: var(--color-body);
border-color: var(--github-borderColor-emphasis);
&:checked,
&:indeterminate {
background-color: var(--github-bgColor-accent-emphasis);
border-color: var(--github-bgColor-accent-emphasis);
}
&::before {
background-color: var(--github-fgColor-onEmphasis);
}
}
/* 单选框 */
input[type="radio"],
.ui.checkbox input[type="radio"] {
background-color: var(--color-body);
border-color: var(--github-borderColor-emphasis);
&:checked {
background-color: var(--github-fgColor-onEmphasis);
border-color: var(--github-bgColor-accent-emphasis);
}
}
+216
View File
@@ -0,0 +1,216 @@
.ui.label {
border: 1px solid #00000000;
}
/* 所有标签, 但不包括 a 标签 */
/* a 标签比如仓库点星等按钮旁边的数字标签按钮,提交图中的 tag 标签 */
div.label,
span.label,
/* 包含多个标签的元素, 比如 Issue/PR 详情页中的时间线上的标签 */
span.labels-list a.label {
&.ui.ui.ui {
border-radius: 9999px;
padding: 0px 6px;
line-height: 18px;
&.mini {
line-height: 16px;
}
/* 多个标签的组合标签的圆角修复 */
&.scope-parent {
.scope-left {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.scope-middle {
border-radius: 0;
}
.scope-right {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
}
}
}
div,
span {
&.ui.ui.ui.label {
/* 主色调标签 */
&.primary {
background-color: unset;
border: 1px solid var(--color-primary);
color: var(--color-primary);
}
/* 红色标签 */
&.red {
background-color: unset;
border: 1px solid var(--github-borderColor-done-emphasis);
color: var(--color-purple);
}
/* 橙色标签 */
&.orange {
background-color: unset;
border: 1px solid var(--github-borderColor-attention-emphasis);
color: var(--color-yellow);
}
/* 黄色标签 */
&.yellow {
background-color: unset;
border: 1px solid var(--github-borderColor-attention-emphasis);
color: var(--color-orange);
}
/* 黄绿色标签 */
&.olive {
background-color: unset;
border: 1px solid var(--color-olive);
color: var(--color-olive);
}
/* 绿色标签 */
&.green {
background-color: unset;
border: 1px solid var(--github-borderColor-success-emphasis);
color: var(--color-green);
}
/* 紫色标签 */
&.purple {
background-color: unset;
border: 1px solid var(--github-borderColor-done-emphasis);
color: var(--color-purple);
}
}
}
.ui.small.label {
font-size: 12px;
}
.ui.mini.label {
font-size: 10px;
}
span,
/* 用户切换面板的标签 */
.org-visibility div {
&.ui.basic.label {
background-color: unset;
color: var(--color-text-light-1);
font-size: 12px;
font-weight: 500;
}
}
a.ui.label.sha,
a.ui.label.commit-id-short {
border: unset;
background-color: unset;
color: var(--color-text-light-1);
font-size: 12px;
font-weight: 500;
/* 仪表盘页的提交 SHA 标签居中对齐 */
margin-top: 2px;
&:hover {
background-color: var(--color-label-hoverBg);
}
/* 验证提交 SHA 标签 */
&.commit-is-signed {
border: unset !important;
background-color: unset !important;
&:hover {
background-color: var(--color-label-hoverBg) !important;
}
span.ui.label.commit-is-signed {
margin-left: 5px;
height: 25px;
}
img.ui.avatar {
border-radius: 9999px;
}
}
}
/* 修复带验证的提交 SHA 标签的高度 */
.ui.label.commit-id-short {
height: 25px;
}
/* 验证提交附带的图标 */
span.ui.label.commit-is-signed {
height: 25px;
min-width: 35px;
justify-content: center;
/* 验证信任 */
&.sign-trusted {
border: 1.5px solid var(--color-green-badge) !important;
color: var(--color-green-badge) !important;
&:hover {
background-color: var(--color-green-badge-hover-bg) !important;
}
}
/* 验证未信任 */
&.sign-untrusted {
border: 1.5px solid var(--color-yellow-badge) !important;
color: var(--color-yellow-badge) !important;
&:hover {
background-color: var(--color-yellow-badge-hover-bg) !important;
}
}
/* 验证未匹配 */
&.sign-unmatched {
border: 1.5px solid var(--color-orange-badge) !important;
color: var(--color-orange-badge) !important;
&:hover {
background-color: var(--color-orange-badge-hover-bg) !important;
}
}
/* 验证警告 */
&.sign-warning {
border: 1.5px solid var(--color-red-badge) !important;
color: var(--color-red-badge) !important;
&:hover {
background-color: var(--color-red-badge-hover-bg) !important;
}
}
span {
display: inline-flex;
align-items: center;
justify-content: center;
}
}
span.ui.label.commit-is-signed,
.ui.label.commit-id-short,
.ui.label.commit-sign-badge {
font-size: 12px;
.ui.avatar {
border-radius: 9999px;
}
}
.runner-container .ui.label.task-status- {
&success {
color: var(--color-success-text);
border: 1px solid var(--color-success-border);
background: var(--color-success-bg);
}
&failure {
color: var(--color-error-text);
border: 1px solid var(--color-error-border);
background: var(--color-error-bg);
}
&running,
&skipped {
color: var(--color-info-text);
border: 1px solid var(--color-info-border);
background: var(--color-info-bg);
}
&cancelled,
&blocked {
color: var(--color-warning-text);
border: 1px solid var(--color-warning-border);
background: var(--color-warning-bg);
}
}
+333
View File
@@ -0,0 +1,333 @@
/* 编辑/预览切换菜单(仓库编辑文件时的编辑器操作栏左侧) */
.page-content.repository.file.editor .repo-view-content .ui.edit.form .ui.top.attached.header,
/* 订阅/关注切换菜单(应只选中订阅/关注页面, 不能选中通知页面) */
.page-content.user.notification > .ui.container:has(.flex-list),
/* 里程碑/标签切换菜单(里程碑页) */
.page-content.repository.milestones .list-header,
/* 里程碑/标签切换菜单(新建里程碑页) */
.page-content.repository.new.milestone .issue-navbar,
/* 里程碑/标签切换菜单(标签页) */
.page-content.repository.labels .issue-navbar {
.ui.compact.small.menu.small-menu-items {
background: var(--github-controlTrack-bgColor-rest) !important;
border: 1px solid var(--color-light-border);
font-size: 14px;
gap: 4px;
height: 32px;
min-height: 32px !important;
> .item {
background: unset !important;
border: 1px solid var(--github-controlTrack-bgColor-rest);
border-radius: var(--border-radius);
padding: 6px 12px !important;
&.active {
background: var(--github-controlKnob-bgColor-rest) !important;
border-color: var(--color-light-border);
font-weight: 600;
margin-top: -1px;
margin-bottom: -1px;
&:first-child {
margin-left: -1px;
margin-right: 1px;
}
&:last-child {
margin-right: -1px;
margin-left: 1px;
}
}
&::before {
display: none;
}
&:not(.active) {
top: 2px;
padding: 4px 12px !important;
height: calc(100% - 4px);
position: relative;
/* 该方案只适用于 2 个 item 的情况 */
/* left / right 数值为 gap 数值的一半 */
&:first-child {
left: 2px;
}
&:last-child {
right: 2px;
}
&:hover {
background: var(--github-control-transparent-bgColor-hover) !important;
}
}
}
}
}
.ui.menu {
min-height: 32px;
}
.menu .item svg {
color: var(--color-text-light-1);
}
/* 菜单默认悬浮色更改 */
.ui.menu a.item,
.ui.secondary.pointing.menu a.item,
.ui.secondary.menu .dropdown.item {
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
}
/* 一些水平小型菜单的颜色更改 */
.small-menu-items .item {
background-color: var(--color-body) !important;
&:hover {
background: var(--github-control-transparent-bgColor-hover) !important;
}
}
/* 一些菜单的悬浮色更改 */
.ui.segment .ui.tabular.menu,
.header-wrapper .ui.tabular.menu,
.ui.secondary.pointing.menu {
.item,
.active.item {
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
}
}
/* 菜单标签样式 */
.ui.menu .item > .label:not(.floating) {
padding: 0px 6px;
}
.ui.borderless.pagination.menu {
align-items: center;
background-color: unset;
border: 0;
gap: 4px;
min-height: fit-content;
.item {
border-radius: var(--border-radius);
min-width: 32px;
min-height: 32px;
height: 32px;
justify-content: center;
/* 避免一些 hover 效果调整内容 */
padding: 5px 10px !important;
&.active {
background: var(--github-bgColor-accent-emphasis);
color: var(--color-white);
}
/* 设置透明边框线避免 hover 时元素大小变化 */
&:not(.active) {
border: 1px solid #ffffff00;
&:hover {
background: unset;
border-color: var(--color-secondary);
}
}
&.navigation {
&:not(.disabled) {
span,
svg {
color: var(--color-primary);
}
}
/* 对齐文字 */
svg {
margin-top: 2px;
}
}
}
}
/* 二级菜单, 比如 Issue/PR/Actions 的筛选菜单 */
.ui.secondary.menu {
.item {
padding: 0px 12px;
height: 32px;
font-weight: 500;
&.active,
&:first-child {
border-radius: var(--border-radius);
}
}
a.item:hover {
background: var(--github-control-transparent-bgColor-hover);
}
}
/* 二级导航栏, 比如仓库的导航栏, 仓库列表的导航栏, 探索的类型导航栏 */
.ui.secondary.pointing.menu {
.overflow-menu-items {
gap: 4px;
.item {
padding: 5px 8px !important;
margin-block-start: 0.5rem;
margin-block-end: 0.5rem;
margin-bottom: 0.5rem !important;
}
}
.item {
font-weight: 400; /* 二级导航栏不需要加粗 */
}
.active.item,
.dropdown.item,
.link.item,
a.item {
border-radius: var(--border-radius);
color: var(--color-text);
svg {
margin-right: 8px;
}
}
.active.item {
/* 取消激活时的下划线, 需要为透明, 保持间距 */
border-color: #ffffff00;
/* 模仿 github 的下划线 */
span:after {
content: "";
background: var(--github-underlineNav-borderColor-active);
border-radius: var(--border-radius);
bottom: calc(50% - 1.8rem);
height: 2px;
position: absolute;
right: 50%;
transform: translate(50%, -50%);
width: 100%;
z-index: 1;
}
}
}
/* 修复仓库页面下的二级导航栏的下划线因浏览器 BUG 导致显示的异常问题(导致下划线和分割线重叠变粗) */
.page-content.repository .ui.secondary.pointing.menu {
border-bottom: none !important;
}
/* 垂直菜单, 用于左侧边栏 */
/* 设置页面中的菜单, Actions 工作流菜单, WorkflowRuns Job 菜单 */
.ui.vertical.menu {
/* 去除边框, 和背景色同色 */
background: var(--color-body);
border: 0;
/* 设置页面的菜单头部 */
.header.item {
color: var(--color-text-light-1) !important;
font-size: 1.5rem;
font-weight: 700;
background: unset;
margin-bottom: 0.5rem;
}
/* 菜单项被悬停时的背景色, 限制a标签, 避免为子菜单多余渲染 */
a.item {
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
&:active {
background-color: var(--github-control-transparent-bgColor-active);
}
}
/* 菜单项 */
.item,
.item > summary {
font-size: 1.1rem;
background: unset;
border-radius: var(--border-radius);
padding: 6px 8px;
}
/* Actions 菜单的圆角覆盖 */
> .item,
> .active.item {
&:first-child,
&:last-child {
border-radius: var(--border-radius);
}
}
/* 去除菜单项的边框线 */
.item:before {
background: unset;
}
/* 激活的菜单项 */
.active.item,
.active.item > summary {
font-weight: 600;
border-radius: var(--border-radius);
}
/* 添加伪元素, 用于指示当前激活的菜单项 */
.active.item:after {
content: "";
background-color: var(--github-borderColor-accent-emphasis);
border-radius: var(--border-radius);
height: 24px;
left: -8px;
position: absolute;
top: calc(50% - 12px);
width: 4px;;
}
/* 部分菜单项的子菜单 */
details.item {
/* 子菜单的标题 */
summary:hover {
background: var(--github-control-transparent-bgColor-hover);
}
/* 子菜单的选项 */
.menu .item {
color: var(--color-text);
}
/* 子菜单的选项被激活 */
&:has(.active.item) {
> summary {
font-weight: 600;
background: var(--color-active);
/* 收回状态,悬停色 */
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
&:active {
background-color: var(--github-control-transparent-bgColor-active);
}
}
&:after {
content: "";
background-color: var(--github-borderColor-accent-emphasis);
border-radius: var(--border-radius);
height: 24px;
left: -8px;
position: absolute;
top: calc(50% - 12px);
width: 4px;;
}
/* 子菜单的选项 */
.active.item {
background: var(--color-active);
font-weight: 400;
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
&:active {
background-color: var(--github-control-transparent-bgColor-active);
}
}
/* 子菜单展开时 */
&[open] {
> summary {
background: unset;
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
&:active {
background-color: var(--github-control-transparent-bgColor-active);
}
}
&:after {
display: none;
}
}
}
}
}
+26
View File
@@ -0,0 +1,26 @@
.ui.modal {
animation: overlayAppearDown 200ms cubic-bezier(0.33, 1, 0.68, 1);;
border: 1.5px solid var(--color-light-border);
> .header {
background-color: var(--color-menu);
border-bottom: 1.5px solid var(--color-light-border);
}
> .content,
form > .content {
background-color: var(--color-menu);
}
> .actions,
.content + .actions,
.content + form > .actions {
background-color: var(--color-menu);
border-top: 1.5px solid var(--color-light-border);
}
.actions > .ui.button {
padding: 8px 12px;
}
}
+82
View File
@@ -0,0 +1,82 @@
/* 默认颜色是 --color-text-light, 主题下此颜色是亮白色, 修改为灰色 */
/* release 页面下一些描述信息的文本颜色 */
.tw-text-text-light {
color: var(--color-text-light-1) !important;
}
.list-header {
align-items: center;
align-content: center;
}
/* 已标星的图标 */
.octicon-star-fill {
color: var(--github-button-star-iconColor) !important;
}
/* VSCode 图标 */
.gitea-vscode {
color: #007acc !important;
}
/* VSCodium 图标 */
.gitea-vscodium {
color: #429cf0 !important;
}
/* 重新打开工单按钮设置为绿色 */
.tw-text-green {
.octicon-issue-reopened,
&.octicon-issue-reopened {
color: var(--github-fgColor-success) !important;
}
}
/* 关闭工单按钮设置为紫色 */
.tw-text-red {
.octicon-issue-closed,
&.octicon-issue-closed {
color: var(--github-fgColor-done) !important;
}
}
img.ui.avatar,
.ui.avatar img,
.ui.avatar svg {
background-color: var(--github-avatar-bgColor);
box-shadow: 0 0 0 1px var(--github-avatar-borderColor);
}
.ui.toggle.checkbox {
label {
&:before {
border-radius: var(--border-radius);
border: 1px solid var(--color-light-border);
height: 24px;
width: 44px;
}
&:after {
background: var(--color-input-background);
border-radius: var(--border-radius);
border: 1px solid var(--color-light-border);
height: 21px;
width: 23px;
top: 1.5px;
bottom: 1.5px;
}
}
/* 滑块在左 */
input ~ label:after {
left: 1.5px;
}
/* 滑块在右 */
input:checked ~ label:after {
left: 19.5px;
}
}
+277
View File
@@ -0,0 +1,277 @@
.ui.form textarea,
.ui.form input:not([type]),
.ui.form input[type="date"],
.ui.form input[type="datetime-local"],
.ui.form input[type="email"],
.ui.form input[type="number"],
.ui.form input[type="password"],
.ui.form input[type="search"],
.ui.form input[type="tel"],
.ui.form input[type="time"],
.ui.form input[type="text"],
.ui.form input[type="file"],
.ui.form input[type="url"] {
border-radius: var(--border-radius);
&:focus {
border-radius: var(--border-radius);
}
}
.ui.form select {
border-radius: var(--border-radius);
}
.ui.input {
textarea,
/* 排除复选框和单选框 */
input:not([type=checkbox],[type=radio]) {
border-radius: var(--border-radius);
}
}
.ui {
&.menu,
&.modal,
&.label,
&.table,
&.segment,
&.segments,
&.grid.segment,
&.selection.dropdown,
&.horizontal.segments,
&.active.empty.selection.dropdown {
border-radius: var(--border-radius);
}
}
.ui.dropdown,
.ui.inline.dropdown,
.ui.pointing.upward.dropdown,
.ui.top.pointing.upward.dropdown {
.menu {
border-radius: var(--border-radius);
}
}
.ui.search > .results,
.ui.search.selection .prompt,
.ui.pointing.dropdown > .menu,
.ui.loading.form.segments:before,
.ui.secondary.menu .dropdown.item > .menu,
.ui.segments:not(.horizontal) > .segment:has(~ .tw-hidden) {
border-radius: var(--border-radius);
}
.ui.dropdown .menu .menu,
.ui.dropdown .menu .left.menu,
.ui.dropdown .menu .right.menu,
.ui.dropdown > .left.menu .menu,
.ui.floating.dropdown .menu,
.ui.floating.dropdown > .menu,
.ui.dropdown .right.menu > .menu,
.ui.secondary.vertical.menu > .item {
border-radius: var(--border-radius) !important;
}
/* 目前为仓库列表/探索的二级菜单, 改版需要替换为全圆角 */
.ui.secondary.tabular.menu .item {
border-radius: var(--border-radius) !important;
&.active,
&.active:hover,
&:hover {
border-radius: var(--border-radius) !important;
}
}
.ui.vertical.menu > .item,
.ui.vertical.menu > .active.item,
.ui.segments:not(.horizontal) > .segment {
&:first-child {
border-radius: var(--border-radius) var(--border-radius) 0 0;
}
}
.ui.top.attached.header,
.ui.upward.dropdown > .menu,
.ui.upward.dropdown.button:not(.pointing):not(.floating).active,
.ui[class*="top attached"].menu,
.ui[class*="top attached"].segment,
.ui[class*="top attached"].segment:last-child,
.ui.search > .results > :first-child,
.ui.modal > i.icon:first-child + *,
.ui.modal > .dimmer:first-child + i.icon + *,
.ui.modal > .dimmer:first-child + *:not(.icon),
.ui.modal > :first-child:not(.icon):not(.dimmer) {
border-radius: var(--border-radius) var(--border-radius) 0 0;
}
.ui.tabular.menu .item,
.ui.simple.upward.dropdown {
&.active,
&.active:hover,
&:hover {
border-radius: var(--border-radius) var(--border-radius) 0 0 !important;
}
}
.ui.attached.segment,
.ui.vertical.menu > .item,
.ui.vertical.menu > .active.item,
.ui.segments:not(.horizontal) > .segment {
&:last-child {
border-radius: 0 0 var(--border-radius) var(--border-radius);
}
}
.ui.modal,
.ui.search > .results {
> :last-child {
border-radius: 0 0 var(--border-radius) var(--border-radius);
}
}
.ui.selection.dropdown,
.ui.menu .dropdown.item {
.menu {
border-radius: 0 0 var(--border-radius) var(--border-radius);
}
}
.ui.bottom.attached.header,
.ui[class*="bottom attached"].table,
.ui.segment[class*="bottom attached"],
.ui.attached.segment:has(+ .ui.modal),
.ui.attached.segment:has(+ .page.buttons),
.ui.attached.segment:has(+ .ui[class*="top attached"].header),
.ui.segment:has(+ .ui.segment:not(.attached)) {
border-radius: 0 0 var(--border-radius) var(--border-radius);
}
.ui.upward.selection.dropdown.visible,
.ui.active.upward.selection.dropdown {
border-radius: 0 0 var(--border-radius) var(--border-radius) !important;
}
.ui.menu > .item,
.ui.action.input > .button,
.ui.action.input > .dropdown,
.ui.horizontal.segments > .segment {
&:first-child {
border-radius: var(--border-radius) 0 0 var(--border-radius);
}
}
.ui[class*="left icon"].input > i.icon,
.ui.action.input > .buttons:first-child > .button {
border-radius: var(--border-radius) 0 0 var(--border-radius);
}
.ui.compact.menu .item,
.ui.compact.menu:not(.secondary) .item,
.ui.pagination.menu .item,
.ui.action.input > .button,
.ui.action.input > .dropdown,
.ui.horizontal.segments > .segment {
&:last-child {
border-radius: 0 var(--border-radius) var(--border-radius) 0;
}
}
.ui.icon.input > i.icon,
.ui.buttons .unescape-button,
.ui.action.input > .buttons:last-child > .button {
border-radius: 0 var(--border-radius) var(--border-radius) 0;
}
.ui.top.attached.menu > .item:first-child,
.ui.table > thead > tr:first-child > th:first-child {
border-top-left-radius: var(--border-radius);
}
.ui.table > thead > tr:first-child > th:last-child,
.ui.category.search > .results .category:first-child .name + .result {
border-top-right-radius: var(--border-radius);
}
.ui.table > tfoot > tr:first-child {
> th,
> td {
&:first-child {
border-bottom-left-radius: var(--border-radius);
}
}
}
.ui.table > tfoot > tr:first-child {
> th,
> td {
&:last-child {
border-bottom-right-radius: var(--border-radius);
}
}
}
.ui.category.search > .results .category:last-child .result:last-child {
border-bottom-right-radius: var(--border-radius);
}
:is(.ui.vertical.menu > .active.item:only-child, .ui.segments:not(.horizontal) > .segment:only-child) {
border-radius: var(--border-radius);
}
.ui.table > thead > tr:first-child > th:only-child {
border-radius: var(--border-radius) var(--border-radius) 0 0;
}
.ui.table > tfoot > tr:first-child {
> th,
> td {
&:only-child {
border-radius: 0 0 var(--border-radius) var(--border-radius);
}
}
}
/* 评论列表标题 */
.repository.view.issue .comment-list .comment > .content > div:first-child {
border-top-left-radius: var(--border-radius);
border-top-right-radius: var(--border-radius);
}
/* 评论列表内容 */
.repository.view.issue .comment-list .comment > .content > div:last-child {
border-bottom-left-radius: var(--border-radius);
border-bottom-right-radius: var(--border-radius);
}
/* Issue 菜单第一个按钮 */
.ui.secondary.menu .item {
border-radius: var(--border-radius);
}
+6
View File
@@ -0,0 +1,6 @@
.ui.table > tr > td,
.ui.table > tbody > tr > td {
border-top: 1px solid var(--color-secondary-alpha-70);
}
+50
View File
@@ -0,0 +1,50 @@
.tippy-box {
margin-top: -3px;
border-radius: var(--border-radius);
overflow: hidden;
animation: overlayAppearDown 200ms cubic-bezier(0.33, 1, 0.68, 1);;
/* 克隆菜单和PR提示框为 default */
&[data-theme="default"],
/* 带标题的提示框 (Runner信息) */
&[data-theme="box-with-header"] {
border: unset;
box-shadow: var(--github-shadow-floating-small);
}
&[data-theme="default"],
&[data-theme="menu"] {
border-radius: 12px;
}
&[data-theme="box-with-header"] {
.tippy-content {
background-color: var(--color-menu);
.ui.attached.header {
background-color: var(--color-body);
}
}
}
/* 差异对比中文件路径行右侧的三个点菜单 */
&[data-theme="menu"] {
.tippy-content {
padding: 8px;
.item {
border-radius: var(--border-radius);
padding: 6px 8px;
height: 32px;
&:hover {
background-color: var(--github-control-transparent-bgColor-hover);
}
}
}
}
/* 专门用于提示信息的提示框, 比如提交的具体时间, 任务状态等 */
&[data-theme="tooltip"] {
animation: overlayAppear 80ms ease-in forwards;;
.tippy-content {
font-size: 12px;
font-weight: 400;
padding: 4px 8px;
}
}
}
@@ -0,0 +1,78 @@
/* 差异对比的代码折叠按钮 */
.code-expander-button,
/* 仓库 README 头部的按钮 */
.file-header-left,
.file-header-right,
/* 仪表板仓库列表 */
.ui.attached.segment.table ul li,
/* Issue 列表 */
.issue-list-toolbar .item,
.flex-list#issue-list > .flex-item,
/* 分页菜单 */
.ui.borderless.pagination.menu .item,
/* 迁移的元素 */
#navbar .item,
.header-wrapper .ui.tabular.menu .item,
.job-step-summary,
.job-step-logs,
.job-brief-item,
.repo-file-cell,
.tippy-box .flex-items-block .item,
.clone-panel-tab .item,
.ui.form select,
.ui.label,
.ui.modal,
.ui.checkbox label:before,
.ui.checkbox input:checked ~ label:before,
.ui.checkbox input:not([type="radio"]):indeterminate ~ label:before,
.ui.selection.dropdown,
.ui.selection.active.dropdown,
.ui.selection.active.dropdown:hover,
.ui.selection.active.dropdown .menu,
.ui.selection.active.dropdown:hover .menu,
.ui.vertical.menu .header.item,
.ui.secondary.menu .item {
transition: 80ms cubic-bezier(0.33, 1, 0.68, 1);
}
/* Gitea 表单元素原始过渡覆盖 */
/* 排除复选框和单选框 */
input:not([type="checkbox"], [type="radio"]),
textarea,
tr,
.ui.input textarea,
.ui.form textarea,
.ui.form input:not([type]),
.ui.form input[type="date"],
.ui.form input[type="datetime-local"],
.ui.form input[type="email"],
.ui.form input[type="number"],
.ui.form input[type="password"],
.ui.form input[type="search"],
.ui.form input[type="tel"],
.ui.form input[type="time"],
.ui.form input[type="text"],
.ui.form input[type="file"],
.ui.form input[type="url"] {
transition: 80ms cubic-bezier(0.33, 1, 0.68, 1);
}
.ui.button {
transition:
color 80ms cubic-bezier(0.65, 0, 0.35, 1),
fill 80ms cubic-bezier(0.65, 0, 0.35, 1),
background-color 80ms cubic-bezier(0.65, 0, 0.35, 1),
/* 位移慢一点, 这样视觉上与颜色变化同步 */ transform 200ms cubic-bezier(0.65, 0, 0.35, 1),
border-color 80ms cubic-bezier(0.65, 0, 0.35, 1);
transition-duration: 80ms;
&:active {
transform: translateY(1px);
}
/* 下拉图标的过渡会导致在下移过程中出现的菜单被短暂遮挡 */
&.dropdown {
z-index: 999;
}
.button:active {
transform: none;
}
}
+356
View File
@@ -0,0 +1,356 @@
gitea-theme-meta-info {
--theme-display-name: "GitHub Dark";
--theme-color-scheme: "dark";
}
:root {
--theme-version: "1.0.0";
--is-dark-theme: true;
--color-primary: #2f81f7;
--color-primary-contrast: #ffffff;
--color-primary-dark-1: #58a6ff;
--color-primary-dark-2: #79c0ff;
--color-primary-dark-3: #a5d6ff;
--color-primary-dark-4: #cae8ff;
--color-primary-dark-5: #ddf4ff;
--color-primary-dark-6: #edf5ff;
--color-primary-dark-7: #f6f8fa;
--color-primary-light-1: #1f6feb;
--color-primary-light-2: #1158c7;
--color-primary-light-3: #0d419d;
--color-primary-light-4: #0a3069;
--color-primary-light-5: #051d4d;
--color-primary-light-6: #031226;
--color-primary-light-7: #010409;
--color-primary-alpha-10: #2f81f71a;
--color-primary-alpha-20: #2f81f733;
--color-primary-alpha-30: #2f81f74d;
--color-primary-alpha-40: #2f81f766;
--color-primary-alpha-50: #2f81f780;
--color-primary-alpha-60: #2f81f799;
--color-primary-alpha-70: #2f81f7b3;
--color-primary-alpha-80: #2f81f7cc;
--color-primary-alpha-90: #2f81f7e6;
--color-primary-hover: var(--color-primary-dark-1);
--color-primary-active: var(--color-primary-dark-2);
--color-secondary: #30363d;
--color-secondary-dark-1: #3d444d;
--color-secondary-dark-2: #484f58;
--color-secondary-dark-3: #6e7681;
--color-secondary-dark-4: #8b949e;
--color-secondary-dark-5: #b1bac4;
--color-secondary-dark-6: #c9d1d9;
--color-secondary-dark-7: #d8dee4;
--color-secondary-dark-8: #e6edf3;
--color-secondary-dark-9: #f0f6fc;
--color-secondary-dark-10: #f6f8fa;
--color-secondary-dark-11: #ffffff;
--color-secondary-dark-12: #ffffff;
--color-secondary-dark-13: #ffffff;
--color-secondary-light-1: #21262d;
--color-secondary-light-2: #161b22;
--color-secondary-light-3: #0d1117;
--color-secondary-light-4: #010409;
--color-secondary-alpha-10: #30363d1a;
--color-secondary-alpha-20: #30363d33;
--color-secondary-alpha-30: #30363d4d;
--color-secondary-alpha-40: #30363d66;
--color-secondary-alpha-50: #30363d80;
--color-secondary-alpha-60: #30363d99;
--color-secondary-alpha-70: #30363db3;
--color-secondary-alpha-80: #30363dcc;
--color-secondary-alpha-90: #30363de6;
--color-secondary-button: var(--color-secondary-dark-1);
--color-secondary-hover: var(--color-secondary-dark-2);
--color-secondary-active: var(--color-secondary-dark-3);
--color-secondary-bg: #161b22;
--color-secondary-nav-bg: var(--color-body);
--color-console-fg: #e6edf3;
--color-console-fg-subtle: #8b949e;
--color-console-bg: #0d1117;
--color-console-border: #30363d;
--color-console-active-bg: #21262d;
--color-console-hover-bg: #161b22;
--color-console-menu-bg: #161b22;
--color-console-menu-border: #30363d;
--color-console-link: #8b949e;
--color-red-light: #e2555e;
--color-red-dark-1: #bc202a;
--color-red-dark-2: #a71d26;
--color-red-badge: #d1242f;
--color-red-badge-bg: #d1242f1a;
--color-red-badge-hover-bg: #d1242f4d;
--color-orange-light: #ff6f0e;
--color-orange-dark-1: #a94400;
--color-orange-dark-2: #963d00;
--color-orange-badge: #bc4c00;
--color-orange-badge-bg: #bc4c001a;
--color-orange-badge-hover-bg: #bc4c004d;
--color-yellow-light: #f3a300;
--color-yellow-dark-1: #8b5d00;
--color-yellow-dark-2: #7b5200;
--color-yellow-badge: #9a6700;
--color-yellow-badge-bg: #9a67001a;
--color-yellow-badge-hover-bg: #9a67004d;
--color-olive-light: #8ba847;
--color-olive-dark-1: #4d5e28;
--color-olive-dark-2: #455323;
--color-green-light: #29c957;
--color-green-dark-1: #177231;
--color-green-dark-2: #15662c;
--color-green-badge: #1a7f37;
--color-green-badge-bg: #1a7f371a;
--color-green-badge-hover-bg: #1a7f374d;
--color-teal-light: #1bbcc8;
--color-teal-dark-1: #0e6369;
--color-teal-dark-2: #0d585e;
--color-blue-light: #338df7;
--color-blue-dark-1: #085ec4;
--color-blue-dark-2: #0754ae;
--color-violet-light: #777ae7;
--color-violet-dark-1: #3036db;
--color-violet-dark-2: #2329c9;
--color-purple-light: #a17ce7;
--color-purple-dark-1: #7036da;
--color-purple-dark-2: #6025cd;
--color-pink-light: #d268a7;
--color-pink-dark-1: #ac337b;
--color-pink-dark-2: #992e6e;
--color-brown-light: #a68964;
--color-brown-dark-1: #69563c;
--color-brown-dark-2: #5e4c36;
--color-black-light: #4f5966;
--color-black-dark-1: #1c2024;
--color-black-dark-2: #191c20;
--color-grey-light: #7e8a97;
--color-ansi-black: var(--color-black);
--color-ansi-red: var(--color-red);
--color-ansi-green: var(--color-green);
--color-ansi-yellow: var(--color-yellow);
--color-ansi-blue: var(--color-blue);
--color-ansi-magenta: var(--color-pink);
--color-ansi-cyan: #006a80;
--color-ansi-white: var(--color-console-fg-subtle);
--color-ansi-bright-black: var(--color-black-light);
--color-ansi-bright-red: var(--color-red-light);
--color-ansi-bright-green: var(--color-green-light);
--color-ansi-bright-yellow: var(--color-yellow-light);
--color-ansi-bright-blue: var(--color-blue-light);
--color-ansi-bright-magenta: var(--color-pink-light);
--color-ansi-bright-cyan: #00b9e0;
--color-ansi-bright-white: var(--color-console-fg);
--color-diff-added-fg: #3fb950;
--color-diff-added-linenum-bg: #0e4429;
--color-diff-added-row-bg: #033a16;
--color-diff-added-row-border: #196c2e;
--color-diff-added-word-bg: #196c2e;
--color-diff-removed-fg: #ff7b72;
--color-diff-removed-linenum-bg: #67060c;
--color-diff-removed-row-bg: #490202;
--color-diff-removed-row-border: #7d121c;
--color-diff-removed-word-bg: #7d121c;
--color-diff-moved-row-bg: #3d2f00;
--color-diff-moved-row-border: #9e6a03;
--color-diff-inactive: #161b22;
--color-error-bg: #d1242f1a;
--color-error-bg-active: #d1242f80;
--color-error-bg-hover: #d1242f4d;
--color-error-border: #d1242f66;
--color-error-text: #ea0b1a;
--color-success-bg: #1a7f371a;
--color-success-border: #1a7f3766;
--color-success-text: #0b8e30;
--color-warning-bg: #9a67001a;
--color-warning-border: #9a670066;
--color-warning-text: #9a6700;
--color-info-bg: #0969da1a;
--color-info-border: #0969da66;
--color-info-text: #0068e3;
--github-avatar-bgColor: #0d1117;
--github-avatar-borderColor: #f0f6fc1a;
--github-fgColor-accent: #2f81f7;
--github-fgColor-success: #3fb950;
--github-fgColor-done: #bc8cff;
--github-fgColor-onEmphasis: #ffffff;
--github-bgColor-accent-emphasis: #1f6feb;
--github-bgColor-accent-muted: #388bfd26;
--github-bgColor-success-emphasis: #238636;
--github-bgColor-attention-emphasis: #9e6a03;
--github-bgColor-danger-emphasis: #da3633;
--github-bgColor-done-emphasis: #8957e5;
--github-bgColor-neutral-emphasis: #6e7681;
--github-borderColor-accent-emphasis: #1f6feb;
--github-borderColor-attention-emphasis: #9e6a03;
--github-borderColor-success-emphasis: #238636;
--github-borderColor-done-emphasis: #8957e5;
--github-borderColor-emphasis: #6e7681;
--github-button-default-bgColor-active: #30363d;
--github-button-primary-fgColor-accent: #56d364;
--github-button-primary-fgColor-rest: #ffffff;
--github-button-primary-bgColor-rest: var(--github-bgColor-success-emphasis);
--github-button-primary-bgColor-hover: #2ea043;
--github-button-primary-bgColor-active: #238636;
--github-button-primary-borderColor-rest: #f0f6fc1a;
--github-button-primary-borderColor-hover: #f0f6fc1a;
--github-button-danger-fgColor-rest: #ff7b72;
--github-button-danger-fgColor-hover: #ffffff;
--github-button-danger-bgColor-rest: #21262d;
--github-button-danger-bgColor-hover: #da3633;
--github-button-danger-bgColor-active: #b62324;
--github-button-danger-borderColor-hover: #f0f6fc1a;
--github-button-star-iconColor: #d29922;
--github-button-invisible-iconColor-rest: #8b949e;
--github-control-bgColor-rest: #21262d;
--github-control-transparent-bgColor-hover: #30363d;
--github-control-transparent-bgColor-active: #484f58;
--github-control-danger-bgColor-active: #da363326;
--github-controlTrack-bgColor-rest: #161b22;
--github-controlKnob-bgColor-rest: #6e7681;
--github-shadow-floating-small: 0px 0px 0px 1px var(--color-light-border), 0px 8px 24px #01040966;
--github-shadow-inset: inset 0px 1px 0px 0px #f0f6fc0f;
--github-shadow-resting-small: 0px 1px 0px 0px #01040966;
--github-shadow-resting-medium: drop-shadow(0 1px 1px #01040966) drop-shadow(0 3px 6px #01040966);
--github-underlineNav-borderColor-active: #f78166;
--github-contribution-default-bgColor-0: #161b22;
--github-contribution-default-bgColor-1: #0e4429;
--github-contribution-default-bgColor-2: #006d32;
--github-contribution-default-bgColor-3: #26a641;
--github-contribution-default-bgColor-4: #39d353;
--github-contribution-default-bgColor-5: #56d364;
--github-contribution-default-borderColor-0: #f0f6fc1a;
--github-contribution-default-borderColor-1: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-2: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-3: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-4: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-5: var(--github-contribution-default-borderColor-0);
--github-workflow-card-bg: #161b22;
--color-syntax-keyword: #ff7b72;
--color-syntax-bool: #79c0ff;
--color-syntax-control: #ff7b72;
--color-syntax-name: #d2a8ff;
--color-syntax-type: #ffa657;
--color-syntax-number: #79c0ff;
--color-syntax-operator: #79c0ff;
--color-syntax-regexp: #7ee787;
--color-syntax-string: #a5d6ff;
--color-syntax-comment: #8b949e;
--color-syntax-invalid: #f85149;
--color-syntax-link: var(--color-primary);
--color-syntax-tag: #7ee787;
--color-syntax-attribute: #79c0ff;
--color-syntax-property: #79c0ff;
--color-syntax-variable: #ffa657;
--color-syntax-string-special: #a5d6ff;
--color-syntax-escape: #a5d6ff;
--color-syntax-entity: #ffa657;
--color-syntax-preproc: #79c0ff;
--color-syntax-preproc-file: #79c0ff;
--color-syntax-decorator: #d2a8ff;
--color-syntax-namespace: #c9d1d9;
--color-syntax-name-pseudo: #c9d1d9;
--color-syntax-comment-special: #8b949e;
--color-syntax-text: var(--color-text);
--color-syntax-text-alt: var(--color-text);
--color-syntax-punctuation: var(--color-text);
--color-syntax-whitespace: #f85149;
--color-syntax-diff-fg: var(--color-text);
--color-syntax-deleted-bg: var(--color-diff-removed-row-bg);
--color-syntax-inserted-bg: var(--color-diff-added-row-bg);
--color-syntax-emph: var(--color-text);
--color-syntax-strong: var(--color-text);
--color-syntax-heading: #1f6feb;
--color-syntax-subheading: #1f6feb;
--color-syntax-output: var(--color-text);
--color-syntax-prompt: var(--color-text);
--color-syntax-traceback: #f85149;
--color-syntax-matching-bracket-bg: #2f81f766;
--color-syntax-nonmatching-bracket-bg: #f8514933;
--color-red: #ff7b72;
--color-orange: #ffa657;
--color-yellow: #d29922;
--color-olive: #a5d6ff;
--color-green: #3fb950;
--color-teal: #39c5cf;
--color-blue: #58a6ff;
--color-violet: #a5a6ff;
--color-purple: #bc8cff;
--color-pink: #ff7bba;
--color-brown: #d29922;
--color-black: #010409;
--color-grey: #8b949e;
--color-gold: #d29922;
--color-white: #f0f6fc;
--color-logo: var(--color-primary);
--color-body: #0d1117;
--color-box-header: #161b22;
--color-box-body: #0d1117;
--color-box-body-highlight: #161b22;
--color-text: #e6edf3;
--color-text-light: #c9d1d9;
--color-text-light-1: #8b949e;
--color-text-light-2: #7d8590;
--color-text-light-3: #6e7681;
--color-text-dark: #f0f6fc;
--color-footer: #010409;
--color-timeline: #30363d;
--color-input-text: var(--color-text);
--color-input-background: #0d1117;
--color-input-toggle-background: #161b22;
--color-input-border: var(--color-light-border);
--color-light: #161b22;
--color-light-border: #30363d;
--color-hover: #21262d;
--color-hover-opaque: #21262d;
--color-active: #30363d;
--color-menu: #161b22;
--color-card: #161b22;
--color-markup-table-row: #161b22;
--color-markup-code-block: #161b22;
--color-markup-code-inline: #6e768166;
--color-button: #21262d;
--color-code-bg: #161b22;
--color-shadow: #01040999;
--color-shadow-opaque: #010409;
--color-expand-button: #1f6feb;
--color-placeholder-text: var(--color-text-light-3);
--color-editor-line-highlight: #161b22;
--color-editor-selection: #2f81f766;
--color-project-column-bg: #161b22;
--color-caret: var(--color-text-dark);
--color-reaction-bg: #6e768126;
--color-reaction-hover-bg: #1f6feb26;
--color-reaction-active-bg: #1f6feb26;
--color-tooltip-text: #f0f6fc;
--color-tooltip-bg: #161b22;
--color-nav-bg: #010409;
--color-nav-hover-bg: #21262d;
--color-nav-text: var(--color-text);
--color-label-text: var(--color-text);
--color-label-bg: #6e768126;
--color-label-hover-bg: #6e768166;
--color-label-active-bg: var(--color-label-hover-bg);
--color-accent: var(--color-primary);
--color-small-accent: var(--color-primary-light-4);
--color-highlight-fg: #d29922;
--color-highlight-bg: #bb800926;
--color-overlay-backdrop: #010409cc;
--color-danger: var(--color-red);
--color-transparency-grid-light: #21262d;
--color-transparency-grid-dark: #0d1117;
--color-workflow-edge-hover: #58a6ff;
--border-radius: 6px;
--color-git: #f05133;
--checkbox-size: 14px;
accent-color: var(--color-accent);
color-scheme: dark;
--fonts-proportional: "Noto Sans SC", "Segoe UI Variable", "Segoe UI", "PingFang SC", "Microsoft YaHei UI", sans-serif;
--fonts-regular: var(--fonts-proportional);
--fonts-monospace: "JetBrains Mono", "Cascadia Code", ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace;
--color-nav-hoverBg: var(--color-nav-hover-bg);
--color-label-hoverBg: var(--color-label-hover-bg);
--color-reaction-hoverBg: var(--color-reaction-hover-bg);
--color-workflowEdgeHover: var(--color-workflow-edge-hover);
--color-console-activeBg: var(--color-console-active-bg);
--color-console-hoverBg: var(--color-console-hover-bg);
--fontStack-monospace: var(--fonts-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace);
}
+3
View File
@@ -0,0 +1,3 @@
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap");
@import "./dark-colors.css";
@import "./shared.css";
+356
View File
@@ -0,0 +1,356 @@
gitea-theme-meta-info {
--theme-color-scheme: light;
--theme-display-name: GitHub Light;
}
:root {
--theme-version: "1.0.0";
--is-dark-theme: false;
--color-primary: #0969da;
--color-primary-contrast: #1f2328;
--color-primary-dark-1: #085cc0;
--color-primary-dark-2: #0750a6;
--color-primary-dark-3: #06438c;
--color-primary-dark-4: #053771;
--color-primary-dark-5: #042a57;
--color-primary-dark-6: #031d3d;
--color-primary-dark-7: #011123;
--color-primary-light-1: #1079f5;
--color-primary-light-2: #308bf6;
--color-primary-light-3: #519ef8;
--color-primary-light-4: #72b0f9;
--color-primary-light-5: #92c2fb;
--color-primary-light-6: #b3d4fc;
--color-primary-light-7: #d4e7fd;
--color-primary-alpha-10: #0969da1a;
--color-primary-alpha-20: #0969da33;
--color-primary-alpha-30: #0969da4d;
--color-primary-alpha-40: #0969da66;
--color-primary-alpha-50: #0969da80;
--color-primary-alpha-60: #0969da99;
--color-primary-alpha-70: #0969dab3;
--color-primary-alpha-80: #0969dacc;
--color-primary-alpha-90: #0969dae6;
--color-primary-hover: var(--color-primary-dark-1);
--color-primary-active: var(--color-primary-dark-2);
--color-secondary: #d1d9e0;
--color-secondary-dark-1: #c1ccd6;
--color-secondary-dark-2: #b2bfcb;
--color-secondary-dark-3: #a2b3c1;
--color-secondary-dark-4: #93a6b6;
--color-secondary-dark-5: #8399ac;
--color-secondary-dark-6: #748ca1;
--color-secondary-dark-7: #657f96;
--color-secondary-dark-8: #5b7287;
--color-secondary-dark-9: #506577;
--color-secondary-dark-10: #465867;
--color-secondary-dark-11: #3b4b58;
--color-secondary-dark-12: #313d48;
--color-secondary-dark-13: #232c34;
--color-secondary-light-1: #d9e0e6;
--color-secondary-light-2: #e2e7eb;
--color-secondary-light-3: #eaeef1;
--color-secondary-light-4: #f2f4f6;
--color-secondary-alpha-10: #d1d9e01a;
--color-secondary-alpha-20: #d1d9e033;
--color-secondary-alpha-30: #d1d9e04d;
--color-secondary-alpha-40: #d1d9e066;
--color-secondary-alpha-50: #d1d9e080;
--color-secondary-alpha-60: #d1d9e099;
--color-secondary-alpha-70: #d1d9e0b3;
--color-secondary-alpha-80: #d1d9e0cc;
--color-secondary-alpha-90: #d1d9e0e6;
--color-secondary-button: var(--color-secondary-dark-4);
--color-secondary-hover: var(--color-secondary-dark-5);
--color-secondary-active: var(--color-secondary-dark-6);
--color-secondary-bg: unset;
--color-secondary-nav-bg: var(--color-body);
--color-console-fg: #1f2328;
--color-console-fg-subtle: #59636e;
--color-console-bg: #f6f8fa;
--color-console-border: #d1d9e0b3;
--color-console-active-bg: #e6eaef;
--color-console-hover-bg: #818b981a;
--color-console-menu-bg: #fff;
--color-console-menu-border: #d1d9e0b3;
--color-console-link: #59636e;
--color-red-light: #e2555e;
--color-red-dark-1: #bc202a;
--color-red-dark-2: #a71d26;
--color-red-badge: #d1242f;
--color-red-badge-bg: #d1242f1a;
--color-red-badge-hover-bg: #d1242f4d;
--color-orange-light: #ff6f0e;
--color-orange-dark-1: #a94400;
--color-orange-dark-2: #963d00;
--color-orange-badge: #bc4c00;
--color-orange-badge-bg: #bc4c001a;
--color-orange-badge-hover-bg: #bc4c004d;
--color-yellow-light: #f3a300;
--color-yellow-dark-1: #8b5d00;
--color-yellow-dark-2: #7b5200;
--color-yellow-badge: #9a6700;
--color-yellow-badge-bg: #9a67001a;
--color-yellow-badge-hover-bg: #9a67004d;
--color-olive-light: #8ba847;
--color-olive-dark-1: #4d5e28;
--color-olive-dark-2: #455323;
--color-green-light: #29c957;
--color-green-dark-1: #177231;
--color-green-dark-2: #15662c;
--color-green-badge: #1a7f37;
--color-green-badge-bg: #1a7f371a;
--color-green-badge-hover-bg: #1a7f374d;
--color-teal-light: #1bbcc8;
--color-teal-dark-1: #0e6369;
--color-teal-dark-2: #0d585e;
--color-blue-light: #338df7;
--color-blue-dark-1: #085ec4;
--color-blue-dark-2: #0754ae;
--color-violet-light: #777ae7;
--color-violet-dark-1: #3036db;
--color-violet-dark-2: #2329c9;
--color-purple-light: #a17ce7;
--color-purple-dark-1: #7036da;
--color-purple-dark-2: #6025cd;
--color-pink-light: #d268a7;
--color-pink-dark-1: #ac337b;
--color-pink-dark-2: #992e6e;
--color-brown-light: #a68964;
--color-brown-dark-1: #69563c;
--color-brown-dark-2: #5e4c36;
--color-black-light: #4f5966;
--color-black-dark-1: #1c2024;
--color-black-dark-2: #191c20;
--color-grey-light: #7e8a97;
--color-ansi-black: var(--color-black);
--color-ansi-red: var(--color-red);
--color-ansi-green: var(--color-green);
--color-ansi-yellow: var(--color-yellow);
--color-ansi-blue: var(--color-blue);
--color-ansi-magenta: var(--color-pink);
--color-ansi-cyan: #006a80;
--color-ansi-white: var(--color-console-fg-subtle);
--color-ansi-bright-black: var(--color-black-light);
--color-ansi-bright-red: var(--color-red-light);
--color-ansi-bright-green: var(--color-green-light);
--color-ansi-bright-yellow: var(--color-yellow-light);
--color-ansi-bright-blue: var(--color-blue-light);
--color-ansi-bright-magenta: var(--color-pink-light);
--color-ansi-bright-cyan: #00b9e0;
--color-ansi-bright-white: var(--color-console-fg);
--color-diff-added-fg: #1f883d;
--color-diff-added-linenum-bg: #aceebb;
--color-diff-added-row-bg: #dafbe1;
--color-diff-added-row-border: #dafbe1;
--color-diff-added-word-bg: #aceebb;
--color-diff-removed-fg: #cf222e;
--color-diff-removed-linenum-bg: #ffcecb;
--color-diff-removed-row-bg: #ffebe9;
--color-diff-removed-row-border: #ffebe9;
--color-diff-removed-word-bg: #ffcecb;
--color-diff-moved-row-bg: #fff8c5;
--color-diff-moved-row-border: #fff8c5;
--color-diff-inactive: #f6f8fa;
--color-error-bg: #d1242f1a;
--color-error-bg-active: #d1242f80;
--color-error-bg-hover: #d1242f4d;
--color-error-border: #d1242f66;
--color-error-text: #ea0b1a;
--color-success-bg: #1a7f371a;
--color-success-border: #1a7f3766;
--color-success-text: #0b8e30;
--color-warning-bg: #9a67001a;
--color-warning-border: #9a670066;
--color-warning-text: #9a6700;
--color-info-bg: #0969da1a;
--color-info-border: #0969da66;
--color-info-text: #0068e3;
--github-avatar-bgColor: #fff;
--github-avatar-borderColor: #1f232826;
--github-fgColor-accent: #0969da;
--github-fgColor-success: #1a7f37;
--github-fgColor-done: #8250df;
--github-fgColor-onEmphasis: #fff;
--github-bgColor-accent-emphasis: #0969da;
--github-bgColor-accent-muted: #ddf4ff;
--github-bgColor-success-emphasis: #1f883d;
--github-bgColor-attention-emphasis: #9a6700;
--github-bgColor-danger-emphasis: #cf222e;
--github-bgColor-done-emphasis: #8250df;
--github-bgColor-neutral-emphasis: #59636e;
--github-borderColor-accent-emphasis: #0969da;
--github-borderColor-attention-emphasis: #9a6700;
--github-borderColor-success-emphasis: #1a7f37;
--github-borderColor-done-emphasis: #8250df;
--github-borderColor-emphasis: #818b98;
--github-button-default-bgColor-active: #e6eaef;
--github-button-primary-fgColor-accent: #10792e;
--github-button-primary-fgColor-rest: #fff;
--github-button-primary-bgColor-rest: var(--github-bgColor-success-emphasis);
--github-button-primary-bgColor-hover: #1c8139;
--github-button-primary-bgColor-active: #197935;
--github-button-primary-borderColor-rest: #1f232826;
--github-button-primary-borderColor-hover: #1f232826;
--github-button-danger-fgColor-rest: #d1242f;
--github-button-danger-fgColor-hover: #fff;
--github-button-danger-bgColor-rest: #f6f8fa;
--github-button-danger-bgColor-hover: #cf222e;
--github-button-danger-bgColor-active: #a40e26;
--github-button-danger-borderColor-hover: #1f232826;
--github-button-star-iconColor: #eac54f;
--github-button-invisible-iconColor-rest: #59636e;
--github-control-bgColor-rest: #f6f8fa;
--github-control-transparent-bgColor-hover: #818b981a;
--github-control-transparent-bgColor-active: #818b9826;
--github-control-danger-bgColor-active: #ffebe966;
--github-controlTrack-bgColor-rest: #e6eaef;
--github-controlKnob-bgColor-rest: #fff;
--github-shadow-floating-small: 0px 0px 0px 1px var(--color-light-border), 0px 6px 12px -3px var(--color-shadow), 0px 6px 18px 0px var(--color-shadow);
--github-shadow-inset: inset 0px 1px 0px 0px #1f23280a;
--github-shadow-resting-small: 0px 1px 1px 0px #1f23280f, 0px 1px 3px 0px #1f23280f;
--github-shadow-resting-medium: drop-shadow(0 1px 1px #25292e0a) drop-shadow(0 3px 6px #25292e1f);
--github-underlineNav-borderColor-active: #fd8c73;
--github-contribution-default-bgColor-0: #eff2f5;
--github-contribution-default-bgColor-1: #aceebb;
--github-contribution-default-bgColor-2: #4ac26b;
--github-contribution-default-bgColor-3: #2da44e;
--github-contribution-default-bgColor-4: #116329;
--github-contribution-default-bgColor-5: #022f0f;
--github-contribution-default-borderColor-0: #1f23280d;
--github-contribution-default-borderColor-1: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-2: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-3: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-4: var(--github-contribution-default-borderColor-0);
--github-contribution-default-borderColor-5: var(--github-contribution-default-borderColor-0);
--github-workflow-card-bg: #fff;
--color-syntax-keyword: #cf222e;
--color-syntax-bool: #0550ae;
--color-syntax-control: #cf222e;
--color-syntax-name: #6639ba;
--color-syntax-type: #953800;
--color-syntax-number: #0550ae;
--color-syntax-operator: #0550ae;
--color-syntax-regexp: #116329;
--color-syntax-string: #0a3069;
--color-syntax-comment: #59636e;
--color-syntax-invalid: #82071e;
--color-syntax-link: var(--color-primary);
--color-syntax-tag: #116329;
--color-syntax-attribute: #0550ae;
--color-syntax-property: #0550ae;
--color-syntax-variable: #953800;
--color-syntax-string-special: #0a3069;
--color-syntax-escape: #0a3069;
--color-syntax-entity: #953800;
--color-syntax-preproc: #0550ae;
--color-syntax-preproc-file: #0550ae;
--color-syntax-decorator: #6639ba;
--color-syntax-namespace: #1f2328;
--color-syntax-name-pseudo: #1f2328;
--color-syntax-comment-special: #59636e;
--color-syntax-text: var(--color-text);
--color-syntax-text-alt: var(--color-text);
--color-syntax-punctuation: var(--color-text);
--color-syntax-whitespace: #82071e;
--color-syntax-diff-fg: var(--color-text);
--color-syntax-deleted-bg: var(--color-diff-removed-row-bg);
--color-syntax-inserted-bg: var(--color-diff-added-row-bg);
--color-syntax-emph: var(--color-text);
--color-syntax-strong: var(--color-text);
--color-syntax-heading: #0550ae;
--color-syntax-subheading: #0550ae;
--color-syntax-output: var(--color-text);
--color-syntax-prompt: var(--color-text);
--color-syntax-traceback: #82071e;
--color-syntax-matching-bracket-bg: #0969da33;
--color-syntax-nonmatching-bracket-bg: #cf222e33;
--color-red: #d1242f;
--color-orange: #bc4c00;
--color-yellow: #9a6700;
--color-olive: #56682c;
--color-green: #1a7f37;
--color-teal: #106e75;
--color-blue: #0969da;
--color-violet: #494edf;
--color-purple: #8250df;
--color-pink: #bf3989;
--color-brown: #755f43;
--color-black: #1f2328;
--color-grey: #59636e;
--color-gold: #786002;
--color-white: #fff;
--color-logo: var(--color-primary);
--color-body: #fff;
--color-box-header: #f6f8fa;
--color-box-body: var(--color-body);
--color-box-body-highlight: #ddf4ff;
--color-text: #1f2328;
--color-text-light: #1f2328;
--color-text-light-1: #59636e;
--color-text-light-2: #59636e;
--color-text-light-3: #59636e;
--color-text-dark: #1f2328;
--color-footer: #f6f8fa;
--color-timeline: #d1d9e0b3;
--color-input-text: var(--color-text);
--color-input-background: #f6f8fa;
--color-input-toggle-background: #f6f8fa;
--color-input-border: var(--color-light-border);
--color-light: var(--color-body);
--color-light-border: #d1d9e0;
--color-hover: #eff2f5;
--color-hover-opaque: var(--color-box-header);
--color-active: #818b9826;
--color-menu: #fff;
--color-card: var(--color-body);
--color-markup-table-row: #f6f8fa;
--color-markup-code-block: #f6f8fa;
--color-markup-code-inline: #818b981f;
--color-button: #f6f8fa;
--color-code-bg: unset;
--color-shadow: #25292e0a;
--color-shadow-opaque: var(--color-shadow);
--color-expand-button: #b6e3ff;
--color-placeholder-text: var(--color-text-light-3);
--color-editor-line-highlight: var(--color-secondary-light-1);
--color-editor-selection: var(--color-editor-line-highlight);
--color-project-column-bg: #f6f8fa;
--color-caret: var(--color-text-dark);
--color-reaction-bg: initial;
--color-reaction-hover-bg: #ddf4ff;
--color-reaction-active-bg: #ddf4ff;
--color-tooltip-text: #fff;
--color-tooltip-bg: #25292e;
--color-nav-bg: #f6f8fa;
--color-nav-hover-bg: #818b981a;
--color-nav-text: var(--color-text);
--color-label-text: var(--color-text);
--color-label-bg: #818b981f;
--color-label-hover-bg: #818b9826;
--color-label-active-bg: var(--color-label-hover-bg);
--color-accent: var(--color-primary-light-1);
--color-small-accent: var(--color-primary-light-5);
--color-highlight-fg: #9a6700;
--color-highlight-bg: #fff8c5;
--color-overlay-backdrop: #c8d1da66;
--color-danger: var(--color-red);
--color-transparency-grid-light: #fff;
--color-transparency-grid-dark: #e5e5e5;
--color-workflow-edge-hover: #0969da;
--border-radius: 6px;
--color-git: #f05133;
--checkbox-size: 14px;
accent-color: var(--color-accent);
color-scheme: light;
--fonts-proportional: "Noto Sans SC", "Segoe UI Variable", "Segoe UI", "PingFang SC", "Microsoft YaHei UI", sans-serif;
--fonts-regular: var(--fonts-proportional);
--fonts-monospace: "JetBrains Mono", "Cascadia Code", ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace;
--color-nav-hoverBg: var(--color-nav-hover-bg);
--color-label-hoverBg: var(--color-label-hover-bg);
--color-reaction-hoverBg: var(--color-reaction-hover-bg);
--color-workflowEdgeHover: var(--color-workflow-edge-hover);
--color-console-activeBg: var(--color-console-active-bg);
--color-console-hoverBg: var(--color-console-hover-bg);
--fontStack-monospace: var(--fonts-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace);
}
+3
View File
@@ -0,0 +1,3 @@
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap");
@import "./light-colors.css";
@import "./shared.css";
+697
View File
@@ -0,0 +1,697 @@
.page-content > :first-child.secondary-nav {
margin-bottom: 16px;
> .ui.secondary.stackable.menu {
gap: 0;
min-height: 48px;
> .item {
margin-top: auto;
margin-bottom: auto;
> .ui.dropdown > .text {
display: inline-flex;
align-items: center;
gap: 4px;
svg {
margin-right: 4px;
}
}
}
> .right.menu {
gap: 4px;
}
}
}
.page-content.dashboard {
/* 仪表板切换控制用户按钮 */
.ui.dropdown .menu.context-user-switch .scrolling.menu {
animation: none; /* 去掉嵌套菜单导致的多余动画 */
box-shadow: 0px 0px 0px 1px var(--color-light-border) !important;
}
}
/* 首页仪表板, 避免选中管理员后台的维护管理面板 */
.page-content.dashboard.feeds {
/* 仓库列表的仓库/组织切换按钮 */
.ui.two.item.menu {
background: var(--github-controlTrack-bgColor-rest);
border: 0;
border-radius: 12px;
min-height: 42px;
margin-bottom: 8px;
position: relative;
> .item {
background: unset;
border-radius: 12px;
align-items: center;
display: flex;
height: 42px;
justify-content: center;
padding: 6px 12px !important;
position: relative;
z-index: 2;
&.active {
background: unset !important;
box-shadow: none !important;
font-weight: 600;
}
&::before {
display: none;
}
&:not(.active) {
border-radius: 12px;
margin: 0 !important;
width: 50%;
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
}
}
/* 滑块指示器 */
&::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 50%;
height: 100%;
background: var(--github-controlKnob-bgColor-rest);
border-radius: 12px;
box-shadow:
0px 0px 0px 1px var(--color-light-border),
var(--github-shadow-resting-small);
transition: transform 200ms cubic-bezier(0.33, 1, 0.68, 1);
z-index: 1;
pointer-events: none;
}
/* 右侧激活 → 滑块向右滑 */
&:has(> .item:last-child.active)::after {
transform: translateX(100%);
}
}
/* 仓库/组织列表标题 */
.ui.top.attached.header {
border: 0;
font-size: 20px;
font-weight: 400;
background-color: unset !important;
margin-bottom: 0.25rem;
.ui.label {
border-color: #00000000;
}
}
/* 仓库/组织列表 */
.ui.attached.segment {
background-color: var(--color-menu);
border: unset !important;
box-shadow:
0px 0px 0px 1px var(--color-light-border),
var(--github-shadow-resting-small);
&.repos-search {
border-top-left-radius: 12px;
border-top-right-radius: 12px;
> .menu.repos-filter {
.ui.circular.label {
border-color: #00000000;
min-height: fit-content;
padding: 0px 6px !important;
}
}
}
&.table {
&:last-child {
border-bottom-left-radius: 12px !important;
border-bottom-right-radius: 12px !important;
}
ul {
padding: 8px;
li {
border-radius: var(--border-radius);
padding: 6px 8px !important;
height: 32px;
&:not(:last-child) {
border-bottom: 0;
}
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
a.muted:hover {
color: inherit;
text-decoration-line: none;
}
}
}
}
}
/* 组织列表 */
.ui.tab.dashboard-orgs .ui.attached.segment.table {
border-top-left-radius: 12px;
border-top-right-radius: 12px;
}
}
.page-content.dashboard.issues {
.list-header {
background-color: var(--color-box-header);
border: 1px solid var(--color-light-border);
border-bottom: 0;
border-top-left-radius: var(--border-radius);
border-top-right-radius: var(--border-radius);
height: 54px;
padding: 16px 8px;
.list-header-toggle {
align-items: center;
border: 0;
> .item {
background: unset !important;
border-radius: var(--border-radius);
color: var(--color-text-light-1);
padding: 0px 8px;
height: 30px;
&:before {
display: none;
}
&:hover {
background: var(--github-control-transparent-bgColor-hover) !important;
}
&.active {
color: var(--color-text);
font-weight: 700;
}
}
}
.list-header-filters {
> .item {
border-radius: var(--border-radius);
color: var(--color-text-light-1);
padding: 0px 12px;
height: 32px;
&:hover {
background: var(--github-control-transparent-bgColor-hover);
}
}
}
}
}
@media (max-width: 767.98px) {
.page-content.dashboard.issues .list-header {
height: auto;
}
}
.dashboard .secondary-nav .org-visibility .label {
margin-right: 0;
}
/* 组织 */
.page-content.organization.profile > .ui.container > .ui.stackable > .ui.eleven,
/* 用户 */
.page-content.user.profile > .ui.container > .ui.stackable > .ui.twelve,
/* 探索 */
.page-content.explore.repositories > .ui.container {
/* 排除用户的公开活动页 */
> .flex-list:not(#activity-feed) {
display: grid;
> .flex-item {
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
padding: 16px;
/* 仓库头像 */
> .flex-item-leading {
img,
svg {
color: var(--color-text-light-1);
}
}
/* 仓库信息 */
> .flex-item-main {
/* 仓库标题 */
> .flex-item-header {
/* 仓库名称 */
> .flex-item-title {
gap: 8px;
/* 仓库中间的间隔线 */
&:not(a) {
color: var(--color-text-light-1);
}
}
/* 仓库语言, 星标 */
> .flex-item-trailing {
color: var(--color-text-light-1);
gap: 16px;
font-size: 12px;
> .flex-text-inline .color-icon {
width: 12px;
height: 12px;
margin-right: 0 !important;
}
}
}
/* 描述和更新时间 */
> .flex-item-body {
margin-top: 8px;
/* 更新时间 */
&:last-child {
font-size: 12px;
}
}
/* 主题标签 */
> .label-list {
margin-top: 8px;
}
}
}
}
}
/* 仓库列表列数 */
/* 组织 */
.page-content.organization.profile > .ui.container > .ui.stackable > .ui.eleven > .flex-list {
grid-template-columns: repeat(var(--custom-org-repolist-columns, 1), 1fr);
gap: min(var(--custom-org-repolist-columns, 1) * 8px, 16px);
}
/* 用户 */
/* 排除用户的公开活动页 */
.page-content.user.profile > .ui.container > .ui.stackable > .ui.twelve > .flex-list:not(#activity-feed) {
grid-template-columns: repeat(var(--custom-user-repolist-columns, 2), 1fr);
gap: min(var(--custom-user-repolist-columns, 2) * 8px, 16px);
}
/* 探索 */
.page-content.explore.repositories > .ui.container > .flex-list {
grid-template-columns: repeat(var(--custom-explore-repolist-columns, 2), 1fr);
gap: min(var(--custom-explore-repolist-columns, 2) * 8px, 16px);
}
/* 组织 */
.page-content.organization.members > .ui.container,
/* 探索的用户和组织 */
.page-content.explore.users > .ui.container {
> .flex-list {
display: grid;
> .flex-item {
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
padding: 16px;
> .flex-item-main {
/* 用户名称 */
> .flex-item-title {
gap: 8px;
margin-bottom: 8px;
/* 用户标签 */
> .label {
font-size: 12px;
}
}
/* 用户描述 */
> .flex-item-body {
font-size: 12px;
svg {
width: 12px;
min-width: 12px;
}
}
}
}
}
}
/* 用户列表列数 */
/* 组织 */
.page-content.organization.members > .ui.container > .flex-list {
grid-template-columns: repeat(var(--custom-org-userlist-columns, 2), 1fr);
gap: min(var(--custom-org-userlist-columns, 2) * 8px, 16px);
}
/* 探索的用户和组织 */
.page-content.explore.users > .ui.container > .flex-list {
grid-template-columns: repeat(var(--custom-explore-userlist-columns, 3), 1fr);
gap: min(var(--custom-explore-userlist-columns, 3) * 8px, 16px);
}
@media (max-width: 767.98px) {
/* 组织的仓库列表 */
.page-content.organization.profile > .ui.container > .ui.stackable > .ui.eleven,
/* 用户的仓库列表 */
.page-content.user.profile > .ui.container > .ui.stackable > .ui.twelve,
/* 探索的仓库列表 */
.page-content.explore.repositories > .ui.container,
/* 组织的成员列表 */
.page-content.organization.members >.ui.container,
/* 探索的用户和组织列表 */
.page-content.explore.users >.ui.container {
/* 排除用户的公开活动页 */
> .flex-list:not(#activity-feed) {
grid-template-columns: 1fr;
gap: 8px;
}
}
}
/* 组织的仓库列表 */
.page-content.organization.profile > .ui.container > .ui.stackable > .ui.eleven,
/* 用户的仓库列表 */
.page-content.user.profile > .ui.container > .ui.stackable > .ui.twelve,
/* 探索的仓库列表 */
.page-content.explore.repositories > .ui.container,
/* 组织的成员列表 */
.page-content.organization.members >.ui.container,
/* 探索的用户和组织列表 */
.page-content.explore.users >.ui.container {
/* 排除用户的公开活动页 */
> .flex-list:not(#activity-feed) {
&:has(> div:only-child):not(:has(.flex-item-main)) {
grid-template-columns: 1fr;
> div {
border: 1px solid var(--color-light-border);
border-radius: var(--border-radius);
font-size: 16px;
font-weight: 500;
padding: 32px;
display: flex;
justify-content: center;
}
}
}
}
.page-content.repository.new-repo {
.ui.dropdown .menu {
.item:hover:after {
content: "";
background-color: var(--github-borderColor-accent-emphasis);
border-radius: var(--border-radius);
height: 24px;
left: -8px;
position: absolute;
top: calc(50% - 12px);
width: 4px;
}
}
}
.page-content.organization {
/* 组织成员头像 */
.members .ui.avatar {
border-radius: 9999px;
}
/* 组织头像 */
.org-avatar {
margin: 8px 24px 16px 0px;
}
/* 组织信息 */
#org-info {
margin-top: 8px; /* 与头像对齐 */
gap: 8px;
/* 组织名称 */
> .ui.header {
font-size: 24px;
> .org-visibility {
margin-left: 8px;
}
/* 组织页面的 RSS 订阅按钮 */
.ui.label.button {
padding: 4px 16px;
.svg {
width: 20px;
min-width: 20px;
}
&:hover {
border-color: var(--color-light-border);
}
}
}
/* 组织描述 */
> .markup {
color: var(--color-text-light-1);
}
/* 组织信息 */
> .meta {
font-size: 12px;
svg {
color: var(--color-text-light-1);
}
}
}
}
/* 不包含管理员的设置界面 */
.user-main-content,
.repo-setting-content,
.user-setting-content,
.org-setting-content {
/* 主色调按钮替换为普通按钮 */
.ui.primary.button {
color: var(--color-text-light);
background-color: var(--color-button);
border-color: var(--color-light-border);
box-shadow: none;
&:hover {
background-color: var(--color-hover);
}
&:active {
background-color: var(--github-button-default-bgColor-active);
}
}
/* 迷你按钮替换为自定义的主色调按钮 (例: SSH 验证按钮) */
.ui.primary.button.tiny {
color: var(--github-button-primary-fgColor-accent);
background-color: var(--color-button);
border-color: var(--color-light-border);
&:hover {
color: var(--github-button-primary-fgColor-rest);
background-color: var(--github-button-primary-bgColor-hover);
border-color: var(--github-button-primary-borderColor-hover);
}
&:active {
background-color: var(--github-button-primary-bgColor-active);
}
}
}
/* 所有设置界面 */
.user-main-content,
.repo-setting-content,
.user-setting-content,
.org-setting-content,
.admin-setting-content {
/* 右上角迷你按钮替换会主色调按钮 */
.ui.attached.header > .ui.right {
.ui.primary.button.tiny {
color: var(--github-button-primary-fgColor-rest);
background-color: var(--github-button-primary-bgColor-rest);
border-color: var(--github-button-primary-borderColor-rest);
box-shadow: var(--github-shadow-resting-small);
padding: 3px 12px;
min-height: 20px;
line-height: 20px;
&:hover {
color: var(--github-button-primary-fgColor-rest);
background-color: var(--github-button-primary-bgColor-hover);
border-color: var(--github-button-primary-borderColor-hover);
}
&:active {
background-color: var(--github-button-primary-bgColor-active);
}
}
}
}
/* 管理员设置界面下的自定义主色调按钮 */
.admin-setting-content {
.ui.primary.button {
color: var(--github-button-primary-fgColor-accent);
background-color: var(--color-button);
border-color: var(--color-light-border);
padding: 5px 16px;
line-height: 22px;
&:hover {
color: var(--github-button-primary-fgColor-rest);
background-color: var(--github-button-primary-bgColor-hover);
border-color: var(--github-button-primary-borderColor-hover);
}
&:active {
background-color: var(--github-button-primary-bgColor-active);
/* 保持鼠标移开时边框颜色和文字颜色不变 */
border-color: var(--github-button-primary-borderColor-hover);
color: var(--github-button-primary-fgColor-rest);
}
}
.ui.red.button {
box-shadow: var(--github-shadow-resting-small);
padding: 5px 16px;
line-height: 22px;
}
}
/* Runner 标签 */
.runner-container {
/* 普通标签, runner 状态: 离线, runner 标签 */
.ui.label {
border: 1px solid var(--color-light-border);
}
}
.page-content.organization.settings {
.org-setting-content {
border: 0;
}
}
.page-content.user.signin {
.ui.grid {
justify-content: center;
> .column {
width: 384px;
padding: 16px;
> .ui.container {
max-width: unset;
}
}
}
.ui.top.attached.header {
border: 0;
font-size: 20px;
font-weight: 600;
background-color: unset !important;
text-align: center;
padding: 16px;
}
.ui.attached.segment {
border: 0;
padding: 16px 0 0 0;
.field:not(.inline) {
label {
font-size: 14px;
font-weight: 600;
}
input {
background: unset;
padding: 5px 12px;
height: 40px;
font-size: 16px;
}
}
.button {
height: 40px;
}
.divider.divider-text {
margin: 20px 0px;
}
#oauth2-login-navigator-inner {
gap: 8px;
.ui.button svg {
width: 18px;
}
}
}
.ui.top.attached.header.segment {
font-size: 14px;
font-weight: 400;
gap: 16px;
.signin-passkey {
font-weight: 500;
}
}
}
.page-content.user.profile {
.stars {
> .flex-list {
> .flex-item {
padding: 24px 0;
&:first-child {
padding-top: 14px;
}
/* 仓库头像 */
> .flex-item-leading {
img,
svg {
color: var(--color-text-light-1);
}
}
/* 仓库信息 */
> .flex-item-main {
/* 仓库标题 */
> .flex-item-header {
/* 仓库名称 */
> .flex-item-title {
font-size: 20px;
gap: 8px;
/* 仓库中间的间隔线 */
&:not(a) {
color: var(--color-primary);
}
}
/* 仓库语言, 星标 */
> .flex-item-trailing {
color: var(--color-text-light-1);
gap: 16px;
font-size: 12px;
> .flex-text-inline .color-icon {
width: 12px;
height: 12px;
margin-right: 0 !important;
}
}
}
/* 描述和更新时间 */
> .flex-item-body {
margin-top: 10px;
/* 更新时间 */
&:last-child {
font-size: 12px;
}
}
/* 主题标签 */
> .label-list {
margin-top: 10px;
}
}
}
}
}
}
.page-content.user.profile {
#profile-avatar-card {
#profile-avatar {
img.ui.avatar {
border-radius: 9999px;
}
}
}
}
+22
View File
@@ -0,0 +1,22 @@
@import "./controls/attached.css";
@import "./controls/base.css";
@import "./controls/button.css";
@import "./controls/dropdown.css";
@import "./controls/input.css";
@import "./controls/label.css";
@import "./controls/menu.css";
@import "./controls/modal.css";
@import "./controls/other.css";
@import "./controls/radius.css";
@import "./controls/table.css";
@import "./controls/tippy.css";
@import "./controls/transition.css";
@import "./components/actions.css";
@import "./components/footer.css";
@import "./components/heatmap.css";
@import "./components/issues.css";
@import "./components/navbar.css";
@import "./components/notification.css";
@import "./components/repo.css";
@import "./components/templates.css";
@import "./pages.css";
@@ -0,0 +1 @@
{{/* Intentionally empty: hide Gitea's default page footer. */}}
@@ -0,0 +1,188 @@
<nav id="navbar" aria-label="{{ctx.Locale.Tr "aria.navbar"}}">
<div class="navbar-left">
<!-- the logo -->
<a class="item" id="navbar-logo" href="{{AppSubUrl}}/" aria-label="{{if .IsSigned}}{{ctx.Locale.Tr "dashboard"}}{{else}}{{ctx.Locale.Tr "home_title"}}{{end}}">
<img width="30" height="30" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}" aria-hidden="true">
</a>
<!-- mobile right menu, it must be here because in mobile view, each item is a flex column, the first item is a full row column -->
<div class="ui secondary menu navbar-mobile-right only-mobile">
{{template "base/head_navbar_icons" dict "PageGlobalData" .PageGlobalData}}
<button class="item ui icon mini button tw-m-0" id="navbar-expand-toggle" aria-label="{{ctx.Locale.Tr "home.nav_menu"}}">{{svg "octicon-three-bars"}}</button>
</div>
<!-- navbar links non-mobile -->
{{if and .IsSigned .MustChangePassword}}
{{/* No links */}}
{{else if .IsSigned}}
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/repos">{{ctx.Locale.Tr "explore_title"}}</a>
{{else if .IsLandingPageOrganizations}}
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/organizations">{{ctx.Locale.Tr "explore_title"}}</a>
{{else}}
<a class="item{{if .PageIsExplore}} active{{end}}" href="{{AppSubUrl}}/explore/repos">{{ctx.Locale.Tr "explore_title"}}</a>
{{end}}
{{template "custom/extra_links" .}}
</div>
<!-- the full dropdown menus -->
<div class="navbar-right">
{{if and .IsSigned .MustChangePassword}}
{{template "base/theme_toggle" .}}
<div class="ui dropdown jump item navbar-user-menu" data-tooltip-content="{{ctx.Locale.Tr "user_profile_and_more"}}">
<span class="text">
{{ctx.AvatarUtils.Avatar .SignedUser 24 "tw-mr-1"}}
<span class="only-mobile">{{.SignedUser.Name}}</span>
<span class="not-mobile flex-text-block">{{svg "octicon-triangle-down"}}</span>
</span>
<div class="menu user-menu">
<div class="header">
{{ctx.Locale.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong>
</div>
<div class="divider"></div>
<a class="item" href="{{AppSubUrl}}/user/logout">
{{svg "octicon-sign-out"}}
{{ctx.Locale.Tr "sign_out"}}
</a>
</div><!-- end content avatar menu -->
</div><!-- end dropdown avatar menu -->
{{else if .IsSigned}}
<div class="ui dropdown jump item" data-tooltip-content="{{ctx.Locale.Tr "create_new"}}">
<span class="flex-text-block">
{{svg "octicon-plus"}}
<span class="not-mobile flex-text-block">{{svg "octicon-triangle-down"}}</span>
<span class="only-mobile">{{ctx.Locale.Tr "create_new"}}</span>
</span>
<div class="menu">
<a class="item" href="{{AppSubUrl}}/repo/create">
{{svg "octicon-plus"}} {{ctx.Locale.Tr "new_repo"}}
</a>
{{if not .DisableMigrations}}
<a class="item" href="{{AppSubUrl}}/repo/migrate">
{{svg "octicon-repo-push"}} {{ctx.Locale.Tr "new_migrate"}}
</a>
{{end}}
{{if .SignedUser.CanCreateOrganization}}
<a class="item" href="{{AppSubUrl}}/org/create">
{{svg "octicon-organization"}} {{ctx.Locale.Tr "new_org"}}
</a>
{{end}}
</div><!-- end content create new menu -->
</div><!-- end dropdown menu create new -->
{{template "base/head_navbar_icons" dict "ItemExtraClass" "not-mobile" "PageGlobalData" .PageGlobalData "ShowMilestonesDashboardPage" .ShowMilestonesDashboardPage}}
{{template "base/theme_toggle" .}}
<div class="ui dropdown jump item navbar-user-menu" data-tooltip-content="{{ctx.Locale.Tr "user_profile_and_more"}}">
<span class="text tw-flex tw-items-center">
<span class="navbar-avatar">
{{ctx.AvatarUtils.Avatar .SignedUser 24 "tw-mr-2"}}
{{if .IsAdmin}}{{svg "octicon-shield-check" 16 "navbar-admin-badge"}}{{end}}
</span>
<span class="only-mobile">{{.SignedUser.Name}}</span>
<span class="not-mobile flex-text-block">{{svg "octicon-triangle-down"}}</span>
</span>
<div class="menu user-menu">
<div class="header">
{{ctx.Locale.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong>
</div>
<div class="divider"></div>
<a class="item" href="{{.SignedUser.HomeLink}}">
{{svg "octicon-person"}}
{{ctx.Locale.Tr "your_profile"}}
</a>
{{if not .DisableStars}}
<a class="item" href="{{.SignedUser.HomeLink}}?tab=stars">
{{svg "octicon-star"}}
{{ctx.Locale.Tr "your_starred"}}
</a>
{{end}}
<a class="item" href="{{AppSubUrl}}/notifications/subscriptions">
{{svg "octicon-bell"}}
{{ctx.Locale.Tr "notification.subscriptions"}}
</a>
<a class="{{if .PageIsUserSettings}}active {{end}}item" href="{{AppSubUrl}}/user/settings">
{{svg "octicon-tools"}}
{{ctx.Locale.Tr "your_settings"}}
</a>
<a class="item" target="_blank" href="https://docs.gitea.com">
{{svg "octicon-question"}}
{{ctx.Locale.Tr "help"}}
</a>
{{if .IsAdmin}}
<div class="divider"></div>
<a class="{{if .PageIsAdmin}}active {{end}}item" href="{{AppSubUrl}}/-/admin">
{{svg "octicon-server"}}
{{ctx.Locale.Tr "admin_panel"}}
</a>
{{end}}
<div class="divider"></div>
<a class="item" href="{{AppSubUrl}}/user/logout">
{{svg "octicon-sign-out"}}
{{ctx.Locale.Tr "sign_out"}}
</a>
</div><!-- end content avatar menu -->
</div><!-- end dropdown avatar menu -->
{{else}}
{{if .ShowRegistrationButton}}
<a class="item{{if .PageIsSignUp}} active{{end}}" href="{{AppSubUrl}}/user/sign_up">
{{svg "octicon-person"}}
<span class="tw-ml-1">{{ctx.Locale.Tr "register"}}</span>
</a>
{{end}}
<a class="item{{if .PageIsSignIn}} active{{end}}" rel="nofollow" href="{{AppSubUrl}}/user/login{{if not .PageIsSignIn}}?redirect_to={{.CurrentURL}}{{end}}">
{{svg "octicon-sign-in"}}
<span class="tw-ml-1">{{ctx.Locale.Tr "sign_in"}}</span>
</a>
{{template "base/theme_toggle" .}}
{{end}}
</div><!-- end full right menu -->
{{$activeStopwatch := and .PageGlobalData (call .PageGlobalData.GetActiveStopwatch)}}
{{if $activeStopwatch}}
<div class="active-stopwatch-popup tippy-target">
<div class="flex-text-block tw-p-3">
<a class="stopwatch-link flex-text-block muted" href="{{$activeStopwatch.IssueLink}}">
{{svg "octicon-issue-opened" 16}}
<span class="stopwatch-issue">{{$activeStopwatch.RepoSlug}}#{{$activeStopwatch.IssueIndex}}</span>
</a>
<div class="tw-flex tw-gap-1">
<form class="stopwatch-commit form-fetch-action" method="post" action="{{$activeStopwatch.IssueLink}}/times/stopwatch/stop">
<button
type="submit"
class="ui button mini compact basic icon tw-mr-0"
data-tooltip-content="{{ctx.Locale.Tr "repo.issues.stop_tracking"}}"
>{{svg "octicon-square-fill"}}</button>
</form>
<form class="stopwatch-cancel form-fetch-action" method="post" action="{{$activeStopwatch.IssueLink}}/times/stopwatch/cancel">
<button
type="submit"
class="ui button mini compact basic icon tw-mr-0"
data-tooltip-content="{{ctx.Locale.Tr "repo.issues.cancel_tracking"}}"
>{{svg "octicon-trash"}}</button>
</form>
</div>
</div>
</div>
{{end}}
</nav>
<script nonce="{{ctx.CspScriptNonce}}">
document.addEventListener("DOMContentLoaded", () => {
const toggle = document.querySelector(".navbar-theme-toggle");
if (!toggle) return;
toggle.addEventListener("click", async () => {
const current = toggle.getAttribute("data-current-theme");
const light = toggle.getAttribute("data-light-theme");
const dark = toggle.getAttribute("data-dark-theme");
const next = current === dark ? light : dark;
await fetch(`{{AppSubUrl}}/-/web-theme/apply?theme=${encodeURIComponent(next)}`, {
method: "POST",
headers: {"X-Csrf-Token": "{{ctx.CsrfToken}}"},
});
window.location.reload();
});
});
</script>
{{template "base/head_banner"}}
@@ -0,0 +1,37 @@
{{- $itemExtraClass := .ItemExtraClass -}}
{{- $data := .PageGlobalData -}}
{{if and $data $data.IsSigned}}{{/* data may not exist, for example: rendering 503 page before the PageGlobalData middleware */}}
{{- $activeStopwatch := call $data.GetActiveStopwatch -}}
{{- $notificationUnreadCount := call $data.GetNotificationUnreadCount -}}
{{if $activeStopwatch}}
<a class="item active-stopwatch {{$itemExtraClass}}" href="{{$activeStopwatch.IssueLink}}" title="{{ctx.Locale.Tr "active_stopwatch"}}" data-seconds="{{$activeStopwatch.Seconds}}">
<div class="tw-relative flex-text-block">
{{svg "octicon-stopwatch"}}
<span class="header-stopwatch-dot"></span>
</div>
</a>
{{end}}
{{if not ctx.Consts.RepoUnitTypeIssues.UnitGlobalDisabled}}
<a class="item {{$itemExtraClass}}" href="{{AppSubUrl}}/issues" data-tooltip-content="{{ctx.Locale.Tr "issues"}}">
{{svg "octicon-issue-opened"}}
</a>
{{end}}
{{if not ctx.Consts.RepoUnitTypePullRequests.UnitGlobalDisabled}}
<a class="item {{$itemExtraClass}}" href="{{AppSubUrl}}/pulls" data-tooltip-content="{{ctx.Locale.Tr "pull_requests"}}">
{{svg "octicon-git-pull-request"}}
</a>
{{end}}
{{if not (and ctx.Consts.RepoUnitTypeIssues.UnitGlobalDisabled ctx.Consts.RepoUnitTypePullRequests.UnitGlobalDisabled)}}
{{if .ShowMilestonesDashboardPage}}
<a class="item {{$itemExtraClass}}" href="{{AppSubUrl}}/milestones" data-tooltip-content="{{ctx.Locale.Tr "milestones"}}">
{{svg "octicon-milestone"}}
</a>
{{end}}
{{end}}
<a class="item {{$itemExtraClass}}" href="{{AppSubUrl}}/notifications" data-tooltip-content="{{ctx.Locale.Tr "notifications"}}">
<div class="tw-relative flex-text-block">
{{svg "octicon-inbox"}}
<span class="notification_count{{if not $notificationUnreadCount}} tw-hidden{{end}}">{{$notificationUnreadCount}}</span>
</div>
</a>
{{end}}
@@ -0,0 +1,15 @@
<button
type="button"
class="item ui icon mini button tw-m-0 navbar-theme-toggle"
data-current-theme="{{ctx.CurrentWebTheme.InternalName}}"
data-light-theme="github-dev"
data-dark-theme="github-dev-dark"
data-tooltip-content="{{ctx.Locale.Tr "settings.manage_themes"}}"
aria-label="{{ctx.Locale.Tr "settings.manage_themes"}}"
>
{{if eq ctx.CurrentWebTheme.InternalName "github-dev-dark"}}
{{svg "octicon-sun" 16}}
{{else}}
{{svg "octicon-moon" 16}}
{{end}}
</button>
@@ -0,0 +1,87 @@
{{/* Template attributes:
* Commit
* CommitBaseLink
* CommitSignVerification
If you'd like to modify this template, you could test it on the devtest page.
ATTENTION: this template could be re-rendered many times (on the graph and commit list page),
so this template should be kept as small as possible, DO NOT put large components like modal/dialog into it.
*/}}
{{- $commit := $.Commit -}}
{{- $commitBaseLink := $.CommitBaseLink -}}
{{- $verification := $.CommitSignVerification -}}{{- /* asymkey.CommitVerification */ -}}
{{- $extraClass := "" -}}
{{- $verified := false -}}
{{- $signingUser := NIL -}}
{{- $signingEmail := "" -}}
{{- $msgReasonPrefix := "" -}}
{{- $msgReason := "" -}}
{{- $msgSigningKey := "" -}}
{{- if $verification -}}
{{- $signingUser = $verification.SigningUser -}}
{{- $signingEmail = $verification.SigningEmail -}}
{{- $extraClass = print $extraClass " commit-is-signed" -}}
{{- if $verification.Verified -}}
{{- /* reason is "{name} / {key-id}" */ -}}
{{- $msgReason = $verification.Reason -}}
{{- $verified = true -}}
{{- if eq $verification.TrustStatus "trusted" -}}
{{- $extraClass = print $extraClass " sign-trusted" -}}
{{- else if eq $verification.TrustStatus "untrusted" -}}
{{- $extraClass = print $extraClass " sign-untrusted" -}}
{{- $msgReasonPrefix = ctx.Locale.Tr "repo.commits.signed_by_untrusted_user" -}}
{{- else -}}
{{- $extraClass = print $extraClass " sign-unmatched" -}}
{{- $msgReasonPrefix = ctx.Locale.Tr "repo.commits.signed_by_untrusted_user_unmatched" -}}
{{- end -}}
{{- else -}}
{{- if $verification.Warning -}}
{{- $extraClass = print $extraClass " sign-warning" -}}
{{- else -}}
{{- $extraClass = "" -}}{{/* the commit is not signed */}}
{{- end -}}
{{- $msgReason = ctx.Locale.Tr $verification.Reason -}}{{- /* dirty part: it is the translation key ..... */ -}}
{{- end -}}
{{- if $msgReasonPrefix -}}
{{- $msgReason = print $msgReasonPrefix ": " $msgReason -}}
{{- end -}}
{{- if $verification.SigningSSHKey -}}
{{- $msgSigningKey = print (ctx.Locale.Tr "repo.commits.ssh_key_fingerprint") ": " $verification.SigningSSHKey.Fingerprint -}}
{{- else if $verification.SigningKey -}}{{- /* asymkey.GPGKey */ -}}
{{- $msgSigningKey = print (ctx.Locale.Tr "repo.commits.gpg_key_id") ": " $verification.SigningKey.PaddedKeyID -}}
{{- end -}}
{{- end -}}
{{- if $commit -}}
<a {{if $commitBaseLink}}href="{{$commitBaseLink}}/{{$commit.ID}}"{{end}} class="ui label commit-id-short {{$extraClass}} gitea-github-theme-commit-sha" rel="nofollow">
{{- end -}}
{{- if or (not $commit) $extraClass}}{{/* only show the lock icon if there is no commit info (icon only) or the commit is really signed */}}
<span class="ui label commit-sign-badge gitea-github-theme-commit-sign-badge {{$extraClass}}">
{{- if $verified -}}
{{- if and $signingUser $signingUser.ID -}}
<span data-tooltip-content="{{$msgReason}}">
Verified
</span>
<span data-tooltip-content="{{$msgSigningKey}}">{{ctx.AvatarUtils.Avatar $signingUser 16}}</span>
{{- else -}}
<span data-tooltip-content="{{$msgReason}}">
Partially verified
</span>
<span data-tooltip-content="{{$msgSigningKey}}">{{ctx.AvatarUtils.AvatarByEmail $signingEmail "" 16}}</span>
{{- end -}}
{{- else -}}
<span data-tooltip-content="{{$msgReason}}">
Unverified
</span>
{{- end -}}
</span>
{{- end -}}
{{- if $commit -}}
<span class="gitea-github-theme-sha">{{- ShortSha $commit.ID.String -}}</span>
</a>
{{- end -}}
{{- /* This template should be kept as small as possible, DO NOT put large components like modal/dialog into it. */ -}}
@@ -0,0 +1,76 @@
<div class="ui attached table segment commit-table">
<ul class="gitea-github-theme-templates-commits-list">
{{$commitRepoLink := $.RepoLink}}{{if $.CommitRepoLink}}{{$commitRepoLink = $.CommitRepoLink}}{{end}}
{{range $commit := .Commits}}
{{$gitCommit := $commit.GitCommit}}
<li class="gitea-github-theme-commit">
{{/* 提交信息 */}}
<div class="message">
{{if $.PageIsWiki}}
<span class="commit-summary" title="{{$gitCommit.MessageTitle}}">{{$gitCommit.MessageTitle | ctx.RenderUtils.RenderEmoji}}</span>
{{else}}
{{$commitLink:= printf "%s/commit/%s" $commitRepoLink (PathEscape $gitCommit.ID.String)}}
<span class="commit-summary" title="{{$gitCommit.MessageTitle}}">{{ctx.RenderUtils.RenderCommitMessageLinkSubject $gitCommit.MessageUTF8 $commitLink $.Repository}}</span>
{{end}}
{{if $gitCommit.MessageBody}}
<button class="ui button ellipsis-button" aria-expanded="false" data-global-click="onRepoEllipsisButtonClick">{{svg "octicon-ellipsis" 16}}</button>
{{end}}
{{if $gitCommit.MessageBody}}
<pre class="commit-body tw-hidden">{{ctx.RenderUtils.RenderCommitBody $gitCommit.MessageUTF8 $.Repository}}</pre>
{{end}}
</div>
{{/* 提交者信息 */}}
<div class="metadata">
{{/* 头像 */}}
<span class="author-wrapper">
{{ctx.RenderUtils.AvatarStackWithNames $commit.AvatarStackData}}
</span>
{{/* 时间 */}}
·
{{if $gitCommit.Committer}}
{{DateUtils.TimeSince $gitCommit.Committer.When}}
{{else}}
{{DateUtils.TimeSince $gitCommit.Author.When}}
{{end}}
{{/* 状态 */}}
{{template "repo/commit_statuses" dict "Status" .Status "Statuses" .Statuses}}
</div>
{{/* 提交哈希 */}}
<div class="extra">
{{/* 标签 */}}
{{if $.CommitsTagsMap}}
{{range (index $.CommitsTagsMap $gitCommit.ID.String)}}
{{- template "repo/tag/name" dict "AdditionalClasses" "gitea-github-theme-tag" "RepoLink" $.Repository.Link "TagName" .TagName "IsRelease" (not .IsTag) -}}
{{end}}
{{end}}
{{$commitBaseLink := ""}}
{{if $.PageIsWiki}}
{{$commitBaseLink = printf "%s/wiki/commit" $commitRepoLink}}
{{else if $.PageIsPullCommits}}
{{$commitBaseLink = printf "%s/pulls/%d/commits" $commitRepoLink $.Issue.Index}}
{{else}}
{{$commitBaseLink = printf "%s/commit" $commitRepoLink}}
{{end}}
{{template "repo/commit_sign_badge" dict "Commit" $gitCommit "CommitBaseLink" $commitBaseLink "CommitSignVerification" .Verification}}
</div>
{{/* 操作 */}}
<div class="actions">
<button class="btn interact-bg copy-commit-id gitea-github-theme-action" data-tooltip-content="{{ctx.Locale.Tr "copy_hash"}}" data-clipboard-text="{{$gitCommit.ID}}">{{svg "octicon-copy"}}</button>
{{/* at the moment, wiki doesn't support these "view" links like "view at history point" */}}
{{if not $.PageIsWiki}}
{{/* view single file diff */}}
{{if $.FileTreePath}}
<a class="btn interact-bg view-single-diff gitea-github-theme-action" data-tooltip-content="{{ctx.Locale.Tr "repo.commits.view_file_diff"}}"
href="{{$commitRepoLink}}/commit/{{$gitCommit.ID.String}}?files={{$.FileTreePath}}"
>{{svg "octicon-file-diff"}}</a>
{{end}}
{{/* view at history point */}}
{{$viewCommitLink := printf "%s/src/commit/%s" $commitRepoLink (PathEscape $gitCommit.ID.String)}}
{{if $.FileTreePath}}{{$viewCommitLink = printf "%s/%s" $viewCommitLink (PathEscapeSegments $.FileTreePath)}}{{end}}
<a class="btn interact-bg view-commit-path gitea-github-theme-action" data-tooltip-content="{{ctx.Locale.Tr "repo.commits.view_path"}}" href="{{$viewCommitLink}}">{{svg "octicon-code"}}</a>
{{end}}
</div>
</li>
{{end}}
</ul>
</div>
@@ -0,0 +1,138 @@
{{$isTreePathRoot := not .TreeNames}}
<div class="repo-view-content-data tw-hidden" data-document-title="{{ctx.RootData.Title}}" data-document-title-common="{{ctx.RootData.PageTitleCommon}}"></div>
{{/* {{template "repo/sub_menu" .}} */}}
<div class="gitea-github-theme-templates repo-button-row">
<div class="repo-button-row-left">
{{if not $isTreePathRoot}}
{{template "repo/view_file_tree_toggle_button" .}}
{{end}}
{{template "repo/branch_dropdown" dict
"Repository" .Repository
"ShowTabBranches" true
"ShowTabTags" true
"CurrentRefType" .RefFullName.RefType
"CurrentRefShortName" .RefFullName.ShortName
"CurrentTreePath" .TreePath
"RefLinkTemplate" "{RepoLink}/src/{RefType}/{RefShortName}/{TreePath}"
"AllowCreateNewRef" .CanCreateBranch
"ShowViewAllRefsEntry" true
}}
{{/* 移除 PR 按钮 */}}
{{/* 替换 分支/标签 按钮栏 */}}
{{if and $isTreePathRoot (.Permission.CanRead ctx.Consts.RepoUnitTypeCode) (not .IsEmptyRepo)}}
<div class="repository-summary">
<a class="item muted" href="{{.RepoLink}}/branches">
{{svg "octicon-git-branch"}} <b>{{ctx.Locale.PrettyNumber .BranchesCount}}</b> {{ctx.Locale.TrN .BranchesCount "repo.branch" "repo.branches"}}
</a>
{{if $.Permission.CanRead ctx.Consts.RepoUnitTypeCode}}
<a class="item muted" href="{{.RepoLink}}/tags">
{{svg "octicon-tag"}} <b>{{ctx.Locale.PrettyNumber .NumTags}}</b> {{ctx.Locale.TrN .NumTags "repo.tag" "repo.tags"}}
</a>
{{end}}
</div>
{{end}}
{{if not $isTreePathRoot}}
{{$treeNameIdxLast := Eval (len .TreeNames) "-" 1}}
<span class="breadcrumb">
<a class="section" href="{{.RepoLink}}/src/{{.RefTypeNameSubURL}}" title="{{.Repository.Name}}">{{StringUtils.EllipsisString .Repository.Name 30}}</a>
{{- range $i, $v := .TreeNames -}}
<span class="breadcrumb-divider">/</span>
{{- if eq $i $treeNameIdxLast -}}
<span class="active section" title="{{$v}}">{{$v}}</span>
<button class="btn interact-fg tw-mx-1" data-clipboard-text="{{$.TreePath}}" data-tooltip-content="{{ctx.Locale.Tr "copy_path"}}">{{svg "octicon-copy" 14}}</button>
{{- else -}}
{{$p := index $.Paths $i}}<span class="section"><a href="{{$.BranchLink}}/{{PathEscapeSegments $p}}" title="{{$v}}">{{$v}}</a></span>
{{- end -}}
{{- end -}}
</span>
{{end}}
</div>
<div class="repo-button-row-right">
<div class="repo-file-search-container"
data-global-init="initRepoFileSearch"
data-repo-link="{{.RepoLink}}"
data-current-ref-name-sub-url="{{.RefTypeNameSubURL}}"
data-tree-list-url="{{.RepoLink}}/tree-list/{{.RefTypeNameSubURL}}"
data-no-results-text="{{ctx.Locale.Tr "repo.find_file.no_matching"}}"
data-placeholder="{{ctx.Locale.Tr "repo.find_file.go_to_file"}}"
><div class="ui small input global-shortcut-wrapper"><input placeholder="{{ctx.Locale.Tr "repo.find_file.go_to_file"}}"><kbd>T</kbd></div></div>
{{if .RefFullName.IsBranch}}
{{$addFilePath := .TreePath}}
{{if .IsViewFile}}
{{if gt (len .TreeNames) 1}}
{{$addFilePath = StringUtils.Join (slice .TreeNames 0 (Eval (len .TreeNames) "-" 1)) "/"}}
{{else}}
{{$addFilePath = ""}}
{{end}}
{{end}}
<button class="ui dropdown basic compact jump button repo-add-file" {{if not .Repository.CanEnableEditor}}disabled{{end}}>
{{ctx.Locale.Tr "repo.editor.add_file"}}
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
<div class="menu">
<a class="item" href="{{.RepoLink}}/_new/{{.BranchName | PathEscapeSegments}}/{{$addFilePath | PathEscapeSegments}}">
{{svg "octicon-plus" 16}}{{ctx.Locale.Tr "repo.editor.new_file"}}
</a>
{{if .RepositoryUploadEnabled}}
<a class="item" href="{{.RepoLink}}/_upload/{{.BranchName | PathEscapeSegments}}/{{$addFilePath | PathEscapeSegments}}">
{{svg "octicon-upload" 16}}{{ctx.Locale.Tr "repo.editor.upload_file"}}
</a>
{{end}}
<a class="item" href="{{.RepoLink}}/_diffpatch/{{.BranchName | PathEscapeSegments}}/{{$addFilePath | PathEscapeSegments}}">
{{svg "octicon-diff" 16}}{{ctx.Locale.Tr "repo.editor.patch"}}
</a>
</div>
</button>
{{if and (not .IsViewFile) (not $isTreePathRoot)}}
<button class="ui dropdown basic compact jump button tw-px-3" data-tooltip-content="{{ctx.Locale.Tr "repo.more_operations"}}">
{{svg "octicon-kebab-horizontal"}}
<div class="menu">
<a class="item" data-clipboard-text="{{.Repository.Link}}/src/commit/{{.CommitID}}/{{PathEscapeSegments .TreePath}}" data-clipboard-text-type="url">
{{svg "octicon-link" 16}}{{ctx.Locale.Tr "repo.file_copy_permalink"}}
</a>
{{if and (not $.DisableDownloadSourceArchives) $.RefFullName}}
<div class="divider"></div>
<a class="item muted archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.RefFullName.ShortName}}.zip?path={{PathEscapeSegments .TreePath}}" rel="nofollow">{{svg "octicon-file-zip"}}{{ctx.Locale.Tr "repo.download_directory_as" "ZIP"}}</a>
<a class="item muted archive-link" href="{{$.RepoLink}}/archive/{{PathEscapeSegments $.RefFullName.ShortName}}.tar.gz?path={{PathEscapeSegments .TreePath}}" rel="nofollow">{{svg "octicon-file-zip"}}{{ctx.Locale.Tr "repo.download_directory_as" "TAR.GZ"}}</a>
{{end}}
{{if and .Repository.CanContentChange (not $isTreePathRoot)}}
<div class="divider"></div>
<a class="item tw-text-danger" href="{{.RepoLink}}/_delete/{{.BranchName | PathEscapeSegments}}/{{.TreePath | PathEscapeSegments}}">
{{svg "octicon-trash" 16}}{{ctx.Locale.Tr "repo.editor.delete_this_directory"}}
</a>
{{end}}
</div>
</button>
{{end}}
{{end}}
{{/* 忘了什么按钮, 当初放到这块了 */}}
{{if and $isTreePathRoot .Repository.IsTemplate}}
<a role="button" class="ui primary compact button" href="{{AppSubUrl}}/repo/create?template_id={{.Repository.ID}}">
{{ctx.Locale.Tr "repo.use_template"}}
</a>
{{end}}
<!-- Only show clone panel in repository home page -->
{{if $isTreePathRoot}}
{{template "repo/clone_panel" .}}
{{end}}
{{/* 文件历史按钮已移走, 这里删除 */}}
</div>
</div>
{{if .IsViewFile}}
{{template "repo/view_file" .}}
{{else if .IsBlame}}
{{template "repo/blame" .}}
{{else}}{{/* IsViewDirectory */}}
{{if $isTreePathRoot}}
{{template "repo/code/upstream_diverging_info" .}}
{{end}}
{{template "repo/view_list" .}}
{{if and .ReadmeExist (or .RenderAsMarkup .IsPlainText)}}
{{template "repo/view_file" .}}
{{end}}
{{end}}
@@ -0,0 +1,79 @@
{{/* use grid layout, still use the old ID because there are many other CSS styles depending on this ID */}}
<div id="repo-files-table" {{if .HasFilesWithoutLatestCommit}}data-fetch-url="{{.LastCommitLoaderURL}}" data-fetch-trigger="load" data-fetch-sync="$morph" data-fetch-indicator=".repo-file-cell.notready.message"{{end}}>
<div class="gitea-github-theme-templates repo-file-line repo-file-last-commit">
{{template "repo/latest_commit" .}}
<div class="gitea-github-theme-latest-time">
{{if and .LatestCommit .LatestCommit.Committer}}
<a href="{{ (print .RepoLink "/commit") }}/{{.LatestCommit.ID}}" class="muted" rel="nofollow">
{{- ShortSha .LatestCommit.ID.String -}}
</a>
·
{{DateUtils.TimeSince .LatestCommit.Committer.When}}
{{end}}
</div>
{{if and (not .TreeNames) (.Permission.CanRead ctx.Consts.RepoUnitTypeCode) (not .IsEmptyRepo)}}
<a class="gitea-github-theme-latest-commit item muted" href="{{.RepoLink}}/commits/{{.RefFullName.RefWebLinkPath}}">
{{svg "octicon-history" 16}} <b>{{ctx.Locale.PrettyNumber .CommitsCount}}</b> {{ctx.Locale.TrN .CommitsCount "repo.commit" "repo.commits"}}
</a>
{{end}}
{{if and .TreeNames (not .IsViewFile) (not .IsBlame)}}{{/* IsViewDirectory (not home), TODO: split the templates, avoid using "if" tricks */}}
<a class="gitea-github-theme-latest-commit item muted" href="{{.RepoLink}}/commits/{{.RefTypeNameSubURL}}/{{.TreePath | PathEscapeSegments}}">
{{svg "octicon-history" 16}}{{ctx.Locale.Tr "repo.file_history"}}
</a>
{{end}}
</div>
{{$.FileIconPoolHTML}}
{{if .HasParentPath}}
<a class="repo-file-line parent-link silenced" href="{{.BranchLink}}{{if .ParentPath}}{{PathEscapeSegments .ParentPath}}{{end}}">
{{index $.FileIcons ".."}} ..
</a>
{{end}}
{{range $item := .Files}}
<div class="repo-file-item">
{{$entry := $item.Entry}}
{{$commit := $item.Commit}}
{{$submoduleFile := $item.SubmoduleFile}}
<div class="repo-file-cell name muted-links {{if not $commit}}notready{{end}}">
{{index $.FileIcons $entry.Name}}
{{if $entry.IsSubModule}}
{{$submoduleLink := $submoduleFile.SubmoduleWebLinkTree ctx}}
{{if $submoduleLink}}
<a class="entry-name" href="{{$submoduleLink.RepoWebLink}}" title="{{$entry.Name}}">{{$entry.Name}}</a>
@ <a class="tw-text-primary" href="{{$submoduleLink.CommitWebLink}}">{{ShortSha $submoduleFile.RefID}}</a>
{{else}}
<span class="entry-name" title="{{$entry.Name}}">{{$entry.Name}}</span>
@ {{ShortSha $submoduleFile.RefID}}
{{end}}
{{else}}
{{if $entry.IsDir}}
{{$subJumpablePathName := $entry.GetSubJumpablePathName}}
<a class="entry-name" href="{{$.TreeLink}}/{{PathEscapeSegments $subJumpablePathName}}" title="{{$subJumpablePathName}}">
{{$subJumpablePathFields := StringUtils.Split $subJumpablePathName "/"}}
{{$subJumpablePathFieldLast := (Eval (len $subJumpablePathFields) "-" 1)}}
{{if eq $subJumpablePathFieldLast 0}}
{{$subJumpablePathName}}
{{else}}
{{$subJumpablePathPrefixes := slice $subJumpablePathFields 0 $subJumpablePathFieldLast}}
<span class="tw-text-text-light-2">{{StringUtils.Join $subJumpablePathPrefixes "/"}}</span>/{{index $subJumpablePathFields $subJumpablePathFieldLast}}
{{end}}
</a>
{{else}}
<a class="entry-name" href="{{$.TreeLink}}/{{PathEscapeSegments $entry.Name}}" title="{{$entry.Name}}">{{$entry.Name}}</a>
{{if $entry.IsLink}}
<a class="entry-symbol-link flex-text-inline" data-tooltip-content title="{{ctx.Locale.Tr "repo.find_file.follow_symlink"}}" href="{{$.TreeLink}}/{{PathEscapeSegments $entry.Name}}?follow_symlink=1">{{svg "octicon-link" 12}}</a>
{{end}}
{{end}}
{{end}}
</div>
<div class="repo-file-cell message commit-summary loading-icon-2px {{if not $commit}}notready{{end}}">
{{if $commit}}
{{$commitLink := printf "%s/commit/%s" $.RepoLink (PathEscape $commit.ID.String)}}
{{ctx.RenderUtils.RenderCommitMessageLinkSubject $commit.MessageUTF8 $commitLink $.Repository}}
{{else}}
… {{/* will be loaded again by LastCommitLoaderURL */}}
{{end}}
</div>
<div class="repo-file-cell age">{{if $commit}}{{DateUtils.TimeSince $commit.Committer.When}}{{end}}</div>
</div>
{{end}}
</div>
+12
View File
@@ -0,0 +1,12 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler",
"types": ["bun"],
"strict": true,
"noEmit": true,
"skipLibCheck": true
},
"include": ["build.ts"]
}