diff --git a/README.md b/README.md
index 19703d85dd..fa21427674 100644
--- a/README.md
+++ b/README.md
@@ -1,180 +1,47 @@
-
-
-
-
-
-Gitea - Git with a cup of tea
+
+
+
Welcome to Forgejo
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+Hi there! Tired of big platforms playing monopoly?
+Providing Git hosting for your project, friends, company or community?
+**Forgejo** (/for'd͡ʒe.jo/ inspired by forĝejo – the Esperanto word for *forge*) has you covered with its intuitive interface,
+light and easy hosting and a lot of builtin functionality.
-
- View this document in Chinese
-
+Forgejo was [created in 2022](https://forgejo.org/2022-12-15-hello-forgejo/)
+because we think that the project should be owned by an independent community.
+If you second that, then Forgejo is for you!
+Our promise: **Independent Free/Libre Software forever!**
-## Purpose
+## What does Forgejo offer?
-The goal of this project is to make the easiest, fastest, and most
-painless way of setting up a self-hosted Git service.
+
-As Gitea is written in Go, it works across **all** the platforms and
-architectures that are supported by Go, including Linux, macOS, and
-Windows on x86, amd64, ARM and PowerPC architectures.
-You can try it out using [the online demo](https://try.gitea.io/).
-This project has been
-[forked](https://blog.gitea.io/2016/12/welcome-to-gitea/) from
-[Gogs](https://gogs.io) since November of 2016, but a lot has changed.
+If you like any of the following, Forgejo is literally meant for you:
-## Building
+- Lightweight: Forgejo can easily be hosted on nearly **every machine**.
+ Running on a Raspberry? Small cloud instance? No problem!
+- Project management: Besides Git hosting, Forgejo offers issues,
+ pull requests, wikis, kanban boards and much more to **coordinate with your team**.
+- Publishing: Have something to share? Use **releases** to host your software for download,
+ or use the **package registry** to publish it for docker, npm and many other package managers.
+- Customizable: Want to change your look? Change some settings?
+ There are many **config switches** to make Forgejo work exactly like you want.
+- Powerful: Organizations & team permissions, CI integration, Code Search, LDAP, OAuth and much more.
+ If you have **advanced needs**, Forgejo has you covered.
+- Privacy: From update checker to default settings: Forgejo is built to be **privacy first** for you and your crew.
+- Federation: (WIP) We are actively working to connect software forges with each other through **ActivityPub**,
+ and create a collaborative network of personal instances.
+ Interested? [Read more](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/CONTRIBUTING/WORKFLOW.md#federation-https-codeberg-org-forgejo-forgejo-issues-labels-79349)
-From the root of the source tree, run:
+## Learn more
- TAGS="bindata" make build
+Subscribe to releases and blog post on [our website](https://forgejo.org), find us on the Fediverse or hop into [our Matrix room](https://matrix.to/#/#forgejo-chat:matrix.org) if you have any questions or want to get involved.
-or if SQLite support is required:
- TAGS="bindata sqlite sqlite_unlock_notify" make build
+## Get involved
-The `build` target is split into two sub-targets:
-
-- `make backend` which requires [Go Stable](https://go.dev/dl/), required version is defined in [go.mod](/go.mod).
-- `make frontend` which requires [Node.js LTS](https://nodejs.org/en/download/) or greater and Internet connectivity to download npm dependencies.
-
-When building from the official source tarballs which include pre-built frontend files, the `frontend` target will not be triggered, making it possible to build without Node.js and Internet connectivity.
-
-Parallelism (`make -j `) is not supported.
-
-More info: https://docs.gitea.io/en-us/install-from-source/
-
-## Using
-
- ./gitea web
-
-NOTE: If you're interested in using our APIs, we have experimental
-support with [documentation](https://try.gitea.io/api/swagger).
-
-## Contributing
-
-Expected workflow is: Fork -> Patch -> Push -> Pull Request
-
-NOTES:
-
-1. **YOU MUST READ THE [CONTRIBUTORS GUIDE](CONTRIBUTING.md) BEFORE STARTING TO WORK ON A PULL REQUEST.**
-2. If you have found a vulnerability in the project, please write privately to **security@gitea.io**. Thanks!
-
-## Translating
-
-Translations are done through Crowdin. If you want to translate to a new language ask one of the managers in the Crowdin project to add a new language there.
-
-You can also just create an issue for adding a language or ask on discord on the #translation channel. If you need context or find some translation issues, you can leave a comment on the string or ask on Discord. For general translation questions there is a section in the docs. Currently a bit empty but we hope to fill it as questions pop up.
-
-https://docs.gitea.io/en-us/translation-guidelines/
-
-[![Crowdin](https://badges.crowdin.net/gitea/localized.svg)](https://crowdin.com/project/gitea)
-
-## Further information
-
-For more information and instructions about how to install Gitea, please look at our [documentation](https://docs.gitea.io/en-us/).
-If you have questions that are not covered by the documentation, you can get in contact with us on our [Discord server](https://discord.gg/Gitea) or create a post in the [discourse forum](https://discourse.gitea.io/).
-
-We maintain a list of Gitea-related projects at [gitea/awesome-gitea](https://gitea.com/gitea/awesome-gitea).
-
-The Hugo-based documentation theme is hosted at [gitea/theme](https://gitea.com/gitea/theme).
-
-The official Gitea CLI is developed at [gitea/tea](https://gitea.com/gitea/tea).
-
-## Authors
-
-- [Maintainers](https://github.com/orgs/go-gitea/people)
-- [Contributors](https://github.com/go-gitea/gitea/graphs/contributors)
-- [Translators](options/locale/TRANSLATORS)
-
-## Backers
-
-Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/gitea#backer)]
-
-
-
-## Sponsors
-
-Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/gitea#sponsor)]
-
-
-
-
-
-
-
-
-
-
-
-
-
-## FAQ
-
-**How do you pronounce Gitea?**
-
-Gitea is pronounced [/ɡɪ’ti:/](https://youtu.be/EM71-2uDAoY) as in "gi-tea" with a hard g.
-
-**Why is this not hosted on a Gitea instance?**
-
-We're [working on it](https://github.com/go-gitea/gitea/issues/1029).
-
-## License
-
-This project is licensed under the MIT License.
-See the [LICENSE](https://github.com/go-gitea/gitea/blob/main/LICENSE) file
-for the full license text.
-
-## Screenshots
-
-Looking for an overview of the interface? Check it out!
-
-|![Dashboard](https://dl.gitea.io/screenshots/home_timeline.png)|![User Profile](https://dl.gitea.io/screenshots/user_profile.png)|![Global Issues](https://dl.gitea.io/screenshots/global_issues.png)|
-|:---:|:---:|:---:|
-|![Branches](https://dl.gitea.io/screenshots/branches.png)|![Web Editor](https://dl.gitea.io/screenshots/web_editor.png)|![Activity](https://dl.gitea.io/screenshots/activity.png)|
-|![New Migration](https://dl.gitea.io/screenshots/migration.png)|![Migrating](https://dl.gitea.io/screenshots/migration.gif)|![Pull Request View](https://image.ibb.co/e02dSb/6.png)
-![Pull Request Dark](https://dl.gitea.io/screenshots/pull_requests_dark.png)|![Diff Review Dark](https://dl.gitea.io/screenshots/review_dark.png)|![Diff Dark](https://dl.gitea.io/screenshots/diff_dark.png)|
+If you are interested in making Forgejo better, either by reporting a bug or by changing the governance, please [take a look at the contribution guide](CONTRIBUTING.md).
diff --git a/assets/favicon.svg b/assets/favicon.svg
index 9df6b83b56..bcacdc0200 100644
--- a/assets/favicon.svg
+++ b/assets/favicon.svg
@@ -1,31 +1,27 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/assets/logo.svg b/assets/logo.svg
index 9df6b83b56..bcacdc0200 100644
--- a/assets/logo.svg
+++ b/assets/logo.svg
@@ -1,31 +1,27 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/docker/root/etc/s6/gitea/setup b/docker/root/etc/s6/gitea/setup
index d8f6a3b319..958d50a798 100755
--- a/docker/root/etc/s6/gitea/setup
+++ b/docker/root/etc/s6/gitea/setup
@@ -24,7 +24,7 @@ if [ ! -f ${GITEA_CUSTOM}/conf/app.ini ]; then
fi
# Substitute the environment variables in the template
- APP_NAME=${APP_NAME:-"Gitea: Git with a cup of tea"} \
+ APP_NAME=${APP_NAME:-"Forgejo: Beyond coding. We forge."} \
RUN_MODE=${RUN_MODE:-"prod"} \
DOMAIN=${DOMAIN:-"localhost"} \
SSH_DOMAIN=${SSH_DOMAIN:-"localhost"} \
diff --git a/docker/rootless/usr/local/bin/docker-setup.sh b/docker/rootless/usr/local/bin/docker-setup.sh
index feab02a379..b480685863 100755
--- a/docker/rootless/usr/local/bin/docker-setup.sh
+++ b/docker/rootless/usr/local/bin/docker-setup.sh
@@ -26,7 +26,7 @@ if [ ! -f ${GITEA_APP_INI} ]; then
fi
# Substitute the environment variables in the template
- APP_NAME=${APP_NAME:-"Gitea: Git with a cup of tea"} \
+ APP_NAME=${APP_NAME:-"Forgejo: Beyond coding. We forge."} \
RUN_MODE=${RUN_MODE:-"prod"} \
RUN_USER=${USER:-"git"} \
SSH_DOMAIN=${SSH_DOMAIN:-"localhost"} \
diff --git a/modules/setting/repository.go b/modules/setting/repository.go
index 0947cc00cf..b6aa89909a 100644
--- a/modules/setting/repository.go
+++ b/modules/setting/repository.go
@@ -276,7 +276,7 @@ func newRepository() {
Repository.UseCompatSSHURI = sec.Key("USE_COMPAT_SSH_URI").MustBool()
Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1)
Repository.DefaultBranch = sec.Key("DEFAULT_BRANCH").MustString(Repository.DefaultBranch)
- RepoRootPath = sec.Key("ROOT").MustString(path.Join(AppDataPath, "gitea-repositories"))
+ RepoRootPath = sec.Key("ROOT").MustString(path.Join(AppDataPath, "forgejo-repositories"))
forcePathSeparator(RepoRootPath)
if !filepath.IsAbs(RepoRootPath) {
RepoRootPath = filepath.Join(AppWorkPath, RepoRootPath)
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index 3897b9c56b..cecf25fef6 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -286,11 +286,11 @@ var (
ReactionMaxUserNum: 10,
ThemeColorMetaTag: `#6cc644`,
MaxDisplayFileSize: 8388608,
- DefaultTheme: `auto`,
- Themes: []string{`auto`, `gitea`, `arc-green`},
+ DefaultTheme: `forgejo-auto`,
+ Themes: []string{`forgejo-auto`, `forgejo-light`, `forgejo-dark`, `auto`, `gitea`, `arc-green`},
Reactions: []string{`+1`, `-1`, `laugh`, `hooray`, `confused`, `heart`, `rocket`, `eyes`},
- CustomEmojis: []string{`git`, `gitea`, `codeberg`, `gitlab`, `github`, `gogs`},
- CustomEmojisMap: map[string]string{"git": ":git:", "gitea": ":gitea:", "codeberg": ":codeberg:", "gitlab": ":gitlab:", "github": ":github:", "gogs": ":gogs:"},
+ CustomEmojis: []string{`git`, `gitea`, `codeberg`, `gitlab`, `github`, `gogs`, `forgejo`},
+ CustomEmojisMap: map[string]string{"git": ":git:", "gitea": ":gitea:", "codeberg": ":codeberg:", "gitlab": ":gitlab:", "github": ":github:", "gogs": ":gogs:", "forgejo": ":forgejo:"},
Notification: struct {
MinTimeout time.Duration
TimeoutStep time.Duration
@@ -333,9 +333,9 @@ var (
Description string
Keywords string
}{
- Author: "Gitea - Git with a cup of tea",
- Description: "Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go",
- Keywords: "go,git,self-hosted,gitea",
+ Author: "Forgejo – Beyond coding. We forge.",
+ Description: "Forgejo is a self-hosted lightweight software forge. Easy to install and low maintenance, it just does the job.",
+ Keywords: "git,forge,forgejo",
},
}
@@ -662,7 +662,7 @@ func loadFromConf(allowEmpty bool, extraConfig string) {
forcePathSeparator(LogRootPath)
sec := Cfg.Section("server")
- AppName = Cfg.Section("").Key("APP_NAME").MustString("Gitea: Git with a cup of tea")
+ AppName = Cfg.Section("").Key("APP_NAME").MustString("Forgejo: Beyond coding. We Forge.")
Domain = sec.Key("DOMAIN").MustString("localhost")
HTTPAddr = sec.Key("HTTP_ADDR").MustString("0.0.0.0")
diff --git a/public/img/apple-touch-icon.png b/public/img/apple-touch-icon.png
index 0c803d35dc..1f6c1544f8 100644
Binary files a/public/img/apple-touch-icon.png and b/public/img/apple-touch-icon.png differ
diff --git a/public/img/avatar_default.png b/public/img/avatar_default.png
index 129967112d..f335e51dad 100644
Binary files a/public/img/avatar_default.png and b/public/img/avatar_default.png differ
diff --git a/public/img/emoji/forgejo.png b/public/img/emoji/forgejo.png
new file mode 100644
index 0000000000..f335e51dad
Binary files /dev/null and b/public/img/emoji/forgejo.png differ
diff --git a/public/img/failed.png b/public/img/failed.png
deleted file mode 100644
index b37545f90c..0000000000
Binary files a/public/img/failed.png and /dev/null differ
diff --git a/public/img/favicon.png b/public/img/favicon.png
index dcd4edb1a3..eda0347eff 100644
Binary files a/public/img/favicon.png and b/public/img/favicon.png differ
diff --git a/public/img/favicon.svg b/public/img/favicon.svg
index afeeacb77c..804b05e284 100644
--- a/public/img/favicon.svg
+++ b/public/img/favicon.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/img/forgejo-loading.svg b/public/img/forgejo-loading.svg
new file mode 100644
index 0000000000..919552ebb5
--- /dev/null
+++ b/public/img/forgejo-loading.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/img/gitea.svg b/public/img/gitea.svg
index dca9b4f4db..804b05e284 100644
--- a/public/img/gitea.svg
+++ b/public/img/gitea.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/img/loading.png b/public/img/loading.png
deleted file mode 100644
index c5ba3d9cd7..0000000000
Binary files a/public/img/loading.png and /dev/null differ
diff --git a/public/img/logo.png b/public/img/logo.png
index c7971f9183..1b2d9b4023 100644
Binary files a/public/img/logo.png and b/public/img/logo.png differ
diff --git a/public/img/logo.svg b/public/img/logo.svg
index afeeacb77c..804b05e284 100644
--- a/public/img/logo.svg
+++ b/public/img/logo.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/templates/base/footer_content.tmpl b/templates/base/footer_content.tmpl
index 89be609225..81505c43dc 100644
--- a/templates/base/footer_content.tmpl
+++ b/templates/base/footer_content.tmpl
@@ -1,7 +1,7 @@
-
+
{{template "base/footer" .}}
diff --git a/templates/post-install.tmpl b/templates/post-install.tmpl
index 4abfe171dd..134c8bcf37 100644
--- a/templates/post-install.tmpl
+++ b/templates/post-install.tmpl
@@ -7,7 +7,7 @@
-
+
diff --git a/templates/repo/migrate/migrating.tmpl b/templates/repo/migrate/migrating.tmpl
index c06f4b5729..3c729b7750 100644
--- a/templates/repo/migrate/migrating.tmpl
+++ b/templates/repo/migrate/migrating.tmpl
@@ -9,12 +9,12 @@
-
+
-
+
{{svg "octicon-git-pull-request-closed" 256 "ui red icon"}}
diff --git a/web_src/js/features/install.js b/web_src/js/features/install.js
index 9468ba9c42..51255fd99a 100644
--- a/web_src/js/features/install.js
+++ b/web_src/js/features/install.js
@@ -5,8 +5,8 @@ export function initInstall() {
return;
}
- const defaultDbUser = 'gitea';
- const defaultDbName = 'gitea';
+ const defaultDbUser = 'forgejo';
+ const defaultDbName = 'forgejo';
const defaultDbHosts = {
mysql: '127.0.0.1:3306',
diff --git a/web_src/less/_home.less b/web_src/less/_home.less
index fb31bedfa9..fb6b2d2a35 100644
--- a/web_src/less/_home.less
+++ b/web_src/less/_home.less
@@ -25,7 +25,7 @@
}
.svg {
- color: var(--color-green);
+ color: var(--color-primary);
height: 40px;
width: 50px;
vertical-align: bottom;
@@ -45,7 +45,7 @@
}
a {
- color: var(--color-green);
+ color: var(--color-primary);
}
}
diff --git a/web_src/less/themes/theme-forgejo-auto.less b/web_src/less/themes/theme-forgejo-auto.less
new file mode 100644
index 0000000000..903b4eae8e
--- /dev/null
+++ b/web_src/less/themes/theme-forgejo-auto.less
@@ -0,0 +1,5 @@
+@import "theme-forgejo-light.less";
+
+@media (prefers-color-scheme: dark) {
+ @import "theme-forgejo-dark.less";
+}
diff --git a/web_src/less/themes/theme-forgejo-dark.less b/web_src/less/themes/theme-forgejo-dark.less
new file mode 100644
index 0000000000..6c5b872edf
--- /dev/null
+++ b/web_src/less/themes/theme-forgejo-dark.less
@@ -0,0 +1,286 @@
+@import "../chroma/dark.less";
+@import "../codemirror/dark.less";
+
+:root {
+ --steel-900: #10161D;
+ --steel-850: #131A21;
+ --steel-800: #171E26;
+ --steel-750: #1D262F;
+ --steel-700: #242D38;
+ --steel-650: #2B3642;
+ --steel-600: #374351;
+ --steel-550: #445161;
+ --steel-500: #515F70;
+ --steel-450: #5F6E80;
+ --steel-400: #6D7D8F;
+ --steel-350: #7C8C9F;
+ --steel-300: #8C9CAF;
+ --steel-250: #9DADC0;
+ --steel-200: #AEBED0;
+ --steel-150: #C0CFE0;
+ --steel-100: #D2E0F0;
+
+ --is-dark-theme: true;
+ --color-primary: #fb923c;
+ --color-primary-contrast: #000;
+ --color-primary-dark-1: #fdba74;
+ --color-primary-dark-2: #fdba74;
+ --color-primary-dark-3: #fed7aa;
+ --color-primary-dark-4: #fed7aa;
+ --color-primary-dark-5: #ffedd5;
+ --color-primary-dark-6: #ffedd5;
+ --color-primary-dark-7: #fff7ed;
+ --color-primary-light-1: #f97316;
+ --color-primary-light-2: #ea580c;
+ --color-primary-light-3: #c2410c;
+ --color-primary-light-4: #9a3412;
+ --color-primary-light-5: #9a3412;
+ --color-primary-light-6: #7c2d12;
+ --color-primary-light-7: #7c2d12;
+ --color-primary-alpha-10: #ea580c19;
+ --color-primary-alpha-20: #ea580c33;
+ --color-primary-alpha-30: #ea580c4b;
+ --color-primary-alpha-40: #ea580c66;
+ --color-primary-alpha-50: #ea580c80;
+ --color-primary-alpha-60: #ea580c99;
+ --color-primary-alpha-70: #ea580cb3;
+ --color-primary-alpha-80: #ea580ccc;
+ --color-primary-alpha-90: #ea580ce1;
+ --color-secondary: var(--steel-700);
+ --color-secondary-dark-1: var(--steel-550);
+ --color-secondary-dark-2: var(--steel-500);
+ --color-secondary-dark-3: var(--steel-450);
+ --color-secondary-dark-4: var(--steel-400);
+ --color-secondary-dark-5: var(--steel-350);
+ --color-secondary-dark-6: var(--steel-300);
+ --color-secondary-dark-7: var(--steel-250);
+ --color-secondary-dark-8: var(--steel-200);
+ --color-secondary-dark-9: var(--steel-150);
+ --color-secondary-dark-10: var(--steel-100);
+ --color-secondary-dark-11: var(--steel-100);
+ --color-secondary-dark-12: var(--steel-100);
+ --color-secondary-dark-13: var(--steel-100);
+ --color-secondary-light-1: var(--steel-650);
+ --color-secondary-light-2: var(--steel-700);
+ --color-secondary-light-3: var(--steel-750);
+ --color-secondary-light-4: var(--steel-800);
+ --color-secondary-alpha-10: #2B364219;
+ --color-secondary-alpha-20: #2B364233;
+ --color-secondary-alpha-30: #2B36424b;
+ --color-secondary-alpha-40: #2B364266;
+ --color-secondary-alpha-50: #2B364280;
+ --color-secondary-alpha-60: #2B364299;
+ --color-secondary-alpha-70: #2B3642b3;
+ --color-secondary-alpha-80: #2B3642cc;
+ --color-secondary-alpha-90: #2B3642e1;
+
+ /* colors */
+ --color-red: #b91c1c;
+ --color-orange: #ea580c;
+ --color-yellow: #ca8a04;
+ --color-olive: #91a313;
+ --color-green: #15803d;
+ --color-teal: #0d9488;
+ --color-blue: #2563eb;
+ --color-violet: #7c3aed;
+ --color-purple: #9333ea;
+ --color-pink: #db2777;
+ --color-brown: #a47252;
+ --color-grey: var(--steel-500);
+ --color-black: #111827;
+
+ /* light variants */
+ --color-red-light: #dc2626;
+ --color-orange-light: #f97316;
+ --color-yellow-light: #eab308;
+ --color-olive-light: #839311;
+ --color-green-light: #16a34a;
+ --color-teal-light: #14b8a6;
+ --color-blue-light: #3b82f6;
+ --color-violet-light: #8b5cf6;
+ --color-purple-light: #a855f7;
+ --color-pink-light: #ec4899;
+ --color-brown-light: #94674a;
+ --color-grey-light: var(--steel-300);
+ --color-black-light: #1f2937;
+
+ /* other colors */
+ --color-gold: #b1983b;
+ --color-white: #ffffff;
+ --color-diff-removed-word-bg: #783030;
+ --color-diff-added-word-bg: #255C39;
+ --color-diff-removed-row-bg: #432121;
+ --color-diff-moved-row-bg: #825718;
+ --color-diff-added-row-bg: #1B3625;
+ --color-diff-removed-row-border: #783030;
+ --color-diff-moved-row-border: #A67A1D;
+ --color-diff-added-row-border: #255C39;
+ --color-diff-inactive: var(--steel-650);
+ --color-error-border: #783030;
+ --color-error-bg: #5F2525;
+ --color-error-bg-active: #783030;
+ --color-error-bg-hover: #783030;
+ --color-error-text: #fef2f2;
+ --color-success-border: #1F6E3C;
+ --color-success-bg: #1D462C;
+ --color-success-text: #f0fdf4;
+ --color-warning-border: #A67A1D;
+ --color-warning-bg: #644821;
+ --color-warning-text: #fefce8;
+ --color-info-border: #2E50B0;
+ --color-info-bg: #2A396B;
+ --color-info-text: var(--steel-100);
+ --color-red-badge: #B91C1C;
+ --color-red-badge-bg: #B91C1C22;
+ --color-red-badge-hover-bg: #B91C1C44;
+ --color-green-badge: #16a34a;
+ --color-green-badge-bg: #16a34a22;
+ --color-green-badge-hover-bg: #16a34a44;
+ --color-yellow-badge: #ca8a04;
+ --color-yellow-badge-bg: #ca8a0422;
+ --color-yellow-badge-hover-bg: #ca8a0444;
+ --color-orange-badge: #ea580c;
+ --color-orange-badge-bg: #ea580c22;
+ --color-orange-badge-hover-bg: #ea580c44;
+ --color-git: #f05133;
+
+ /* target-based colors */
+ --color-body: var(--steel-800);
+ --color-box-header: var(--steel-700);
+ --color-box-body: var(--steel-750);
+ --color-box-body-highlight: var(--steel-650);
+ --color-text-dark: #fff;
+ --color-text: var(--steel-100);
+ --color-text-light: var(--steel-150);
+ --color-text-light-1: var(--steel-150);
+ --color-text-light-2: var(--steel-200);
+ --color-text-light-3: var(--steel-200);
+ --color-footer: var(--steel-900);
+ --color-timeline: var(--steel-650);
+ --color-input-text: var(--steel-100);
+ --color-input-background: var(--steel-650);
+ --color-input-toggle-background: var(--steel-650);
+ --color-input-border: var(--steel-550);
+ --color-input-border-hover: var(--steel-450);
+ --color-navbar: var(--steel-850);
+ --color-navbar-transparent: #242D3800;
+ --color-light: #00000028;
+ --color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled)));
+ --color-light-border: #ffffff28;
+ --color-hover: var(--steel-600);
+ --color-active: var(--steel-650);
+ --color-menu: var(--steel-700);
+ --color-card: var(--steel-700);
+ --color-markup-table-row: #ffffff06;
+ --color-markup-code-block: var(--steel-800);
+ --color-button: var(--steel-600);
+ --color-code-bg: var(--steel-750);
+ --color-code-sidebar-bg: var(--steel-600);
+ --color-shadow: #00000060;
+ --color-secondary-bg: var(--steel-700);
+ --color-text-focus: #fff;
+ --color-expand-button: #3c404d;
+ --color-placeholder-text: var(--steel-450);
+ --color-editor-line-highlight: var(--steel-700);
+ --color-project-board-bg: var(--color-secondary-light-3);
+ --color-project-board-dark-label: var(--color-text-light-3);
+ --color-caret: var(--color-text); /* should ideally be --color-text-dark, see #15651 */
+ --color-reaction-bg: #ffffff12;
+ --color-reaction-active-bg: var(--color-primary-alpha-30);
+ --color-header-bar: var(--steel-900);
+ --color-label-active-bg: #4c525e;
+ --color-accent: var(--color-primary-light-1);
+ --color-small-accent: var(--color-primary-light-5);
+ --color-active-line: #534d1b;
+
+ accent-color: var(--color-accent);
+ color-scheme: dark;
+}
+
+/* invert emojis that are hard to read otherwise */
+.emoji[aria-label="check mark"],
+.emoji[aria-label="currency exchange"],
+.emoji[aria-label="TOP arrow"],
+.emoji[aria-label="END arrow"],
+.emoji[aria-label="ON! arrow"],
+.emoji[aria-label="SOON arrow"],
+.emoji[aria-label="heavy dollar sign"],
+.emoji[aria-label="copyright"],
+.emoji[aria-label="registered"],
+.emoji[aria-label="trade mark"],
+.emoji[aria-label="multiply"],
+.emoji[aria-label="plus"],
+.emoji[aria-label="minus"],
+.emoji[aria-label="divide"],
+.emoji[aria-label="curly loop"],
+.emoji[aria-label="double curly loop"],
+.emoji[aria-label="wavy dash"],
+.emoji[aria-label="paw prints"],
+.emoji[aria-label="musical note"],
+.emoji[aria-label="musical notes"] {
+ filter: invert(100%) hue-rotate(180deg);
+}
+
+.following.bar.light{
+ border-bottom-color: #ffffff11 !important;
+}
+.text.green.svg {
+ color: #16a34a !important;
+}
+i.grey.icon.icon.icon.icon {
+ color: var(--steel-350) !important;
+}
+
+.ui.red.button,
+.ui.negative.button {
+ background-color: #7f1d1d !important;
+ color: #fff !important;
+ border-color: var(--color-light-border) !important;
+ &:hover {
+ background-color: #991b1b !important;
+ }
+}
+
+.ui.secondary.vertical.menu {
+ border-radius: 0.28571429rem !important;
+ overflow: hidden;
+}
+.ui.secondary.vertical.menu > .item {
+ border-radius: 0 !important;
+}
+.ui.basic.primary.button.item {
+ background-color: var(--color-active) !important;
+ box-shadow: none !important;
+}
+
+.ui.red.label.notification_count,
+.ui.primary.label, .ui.primary.labels .label {
+ background-color: var(--color-primary-light-3) !important;
+}
+
+.repository.view.issue .comment-list .code-comment + .code-comment {
+ margin: 1.25rem 0 !important;
+ padding-top: 1.25rem !important;
+ border-top-color: var(--steel-650) !important;
+}
+
+.ui.labeled.icon.buttons > .button > .icon, .ui.labeled.icon.button > .icon {
+ background-color: rgba(0, 0, 0, 0.05) !important;
+}
+
+#review-box .review-comments-counter {
+ background-color: #00000088 !important;
+ color: #fff !important;
+ margin-left: 0.5em;
+}
+
+.ui.tabs .ui.primary.label,
+.ui.menu .ui.primary.label {
+ background-color: rgba(192,192,255, 0.2) !important;
+ // background-color: var(--zinc-300) !important;
+ color: var(--color-text-dark) !important;
+}
+
+.ui.basic.yellow.label.pending-label {
+ background: var(--color-light) !important;
+}
diff --git a/web_src/less/themes/theme-forgejo-light.less b/web_src/less/themes/theme-forgejo-light.less
new file mode 100644
index 0000000000..e9124ca804
--- /dev/null
+++ b/web_src/less/themes/theme-forgejo-light.less
@@ -0,0 +1,277 @@
+// @import "../chroma/light.less";
+// @import "../codemirror/light.less";
+
+:root {
+ --steel-900: #10161D;
+ --steel-850: #131A21;
+ --steel-800: #171E26;
+ --steel-750: #1D262F;
+ --steel-700: #242D38;
+ --steel-650: #2B3642;
+ --steel-600: #374351;
+ --steel-550: #445161;
+ --steel-500: #515F70;
+ --steel-450: #5F6E80;
+ --steel-400: #6D7D8F;
+ --steel-350: #7C8C9F;
+ --steel-300: #8C9CAF;
+ --steel-250: #9DADC0;
+ --steel-200: #AEBED0;
+ --steel-150: #C0CFE0;
+ --steel-100: #D2E0F0;
+
+ --zinc-50: #FAFAFA;
+ --zinc-100: #F4F4F5;
+ --zinc-150: #ECECEE;
+ --zinc-200: #E4E4E7;
+ --zinc-250: #DCDCE0;
+ --zinc-300: #D4D4D8;
+ --zinc-350: #BABAC1;
+ --zinc-400: #A1A1AA;
+ --zinc-450: #898992;
+ --zinc-500: #71717A;
+ --zinc-550: #61616A;
+ --zinc-600: #52525B;
+ --zinc-650: #484850;
+ --zinc-700: #3F3F46;
+ --zinc-750: #333338;
+ --zinc-800: #27272A;
+ --zinc-850: #1F1F23;
+ --zinc-900: #18181B;
+
+ // --is-dark-theme: true;
+ --color-primary: #c2410c;
+ --color-primary-contrast: #ffffff;
+ --color-primary-dark-1: #c2410c;
+ --color-primary-dark-2: #9a3412;
+ --color-primary-dark-3: #9a3412;
+ --color-primary-dark-4: #7c2d12;
+ --color-primary-dark-5: #7c2d12;
+ --color-primary-dark-6: #7c2d12;
+ --color-primary-dark-7: #7c2d12;
+ --color-primary-light-1: #ea580c;
+ --color-primary-light-2: #f97316;
+ --color-primary-light-3: #fb923c;
+ --color-primary-light-4: #fdba74;
+ --color-primary-light-5: #fed7aa;
+ --color-primary-light-6: #ffedd5;
+ --color-primary-light-7: #fff7ed;
+ --color-primary-alpha-10: #c2410c19;
+ --color-primary-alpha-20: #c2410c33;
+ --color-primary-alpha-30: #c2410c4b;
+ --color-primary-alpha-40: #c2410c66;
+ --color-primary-alpha-50: #c2410c80;
+ --color-primary-alpha-60: #c2410c99;
+ --color-primary-alpha-70: #c2410cb3;
+ --color-primary-alpha-80: #c2410ccc;
+ --color-primary-alpha-90: #c2410ce1;
+ --color-secondary: var(--zinc-200);
+ --color-secondary-dark-1: var(--zinc-200);
+ --color-secondary-dark-2: var(--zinc-300);
+ --color-secondary-dark-3: var(--zinc-300);
+ --color-secondary-dark-4: var(--zinc-400);
+ --color-secondary-dark-5: var(--zinc-400);
+ --color-secondary-dark-6: var(--zinc-500);
+ --color-secondary-dark-7: var(--zinc-500);
+ --color-secondary-dark-8: var(--zinc-600);
+ --color-secondary-dark-9: var(--zinc-600);
+ --color-secondary-dark-10: var(--zinc-700);
+ --color-secondary-dark-11: var(--zinc-700);
+ --color-secondary-dark-12: var(--zinc-800);
+ --color-secondary-dark-13: var(--zinc-800);
+ --color-secondary-light-1: var(--zinc-200);
+ --color-secondary-light-2: var(--zinc-100);
+ --color-secondary-light-3: var(--zinc-100);
+ --color-secondary-light-4: var(--zinc-50);
+ --color-secondary-alpha-10: #d4d4d819;
+ --color-secondary-alpha-20: #d4d4d833;
+ --color-secondary-alpha-30: #d4d4d84b;
+ --color-secondary-alpha-40: #d4d4d866;
+ --color-secondary-alpha-50: #d4d4d880;
+ --color-secondary-alpha-60: #d4d4d899;
+ --color-secondary-alpha-70: #d4d4d8b3;
+ --color-secondary-alpha-80: #d4d4d8cc;
+ --color-secondary-alpha-90: #d4d4d8e1;
+
+ /* colors */
+ --color-red: #dc2626;
+ --color-orange: #ea580c;
+ --color-yellow: #ca8a04;
+ --color-olive: #91a313;
+ --color-green: #15803d;
+ --color-teal: #0d9488;
+ --color-blue: #2563eb;
+ --color-violet: #7c3aed;
+ --color-purple: #9333ea;
+ --color-pink: #db2777;
+ --color-brown: #a47252;
+ --color-grey: #4b5563;
+ --color-black: #000000;
+
+ /* light variants */
+ --color-red-light: #ef4444;
+ --color-orange-light: #f97316;
+ --color-yellow-light: #eab308;
+ --color-olive-light: #839311;
+ --color-green-light: #16a34a;
+ --color-teal-light: #14b8a6;
+ --color-blue-light: #3b82f6;
+ --color-violet-light: #8b5cf6;
+ --color-purple-light: #a855f7;
+ --color-pink-light: #ec4899;
+ --color-brown-light: #94674a;
+ --color-grey-light: #6b7280;
+ --color-black-light: #181818;
+
+ /* other colors */
+ --color-gold: #b1983b;
+ --color-white: #ffffff;
+ --color-diff-removed-word-bg: #fca5a5;
+ --color-diff-added-word-bg: #86efac;
+ --color-diff-removed-row-bg: #fee2e2;
+ --color-diff-moved-row-bg: #fef9c3;
+ --color-diff-added-row-bg: #dcfce7;
+ --color-diff-removed-row-border: #fca5a5;
+ --color-diff-moved-row-border: #fde047;
+ --color-diff-added-row-border: #86efac;
+ --color-diff-inactive: var(--zinc-100);
+ --color-error-border: #fecaca;
+ --color-error-bg: #fee2e2;
+ --color-error-bg-active: #fca5a5;
+ --color-error-bg-hover: #fecaca;
+ --color-error-text: #7f1d1d;
+ --color-success-border: #bbf7d0;
+ --color-success-bg: #dcfce7;
+ --color-success-text: #14532d;
+ --color-warning-border: #fde047;
+ --color-warning-bg: #fef3c7;
+ --color-warning-text: #78350f;
+ --color-info-border: #bae6fd;
+ --color-info-bg: #e0f2fe;
+ --color-info-text: #0c4a6e;
+ --color-red-badge: #B91C1C;
+ --color-red-badge-bg: #B91C1C22;
+ --color-red-badge-hover-bg: #B91C1C44;
+ --color-green-badge: #16a34a;
+ --color-green-badge-bg: #16a34a22;
+ --color-green-badge-hover-bg: #16a34a44;
+ --color-yellow-badge: #ca8a04;
+ --color-yellow-badge-bg: #ca8a0422;
+ --color-yellow-badge-hover-bg: #ca8a0444;
+ --color-orange-badge: #ea580c;
+ --color-orange-badge-bg: #ea580c22;
+ --color-orange-badge-hover-bg: #ea580c44;
+ --color-git: #f05133;
+
+ /* target-based colors */
+ --color-body: #fff;
+ --color-box-header: var(--zinc-100);
+ --color-box-body: var(--zinc-50);
+ --color-box-body-highlight: var(--zinc-200);
+ --color-text-dark: #000;
+ --color-text: var(--zinc-900);
+ --color-text-light: var(--zinc-700);
+ --color-text-light-1: var(--zinc-650);
+ --color-text-light-2: var(--zinc-600);
+ --color-text-light-3: var(--zinc-550);
+ --color-footer: var(--zinc-100);
+ --color-timeline: var(--zinc-200);
+ --color-input-text: var(--zinc-800);
+ --color-input-background: #fff;
+ --color-input-toggle-background: #fff;
+ --color-input-border: var(--zinc-300);
+ --color-input-border-hover: var(--zinc-400);
+ --color-navbar: var(--zinc-50);
+ --color-navbar-transparent: #D2E0F000;
+ --color-light: #ffffffcc;
+ --color-light-mimic-enabled: rgba(0, 0, 0, calc(6 / 255 * 222 / 255 / var(--opacity-disabled)));
+ --color-light-border: #0000001d;
+ --color-hover: #e4e4e4aa;
+ --color-active: #d4d4d8aa;
+ --color-menu: var(--zinc-100);
+ --color-card: var(--zinc-50);
+ --color-markup-table-row: #ffffff06;
+ --color-markup-code-block: var(--zinc-150);
+ --color-button: var(--zinc-150);
+ --color-code-bg: var(--zinc-50);
+ --color-code-sidebar-bg: var(--zinc-100);
+ --color-shadow: #00000060;
+ --color-secondary-bg: var(--zinc-100);
+ --color-text-focus: #fff;
+ --color-expand-button: var(--zinc-200);
+ --color-placeholder-text: var(--zinc-400);
+ --color-editor-line-highlight: var(--zinc-100);
+ --color-project-board-bg: var(--color-secondary-light-2);
+ --color-project-board-dark-label: var(--color-text-light-3);
+ --color-caret: var(--color-text); /* should ideally be --color-text-dark, see #15651 */
+ --color-reaction-bg: #0000000a;
+ --color-reaction-active-bg: var(--color-primary-alpha-20);
+ --color-header-bar: var(--zinc-100);
+ --color-label-active-bg: #4c525e;
+ --color-accent: var(--color-primary-light-1);
+ --color-small-accent: var(--color-primary-light-5);
+ --color-active-line: #534d1b;
+
+ accent-color: var(--color-accent);
+ color-scheme: light;
+}
+
+.text.green.svg {
+ color: #16a34a !important;
+}
+// .ui.red.button,
+// .ui.negative.button {
+// background-color: var(--color-red) !important;
+// color: #fff !important;
+// border-color: var(--color-light-border) !important;
+// &:hover {
+// background-color: var(--color-red-light) !important;
+// }
+// }
+
+.ui.secondary.vertical.menu {
+ border-radius: 0.28571429rem !important;
+ overflow: hidden;
+}
+.ui.secondary.vertical.menu > .item {
+ border-radius: 0 !important;
+}
+.ui.basic.primary.button.item {
+ background-color: var(--color-active) !important;
+ color: var(--color-text) !important;
+ box-shadow: none !important;
+}
+
+.ui.red.label.notification_count,
+.ui.primary.label, .ui.primary.labels .label {
+ background-color: var(--color-primary-dark-1) !important;
+}
+
+.repository.view.issue .comment-list .code-comment + .code-comment {
+ margin: 1.25rem 0 !important;
+ padding-top: 1.25rem !important;
+ border-top-color: var(--zinc-250) !important;
+}
+
+.ui.labeled.icon.buttons > .button > .icon, .ui.labeled.icon.button > .icon {
+ background-color: rgba(0, 0, 0, 0.05) !important;
+}
+
+#review-box .review-comments-counter {
+ background-color: #ffffffaa !important;
+ color: #000 !important;
+ margin-left: 0.5em;
+}
+
+.ui.tabs .ui.primary.label,
+.ui.menu .ui.primary.label {
+ background-color: rgba(0, 0, 0, 0.15) !important;
+ // background-color: var(--zinc-300) !important;
+ color: var(--color-text-dark) !important;
+}
+
+.ui.basic.yellow.label.pending-label {
+ background: var(--color-warning-bg) !important;
+ color: var(--color-warning-text) !important;
+ border-color: #eab308 !important;
+}