Add Forgejo theme and homepage
13
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# Never commit real config, credentials or runtime data.
|
||||||
|
app.ini
|
||||||
|
custom/conf/app.ini
|
||||||
|
*.secret
|
||||||
|
.env
|
||||||
|
.runner
|
||||||
|
data/
|
||||||
|
log/
|
||||||
|
*.db
|
||||||
|
*.db-wal
|
||||||
|
*.db-shm
|
||||||
|
actions-runner/
|
||||||
|
info.txt
|
||||||
75
README.md
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
# GitDXD — Forgejo theme & homepage
|
||||||
|
|
||||||
|
A custom theme + landing page for a self-hosted [Forgejo](https://forgejo.org)
|
||||||
|
instance. Soft (neumorphic) UI, a colourful default palette, and a
|
||||||
|
GitHub/GitLab-style logged-out homepage.
|
||||||
|
|
||||||
|
## What's inside
|
||||||
|
|
||||||
|
| Path | Purpose |
|
||||||
|
| --- | --- |
|
||||||
|
| `themes/` | All CSS themes plus the shared neumorphic layer |
|
||||||
|
| `templates/home.tmpl` | Logged-out landing page |
|
||||||
|
| `templates/home_forgejo.tmpl` | "Why not GitHub?" section used by the landing page |
|
||||||
|
| `templates/custom/header.tmpl` | Navbar dark/light toggle (CSS + JS) |
|
||||||
|
| `assets/img/` | Logo, favicon and the homepage reason icons |
|
||||||
|
| `app.ini.example` | The only config you need, with **no secrets** |
|
||||||
|
| `install.sh` | Copies everything into a Forgejo `custom/` directory |
|
||||||
|
|
||||||
|
## Themes
|
||||||
|
|
||||||
|
| Theme | Notes |
|
||||||
|
| --- | --- |
|
||||||
|
| `aurora-light` | **Default.** Soft slate base, blue primary, teal links |
|
||||||
|
| `aurora-dark` | Neutral-charcoal dark variant |
|
||||||
|
| `gruvbox-dark` / `gruvbox-light` | Gruvbox palette with the soft-UI layer |
|
||||||
|
| `gruvbox-soft-dark` | Legacy alias for `gruvbox-dark` |
|
||||||
|
| `mono-dark` / `mono-light` | Greyscale variants (retired from the default picker) |
|
||||||
|
| `terminal` | Phosphor-green terminal palette + soft UI |
|
||||||
|
| `forgejo-dark` / `forgejo-light` / `forgejo-auto` | Overrides of the built-in palettes + soft UI |
|
||||||
|
|
||||||
|
`theme-neumorphism.css` is the shared soft-UI layer imported by every theme.
|
||||||
|
`_base-forgejo-*.css` are snapshots of Forgejo 15.0.0's built-in themes; the
|
||||||
|
`theme-forgejo-*.css` overrides import them. Replace the snapshots if you
|
||||||
|
upgrade Forgejo and want the newer built-in palettes.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
1. Copy the files into your Forgejo custom directory:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
./install.sh /path/to/forgejo/custom
|
||||||
|
```
|
||||||
|
|
||||||
|
(Usually `/var/lib/forgejo/custom`, `/home/forgejo/custom`, or the
|
||||||
|
`CustomPath` shown in *Site Administration → Configuration*.)
|
||||||
|
|
||||||
|
2. Add this to `app.ini` and restart Forgejo:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[ui]
|
||||||
|
THEMES = forgejo-auto,forgejo-light,forgejo-dark,aurora-dark,aurora-light,gruvbox-dark,gruvbox-light,gruvbox-soft-dark,terminal
|
||||||
|
DEFAULT_THEME = aurora-light
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Hard-refresh the browser (`Ctrl+Shift+R`). Forgejo serves custom CSS with a
|
||||||
|
6-hour cache at a version-pinned URL, so a normal reload may keep the old
|
||||||
|
styles.
|
||||||
|
|
||||||
|
## Navbar dark/light toggle
|
||||||
|
|
||||||
|
`templates/custom/header.tmpl` injects a neumorphic sun/moon switch into the
|
||||||
|
navbar (left of *Register* when logged out). It flips between `aurora-light`
|
||||||
|
and `aurora-dark`, stores the choice in `localStorage` under `dxd-theme`, and
|
||||||
|
applies it before the page paints.
|
||||||
|
|
||||||
|
## Security / no secrets
|
||||||
|
|
||||||
|
This repository intentionally contains **only** theme files, templates and
|
||||||
|
images. It does **not** include `app.ini`, database files, access tokens,
|
||||||
|
runner credentials, logs, or any user data. `app.ini.example` contains just the
|
||||||
|
`[ui]` theme settings.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
No license is included yet. Add one if you want others to reuse this.
|
||||||
8
app.ini.example
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
; Theme-related settings only.
|
||||||
|
; Do NOT copy the rest of your app.ini here (database, security,
|
||||||
|
; oauth2, lfs, mailer, server secrets, ...). This file is public.
|
||||||
|
|
||||||
|
[ui]
|
||||||
|
APP_NAME = GitDXD
|
||||||
|
THEMES = forgejo-auto,forgejo-light,forgejo-dark,aurora-dark,aurora-light,gruvbox-dark,gruvbox-light,gruvbox-soft-dark,terminal
|
||||||
|
DEFAULT_THEME = aurora-light
|
||||||
58
assets/img/ai.svg
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 512 512" xml:space="preserve">
|
||||||
|
<polygon style="fill:#B5E45F;" points="512,159.485 512,126.093 434.863,126.093 434.863,77.137 385.907,77.137 385.907,0
|
||||||
|
352.515,0 352.515,77.137 310.432,77.137 310.432,0 277.041,0 277.041,77.137 234.959,77.137 234.959,0 201.568,0 201.568,77.137
|
||||||
|
159.485,77.137 159.485,0 126.093,0 126.093,77.137 77.137,77.137 77.137,126.093 0,126.093 0,159.485 77.137,159.485
|
||||||
|
77.137,201.568 0,201.568 0,234.959 77.137,234.959 77.137,277.041 0,277.041 0,310.432 77.137,310.432 77.137,352.515 0,352.515
|
||||||
|
0,385.907 77.137,385.907 77.137,434.863 126.093,434.863 126.093,512 159.485,512 159.485,434.863 201.568,434.863 201.568,512
|
||||||
|
234.959,512 234.959,434.863 277.041,434.863 277.041,512 310.432,512 310.432,434.863 352.515,434.863 352.515,512 385.907,512
|
||||||
|
385.907,434.863 434.863,434.863 434.863,385.907 512,385.907 512,352.515 434.863,352.515 434.863,310.432 512,310.432
|
||||||
|
512,277.041 434.863,277.041 434.863,234.959 512,234.959 512,201.568 434.863,201.568 434.863,159.485 "/>
|
||||||
|
<g>
|
||||||
|
<polygon style="fill:#7DBB4E;" points="512,159.485 512,126.093 434.863,126.093 434.863,77.137 385.907,77.137 385.907,0
|
||||||
|
352.515,0 352.515,77.137 310.432,77.137 310.432,0 277.041,0 277.041,77.137 256,77.137 256,434.863 277.041,434.863 277.041,512
|
||||||
|
310.432,512 310.432,434.863 352.515,434.863 352.515,512 385.907,512 385.907,434.863 434.863,434.863 434.863,385.907
|
||||||
|
512,385.907 512,352.515 434.863,352.515 434.863,310.432 512,310.432 512,277.041 434.863,277.041 434.863,234.959 512,234.959
|
||||||
|
512,201.568 434.863,201.568 434.863,159.485 "/>
|
||||||
|
<rect x="110.525" y="110.525" style="fill:#7DBB4E;" width="290.938" height="290.938"/>
|
||||||
|
</g>
|
||||||
|
<rect x="256" y="110.525" style="fill:#588D3F;" width="145.475" height="290.938"/>
|
||||||
|
<path style="fill:#EEBF70;" d="M342.486,256.072c6.115-6.477,9.87-15.204,9.87-24.814c0-18.792-14.335-34.225-32.664-35.987
|
||||||
|
c0.292-1.011,0.545-3.572,0.545-9.452c0-17.739-14.381-32.119-32.119-32.119s-32.119,14.381-32.119,32.119
|
||||||
|
c0-17.739-14.381-32.119-32.119-32.119s-32.119,14.381-32.119,32.119c0,5.88,0.255,8.441,0.545,9.452
|
||||||
|
c-18.33,1.762-32.664,17.195-32.664,35.987c0,9.61,3.755,18.337,9.87,24.814l-0.08-0.073c-6.072,6.469-9.79,15.172-9.79,24.744
|
||||||
|
c0,19.079,14.778,34.697,33.509,36.057l-0.002,0.01c-0.903,2.965-1.389,6.112-1.389,9.372c0,17.739,14.381,32.119,32.119,32.119
|
||||||
|
s32.119-14.381,32.119-32.119c0,17.739,14.381,32.119,32.119,32.119s32.119-14.381,32.119-32.119c0-3.26-0.486-6.407-1.389-9.372
|
||||||
|
l-0.002-0.01c18.731-1.361,33.509-16.978,33.509-36.057c0-9.572-3.719-18.275-9.79-24.744L342.486,256.072z"/>
|
||||||
|
<path style="fill:#E79C25;" d="M342.486,256.072c6.115-6.477,9.87-15.204,9.87-24.814c0-19.081-14.778-34.711-33.513-36.069
|
||||||
|
c0,0,1.394,4.399,1.394-9.371c0-17.739-14.381-32.119-32.119-32.119s-32.119,14.381-32.119,32.119v140.364
|
||||||
|
c0,17.739,14.381,32.119,32.119,32.119c17.739,0,32.119-14.381,32.119-32.119c0-3.26-0.486-6.407-1.389-9.372l-0.002-0.01
|
||||||
|
c18.731-1.361,33.509-16.978,33.509-36.057c0-9.572-3.719-18.275-9.79-24.744L342.486,256.072z"/>
|
||||||
|
<path style="fill:#F3D49D;" d="M369.052,231.258c0-21.634-13.254-40.546-32.236-48.652c-1.662-25.423-22.862-45.601-48.698-45.601
|
||||||
|
c-12.291,0-23.527,4.577-32.118,12.102c-8.592-7.525-19.827-12.102-32.118-12.102c-25.836,0-47.036,20.178-48.698,45.601
|
||||||
|
c-18.982,8.106-32.236,27.018-32.236,48.652c0,8.929,2.234,17.342,6.158,24.725c-4.013,7.555-6.158,16.019-6.158,24.76
|
||||||
|
c0,21.835,13.308,40.617,32.237,48.669c1.67,25.415,22.866,45.585,48.697,45.585c12.291,0,23.528-4.576,32.118-12.102
|
||||||
|
c8.592,7.525,19.827,12.102,32.118,12.102c25.83,0,47.026-20.169,48.697-45.585c18.93-8.052,32.237-26.834,32.237-48.669
|
||||||
|
c0-8.741-2.146-17.204-6.158-24.76C366.818,248.599,369.052,240.186,369.052,231.258z M223.882,341.605
|
||||||
|
c-6.527,0-12.107-4.082-14.355-9.822c9.716-2.618,18.6-7.979,25.469-15.564l-24.75-22.416c-3.741,4.132-8.869,6.407-14.436,6.407
|
||||||
|
c-10.736,0-19.469-8.734-19.469-19.469c0-0.117,0.014-0.233,0.017-0.349c6.026,2.394,12.585,3.725,19.453,3.725v-33.391
|
||||||
|
c-10.736,0-19.469-8.734-19.469-19.469c0-6.647,3.405-12.582,8.583-16.105c5.473,7.279,12.966,13.059,21.817,16.38l11.728-31.264
|
||||||
|
c-5.987-2.246-10.008-8.053-10.008-14.45c0-8.505,6.92-15.423,15.423-15.423c8.504,0,15.421,6.92,15.421,15.423v140.364
|
||||||
|
C239.304,334.687,232.386,341.605,223.882,341.605z M288.118,341.605c-8.505,0-15.422-6.919-15.422-15.422V185.818
|
||||||
|
c0-8.505,6.919-15.423,15.422-15.423s15.423,6.919,15.423,15.423c0,6.398-4.021,12.205-10.008,14.45l11.728,31.264
|
||||||
|
c8.851-3.32,16.344-9.1,21.817-16.38c5.178,3.523,8.583,9.458,8.583,16.105c0,10.735-8.734,19.469-19.469,19.469v33.391
|
||||||
|
c6.869,0,13.428-1.331,19.454-3.725c0.002,0.117,0.017,0.232,0.017,0.349c0,10.735-8.734,19.469-19.469,19.469
|
||||||
|
c-5.567,0-10.694-2.275-14.436-6.407l-24.75,22.416c6.869,7.583,15.753,12.946,25.469,15.564
|
||||||
|
C300.226,337.523,294.645,341.605,288.118,341.605z"/>
|
||||||
|
<path style="fill:#EEBF70;" d="M369.052,231.258c0-21.634-13.254-40.546-32.236-48.652c-1.662-25.423-22.862-45.601-48.698-45.601
|
||||||
|
c-12.291,0-23.527,4.577-32.118,12.102c0,31.269,0,186.687,0,213.789c8.592,7.525,19.827,12.102,32.118,12.102
|
||||||
|
c25.83,0,47.026-20.169,48.697-45.585c18.93-8.052,32.237-26.834,32.237-48.669c0-8.741-2.146-17.204-6.158-24.76
|
||||||
|
C366.818,248.599,369.052,240.186,369.052,231.258z M288.118,341.605c-8.505,0-15.422-6.919-15.422-15.422V185.818
|
||||||
|
c0-8.505,6.919-15.423,15.422-15.423s15.423,6.919,15.423,15.423c0,6.398-4.021,12.205-10.008,14.45l11.728,31.264
|
||||||
|
c8.851-3.32,16.344-9.1,21.817-16.38c5.178,3.523,8.583,9.458,8.583,16.105c0,10.735-8.734,19.469-19.469,19.469v33.391
|
||||||
|
c6.869,0,13.428-1.331,19.454-3.725c0.002,0.117,0.017,0.232,0.017,0.349c0,10.735-8.734,19.469-19.469,19.469
|
||||||
|
c-5.567,0-10.694-2.275-14.436-6.407l-24.75,22.416c6.869,7.583,15.753,12.946,25.469,15.564
|
||||||
|
C300.226,337.523,294.645,341.605,288.118,341.605z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.9 KiB |
16
assets/img/favicon.svg
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 212 212" width="32" height="32">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="dxd-bg" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop offset="0" stop-color="#1d2a3d"/>
|
||||||
|
<stop offset="1" stop-color="#10151d"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="4" y="4" width="204" height="204" rx="48" fill="url(#dxd-bg)"/>
|
||||||
|
<g transform="translate(6 6)" fill="none" stroke-linecap="round">
|
||||||
|
<path d="M58 168V70a50 50 0 0 1 50-50h20" stroke="#60a5fa" stroke-width="25"/>
|
||||||
|
<path d="M58 168v-30a50 50 0 0 1 50-50h20" stroke="#2dd4bf" stroke-width="25"/>
|
||||||
|
<circle cx="142" cy="20" r="18" stroke="#93c5fd" stroke-width="15"/>
|
||||||
|
<circle cx="142" cy="88" r="18" stroke="#5eead4" stroke-width="15"/>
|
||||||
|
<circle cx="58" cy="180" r="18" stroke="#2dd4bf" stroke-width="15"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 873 B |
16
assets/img/logo.svg
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 212 212" width="32" height="32">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="dxd-bg" x1="0" y1="0" x2="1" y2="1">
|
||||||
|
<stop offset="0" stop-color="#1d2a3d"/>
|
||||||
|
<stop offset="1" stop-color="#10151d"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<rect x="4" y="4" width="204" height="204" rx="48" fill="url(#dxd-bg)"/>
|
||||||
|
<g transform="translate(6 6)" fill="none" stroke-linecap="round">
|
||||||
|
<path d="M58 168V70a50 50 0 0 1 50-50h20" stroke="#60a5fa" stroke-width="25"/>
|
||||||
|
<path d="M58 168v-30a50 50 0 0 1 50-50h20" stroke="#2dd4bf" stroke-width="25"/>
|
||||||
|
<circle cx="142" cy="20" r="18" stroke="#93c5fd" stroke-width="15"/>
|
||||||
|
<circle cx="142" cy="88" r="18" stroke="#5eead4" stroke-width="15"/>
|
||||||
|
<circle cx="58" cy="180" r="18" stroke="#2dd4bf" stroke-width="15"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 873 B |
29
assets/img/microsoft.svg
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 64 64" id="svg5" version="1.1" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs id="defs2"/>
|
||||||
|
<g id="layer1" transform="translate(-384,-672)">
|
||||||
|
<path d="m 394,681 h 49 v 6 h -49 z" id="path61240" style="fill:#3e4f59;fill-opacity:1;fill-rule:evenodd;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 394,687 h 49 v 40 h -49 z" id="path61242" style="fill:#acbec2;fill-opacity:1;fill-rule:evenodd;stroke-width:2.00001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 394,687 v 40 h 29.76953 a 28.484051,41.392605 35.599482 0 0 18.625,-40 z" id="path61244" style="fill:#e8edee;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.00002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 396,680 c -1.64501,0 -3,1.355 -3,3 v 40 c 0,0.55229 0.44772,1 1,1 0.55229,0 1,-0.44771 1,-1 v -40 c 0,-0.56413 0.43587,-1 1,-1 h 45 c 0.56413,0 1,0.43587 1,1 v 3 h -42 c -0.55228,0 -1,0.44772 -1,1 0,0.55229 0.44772,1 1,1 h 42 v 37 c 0,0.56413 -0.43587,1 -1,1 h -49 c -0.55228,0 -1,0.44772 -1,1 0,0.55229 0.44772,1 1,1 h 49 c 1.64501,0 3,-1.35499 3,-3 0,-14 0,-28 0,-42 0,-1.645 -1.35499,-3 -3,-3 z" id="path61246" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 439,683 c -0.55228,0 -1,0.44772 -1,1 0,0.55229 0.44772,1 1,1 0.55229,0 1,-0.44771 1,-1 0,-0.55228 -0.44771,-1 -1,-1 z" id="path61248" style="color:#000000;fill:#ed7161;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 435,683 c -0.55228,0 -1,0.44772 -1,1 0,0.55229 0.44772,1 1,1 0.55229,0 1,-0.44771 1,-1 0,-0.55228 -0.44771,-1 -1,-1 z" id="path61250" style="color:#000000;fill:#ecba16;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 431,683 c -0.55228,0 -1,0.44772 -1,1 0,0.55229 0.44772,1 1,1 0.55229,0 1,-0.44771 1,-1 0,-0.55228 -0.44771,-1 -1,-1 z" id="path61252" style="color:#000000;fill:#42b05c;fill-opacity:1;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 389,726 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z" id="path61254" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 397,686 c -0.55228,0 -1,0.44772 -1,1 0,0.55229 0.44772,1 1,1 0.55229,0 1,-0.44771 1,-1 0,-0.55228 -0.44771,-1 -1,-1 z" id="path61256" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 405.02708,692 h 13.1436 l 6.83353,6.63159 L 425.0002,720 h -20.02998 c -1.08885,0 -1.97153,-0.88268 -1.97154,-1.97153 l -8e-5,-23.99998 c -1e-5,-1.1203 0.90818,-2.02849 2.02848,-2.02849 z" id="rect19954" style="fill:#0075d3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.99999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;stroke-opacity:1"/>
|
||||||
|
<path d="m 406.00195,694.63672 a 16.779619,20.333775 0 0 0 -3.0039,0.36914 v 23.02344 c 1e-5,1.08885 0.8838,1.9707 1.97265,1.9707 h 17.25586 a 16.779619,20.333775 0 0 0 0.55469,-5.0293 16.779619,20.333775 0 0 0 -16.7793,-20.33398 z" id="path59704" style="fill:#0588e2;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 418,692 7,7 h -8 v -7 z" id="path102879" style="fill:#fe93d3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 405.02734,691 c -1.66072,0 -3.02929,1.36856 -3.02929,3.0293 V 714 a 0.99999499,0.99999499 0 0 0 1,1 0.99999499,0.99999499 0 0 0 1,-1 v -19.9707 c 0,-0.57986 0.44945,-1.0293 1.02929,-1.0293 H 410 a 0.99999499,0.99999499 0 0 0 1,-1 0.99999499,0.99999499 0 0 0 -1,-1 z m 8.97461,0 a 0.99999499,0.99999499 0 0 0 -1,1 0.99999499,0.99999499 0 0 0 1,1 h 2 v 5.9707 a 1.000095,1.000095 0 0 0 1,1 h 7.00196 L 424,719 h -19.0293 c -0.54841,0 -0.97265,-0.42228 -0.97265,-0.9707 a 0.99999499,0.99999499 0 0 0 -1,-1 0.99999499,0.99999499 0 0 0 -1,1 c 1e-5,1.62927 1.34337,2.9707 2.97265,2.9707 H 425 a 1.000095,1.000095 0 0 0 1,-1 l 0.004,-21.36914 a 1.000095,1.000095 0 0 0 -0.30274,-0.7168 l -6.83398,-6.63086 A 1.000095,1.000095 0 0 0 418.16992,691 Z m 4,2.22852 4.88477,4.74218 h -4.88477 z" id="rect19969" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 407.00195,702.9707 a 0.99999499,0.99999499 0 0 0 -1,1 0.99999499,0.99999499 0 0 0 1,1 h 8 a 0.99999499,0.99999499 0 0 0 1,-1 0.99999499,0.99999499 0 0 0 -1,-1 z" id="path19976" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 407.00195,707.9707 c -0.55229,0 -1,0.44771 -1,1 0,0.55229 0.44771,1 1,1 H 414 c 0.55229,0 1,-0.44771 1,-1 0,-0.55229 -0.44771,-1 -1,-1 z" id="path28394" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 407.00195,712.9707 a 0.99999499,0.99999499 0 0 0 -1,1 0.99999499,0.99999499 0 0 0 1,1 h 6 a 0.99999499,0.99999499 0 0 0 1,-1 0.99999499,0.99999499 0 0 0 -1,-1 z" id="path28396" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 407.00139,694.99197 h 6.00001 v 3.97956 h -6.00001 z" id="rect19974" style="fill:#fe93d3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.99999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 407.00195,693.99219 a 1.000095,1.000095 0 0 0 -1,1 v 3.97851 a 1.000095,1.000095 0 0 0 1,1 h 6 a 1.000095,1.000095 0 0 0 1,-1 v -3.97851 a 1.000095,1.000095 0 0 0 -1,-1 z m 1,2 h 4 v 1.97851 h -4 z" id="path22928" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
<path d="m 433.0014,713.54877 c 0,4.68321 -3.7965,8.47972 -8.47974,8.47972 -4.68323,0 -8.47972,-3.79651 -8.47972,-8.47972 0,-4.68322 3.79649,-8.47973 8.47972,-8.47973 4.68324,0 8.47974,3.79651 8.47974,8.47973 z" id="path19956" style="fill:#ffa221;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.99999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;stroke-opacity:1"/>
|
||||||
|
<path d="m 418.13281,707.97656 c -1.30106,1.49042 -2.09179,3.43845 -2.09179,5.57227 0,4.6832 3.79724,8.48047 8.48046,8.48047 4.68324,0 8.48047,-3.79727 8.48047,-8.48047 0,-0.0105 4e-5,-0.0208 0,-0.0312 a 19.45256,14.829408 0 0 0 -14.86914,-5.54102 z" id="path59675" style="fill:#ffc343;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1"/>
|
||||||
|
<path d="m 424.66796,706.98047 a 1.0143267,0.98586373 0 0 0 -1.01562,0.98633 v 0.87109 c -1.11001,0.39194 -1.92774,1.40103 -1.92774,2.60352 0,1.54769 1.35332,2.78124 2.94336,2.78124 0.53968,0 0.91211,0.37515 0.91211,0.81055 0,0.43542 -0.37244,0.81055 -0.91211,0.81055 -0.53967,0 -0.91406,-0.37513 -0.91406,-0.81055 a 1.0143267,0.98586373 0 0 0 -1.01562,-0.98438 1.0143267,0.98586373 0 0 0 -1.01368,0.98438 c 10e-6,1.2025 0.81773,2.21353 1.92774,2.60548 v 0.87109 a 1.0143267,0.98586373 0 0 0 1.01562,0.98632 1.0143267,0.98586373 0 0 0 1.01368,-0.98632 v -0.87109 c 1.1105,-0.3917 1.92773,-1.40263 1.92773,-2.60548 0,-1.54767 -1.35137,-2.78125 -2.94141,-2.78125 -0.53967,0 -0.91406,-0.37511 -0.91406,-0.81054 0,-0.43542 0.37438,-0.8086 0.91406,-0.8086 0.53968,0 0.91211,0.37318 0.91211,0.8086 a 1.0143267,0.98586373 0 0 0 1.01563,0.98632 1.0143267,0.98586373 0 0 0 1.01367,-0.98632 c 0,-1.20286 -0.81723,-2.21183 -1.92773,-2.60352 v -0.87109 a 1.0143267,0.98586373 0 0 0 -1.01368,-0.98633 z" id="path19958" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;stroke-opacity:1"/>
|
||||||
|
<path d="m 424.52092,704.06918 c -5.22366,0 -9.47851,4.25681 -9.47851,9.48046 0,5.22365 4.25485,9.47852 9.47852,9.47852 2.41721,0 4.63574,-0.90991 6.31054,-2.4043 a 0.99999499,0.99999499 0 0 0 0.0801,-1.41211 0.99999499,0.99999499 0 0 0 -1.41211,-0.0801 c -1.32331,1.18075 -3.06147,1.89648 -4.97852,1.89648 -4.14279,0 -7.47851,-3.33575 -7.47851,-7.47852 0,-4.14277 3.33572,-7.48046 7.47851,-7.48046 4.1428,0 7.48047,3.33769 7.48047,7.48046 0,0.69636 -0.0946,1.36661 -0.27148,2.00391 a 0.99999499,0.99999499 0 0 0 0.69531,1.23047 0.99999499,0.99999499 0 0 0 1.23242,-0.69531 c 0.22455,-0.80921 0.34372,-1.66101 0.34372,-2.53904 0,-5.22365 -4.2568,-9.48046 -9.48047,-9.48046 z" id="path21610" style="color:#000000;fill:#000000;fill-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4.1;-inkscape-stroke:none"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 9.1 KiB |
3
assets/img/money.svg
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
22
assets/img/monopoly.svg
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 512 512" xml:space="preserve">
|
||||||
|
<path style="fill:#FEDFB5;" d="M455.556,361.391c0,52.006-42.159,94.165-94.165,94.165H150.609
|
||||||
|
c-52.006,0-94.165-42.159-94.165-94.165V150.609c0-52.006,42.159-94.165,94.165-94.165h210.782
|
||||||
|
c52.006,0,94.165,42.159,94.165,94.165V361.391z"/>
|
||||||
|
<path style="fill:#FFF1D8;" d="M255.999,56.444h-105.39c-52.006,0-94.165,42.159-94.165,94.165v210.782
|
||||||
|
c0,52.005,42.159,94.165,94.165,94.165h105.39V56.444z"/>
|
||||||
|
<path style="fill:#3AB94B;" d="M271.294,242.104V187.76c25.526,4.476,25.531,20.337,25.531,26.111h30.589
|
||||||
|
c0-31.9-20.682-52.481-56.12-56.962v-21.724h-30.589v21.724c-35.437,4.481-56.12,25.061-56.12,56.962s20.682,52.48,56.12,56.961
|
||||||
|
v54.344c-25.526-4.476-25.531-20.337-25.531-26.111h-30.589c0,31.9,20.682,52.481,56.12,56.962v21.724h30.589v-21.724
|
||||||
|
c35.437-4.481,56.12-25.061,56.12-56.962S306.731,246.585,271.294,242.104z M215.174,213.871c0-5.774,0.005-21.635,25.531-26.111
|
||||||
|
v52.221C215.179,235.506,215.174,219.646,215.174,213.871z M271.294,325.177v-52.222c25.526,4.476,25.531,20.337,25.531,26.111
|
||||||
|
S296.82,320.7,271.294,325.177z"/>
|
||||||
|
<path style="fill:#FF9755;" d="M361.391,41.149H150.609c-60.355,0-109.46,49.104-109.46,109.461v51.652l-19.521-19.521L0,204.37
|
||||||
|
l56.444,56.444l56.443-56.444l-21.629-21.629l-19.52,19.52v-51.652c0-43.489,35.381-78.872,78.871-78.872H361.39
|
||||||
|
c43.488,0,78.871,35.381,78.871,78.872v78.379h30.589v-78.379C470.85,90.253,421.746,41.149,361.391,41.149z"/>
|
||||||
|
<path style="fill:#FF7224;" d="M512,316.038l-56.444-56.443l-56.443,56.443l21.63,21.629l19.52-19.52v43.244
|
||||||
|
c0,43.488-35.381,78.871-78.871,78.871H150.609c-43.488,0-78.871-35.381-78.871-78.871V291.42H41.149v69.971
|
||||||
|
c0,60.356,49.104,109.46,109.46,109.46h210.782c60.355,0,109.46-49.103,109.46-109.46v-43.245l19.521,19.52L512,316.038z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2 KiB |
3
assets/img/privacy.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg width="800px" height="800px" viewBox="0 0 1024 1024" class="icon" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512 85.333333c-117.333333 0-213.333333 96-213.333333 213.333334v85.333333h85.333333v-85.333333c0-70.4 57.6-128 128-128s128 57.6 128 128v85.333333h85.333333v-85.333333c0-117.333333-96-213.333333-213.333333-213.333334z" fill="#424242" /><path d="M768 938.666667H256c-46.933333 0-85.333333-38.4-85.333333-85.333334V469.333333c0-46.933333 38.4-85.333333 85.333333-85.333333h512c46.933333 0 85.333333 38.4 85.333333 85.333333v384c0 46.933333-38.4 85.333333-85.333333 85.333334z" fill="#FB8C00" /><path d="M512 661.333333m-128 0a128 128 0 1 0 256 0 128 128 0 1 0-256 0Z" fill="#EFEBE9" /><path d="M512 661.333333m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" fill="#1E88E5" /><path d="M554.666667 618.666667m-21.333334 0a21.333333 21.333333 0 1 0 42.666667 0 21.333333 21.333333 0 1 0-42.666667 0Z" fill="#FFFFFF" /></svg>
|
||||||
|
After Width: | Height: | Size: 1 KiB |
39
assets/img/selfhost.svg
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
width="800px" height="800px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path fill="#B4CCB9" d="M14,60c0,1.104,0.896,2,2,2h32c1.104,0,2-0.896,2-2V38H14V60z"/>
|
||||||
|
<rect x="14" y="26" fill="#B4CCB9" width="36" height="10"/>
|
||||||
|
<rect x="14" y="14" fill="#B4CCB9" width="36" height="10"/>
|
||||||
|
<path fill="#B4CCB9" d="M48,2H16c-1.104,0-2,0.896-2,2v8h36V4C50,2.896,49.104,2,48,2z"/>
|
||||||
|
</g>
|
||||||
|
<g opacity="0.15">
|
||||||
|
<rect x="14" y="26" width="36" height="10"/>
|
||||||
|
<rect x="14" y="14" width="36" height="10"/>
|
||||||
|
<path d="M48,2H16c-1.104,0-2,0.896-2,2v8h36V4C50,2.896,49.104,2,48,2z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path fill="#394240" d="M48,0H16c-2.211,0-4,1.789-4,4v56c0,2.211,1.789,4,4,4h32c2.211,0,4-1.789,4-4V4C52,1.789,50.211,0,48,0z
|
||||||
|
M50,60c0,1.104-0.896,2-2,2H16c-1.104,0-2-0.896-2-2V38h36V60z M50,36H14V26h36V36z M50,24H14V14h36V24z M50,12H14V4
|
||||||
|
c0-1.104,0.896-2,2-2h32c1.104,0,2,0.896,2,2V12z"/>
|
||||||
|
<path fill="#394240" d="M43,6H21c-0.553,0-1,0.447-1,1s0.447,1,1,1h22c0.553,0,1-0.447,1-1S43.553,6,43,6z"/>
|
||||||
|
<path fill="#394240" d="M21,20h22c0.553,0,1-0.447,1-1s-0.447-1-1-1H21c-0.553,0-1,0.447-1,1S20.447,20,21,20z"/>
|
||||||
|
<path fill="#394240" d="M21,32h22c0.553,0,1-0.447,1-1s-0.447-1-1-1H21c-0.553,0-1,0.447-1,1S20.447,32,21,32z"/>
|
||||||
|
<path fill="#394240" d="M32,58c1.657,0,3-1.344,3-3s-1.343-3-3-3s-3,1.344-3,3S30.343,58,32,58z M32,54c0.553,0,1,0.447,1,1
|
||||||
|
s-0.447,1-1,1s-1-0.447-1-1S31.447,54,32,54z"/>
|
||||||
|
<path fill="#394240" d="M40,58c1.657,0,3-1.344,3-3s-1.343-3-3-3s-3,1.344-3,3S38.343,58,40,58z M40,54c0.553,0,1,0.447,1,1
|
||||||
|
s-0.447,1-1,1s-1-0.447-1-1S39.447,54,40,54z"/>
|
||||||
|
<path fill="#394240" d="M24,58c1.657,0,3-1.344,3-3s-1.343-3-3-3s-3,1.344-3,3S22.343,58,24,58z M24,54c0.553,0,1,0.447,1,1
|
||||||
|
s-0.447,1-1,1s-1-0.447-1-1S23.447,54,24,54z"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<circle fill="#45AAB8" cx="24" cy="55" r="1"/>
|
||||||
|
<circle fill="#F76D57" cx="32" cy="55" r="1"/>
|
||||||
|
<circle fill="#F9EBB2" cx="40" cy="55" r="1"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
20
assets/img/student.svg
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||||
|
<svg height="800px" width="800px" version="1.1" id="_x32_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
viewBox="0 0 512 512" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#000000;}
|
||||||
|
</style>
|
||||||
|
<g>
|
||||||
|
<path class="st0" d="M505.837,180.418L279.265,76.124c-7.349-3.385-15.177-5.093-23.265-5.093c-8.088,0-15.914,1.708-23.265,5.093
|
||||||
|
L6.163,180.418C2.418,182.149,0,185.922,0,190.045s2.418,7.896,6.163,9.627l226.572,104.294c7.349,3.385,15.177,5.101,23.265,5.101
|
||||||
|
c8.088,0,15.916-1.716,23.267-5.101l178.812-82.306v82.881c-7.096,0.8-12.63,6.84-12.63,14.138c0,6.359,4.208,11.864,10.206,13.618
|
||||||
|
l-12.092,79.791h55.676l-12.09-79.791c5.996-1.754,10.204-7.259,10.204-13.618c0-7.298-5.534-13.338-12.63-14.138v-95.148
|
||||||
|
l21.116-9.721c3.744-1.731,6.163-5.504,6.163-9.627S509.582,182.149,505.837,180.418z"/>
|
||||||
|
<path class="st0" d="M256,346.831c-11.246,0-22.143-2.391-32.386-7.104L112.793,288.71v101.638
|
||||||
|
c0,22.314,67.426,50.621,143.207,50.621c75.782,0,143.209-28.308,143.209-50.621V288.71l-110.827,51.017
|
||||||
|
C278.145,344.44,267.25,346.831,256,346.831z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
33
install.sh
Executable file
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copy the theme + homepage into a Forgejo custom directory.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ./install.sh /path/to/forgejo/custom
|
||||||
|
#
|
||||||
|
# The target is the Forgejo CustomPath (Site Administration -> Configuration).
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
CUSTOM="${1:-}"
|
||||||
|
if [ -z "$CUSTOM" ] || [ ! -d "$CUSTOM" ]; then
|
||||||
|
echo "usage: $0 /path/to/forgejo/custom" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$CUSTOM/public/assets/css" \
|
||||||
|
"$CUSTOM/public/assets/img" \
|
||||||
|
"$CUSTOM/templates/custom"
|
||||||
|
|
||||||
|
cp themes/*.css "$CUSTOM/public/assets/css/"
|
||||||
|
cp assets/img/*.svg "$CUSTOM/public/assets/img/"
|
||||||
|
cp templates/home.tmpl templates/home_forgejo.tmpl "$CUSTOM/templates/"
|
||||||
|
cp templates/custom/header.tmpl "$CUSTOM/templates/custom/"
|
||||||
|
|
||||||
|
echo "Files copied to $CUSTOM"
|
||||||
|
echo
|
||||||
|
echo "Next, add this to app.ini and restart Forgejo:"
|
||||||
|
echo
|
||||||
|
echo " [ui]"
|
||||||
|
echo " THEMES = forgejo-auto,forgejo-light,forgejo-dark,aurora-dark,aurora-light,gruvbox-dark,gruvbox-light,gruvbox-soft-dark,terminal"
|
||||||
|
echo " DEFAULT_THEME = aurora-light"
|
||||||
|
echo
|
||||||
|
echo "Then hard-refresh the browser (Ctrl+Shift+R)."
|
||||||
149
templates/custom/header.tmpl
Normal file
|
|
@ -0,0 +1,149 @@
|
||||||
|
<style>
|
||||||
|
/* ── Neumorphic dark / light theme toggle ───────────────────────── */
|
||||||
|
.dxd-theme-toggle {
|
||||||
|
--tt-w: 54px;
|
||||||
|
--tt-h: 28px;
|
||||||
|
--tt-pad: 3px;
|
||||||
|
position: relative;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
width: var(--tt-w);
|
||||||
|
height: var(--tt-h);
|
||||||
|
margin: 0 0.55rem;
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 999px;
|
||||||
|
background: var(--color-body, #17171a);
|
||||||
|
box-shadow: var(--nm-inset-sm, inset 2px 2px 5px rgba(0, 0, 0, 0.45), inset -2px -2px 5px rgba(255, 255, 255, 0.04));
|
||||||
|
vertical-align: middle;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
transition: box-shadow 0.18s ease;
|
||||||
|
}
|
||||||
|
.dxd-theme-toggle .dxd-tt-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
color: var(--color-text-light-3, #8f8f96);
|
||||||
|
opacity: 0.7;
|
||||||
|
pointer-events: none;
|
||||||
|
transition: color 0.18s ease, opacity 0.18s ease;
|
||||||
|
}
|
||||||
|
.dxd-theme-toggle .dxd-tt-icon svg { width: 100%; height: 100%; display: block; }
|
||||||
|
.dxd-theme-toggle .dxd-tt-sun { left: 8px; }
|
||||||
|
.dxd-theme-toggle .dxd-tt-moon { right: 8px; }
|
||||||
|
.dxd-theme-toggle .dxd-tt-knob {
|
||||||
|
position: absolute;
|
||||||
|
top: var(--tt-pad);
|
||||||
|
left: var(--tt-pad);
|
||||||
|
width: calc(var(--tt-h) - var(--tt-pad) * 2);
|
||||||
|
height: calc(var(--tt-h) - var(--tt-pad) * 2);
|
||||||
|
border-radius: 50%;
|
||||||
|
background: linear-gradient(145deg, var(--color-box-body, #1d1d20), var(--color-body, #17171a));
|
||||||
|
box-shadow: var(--nm-raised-xs, 1px 1px 3px rgba(0, 0, 0, 0.4), -1px -1px 2px rgba(255, 255, 255, 0.05));
|
||||||
|
transition: transform 0.24s cubic-bezier(0.2, 0.7, 0.3, 1), box-shadow 0.18s ease;
|
||||||
|
}
|
||||||
|
.dxd-theme-toggle[data-mode="dark"] .dxd-tt-knob {
|
||||||
|
transform: translateX(calc(var(--tt-w) - var(--tt-h)));
|
||||||
|
}
|
||||||
|
.dxd-theme-toggle[data-mode="light"] .dxd-tt-sun { color: var(--color-primary, #dcdce1); opacity: 1; }
|
||||||
|
.dxd-theme-toggle[data-mode="dark"] .dxd-tt-moon { color: var(--color-primary, #dcdce1); opacity: 1; }
|
||||||
|
.dxd-theme-toggle:hover .dxd-tt-knob {
|
||||||
|
box-shadow: var(--nm-raised-sm, 2px 2px 6px rgba(0, 0, 0, 0.45), -2px -2px 6px rgba(255, 255, 255, 0.05));
|
||||||
|
}
|
||||||
|
.dxd-theme-toggle:active .dxd-tt-knob {
|
||||||
|
box-shadow: var(--nm-inset-sm, inset 2px 2px 5px rgba(0, 0, 0, 0.45), inset -2px -2px 5px rgba(255, 255, 255, 0.04));
|
||||||
|
}
|
||||||
|
.dxd-theme-toggle:focus-visible {
|
||||||
|
outline: 2px solid var(--color-primary, #dcdce1);
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
.navbar-right > .dxd-theme-toggle { order: -1; }
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.dxd-theme-toggle { --tt-w: 48px; --tt-h: 26px; margin: 0 0.3rem; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
"use strict";
|
||||||
|
var LIGHT = "aurora-light";
|
||||||
|
var DARK = "aurora-dark";
|
||||||
|
var KEY = "dxd-theme";
|
||||||
|
|
||||||
|
function themeLink() {
|
||||||
|
return document.querySelector('link[rel="stylesheet"][href*="/css/theme-"]');
|
||||||
|
}
|
||||||
|
|
||||||
|
function apply(name) {
|
||||||
|
var link = themeLink();
|
||||||
|
if (link) {
|
||||||
|
var href = link.getAttribute("href");
|
||||||
|
link.setAttribute("href", href.replace(/\/theme-[^\/?]+\.css/, "/theme-" + name + ".css"));
|
||||||
|
}
|
||||||
|
document.documentElement.setAttribute("data-theme", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
function mode() {
|
||||||
|
var link = themeLink();
|
||||||
|
if (!link) return "light";
|
||||||
|
return /-light\.css/.test(link.getAttribute("href")) ? "light" : "dark";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apply the saved preference before the page paints, so there is no flash. */
|
||||||
|
try {
|
||||||
|
var saved = localStorage.getItem(KEY);
|
||||||
|
if (saved === "dark") apply(DARK);
|
||||||
|
else if (saved === "light") apply(LIGHT);
|
||||||
|
} catch (e) { /* localStorage unavailable */ }
|
||||||
|
|
||||||
|
function build() {
|
||||||
|
var right = document.querySelector(".navbar-right");
|
||||||
|
if (!right || document.getElementById("dxd-theme-toggle")) return;
|
||||||
|
|
||||||
|
var btn = document.createElement("button");
|
||||||
|
btn.id = "dxd-theme-toggle";
|
||||||
|
btn.type = "button";
|
||||||
|
btn.className = "dxd-theme-toggle";
|
||||||
|
btn.setAttribute("role", "switch");
|
||||||
|
btn.setAttribute("aria-label", "Toggle dark mode");
|
||||||
|
btn.innerHTML =
|
||||||
|
'<span class="dxd-tt-icon dxd-tt-sun">' +
|
||||||
|
'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">' +
|
||||||
|
'<circle cx="12" cy="12" r="4.4"></circle>' +
|
||||||
|
'<path d="M12 2v2.6M12 19.4V22M2 12h2.6M19.4 12H22M5 5l1.8 1.8M17.2 17.2 19 19M19 5l-1.8 1.8M6.8 17.2 5 19"></path>' +
|
||||||
|
'</svg>' +
|
||||||
|
'</span>' +
|
||||||
|
'<span class="dxd-tt-icon dxd-tt-moon">' +
|
||||||
|
'<svg viewBox="0 0 24 24" fill="currentColor">' +
|
||||||
|
'<path d="M21 12.9A9 9 0 1 1 11.1 3a7 7 0 0 0 9.9 9.9Z"></path>' +
|
||||||
|
'</svg>' +
|
||||||
|
'</span>' +
|
||||||
|
'<span class="dxd-tt-knob"></span>';
|
||||||
|
|
||||||
|
function sync() {
|
||||||
|
var dark = mode() === "dark";
|
||||||
|
btn.setAttribute("data-mode", dark ? "dark" : "light");
|
||||||
|
btn.setAttribute("aria-checked", dark ? "true" : "false");
|
||||||
|
btn.setAttribute("title", dark ? "Switch to light mode" : "Switch to dark mode");
|
||||||
|
}
|
||||||
|
|
||||||
|
btn.addEventListener("click", function () {
|
||||||
|
var next = mode() === "dark" ? "light" : "dark";
|
||||||
|
apply(next === "dark" ? DARK : LIGHT);
|
||||||
|
try { localStorage.setItem(KEY, next); } catch (e) { /* ignore */ }
|
||||||
|
sync();
|
||||||
|
});
|
||||||
|
|
||||||
|
right.insertBefore(btn, right.firstChild);
|
||||||
|
sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document.readyState === "loading") {
|
||||||
|
document.addEventListener("DOMContentLoaded", build);
|
||||||
|
} else {
|
||||||
|
build();
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
385
templates/home.tmpl
Normal file
|
|
@ -0,0 +1,385 @@
|
||||||
|
{{template "base/head" .}}
|
||||||
|
{{if .IsSigned}}
|
||||||
|
{{template "user/dashboard/dashboard" .}}
|
||||||
|
{{else}}
|
||||||
|
<style>
|
||||||
|
.dxd-landing {
|
||||||
|
--dxd-surface: var(--color-box-body, #2d2b29);
|
||||||
|
--dxd-bg: var(--color-body, #282828);
|
||||||
|
--dxd-text: var(--color-text, #ebdbb2);
|
||||||
|
--dxd-muted: var(--color-text-light-2, #bdae93);
|
||||||
|
--dxd-dim: var(--color-text-light-3, #a89984);
|
||||||
|
--dxd-accent: var(--color-primary, #8ec07c);
|
||||||
|
--dxd-link: var(--color-blue, #83a598);
|
||||||
|
--dxd-border: var(--nm-divider, rgba(255, 255, 255, 0.07));
|
||||||
|
color: var(--dxd-text);
|
||||||
|
max-width: 1120px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 2.5rem 1.5rem 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Hero ──────────────────────────────────────────────────────── */
|
||||||
|
.dxd-hero {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1.05fr 1fr;
|
||||||
|
align-items: center;
|
||||||
|
gap: 3rem;
|
||||||
|
padding: 1.5rem 0 3.5rem;
|
||||||
|
}
|
||||||
|
@media (max-width: 940px) {
|
||||||
|
.dxd-hero { grid-template-columns: 1fr; gap: 2rem; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.dxd-eyebrow {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 600;
|
||||||
|
letter-spacing: 0.14em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--dxd-accent);
|
||||||
|
background: var(--color-primary-alpha-10, rgba(142, 192, 124, 0.1));
|
||||||
|
border-radius: 999px;
|
||||||
|
padding: 0.35rem 0.8rem;
|
||||||
|
box-shadow: var(--nm-inset-sm);
|
||||||
|
margin-bottom: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dxd-hero h1 {
|
||||||
|
font-size: clamp(2rem, 4.4vw, 3.35rem);
|
||||||
|
line-height: 1.08;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: -0.025em;
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
color: var(--color-text-focus, var(--dxd-text));
|
||||||
|
}
|
||||||
|
.dxd-hero h1 em {
|
||||||
|
font-style: normal;
|
||||||
|
color: var(--dxd-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dxd-lede {
|
||||||
|
font-size: 1.05rem;
|
||||||
|
line-height: 1.65;
|
||||||
|
color: var(--dxd-muted);
|
||||||
|
max-width: 34rem;
|
||||||
|
margin: 0 0 1.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dxd-cta { display: flex; flex-wrap: wrap; gap: 0.8rem; align-items: center; }
|
||||||
|
.dxd-cta .dxd-btn { font-size: 0.98rem; padding: 0.8rem 1.4rem; }
|
||||||
|
.dxd-note { margin: 1.1rem 0 0; font-size: 0.9rem; color: var(--dxd-dim); }
|
||||||
|
.dxd-note a { color: var(--dxd-link); font-weight: 600; }
|
||||||
|
|
||||||
|
/* ── Faux repository window (the pretty bit) ───────────────────── */
|
||||||
|
.dxd-mock {
|
||||||
|
background: var(--dxd-surface);
|
||||||
|
border-radius: 18px;
|
||||||
|
box-shadow: var(--nm-raised);
|
||||||
|
overflow: hidden;
|
||||||
|
font-size: 0.82rem;
|
||||||
|
}
|
||||||
|
.dxd-mock-bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.45rem;
|
||||||
|
padding: 0.7rem 0.9rem;
|
||||||
|
background: var(--color-header-wrapper, var(--dxd-bg));
|
||||||
|
box-shadow: inset 0 -1px 0 var(--dxd-border);
|
||||||
|
}
|
||||||
|
.dxd-mock-bar .dot { width: 11px; height: 11px; border-radius: 50%; box-shadow: var(--nm-inset-sm); }
|
||||||
|
.dxd-mock-bar .dot.r { background: #fb4934; }
|
||||||
|
.dxd-mock-bar .dot.y { background: #fabd2f; }
|
||||||
|
.dxd-mock-bar .dot.g { background: #8ec07c; }
|
||||||
|
.dxd-mock-url {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
text-align: center;
|
||||||
|
font-family: var(--fonts-monospace);
|
||||||
|
font-size: 0.74rem;
|
||||||
|
color: var(--dxd-dim);
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dxd-mock-repo { padding: 1rem 1.1rem 1.2rem; }
|
||||||
|
.dxd-mock-repotop { display: flex; align-items: flex-start; gap: 0.7rem; }
|
||||||
|
.dxd-mock-avatar {
|
||||||
|
width: 38px; height: 38px; flex-shrink: 0;
|
||||||
|
border-radius: 10px;
|
||||||
|
display: grid; place-items: center;
|
||||||
|
font-weight: 800; color: var(--color-primary-contrast, #101010);
|
||||||
|
background: linear-gradient(145deg, var(--color-primary-light-1, var(--dxd-accent)), var(--dxd-accent));
|
||||||
|
box-shadow: var(--nm-raised-sm);
|
||||||
|
}
|
||||||
|
.dxd-mock-reponame { font-size: 0.98rem; color: var(--dxd-dim); }
|
||||||
|
.dxd-mock-reponame strong { color: var(--dxd-link); font-weight: 700; }
|
||||||
|
.dxd-mock-desc { font-size: 0.76rem; color: var(--dxd-dim); margin-top: 0.15rem; }
|
||||||
|
.dxd-mock-actions { margin-left: auto; display: flex; gap: 0.35rem; }
|
||||||
|
.dxd-pill {
|
||||||
|
font-size: 0.68rem; font-weight: 600;
|
||||||
|
padding: 0.28rem 0.6rem;
|
||||||
|
border-radius: 999px;
|
||||||
|
color: var(--dxd-muted);
|
||||||
|
background: var(--dxd-bg);
|
||||||
|
box-shadow: var(--nm-raised-sm);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.dxd-pill.accent { color: var(--dxd-accent); }
|
||||||
|
|
||||||
|
.dxd-mock-tabs {
|
||||||
|
display: flex; gap: 0.25rem; flex-wrap: wrap;
|
||||||
|
margin: 0.9rem 0 0.75rem;
|
||||||
|
box-shadow: inset 0 -1px 0 var(--dxd-border);
|
||||||
|
}
|
||||||
|
.dxd-mock-tabs span {
|
||||||
|
padding: 0.4rem 0.65rem;
|
||||||
|
font-size: 0.76rem;
|
||||||
|
color: var(--dxd-dim);
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
}
|
||||||
|
.dxd-mock-tabs span.active { color: var(--dxd-text); border-bottom-color: var(--dxd-accent); }
|
||||||
|
.dxd-mock-tabs b { color: var(--dxd-muted); font-weight: 600; }
|
||||||
|
|
||||||
|
.dxd-mock-branch {
|
||||||
|
display: flex; align-items: center; gap: 0.6rem;
|
||||||
|
padding: 0.5rem 0.6rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
border-radius: 10px;
|
||||||
|
background: var(--dxd-bg);
|
||||||
|
box-shadow: var(--nm-inset-sm);
|
||||||
|
font-size: 0.75rem; color: var(--dxd-muted);
|
||||||
|
}
|
||||||
|
.dxd-mock-branch .code-btn {
|
||||||
|
margin-left: auto;
|
||||||
|
color: var(--dxd-accent);
|
||||||
|
background: var(--color-primary-alpha-10, rgba(142, 192, 124, 0.1));
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 0.22rem 0.55rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dxd-file {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 20px 1.4fr 1.6fr auto;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.6rem;
|
||||||
|
padding: 0.42rem 0.4rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: var(--dxd-muted);
|
||||||
|
box-shadow: inset 0 -1px 0 var(--dxd-border);
|
||||||
|
}
|
||||||
|
.dxd-file:hover { background: var(--color-primary-alpha-10, rgba(142, 192, 124, 0.08)); }
|
||||||
|
.dxd-file svg { width: 16px; height: 16px; color: var(--dxd-dim); }
|
||||||
|
.dxd-file .name { color: var(--dxd-link); font-family: var(--fonts-monospace); font-size: 0.76rem; }
|
||||||
|
.dxd-file .msg { font-size: 0.74rem; color: var(--dxd-dim); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
||||||
|
.dxd-file .when { font-size: 0.72rem; color: var(--dxd-dim); white-space: nowrap; }
|
||||||
|
@media (max-width: 560px) {
|
||||||
|
.dxd-file { grid-template-columns: 20px 1fr auto; }
|
||||||
|
.dxd-file .msg { display: none; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ── Section shells ────────────────────────────────────────────── */
|
||||||
|
.dxd-section { padding: 2.75rem 0 0.5rem; }
|
||||||
|
.dxd-section-head { margin-bottom: 1.5rem; }
|
||||||
|
.dxd-section-head h2 {
|
||||||
|
font-size: clamp(1.4rem, 2.6vw, 1.95rem);
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: -0.015em;
|
||||||
|
margin: 0 0 0.4rem;
|
||||||
|
color: var(--color-text-focus, var(--dxd-text));
|
||||||
|
}
|
||||||
|
.dxd-section-head p { margin: 0; color: var(--dxd-muted); }
|
||||||
|
|
||||||
|
/* ── Feature grid ──────────────────────────────────────────────── */
|
||||||
|
.dxd-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
|
||||||
|
gap: 1.1rem;
|
||||||
|
}
|
||||||
|
.dxd-feature {
|
||||||
|
background: var(--dxd-surface);
|
||||||
|
border-radius: 16px;
|
||||||
|
box-shadow: var(--nm-raised);
|
||||||
|
padding: 1.35rem 1.4rem;
|
||||||
|
transition: box-shadow 0.2s ease, transform 0.2s ease;
|
||||||
|
}
|
||||||
|
.dxd-feature:hover {
|
||||||
|
box-shadow: var(--nm-raised), 0 0 0 1px var(--color-primary-alpha-20, transparent);
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
.dxd-feature .icon {
|
||||||
|
width: 42px; height: 42px;
|
||||||
|
display: grid; place-items: center;
|
||||||
|
border-radius: 12px;
|
||||||
|
margin-bottom: 0.9rem;
|
||||||
|
color: var(--dxd-accent);
|
||||||
|
background: var(--dxd-bg);
|
||||||
|
box-shadow: var(--nm-inset-sm);
|
||||||
|
}
|
||||||
|
.dxd-feature .icon svg { width: 22px; height: 22px; }
|
||||||
|
.dxd-feature h3 { margin: 0 0 0.4rem; font-size: 1.02rem; font-weight: 700; color: var(--dxd-text); }
|
||||||
|
.dxd-feature p { margin: 0; font-size: 0.88rem; line-height: 1.6; color: var(--dxd-muted); }
|
||||||
|
|
||||||
|
/* ── CTA band ──────────────────────────────────────────────────── */
|
||||||
|
.dxd-cta-band {
|
||||||
|
margin: 3.25rem 0 1rem;
|
||||||
|
padding: 2.25rem 1.75rem;
|
||||||
|
border-radius: 20px;
|
||||||
|
text-align: center;
|
||||||
|
background: var(--dxd-surface);
|
||||||
|
box-shadow: var(--nm-raised);
|
||||||
|
}
|
||||||
|
.dxd-cta-band h2 { margin: 0 0 0.5rem; font-size: clamp(1.4rem, 2.6vw, 1.9rem); color: var(--color-text-focus, var(--dxd-text)); }
|
||||||
|
.dxd-cta-band p { margin: 0 auto 1.4rem; color: var(--dxd-muted); max-width: 34rem; }
|
||||||
|
.dxd-cta-band .dxd-cta { justify-content: center; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div role="main" aria-label="{{ctx.Locale.Tr "home"}}" class="page-content home">
|
||||||
|
<div class="dxd-landing">
|
||||||
|
|
||||||
|
<!-- ── Hero ─────────────────────────────────────────────────── -->
|
||||||
|
<section class="dxd-hero">
|
||||||
|
<div class="dxd-hero-copy">
|
||||||
|
<span class="dxd-eyebrow">Self-hosted · Open source</span>
|
||||||
|
<h1>Git hosting that<br>answers to <em>you</em>.</h1>
|
||||||
|
<p class="dxd-lede">
|
||||||
|
{{AppDisplayName}} is a self-hosted Forgejo instance for repositories, issues,
|
||||||
|
pull requests, code review and CI — fast, private, and free of
|
||||||
|
corporate strings.
|
||||||
|
</p>
|
||||||
|
<div class="dxd-cta">
|
||||||
|
<a class="ui primary button dxd-btn" href="/user/sign_up">Get started</a>
|
||||||
|
<a class="ui basic button dxd-btn" href="/explore/repos">Explore repositories</a>
|
||||||
|
</div>
|
||||||
|
<p class="dxd-note">Already have an account? <a href="/user/login">Sign in</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-hero-mock" aria-hidden="true">
|
||||||
|
<div class="dxd-mock">
|
||||||
|
<div class="dxd-mock-bar">
|
||||||
|
<span class="dot r"></span><span class="dot y"></span><span class="dot g"></span>
|
||||||
|
<span class="dxd-mock-url">git.dvorakmortonxd.dev/dvorakmortonxd/forgejo</span>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-mock-repo">
|
||||||
|
<div class="dxd-mock-repotop">
|
||||||
|
<div class="dxd-mock-avatar">D</div>
|
||||||
|
<div>
|
||||||
|
<div class="dxd-mock-reponame">dvorakmortonxd / <strong>forgejo</strong></div>
|
||||||
|
<div class="dxd-mock-desc">Beyond coding. We forge.</div>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-mock-actions">
|
||||||
|
<span class="dxd-pill">Public</span>
|
||||||
|
<span class="dxd-pill accent">★ Star</span>
|
||||||
|
<span class="dxd-pill">⑂ Fork</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-mock-tabs">
|
||||||
|
<span class="active">Code</span>
|
||||||
|
<span>Issues <b>12</b></span>
|
||||||
|
<span>Pull requests <b>4</b></span>
|
||||||
|
<span>Actions</span>
|
||||||
|
<span>Packages</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-mock-branch">
|
||||||
|
<span>main ▾</span>
|
||||||
|
<span>128 commits</span>
|
||||||
|
<span class="code-btn"><> Code ▾</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-mock-files">
|
||||||
|
<div class="dxd-file">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>
|
||||||
|
<span class="name">.github</span>
|
||||||
|
<span class="msg">Add CI workflow</span>
|
||||||
|
<span class="when">2 days ago</span>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-file">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>
|
||||||
|
<span class="name">cmd</span>
|
||||||
|
<span class="msg">Support custom config paths</span>
|
||||||
|
<span class="when">5 hours ago</span>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-file">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>
|
||||||
|
<span class="name">models</span>
|
||||||
|
<span class="msg">Index pull request reviews</span>
|
||||||
|
<span class="when">yesterday</span>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-file">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg>
|
||||||
|
<span class="name">README.md</span>
|
||||||
|
<span class="msg">Rewrite install instructions</span>
|
||||||
|
<span class="when">3 hours ago</span>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-file">
|
||||||
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3h8l4 4v14H6z"/><path d="M14 3v4h4"/></svg>
|
||||||
|
<span class="name">go.mod</span>
|
||||||
|
<span class="msg">Bump dependencies</span>
|
||||||
|
<span class="when">last week</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- ── Everything you need ──────────────────────────────────── -->
|
||||||
|
<section class="dxd-section">
|
||||||
|
<div class="dxd-section-head">
|
||||||
|
<h2>Everything you need to ship</h2>
|
||||||
|
<p>The full toolkit of a modern git host — on hardware you control.</p>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-grid">
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5.5A2.5 2.5 0 0 1 6.5 3H19a1 1 0 0 1 1 1v14"/><path d="M4 5.5A2.5 2.5 0 0 0 6.5 8H20"/><path d="M4 5.5V18a3 3 0 0 0 3 3h13"/></svg></div>
|
||||||
|
<h3>Repositories</h3>
|
||||||
|
<p>Unlimited public and private repos with wikis, webhooks, releases and fine-grained access control.</p>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="6" cy="6" r="2.4"/><circle cx="6" cy="18" r="2.4"/><circle cx="18" cy="6" r="2.4"/><path d="M6 8.4v7.2"/><path d="M15.6 6h-3.2a4 4 0 0 0-4 4v0"/><path d="M18 8.4v3.1a4 4 0 0 1-4 4h-3"/></svg></div>
|
||||||
|
<h3>Pull requests</h3>
|
||||||
|
<p>Review line-by-line diffs, leave comments, request changes, and merge once checks pass.</p>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="12" r="2.6" fill="currentColor" stroke="none"/></svg></div>
|
||||||
|
<h3>Issues & projects</h3>
|
||||||
|
<p>Track bugs and plan work with labels, milestones, assignees and kanban project boards.</p>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M13.5 3 5 13.5h5.5L10 21l8.5-10.5H13z"/></svg></div>
|
||||||
|
<h3>Actions & CI</h3>
|
||||||
|
<p>Automate builds, tests and releases with Forgejo Actions runners, right next to your code.</p>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3 20 7.5v9L12 21 4 16.5v-9z"/><path d="M4 7.5 12 12l8-4.5"/><path d="M12 12v9"/></svg></div>
|
||||||
|
<h3>Packages</h3>
|
||||||
|
<p>Publish container images and language packages alongside the source that produced them.</p>
|
||||||
|
</div>
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3 5 6v5c0 4.4 3 8.4 7 10 4-1.6 7-5.6 7-10V6z"/><path d="M9.5 12l1.8 1.8L15 10"/></svg></div>
|
||||||
|
<h3>Private by default</h3>
|
||||||
|
<p>Your data stays on this box. No tracking, no telemetry, and definitely no training on your code.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- ── Why not GitHub ───────────────────────────────────────── -->
|
||||||
|
{{template "home_forgejo" .}}
|
||||||
|
|
||||||
|
<!-- ── CTA band ─────────────────────────────────────────────── -->
|
||||||
|
<section class="dxd-cta-band">
|
||||||
|
<h2>Ready to forge something?</h2>
|
||||||
|
<p>Create an account and push your first repository in under a minute.</p>
|
||||||
|
<div class="dxd-cta">
|
||||||
|
<a class="ui primary button dxd-btn" href="/user/sign_up">Create your account</a>
|
||||||
|
<a class="ui basic button dxd-btn" href="/user/login">Sign in</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
{{template "base/footer" .}}
|
||||||
85
templates/home_forgejo.tmpl
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
<style>
|
||||||
|
.dxd-reasons .dxd-feature .icon img {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
/* Fold the colourful icons into a calm monochrome that suits any theme */
|
||||||
|
filter: grayscale(1) opacity(0.85);
|
||||||
|
}
|
||||||
|
.dxd-reasons .dxd-feature p { color: var(--dxd-muted); }
|
||||||
|
.dxd-reasons .dxd-feature p a { color: var(--dxd-link); font-weight: 600; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<section class="dxd-section dxd-reasons">
|
||||||
|
<div class="dxd-section-head">
|
||||||
|
<h2>Why not just use GitHub?</h2>
|
||||||
|
<p>Fair question. Here is the honest answer.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-grid">
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><img src="/assets/img/money.svg" alt=""></div>
|
||||||
|
<h3>GitHub is greedy</h3>
|
||||||
|
<p>
|
||||||
|
GitHub gave students cool stuff, then slowly removes them,
|
||||||
|
moves stuff into more expensive plans. I am tired of depending
|
||||||
|
on free perks that can disappear whenever they feel like it —
|
||||||
|
Copilot Education/Pro for students had every good model stripped
|
||||||
|
out, making it practically worthless. Fuck GitHub.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><img src="/assets/img/microsoft.svg" alt=""></div>
|
||||||
|
<h3>It is owned by Microsoft</h3>
|
||||||
|
<p>
|
||||||
|
GitHub is owned by Microsoft. That alone is enough for me to hate it.
|
||||||
|
I do not want all of open source software sitting in the hands of a
|
||||||
|
giant company that makes closed-source software and loves locking
|
||||||
|
people into its ecosystem. I also despise Windows, but that is irrelevant.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><img src="/assets/img/ai.svg" alt=""></div>
|
||||||
|
<h3>AI slop everywhere</h3>
|
||||||
|
<p>
|
||||||
|
GitHub keeps pushing Copilot and AI into every corner. I do not want my
|
||||||
|
code host to constantly shove AI in my face. I just want somewhere to put
|
||||||
|
my repositories without feeling like everything is being turned into
|
||||||
|
training data or another Microsoft product.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><img src="/assets/img/privacy.svg" alt=""></div>
|
||||||
|
<h3>Privacy</h3>
|
||||||
|
<p>
|
||||||
|
This server is run by me, a random student, so you do not have to blindly
|
||||||
|
trust me either. But at least I am not a massive company trying to track you,
|
||||||
|
sell AI tools, or measure everything you do for profit. If that is not enough,
|
||||||
|
GitLab or Codeberg are still better than the alternative.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><img src="/assets/img/monopoly.svg" alt=""></div>
|
||||||
|
<h3>GitHub is a monopoly</h3>
|
||||||
|
<p>
|
||||||
|
Everyone puts everything on GitHub now: code, issues, releases, docs, packages,
|
||||||
|
websites, actions, discussions, everything. That is way too much power for one
|
||||||
|
website owned by one company — especially when that company is Microsoft.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dxd-feature">
|
||||||
|
<div class="icon"><img src="/assets/img/selfhost.svg" alt=""></div>
|
||||||
|
<h3>Self-hosting is better</h3>
|
||||||
|
<p>
|
||||||
|
This place exists because I wanted my own git host. No giant platform, no
|
||||||
|
corporate branding, no pretending this is the future of software. Just my own
|
||||||
|
little forge on my own domain, because running your own stuff is cool. Want your
|
||||||
|
own? Look up <a href="https://forgejo.org" rel="noreferrer noopener" target="_blank">Forgejo</a> — it is great.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
1
themes/_base-forgejo-auto.css
Normal file
1
themes/_base-forgejo-dark.css
Normal file
1
themes/_base-forgejo-light.css
Normal file
406
themes/theme-aurora-dark.css
Normal file
|
|
@ -0,0 +1,406 @@
|
||||||
|
/*
|
||||||
|
* theme-aurora-dark.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Colourful dark + soft-UI.
|
||||||
|
* True neutral-charcoal base (no indigo/purple cast) so it reads as a real
|
||||||
|
* dark theme, with a vivid blue primary and teal links. The neumorphic
|
||||||
|
* highlight is kept subtle since the base is dark.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-dark.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: dark;
|
||||||
|
--is-dark-theme: true;
|
||||||
|
|
||||||
|
/* ── Typography ─────────────────────────────────────────────────── */
|
||||||
|
--fonts-proportional: "Inter", "SF Pro Text", -apple-system, "Segoe UI",
|
||||||
|
"Noto Sans", system-ui, sans-serif !important;
|
||||||
|
--fonts-monospace: "JetBrains Mono", "Cascadia Code", "Fira Code",
|
||||||
|
"SF Mono", "Source Code Pro", ui-monospace, "DejaVu Sans Mono",
|
||||||
|
Consolas, monospace !important;
|
||||||
|
|
||||||
|
/* ── Neutral charcoal ramp (dark → light) ───────────────────────── */
|
||||||
|
--steel-900: #121314;
|
||||||
|
--steel-850: #121314;
|
||||||
|
--steel-800: #191a1c;
|
||||||
|
--steel-750: #212224;
|
||||||
|
--steel-700: #212224;
|
||||||
|
--steel-650: #2e3033;
|
||||||
|
--steel-600: #3d4045;
|
||||||
|
--steel-550: #4d5158;
|
||||||
|
--steel-500: #6b7079;
|
||||||
|
--steel-450: #8a8f98;
|
||||||
|
--steel-400: #a8adb5;
|
||||||
|
--steel-350: #c6cad0;
|
||||||
|
--steel-300: #c6cad0;
|
||||||
|
--steel-250: #dfe1e5;
|
||||||
|
--steel-200: #dfe1e5;
|
||||||
|
--steel-150: #edeef1;
|
||||||
|
--steel-100: #f7f8fa;
|
||||||
|
|
||||||
|
/* ── Primary: vivid blue ────────────────────────────────────────── */
|
||||||
|
--color-primary: #3b82f6;
|
||||||
|
--color-primary-contrast: #0b1220;
|
||||||
|
--color-primary-dark-1: #60a5fa;
|
||||||
|
--color-primary-dark-2: #60a5fa;
|
||||||
|
--color-primary-dark-3: #93c5fd;
|
||||||
|
--color-primary-dark-4: #93c5fd;
|
||||||
|
--color-primary-dark-5: #bfdbfe;
|
||||||
|
--color-primary-dark-6: #bfdbfe;
|
||||||
|
--color-primary-dark-7: #dbeafe;
|
||||||
|
--color-primary-light-1: #2563eb;
|
||||||
|
--color-primary-light-2: #1d4ed8;
|
||||||
|
--color-primary-light-3: #1d4ed8;
|
||||||
|
--color-primary-light-4: #1e40af;
|
||||||
|
--color-primary-light-5: #1e3a8a;
|
||||||
|
--color-primary-light-6: #172f6e;
|
||||||
|
--color-primary-light-7: #122452;
|
||||||
|
--color-primary-alpha-10: rgba(59, 130, 246, 0.10);
|
||||||
|
--color-primary-alpha-20: rgba(59, 130, 246, 0.20);
|
||||||
|
--color-primary-alpha-30: rgba(59, 130, 246, 0.30);
|
||||||
|
--color-primary-alpha-40: rgba(59, 130, 246, 0.40);
|
||||||
|
--color-primary-alpha-50: rgba(59, 130, 246, 0.50);
|
||||||
|
--color-primary-alpha-60: rgba(59, 130, 246, 0.60);
|
||||||
|
--color-primary-alpha-70: rgba(59, 130, 246, 0.70);
|
||||||
|
--color-primary-alpha-80: rgba(59, 130, 246, 0.80);
|
||||||
|
--color-primary-alpha-90: rgba(59, 130, 246, 0.90);
|
||||||
|
--color-primary-hover: #60a5fa;
|
||||||
|
--color-primary-active: #2563eb;
|
||||||
|
|
||||||
|
/* ── Secondary ──────────────────────────────────────────────────── */
|
||||||
|
--color-secondary: #2e3033;
|
||||||
|
--color-secondary-dark-1: #4d5158;
|
||||||
|
--color-secondary-dark-2: #6b7079;
|
||||||
|
--color-secondary-dark-3: #8a8f98;
|
||||||
|
--color-secondary-dark-4: #8a8f98;
|
||||||
|
--color-secondary-dark-5: #a8adb5;
|
||||||
|
--color-secondary-dark-6: #a8adb5;
|
||||||
|
--color-secondary-dark-7: #c6cad0;
|
||||||
|
--color-secondary-dark-8: #c6cad0;
|
||||||
|
--color-secondary-dark-9: #dfe1e5;
|
||||||
|
--color-secondary-dark-10: #edeef1;
|
||||||
|
--color-secondary-dark-11: #edeef1;
|
||||||
|
--color-secondary-dark-12: #f7f8fa;
|
||||||
|
--color-secondary-dark-13: #f7f8fa;
|
||||||
|
--color-secondary-light-1: #3d4045;
|
||||||
|
--color-secondary-light-2: #212224;
|
||||||
|
--color-secondary-light-3: #212224;
|
||||||
|
--color-secondary-light-4: #191a1c;
|
||||||
|
--color-secondary-alpha-10: rgba(46, 48, 51, 0.10);
|
||||||
|
--color-secondary-alpha-20: rgba(46, 48, 51, 0.20);
|
||||||
|
--color-secondary-alpha-30: rgba(46, 48, 51, 0.30);
|
||||||
|
--color-secondary-alpha-40: rgba(46, 48, 51, 0.40);
|
||||||
|
--color-secondary-alpha-50: rgba(46, 48, 51, 0.50);
|
||||||
|
--color-secondary-alpha-60: rgba(46, 48, 51, 0.60);
|
||||||
|
--color-secondary-alpha-70: rgba(46, 48, 51, 0.70);
|
||||||
|
--color-secondary-alpha-80: rgba(46, 48, 51, 0.80);
|
||||||
|
--color-secondary-alpha-90: rgba(46, 48, 51, 0.90);
|
||||||
|
--color-secondary-hover: #3d4045;
|
||||||
|
--color-secondary-active: #4d5158;
|
||||||
|
|
||||||
|
/* ── Named accents: vivid, no purple ────────────────────────────── */
|
||||||
|
--color-red: #f87171;
|
||||||
|
--color-orange: #fb923c;
|
||||||
|
--color-yellow: #fbbf24;
|
||||||
|
--color-olive: #a3e635;
|
||||||
|
--color-green: #4ade80;
|
||||||
|
--color-teal: #2dd4bf;
|
||||||
|
--color-blue: #60a5fa;
|
||||||
|
--color-violet: #38bdf8;
|
||||||
|
--color-purple: #7dd3fc;
|
||||||
|
--color-pink: #f472b6;
|
||||||
|
--color-brown: #d1a684;
|
||||||
|
--color-grey: #94a3b8;
|
||||||
|
--color-black: #212224;
|
||||||
|
|
||||||
|
--color-red-light: #fca5a5;
|
||||||
|
--color-orange-light: #fdba74;
|
||||||
|
--color-yellow-light: #fcd34d;
|
||||||
|
--color-olive-light: #bef264;
|
||||||
|
--color-green-light: #86efac;
|
||||||
|
--color-teal-light: #5eead4;
|
||||||
|
--color-blue-light: #93c5fd;
|
||||||
|
--color-violet-light: #7dd3fc;
|
||||||
|
--color-purple-light: #bae6fd;
|
||||||
|
--color-pink-light: #f9a8d4;
|
||||||
|
--color-brown-light: #e3c4a8;
|
||||||
|
--color-grey-light: #cbd5e1;
|
||||||
|
--color-black-light: #2e3033;
|
||||||
|
|
||||||
|
--color-red-dark-1: #dc2626;
|
||||||
|
--color-orange-dark-1: #ea580c;
|
||||||
|
--color-yellow-dark-1: #d97706;
|
||||||
|
--color-olive-dark-1: #65a30d;
|
||||||
|
--color-green-dark-1: #16a34a;
|
||||||
|
--color-teal-dark-1: #0d9488;
|
||||||
|
--color-blue-dark-1: #2563eb;
|
||||||
|
--color-violet-dark-1: #0ea5e9;
|
||||||
|
--color-purple-dark-1: #38bdf8;
|
||||||
|
--color-pink-dark-1: #db2777;
|
||||||
|
--color-brown-dark-1: #a8714a;
|
||||||
|
--color-grey-dark-1: #64748b;
|
||||||
|
--color-black-dark-1: #121314;
|
||||||
|
|
||||||
|
--color-red-dark-2: #b91c1c;
|
||||||
|
--color-orange-dark-2: #c2410c;
|
||||||
|
--color-yellow-dark-2: #b45309;
|
||||||
|
--color-olive-dark-2: #4d7c0f;
|
||||||
|
--color-green-dark-2: #15803d;
|
||||||
|
--color-teal-dark-2: #0f766e;
|
||||||
|
--color-blue-dark-2: #1d4ed8;
|
||||||
|
--color-violet-dark-2: #0284c7;
|
||||||
|
--color-purple-dark-2: #0ea5e9;
|
||||||
|
--color-pink-dark-2: #be185d;
|
||||||
|
--color-brown-dark-2: #8a5a3a;
|
||||||
|
--color-grey-dark-2: #475569;
|
||||||
|
--color-black-dark-2: #121314;
|
||||||
|
|
||||||
|
--color-gold: #eab308;
|
||||||
|
--color-white: #f7f8fa;
|
||||||
|
--color-pure-black: #121314;
|
||||||
|
|
||||||
|
/* ── ANSI ───────────────────────────────────────────────────────── */
|
||||||
|
--color-ansi-black: #212224;
|
||||||
|
--color-ansi-red: #dc2626;
|
||||||
|
--color-ansi-green: #16a34a;
|
||||||
|
--color-ansi-yellow: #d97706;
|
||||||
|
--color-ansi-blue: #2563eb;
|
||||||
|
--color-ansi-magenta: #0ea5e9;
|
||||||
|
--color-ansi-cyan: #0d9488;
|
||||||
|
--color-ansi-white: #a8adb5;
|
||||||
|
--color-ansi-bright-black: #4d5158;
|
||||||
|
--color-ansi-bright-red: #f87171;
|
||||||
|
--color-ansi-bright-green: #4ade80;
|
||||||
|
--color-ansi-bright-yellow: #fbbf24;
|
||||||
|
--color-ansi-bright-blue: #60a5fa;
|
||||||
|
--color-ansi-bright-magenta: #38bdf8;
|
||||||
|
--color-ansi-bright-cyan: #2dd4bf;
|
||||||
|
--color-ansi-bright-white: #f7f8fa;
|
||||||
|
|
||||||
|
/* ── Diffs ──────────────────────────────────────────────────────── */
|
||||||
|
--color-diff-removed-word-bg: rgba(248, 113, 113, 0.30);
|
||||||
|
--color-diff-added-word-bg: rgba(74, 222, 128, 0.26);
|
||||||
|
--color-diff-removed-row-bg: rgba(248, 113, 113, 0.10);
|
||||||
|
--color-diff-moved-row-bg: rgba(251, 191, 36, 0.13);
|
||||||
|
--color-diff-added-row-bg: rgba(74, 222, 128, 0.10);
|
||||||
|
--color-diff-removed-row-border: rgba(248, 113, 113, 0.40);
|
||||||
|
--color-diff-moved-row-border: rgba(251, 191, 36, 0.40);
|
||||||
|
--color-diff-added-row-border: rgba(74, 222, 128, 0.40);
|
||||||
|
--color-diff-inactive: #212224;
|
||||||
|
|
||||||
|
/* ── Status ─────────────────────────────────────────────────────── */
|
||||||
|
--color-error-border: #dc2626;
|
||||||
|
--color-error-bg: #3a1f22;
|
||||||
|
--color-error-bg-active: #4a262a;
|
||||||
|
--color-error-bg-hover: #4a262a;
|
||||||
|
--color-error-text: #fca5a5;
|
||||||
|
--color-success-border: #16a34a;
|
||||||
|
--color-success-bg: #14301f;
|
||||||
|
--color-success-text: #86efac;
|
||||||
|
--color-warning-border: #d97706;
|
||||||
|
--color-warning-bg: #37280f;
|
||||||
|
--color-warning-text: #fcd34d;
|
||||||
|
--color-info-border: #2563eb;
|
||||||
|
--color-info-bg: #16233f;
|
||||||
|
--color-info-text: #93c5fd;
|
||||||
|
|
||||||
|
/* ── Badges ─────────────────────────────────────────────────────── */
|
||||||
|
--color-red-badge: #f87171;
|
||||||
|
--color-red-badge-bg: rgba(248, 113, 113, 0.14);
|
||||||
|
--color-red-badge-hover-bg: rgba(248, 113, 113, 0.26);
|
||||||
|
--color-green-badge: #4ade80;
|
||||||
|
--color-green-badge-bg: rgba(74, 222, 128, 0.14);
|
||||||
|
--color-green-badge-hover-bg: rgba(74, 222, 128, 0.26);
|
||||||
|
--color-yellow-badge: #fbbf24;
|
||||||
|
--color-yellow-badge-bg: rgba(251, 191, 36, 0.14);
|
||||||
|
--color-yellow-badge-hover-bg: rgba(251, 191, 36, 0.26);
|
||||||
|
--color-orange-badge: #fb923c;
|
||||||
|
--color-orange-badge-bg: rgba(251, 146, 60, 0.14);
|
||||||
|
--color-orange-badge-hover-bg: rgba(251, 146, 60, 0.26);
|
||||||
|
|
||||||
|
/* ── Thin accents / danger ──────────────────────────────────────── */
|
||||||
|
--color-thin-green: #4ade80;
|
||||||
|
--color-thin-red: #f87171;
|
||||||
|
--color-thin-purple: #38bdf8;
|
||||||
|
--color-thin-orange: #fb923c;
|
||||||
|
--color-thin-red-highlight: #fca5a5;
|
||||||
|
--color-danger-bg: #3a1f22;
|
||||||
|
|
||||||
|
/* ── Surfaces ───────────────────────────────────────────────────── */
|
||||||
|
--color-body: #191a1c;
|
||||||
|
--color-box-header: #212224;
|
||||||
|
--color-box-body: #212224;
|
||||||
|
--color-box-body-highlight: #2e3033;
|
||||||
|
--color-text-dark: #0b0c0d;
|
||||||
|
--color-text: #e6e7e9;
|
||||||
|
--color-text-light: #c6cad0;
|
||||||
|
--color-text-light-1: #c6cad0;
|
||||||
|
--color-text-light-2: #a8adb5;
|
||||||
|
--color-text-light-3: #8a8f98;
|
||||||
|
--color-footer: #121314;
|
||||||
|
--color-timeline: #2e3033;
|
||||||
|
--color-input-text: #e6e7e9;
|
||||||
|
--color-input-background: #141517;
|
||||||
|
--color-input-toggle-background: #2e3033;
|
||||||
|
--color-input-border: #3d4045;
|
||||||
|
--color-input-border-hover: #4d5158;
|
||||||
|
--color-header-wrapper: #121314;
|
||||||
|
--color-header-wrapper-transparent: rgba(18, 19, 20, 0);
|
||||||
|
--color-light: rgba(0, 0, 0, 0.30);
|
||||||
|
--color-light-border: rgba(255, 255, 255, 0.10);
|
||||||
|
--color-hover: #2e3033;
|
||||||
|
--color-active: #383a3e;
|
||||||
|
--color-menu: #212224;
|
||||||
|
--color-card: #212224;
|
||||||
|
--fancy-card-bg: #212224;
|
||||||
|
--fancy-card-border: #2e3033;
|
||||||
|
--color-markup-table-row: rgba(255, 255, 255, 0.03);
|
||||||
|
--color-markup-code-block: #141517;
|
||||||
|
--color-markup-code-inline: #212224;
|
||||||
|
--color-button: #212224;
|
||||||
|
--color-code-bg: #141517;
|
||||||
|
--color-shadow: rgba(0, 0, 0, 0.45);
|
||||||
|
--color-secondary-bg: #212224;
|
||||||
|
--color-text-focus: #f7f8fa;
|
||||||
|
--color-expand-button: #2e3033;
|
||||||
|
--color-placeholder-text: #5f646c;
|
||||||
|
--color-editor-line-highlight: #212224;
|
||||||
|
--color-project-board-bg: #212224;
|
||||||
|
--color-project-board-dark-label: #8a8f98;
|
||||||
|
--color-caret: #3b82f6;
|
||||||
|
--color-reaction-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-reaction-active-bg: rgba(59, 130, 246, 0.22);
|
||||||
|
--color-reaction-hover-bg: rgba(59, 130, 246, 0.32);
|
||||||
|
--color-tooltip-text: #e6e7e9;
|
||||||
|
--color-tooltip-bg: #121314;
|
||||||
|
--color-nav-bg: #121314;
|
||||||
|
--color-nav-hover-bg: #2e3033;
|
||||||
|
--color-secondary-nav-bg: #191a1c;
|
||||||
|
--color-label-text: #e6e7e9;
|
||||||
|
--color-label-bg: #2e3033;
|
||||||
|
--color-label-hover-bg: #3d4045;
|
||||||
|
--color-label-active-bg: #4d5158;
|
||||||
|
--color-label-bg-alt: #3d4045;
|
||||||
|
--color-accent: #3b82f6;
|
||||||
|
--color-small-accent: #2dd4bf;
|
||||||
|
--color-highlight-fg: #60a5fa;
|
||||||
|
--color-highlight-bg: rgba(59, 130, 246, 0.16);
|
||||||
|
--color-overlay-backdrop: rgba(18, 19, 20, 0.80);
|
||||||
|
--color-selection-bg: rgba(59, 130, 246, 0.30);
|
||||||
|
--color-selection-fg: #f7f8fa;
|
||||||
|
--checkerboard-color-1: #212224;
|
||||||
|
--checkerboard-color-2: #141517;
|
||||||
|
--color-indicator-offline: #6b7079;
|
||||||
|
--color-indicator-offline-20: rgba(107, 112, 121, 0.20);
|
||||||
|
--color-indicator-idle: #4ade80;
|
||||||
|
--color-indicator-idle-20: rgba(74, 222, 128, 0.20);
|
||||||
|
--color-indicator-active: #60a5fa;
|
||||||
|
--color-indicator-active-20: rgba(96, 165, 250, 0.20);
|
||||||
|
|
||||||
|
/* ── Console ────────────────────────────────────────────────────── */
|
||||||
|
--color-console-fg: #e6e7e9;
|
||||||
|
--color-console-fg-subtle: #8a8f98;
|
||||||
|
--color-console-bg: #0e0f10;
|
||||||
|
--color-console-border: #212224;
|
||||||
|
--color-console-hover-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-console-active-bg: #3d4045;
|
||||||
|
--color-console-menu-bg: #212224;
|
||||||
|
--color-console-menu-border: #4d5158;
|
||||||
|
|
||||||
|
/* ── Neumorphism (dark base → stronger dark shadow) ─────────────── */
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.72);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.07);
|
||||||
|
--nm-divider-color: rgba(255, 255, 255, 0.07);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Aurora dark flavour
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #191a1c !important;
|
||||||
|
color: #e6e7e9 !important;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
a { color: #2dd4bf !important; text-decoration: none !important; }
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #5eead4 !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
.text.grey a,
|
||||||
|
.meta a,
|
||||||
|
.commit-header a,
|
||||||
|
.breadcrumb a,
|
||||||
|
.ui.breadcrumb a,
|
||||||
|
.sha,
|
||||||
|
.commit-sha { color: #8a8f98 !important; }
|
||||||
|
.text.grey a:hover,
|
||||||
|
.meta a:hover,
|
||||||
|
.commit-header a:hover,
|
||||||
|
.breadcrumb a:hover,
|
||||||
|
.ui.breadcrumb a:hover { color: #5eead4 !important; }
|
||||||
|
|
||||||
|
.navbar .brand,
|
||||||
|
.navbar .brand:hover { color: #f7f8fa !important; font-weight: 600; }
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(59, 130, 246, 0.30);
|
||||||
|
color: #f7f8fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sha,
|
||||||
|
.commit-sha,
|
||||||
|
.commit-id-short,
|
||||||
|
.version,
|
||||||
|
.ui.label.sha { font-family: var(--fonts-monospace) !important; }
|
||||||
|
|
||||||
|
/* Colourful syntax highlighting */
|
||||||
|
.chroma { background: #141517 !important; }
|
||||||
|
.chroma .err { color: #f87171; background: transparent; }
|
||||||
|
.chroma .c, .chroma .c1, .chroma .ch, .chroma .cm,
|
||||||
|
.chroma .cs, .chroma .cp, .chroma .cpf { color: #7f858f; font-style: italic; }
|
||||||
|
.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn,
|
||||||
|
.chroma .kr, .chroma .kt { color: #f87171; }
|
||||||
|
.chroma .o, .chroma .ow { color: #fb923c; }
|
||||||
|
.chroma .p { color: #a8adb5; }
|
||||||
|
.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc,
|
||||||
|
.chroma .sd, .chroma .sh, .chroma .sx { color: #4ade80; }
|
||||||
|
.chroma .se, .chroma .ss { color: #2dd4bf; }
|
||||||
|
.chroma .si, .chroma .sa { color: #fbbf24; }
|
||||||
|
.chroma .sr { color: #60a5fa; }
|
||||||
|
.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh,
|
||||||
|
.chroma .mi, .chroma .mo, .chroma .il { color: #fbbf24; }
|
||||||
|
.chroma .n, .chroma .nx, .chroma .nn, .chroma .nv,
|
||||||
|
.chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm { color: #e6e7e9; }
|
||||||
|
.chroma .na, .chroma .nb, .chroma .bp, .chroma .ni, .chroma .nl, .chroma .py { color: #fbbf24; }
|
||||||
|
.chroma .nf { color: #60a5fa; }
|
||||||
|
.chroma .nc, .chroma .ne, .chroma .nd, .chroma .nt { color: #2dd4bf; }
|
||||||
|
.chroma .no { color: #fb923c; }
|
||||||
|
.chroma .go { color: #8a8f98; }
|
||||||
|
.chroma .gp { color: #a8adb5; }
|
||||||
|
.chroma .gh { color: #60a5fa; font-weight: bold; }
|
||||||
|
.chroma .gu { color: #4ade80; }
|
||||||
|
.chroma .gt { color: #f87171; }
|
||||||
|
.chroma .gd { color: #f7f8fa; background-color: #3a1f22; }
|
||||||
|
.chroma .gi { color: #f7f8fa; background-color: #14301f; }
|
||||||
|
|
||||||
|
/* CodeMirror */
|
||||||
|
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword { color: #f87171; }
|
||||||
|
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom,
|
||||||
|
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number { color: #fbbf24; }
|
||||||
|
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def { color: #60a5fa; }
|
||||||
|
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment { color: #7f858f; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string { color: #4ade80; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 { color: #2dd4bf; }
|
||||||
|
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-paper .cm-meta,
|
||||||
|
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin,
|
||||||
|
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute { color: #fbbf24; }
|
||||||
|
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag { color: #f87171; }
|
||||||
|
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link { color: #60a5fa; }
|
||||||
396
themes/theme-aurora-light.css
Normal file
|
|
@ -0,0 +1,396 @@
|
||||||
|
/*
|
||||||
|
* theme-aurora-light.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Colourful light + soft-UI (no purple). Default theme.
|
||||||
|
* Soft slate base so the neumorphic shadows read, with a vivid blue primary
|
||||||
|
* and teal links.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-light.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: light;
|
||||||
|
--is-dark-theme: false;
|
||||||
|
|
||||||
|
/* ── Typography ─────────────────────────────────────────────────── */
|
||||||
|
--fonts-proportional: "Inter", "SF Pro Text", -apple-system, "Segoe UI",
|
||||||
|
"Noto Sans", system-ui, sans-serif !important;
|
||||||
|
--fonts-monospace: "JetBrains Mono", "Cascadia Code", "Fira Code",
|
||||||
|
"SF Mono", "Source Code Pro", ui-monospace, "DejaVu Sans Mono",
|
||||||
|
Consolas, monospace !important;
|
||||||
|
|
||||||
|
/* ── Slate neutral ramp (100 = darkest, 900 = lightest) ─────────── */
|
||||||
|
--steel-100: #20262f;
|
||||||
|
--steel-150: #2d3542;
|
||||||
|
--steel-200: #2d3542;
|
||||||
|
--steel-250: #3f4956;
|
||||||
|
--steel-300: #3f4956;
|
||||||
|
--steel-350: #5a6675;
|
||||||
|
--steel-400: #74808f;
|
||||||
|
--steel-450: #8d99a8;
|
||||||
|
--steel-500: #aab4c1;
|
||||||
|
--steel-550: #c3ccd8;
|
||||||
|
--steel-600: #d4dbe4;
|
||||||
|
--steel-650: #d4dbe4;
|
||||||
|
--steel-700: #dee4ec;
|
||||||
|
--steel-750: #e6ebf2;
|
||||||
|
--steel-800: #edf1f6;
|
||||||
|
--steel-850: #f4f7fa;
|
||||||
|
--steel-900: #f4f7fa;
|
||||||
|
|
||||||
|
/* ── Primary: vivid blue ────────────────────────────────────────── */
|
||||||
|
--color-primary: #2563eb;
|
||||||
|
--color-primary-contrast: #f8fafc;
|
||||||
|
--color-primary-dark-1: #2563eb;
|
||||||
|
--color-primary-dark-2: #1d4ed8;
|
||||||
|
--color-primary-dark-3: #1d4ed8;
|
||||||
|
--color-primary-dark-4: #1e40af;
|
||||||
|
--color-primary-dark-5: #1e40af;
|
||||||
|
--color-primary-dark-6: #172f6e;
|
||||||
|
--color-primary-dark-7: #122452;
|
||||||
|
--color-primary-light-1: #3b82f6;
|
||||||
|
--color-primary-light-2: #60a5fa;
|
||||||
|
--color-primary-light-3: #60a5fa;
|
||||||
|
--color-primary-light-4: #93c5fd;
|
||||||
|
--color-primary-light-5: #bfdbfe;
|
||||||
|
--color-primary-light-6: #dbeafe;
|
||||||
|
--color-primary-light-7: #eff6ff;
|
||||||
|
--color-primary-alpha-10: rgba(37, 99, 235, 0.10);
|
||||||
|
--color-primary-alpha-20: rgba(37, 99, 235, 0.20);
|
||||||
|
--color-primary-alpha-30: rgba(37, 99, 235, 0.30);
|
||||||
|
--color-primary-alpha-40: rgba(37, 99, 235, 0.40);
|
||||||
|
--color-primary-alpha-50: rgba(37, 99, 235, 0.50);
|
||||||
|
--color-primary-alpha-60: rgba(37, 99, 235, 0.60);
|
||||||
|
--color-primary-alpha-70: rgba(37, 99, 235, 0.70);
|
||||||
|
--color-primary-alpha-80: rgba(37, 99, 235, 0.80);
|
||||||
|
--color-primary-alpha-90: rgba(37, 99, 235, 0.90);
|
||||||
|
--color-primary-hover: #1d4ed8;
|
||||||
|
--color-primary-active: #1e40af;
|
||||||
|
|
||||||
|
/* ── Secondary slate ────────────────────────────────────────────── */
|
||||||
|
--color-secondary: #c3ccd8;
|
||||||
|
--color-secondary-dark-1: #c3ccd8;
|
||||||
|
--color-secondary-dark-2: #aab4c1;
|
||||||
|
--color-secondary-dark-3: #aab4c1;
|
||||||
|
--color-secondary-dark-4: #8d99a8;
|
||||||
|
--color-secondary-dark-5: #8d99a8;
|
||||||
|
--color-secondary-dark-6: #74808f;
|
||||||
|
--color-secondary-dark-7: #74808f;
|
||||||
|
--color-secondary-dark-8: #5a6675;
|
||||||
|
--color-secondary-dark-9: #5a6675;
|
||||||
|
--color-secondary-dark-10: #3f4956;
|
||||||
|
--color-secondary-dark-11: #3f4956;
|
||||||
|
--color-secondary-dark-12: #2d3542;
|
||||||
|
--color-secondary-dark-13: #2d3542;
|
||||||
|
--color-secondary-light-1: #c3ccd8;
|
||||||
|
--color-secondary-light-2: #d4dbe4;
|
||||||
|
--color-secondary-light-3: #d4dbe4;
|
||||||
|
--color-secondary-light-4: #dee4ec;
|
||||||
|
--color-secondary-alpha-10: rgba(195, 204, 216, 0.10);
|
||||||
|
--color-secondary-alpha-20: rgba(195, 204, 216, 0.20);
|
||||||
|
--color-secondary-alpha-30: rgba(195, 204, 216, 0.30);
|
||||||
|
--color-secondary-alpha-40: rgba(195, 204, 216, 0.40);
|
||||||
|
--color-secondary-alpha-50: rgba(195, 204, 216, 0.50);
|
||||||
|
--color-secondary-alpha-60: rgba(195, 204, 216, 0.60);
|
||||||
|
--color-secondary-alpha-70: rgba(195, 204, 216, 0.70);
|
||||||
|
--color-secondary-alpha-80: rgba(195, 204, 216, 0.80);
|
||||||
|
--color-secondary-alpha-90: rgba(195, 204, 216, 0.90);
|
||||||
|
--color-secondary-hover: #aab4c1;
|
||||||
|
--color-secondary-active: #8d99a8;
|
||||||
|
|
||||||
|
/* ── Named accents: vivid, no purple ────────────────────────────── */
|
||||||
|
--color-red: #dc2626;
|
||||||
|
--color-orange: #ea580c;
|
||||||
|
--color-yellow: #d97706;
|
||||||
|
--color-olive: #65a30d;
|
||||||
|
--color-green: #16a34a;
|
||||||
|
--color-teal: #0d9488;
|
||||||
|
--color-blue: #2563eb;
|
||||||
|
--color-violet: #0ea5e9;
|
||||||
|
--color-purple: #38bdf8;
|
||||||
|
--color-pink: #db2777;
|
||||||
|
--color-brown: #a8714a;
|
||||||
|
--color-grey: #64748b;
|
||||||
|
--color-black: #20262f;
|
||||||
|
|
||||||
|
--color-red-light: #f87171;
|
||||||
|
--color-orange-light: #fb923c;
|
||||||
|
--color-yellow-light: #fbbf24;
|
||||||
|
--color-olive-light: #a3e635;
|
||||||
|
--color-green-light: #4ade80;
|
||||||
|
--color-teal-light: #2dd4bf;
|
||||||
|
--color-blue-light: #60a5fa;
|
||||||
|
--color-violet-light: #38bdf8;
|
||||||
|
--color-purple-light: #7dd3fc;
|
||||||
|
--color-pink-light: #f472b6;
|
||||||
|
--color-brown-light: #d1a684;
|
||||||
|
--color-grey-light: #94a3b8;
|
||||||
|
--color-black-light: #2d3542;
|
||||||
|
|
||||||
|
--color-red-dark-1: #b91c1c;
|
||||||
|
--color-orange-dark-1: #c2410c;
|
||||||
|
--color-yellow-dark-1: #b45309;
|
||||||
|
--color-olive-dark-1: #4d7c0f;
|
||||||
|
--color-green-dark-1: #15803d;
|
||||||
|
--color-teal-dark-1: #0f766e;
|
||||||
|
--color-blue-dark-1: #1d4ed8;
|
||||||
|
--color-violet-dark-1: #0284c7;
|
||||||
|
--color-purple-dark-1: #0ea5e9;
|
||||||
|
--color-pink-dark-1: #be185d;
|
||||||
|
--color-brown-dark-1: #8a5a3a;
|
||||||
|
--color-grey-dark-1: #475569;
|
||||||
|
--color-black-dark-1: #1a1f27;
|
||||||
|
|
||||||
|
--color-red-dark-2: #991b1b;
|
||||||
|
--color-orange-dark-2: #9a3412;
|
||||||
|
--color-yellow-dark-2: #92400e;
|
||||||
|
--color-olive-dark-2: #3f6212;
|
||||||
|
--color-green-dark-2: #166534;
|
||||||
|
--color-teal-dark-2: #115e59;
|
||||||
|
--color-blue-dark-2: #1e40af;
|
||||||
|
--color-violet-dark-2: #0369a1;
|
||||||
|
--color-purple-dark-2: #0284c7;
|
||||||
|
--color-pink-dark-2: #9d174d;
|
||||||
|
--color-brown-dark-2: #6f4830;
|
||||||
|
--color-grey-dark-2: #334155;
|
||||||
|
--color-black-dark-2: #1a1f27;
|
||||||
|
|
||||||
|
--color-gold: #ca8a04;
|
||||||
|
--color-white: #f8fafc;
|
||||||
|
--color-pure-black: #1a1f27;
|
||||||
|
|
||||||
|
/* ── ANSI ───────────────────────────────────────────────────────── */
|
||||||
|
--color-ansi-black: #2d3542;
|
||||||
|
--color-ansi-red: #dc2626;
|
||||||
|
--color-ansi-green: #16a34a;
|
||||||
|
--color-ansi-yellow: #d97706;
|
||||||
|
--color-ansi-blue: #2563eb;
|
||||||
|
--color-ansi-magenta: #0284c7;
|
||||||
|
--color-ansi-cyan: #0d9488;
|
||||||
|
--color-ansi-white: #74808f;
|
||||||
|
--color-ansi-bright-black: #5a6675;
|
||||||
|
--color-ansi-bright-red: #f87171;
|
||||||
|
--color-ansi-bright-green: #4ade80;
|
||||||
|
--color-ansi-bright-yellow: #fbbf24;
|
||||||
|
--color-ansi-bright-blue: #60a5fa;
|
||||||
|
--color-ansi-bright-magenta: #38bdf8;
|
||||||
|
--color-ansi-bright-cyan: #2dd4bf;
|
||||||
|
--color-ansi-bright-white: #f8fafc;
|
||||||
|
|
||||||
|
/* ── Diffs ──────────────────────────────────────────────────────── */
|
||||||
|
--color-diff-removed-word-bg: #f6b4b4;
|
||||||
|
--color-diff-added-word-bg: #b6e8c3;
|
||||||
|
--color-diff-removed-row-bg: #fbe2e2;
|
||||||
|
--color-diff-moved-row-bg: #fdeecb;
|
||||||
|
--color-diff-added-row-bg: #e6f7ea;
|
||||||
|
--color-diff-removed-row-border: #ea9a9a;
|
||||||
|
--color-diff-moved-row-border: #eccb8a;
|
||||||
|
--color-diff-added-row-border: #9fd9ad;
|
||||||
|
--color-diff-inactive: #dee4ec;
|
||||||
|
|
||||||
|
/* ── Status ─────────────────────────────────────────────────────── */
|
||||||
|
--color-error-border: #eba6a6;
|
||||||
|
--color-error-bg: #fbe0e0;
|
||||||
|
--color-error-bg-active: #f6b4b4;
|
||||||
|
--color-error-bg-hover: #fbe0e0;
|
||||||
|
--color-error-text: #991b1b;
|
||||||
|
--color-success-border: #a7dcb6;
|
||||||
|
--color-success-bg: #e2f6e7;
|
||||||
|
--color-success-text: #15803d;
|
||||||
|
--color-warning-border: #eccb8a;
|
||||||
|
--color-warning-bg: #fdeecb;
|
||||||
|
--color-warning-text: #92400e;
|
||||||
|
--color-info-border: #a9c2f0;
|
||||||
|
--color-info-bg: #dfe9fd;
|
||||||
|
--color-info-text: #1e40af;
|
||||||
|
|
||||||
|
/* ── Badges ─────────────────────────────────────────────────────── */
|
||||||
|
--color-red-badge: #dc2626;
|
||||||
|
--color-red-badge-bg: rgba(220, 38, 38, 0.12);
|
||||||
|
--color-red-badge-hover-bg: rgba(220, 38, 38, 0.22);
|
||||||
|
--color-green-badge: #15803d;
|
||||||
|
--color-green-badge-bg: rgba(21, 128, 61, 0.12);
|
||||||
|
--color-green-badge-hover-bg: rgba(21, 128, 61, 0.22);
|
||||||
|
--color-yellow-badge: #b45309;
|
||||||
|
--color-yellow-badge-bg: rgba(180, 83, 9, 0.12);
|
||||||
|
--color-yellow-badge-hover-bg: rgba(180, 83, 9, 0.22);
|
||||||
|
--color-orange-badge: #ea580c;
|
||||||
|
--color-orange-badge-bg: rgba(234, 88, 12, 0.12);
|
||||||
|
--color-orange-badge-hover-bg: rgba(234, 88, 12, 0.22);
|
||||||
|
|
||||||
|
/* ── Thin accents / danger ──────────────────────────────────────── */
|
||||||
|
--color-thin-green: #16a34a;
|
||||||
|
--color-thin-red: #dc2626;
|
||||||
|
--color-thin-purple: #0284c7;
|
||||||
|
--color-thin-orange: #ea580c;
|
||||||
|
--color-thin-red-highlight: #b91c1c;
|
||||||
|
--color-danger-bg: #fbe0e0;
|
||||||
|
|
||||||
|
/* ── Surfaces ───────────────────────────────────────────────────── */
|
||||||
|
--color-body: #edf1f6;
|
||||||
|
--color-box-header: #dee4ec;
|
||||||
|
--color-box-body: #e6ebf2;
|
||||||
|
--color-box-body-highlight: #d4dbe4;
|
||||||
|
--color-text-dark: #1a1f27;
|
||||||
|
--color-text: #28303c;
|
||||||
|
--color-text-light: #363d49;
|
||||||
|
--color-text-light-1: #363d49;
|
||||||
|
--color-text-light-2: #48515f;
|
||||||
|
--color-text-light-3: #5b6472;
|
||||||
|
--color-footer: #dee4ec;
|
||||||
|
--color-timeline: #c3ccd8;
|
||||||
|
--color-input-text: #2d3542;
|
||||||
|
--color-input-background: #f4f7fa;
|
||||||
|
--color-input-toggle-background: #f4f7fa;
|
||||||
|
--color-input-border: #c3ccd8;
|
||||||
|
--color-input-border-hover: #aab4c1;
|
||||||
|
--color-header-wrapper: #e6ebf2;
|
||||||
|
--color-header-wrapper-transparent: rgba(230, 235, 242, 0);
|
||||||
|
--color-light: rgba(255, 255, 255, 0.85);
|
||||||
|
--color-light-border: rgba(32, 38, 47, 0.10);
|
||||||
|
--color-hover: #dee4ec;
|
||||||
|
--color-active: #d1d9e3;
|
||||||
|
--color-menu: #e6ebf2;
|
||||||
|
--color-card: #e6ebf2;
|
||||||
|
--fancy-card-bg: #e6ebf2;
|
||||||
|
--fancy-card-border: #d4dbe4;
|
||||||
|
--color-markup-table-row: rgba(0, 0, 0, 0.02);
|
||||||
|
--color-markup-code-block: #dee4ec;
|
||||||
|
--color-markup-code-inline: #d4dbe4;
|
||||||
|
--color-button: #e6ebf2;
|
||||||
|
--color-code-bg: #dee4ec;
|
||||||
|
--color-shadow: rgba(40, 55, 80, 0.18);
|
||||||
|
--color-secondary-bg: #e6ebf2;
|
||||||
|
--color-text-focus: #20262f;
|
||||||
|
--color-expand-button: #d4dbe4;
|
||||||
|
--color-placeholder-text: #6d7787;
|
||||||
|
--color-editor-line-highlight: #e6ebf2;
|
||||||
|
--color-project-board-bg: #e6ebf2;
|
||||||
|
--color-project-board-dark-label: #48515f;
|
||||||
|
--color-caret: #2563eb;
|
||||||
|
--color-reaction-bg: rgba(0, 0, 0, 0.04);
|
||||||
|
--color-reaction-active-bg: rgba(37, 99, 235, 0.18);
|
||||||
|
--color-reaction-hover-bg: rgba(37, 99, 235, 0.28);
|
||||||
|
--color-tooltip-text: #f8fafc;
|
||||||
|
--color-tooltip-bg: #2d3542;
|
||||||
|
--color-nav-bg: #e6ebf2;
|
||||||
|
--color-nav-hover-bg: #dee4ec;
|
||||||
|
--color-secondary-nav-bg: #edf1f6;
|
||||||
|
--color-label-text: #2d3542;
|
||||||
|
--color-label-bg: rgba(170, 180, 193, 0.55);
|
||||||
|
--color-label-hover-bg: rgba(170, 180, 193, 0.75);
|
||||||
|
--color-label-active-bg: #8d99a8;
|
||||||
|
--color-label-bg-alt: #aab4c1;
|
||||||
|
--color-accent: #2563eb;
|
||||||
|
--color-small-accent: #0d9488;
|
||||||
|
--color-highlight-fg: #1d4ed8;
|
||||||
|
--color-highlight-bg: rgba(37, 99, 235, 0.14);
|
||||||
|
--color-overlay-backdrop: rgba(45, 53, 66, 0.50);
|
||||||
|
--color-selection-bg: rgba(37, 99, 235, 0.22);
|
||||||
|
--color-selection-fg: #1a1f27;
|
||||||
|
--checkerboard-color-1: #edf1f6;
|
||||||
|
--checkerboard-color-2: #dee4ec;
|
||||||
|
--color-indicator-offline: #74808f;
|
||||||
|
--color-indicator-offline-20: rgba(116, 128, 143, 0.20);
|
||||||
|
--color-indicator-idle: #16a34a;
|
||||||
|
--color-indicator-idle-20: rgba(22, 163, 74, 0.20);
|
||||||
|
--color-indicator-active: #2563eb;
|
||||||
|
--color-indicator-active-20: rgba(37, 99, 235, 0.20);
|
||||||
|
|
||||||
|
/* ── Console (dark) ─────────────────────────────────────────────── */
|
||||||
|
--color-console-fg: #e2e8f0;
|
||||||
|
--color-console-fg-subtle: #98a2b3;
|
||||||
|
--color-console-bg: #171a20;
|
||||||
|
--color-console-border: #2a2f38;
|
||||||
|
--color-console-hover-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-console-active-bg: #454d5c;
|
||||||
|
--color-console-menu-bg: #2a2f38;
|
||||||
|
--color-console-menu-border: #586172;
|
||||||
|
|
||||||
|
/* ── Neumorphism: strong enough to clearly read on slate ────────── */
|
||||||
|
--nm-shadow-dark: rgba(45, 60, 90, 0.24);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.95);
|
||||||
|
--nm-divider-color: rgba(40, 55, 80, 0.12);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Aurora light flavour
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #edf1f6 !important;
|
||||||
|
color: #2d3542 !important;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
a { color: #0f766e !important; text-decoration: none !important; }
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #115e59 !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
.text.grey a,
|
||||||
|
.meta a,
|
||||||
|
.commit-header a,
|
||||||
|
.breadcrumb a,
|
||||||
|
.ui.breadcrumb a { color: #48515f !important; }
|
||||||
|
.text.grey a:hover,
|
||||||
|
.meta a:hover,
|
||||||
|
.commit-header a:hover,
|
||||||
|
.breadcrumb a:hover { color: #115e59 !important; }
|
||||||
|
|
||||||
|
.navbar .brand,
|
||||||
|
.navbar .brand:hover { color: #20262f !important; font-weight: 600; }
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(37, 99, 235, 0.22);
|
||||||
|
color: #20262f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sha,
|
||||||
|
.commit-sha,
|
||||||
|
.commit-id-short,
|
||||||
|
.version,
|
||||||
|
.ui.label.sha { font-family: var(--fonts-monospace) !important; }
|
||||||
|
|
||||||
|
/* Colourful syntax highlighting */
|
||||||
|
.chroma { background: #dee4ec !important; }
|
||||||
|
.chroma .c, .chroma .c1, .chroma .ch, .chroma .cm,
|
||||||
|
.chroma .cs, .chroma .cp, .chroma .cpf { color: #6b7480; font-style: italic; }
|
||||||
|
.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn,
|
||||||
|
.chroma .kr, .chroma .kt { color: #dc2626; }
|
||||||
|
.chroma .o, .chroma .ow { color: #ea580c; }
|
||||||
|
.chroma .p { color: #5a6675; }
|
||||||
|
.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc,
|
||||||
|
.chroma .sd, .chroma .sh, .chroma .sx { color: #16a34a; }
|
||||||
|
.chroma .se, .chroma .ss { color: #0d9488; }
|
||||||
|
.chroma .si, .chroma .sa { color: #b45309; }
|
||||||
|
.chroma .sr { color: #2563eb; }
|
||||||
|
.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh,
|
||||||
|
.chroma .mi, .chroma .mo, .chroma .il { color: #b45309; }
|
||||||
|
.chroma .n, .chroma .nx, .chroma .nn, .chroma .nv,
|
||||||
|
.chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm { color: #2d3542; }
|
||||||
|
.chroma .na, .chroma .nb, .chroma .bp, .chroma .ni, .chroma .nl, .chroma .py { color: #b45309; }
|
||||||
|
.chroma .nf { color: #2563eb; }
|
||||||
|
.chroma .nc, .chroma .ne, .chroma .nd, .chroma .nt { color: #0d9488; }
|
||||||
|
.chroma .no { color: #ea580c; }
|
||||||
|
.chroma .gd { color: #20262f; background-color: #f6b4b4; }
|
||||||
|
.chroma .gi { color: #20262f; background-color: #b6e8c3; }
|
||||||
|
|
||||||
|
/* CodeMirror */
|
||||||
|
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword { color: #dc2626; }
|
||||||
|
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom,
|
||||||
|
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number { color: #b45309; }
|
||||||
|
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def { color: #2563eb; }
|
||||||
|
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment { color: #6b7480; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string { color: #16a34a; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 { color: #0d9488; }
|
||||||
|
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-paper .cm-meta,
|
||||||
|
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin,
|
||||||
|
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute { color: #b45309; }
|
||||||
|
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag { color: #dc2626; }
|
||||||
|
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link { color: #2563eb; }
|
||||||
31
themes/theme-forgejo-auto.css
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* theme-forgejo-auto.css (custom override)
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* The built-in Forgejo auto palette (snapshot: _base-forgejo-auto.css) plus
|
||||||
|
* the shared neumorphic/soft-UI layer, with light/dark shadow primitives that
|
||||||
|
* follow the OS colour-scheme preference.
|
||||||
|
*
|
||||||
|
* Overrides the built-in theme so the soft look applies to anyone who picked
|
||||||
|
* "forgejo-auto". Palette frozen from Forgejo 15.0.0.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-auto.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
/* Light (default) primitives */
|
||||||
|
:root {
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.16);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.95);
|
||||||
|
--nm-divider-color: rgba(0, 0, 0, 0.08);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark primitives when the OS asks for dark */
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.62);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.05);
|
||||||
|
--nm-divider-color: rgba(255, 255, 255, 0.07);
|
||||||
|
}
|
||||||
|
}
|
||||||
25
themes/theme-forgejo-dark.css
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* theme-forgejo-dark.css (custom override)
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* The built-in Forgejo dark palette, snapshotted as _base-forgejo-dark.css,
|
||||||
|
* plus the shared neumorphic/soft-UI layer.
|
||||||
|
*
|
||||||
|
* Note: this overrides the built-in theme of the same name so the soft look
|
||||||
|
* applies to anyone who picked "forgejo-dark". The palette is frozen from
|
||||||
|
* Forgejo 15.0.0; update _base-forgejo-dark.css if you upgrade Forgejo and
|
||||||
|
* want newer built-in colours.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-dark.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: dark;
|
||||||
|
--is-dark-theme: true;
|
||||||
|
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.62);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.05);
|
||||||
|
--nm-divider-color: rgba(255, 255, 255, 0.07);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
23
themes/theme-forgejo-light.css
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* theme-forgejo-light.css (custom override)
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* The built-in Forgejo light palette (snapshot: _base-forgejo-light.css)
|
||||||
|
* plus the shared neumorphic/soft-UI layer.
|
||||||
|
*
|
||||||
|
* Overrides the built-in theme so the soft look applies to anyone who picked
|
||||||
|
* "forgejo-light". Palette frozen from Forgejo 15.0.0.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-light.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: light;
|
||||||
|
--is-dark-theme: false;
|
||||||
|
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.16);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.95);
|
||||||
|
--nm-divider-color: rgba(0, 0, 0, 0.08);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
411
themes/theme-gruvbox-dark.css
Normal file
|
|
@ -0,0 +1,411 @@
|
||||||
|
/*
|
||||||
|
* theme-gruvbox-dark.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Gruvbox (dark) + soft-UI for Forgejo.
|
||||||
|
*
|
||||||
|
* Palette: morhetz/gruvbox, but the accent is pulled away from the usual
|
||||||
|
* loud yellow to a calm aqua-green, with gruvbox blue for links — closer to
|
||||||
|
* the feel of a mainstream git host while staying warm and retro.
|
||||||
|
*
|
||||||
|
* Layers: built-in dark palette → neumorphism component layer → gruvbox.
|
||||||
|
*
|
||||||
|
* Drop into: <forgejo-work-path>/custom/public/assets/css/
|
||||||
|
* Then add "gruvbox-dark" to [ui].THEMES in app.ini.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-dark.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: dark;
|
||||||
|
--is-dark-theme: true;
|
||||||
|
|
||||||
|
/* ── Typography ─────────────────────────────────────────────────── */
|
||||||
|
--fonts-proportional: "Inter", "SF Pro Text", -apple-system, "Segoe UI",
|
||||||
|
"Noto Sans", system-ui, sans-serif !important;
|
||||||
|
--fonts-monospace: "JetBrains Mono", "Cascadia Code", "Fira Code",
|
||||||
|
"SF Mono", "Source Code Pro", ui-monospace, "DejaVu Sans Mono",
|
||||||
|
Consolas, monospace !important;
|
||||||
|
|
||||||
|
/* ── Warm neutral ramp (dark → light) ───────────────────────────── */
|
||||||
|
--steel-900: #242322;
|
||||||
|
--steel-850: #242322;
|
||||||
|
--steel-800: #282828;
|
||||||
|
--steel-750: #2d2b29;
|
||||||
|
--steel-700: #2d2b29;
|
||||||
|
--steel-650: #383430;
|
||||||
|
--steel-600: #4a443f;
|
||||||
|
--steel-550: #5c554e;
|
||||||
|
--steel-500: #928374;
|
||||||
|
--steel-450: #a89984;
|
||||||
|
--steel-400: #bdae93;
|
||||||
|
--steel-350: #d5c4a1;
|
||||||
|
--steel-300: #d5c4a1;
|
||||||
|
--steel-250: #ebdbb2;
|
||||||
|
--steel-200: #ebdbb2;
|
||||||
|
--steel-150: #ebdbb2;
|
||||||
|
--steel-100: #fbf1c7;
|
||||||
|
|
||||||
|
/* ── Primary: calm gruvbox aqua-green (no more loud yellow) ─────── */
|
||||||
|
--color-primary: #8ec07c;
|
||||||
|
--color-primary-contrast: #1d2021;
|
||||||
|
--color-primary-dark-1: #a9d29a;
|
||||||
|
--color-primary-dark-2: #a9d29a;
|
||||||
|
--color-primary-dark-3: #c0ddb0;
|
||||||
|
--color-primary-dark-4: #c0ddb0;
|
||||||
|
--color-primary-dark-5: #d6e9c9;
|
||||||
|
--color-primary-dark-6: #d6e9c9;
|
||||||
|
--color-primary-dark-7: #e8f3e1;
|
||||||
|
--color-primary-light-1: #689d6a;
|
||||||
|
--color-primary-light-2: #427b58;
|
||||||
|
--color-primary-light-3: #427b58;
|
||||||
|
--color-primary-light-4: #376b4c;
|
||||||
|
--color-primary-light-5: #2f5f43;
|
||||||
|
--color-primary-light-6: #28513a;
|
||||||
|
--color-primary-light-7: #214531;
|
||||||
|
--color-primary-alpha-10: rgba(142, 192, 124, 0.10);
|
||||||
|
--color-primary-alpha-20: rgba(142, 192, 124, 0.20);
|
||||||
|
--color-primary-alpha-30: rgba(142, 192, 124, 0.30);
|
||||||
|
--color-primary-alpha-40: rgba(142, 192, 124, 0.40);
|
||||||
|
--color-primary-alpha-50: rgba(142, 192, 124, 0.50);
|
||||||
|
--color-primary-alpha-60: rgba(142, 192, 124, 0.60);
|
||||||
|
--color-primary-alpha-70: rgba(142, 192, 124, 0.70);
|
||||||
|
--color-primary-alpha-80: rgba(142, 192, 124, 0.80);
|
||||||
|
--color-primary-alpha-90: rgba(142, 192, 124, 0.90);
|
||||||
|
--color-primary-hover: #a9d29a;
|
||||||
|
--color-primary-active: #689d6a;
|
||||||
|
|
||||||
|
/* ── Secondary ──────────────────────────────────────────────────── */
|
||||||
|
--color-secondary: #383430;
|
||||||
|
--color-secondary-dark-1: #5c554e;
|
||||||
|
--color-secondary-dark-2: #928374;
|
||||||
|
--color-secondary-dark-3: #a89984;
|
||||||
|
--color-secondary-dark-4: #bdae93;
|
||||||
|
--color-secondary-dark-5: #d5c4a1;
|
||||||
|
--color-secondary-dark-6: #d5c4a1;
|
||||||
|
--color-secondary-dark-7: #ebdbb2;
|
||||||
|
--color-secondary-dark-8: #ebdbb2;
|
||||||
|
--color-secondary-dark-9: #ebdbb2;
|
||||||
|
--color-secondary-dark-10: #fbf1c7;
|
||||||
|
--color-secondary-dark-11: #fbf1c7;
|
||||||
|
--color-secondary-dark-12: #fbf1c7;
|
||||||
|
--color-secondary-dark-13: #fbf1c7;
|
||||||
|
--color-secondary-light-1: #4a443f;
|
||||||
|
--color-secondary-light-2: #2d2b29;
|
||||||
|
--color-secondary-light-3: #2d2b29;
|
||||||
|
--color-secondary-light-4: #282828;
|
||||||
|
--color-secondary-alpha-10: rgba(56, 52, 48, 0.10);
|
||||||
|
--color-secondary-alpha-20: rgba(56, 52, 48, 0.20);
|
||||||
|
--color-secondary-alpha-30: rgba(56, 52, 48, 0.30);
|
||||||
|
--color-secondary-alpha-40: rgba(56, 52, 48, 0.40);
|
||||||
|
--color-secondary-alpha-50: rgba(56, 52, 48, 0.50);
|
||||||
|
--color-secondary-alpha-60: rgba(56, 52, 48, 0.60);
|
||||||
|
--color-secondary-alpha-70: rgba(56, 52, 48, 0.70);
|
||||||
|
--color-secondary-alpha-80: rgba(56, 52, 48, 0.80);
|
||||||
|
--color-secondary-alpha-90: rgba(56, 52, 48, 0.90);
|
||||||
|
--color-secondary-hover: #4a443f;
|
||||||
|
--color-secondary-active: #5c554e;
|
||||||
|
|
||||||
|
/* ── Named accents ──────────────────────────────────────────────── */
|
||||||
|
--color-red: #fb4934;
|
||||||
|
--color-orange: #fe8019;
|
||||||
|
--color-yellow: #fabd2f;
|
||||||
|
--color-olive: #b8bb26;
|
||||||
|
--color-green: #b8bb26;
|
||||||
|
--color-teal: #8ec07c;
|
||||||
|
--color-blue: #83a598;
|
||||||
|
--color-violet: #b16286;
|
||||||
|
--color-purple: #d3869b;
|
||||||
|
--color-pink: #d3869b;
|
||||||
|
--color-brown: #b57614;
|
||||||
|
--color-grey: #928374;
|
||||||
|
--color-black: #1d2021;
|
||||||
|
|
||||||
|
--color-red-light: #ff6a5a;
|
||||||
|
--color-orange-light: #ff9d4d;
|
||||||
|
--color-yellow-light: #ffd35b;
|
||||||
|
--color-olive-light: #d5d94a;
|
||||||
|
--color-green-light: #d5d94a;
|
||||||
|
--color-teal-light: #a9d29a;
|
||||||
|
--color-blue-light: #a6c8bd;
|
||||||
|
--color-violet-light: #d3869b;
|
||||||
|
--color-purple-light: #e3a6b6;
|
||||||
|
--color-pink-light: #e3a6b6;
|
||||||
|
--color-brown-light: #d79921;
|
||||||
|
--color-grey-light: #a89984;
|
||||||
|
--color-black-light: #2d2b29;
|
||||||
|
|
||||||
|
--color-red-dark-1: #cc241d;
|
||||||
|
--color-orange-dark-1: #d65d0e;
|
||||||
|
--color-yellow-dark-1: #d79921;
|
||||||
|
--color-olive-dark-1: #98971a;
|
||||||
|
--color-green-dark-1: #98971a;
|
||||||
|
--color-teal-dark-1: #689d6a;
|
||||||
|
--color-blue-dark-1: #458588;
|
||||||
|
--color-violet-dark-1: #8f3f71;
|
||||||
|
--color-purple-dark-1: #b16286;
|
||||||
|
--color-pink-dark-1: #b16286;
|
||||||
|
--color-brown-dark-1: #8f6100;
|
||||||
|
--color-grey-dark-1: #7c6f64;
|
||||||
|
--color-black-dark-1: #1d2021;
|
||||||
|
|
||||||
|
--color-red-dark-2: #a5201a;
|
||||||
|
--color-orange-dark-2: #af3a03;
|
||||||
|
--color-yellow-dark-2: #b57614;
|
||||||
|
--color-olive-dark-2: #79740e;
|
||||||
|
--color-green-dark-2: #79740e;
|
||||||
|
--color-teal-dark-2: #427b58;
|
||||||
|
--color-blue-dark-2: #076678;
|
||||||
|
--color-violet-dark-2: #6b2f55;
|
||||||
|
--color-purple-dark-2: #8f3f71;
|
||||||
|
--color-pink-dark-2: #8f3f71;
|
||||||
|
--color-brown-dark-2: #6b4600;
|
||||||
|
--color-grey-dark-2: #665c54;
|
||||||
|
--color-black-dark-2: #1d2021;
|
||||||
|
|
||||||
|
--color-gold: #d79921;
|
||||||
|
--color-white: #fbf1c7;
|
||||||
|
--color-pure-black: #1d2021;
|
||||||
|
|
||||||
|
/* ── ANSI / terminal ────────────────────────────────────────────── */
|
||||||
|
--color-ansi-black: #282828;
|
||||||
|
--color-ansi-red: #cc241d;
|
||||||
|
--color-ansi-green: #98971a;
|
||||||
|
--color-ansi-yellow: #d79921;
|
||||||
|
--color-ansi-blue: #458588;
|
||||||
|
--color-ansi-magenta: #b16286;
|
||||||
|
--color-ansi-cyan: #689d6a;
|
||||||
|
--color-ansi-white: #a89984;
|
||||||
|
--color-ansi-bright-black: #665c54;
|
||||||
|
--color-ansi-bright-red: #fb4934;
|
||||||
|
--color-ansi-bright-green: #b8bb26;
|
||||||
|
--color-ansi-bright-yellow: #fabd2f;
|
||||||
|
--color-ansi-bright-blue: #83a598;
|
||||||
|
--color-ansi-bright-magenta: #d3869b;
|
||||||
|
--color-ansi-bright-cyan: #8ec07c;
|
||||||
|
--color-ansi-bright-white: #ebdbb2;
|
||||||
|
|
||||||
|
/* ── Diffs ──────────────────────────────────────────────────────── */
|
||||||
|
--color-diff-removed-word-bg: rgba(251, 73, 52, 0.30);
|
||||||
|
--color-diff-added-word-bg: rgba(184, 187, 38, 0.26);
|
||||||
|
--color-diff-removed-row-bg: rgba(251, 73, 52, 0.10);
|
||||||
|
--color-diff-moved-row-bg: rgba(254, 128, 25, 0.13);
|
||||||
|
--color-diff-added-row-bg: rgba(184, 187, 38, 0.10);
|
||||||
|
--color-diff-removed-row-border: rgba(251, 73, 52, 0.40);
|
||||||
|
--color-diff-moved-row-border: rgba(250, 189, 47, 0.40);
|
||||||
|
--color-diff-added-row-border: rgba(184, 187, 38, 0.40);
|
||||||
|
--color-diff-inactive: #2d2b29;
|
||||||
|
|
||||||
|
/* ── Status ─────────────────────────────────────────────────────── */
|
||||||
|
--color-error-border: #9d2f24;
|
||||||
|
--color-error-bg: #3d2523;
|
||||||
|
--color-error-bg-active: #4d2a26;
|
||||||
|
--color-error-bg-hover: #4d2a26;
|
||||||
|
--color-error-text: #f9c0b5;
|
||||||
|
--color-success-border: #7d8f2a;
|
||||||
|
--color-success-bg: #29331c;
|
||||||
|
--color-success-text: #d5d94a;
|
||||||
|
--color-warning-border: #d79921;
|
||||||
|
--color-warning-bg: #3f331a;
|
||||||
|
--color-warning-text: #ffd35b;
|
||||||
|
--color-info-border: #458588;
|
||||||
|
--color-info-bg: #24383a;
|
||||||
|
--color-info-text: #a6c8bd;
|
||||||
|
|
||||||
|
/* ── Badges ─────────────────────────────────────────────────────── */
|
||||||
|
--color-red-badge: #fb4934;
|
||||||
|
--color-red-badge-bg: rgba(251, 73, 52, 0.14);
|
||||||
|
--color-red-badge-hover-bg: rgba(251, 73, 52, 0.26);
|
||||||
|
--color-green-badge: #b8bb26;
|
||||||
|
--color-green-badge-bg: rgba(184, 187, 38, 0.14);
|
||||||
|
--color-green-badge-hover-bg: rgba(184, 187, 38, 0.26);
|
||||||
|
--color-yellow-badge: #fabd2f;
|
||||||
|
--color-yellow-badge-bg: rgba(250, 189, 47, 0.14);
|
||||||
|
--color-yellow-badge-hover-bg: rgba(250, 189, 47, 0.26);
|
||||||
|
--color-orange-badge: #fe8019;
|
||||||
|
--color-orange-badge-bg: rgba(254, 128, 25, 0.14);
|
||||||
|
--color-orange-badge-hover-bg: rgba(254, 128, 25, 0.26);
|
||||||
|
|
||||||
|
/* ── Thin accents / danger ──────────────────────────────────────── */
|
||||||
|
--color-thin-green: #8ec07c;
|
||||||
|
--color-thin-red: #fb4934;
|
||||||
|
--color-thin-purple: #d3869b;
|
||||||
|
--color-thin-orange: #fe8019;
|
||||||
|
--color-thin-red-highlight: #ff6a5a;
|
||||||
|
--color-danger-bg: #3d2523;
|
||||||
|
|
||||||
|
/* ── Surfaces (kept close together so the soft shadows do the work) */
|
||||||
|
--color-body: #282828;
|
||||||
|
--color-box-header: #2d2b29;
|
||||||
|
--color-box-body: #2d2b29;
|
||||||
|
--color-box-body-highlight: #383430;
|
||||||
|
--color-text-dark: #1d2021;
|
||||||
|
--color-text: #ebdbb2;
|
||||||
|
--color-text-light: #d5c4a1;
|
||||||
|
--color-text-light-1: #d5c4a1;
|
||||||
|
--color-text-light-2: #bdae93;
|
||||||
|
--color-text-light-3: #a89984;
|
||||||
|
--color-footer: #242322;
|
||||||
|
--color-timeline: #383430;
|
||||||
|
--color-input-text: #ebdbb2;
|
||||||
|
--color-input-background: #232221;
|
||||||
|
--color-input-toggle-background: #383430;
|
||||||
|
--color-input-border: #4a443f;
|
||||||
|
--color-input-border-hover: #5c554e;
|
||||||
|
--color-header-wrapper: #242322;
|
||||||
|
--color-header-wrapper-transparent: rgba(36, 35, 34, 0);
|
||||||
|
--color-light: rgba(0, 0, 0, 0.28);
|
||||||
|
--color-light-border: rgba(255, 255, 255, 0.10);
|
||||||
|
--color-hover: #383430;
|
||||||
|
--color-active: #423d38;
|
||||||
|
--color-menu: #2d2b29;
|
||||||
|
--color-card: #2d2b29;
|
||||||
|
--fancy-card-bg: #2d2b29;
|
||||||
|
--fancy-card-border: #383430;
|
||||||
|
--color-markup-table-row: rgba(255, 255, 255, 0.03);
|
||||||
|
--color-markup-code-block: #232221;
|
||||||
|
--color-markup-code-inline: #2d2b29;
|
||||||
|
--color-button: #2d2b29;
|
||||||
|
--color-code-bg: #232221;
|
||||||
|
--color-shadow: rgba(0, 0, 0, 0.45);
|
||||||
|
--color-secondary-bg: #2d2b29;
|
||||||
|
--color-text-focus: #fbf1c7;
|
||||||
|
--color-expand-button: #383430;
|
||||||
|
--color-placeholder-text: #7c6f64;
|
||||||
|
--color-editor-line-highlight: #2d2b29;
|
||||||
|
--color-project-board-bg: #2d2b29;
|
||||||
|
--color-project-board-dark-label: #a89984;
|
||||||
|
--color-caret: #8ec07c;
|
||||||
|
--color-reaction-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-reaction-active-bg: rgba(142, 192, 124, 0.22);
|
||||||
|
--color-reaction-hover-bg: rgba(142, 192, 124, 0.32);
|
||||||
|
--color-tooltip-text: #ebdbb2;
|
||||||
|
--color-tooltip-bg: #1d2021;
|
||||||
|
--color-nav-bg: #242322;
|
||||||
|
--color-nav-hover-bg: #383430;
|
||||||
|
--color-secondary-nav-bg: #282828;
|
||||||
|
--color-label-text: #ebdbb2;
|
||||||
|
--color-label-bg: #383430;
|
||||||
|
--color-label-hover-bg: #4a443f;
|
||||||
|
--color-label-active-bg: #5c554e;
|
||||||
|
--color-label-bg-alt: #4a443f;
|
||||||
|
--color-accent: #8ec07c;
|
||||||
|
--color-small-accent: #83a598;
|
||||||
|
--color-highlight-fg: #8ec07c;
|
||||||
|
--color-highlight-bg: rgba(142, 192, 124, 0.14);
|
||||||
|
--color-overlay-backdrop: rgba(29, 32, 33, 0.78);
|
||||||
|
--color-selection-bg: rgba(142, 192, 124, 0.30);
|
||||||
|
--color-selection-fg: #fbf1c7;
|
||||||
|
--checkerboard-color-1: #2d2b29;
|
||||||
|
--checkerboard-color-2: #232221;
|
||||||
|
--color-indicator-offline: #928374;
|
||||||
|
--color-indicator-offline-20: rgba(146, 131, 116, 0.20);
|
||||||
|
--color-indicator-idle: #b8bb26;
|
||||||
|
--color-indicator-idle-20: rgba(184, 187, 38, 0.20);
|
||||||
|
--color-indicator-active: #83a598;
|
||||||
|
--color-indicator-active-20: rgba(131, 165, 152, 0.20);
|
||||||
|
|
||||||
|
/* ── Console ────────────────────────────────────────────────────── */
|
||||||
|
--color-console-fg: #ebdbb2;
|
||||||
|
--color-console-fg-subtle: #a89984;
|
||||||
|
--color-console-bg: #1d2021;
|
||||||
|
--color-console-border: #3c3836;
|
||||||
|
--color-console-hover-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-console-active-bg: #504945;
|
||||||
|
--color-console-menu-bg: #3c3836;
|
||||||
|
--color-console-menu-border: #665c54;
|
||||||
|
|
||||||
|
/* ── Neumorphism primitives ─────────────────────────────────────── */
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.66);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.05);
|
||||||
|
--nm-divider-color: rgba(255, 255, 255, 0.06);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Gruvbox flavour
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #282828 !important;
|
||||||
|
color: #ebdbb2 !important;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links: gruvbox blue, gently shifting to the aqua accent on hover */
|
||||||
|
a { color: #83a598 !important; text-decoration: none !important; }
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #8ec07c !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
.text.grey a,
|
||||||
|
.meta a,
|
||||||
|
.commit-header a,
|
||||||
|
.breadcrumb a,
|
||||||
|
.ui.breadcrumb a,
|
||||||
|
.sha,
|
||||||
|
.commit-sha { color: #a89984 !important; }
|
||||||
|
.text.grey a:hover,
|
||||||
|
.meta a:hover,
|
||||||
|
.commit-header a:hover,
|
||||||
|
.breadcrumb a:hover,
|
||||||
|
.ui.breadcrumb a:hover { color: #8ec07c !important; }
|
||||||
|
|
||||||
|
.navbar .brand,
|
||||||
|
.navbar .brand:hover { color: #fbf1c7 !important; font-weight: 600; }
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(142, 192, 124, 0.30);
|
||||||
|
color: #fbf1c7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Monospace flavour for hashes and chrome */
|
||||||
|
.sha,
|
||||||
|
.commit-sha,
|
||||||
|
.commit-id-short,
|
||||||
|
.version,
|
||||||
|
.ui.label.sha { font-family: var(--fonts-monospace) !important; }
|
||||||
|
|
||||||
|
/* Syntax highlighting — Chroma (gruvbox) */
|
||||||
|
.chroma { background: #232221 !important; }
|
||||||
|
.chroma .err { color: #fb4934; background: transparent; }
|
||||||
|
.chroma .c, .chroma .c1, .chroma .ch, .chroma .cm,
|
||||||
|
.chroma .cs, .chroma .cp, .chroma .cpf { color: #928374; font-style: italic; }
|
||||||
|
.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn, .chroma .kr, .chroma .kt { color: #fb4934; }
|
||||||
|
.chroma .o, .chroma .ow { color: #fe8019; }
|
||||||
|
.chroma .p { color: #ebdbb2; }
|
||||||
|
.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc, .chroma .sd, .chroma .sh, .chroma .sx { color: #b8bb26; }
|
||||||
|
.chroma .se, .chroma .ss { color: #8ec07c; }
|
||||||
|
.chroma .si, .chroma .sa { color: #fabd2f; }
|
||||||
|
.chroma .sr { color: #83a598; }
|
||||||
|
.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .mo, .chroma .il { color: #d3869b; }
|
||||||
|
.chroma .n, .chroma .nx, .chroma .nn { color: #ebdbb2; }
|
||||||
|
.chroma .na, .chroma .nb, .chroma .bp, .chroma .nf, .chroma .ni, .chroma .nl, .chroma .py { color: #fabd2f; }
|
||||||
|
.chroma .nc, .chroma .ne, .chroma .nd, .chroma .nt { color: #8ec07c; }
|
||||||
|
.chroma .nv, .chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm { color: #83a598; }
|
||||||
|
.chroma .no { color: #d3869b; }
|
||||||
|
.chroma .go { color: #928374; }
|
||||||
|
.chroma .gp { color: #a89984; }
|
||||||
|
.chroma .gh { color: #8ec07c; font-weight: bold; }
|
||||||
|
.chroma .gu { color: #b8bb26; }
|
||||||
|
.chroma .gt { color: #fb4934; }
|
||||||
|
.chroma .gd { color: #fbf1c7; background-color: #4a2420; }
|
||||||
|
.chroma .gi { color: #fbf1c7; background-color: #2f3a1c; }
|
||||||
|
|
||||||
|
/* CodeMirror */
|
||||||
|
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword { color: #fb4934; }
|
||||||
|
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom,
|
||||||
|
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number { color: #d3869b; }
|
||||||
|
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def { color: #8ec07c; }
|
||||||
|
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment { color: #928374; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string { color: #b8bb26; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 { color: #fe8019; }
|
||||||
|
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-paper .cm-meta,
|
||||||
|
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin,
|
||||||
|
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute { color: #fabd2f; }
|
||||||
|
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag { color: #fb4934; }
|
||||||
|
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link { color: #83a598; }
|
||||||
391
themes/theme-gruvbox-light.css
Normal file
|
|
@ -0,0 +1,391 @@
|
||||||
|
/*
|
||||||
|
* theme-gruvbox-light.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Gruvbox (light) + soft-UI for Forgejo. Daytime companion to gruvbox-dark:
|
||||||
|
* paper-warm surfaces, a deep aqua-green accent and gruvbox blue links.
|
||||||
|
*
|
||||||
|
* Layers: built-in light palette → neumorphism component layer → gruvbox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-light.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: light;
|
||||||
|
--is-dark-theme: false;
|
||||||
|
|
||||||
|
/* ── Typography ─────────────────────────────────────────────────── */
|
||||||
|
--fonts-proportional: "Inter", "SF Pro Text", -apple-system, "Segoe UI",
|
||||||
|
"Noto Sans", system-ui, sans-serif !important;
|
||||||
|
--fonts-monospace: "JetBrains Mono", "Cascadia Code", "Fira Code",
|
||||||
|
"SF Mono", "Source Code Pro", ui-monospace, "DejaVu Sans Mono",
|
||||||
|
Consolas, monospace !important;
|
||||||
|
|
||||||
|
/* ── Neutral ramp (100 = darkest text, 900 = lightest bg) ───────── */
|
||||||
|
--steel-100: #282828;
|
||||||
|
--steel-150: #3c3836;
|
||||||
|
--steel-200: #3c3836;
|
||||||
|
--steel-250: #504945;
|
||||||
|
--steel-300: #504945;
|
||||||
|
--steel-350: #665c54;
|
||||||
|
--steel-400: #7c6f64;
|
||||||
|
--steel-450: #a89984;
|
||||||
|
--steel-500: #bdae93;
|
||||||
|
--steel-550: #d5c4a1;
|
||||||
|
--steel-600: #ebdbb2;
|
||||||
|
--steel-650: #ebdbb2;
|
||||||
|
--steel-700: #f2e5bc;
|
||||||
|
--steel-750: #f6eaca;
|
||||||
|
--steel-800: #fbf1c7;
|
||||||
|
--steel-850: #fbf1c7;
|
||||||
|
--steel-900: #fbf1c7;
|
||||||
|
|
||||||
|
/* ── Primary: deep gruvbox aqua-green ───────────────────────────── */
|
||||||
|
--color-primary: #427b58;
|
||||||
|
--color-primary-contrast: #fbf1c7;
|
||||||
|
--color-primary-dark-1: #427b58;
|
||||||
|
--color-primary-dark-2: #346a4a;
|
||||||
|
--color-primary-dark-3: #346a4a;
|
||||||
|
--color-primary-dark-4: #2c5a3e;
|
||||||
|
--color-primary-dark-5: #2c5a3e;
|
||||||
|
--color-primary-dark-6: #245034;
|
||||||
|
--color-primary-dark-7: #245034;
|
||||||
|
--color-primary-light-1: #689d6a;
|
||||||
|
--color-primary-light-2: #8ec07c;
|
||||||
|
--color-primary-light-3: #8ec07c;
|
||||||
|
--color-primary-light-4: #a9d29a;
|
||||||
|
--color-primary-light-5: #c0ddb0;
|
||||||
|
--color-primary-light-6: #d6e9c9;
|
||||||
|
--color-primary-light-7: #e8f3e1;
|
||||||
|
--color-primary-alpha-10: rgba(66, 123, 88, 0.10);
|
||||||
|
--color-primary-alpha-20: rgba(66, 123, 88, 0.20);
|
||||||
|
--color-primary-alpha-30: rgba(66, 123, 88, 0.30);
|
||||||
|
--color-primary-alpha-40: rgba(66, 123, 88, 0.40);
|
||||||
|
--color-primary-alpha-50: rgba(66, 123, 88, 0.50);
|
||||||
|
--color-primary-alpha-60: rgba(66, 123, 88, 0.60);
|
||||||
|
--color-primary-alpha-70: rgba(66, 123, 88, 0.70);
|
||||||
|
--color-primary-alpha-80: rgba(66, 123, 88, 0.80);
|
||||||
|
--color-primary-alpha-90: rgba(66, 123, 88, 0.90);
|
||||||
|
--color-primary-hover: #346a4a;
|
||||||
|
--color-primary-active: #2c5a3e;
|
||||||
|
|
||||||
|
/* ── Secondary ──────────────────────────────────────────────────── */
|
||||||
|
--color-secondary: #d5c4a1;
|
||||||
|
--color-secondary-dark-1: #d5c4a1;
|
||||||
|
--color-secondary-dark-2: #bdae93;
|
||||||
|
--color-secondary-dark-3: #bdae93;
|
||||||
|
--color-secondary-dark-4: #a89984;
|
||||||
|
--color-secondary-dark-5: #a89984;
|
||||||
|
--color-secondary-dark-6: #928374;
|
||||||
|
--color-secondary-dark-7: #928374;
|
||||||
|
--color-secondary-dark-8: #7c6f64;
|
||||||
|
--color-secondary-dark-9: #7c6f64;
|
||||||
|
--color-secondary-dark-10: #665c54;
|
||||||
|
--color-secondary-dark-11: #665c54;
|
||||||
|
--color-secondary-dark-12: #504945;
|
||||||
|
--color-secondary-dark-13: #504945;
|
||||||
|
--color-secondary-light-1: #d5c4a1;
|
||||||
|
--color-secondary-light-2: #ebdbb2;
|
||||||
|
--color-secondary-light-3: #ebdbb2;
|
||||||
|
--color-secondary-light-4: #f2e5bc;
|
||||||
|
--color-secondary-alpha-10: rgba(213, 196, 161, 0.10);
|
||||||
|
--color-secondary-alpha-20: rgba(213, 196, 161, 0.20);
|
||||||
|
--color-secondary-alpha-30: rgba(213, 196, 161, 0.30);
|
||||||
|
--color-secondary-alpha-40: rgba(213, 196, 161, 0.40);
|
||||||
|
--color-secondary-alpha-50: rgba(213, 196, 161, 0.50);
|
||||||
|
--color-secondary-alpha-60: rgba(213, 196, 161, 0.60);
|
||||||
|
--color-secondary-alpha-70: rgba(213, 196, 161, 0.70);
|
||||||
|
--color-secondary-alpha-80: rgba(213, 196, 161, 0.80);
|
||||||
|
--color-secondary-alpha-90: rgba(213, 196, 161, 0.90);
|
||||||
|
--color-secondary-hover: #bdae93;
|
||||||
|
--color-secondary-active: #a89984;
|
||||||
|
|
||||||
|
/* ── Named accents ──────────────────────────────────────────────── */
|
||||||
|
--color-red: #cc241d;
|
||||||
|
--color-orange: #d65d0e;
|
||||||
|
--color-yellow: #d79921;
|
||||||
|
--color-olive: #98971a;
|
||||||
|
--color-green: #98971a;
|
||||||
|
--color-teal: #689d6a;
|
||||||
|
--color-blue: #458588;
|
||||||
|
--color-violet: #8f3f71;
|
||||||
|
--color-purple: #b16286;
|
||||||
|
--color-pink: #d3869b;
|
||||||
|
--color-brown: #b57614;
|
||||||
|
--color-grey: #7c6f64;
|
||||||
|
--color-black: #282828;
|
||||||
|
|
||||||
|
--color-red-light: #fb4934;
|
||||||
|
--color-orange-light: #fe8019;
|
||||||
|
--color-yellow-light: #fabd2f;
|
||||||
|
--color-olive-light: #b8bb26;
|
||||||
|
--color-green-light: #b8bb26;
|
||||||
|
--color-teal-light: #8ec07c;
|
||||||
|
--color-blue-light: #83a598;
|
||||||
|
--color-violet-light: #b16286;
|
||||||
|
--color-purple-light: #d3869b;
|
||||||
|
--color-pink-light: #d3869b;
|
||||||
|
--color-brown-light: #d79921;
|
||||||
|
--color-grey-light: #a89984;
|
||||||
|
--color-black-light: #3c3836;
|
||||||
|
|
||||||
|
--color-red-dark-1: #a5201a;
|
||||||
|
--color-orange-dark-1: #af3a03;
|
||||||
|
--color-yellow-dark-1: #b57614;
|
||||||
|
--color-olive-dark-1: #79740e;
|
||||||
|
--color-green-dark-1: #79740e;
|
||||||
|
--color-teal-dark-1: #427b58;
|
||||||
|
--color-blue-dark-1: #076678;
|
||||||
|
--color-violet-dark-1: #7a2f5f;
|
||||||
|
--color-purple-dark-1: #8f3f71;
|
||||||
|
--color-pink-dark-1: #8f3f71;
|
||||||
|
--color-brown-dark-1: #8f6100;
|
||||||
|
--color-grey-dark-1: #665c54;
|
||||||
|
--color-black-dark-1: #1d2021;
|
||||||
|
|
||||||
|
--color-red-dark-2: #8f221a;
|
||||||
|
--color-orange-dark-2: #8f2f03;
|
||||||
|
--color-yellow-dark-2: #8f6100;
|
||||||
|
--color-olive-dark-2: #6b6a0a;
|
||||||
|
--color-green-dark-2: #6b6a0a;
|
||||||
|
--color-teal-dark-2: #346a4a;
|
||||||
|
--color-blue-dark-2: #055f6b;
|
||||||
|
--color-violet-dark-2: #63204c;
|
||||||
|
--color-purple-dark-2: #7a2f5f;
|
||||||
|
--color-pink-dark-2: #7a2f5f;
|
||||||
|
--color-brown-dark-2: #6b4600;
|
||||||
|
--color-grey-dark-2: #504945;
|
||||||
|
--color-black-dark-2: #1d2021;
|
||||||
|
|
||||||
|
--color-gold: #b57614;
|
||||||
|
--color-white: #fbf1c7;
|
||||||
|
--color-pure-black: #1d2021;
|
||||||
|
|
||||||
|
/* ── ANSI ───────────────────────────────────────────────────────── */
|
||||||
|
--color-ansi-black: #3c3836;
|
||||||
|
--color-ansi-red: #cc241d;
|
||||||
|
--color-ansi-green: #98971a;
|
||||||
|
--color-ansi-yellow: #d79921;
|
||||||
|
--color-ansi-blue: #458588;
|
||||||
|
--color-ansi-magenta: #b16286;
|
||||||
|
--color-ansi-cyan: #689d6a;
|
||||||
|
--color-ansi-white: #a89984;
|
||||||
|
--color-ansi-bright-black: #665c54;
|
||||||
|
--color-ansi-bright-red: #fb4934;
|
||||||
|
--color-ansi-bright-green: #b8bb26;
|
||||||
|
--color-ansi-bright-yellow: #fabd2f;
|
||||||
|
--color-ansi-bright-blue: #83a598;
|
||||||
|
--color-ansi-bright-magenta: #d3869b;
|
||||||
|
--color-ansi-bright-cyan: #8ec07c;
|
||||||
|
--color-ansi-bright-white: #ebdbb2;
|
||||||
|
|
||||||
|
/* ── Diffs ──────────────────────────────────────────────────────── */
|
||||||
|
--color-diff-removed-word-bg: #eeada4;
|
||||||
|
--color-diff-added-word-bg: #ccd18a;
|
||||||
|
--color-diff-removed-row-bg: #f7d9d3;
|
||||||
|
--color-diff-moved-row-bg: #f6e4b5;
|
||||||
|
--color-diff-added-row-bg: #e6e8c5;
|
||||||
|
--color-diff-removed-row-border: #e0948a;
|
||||||
|
--color-diff-moved-row-border: #e6c377;
|
||||||
|
--color-diff-added-row-border: #c3c877;
|
||||||
|
--color-diff-inactive: #f2e5bc;
|
||||||
|
|
||||||
|
/* ── Status ─────────────────────────────────────────────────────── */
|
||||||
|
--color-error-border: #dda49a;
|
||||||
|
--color-error-bg: #f3d0ca;
|
||||||
|
--color-error-bg-active: #eeada4;
|
||||||
|
--color-error-bg-hover: #f3d0ca;
|
||||||
|
--color-error-text: #8f221a;
|
||||||
|
--color-success-border: #c3c877;
|
||||||
|
--color-success-bg: #e6e8c5;
|
||||||
|
--color-success-text: #4a4d0a;
|
||||||
|
--color-warning-border: #e6c377;
|
||||||
|
--color-warning-bg: #f6e4b5;
|
||||||
|
--color-warning-text: #7c5200;
|
||||||
|
--color-info-border: #9cc0ba;
|
||||||
|
--color-info-bg: #d7e3df;
|
||||||
|
--color-info-text: #1f4d4f;
|
||||||
|
|
||||||
|
/* ── Badges ─────────────────────────────────────────────────────── */
|
||||||
|
--color-red-badge: #cc241d;
|
||||||
|
--color-red-badge-bg: rgba(204, 36, 29, 0.12);
|
||||||
|
--color-red-badge-hover-bg: rgba(204, 36, 29, 0.22);
|
||||||
|
--color-green-badge: #79740e;
|
||||||
|
--color-green-badge-bg: rgba(121, 116, 14, 0.12);
|
||||||
|
--color-green-badge-hover-bg: rgba(121, 116, 14, 0.22);
|
||||||
|
--color-yellow-badge: #b57614;
|
||||||
|
--color-yellow-badge-bg: rgba(181, 118, 20, 0.12);
|
||||||
|
--color-yellow-badge-hover-bg: rgba(181, 118, 20, 0.22);
|
||||||
|
--color-orange-badge: #d65d0e;
|
||||||
|
--color-orange-badge-bg: rgba(214, 93, 14, 0.12);
|
||||||
|
--color-orange-badge-hover-bg: rgba(214, 93, 14, 0.22);
|
||||||
|
|
||||||
|
/* ── Thin accents / danger ──────────────────────────────────────── */
|
||||||
|
--color-thin-green: #689d6a;
|
||||||
|
--color-thin-red: #cc241d;
|
||||||
|
--color-thin-purple: #b16286;
|
||||||
|
--color-thin-orange: #d65d0e;
|
||||||
|
--color-thin-red-highlight: #a5201a;
|
||||||
|
--color-danger-bg: #f3d0ca;
|
||||||
|
|
||||||
|
/* ── Surfaces (close together for soft depth) ───────────────────── */
|
||||||
|
--color-body: #fbf1c7;
|
||||||
|
--color-box-header: #f2e5bc;
|
||||||
|
--color-box-body: #f6eaca;
|
||||||
|
--color-box-body-highlight: #f2e5bc;
|
||||||
|
--color-text-dark: #1d2021;
|
||||||
|
--color-text: #3c3836;
|
||||||
|
--color-text-light: #504945;
|
||||||
|
--color-text-light-1: #504945;
|
||||||
|
--color-text-light-2: #665c54;
|
||||||
|
--color-text-light-3: #7c6f64;
|
||||||
|
--color-footer: #f2e5bc;
|
||||||
|
--color-timeline: #ebdbb2;
|
||||||
|
--color-input-text: #3c3836;
|
||||||
|
--color-input-background: #f4e7c4;
|
||||||
|
--color-input-toggle-background: #f4e7c4;
|
||||||
|
--color-input-border: #d5c4a1;
|
||||||
|
--color-input-border-hover: #bdae93;
|
||||||
|
--color-header-wrapper: #f2e5bc;
|
||||||
|
--color-header-wrapper-transparent: rgba(242, 229, 188, 0);
|
||||||
|
--color-light: rgba(255, 255, 255, 0.8);
|
||||||
|
--color-light-border: rgba(0, 0, 0, 0.11);
|
||||||
|
--color-hover: #f0e2b8;
|
||||||
|
--color-active: #ebdbb2;
|
||||||
|
--color-menu: #f6eaca;
|
||||||
|
--color-card: #f6eaca;
|
||||||
|
--fancy-card-bg: #f6eaca;
|
||||||
|
--fancy-card-border: #ebdbb2;
|
||||||
|
--color-markup-table-row: rgba(0, 0, 0, 0.02);
|
||||||
|
--color-markup-code-block: #f2e5bc;
|
||||||
|
--color-markup-code-inline: #f2e5bc;
|
||||||
|
--color-button: #f6eaca;
|
||||||
|
--color-code-bg: #f2e5bc;
|
||||||
|
--color-shadow: rgba(60, 56, 54, 0.20);
|
||||||
|
--color-secondary-bg: #f6eaca;
|
||||||
|
--color-text-focus: #282828;
|
||||||
|
--color-expand-button: #f2e5bc;
|
||||||
|
--color-placeholder-text: #a89984;
|
||||||
|
--color-editor-line-highlight: #f6eaca;
|
||||||
|
--color-project-board-bg: #f6eaca;
|
||||||
|
--color-project-board-dark-label: #665c54;
|
||||||
|
--color-caret: #427b58;
|
||||||
|
--color-reaction-bg: rgba(0, 0, 0, 0.04);
|
||||||
|
--color-reaction-active-bg: rgba(66, 123, 88, 0.18);
|
||||||
|
--color-reaction-hover-bg: rgba(66, 123, 88, 0.28);
|
||||||
|
--color-tooltip-text: #fbf1c7;
|
||||||
|
--color-tooltip-bg: #3c3836;
|
||||||
|
--color-nav-bg: #f2e5bc;
|
||||||
|
--color-nav-hover-bg: #f0e2b8;
|
||||||
|
--color-secondary-nav-bg: #fbf1c7;
|
||||||
|
--color-label-text: #3c3836;
|
||||||
|
--color-label-bg: rgba(189, 174, 147, 0.55);
|
||||||
|
--color-label-hover-bg: rgba(189, 174, 147, 0.75);
|
||||||
|
--color-label-active-bg: #bdae93;
|
||||||
|
--color-label-bg-alt: #d5c4a1;
|
||||||
|
--color-accent: #427b58;
|
||||||
|
--color-small-accent: #458588;
|
||||||
|
--color-highlight-fg: #427b58;
|
||||||
|
--color-highlight-bg: rgba(66, 123, 88, 0.14);
|
||||||
|
--color-overlay-backdrop: rgba(60, 56, 54, 0.55);
|
||||||
|
--color-selection-bg: rgba(66, 123, 88, 0.22);
|
||||||
|
--color-selection-fg: #1d2021;
|
||||||
|
--checkerboard-color-1: #fbf1c7;
|
||||||
|
--checkerboard-color-2: #ebdbb2;
|
||||||
|
--color-indicator-offline: #7c6f64;
|
||||||
|
--color-indicator-offline-20: rgba(124, 111, 100, 0.20);
|
||||||
|
--color-indicator-idle: #79740e;
|
||||||
|
--color-indicator-idle-20: rgba(121, 116, 14, 0.20);
|
||||||
|
--color-indicator-active: #076678;
|
||||||
|
--color-indicator-active-20: rgba(7, 102, 120, 0.20);
|
||||||
|
|
||||||
|
/* ── Console (keep the terminal dark) ───────────────────────────── */
|
||||||
|
--color-console-fg: #ebdbb2;
|
||||||
|
--color-console-fg-subtle: #a89984;
|
||||||
|
--color-console-bg: #1d2021;
|
||||||
|
--color-console-border: #3c3836;
|
||||||
|
--color-console-hover-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-console-active-bg: #504945;
|
||||||
|
--color-console-menu-bg: #3c3836;
|
||||||
|
--color-console-menu-border: #665c54;
|
||||||
|
|
||||||
|
/* ── Neumorphism primitives ─────────────────────────────────────── */
|
||||||
|
--nm-shadow-dark: rgba(74, 68, 63, 0.22);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.95);
|
||||||
|
--nm-divider-color: rgba(60, 56, 54, 0.10);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Gruvbox light flavour
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #fbf1c7 !important;
|
||||||
|
color: #3c3836 !important;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
a { color: #076678 !important; text-decoration: none !important; }
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #427b58 !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
.text.grey a,
|
||||||
|
.meta a,
|
||||||
|
.commit-header a,
|
||||||
|
.breadcrumb a,
|
||||||
|
.ui.breadcrumb a { color: #7c6f64 !important; }
|
||||||
|
.text.grey a:hover,
|
||||||
|
.meta a:hover,
|
||||||
|
.commit-header a:hover,
|
||||||
|
.breadcrumb a:hover,
|
||||||
|
.ui.breadcrumb a:hover { color: #427b58 !important; }
|
||||||
|
|
||||||
|
.navbar .brand,
|
||||||
|
.navbar .brand:hover { color: #282828 !important; font-weight: 600; }
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(66, 123, 88, 0.22);
|
||||||
|
color: #1d2021;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sha,
|
||||||
|
.commit-sha,
|
||||||
|
.commit-id-short,
|
||||||
|
.version,
|
||||||
|
.ui.label.sha { font-family: var(--fonts-monospace) !important; }
|
||||||
|
|
||||||
|
/* Syntax highlighting — Chroma (gruvbox light) */
|
||||||
|
.chroma { background: #f2e5bc !important; }
|
||||||
|
.chroma .c, .chroma .c1, .chroma .ch, .chroma .cm,
|
||||||
|
.chroma .cs, .chroma .cp, .chroma .cpf { color: #928374; font-style: italic; }
|
||||||
|
.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn, .chroma .kr, .chroma .kt { color: #9d0006; }
|
||||||
|
.chroma .o, .chroma .ow { color: #af3a03; }
|
||||||
|
.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc, .chroma .sd, .chroma .sh, .chroma .sx { color: #79740e; }
|
||||||
|
.chroma .se, .chroma .ss { color: #427b58; }
|
||||||
|
.chroma .si, .chroma .sa, .chroma .na, .chroma .nb, .chroma .nf,
|
||||||
|
.chroma .ni, .chroma .nl { color: #b57614; }
|
||||||
|
.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi,
|
||||||
|
.chroma .mo, .chroma .il, .chroma .no { color: #8f3f71; }
|
||||||
|
.chroma .nc, .chroma .ne, .chroma .nd, .chroma .nt { color: #427b58; }
|
||||||
|
.chroma .nv, .chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm { color: #076678; }
|
||||||
|
.chroma .gd { color: #282828; background-color: #f0c6c0; }
|
||||||
|
.chroma .gi { color: #282828; background-color: #daddb2; }
|
||||||
|
|
||||||
|
/* CodeMirror */
|
||||||
|
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword { color: #9d0006; }
|
||||||
|
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom,
|
||||||
|
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number { color: #8f3f71; }
|
||||||
|
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def { color: #427b58; }
|
||||||
|
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment { color: #928374; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string { color: #79740e; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 { color: #af3a03; }
|
||||||
|
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-paper .cm-meta,
|
||||||
|
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin,
|
||||||
|
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute { color: #b57614; }
|
||||||
|
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag { color: #9d0006; }
|
||||||
|
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link { color: #076678; }
|
||||||
9
themes/theme-gruvbox-soft-dark.css
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
/*
|
||||||
|
* theme-gruvbox-soft-dark.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Legacy alias — kept so users who previously selected "gruvbox-soft-dark"
|
||||||
|
* automatically get the reworked Gruvbox theme. Do not edit; edit
|
||||||
|
* theme-gruvbox-dark.css instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./theme-gruvbox-dark.css");
|
||||||
394
themes/theme-mono-dark.css
Normal file
|
|
@ -0,0 +1,394 @@
|
||||||
|
/*
|
||||||
|
* theme-mono-dark.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Monochrome dark + soft-UI. The default look: grayscale chrome, a near-white
|
||||||
|
* accent, and a shared neumorphic layer. Colour is reserved for meaning
|
||||||
|
* (success / warning / danger / diffs) rather than decoration.
|
||||||
|
*
|
||||||
|
* Layers: built-in dark palette → neumorphism → monochrome overrides.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-dark.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: dark;
|
||||||
|
--is-dark-theme: true;
|
||||||
|
|
||||||
|
/* ── Typography ─────────────────────────────────────────────────── */
|
||||||
|
--fonts-proportional: "Inter", "SF Pro Text", -apple-system, "Segoe UI",
|
||||||
|
"Noto Sans", system-ui, sans-serif !important;
|
||||||
|
--fonts-monospace: "JetBrains Mono", "Cascadia Code", "Fira Code",
|
||||||
|
"SF Mono", "Source Code Pro", ui-monospace, "DejaVu Sans Mono",
|
||||||
|
Consolas, monospace !important;
|
||||||
|
|
||||||
|
/* ── Neutral ramp (dark → light) ────────────────────────────────── */
|
||||||
|
--steel-900: #101012;
|
||||||
|
--steel-850: #101012;
|
||||||
|
--steel-800: #17171a;
|
||||||
|
--steel-750: #1d1d20;
|
||||||
|
--steel-700: #1d1d20;
|
||||||
|
--steel-650: #2c2c30;
|
||||||
|
--steel-600: #45454b;
|
||||||
|
--steel-550: #5a5a61;
|
||||||
|
--steel-500: #737379;
|
||||||
|
--steel-450: #8f8f96;
|
||||||
|
--steel-400: #ababb2;
|
||||||
|
--steel-350: #c7c7cd;
|
||||||
|
--steel-300: #c7c7cd;
|
||||||
|
--steel-250: #e3e3e8;
|
||||||
|
--steel-200: #e3e3e8;
|
||||||
|
--steel-150: #e3e3e8;
|
||||||
|
--steel-100: #f5f5f7;
|
||||||
|
|
||||||
|
/* ── Primary: near-white ────────────────────────────────────────── */
|
||||||
|
--color-primary: #dcdce1;
|
||||||
|
--color-primary-contrast: #121214;
|
||||||
|
--color-primary-dark-1: #ececf0;
|
||||||
|
--color-primary-dark-2: #ececf0;
|
||||||
|
--color-primary-dark-3: #f3f3f5;
|
||||||
|
--color-primary-dark-4: #f3f3f5;
|
||||||
|
--color-primary-dark-5: #f8f8fa;
|
||||||
|
--color-primary-dark-6: #fafafb;
|
||||||
|
--color-primary-dark-7: #fdfdfe;
|
||||||
|
--color-primary-light-1: #b6b6bd;
|
||||||
|
--color-primary-light-2: #8f8f96;
|
||||||
|
--color-primary-light-3: #8f8f96;
|
||||||
|
--color-primary-light-4: #737379;
|
||||||
|
--color-primary-light-5: #5a5a61;
|
||||||
|
--color-primary-light-6: #45454b;
|
||||||
|
--color-primary-light-7: #36363b;
|
||||||
|
--color-primary-alpha-10: rgba(220, 220, 225, 0.10);
|
||||||
|
--color-primary-alpha-20: rgba(220, 220, 225, 0.20);
|
||||||
|
--color-primary-alpha-30: rgba(220, 220, 225, 0.30);
|
||||||
|
--color-primary-alpha-40: rgba(220, 220, 225, 0.40);
|
||||||
|
--color-primary-alpha-50: rgba(220, 220, 225, 0.50);
|
||||||
|
--color-primary-alpha-60: rgba(220, 220, 225, 0.60);
|
||||||
|
--color-primary-alpha-70: rgba(220, 220, 225, 0.70);
|
||||||
|
--color-primary-alpha-80: rgba(220, 220, 225, 0.80);
|
||||||
|
--color-primary-alpha-90: rgba(220, 220, 225, 0.90);
|
||||||
|
--color-primary-hover: #ececf0;
|
||||||
|
--color-primary-active: #b6b6bd;
|
||||||
|
|
||||||
|
/* ── Secondary ──────────────────────────────────────────────────── */
|
||||||
|
--color-secondary: #2c2c30;
|
||||||
|
--color-secondary-dark-1: #5a5a61;
|
||||||
|
--color-secondary-dark-2: #737379;
|
||||||
|
--color-secondary-dark-3: #8f8f96;
|
||||||
|
--color-secondary-dark-4: #ababb2;
|
||||||
|
--color-secondary-dark-5: #c7c7cd;
|
||||||
|
--color-secondary-dark-6: #c7c7cd;
|
||||||
|
--color-secondary-dark-7: #e3e3e8;
|
||||||
|
--color-secondary-dark-8: #e3e3e8;
|
||||||
|
--color-secondary-dark-9: #e3e3e8;
|
||||||
|
--color-secondary-dark-10: #f5f5f7;
|
||||||
|
--color-secondary-dark-11: #f5f5f7;
|
||||||
|
--color-secondary-dark-12: #f5f5f7;
|
||||||
|
--color-secondary-dark-13: #f5f5f7;
|
||||||
|
--color-secondary-light-1: #36363b;
|
||||||
|
--color-secondary-light-2: #1d1d20;
|
||||||
|
--color-secondary-light-3: #1d1d20;
|
||||||
|
--color-secondary-light-4: #17171a;
|
||||||
|
--color-secondary-alpha-10: rgba(44, 44, 48, 0.10);
|
||||||
|
--color-secondary-alpha-20: rgba(44, 44, 48, 0.20);
|
||||||
|
--color-secondary-alpha-30: rgba(44, 44, 48, 0.30);
|
||||||
|
--color-secondary-alpha-40: rgba(44, 44, 48, 0.40);
|
||||||
|
--color-secondary-alpha-50: rgba(44, 44, 48, 0.50);
|
||||||
|
--color-secondary-alpha-60: rgba(44, 44, 48, 0.60);
|
||||||
|
--color-secondary-alpha-70: rgba(44, 44, 48, 0.70);
|
||||||
|
--color-secondary-alpha-80: rgba(44, 44, 48, 0.80);
|
||||||
|
--color-secondary-alpha-90: rgba(44, 44, 48, 0.90);
|
||||||
|
--color-secondary-hover: #36363b;
|
||||||
|
--color-secondary-active: #45454b;
|
||||||
|
|
||||||
|
/* ── Named accents: muted, used only for meaning ────────────────── */
|
||||||
|
--color-red: #e0736f;
|
||||||
|
--color-orange: #d9a066;
|
||||||
|
--color-yellow: #d9c069;
|
||||||
|
--color-olive: #a8bf7a;
|
||||||
|
--color-green: #9cbf87;
|
||||||
|
--color-teal: #7fb3a4;
|
||||||
|
--color-blue: #8fb0c9;
|
||||||
|
--color-violet: #a894c9;
|
||||||
|
--color-purple: #c09ac9;
|
||||||
|
--color-pink: #c99ab3;
|
||||||
|
--color-brown: #a98d72;
|
||||||
|
--color-grey: #8f8f96;
|
||||||
|
--color-black: #17171a;
|
||||||
|
|
||||||
|
--color-red-light: #ef9a97;
|
||||||
|
--color-orange-light: #e8bd8c;
|
||||||
|
--color-yellow-light: #e8d79a;
|
||||||
|
--color-olive-light: #c3d4a0;
|
||||||
|
--color-green-light: #bcd5ab;
|
||||||
|
--color-teal-light: #a3cdc1;
|
||||||
|
--color-blue-light: #b3cadd;
|
||||||
|
--color-violet-light: #c4b6dd;
|
||||||
|
--color-purple-light: #d6bcdd;
|
||||||
|
--color-pink-light: #ddbcd0;
|
||||||
|
--color-brown-light: #c4ab93;
|
||||||
|
--color-grey-light: #ababb2;
|
||||||
|
--color-black-light: #1d1d20;
|
||||||
|
|
||||||
|
--color-red-dark-1: #b85552;
|
||||||
|
--color-orange-dark-1: #b07f4a;
|
||||||
|
--color-yellow-dark-1: #b09a4a;
|
||||||
|
--color-olive-dark-1: #82965c;
|
||||||
|
--color-green-dark-1: #789660;
|
||||||
|
--color-teal-dark-1: #5f8f82;
|
||||||
|
--color-blue-dark-1: #6f8fa8;
|
||||||
|
--color-violet-dark-1: #8370a3;
|
||||||
|
--color-purple-dark-1: #9a76a3;
|
||||||
|
--color-pink-dark-1: #a3768f;
|
||||||
|
--color-brown-dark-1: #856e58;
|
||||||
|
--color-grey-dark-1: #737379;
|
||||||
|
--color-black-dark-1: #101012;
|
||||||
|
|
||||||
|
--color-red-dark-2: #8f3f3d;
|
||||||
|
--color-orange-dark-2: #8a6339;
|
||||||
|
--color-yellow-dark-2: #8a7839;
|
||||||
|
--color-olive-dark-2: #647346;
|
||||||
|
--color-green-dark-2: #5c734a;
|
||||||
|
--color-teal-dark-2: #486d63;
|
||||||
|
--color-blue-dark-2: #546d80;
|
||||||
|
--color-violet-dark-2: #65557d;
|
||||||
|
--color-purple-dark-2: #775a7d;
|
||||||
|
--color-pink-dark-2: #7d5a6d;
|
||||||
|
--color-brown-dark-2: #665444;
|
||||||
|
--color-grey-dark-2: #5a5a61;
|
||||||
|
--color-black-dark-2: #101012;
|
||||||
|
|
||||||
|
--color-gold: #b8a05a;
|
||||||
|
--color-white: #f5f5f7;
|
||||||
|
--color-pure-black: #101012;
|
||||||
|
|
||||||
|
/* ── ANSI ───────────────────────────────────────────────────────── */
|
||||||
|
--color-ansi-black: #1d1d20;
|
||||||
|
--color-ansi-red: #b85552;
|
||||||
|
--color-ansi-green: #789660;
|
||||||
|
--color-ansi-yellow: #b09a4a;
|
||||||
|
--color-ansi-blue: #6f8fa8;
|
||||||
|
--color-ansi-magenta: #9a76a3;
|
||||||
|
--color-ansi-cyan: #5f8f82;
|
||||||
|
--color-ansi-white: #ababb2;
|
||||||
|
--color-ansi-bright-black: #5a5a61;
|
||||||
|
--color-ansi-bright-red: #ef9a97;
|
||||||
|
--color-ansi-bright-green: #bcd5ab;
|
||||||
|
--color-ansi-bright-yellow: #e8d79a;
|
||||||
|
--color-ansi-bright-blue: #b3cadd;
|
||||||
|
--color-ansi-bright-magenta: #d6bcdd;
|
||||||
|
--color-ansi-bright-cyan: #a3cdc1;
|
||||||
|
--color-ansi-bright-white: #f5f5f7;
|
||||||
|
|
||||||
|
/* ── Diffs ──────────────────────────────────────────────────────── */
|
||||||
|
--color-diff-removed-word-bg: rgba(224, 115, 111, 0.30);
|
||||||
|
--color-diff-added-word-bg: rgba(156, 191, 135, 0.26);
|
||||||
|
--color-diff-removed-row-bg: rgba(224, 115, 111, 0.10);
|
||||||
|
--color-diff-moved-row-bg: rgba(217, 160, 102, 0.13);
|
||||||
|
--color-diff-added-row-bg: rgba(156, 191, 135, 0.10);
|
||||||
|
--color-diff-removed-row-border: rgba(224, 115, 111, 0.40);
|
||||||
|
--color-diff-moved-row-border: rgba(217, 192, 105, 0.40);
|
||||||
|
--color-diff-added-row-border: rgba(156, 191, 135, 0.40);
|
||||||
|
--color-diff-inactive: #1d1d20;
|
||||||
|
|
||||||
|
/* ── Status ─────────────────────────────────────────────────────── */
|
||||||
|
--color-error-border: #a05a58;
|
||||||
|
--color-error-bg: #3a2526;
|
||||||
|
--color-error-bg-active: #4a2c2d;
|
||||||
|
--color-error-bg-hover: #4a2c2d;
|
||||||
|
--color-error-text: #f0b7b5;
|
||||||
|
--color-success-border: #6f9a7e;
|
||||||
|
--color-success-bg: #25302a;
|
||||||
|
--color-success-text: #b8e0c4;
|
||||||
|
--color-warning-border: #b7a05a;
|
||||||
|
--color-warning-bg: #33301f;
|
||||||
|
--color-warning-text: #f0dfa8;
|
||||||
|
--color-info-border: #6f93ad;
|
||||||
|
--color-info-bg: #23303a;
|
||||||
|
--color-info-text: #b8d4e8;
|
||||||
|
|
||||||
|
/* ── Badges ─────────────────────────────────────────────────────── */
|
||||||
|
--color-red-badge: #e0736f;
|
||||||
|
--color-red-badge-bg: rgba(224, 115, 111, 0.14);
|
||||||
|
--color-red-badge-hover-bg: rgba(224, 115, 111, 0.26);
|
||||||
|
--color-green-badge: #9cbf87;
|
||||||
|
--color-green-badge-bg: rgba(156, 191, 135, 0.14);
|
||||||
|
--color-green-badge-hover-bg: rgba(156, 191, 135, 0.26);
|
||||||
|
--color-yellow-badge: #d9c069;
|
||||||
|
--color-yellow-badge-bg: rgba(217, 192, 105, 0.14);
|
||||||
|
--color-yellow-badge-hover-bg: rgba(217, 192, 105, 0.26);
|
||||||
|
--color-orange-badge: #d9a066;
|
||||||
|
--color-orange-badge-bg: rgba(217, 160, 102, 0.14);
|
||||||
|
--color-orange-badge-hover-bg: rgba(217, 160, 102, 0.26);
|
||||||
|
|
||||||
|
/* ── Thin accents / danger ──────────────────────────────────────── */
|
||||||
|
--color-thin-green: #9cbf87;
|
||||||
|
--color-thin-red: #e0736f;
|
||||||
|
--color-thin-purple: #c09ac9;
|
||||||
|
--color-thin-orange: #d9a066;
|
||||||
|
--color-thin-red-highlight: #ef9a97;
|
||||||
|
--color-danger-bg: #3a2526;
|
||||||
|
|
||||||
|
/* ── Surfaces ───────────────────────────────────────────────────── */
|
||||||
|
--color-body: #17171a;
|
||||||
|
--color-box-header: #1d1d20;
|
||||||
|
--color-box-body: #1d1d20;
|
||||||
|
--color-box-body-highlight: #2c2c30;
|
||||||
|
--color-text-dark: #121214;
|
||||||
|
--color-text: #e3e3e8;
|
||||||
|
--color-text-light: #c7c7cd;
|
||||||
|
--color-text-light-1: #c7c7cd;
|
||||||
|
--color-text-light-2: #ababb2;
|
||||||
|
--color-text-light-3: #8f8f96;
|
||||||
|
--color-footer: #101012;
|
||||||
|
--color-timeline: #2c2c30;
|
||||||
|
--color-input-text: #e3e3e8;
|
||||||
|
--color-input-background: #121214;
|
||||||
|
--color-input-toggle-background: #2c2c30;
|
||||||
|
--color-input-border: #45454b;
|
||||||
|
--color-input-border-hover: #5a5a61;
|
||||||
|
--color-header-wrapper: #101012;
|
||||||
|
--color-header-wrapper-transparent: rgba(16, 16, 18, 0);
|
||||||
|
--color-light: rgba(0, 0, 0, 0.30);
|
||||||
|
--color-light-border: rgba(255, 255, 255, 0.10);
|
||||||
|
--color-hover: #2c2c30;
|
||||||
|
--color-active: #36363b;
|
||||||
|
--color-menu: #1d1d20;
|
||||||
|
--color-card: #1d1d20;
|
||||||
|
--fancy-card-bg: #1d1d20;
|
||||||
|
--fancy-card-border: #2c2c30;
|
||||||
|
--color-markup-table-row: rgba(255, 255, 255, 0.03);
|
||||||
|
--color-markup-code-block: #121214;
|
||||||
|
--color-markup-code-inline: #1d1d20;
|
||||||
|
--color-button: #1d1d20;
|
||||||
|
--color-code-bg: #121214;
|
||||||
|
--color-shadow: rgba(0, 0, 0, 0.45);
|
||||||
|
--color-secondary-bg: #1d1d20;
|
||||||
|
--color-text-focus: #f5f5f7;
|
||||||
|
--color-expand-button: #2c2c30;
|
||||||
|
--color-placeholder-text: #5a5a61;
|
||||||
|
--color-editor-line-highlight: #1d1d20;
|
||||||
|
--color-project-board-bg: #1d1d20;
|
||||||
|
--color-project-board-dark-label: #8f8f96;
|
||||||
|
--color-caret: #dcdce1;
|
||||||
|
--color-reaction-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-reaction-active-bg: rgba(220, 220, 225, 0.22);
|
||||||
|
--color-reaction-hover-bg: rgba(220, 220, 225, 0.32);
|
||||||
|
--color-tooltip-text: #e3e3e8;
|
||||||
|
--color-tooltip-bg: #101012;
|
||||||
|
--color-nav-bg: #101012;
|
||||||
|
--color-nav-hover-bg: #2c2c30;
|
||||||
|
--color-secondary-nav-bg: #17171a;
|
||||||
|
--color-label-text: #e3e3e8;
|
||||||
|
--color-label-bg: #2c2c30;
|
||||||
|
--color-label-hover-bg: #36363b;
|
||||||
|
--color-label-active-bg: #45454b;
|
||||||
|
--color-label-bg-alt: #36363b;
|
||||||
|
--color-accent: #dcdce1;
|
||||||
|
--color-small-accent: #8f8f96;
|
||||||
|
--color-highlight-fg: #e3e3e8;
|
||||||
|
--color-highlight-bg: rgba(220, 220, 225, 0.12);
|
||||||
|
--color-overlay-backdrop: rgba(16, 16, 18, 0.78);
|
||||||
|
--color-selection-bg: rgba(220, 220, 225, 0.28);
|
||||||
|
--color-selection-fg: #f5f5f7;
|
||||||
|
--checkerboard-color-1: #1d1d20;
|
||||||
|
--checkerboard-color-2: #121214;
|
||||||
|
--color-indicator-offline: #737379;
|
||||||
|
--color-indicator-offline-20: rgba(115, 115, 121, 0.20);
|
||||||
|
--color-indicator-idle: #9cbf87;
|
||||||
|
--color-indicator-idle-20: rgba(156, 191, 135, 0.20);
|
||||||
|
--color-indicator-active: #8fb0c9;
|
||||||
|
--color-indicator-active-20: rgba(143, 176, 201, 0.20);
|
||||||
|
|
||||||
|
/* ── Console ────────────────────────────────────────────────────── */
|
||||||
|
--color-console-fg: #e3e3e8;
|
||||||
|
--color-console-fg-subtle: #8f8f96;
|
||||||
|
--color-console-bg: #0e0e10;
|
||||||
|
--color-console-border: #2c2c30;
|
||||||
|
--color-console-hover-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-console-active-bg: #36363b;
|
||||||
|
--color-console-menu-bg: #1d1d20;
|
||||||
|
--color-console-menu-border: #45454b;
|
||||||
|
|
||||||
|
/* ── Neumorphism ────────────────────────────────────────────────── */
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.58);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.045);
|
||||||
|
--nm-divider-color: rgba(255, 255, 255, 0.06);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Monochrome flavour
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #17171a !important;
|
||||||
|
color: #e3e3e8 !important;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
a { color: #c7c7cd !important; text-decoration: none !important; }
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #f5f5f7 !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
.text.grey a,
|
||||||
|
.meta a,
|
||||||
|
.commit-header a,
|
||||||
|
.breadcrumb a,
|
||||||
|
.ui.breadcrumb a,
|
||||||
|
.sha,
|
||||||
|
.commit-sha { color: #8f8f96 !important; }
|
||||||
|
.text.grey a:hover,
|
||||||
|
.meta a:hover,
|
||||||
|
.commit-header a:hover,
|
||||||
|
.breadcrumb a:hover { color: #f5f5f7 !important; }
|
||||||
|
|
||||||
|
.navbar .brand,
|
||||||
|
.navbar .brand:hover { color: #f5f5f7 !important; font-weight: 600; }
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(220, 220, 225, 0.28);
|
||||||
|
color: #f5f5f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sha,
|
||||||
|
.commit-sha,
|
||||||
|
.commit-id-short,
|
||||||
|
.version,
|
||||||
|
.ui.label.sha { font-family: var(--fonts-monospace) !important; }
|
||||||
|
|
||||||
|
/* Greyscale syntax highlighting — structure from weight, not colour */
|
||||||
|
.chroma { background: #121214 !important; }
|
||||||
|
.chroma .c, .chroma .c1, .chroma .ch, .chroma .cm,
|
||||||
|
.chroma .cs, .chroma .cp, .chroma .cpf { color: #6a6a72; font-style: italic; }
|
||||||
|
.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn,
|
||||||
|
.chroma .kr, .chroma .kt, .chroma .nt, .chroma .nc, .chroma .ne { color: #e3e3e8; font-weight: 600; }
|
||||||
|
.chroma .o, .chroma .ow, .chroma .p, .chroma .punctuation { color: #8f8f96; }
|
||||||
|
.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc,
|
||||||
|
.chroma .sd, .chroma .sh, .chroma .sx, .chroma .se, .chroma .ss { color: #ababb2; }
|
||||||
|
.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh,
|
||||||
|
.chroma .mi, .chroma .mo, .chroma .il { color: #c7c7cd; }
|
||||||
|
.chroma .n, .chroma .nx, .chroma .nn, .chroma .nv,
|
||||||
|
.chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm { color: #e3e3e8; }
|
||||||
|
.chroma .na, .chroma .nb, .chroma .bp, .chroma .nf,
|
||||||
|
.chroma .ni, .chroma .nl, .chroma .py, .chroma .nd { color: #dcdce1; }
|
||||||
|
.chroma .gd { color: #f5f5f7; background-color: #3a2526; }
|
||||||
|
.chroma .gi { color: #f5f5f7; background-color: #25302a; }
|
||||||
|
|
||||||
|
/* CodeMirror */
|
||||||
|
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword { color: #f5f5f7; font-weight: 600; }
|
||||||
|
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom,
|
||||||
|
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number { color: #c7c7cd; }
|
||||||
|
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def { color: #dcdce1; }
|
||||||
|
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment { color: #6a6a72; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string { color: #ababb2; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 { color: #c7c7cd; }
|
||||||
|
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-paper .cm-meta,
|
||||||
|
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin,
|
||||||
|
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute { color: #dcdce1; }
|
||||||
|
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag { color: #f5f5f7; }
|
||||||
|
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link { color: #c7c7cd; }
|
||||||
388
themes/theme-mono-light.css
Normal file
|
|
@ -0,0 +1,388 @@
|
||||||
|
/*
|
||||||
|
* theme-mono-light.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Monochrome light + soft-UI. Companion to theme-mono-dark.css.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-light.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: light;
|
||||||
|
--is-dark-theme: false;
|
||||||
|
|
||||||
|
/* ── Typography ─────────────────────────────────────────────────── */
|
||||||
|
--fonts-proportional: "Inter", "SF Pro Text", -apple-system, "Segoe UI",
|
||||||
|
"Noto Sans", system-ui, sans-serif !important;
|
||||||
|
--fonts-monospace: "JetBrains Mono", "Cascadia Code", "Fira Code",
|
||||||
|
"SF Mono", "Source Code Pro", ui-monospace, "DejaVu Sans Mono",
|
||||||
|
Consolas, monospace !important;
|
||||||
|
|
||||||
|
/* ── Neutral ramp (100 = darkest, 900 = lightest) ───────────────── */
|
||||||
|
--steel-100: #1c1c1f;
|
||||||
|
--steel-150: #2a2a2e;
|
||||||
|
--steel-200: #2a2a2e;
|
||||||
|
--steel-250: #45454b;
|
||||||
|
--steel-300: #45454b;
|
||||||
|
--steel-350: #5a5a61;
|
||||||
|
--steel-400: #737379;
|
||||||
|
--steel-450: #8f8f96;
|
||||||
|
--steel-500: #ababb2;
|
||||||
|
--steel-550: #c7c7cd;
|
||||||
|
--steel-600: #d9d9de;
|
||||||
|
--steel-650: #d9d9de;
|
||||||
|
--steel-700: #ececef;
|
||||||
|
--steel-750: #f2f2f4;
|
||||||
|
--steel-800: #f6f6f8;
|
||||||
|
--steel-850: #fafafb;
|
||||||
|
--steel-900: #fafafb;
|
||||||
|
|
||||||
|
/* ── Primary: deep graphite ─────────────────────────────────────── */
|
||||||
|
--color-primary: #2a2a2e;
|
||||||
|
--color-primary-contrast: #f6f6f8;
|
||||||
|
--color-primary-dark-1: #2a2a2e;
|
||||||
|
--color-primary-dark-2: #1c1c1f;
|
||||||
|
--color-primary-dark-3: #1c1c1f;
|
||||||
|
--color-primary-dark-4: #141416;
|
||||||
|
--color-primary-dark-5: #141416;
|
||||||
|
--color-primary-dark-6: #101012;
|
||||||
|
--color-primary-dark-7: #101012;
|
||||||
|
--color-primary-light-1: #45454b;
|
||||||
|
--color-primary-light-2: #5a5a61;
|
||||||
|
--color-primary-light-3: #5a5a61;
|
||||||
|
--color-primary-light-4: #737379;
|
||||||
|
--color-primary-light-5: #8f8f96;
|
||||||
|
--color-primary-light-6: #ababb2;
|
||||||
|
--color-primary-light-7: #c7c7cd;
|
||||||
|
--color-primary-alpha-10: rgba(42, 42, 46, 0.10);
|
||||||
|
--color-primary-alpha-20: rgba(42, 42, 46, 0.20);
|
||||||
|
--color-primary-alpha-30: rgba(42, 42, 46, 0.30);
|
||||||
|
--color-primary-alpha-40: rgba(42, 42, 46, 0.40);
|
||||||
|
--color-primary-alpha-50: rgba(42, 42, 46, 0.50);
|
||||||
|
--color-primary-alpha-60: rgba(42, 42, 46, 0.60);
|
||||||
|
--color-primary-alpha-70: rgba(42, 42, 46, 0.70);
|
||||||
|
--color-primary-alpha-80: rgba(42, 42, 46, 0.80);
|
||||||
|
--color-primary-alpha-90: rgba(42, 42, 46, 0.90);
|
||||||
|
--color-primary-hover: #1c1c1f;
|
||||||
|
--color-primary-active: #141416;
|
||||||
|
|
||||||
|
/* ── Secondary ──────────────────────────────────────────────────── */
|
||||||
|
--color-secondary: #d9d9de;
|
||||||
|
--color-secondary-dark-1: #d9d9de;
|
||||||
|
--color-secondary-dark-2: #c7c7cd;
|
||||||
|
--color-secondary-dark-3: #c7c7cd;
|
||||||
|
--color-secondary-dark-4: #ababb2;
|
||||||
|
--color-secondary-dark-5: #ababb2;
|
||||||
|
--color-secondary-dark-6: #8f8f96;
|
||||||
|
--color-secondary-dark-7: #8f8f96;
|
||||||
|
--color-secondary-dark-8: #737379;
|
||||||
|
--color-secondary-dark-9: #737379;
|
||||||
|
--color-secondary-dark-10: #5a5a61;
|
||||||
|
--color-secondary-dark-11: #5a5a61;
|
||||||
|
--color-secondary-dark-12: #45454b;
|
||||||
|
--color-secondary-dark-13: #45454b;
|
||||||
|
--color-secondary-light-1: #d9d9de;
|
||||||
|
--color-secondary-light-2: #e6e6ea;
|
||||||
|
--color-secondary-light-3: #e6e6ea;
|
||||||
|
--color-secondary-light-4: #ececef;
|
||||||
|
--color-secondary-alpha-10: rgba(217, 217, 222, 0.10);
|
||||||
|
--color-secondary-alpha-20: rgba(217, 217, 222, 0.20);
|
||||||
|
--color-secondary-alpha-30: rgba(217, 217, 222, 0.30);
|
||||||
|
--color-secondary-alpha-40: rgba(217, 217, 222, 0.40);
|
||||||
|
--color-secondary-alpha-50: rgba(217, 217, 222, 0.50);
|
||||||
|
--color-secondary-alpha-60: rgba(217, 217, 222, 0.60);
|
||||||
|
--color-secondary-alpha-70: rgba(217, 217, 222, 0.70);
|
||||||
|
--color-secondary-alpha-80: rgba(217, 217, 222, 0.80);
|
||||||
|
--color-secondary-alpha-90: rgba(217, 217, 222, 0.90);
|
||||||
|
--color-secondary-hover: #c7c7cd;
|
||||||
|
--color-secondary-active: #ababb2;
|
||||||
|
|
||||||
|
/* ── Named accents: muted ───────────────────────────────────────── */
|
||||||
|
--color-red: #c25b58;
|
||||||
|
--color-orange: #b07f4a;
|
||||||
|
--color-yellow: #b09a4a;
|
||||||
|
--color-olive: #82965c;
|
||||||
|
--color-green: #789660;
|
||||||
|
--color-teal: #5f8f82;
|
||||||
|
--color-blue: #6f8fa8;
|
||||||
|
--color-violet: #8370a3;
|
||||||
|
--color-purple: #9a76a3;
|
||||||
|
--color-pink: #a3768f;
|
||||||
|
--color-brown: #856e58;
|
||||||
|
--color-grey: #737379;
|
||||||
|
--color-black: #1c1c1f;
|
||||||
|
|
||||||
|
--color-red-light: #d98a87;
|
||||||
|
--color-orange-light: #c49a6c;
|
||||||
|
--color-yellow-light: #c4b16c;
|
||||||
|
--color-olive-light: #a3b57f;
|
||||||
|
--color-green-light: #98b080;
|
||||||
|
--color-teal-light: #85ab9f;
|
||||||
|
--color-blue-light: #8fa9bd;
|
||||||
|
--color-violet-light: #a292bd;
|
||||||
|
--color-purple-light: #b395bd;
|
||||||
|
--color-pink-light: #bd93a7;
|
||||||
|
--color-brown-light: #a08a72;
|
||||||
|
--color-grey-light: #8f8f96;
|
||||||
|
--color-black-light: #2a2a2e;
|
||||||
|
|
||||||
|
--color-red-dark-1: #a34a48;
|
||||||
|
--color-orange-dark-1: #8f663c;
|
||||||
|
--color-yellow-dark-1: #8f7d3c;
|
||||||
|
--color-olive-dark-1: #6a7a4a;
|
||||||
|
--color-green-dark-1: #627a52;
|
||||||
|
--color-teal-dark-1: #4e756b;
|
||||||
|
--color-blue-dark-1: #5a768a;
|
||||||
|
--color-violet-dark-1: #6b5b85;
|
||||||
|
--color-purple-dark-1: #7e6085;
|
||||||
|
--color-pink-dark-1: #856174;
|
||||||
|
--color-brown-dark-1: #6b5a48;
|
||||||
|
--color-grey-dark-1: #5a5a61;
|
||||||
|
--color-black-dark-1: #101012;
|
||||||
|
|
||||||
|
--color-red-dark-2: #8a3f3d;
|
||||||
|
--color-orange-dark-2: #755331;
|
||||||
|
--color-yellow-dark-2: #756731;
|
||||||
|
--color-olive-dark-2: #566340;
|
||||||
|
--color-green-dark-2: #506344;
|
||||||
|
--color-teal-dark-2: #406059;
|
||||||
|
--color-blue-dark-2: #4a6172;
|
||||||
|
--color-violet-dark-2: #574a6b;
|
||||||
|
--color-purple-dark-2: #684f6b;
|
||||||
|
--color-pink-dark-2: #6b4e5e;
|
||||||
|
--color-brown-dark-2: #574636;
|
||||||
|
--color-grey-dark-2: #45454b;
|
||||||
|
--color-black-dark-2: #101012;
|
||||||
|
|
||||||
|
--color-gold: #8f7d3c;
|
||||||
|
--color-white: #fafafb;
|
||||||
|
--color-pure-black: #101012;
|
||||||
|
|
||||||
|
/* ── ANSI ───────────────────────────────────────────────────────── */
|
||||||
|
--color-ansi-black: #2a2a2e;
|
||||||
|
--color-ansi-red: #a34a48;
|
||||||
|
--color-ansi-green: #627a52;
|
||||||
|
--color-ansi-yellow: #8f7d3c;
|
||||||
|
--color-ansi-blue: #5a768a;
|
||||||
|
--color-ansi-magenta: #7e6085;
|
||||||
|
--color-ansi-cyan: #4e756b;
|
||||||
|
--color-ansi-white: #8f8f96;
|
||||||
|
--color-ansi-bright-black: #5a5a61;
|
||||||
|
--color-ansi-bright-red: #c25b58;
|
||||||
|
--color-ansi-bright-green: #789660;
|
||||||
|
--color-ansi-bright-yellow: #b09a4a;
|
||||||
|
--color-ansi-bright-blue: #6f8fa8;
|
||||||
|
--color-ansi-bright-magenta: #9a76a3;
|
||||||
|
--color-ansi-bright-cyan: #5f8f82;
|
||||||
|
--color-ansi-bright-white: #f6f6f8;
|
||||||
|
|
||||||
|
/* ── Diffs ──────────────────────────────────────────────────────── */
|
||||||
|
--color-diff-removed-word-bg: #e8b4b1;
|
||||||
|
--color-diff-added-word-bg: #c3d4a8;
|
||||||
|
--color-diff-removed-row-bg: #f2dedd;
|
||||||
|
--color-diff-moved-row-bg: #f0e6cf;
|
||||||
|
--color-diff-added-row-bg: #e4ecdb;
|
||||||
|
--color-diff-removed-row-border: #d9a5a2;
|
||||||
|
--color-diff-moved-row-border: #d9c79b;
|
||||||
|
--color-diff-added-row-border: #b3c79b;
|
||||||
|
--color-diff-inactive: #ececef;
|
||||||
|
|
||||||
|
/* ── Status ─────────────────────────────────────────────────────── */
|
||||||
|
--color-error-border: #c98a87;
|
||||||
|
--color-error-bg: #f0d8d7;
|
||||||
|
--color-error-bg-active: #e8c3c1;
|
||||||
|
--color-error-bg-hover: #f0d8d7;
|
||||||
|
--color-error-text: #6d2f2d;
|
||||||
|
--color-success-border: #8fb89c;
|
||||||
|
--color-success-bg: #e0ebe3;
|
||||||
|
--color-success-text: #2f5238;
|
||||||
|
--color-warning-border: #c9b787;
|
||||||
|
--color-warning-bg: #f0ead5;
|
||||||
|
--color-warning-text: #6b5a1f;
|
||||||
|
--color-info-border: #8fadc9;
|
||||||
|
--color-info-bg: #dfe7ee;
|
||||||
|
--color-info-text: #2f4a63;
|
||||||
|
|
||||||
|
/* ── Badges ─────────────────────────────────────────────────────── */
|
||||||
|
--color-red-badge: #c25b58;
|
||||||
|
--color-red-badge-bg: rgba(194, 91, 88, 0.12);
|
||||||
|
--color-red-badge-hover-bg: rgba(194, 91, 88, 0.22);
|
||||||
|
--color-green-badge: #627a52;
|
||||||
|
--color-green-badge-bg: rgba(98, 122, 82, 0.12);
|
||||||
|
--color-green-badge-hover-bg: rgba(98, 122, 82, 0.22);
|
||||||
|
--color-yellow-badge: #8f7d3c;
|
||||||
|
--color-yellow-badge-bg: rgba(143, 125, 60, 0.12);
|
||||||
|
--color-yellow-badge-hover-bg: rgba(143, 125, 60, 0.22);
|
||||||
|
--color-orange-badge: #b07f4a;
|
||||||
|
--color-orange-badge-bg: rgba(176, 127, 74, 0.12);
|
||||||
|
--color-orange-badge-hover-bg: rgba(176, 127, 74, 0.22);
|
||||||
|
|
||||||
|
/* ── Thin accents / danger ──────────────────────────────────────── */
|
||||||
|
--color-thin-green: #789660;
|
||||||
|
--color-thin-red: #c25b58;
|
||||||
|
--color-thin-purple: #9a76a3;
|
||||||
|
--color-thin-orange: #b07f4a;
|
||||||
|
--color-thin-red-highlight: #a34a48;
|
||||||
|
--color-danger-bg: #f0d8d7;
|
||||||
|
|
||||||
|
/* ── Surfaces ───────────────────────────────────────────────────── */
|
||||||
|
--color-body: #f6f6f8;
|
||||||
|
--color-box-header: #ececef;
|
||||||
|
--color-box-body: #f2f2f4;
|
||||||
|
--color-box-body-highlight: #e6e6ea;
|
||||||
|
--color-text-dark: #101012;
|
||||||
|
--color-text: #2a2a2e;
|
||||||
|
--color-text-light: #45454b;
|
||||||
|
--color-text-light-1: #45454b;
|
||||||
|
--color-text-light-2: #5a5a61;
|
||||||
|
--color-text-light-3: #737379;
|
||||||
|
--color-footer: #ececef;
|
||||||
|
--color-timeline: #d9d9de;
|
||||||
|
--color-input-text: #2a2a2e;
|
||||||
|
--color-input-background: #f0f0f3;
|
||||||
|
--color-input-toggle-background: #f0f0f3;
|
||||||
|
--color-input-border: #c7c7cd;
|
||||||
|
--color-input-border-hover: #ababb2;
|
||||||
|
--color-header-wrapper: #f0f0f3;
|
||||||
|
--color-header-wrapper-transparent: rgba(240, 240, 243, 0);
|
||||||
|
--color-light: rgba(255, 255, 255, 0.8);
|
||||||
|
--color-light-border: rgba(0, 0, 0, 0.10);
|
||||||
|
--color-hover: #e9e9ed;
|
||||||
|
--color-active: #dcdce1;
|
||||||
|
--color-menu: #f2f2f4;
|
||||||
|
--color-card: #f2f2f4;
|
||||||
|
--fancy-card-bg: #f2f2f4;
|
||||||
|
--fancy-card-border: #e0e0e5;
|
||||||
|
--color-markup-table-row: rgba(0, 0, 0, 0.02);
|
||||||
|
--color-markup-code-block: #ececef;
|
||||||
|
--color-markup-code-inline: #e6e6ea;
|
||||||
|
--color-button: #f2f2f4;
|
||||||
|
--color-code-bg: #ececef;
|
||||||
|
--color-shadow: rgba(0, 0, 0, 0.18);
|
||||||
|
--color-secondary-bg: #f2f2f4;
|
||||||
|
--color-text-focus: #101012;
|
||||||
|
--color-expand-button: #e6e6ea;
|
||||||
|
--color-placeholder-text: #8f8f96;
|
||||||
|
--color-editor-line-highlight: #f2f2f4;
|
||||||
|
--color-project-board-bg: #f2f2f4;
|
||||||
|
--color-project-board-dark-label: #5a5a61;
|
||||||
|
--color-caret: #2a2a2e;
|
||||||
|
--color-reaction-bg: rgba(0, 0, 0, 0.04);
|
||||||
|
--color-reaction-active-bg: rgba(42, 42, 46, 0.16);
|
||||||
|
--color-reaction-hover-bg: rgba(42, 42, 46, 0.26);
|
||||||
|
--color-tooltip-text: #f6f6f8;
|
||||||
|
--color-tooltip-bg: #2a2a2e;
|
||||||
|
--color-nav-bg: #ececef;
|
||||||
|
--color-nav-hover-bg: #e9e9ed;
|
||||||
|
--color-secondary-nav-bg: #f6f6f8;
|
||||||
|
--color-label-text: #2a2a2e;
|
||||||
|
--color-label-bg: rgba(199, 199, 205, 0.6);
|
||||||
|
--color-label-hover-bg: rgba(199, 199, 205, 0.8);
|
||||||
|
--color-label-active-bg: #ababb2;
|
||||||
|
--color-label-bg-alt: #c7c7cd;
|
||||||
|
--color-accent: #2a2a2e;
|
||||||
|
--color-small-accent: #5a5a61;
|
||||||
|
--color-highlight-fg: #2a2a2e;
|
||||||
|
--color-highlight-bg: rgba(42, 42, 46, 0.12);
|
||||||
|
--color-overlay-backdrop: rgba(28, 28, 31, 0.45);
|
||||||
|
--color-selection-bg: rgba(42, 42, 46, 0.20);
|
||||||
|
--color-selection-fg: #101012;
|
||||||
|
--checkerboard-color-1: #f6f6f8;
|
||||||
|
--checkerboard-color-2: #ececef;
|
||||||
|
--color-indicator-offline: #737379;
|
||||||
|
--color-indicator-offline-20: rgba(115, 115, 121, 0.20);
|
||||||
|
--color-indicator-idle: #789660;
|
||||||
|
--color-indicator-idle-20: rgba(120, 150, 96, 0.20);
|
||||||
|
--color-indicator-active: #6f8fa8;
|
||||||
|
--color-indicator-active-20: rgba(111, 143, 168, 0.20);
|
||||||
|
|
||||||
|
/* ── Console (keep it dark) ─────────────────────────────────────── */
|
||||||
|
--color-console-fg: #e3e3e8;
|
||||||
|
--color-console-fg-subtle: #8f8f96;
|
||||||
|
--color-console-bg: #0e0e10;
|
||||||
|
--color-console-border: #2c2c30;
|
||||||
|
--color-console-hover-bg: rgba(255, 255, 255, 0.06);
|
||||||
|
--color-console-active-bg: #36363b;
|
||||||
|
--color-console-menu-bg: #1d1d20;
|
||||||
|
--color-console-menu-border: #45454b;
|
||||||
|
|
||||||
|
/* ── Neumorphism ────────────────────────────────────────────────── */
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.14);
|
||||||
|
--nm-shadow-light: rgba(255, 255, 255, 0.95);
|
||||||
|
--nm-divider-color: rgba(0, 0, 0, 0.08);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Monochrome light flavour
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #f6f6f8 !important;
|
||||||
|
color: #2a2a2e !important;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
a { color: #45454b !important; text-decoration: none !important; }
|
||||||
|
a:hover,
|
||||||
|
a:focus {
|
||||||
|
color: #101012 !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
.text.grey a,
|
||||||
|
.meta a,
|
||||||
|
.commit-header a,
|
||||||
|
.breadcrumb a,
|
||||||
|
.ui.breadcrumb a { color: #737379 !important; }
|
||||||
|
.text.grey a:hover,
|
||||||
|
.meta a:hover,
|
||||||
|
.commit-header a:hover,
|
||||||
|
.breadcrumb a:hover { color: #101012 !important; }
|
||||||
|
|
||||||
|
.navbar .brand,
|
||||||
|
.navbar .brand:hover { color: #101012 !important; font-weight: 600; }
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(42, 42, 46, 0.20);
|
||||||
|
color: #101012;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sha,
|
||||||
|
.commit-sha,
|
||||||
|
.commit-id-short,
|
||||||
|
.version,
|
||||||
|
.ui.label.sha { font-family: var(--fonts-monospace) !important; }
|
||||||
|
|
||||||
|
/* Greyscale syntax highlighting */
|
||||||
|
.chroma { background: #ececef !important; }
|
||||||
|
.chroma .c, .chroma .c1, .chroma .ch, .chroma .cm,
|
||||||
|
.chroma .cs, .chroma .cp, .chroma .cpf { color: #8f8f96; font-style: italic; }
|
||||||
|
.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn,
|
||||||
|
.chroma .kr, .chroma .kt, .chroma .nt, .chroma .nc, .chroma .ne { color: #1c1c1f; font-weight: 600; }
|
||||||
|
.chroma .o, .chroma .ow, .chroma .p, .chroma .punctuation { color: #737379; }
|
||||||
|
.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc,
|
||||||
|
.chroma .sd, .chroma .sh, .chroma .sx, .chroma .se, .chroma .ss { color: #45454b; }
|
||||||
|
.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh,
|
||||||
|
.chroma .mi, .chroma .mo, .chroma .il { color: #2a2a2e; }
|
||||||
|
.chroma .n, .chroma .nx, .chroma .nn, .chroma .nv,
|
||||||
|
.chroma .vc, .chroma .vg, .chroma .vi, .chroma .vm { color: #2a2a2e; }
|
||||||
|
.chroma .na, .chroma .nb, .chroma .bp, .chroma .nf,
|
||||||
|
.chroma .ni, .chroma .nl, .chroma .py, .chroma .nd { color: #1c1c1f; }
|
||||||
|
.chroma .gd { color: #101012; background-color: #f0d8d7; }
|
||||||
|
.chroma .gi { color: #101012; background-color: #e0ebe3; }
|
||||||
|
|
||||||
|
/* CodeMirror */
|
||||||
|
.CodeMirror.cm-s-default .cm-keyword, .CodeMirror.cm-s-paper .cm-keyword { color: #1c1c1f; font-weight: 600; }
|
||||||
|
.CodeMirror.cm-s-default .cm-atom, .CodeMirror.cm-s-paper .cm-atom,
|
||||||
|
.CodeMirror.cm-s-default .cm-number, .CodeMirror.cm-s-paper .cm-number { color: #2a2a2e; }
|
||||||
|
.CodeMirror.cm-s-default .cm-def, .CodeMirror.cm-s-paper .cm-def { color: #1c1c1f; }
|
||||||
|
.CodeMirror.cm-s-default .cm-comment, .CodeMirror.cm-s-paper .cm-comment { color: #8f8f96; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string, .CodeMirror.cm-s-paper .cm-string { color: #45454b; }
|
||||||
|
.CodeMirror.cm-s-default .cm-string-2, .CodeMirror.cm-s-paper .cm-string-2 { color: #5a5a61; }
|
||||||
|
.CodeMirror.cm-s-default .cm-meta, .CodeMirror.cm-s-paper .cm-meta,
|
||||||
|
.CodeMirror.cm-s-default .cm-builtin, .CodeMirror.cm-s-paper .cm-builtin,
|
||||||
|
.CodeMirror.cm-s-default .cm-attribute, .CodeMirror.cm-s-paper .cm-attribute { color: #1c1c1f; }
|
||||||
|
.CodeMirror.cm-s-default .cm-tag, .CodeMirror.cm-s-paper .cm-tag { color: #101012; }
|
||||||
|
.CodeMirror.cm-s-default .cm-link, .CodeMirror.cm-s-paper .cm-link { color: #45454b; }
|
||||||
494
themes/theme-neumorphism.css
Normal file
|
|
@ -0,0 +1,494 @@
|
||||||
|
/*
|
||||||
|
* theme-neumorphism.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* Shared "soft UI" / neumorphic layer for Forgejo.
|
||||||
|
*
|
||||||
|
* This file contains no palette of its own — it only defines soft-shadow
|
||||||
|
* primitives and restyles components to look extruded or recessed. Import it
|
||||||
|
* at the TOP of a theme (right after the base palette import) and then set the
|
||||||
|
* --nm-* primitives + colours in that theme's :root.
|
||||||
|
*
|
||||||
|
* Themes that import this: gruvbox-dark, gruvbox-light, terminal,
|
||||||
|
* forgejo-dark, forgejo-light, forgejo-auto.
|
||||||
|
*/
|
||||||
|
|
||||||
|
:root {
|
||||||
|
/* Derived primitives — themes override --nm-shadow-* / --nm-radius */
|
||||||
|
--nm-bg: var(--color-body, #282828);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
--nm-raised: 7px 7px 16px var(--nm-shadow-dark, rgba(0, 0, 0, 0.5)),
|
||||||
|
-7px -7px 16px var(--nm-shadow-light, rgba(255, 255, 255, 0.05));
|
||||||
|
--nm-raised-sm: 4px 4px 10px var(--nm-shadow-dark, rgba(0, 0, 0, 0.45)),
|
||||||
|
-4px -4px 10px var(--nm-shadow-light, rgba(255, 255, 255, 0.04));
|
||||||
|
/* Buttons sit between the two — clearly lifted, but not chunky */
|
||||||
|
--nm-raised-xs: 2px 2px 5px var(--nm-shadow-dark, rgba(0, 0, 0, 0.4)),
|
||||||
|
-2px -2px 5px var(--nm-shadow-light, rgba(255, 255, 255, 0.04));
|
||||||
|
--nm-inset: inset 5px 5px 12px var(--nm-shadow-dark, rgba(0, 0, 0, 0.5)),
|
||||||
|
inset -5px -5px 12px var(--nm-shadow-light, rgba(255, 255, 255, 0.05));
|
||||||
|
--nm-inset-sm: inset 3px 3px 7px var(--nm-shadow-dark, rgba(0, 0, 0, 0.45)),
|
||||||
|
inset -3px -3px 7px var(--nm-shadow-light, rgba(255, 255, 255, 0.04));
|
||||||
|
--nm-flat: 2px 2px 4px var(--nm-shadow-dark, rgba(0, 0, 0, 0.4)),
|
||||||
|
-2px -2px 4px var(--nm-shadow-light, rgba(255, 255, 255, 0.04));
|
||||||
|
--nm-divider: var(--nm-divider-color, rgba(255, 255, 255, 0.07));
|
||||||
|
--nm-ease: cubic-bezier(0.2, 0.7, 0.3, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Surfaces — raised soft panels
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.segment,
|
||||||
|
.ui.segments,
|
||||||
|
.ui.secondary.segment,
|
||||||
|
.ui.tertiary.segment,
|
||||||
|
.ui.raised.segment,
|
||||||
|
.ui.stacked.segment,
|
||||||
|
.ui.card,
|
||||||
|
.ui.cards > .card,
|
||||||
|
.ui.message,
|
||||||
|
.repository .repo-header,
|
||||||
|
.ui.modal,
|
||||||
|
.ui.popup,
|
||||||
|
.ui.fluid.popup,
|
||||||
|
.ui.dropdown .menu {
|
||||||
|
background: var(--color-box-body, var(--color-secondary-bg)) !important;
|
||||||
|
border: 1px solid transparent !important;
|
||||||
|
border-radius: var(--nm-radius) !important;
|
||||||
|
box-shadow: var(--nm-raised) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nested / attached pieces are part of a parent panel. Keep them flat so we
|
||||||
|
never stack soft shadows (repo summary + tab bar, attached tables, rows
|
||||||
|
inside a segments group, ...). One panel = one shadow. */
|
||||||
|
.ui.attached.segment,
|
||||||
|
.ui.attached.header,
|
||||||
|
.ui.attached.table,
|
||||||
|
.ui.top.attached.segment,
|
||||||
|
.ui.middle.attached.segment,
|
||||||
|
.ui.bottom.attached.segment,
|
||||||
|
.ui.segments > .ui.segment,
|
||||||
|
.ui.segments .ui.segment {
|
||||||
|
background: transparent !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
border-color: var(--nm-divider) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui.card,
|
||||||
|
.ui.cards > .card {
|
||||||
|
transition: box-shadow 0.2s var(--nm-ease), transform 0.2s var(--nm-ease);
|
||||||
|
}
|
||||||
|
.ui.card:hover,
|
||||||
|
.ui.cards > .card:hover {
|
||||||
|
box-shadow: var(--nm-raised), 0 0 0 1px var(--color-primary-alpha-20, transparent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Headings inside boxes */
|
||||||
|
.ui.segment > .ui.header,
|
||||||
|
.ui.attached.header,
|
||||||
|
.ui.header.segment {
|
||||||
|
background: transparent !important;
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Buttons — extruded, pressed state sinks in
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.button,
|
||||||
|
.ui.buttons .button {
|
||||||
|
background: var(--color-box-body, var(--color-button)) !important;
|
||||||
|
color: var(--color-text) !important;
|
||||||
|
border: 1px solid transparent !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
box-shadow: var(--nm-raised-xs) !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
text-transform: none !important;
|
||||||
|
transition: box-shadow 0.16s var(--nm-ease), color 0.16s var(--nm-ease),
|
||||||
|
filter 0.16s var(--nm-ease);
|
||||||
|
}
|
||||||
|
.ui.button:hover,
|
||||||
|
.ui.buttons .button:hover {
|
||||||
|
color: var(--color-primary) !important;
|
||||||
|
box-shadow: var(--nm-raised-sm) !important;
|
||||||
|
}
|
||||||
|
.ui.button:active,
|
||||||
|
.ui.buttons .button:active {
|
||||||
|
box-shadow: var(--nm-inset-sm) !important;
|
||||||
|
transform: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui.primary.button,
|
||||||
|
.ui.primary.buttons .button,
|
||||||
|
.ui.primary.label {
|
||||||
|
background: linear-gradient(
|
||||||
|
145deg,
|
||||||
|
var(--color-primary-light-1, var(--color-primary)),
|
||||||
|
var(--color-primary)
|
||||||
|
) !important;
|
||||||
|
color: var(--color-primary-contrast, #101010) !important;
|
||||||
|
border: 1px solid transparent !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
box-shadow: var(--nm-raised-xs), 0 0 0 1px var(--color-primary-alpha-20, transparent) !important;
|
||||||
|
}
|
||||||
|
.ui.primary.button:hover,
|
||||||
|
.ui.primary.buttons .button:hover {
|
||||||
|
filter: brightness(1.06);
|
||||||
|
color: var(--color-primary-contrast, #101010) !important;
|
||||||
|
box-shadow: var(--nm-raised-sm), 0 0 0 1px var(--color-primary-alpha-40, transparent) !important;
|
||||||
|
}
|
||||||
|
.ui.primary.button:active {
|
||||||
|
filter: brightness(0.95);
|
||||||
|
box-shadow: var(--nm-inset-sm) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ghost / basic buttons: no extrusion until hover */
|
||||||
|
.ui.basic.button,
|
||||||
|
.ui.basic.buttons .button {
|
||||||
|
background: transparent !important;
|
||||||
|
color: var(--color-text-light, var(--color-text)) !important;
|
||||||
|
border: 1px solid var(--nm-divider) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
.ui.basic.button:hover,
|
||||||
|
.ui.basic.buttons .button:hover {
|
||||||
|
background: transparent !important;
|
||||||
|
color: var(--color-primary) !important;
|
||||||
|
border-color: var(--color-primary-alpha-40, var(--color-primary)) !important;
|
||||||
|
box-shadow: var(--nm-flat) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Inputs — recessed wells
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
input,
|
||||||
|
textarea,
|
||||||
|
select,
|
||||||
|
.ui.input input,
|
||||||
|
.ui.form input:not([type="checkbox"]):not([type="radio"]),
|
||||||
|
.ui.form textarea,
|
||||||
|
.ui.form select,
|
||||||
|
.ui.search input,
|
||||||
|
.ui.action.input input,
|
||||||
|
.CodeMirror {
|
||||||
|
background: var(--color-body, var(--nm-bg)) !important;
|
||||||
|
color: var(--color-input-text, var(--color-text)) !important;
|
||||||
|
border: 1px solid transparent !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
box-shadow: var(--nm-inset-sm) !important;
|
||||||
|
}
|
||||||
|
input::placeholder,
|
||||||
|
textarea::placeholder,
|
||||||
|
.ui.input input::placeholder {
|
||||||
|
color: var(--color-placeholder-text, var(--color-text-light-3)) !important;
|
||||||
|
}
|
||||||
|
input:focus,
|
||||||
|
textarea:focus,
|
||||||
|
select:focus,
|
||||||
|
.ui.input input:focus,
|
||||||
|
.ui.form input:focus,
|
||||||
|
.ui.form textarea:focus,
|
||||||
|
.ui.search input:focus {
|
||||||
|
border-color: transparent !important;
|
||||||
|
box-shadow: var(--nm-inset-sm),
|
||||||
|
0 0 0 2px var(--color-primary-alpha-30, transparent) !important;
|
||||||
|
outline: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Input groups (clone panel, code search, explore search)
|
||||||
|
One integrated well instead of separate extruded buttons floating next
|
||||||
|
to a recessed input.
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.action.input {
|
||||||
|
background: var(--color-box-body, var(--color-secondary-bg)) !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
box-shadow: var(--nm-inset-sm) !important;
|
||||||
|
overflow: visible !important;
|
||||||
|
align-items: stretch !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
/* Every segment is transparent on ONE shared rounded surface. Because no
|
||||||
|
child paints an opaque rectangle, the outer corners always follow the
|
||||||
|
group's radius — a child can never square them off. */
|
||||||
|
.ui.action.input > input,
|
||||||
|
.ui.action.input > .button,
|
||||||
|
.ui.action.input > .buttons .button,
|
||||||
|
.ui.action.input > .ui.dropdown,
|
||||||
|
.ui.action.input > .ui.selection.dropdown {
|
||||||
|
background: transparent !important;
|
||||||
|
color: var(--color-text) !important;
|
||||||
|
border: none !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
align-self: stretch !important;
|
||||||
|
}
|
||||||
|
.ui.action.input > input {
|
||||||
|
flex: 1 1 auto !important;
|
||||||
|
min-width: 0 !important;
|
||||||
|
}
|
||||||
|
.ui.action.input > .ui.dropdown .text,
|
||||||
|
.ui.action.input > .ui.dropdown .dropdown.icon,
|
||||||
|
.ui.action.input > .ui.dropdown .search.icon,
|
||||||
|
.ui.action.input > .ui.dropdown .delete.icon {
|
||||||
|
color: var(--color-text) !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
/* The search-type selector hugs its label instead of the 10em default. */
|
||||||
|
.ui.action.input > .ui.dropdown.selection {
|
||||||
|
min-width: 0 !important;
|
||||||
|
width: auto !important;
|
||||||
|
}
|
||||||
|
/* Hairline separators. */
|
||||||
|
.ui.action.input > :not(:first-child) {
|
||||||
|
border-left: 1px solid var(--nm-divider) !important;
|
||||||
|
}
|
||||||
|
/* Hover = colour only, never an opaque block. */
|
||||||
|
.ui.action.input .button:hover,
|
||||||
|
.ui.action.input > .ui.dropdown.selection:hover,
|
||||||
|
.ui.action.input > .ui.dropdown.selection:hover .text,
|
||||||
|
.ui.action.input > .ui.dropdown.selection:hover .dropdown.icon {
|
||||||
|
color: var(--color-primary) !important;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
.ui.action.input:focus-within {
|
||||||
|
box-shadow: var(--nm-inset-sm),
|
||||||
|
0 0 0 2px var(--color-primary-alpha-30, transparent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Navigation & footer — soft, borderless
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.navbar,
|
||||||
|
#navbar,
|
||||||
|
nav.navbar,
|
||||||
|
.ui.menu.navbar,
|
||||||
|
.ui.secondary.menu.navbar {
|
||||||
|
background: var(--color-nav-bg, var(--color-body)) !important;
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: 0 8px 18px -12px var(--nm-shadow-dark, rgba(0, 0, 0, 0.6)) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-footer,
|
||||||
|
footer,
|
||||||
|
.ui.page-footer {
|
||||||
|
background: var(--color-footer, var(--color-body)) !important;
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: 0 -8px 18px -14px var(--nm-shadow-dark, rgba(0, 0, 0, 0.6)) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui.tabular.menu,
|
||||||
|
.ui.secondary.pointing.menu {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.ui.tabular.menu .active.item,
|
||||||
|
.ui.secondary.pointing.menu .active.item {
|
||||||
|
background: transparent !important;
|
||||||
|
border-color: var(--color-primary) !important;
|
||||||
|
color: var(--color-primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Menus, sidebar, breadcrumbs
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.vertical.menu,
|
||||||
|
.ui.fluid.vertical.menu,
|
||||||
|
.ui.secondary.vertical.menu,
|
||||||
|
.settings .ui.menu {
|
||||||
|
background: transparent !important;
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
.ui.vertical.menu .item {
|
||||||
|
border: none !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
color: var(--color-text-light, var(--color-text)) !important;
|
||||||
|
transition: box-shadow 0.16s var(--nm-ease), color 0.16s var(--nm-ease);
|
||||||
|
}
|
||||||
|
.ui.vertical.menu .item:hover {
|
||||||
|
box-shadow: var(--nm-raised-xs) !important;
|
||||||
|
color: var(--color-text) !important;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
.ui.vertical.menu .active.item,
|
||||||
|
.ui.vertical.menu .item.active {
|
||||||
|
background: transparent !important;
|
||||||
|
color: var(--color-primary) !important;
|
||||||
|
box-shadow: var(--nm-inset-sm) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui.dropdown .menu > .item,
|
||||||
|
.ui.popup .item {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.ui.dropdown .menu > .item:hover,
|
||||||
|
.ui.dropdown .menu > .item.active,
|
||||||
|
.ui.popup .item:hover {
|
||||||
|
background: var(--color-primary-alpha-10, rgba(127, 127, 127, 0.12)) !important;
|
||||||
|
color: var(--color-primary) !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui.divider {
|
||||||
|
border-color: var(--nm-divider) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Tables — one raised sheet, recessed header
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.table {
|
||||||
|
background: var(--color-box-body, var(--color-secondary-bg)) !important;
|
||||||
|
border: none !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
/* No extrusion — tables usually live inside a raised segment already, and
|
||||||
|
stacked shadows are what made list pages look off. */
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
.ui.table thead th,
|
||||||
|
.ui.table > thead > tr > th {
|
||||||
|
background: transparent !important;
|
||||||
|
border-color: var(--nm-divider) !important;
|
||||||
|
color: var(--color-text-light, var(--color-text)) !important;
|
||||||
|
box-shadow: inset 0 -1px 0 var(--nm-divider);
|
||||||
|
}
|
||||||
|
.ui.table > tbody > tr > td {
|
||||||
|
background: transparent !important;
|
||||||
|
border-color: var(--nm-divider) !important;
|
||||||
|
}
|
||||||
|
.ui.table tbody tr:hover td {
|
||||||
|
background: var(--color-primary-alpha-10, rgba(127, 127, 127, 0.08)) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Labels, badges, avatars
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.label,
|
||||||
|
.ui.labels .label {
|
||||||
|
border: 1px solid transparent !important;
|
||||||
|
border-radius: 999px !important;
|
||||||
|
/* Flat pills: soft shadows on every badge turn busy lists into noise. */
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
.ui.basic.label {
|
||||||
|
background: transparent !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
border: 1px solid var(--nm-divider) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui.avatar,
|
||||||
|
.avatar,
|
||||||
|
img.ui.avatar,
|
||||||
|
.repository .small-thumbnail,
|
||||||
|
.repo-avatar {
|
||||||
|
border: 1px solid var(--nm-divider) !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Messages — raised with a soft accent edge
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.message {
|
||||||
|
box-shadow: var(--nm-raised), inset 4px 0 0 var(--color-primary-alpha-40, transparent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Pagination, progress, code, scrollbars
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.ui.pagination.menu {
|
||||||
|
background: transparent !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
.ui.pagination.menu .item {
|
||||||
|
border: none !important;
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
.ui.pagination.menu .active.item {
|
||||||
|
background: linear-gradient(145deg, var(--color-primary-light-1, var(--color-primary)), var(--color-primary)) !important;
|
||||||
|
color: var(--color-primary-contrast, #101010) !important;
|
||||||
|
box-shadow: var(--nm-raised-sm) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress,
|
||||||
|
.ui.progress {
|
||||||
|
background: var(--color-body) !important;
|
||||||
|
border-radius: 999px !important;
|
||||||
|
box-shadow: var(--nm-inset-sm) !important;
|
||||||
|
}
|
||||||
|
.progress .bar,
|
||||||
|
.ui.progress .bar {
|
||||||
|
background: linear-gradient(90deg, var(--color-primary), var(--color-primary-light-1, var(--color-primary))) !important;
|
||||||
|
border-radius: 999px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Block code: recess the rectangle that holds the code, never the text.
|
||||||
|
Inline `code` and the text inside a block stay flat, so an empty line or a
|
||||||
|
short snippet never gets its own hugging shadow. */
|
||||||
|
pre,
|
||||||
|
.code-view {
|
||||||
|
border-radius: var(--nm-radius-sm) !important;
|
||||||
|
box-shadow: var(--nm-inset-sm) !important;
|
||||||
|
}
|
||||||
|
code,
|
||||||
|
pre code,
|
||||||
|
pre > code,
|
||||||
|
.highlight code,
|
||||||
|
.code-view .lines-code,
|
||||||
|
.markup,
|
||||||
|
.file-content {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
scrollbar-width: thin;
|
||||||
|
scrollbar-color: var(--color-secondary, var(--nm-divider)) transparent;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--color-secondary, var(--nm-divider));
|
||||||
|
border-radius: 999px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: var(--color-primary-alpha-40, var(--color-secondary));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ═══════════════════════════════════════════════════════════════════════
|
||||||
|
Misc polish
|
||||||
|
═══════════════════════════════════════════════════════════════════════ */
|
||||||
|
|
||||||
|
.flex-item,
|
||||||
|
.repository.file.list .file-row {
|
||||||
|
border-color: var(--nm-divider) !important;
|
||||||
|
}
|
||||||
|
:focus-visible {
|
||||||
|
outline: 2px solid var(--color-primary) !important;
|
||||||
|
outline-offset: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Respect users who prefer less motion */
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.ui.button,
|
||||||
|
.ui.card,
|
||||||
|
.ui.cards > .card {
|
||||||
|
transition: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
119
themes/theme-terminal.css
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
/*
|
||||||
|
* theme-terminal.css
|
||||||
|
* ─────────────────────────────────────────────────────────────────────────
|
||||||
|
* The original CRT / phosphor-green terminal palette, now wearing the shared
|
||||||
|
* neumorphic/soft-UI layer. Surfaces were lifted off pure black so the soft
|
||||||
|
* shadows actually have somewhere to fall; the phosphor green is untouched.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("./_base-forgejo-dark.css");
|
||||||
|
@import url("./theme-neumorphism.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: dark;
|
||||||
|
--is-dark-theme: true;
|
||||||
|
|
||||||
|
/* ── Typography: keep it terminal-y, but readable ───────────────── */
|
||||||
|
--fonts-proportional: "Inter", "JetBrains Mono", "Cascadia Code",
|
||||||
|
ui-monospace, "DejaVu Sans Mono", Consolas, monospace !important;
|
||||||
|
--fonts-monospace: "Berkeley Mono", "JetBrains Mono", "Fira Code",
|
||||||
|
"SF Mono", "Cascadia Code", ui-monospace, "DejaVu Sans Mono",
|
||||||
|
Consolas, monospace !important;
|
||||||
|
|
||||||
|
/* ── Phosphor green primary ─────────────────────────────────────── */
|
||||||
|
--color-primary: #33ff66;
|
||||||
|
--color-primary-contrast: #08110a;
|
||||||
|
--color-primary-dark-1: #55ff88;
|
||||||
|
--color-primary-dark-2: #55ff88;
|
||||||
|
--color-primary-dark-3: #77ff99;
|
||||||
|
--color-primary-dark-4: #77ff99;
|
||||||
|
--color-primary-dark-5: #99ffbb;
|
||||||
|
--color-primary-dark-6: #99ffbb;
|
||||||
|
--color-primary-dark-7: #bbffcc;
|
||||||
|
--color-primary-light-1: #22cc55;
|
||||||
|
--color-primary-light-2: #1a9940;
|
||||||
|
--color-primary-light-3: #1a9940;
|
||||||
|
--color-primary-light-4: #14732f;
|
||||||
|
--color-primary-light-5: #106027;
|
||||||
|
--color-primary-light-6: #0c4a1e;
|
||||||
|
--color-primary-light-7: #093816;
|
||||||
|
--color-primary-alpha-10: rgba(51, 255, 102, 0.10);
|
||||||
|
--color-primary-alpha-20: rgba(51, 255, 102, 0.20);
|
||||||
|
--color-primary-alpha-30: rgba(51, 255, 102, 0.30);
|
||||||
|
--color-primary-alpha-40: rgba(51, 255, 102, 0.40);
|
||||||
|
--color-primary-alpha-50: rgba(51, 255, 102, 0.50);
|
||||||
|
--color-primary-alpha-60: rgba(51, 255, 102, 0.60);
|
||||||
|
--color-primary-alpha-70: rgba(51, 255, 102, 0.70);
|
||||||
|
--color-primary-alpha-80: rgba(51, 255, 102, 0.80);
|
||||||
|
--color-primary-alpha-90: rgba(51, 255, 102, 0.90);
|
||||||
|
--color-primary-hover: #55ff88;
|
||||||
|
--color-primary-active: #22cc55;
|
||||||
|
--color-accent: #33ff66;
|
||||||
|
--color-small-accent: #22cc55;
|
||||||
|
--color-highlight-fg: #33ff66;
|
||||||
|
--color-highlight-bg: rgba(51, 255, 102, 0.14);
|
||||||
|
--color-caret: #33ff66;
|
||||||
|
|
||||||
|
/* ── Green-tinted surfaces (no longer pure black) ───────────────── */
|
||||||
|
--color-body: #101410;
|
||||||
|
--color-box-header: #141a15;
|
||||||
|
--color-box-body: #141a15;
|
||||||
|
--color-box-body-highlight: #1b241c;
|
||||||
|
--color-secondary: #223023;
|
||||||
|
--color-secondary-bg: #141a15;
|
||||||
|
--color-menu: #141a15;
|
||||||
|
--color-card: #141a15;
|
||||||
|
--fancy-card-bg: #141a15;
|
||||||
|
--fancy-card-border: #223023;
|
||||||
|
--color-hover: #1b241c;
|
||||||
|
--color-active: #223023;
|
||||||
|
--color-nav-bg: #0c110d;
|
||||||
|
--color-footer: #0c110d;
|
||||||
|
--color-header-wrapper: #0c110d;
|
||||||
|
--color-input-background: #0b0f0b;
|
||||||
|
--color-input-toggle-background: #1b241c;
|
||||||
|
--color-code-bg: #0b0f0b;
|
||||||
|
--color-markup-code-block: #0b0f0b;
|
||||||
|
--color-markup-code-inline: #141a15;
|
||||||
|
--color-timeline: #223023;
|
||||||
|
--color-editor-line-highlight: #141a15;
|
||||||
|
--color-placeholder-text: #5d6b5f;
|
||||||
|
|
||||||
|
/* ── Text ───────────────────────────────────────────────────────── */
|
||||||
|
--color-text: #b8c4ba;
|
||||||
|
--color-text-light: #93a396;
|
||||||
|
--color-text-light-1: #93a396;
|
||||||
|
--color-text-light-2: #7c8a7e;
|
||||||
|
--color-text-light-3: #667367;
|
||||||
|
|
||||||
|
/* ── Neumorphism primitives ─────────────────────────────────────── */
|
||||||
|
--nm-shadow-dark: rgba(0, 0, 0, 0.78);
|
||||||
|
--nm-shadow-light: rgba(90, 255, 140, 0.05);
|
||||||
|
--nm-divider-color: rgba(90, 255, 140, 0.09);
|
||||||
|
--nm-radius: 14px;
|
||||||
|
--nm-radius-sm: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Terminal flavour */
|
||||||
|
body {
|
||||||
|
background-color: #101410 !important;
|
||||||
|
color: #b8c4ba !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a { color: #33ff66 !important; text-decoration: none !important; }
|
||||||
|
a:hover,
|
||||||
|
a:focus { color: #77ff99 !important; text-decoration: underline !important; }
|
||||||
|
|
||||||
|
.navbar .brand,
|
||||||
|
.navbar .brand:hover { color: #33ff66 !important; }
|
||||||
|
|
||||||
|
::selection {
|
||||||
|
background: rgba(51, 255, 102, 0.25);
|
||||||
|
color: #eaffef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chroma .k, .chroma .kc, .chroma .kd, .chroma .kn, .chroma .kr, .chroma .kt { color: #ff7540; }
|
||||||
|
.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc, .chroma .sd, .chroma .sh, .chroma .sx { color: #33ff66; }
|
||||||
|
.chroma .c, .chroma .c1, .chroma .ch, .chroma .cm, .chroma .cs, .chroma .cp, .chroma .cpf { color: #5d6b5f; }
|
||||||
|
.chroma .na, .chroma .nb, .chroma .nf, .chroma .ni { color: #8ee6a5; }
|
||||||
|
.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .mo, .chroma .il { color: #649bc4; }
|
||||||