aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2025-09-17 18:20:38 +0200
committerLeonard Kugis <leonard@kug.is>2025-09-17 18:20:38 +0200
commitc48fbfb7b85d9c5264be1d68063b8ac3af9e2899 (patch)
tree97c7d27e07392ba8ce303d0e917ee44972e94233
downloadcgithub-c48fbfb7b85d9c5264be1d68063b8ac3af9e2899.tar.gz
Initial commit
-rw-r--r--.gitignore197
-rw-r--r--Dockerfile59
-rw-r--r--LICENSE.url1
-rw-r--r--README.url1
-rw-r--r--apache.conf19
-rw-r--r--cgitrc44
-rw-r--r--head-include.html19
-rwxr-xr-xmd2html.py13
-rw-r--r--theme.css1152
9 files changed, 1505 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6177465
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,197 @@
+# Created by https://www.toptal.com/developers/gitignore/api/linux,windows,macos,vim
+# Edit at https://www.toptal.com/developers/gitignore?templates=linux,windows,macos,vim
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### macOS Patch ###
+# iCloud generated files
+*.icloud
+
+### Vim ###
+# Swap
+[._]*.s[a-v][a-z]
+!*.svg # comment out if you don't need vector files
+[._]*.sw[a-p]
+[._]s[a-rt-v][a-z]
+[._]ss[a-gi-z]
+[._]sw[a-p]
+
+# Session
+Session.vim
+Sessionx.vim
+
+# Temporary
+.netrwhist
+# Auto-generated tag files
+tags
+# Persistent undo
+[._]*.un~
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.toptal.com/developers/gitignore/api/linux,windows,macos,vim
+# Created by https://www.toptal.com/developers/gitignore/api/linux,windows,macos,vim
+# Edit at https://www.toptal.com/developers/gitignore?templates=linux,windows,macos,vim
+
+### Linux ###
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### macOS ###
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+### macOS Patch ###
+# iCloud generated files
+*.icloud
+
+### Vim ###
+# Swap
+[._]*.s[a-v][a-z]
+!*.svg # comment out if you don't need vector files
+[._]*.sw[a-p]
+[._]s[a-rt-v][a-z]
+[._]ss[a-gi-z]
+[._]sw[a-p]
+
+# Session
+Session.vim
+Sessionx.vim
+
+# Temporary
+.netrwhist
+# Auto-generated tag files
+tags
+# Persistent undo
+[._]*.un~
+
+### Windows ###
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# End of https://www.toptal.com/developers/gitignore/api/linux,windows,macos,vim
+
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..59862b1
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,59 @@
+FROM debian:bookworm-slim AS assets
+
+RUN apt-get update && \
+ apt-get install -y --no-install-recommends curl ca-certificates && \
+ rm -rf /var/lib/apt/lists/* && \
+ find /var/log -type f -name '*.log*' -delete
+
+RUN mkdir -p /var/www/html/cgit-css && \
+ curl -sSL -o /var/www/html/favicon.ico https://git-scm.com/favicon.ico && \
+ curl -sSL -o /var/www/html/cgit-css/highlight.min.js https://raw.githubusercontent.com/highlightjs/cdn-release/refs/heads/11-stable/build/highlight.min.js && \
+ curl -sSL -o /var/www/html/cgit-css/github.min.css https://raw.githubusercontent.com/highlightjs/cdn-release/refs/heads/11-stable/build/styles/github.min.css && \
+ curl -sSL -o /var/www/html/cgit-css/github-dark.min.css https://raw.githubusercontent.com/highlightjs/cdn-release/refs/heads/11-stable/build/styles/github-dark.min.css && \
+ sed -i '1s/^/@media screen and (prefers-color-scheme: dark) {/' /var/www/html/cgit-css/github-dark.min.css && echo '}' >> /var/www/html/cgit-css/github-dark.min.css && \
+ echo 'User-agent: *\nDisallow: /' >> /var/www/html/robots.txt
+
+FROM debian:bookworm-slim
+
+RUN apt-get update && \
+ apt-get install -y --no-install-recommends apache2 cgit python3-markdown && \
+ rm -rf /var/lib/apt/lists/* && \
+ find /var/log -type f -name '*.log*' -delete
+
+COPY --from=assets /var/www/html /var/www/html
+COPY theme.css /var/www/html/cgit-css/
+COPY head-include.html /var/www/html/cgit-css/
+COPY md2html.py /usr/lib/cgit/filters/
+RUN cp /usr/share/cgit/cgit.css /usr/share/cgit/cgit.png /var/www/html/cgit-css/
+
+RUN echo 'Listen ${APACHE_PORT}' > /etc/apache2/ports.conf && \
+ echo 'ServerName ${APACHE_SERVER_NAME}' >> /etc/apache2/apache2.conf && \
+ sed -e '/^User /d' -e '/^Group /d' -e 's;^PidFile .*;PidFile ${APACHE_RUN_DIR}/apache.pid;gi' -e 's;^ErrorLog .*;ErrorLog /dev/stderr;gi' \
+ -e 's;Require all granted;Require all denied;gi' -e 's;"^\\\\.ht";"^\\.";g' -i /etc/apache2/apache2.conf && \
+ rm -f /etc/apache2/sites-enabled/* /etc/apache2/mods-enabled/* /etc/apache2/conf-enabled/* && \
+ ln -s ../mods-available/mpm_event.load /etc/apache2/mods-enabled/mpm_event.load && \
+ ln -s ../mods-available/mpm_event.conf /etc/apache2/mods-enabled/mpm_event.conf && \
+ ln -s ../mods-available/mime.load /etc/apache2/mods-enabled/mime.load && \
+ ln -s ../mods-available/alias.load /etc/apache2/mods-enabled/alias.load && \
+ ln -s ../mods-available/filter.load /etc/apache2/mods-enabled/filter.load && \
+ ln -s ../mods-available/deflate.load /etc/apache2/mods-enabled/deflate.load && \
+ ln -s ../mods-available/deflate.conf /etc/apache2/mods-enabled/deflate.conf && \
+ ln -s ../mods-available/headers.load /etc/apache2/mods-enabled/headers.load && \
+ ln -s ../mods-available/authn_core.load /etc/apache2/mods-enabled/authn_core.load && \
+ ln -s ../mods-available/authz_core.load /etc/apache2/mods-enabled/authz_core.load && \
+ ln -s ../mods-available/authn_file.load /etc/apache2/mods-enabled/authn_file.load && \
+ ln -s ../mods-available/authz_user.load /etc/apache2/mods-enabled/authz_user.load && \
+ ln -s ../mods-available/auth_basic.load /etc/apache2/mods-enabled/auth_basic.load && \
+ ln -s ../mods-available/cgid.load /etc/apache2/mods-enabled/cgid.load && \
+ echo 'TypesConfig /etc/mime.types\nDeflateAlterETag NoChange' > /etc/apache2/mods-enabled/mime.conf && \
+ echo 'ServerTokens Major\nServerSignature Off\nTraceEnable Off' > /etc/apache2/conf-enabled/security.conf && \
+ echo 'CustomLog /dev/stdout combined' > /etc/apache2/conf-enabled/access-log.conf
+
+COPY cgitrc /etc/
+COPY apache.conf /etc/apache2/sites-enabled/
+
+ENV APACHE_PORT=8080
+ENV APACHE_RUN_DIR=/dev/shm
+ENV APACHE_SERVER_NAME=cgit
+
+ENTRYPOINT ["/sbin/apache2", "-D", "FOREGROUND"]
diff --git a/LICENSE.url b/LICENSE.url
new file mode 100644
index 0000000..d56921c
--- /dev/null
+++ b/LICENSE.url
@@ -0,0 +1 @@
+https://www.gnu.org/licenses/agpl-3.0.html
diff --git a/README.url b/README.url
new file mode 100644
index 0000000..982bec3
--- /dev/null
+++ b/README.url
@@ -0,0 +1 @@
+http://www.hackitu.de/cgithub/
diff --git a/apache.conf b/apache.conf
new file mode 100644
index 0000000..57a9d9d
--- /dev/null
+++ b/apache.conf
@@ -0,0 +1,19 @@
+ScriptSock ${APACHE_RUN_DIR}/cgi.sock
+
+<VirtualHost *>
+ DocumentRoot /var/www/html
+ <Directory "/var/www/html/">
+ Require all granted
+ Header set Cache-Control "public, max-age=3600"
+ </Directory>
+ <Directory "/usr/lib/cgit/">
+ Require all granted
+ Header set Cache-Control "private"
+ </Directory>
+
+ RedirectRelative On
+ RedirectMatch 302 ^/(cgit)?$ /cgit/
+ ScriptAlias /cgit/ "/usr/lib/cgit/cgit.cgi/"
+
+ IncludeOptional /mnt/apache.conf
+</VirtualHost>
diff --git a/cgitrc b/cgitrc
new file mode 100644
index 0000000..14836ce
--- /dev/null
+++ b/cgitrc
@@ -0,0 +1,44 @@
+root-title=Git Repository Browser
+root-desc=cgit web interface
+#root-readme=
+
+css=/cgit-css/cgit.css
+logo=/cgit-css/cgit.png
+head-include=/var/www/html/cgit-css/head-include.html
+robots=noindex, nofollow, noarchive, notranslate
+
+cache-root=/tmp
+cache-size=100
+
+enable-blame=1
+enable-commit-graph=0
+enable-index-links=1
+enable-log-filecount=0
+enable-log-linecount=1
+enable-index-owner=0
+enable-remote-branches=1
+max-stats=year
+
+snapshots=.tar.gz
+max-blob-size=1000
+enable-http-clone=0
+#clone-url=
+#clone-prefix=
+
+about-filter=/usr/lib/cgit/filters/md2html.py
+mimetype-file=/etc/mime.types
+readme=:README.md
+readme=:README.txt
+readme=:README
+readme=:INSTALL.md
+readme=:INSTALL.txt
+readme=:INSTALL
+
+strict-export=refs/heads/master
+remove-suffix=1
+max-repo-count=100
+#enable-git-config=1
+
+include=/mnt/cgitrc
+
+scan-path=/mnt
diff --git a/head-include.html b/head-include.html
new file mode 100644
index 0000000..fbc617f
--- /dev/null
+++ b/head-include.html
@@ -0,0 +1,19 @@
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+
+<link rel="stylesheet" type="text/css" href="/cgit-css/github.min.css"/>
+<link rel="stylesheet" type="text/css" href="/cgit-css/github-dark.min.css"/>
+
+<link rel="stylesheet" type="text/css" href="/cgit-css/theme.css"/>
+
+<script>
+ "use strict";
+ function hlBlob() {
+ const blob = document.querySelector("div#cgit table.blob td.lines pre code");
+ const path = document.querySelector("div#cgit div.path a:last-child");
+ if (blob !== null && path !== null) {
+ blob.classList.add("language-" + path.textContent.split(".").pop());
+ hljs.highlightElement(blob);
+ }
+ }
+</script>
+<script src="/cgit-css/highlight.min.js" onload="hlBlob()" defer></script>
diff --git a/md2html.py b/md2html.py
new file mode 100755
index 0000000..ddb87dc
--- /dev/null
+++ b/md2html.py
@@ -0,0 +1,13 @@
+#!/usr/bin/env python3
+
+import markdown
+import sys
+
+sys.stdout.buffer.write(b"<div class=\"markdown-body\">")
+markdown.markdownFromFile(
+ output_format="html",
+ extensions=["markdown.extensions.fenced_code",
+ "markdown.extensions.def_list",
+ "markdown.extensions.tables"]
+)
+sys.stdout.buffer.write(b"</div>")
diff --git a/theme.css b/theme.css
new file mode 100644
index 0000000..4c0ff23
--- /dev/null
+++ b/theme.css
@@ -0,0 +1,1152 @@
+:root {
+ color-scheme: light dark;
+ --font-size-small: 0.875rem;
+ --font-size-header: 2rem;
+ --size-header: 2.5rem;
+ --border-radius: 0.4rem;
+ --content-h-margin: 28px;
+ --content-v-margin: 2rem;
+ --inner-pad: 0.5rem;
+ --inner-small-pad: 0.25rem;
+ --bg-color: #ffffff;
+ --text-color: #1f2328;
+ --light-text-color: #59636e;
+ --menu-highlight-color: #fd8c73;
+ --link-color: #0969da;
+ --header-color: #ffffff;
+ --header-bg-color: #25292e;
+ --light-bg-color: #f6f8fa;
+ --lighter-bg-color: #f0f1f2;
+ --darker-bg-color: #eaedf0;
+ --border-color: #d1d9e0;
+ --hunk-bg-color: #ddf4ff;
+ --hunk-border-color: #b6e3ff;
+ --add-bg-color: #dafbe1;
+ --add-border-color: #aceebb;
+ --add-text-color: #1f883d;
+ --del-bg-color: #ffebe9;
+ --del-border-color: #ffcecb;
+ --del-text-color: #cf222e;
+ --change-bg-color: #fff8c5;
+ --change-border-color: #f0ebbf;
+}
+
+@media screen and (prefers-color-scheme: dark) {
+ :root {
+ --bg-color: #0d1117;
+ --text-color: #f0f6fc;
+ --light-text-color: #9198a1;
+ --menu-highlight-color: #f78166;
+ --link-color: #4493f8;
+ --header-color: #ffffff;
+ --header-bg-color: #25292e;
+ --light-bg-color: #151b23;
+ --lighter-bg-color: #1e242a;
+ --darker-bg-color: #212830;
+ --border-color: #3d444d;
+ --hunk-bg-color: #121d2f;
+ --hunk-border-color: #0c2D6b;
+ --add-bg-color: #12261e;
+ --add-border-color: #1d572d;
+ --add-text-color: #238636;
+ --del-bg-color: #25171c;
+ --del-border-color: #792e2e;
+ --del-text-color: #da3633;
+ --change-bg-color: #272115;
+ --change-border-color: #624711;
+ }
+}
+
+@media (max-width: 600px) {
+ :root {
+ --content-h-margin: 14px;
+ }
+}
+
+html {
+ font-size: var(--font-size-small);
+ font-variant-numeric: tabular-nums;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ font-smooth: always;
+ text-rendering: optimizeLegibility;
+}
+
+/* containers */
+
+body, div#cgit {
+ font-size: 1rem;
+}
+
+html, body, div#cgit {
+ margin: 0;
+ padding: 0;
+ background-color: var(--bg-color);
+ color: var(--text-color);
+}
+
+div#cgit div.content {
+ border-bottom: none;
+ margin: 0 var(--content-h-margin);
+ padding: 0;
+ overflow-x: scroll;
+}
+
+div#cgit table.list,
+div#cgit div.cgit-panel,
+div#cgit div.path,
+div#cgit div.diffstat-header,
+div#cgit table.diffstat,
+div#cgit div.diffstat-summary,
+div#cgit table.commit-info,
+div#cgit div.commit-subject,
+div#cgit div.commit-msg,
+div#cgit div.notes,
+div#cgit div.footer,
+div#cgit div.content h2,
+div#cgit ul.pager,
+div#cgit div.error,
+div#cgit div.markdown-body,
+div#cgit table.stats {
+ width: 100%;
+ max-width: 1280px;
+ box-sizing: border-box;
+ margin: var(--content-v-margin) auto;
+}
+
+div#cgit div.content:has(table.blob),
+div#cgit div.content:has(table.bin-blob) {
+ margin: var(--content-v-margin) var(--content-h-margin);
+}
+
+div#cgit div.path,
+div#cgit div#summary {
+ margin-bottom: 0;
+}
+
+div#cgit div.footer {
+ margin-top: 0;
+}
+
+div#cgit div.footer,
+div#cgit div.footer a {
+ color: var(--light-text-color);
+}
+
+div#cgit div.footer a:hover {
+ color: var(--link-color);
+ text-decoration: underline;
+}
+
+div#cgit ul.pager:empty {
+ display: none;
+}
+
+div#cgit ul.pager a {
+ color: var(--text-color);
+ text-decoration: none;
+}
+
+div#cgit ul.pager a:hover {
+ color: var(--link-color);
+}
+
+div#cgit div.path,
+div#cgit div.error {
+ color: var(--text-color);
+ border-radius: var(--border-radius);
+ box-sizing: border-box;
+ line-height: var(--size-header);
+ padding: 0 var(--inner-pad);
+}
+
+div#cgit div.path {
+ border: var(--border-color) 1px solid;
+ background-color: var(--light-bg-color);
+}
+
+div#cgit div.path::first-letter {
+ text-transform: uppercase;
+}
+
+div#cgit div.path a {
+ margin: 0 var(--inner-small-pad);
+}
+
+div#cgit div.error {
+ border: var(--del-border-color) 1px solid;
+ background-color: var(--del-bg-color);
+}
+
+@media (max-width: 1336px) {
+ div#cgit div.error,
+ div#cgit div.path {
+ width: auto;
+ margin-left: var(--content-h-margin);
+ margin-right: var(--content-h-margin);
+ }
+}
+
+/* header */
+
+div#cgit table#header {
+ background-color: var(--header-bg-color);
+ color: var(--header-color);
+ margin-bottom: 0;
+ min-height: 6rem;
+}
+
+div#cgit table#header td.main a {
+ color: var(--link-color);
+}
+
+div#cgit table#header td.sub,
+div#cgit table#header td.main {
+ color: var(--header-color);
+ border: none;
+}
+
+div#cgit table.tabs {
+ margin-top: 0;
+ background-color: var(--light-bg-color);
+ border-bottom: var(--border-color) 1px solid;
+}
+
+div#cgit table.tabs td {
+ padding: 0 var(--content-h-margin);
+}
+
+div#cgit table.tabs td.form {
+ padding: 0 var(--content-h-margin) 0 0;
+}
+
+div#cgit table#header td {
+ font-size: var(--font-size-small);
+}
+
+div#cgit table#header td.main {
+ font-size: var(--font-size-header);
+}
+
+div#cgit table#header td,
+div#cgit table#header td.logo,
+div#cgit table#header td.form,
+div#cgit table#header td.sub.right {
+ padding: 3px var(--content-h-margin);
+ vertical-align: middle;
+}
+
+div#cgit table#header td.main,
+div#cgit table#header td.sub {
+ padding: 3px 0;
+ vertical-align: middle;
+}
+
+div#cgit table#header td.logo img[src$="/cgit.png"] {
+ filter: brightness(0) invert(1);
+}
+
+div#cgit table#header td.logo {
+ width: 6rem;
+}
+
+@media (max-width: 600px) {
+ div#cgit table#header td.logo img {
+ max-width: 6rem;
+ }
+ div#cgit table#header td.main,
+ div#cgit table#header td.sub.right,
+ div#cgit table#header td.form input {
+ white-space: normal;
+ overflow-wrap: anywhere;
+ }
+ div#cgit table#header td.form form input[type="submit"] {
+ display: none;
+ }
+}
+
+div#cgit table#header td.form,
+div#cgit table.tabs td.form form {
+ white-space: normal;
+}
+
+div#cgit table.tabs td.form form {
+ padding: 0;
+ margin: 0;
+}
+
+div#cgit table.tabs td {
+ vertical-align: middle;
+}
+
+div#cgit table.tabs td a {
+ color: var(--light-text-color);
+ display: inline-block;
+ font-size: 1rem;
+ line-height: var(--size-header);
+ border-radius: var(--border-radius);
+ padding: 0 0.75rem;
+ background-position: 0.75rem;
+ background-size: 1rem;
+ background-repeat: no-repeat;
+ text-transform: capitalize;
+ margin: 2px 0;
+}
+
+div#cgit table.tabs td a.active {
+ color: var(--text-color);
+ margin-bottom: 0;
+ border-bottom: var(--menu-highlight-color) 2px solid;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ background-color: transparent;
+}
+
+div#cgit table.tabs td a:hover {
+ text-decoration: none;
+ background-color: var(--darker-bg-color);
+ transition: background-color .12s ease-out
+}
+
+/* inputs */
+
+div#cgit table#header td.form form select,
+div#cgit table#header td.form form input,
+div#cgit table.tabs td.form select,
+div#cgit table.tabs td.form input,
+div#cgit div.cgit-panel td.ctrl select,
+div#cgit div.cgit-panel td.ctrl input {
+ border-radius: var(--border-radius);
+ background-color: transparent;
+ height: var(--font-size-header);
+ font-size: var(--font-size-small);
+ vertical-align: middle;
+ margin: 2px 0 2px var(--inner-pad);
+ padding: 0 var(--inner-pad);
+}
+
+div#cgit table#header td.form form select,
+div#cgit table#header td.form form input {
+ color: var(--header-color);
+ border: var(--border-color) 1px solid;
+}
+
+div#cgit table.tabs td.form select,
+div#cgit table.tabs td.form input,
+div#cgit div.cgit-panel td.ctrl select,
+div#cgit div.cgit-panel td.ctrl input {
+ color: var(--text-color);
+ border: var(--border-color) 1px solid;
+ background-color: var(--darker-bg-color);
+}
+
+div#cgit table#header td.form form select:focus,
+div#cgit table#header td.form form input:focus,
+div#cgit table.tabs td.form select:focus,
+div#cgit table.tabs td.form input:focus,
+div#cgit div.cgit-panel td.ctrl select:focus,
+div#cgit div.cgit-panel td.ctrl input:focus,
+div#cgit table#header td.form form select:active,
+div#cgit table#header td.form form input:active,
+div#cgit table.tabs td.form select:active,
+div#cgit table.tabs td.form input:active,
+div#cgit div.cgit-panel td.ctrl select:active,
+div#cgit div.cgit-panel td.ctrl input:active {
+ border-color: var(--link-color);
+}
+
+div#cgit table#header td.form form input[type="submit"],
+div#cgit table.tabs td.form input[type="submit"],
+div#cgit div.cgit-panel td.ctrl input[type="submit"] {
+ min-width: 6em;
+ text-transform: capitalize;
+}
+
+/* icons */
+
+div#cgit table.tabs td a {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M2%202.5A2.5%202.5%200%200%201%204.5%200h8.75a.75.75%200%200%201%20.75.75v12.5a.75.75%200%200%201-.75.75h-2.5a.75.75%200%200%201%200-1.5h1.75v-2h-8a1%201%200%200%200-.714%201.7.75.75%200%201%201-1.072%201.05A2.495%202.495%200%200%201%202%2011.5Zm10.5-1h-8a1%201%200%200%200-1%201v6.708A2.486%202.486%200%200%201%204.5%209h8ZM5%2012.25a.25.25%200%200%201%20.25-.25h3.5a.25.25%200%200%201%20.25.25v3.25a.25.25%200%200%201-.4.2l-1.45-1.087a.249.249%200%200%200-.3%200L5.4%2015.7a.25.25%200%200%201-.4-.2Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+ padding-left: 2.25rem;
+}
+
+div#cgit table.tabs td a[href$="/about/"],
+div#cgit table.tabs td a[href*="/about/?"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M0%201.75A.75.75%200%200%201%20.75%201h4.253c1.227%200%202.317.59%203%201.501A3.743%203.743%200%200%201%2011.006%201h4.245a.75.75%200%200%201%20.75.75v10.5a.75.75%200%200%201-.75.75h-4.507a2.25%202.25%200%200%200-1.591.659l-.622.621a.75.75%200%200%201-1.06%200l-.622-.621A2.25%202.25%200%200%200%205.258%2013H.75a.75.75%200%200%201-.75-.75Zm7.251%2010.324.004-5.073-.002-2.253A2.25%202.25%200%200%200%205.003%202.5H1.5v9h3.757a3.75%203.75%200%200%201%201.994.574ZM8.755%204.75l-.004%207.322a3.752%203.752%200%200%201%201.992-.572H14.5v-9h-3.495a2.25%202.25%200%200%200-2.25%202.25Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs td a[href*="/log/"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22m.427%201.927%201.215%201.215a8.002%208.002%200%201%201-1.6%205.685.75.75%200%201%201%201.493-.154%206.5%206.5%200%201%200%201.18-4.458l1.358%201.358A.25.25%200%200%201%203.896%206H.25A.25.25%200%200%201%200%205.75V2.104a.25.25%200%200%201%20.427-.177ZM7.75%204a.75.75%200%200%201%20.75.75v2.992l2.028.812a.75.75%200%200%201-.557%201.392l-2.5-1A.751.751%200%200%201%207%208.25v-3.5A.75.75%200%200%201%207.75%204Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs td a[href*="/commit/"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22M11.93%208.5a4.002%204.002%200%200%201-7.86%200H.75a.75.75%200%200%201%200-1.5h3.32a4.002%204.002%200%200%201%207.86%200h3.32a.75.75%200%200%201%200%201.5Zm-1.43-.75a2.5%202.5%200%201%200-5%200%202.5%202.5%200%200%200%205%200Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs td a[href*="/tree/"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22m11.28%203.22%204.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.749.749%200%200%201-1.275-.326.749.749%200%200%201%20.215-.734L13.94%208l-3.72-3.72a.749.749%200%200%201%20.326-1.275.749.749%200%200%201%20.734.215Zm-6.56%200a.751.751%200%200%201%201.042.018.751.751%200%200%201%20.018%201.042L2.06%208l3.72%203.72a.749.749%200%200%201-.326%201.275.749.749%200%200%201-.734-.215L.47%208.53a.75.75%200%200%201%200-1.06Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs td a[href*="/diff/"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M1.5%203.25a2.25%202.25%200%201%201%203%202.122v5.256a2.251%202.251%200%201%201-1.5%200V5.372A2.25%202.25%200%200%201%201.5%203.25Zm5.677-.177L9.573.677A.25.25%200%200%201%2010%20.854V2.5h1A2.5%202.5%200%200%201%2013.5%205v5.628a2.251%202.251%200%201%201-1.5%200V5a1%201%200%200%200-1-1h-1v1.646a.25.25%200%200%201-.427.177L7.177%203.427a.25.25%200%200%201%200-.354ZM3.75%202.5a.75.75%200%201%200%200%201.5.75.75%200%200%200%200-1.5Zm0%209.5a.75.75%200%201%200%200%201.5.75.75%200%200%200%200-1.5Zm8.25.75a.75.75%200%201%200%201.5%200%20.75.75%200%200%200-1.5%200Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs td a[href*="/stats/"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M1.5%201.75V13.5h13.75a.75.75%200%200%201%200%201.5H.75a.75.75%200%200%201-.75-.75V1.75a.75.75%200%200%201%201.5%200Zm14.28%202.53-5.25%205.25a.75.75%200%200%201-1.06%200L7%207.06%204.28%209.78a.751.751%200%200%201-1.042-.018.751.751%200%200%201-.018-1.042l3.25-3.25a.75.75%200%200%201%201.06%200L10%207.94l4.72-4.72a.751.751%200%200%201%201.042.018.751.751%200%200%201%20.018%201.042Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs td a[href*="/blame/"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22M7.75%2014A1.75%201.75%200%200%201%206%2012.25v-8.5C6%202.784%206.784%202%207.75%202h6.5c.966%200%201.75.784%201.75%201.75v8.5A1.75%201.75%200%200%201%2014.25%2014Zm-.25-1.75c0%20.138.112.25.25.25h6.5a.25.25%200%200%200%20.25-.25v-8.5a.25.25%200%200%200-.25-.25h-6.5a.25.25%200%200%200-.25.25ZM4.9%203.508a.75.75%200%200%201-.274%201.025.249.249%200%200%200-.126.217v6.5c0%20.09.048.173.126.217a.75.75%200%200%201-.752%201.298A1.75%201.75%200%200%201%203%2011.25v-6.5c0-.649.353-1.214.874-1.516a.75.75%200%200%201%201.025.274ZM1.625%205.533h.001a.249.249%200%200%200-.126.217v4.5c0%20.09.048.173.126.217a.75.75%200%200%201-.752%201.298A1.748%201.748%200%200%201%200%2010.25v-4.5a1.748%201.748%200%200%201%20.873-1.516.75.75%200%201%201%20.752%201.299Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs td a[href$="/refs/"],
+div#cgit table.tabs td a[href*="/refs/?"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M5%205.372v.878c0%20.414.336.75.75.75h4.5a.75.75%200%200%200%20.75-.75v-.878a2.25%202.25%200%201%201%201.5%200v.878a2.25%202.25%200%200%201-2.25%202.25h-1.5v2.128a2.251%202.251%200%201%201-1.5%200V8.5h-1.5A2.25%202.25%200%200%201%203.5%206.25v-.878a2.25%202.25%200%201%201%201.5%200ZM5%203.25a.75.75%200%201%200-1.5%200%20.75.75%200%200%200%201.5%200Zm6.75.75a.75.75%200%201%200%200-1.5.75.75%200%200%200%200%201.5Zm-3%208.75a.75.75%200%201%200-1.5%200%20.75.75%200%200%200%201.5%200Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+
+div#cgit table.tabs td a[href^="http://"],
+div#cgit table.tabs td a[href^="https://"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22m7.775%203.275%201.25-1.25a3.5%203.5%200%201%201%204.95%204.95l-2.5%202.5a3.5%203.5%200%200%201-4.95%200%20.751.751%200%200%201%20.018-1.042.751.751%200%200%201%201.042-.018%201.998%201.998%200%200%200%202.83%200l2.5-2.5a2.002%202.002%200%200%200-2.83-2.83l-1.25%201.25a.751.751%200%200%201-1.042-.018.751.751%200%200%201-.018-1.042Zm-4.69%209.64a1.998%201.998%200%200%200%202.83%200l1.25-1.25a.751.751%200%200%201%201.042.018.751.751%200%200%201%20.018%201.042l-1.25%201.25a3.5%203.5%200%201%201-4.95-4.95l2.5-2.5a3.5%203.5%200%200%201%204.95%200%20.751.751%200%200%201-.018%201.042.751.751%200%200%201-1.042.018%201.998%201.998%200%200%200-2.83%200l-2.5%202.5a1.998%201.998%200%200%200%200%202.83Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit table.tabs a[href^="http://"]:after,
+div#cgit table.tabs a[href^="https://"]:after {
+ content: "";
+ display: none;
+}
+
+div#cgit table.tabs td.form input.txt,
+div#cgit table.tabs td.form input[type="search"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20version%3D%221.1%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M10.68%2011.74a6%206%200%200%201-7.922-8.982%206%206%200%200%201%208.982%207.922l3.04%203.04a.749.749%200%200%201-.326%201.275.749.749%200%200%201-.734-.215ZM11.5%207a4.499%204.499%200%201%200-8.997%200A4.499%204.499%200%200%200%2011.5%207Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+ background-repeat: no-repeat;
+ background-position: 0.25rem;
+ background-size: 1rem;
+ padding-left: 1.5rem;
+}
+
+div#cgit table#header td.form form select {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%23ffffff%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22M9.5%203.25a2.25%202.25%200%201%201%203%202.122V6A2.5%202.5%200%200%201%2010%208.5H6a1%201%200%200%200-1%201v1.128a2.251%202.251%200%201%201-1.5%200V5.372a2.25%202.25%200%201%201%201.5%200v1.836A2.493%202.493%200%200%201%206%207h4a1%201%200%200%200%201-1v-.628A2.25%202.25%200%200%201%209.5%203.25Zm-6%200a.75.75%200%201%200%201.5%200%20.75.75%200%200%200-1.5%200Zm8.25-.75a.75.75%200%201%200%200%201.5.75.75%200%200%200%200-1.5ZM4.25%2012a.75.75%200%201%200%200%201.5.75.75%200%200%200%200-1.5Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+ background-repeat: no-repeat;
+ background-position: 0.25rem;
+ background-size: 1rem;
+ padding-left: 1.5rem;
+}
+
+div#cgit div.cgit-panel td.ctrl select {
+ background-repeat: no-repeat;
+ background-position: 0.25rem;
+ background-size: 1rem;
+ padding-left: 1.5rem;
+}
+div#cgit div.cgit-panel td.ctrl select[name="context"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22m8.177.677%202.896%202.896a.25.25%200%200%201-.177.427H8.75v1.25a.75.75%200%200%201-1.5%200V4H5.104a.25.25%200%200%201-.177-.427L7.823.677a.25.25%200%200%201%20.354%200ZM7.25%2010.75a.75.75%200%200%201%201.5%200V12h2.146a.25.25%200%200%201%20.177.427l-2.896%202.896a.25.25%200%200%201-.354%200l-2.896-2.896A.25.25%200%200%201%205.104%2012H7.25v-1.25Zm-5-2a.75.75%200%200%200%200-1.5h-.5a.75.75%200%200%200%200%201.5h.5ZM6%208a.75.75%200%200%201-.75.75h-.5a.75.75%200%200%201%200-1.5h.5A.75.75%200%200%201%206%208Zm2.25.75a.75.75%200%200%200%200-1.5h-.5a.75.75%200%200%200%200%201.5h.5ZM12%208a.75.75%200%200%201-.75.75h-.5a.75.75%200%200%201%200-1.5h.5A.75.75%200%200%201%2012%208Zm2.25.75a.75.75%200%200%200%200-1.5h-.5a.75.75%200%200%200%200%201.5h.5Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit div.cgit-panel td.ctrl select[name="ignorews"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M8%202c1.981%200%203.671.992%204.933%202.078%201.27%201.091%202.187%202.345%202.637%203.023a1.62%201.62%200%200%201%200%201.798c-.45.678-1.367%201.932-2.637%203.023C11.67%2013.008%209.981%2014%208%2014c-1.981%200-3.671-.992-4.933-2.078C1.797%2010.83.88%209.576.43%208.898a1.62%201.62%200%200%201%200-1.798c.45-.677%201.367-1.931%202.637-3.022C4.33%202.992%206.019%202%208%202ZM1.679%207.932a.12.12%200%200%200%200%20.136c.411.622%201.241%201.75%202.366%202.717C5.176%2011.758%206.527%2012.5%208%2012.5c1.473%200%202.825-.742%203.955-1.715%201.124-.967%201.954-2.096%202.366-2.717a.12.12%200%200%200%200-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824%204.242%209.473%203.5%208%203.5c-1.473%200-2.825.742-3.955%201.715-1.124.967-1.954%202.096-2.366%202.717ZM8%2010a2%202%200%201%201-.001-3.999A2%202%200%200%201%208%2010Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit div.cgit-panel td.ctrl select[name="dt"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%3E%3Cpath%20d%3D%22M1%201.75C1%20.784%201.784%200%202.75%200h7.586c.464%200%20.909.184%201.237.513l2.914%202.914c.329.328.513.773.513%201.237v9.586A1.75%201.75%200%200%201%2013.25%2016H2.75A1.75%201.75%200%200%201%201%2014.25Zm1.75-.25a.25.25%200%200%200-.25.25v12.5c0%20.138.112.25.25.25h10.5a.25.25%200%200%200%20.25-.25V4.664a.25.25%200%200%200-.073-.177l-2.914-2.914a.25.25%200%200%200-.177-.073ZM8%203.25a.75.75%200%200%201%20.75.75v1.5h1.5a.75.75%200%200%201%200%201.5h-1.5v1.5a.75.75%200%200%201-1.5%200V7h-1.5a.75.75%200%200%201%200-1.5h1.5V4A.75.75%200%200%201%208%203.25Zm-3%208a.75.75%200%200%201%20.75-.75h4.5a.75.75%200%200%201%200%201.5h-4.5a.75.75%200%200%201-.75-.75Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit div.cgit-panel td.ctrl select[name="period"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22M4.75%200a.75.75%200%200%201%20.75.75V2h5V.75a.75.75%200%200%201%201.5%200V2h1.25c.966%200%201.75.784%201.75%201.75v10.5A1.75%201.75%200%200%201%2013.25%2016H2.75A1.75%201.75%200%200%201%201%2014.25V3.75C1%202.784%201.784%202%202.75%202H4V.75A.75.75%200%200%201%204.75%200ZM2.5%207.5v6.75c0%20.138.112.25.25.25h10.5a.25.25%200%200%200%20.25-.25V7.5Zm10.75-4H2.75a.25.25%200%200%200-.25.25V6h11V3.75a.25.25%200%200%200-.25-.25Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+div#cgit div.cgit-panel td.ctrl select[name="ofs"] {
+ background-image: url('data:image/svg+xml,%3Csvg%20fill%3D%22%2359636e%22%20xmlns=%22http:%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22M2%205.5a3.5%203.5%200%201%201%205.898%202.549%205.508%205.508%200%200%201%203.034%204.084.75.75%200%201%201-1.482.235%204%204%200%200%200-7.9%200%20.75.75%200%200%201-1.482-.236A5.507%205.507%200%200%201%203.102%208.05%203.493%203.493%200%200%201%202%205.5ZM11%204a3.001%203.001%200%200%201%202.22%205.018%205.01%205.01%200%200%201%202.56%203.012.749.749%200%200%201-.885.954.752.752%200%200%201-.549-.514%203.507%203.507%200%200%200-2.522-2.372.75.75%200%200%201-.574-.73v-.352a.75.75%200%200%201%20.416-.672A1.5%201.5%200%200%200%2011%205.5.75.75%200%200%201%2011%204Zm-5.5-.5a2%202%200%201%200-.001%203.999A2%202%200%200%200%205.5%203.5Z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E');
+}
+
+/* tables */
+
+div#cgit table.commit-info th {
+ text-transform: capitalize;
+}
+
+div#cgit table.commit-info th:after {
+ content: ":";
+}
+
+@media (max-width: 600px) {
+ div#cgit table.commit-info td.sha1 {
+ word-break: break-all;
+ }
+}
+
+div#cgit div.commit-msg:empty {
+ display: none;
+}
+
+div#cgit table.diff,
+div#cgit table.ssdiff {
+ margin: var(--content-v-margin) 0;
+}
+
+div#cgit table.list td a {
+ color: var(--text-color);
+}
+
+div#cgit a,
+div#cgit table.diffstat td.upd a,
+div#cgit table.list td a.ls-dir,
+div#cgit table.list td a:hover {
+ color: var(--link-color);
+}
+
+div#cgit table.list tr,
+div#cgit table.list tr.nohover,
+div#cgit table.list tr.nohover:hover,
+div#cgit table.stats tr,
+div#cgit table.list tr:nth-child(even),
+div#cgit table.list tr:nth-child(odd) {
+ background-color: transparent;
+}
+
+div#cgit table.list tr,
+div#cgit table.stats tr {
+ height: var(--size-header);
+}
+
+div#cgit table.list th {
+ vertical-align: inherit;
+}
+
+div#cgit table.list {
+ border-collapse: separate;
+ border-spacing: 0px;
+ border-radius: var(--border-radius);
+ border: var(--border-color) 1px solid;
+}
+
+div#cgit table.list td,
+div#cgit table.list th,
+div#cgit table.stats td,
+div#cgit table.stats th {
+ border: none;
+ border-top: var(--border-color) 1px solid;
+ background-color: transparent;
+}
+
+div#cgit table.list th,
+div#cgit table.stats th,
+div#cgit table.list tr:hover,
+div#cgit table.stats tr:hover,
+div#cgit table.list tr.nohover-highlight,
+div#cgit table.list tr.nohover-highlight:hover:nth-child(even),
+div#cgit table.list tr.nohover-highlight:hover:nth-child(odd) {
+ background-color: var(--light-bg-color);
+}
+
+div#cgit table.list tr:first-child th:first-child,
+div#cgit table.list tr:first-child td:first-child,
+div#cgit table.stats tr:first-child th:first-child,
+div#cgit table.stats tr:first-child td:first-child {
+ border-top-left-radius: var(--border-radius);
+}
+div#cgit table.list tr:first-child th:last-child,
+div#cgit table.list tr:first-child td:last-child,
+div#cgit table.stats tr:first-child th:last-child,
+div#cgit table.stats tr:first-child td:last-child {
+ border-top-right-radius: var(--border-radius);
+}
+div#cgit table.list tr:last-child th:last-child,
+div#cgit table.list tr:last-child td:last-child,
+div#cgit table.stats tr:last-child th:last-child,
+div#cgit table.stats tr:last-child td:last-child {
+ border-bottom-right-radius: var(--border-radius);
+}
+div#cgit table.list tr:last-child th:first-child,
+div#cgit table.list tr:last-child td:first-child,
+div#cgit table.stats tr:last-child th:first-child,
+div#cgit table.stats tr:last-child td:first-child {
+ border-bottom-left-radius: var(--border-radius);
+}
+
+div#cgit table.list td,
+div#cgit table.list th,
+div#cgit table.diffstat td,
+div#cgit table.stats td,
+div#cgit table.stats td {
+ padding: 0 var(--inner-pad);
+}
+
+div#cgit table.list tr:first-child td,
+div#cgit table.list tr:first-child th,
+div#cgit table.stats tr:first-child td,
+div#cgit table.stats tr:first-child th,
+div#cgit table.list tr.nohover-highlight td {
+ border-top: none;
+}
+
+div#cgit table.list tr.nohover:has(> td:only-child) {
+ display: none;
+}
+div#cgit table.list tr.nohover:has(> td:only-child *) {
+ display: table-row;
+}
+
+/* tags */
+
+div#cgit a.deco,
+div#cgit a.branch-deco,
+div#cgit a.tag-deco,
+div#cgit a.tag-annotated-deco,
+div#cgit a.remote-deco {
+ color: var(--text-color);
+ background: transparent;
+ border: var(--border-color) 1px solid;
+ border-radius: var(--border-radius);
+ margin: 0 0 0 var(--inner-pad);
+ padding: 0 var(--inner-pad);
+ font-weight: normal;
+ text-decoration: none;
+}
+
+div#cgit a.deco {
+ background-color: var(--del-bg-color);
+ border-color: var(--del-border-color);
+}
+div#cgit a.branch-deco {
+ background-color: var(--add-bg-color);
+ border-color: var(--add-border-color);
+}
+div#cgit a.tag-deco,
+div#cgit a.tag-annotated-deco {
+ background-color: var(--change-bg-color);
+ border-color: var(--change-border-color);
+}
+div#cgit a.remote-deco {
+ background-color: var(--hunk-bg-color);
+ border-color: var(--hunk-border-color);
+}
+
+div#cgit a.deco:hover,
+div#cgit a.branch-deco:hover,
+div#cgit a.tag-deco:hover,
+div#cgit a.tag-annotated-deco:hover,
+div#cgit a.remote-deco:hover,
+div#cgit table.list td a.deco:hover,
+div#cgit table.list td a.branch-deco:hover,
+div#cgit table.list td a.tag-deco:hover,
+div#cgit table.list td a.tag-annotated-deco:hover,
+div#cgit table.list td a.remote-deco:hover {
+ color: var(--text-color);
+}
+
+div#cgit a.button {
+ font-size: var(--font-size-small);
+ text-decoration: underline;
+}
+
+/* TODO: age colors - by opacity? */
+div#cgit span.age-mins,
+div#cgit span.age-hours {
+ color: var(--add-text-color);
+}
+div#cgit span.age-days {
+ color: inherit;
+}
+div#cgit span.age-weeks {
+ color: inherit;
+ opacity: 0.8;
+}
+div#cgit span.age-months {
+ color: inherit;
+ opacity: 0.6;
+}
+div#cgit span.age-years {
+ color: inherit;
+ opacity: 0.4;
+}
+
+/* panels */
+
+div#cgit table.diffstat {
+ border-spacing: 0;
+ border-radius: var(--border-radius);
+ border: var(--border-color) 1px solid;
+ background-color: transparent;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+div#cgit table.diffstat > tr,
+div#cgit table.diffstat > tbody > tr {
+ height: var(--size-header);
+ border-top: var(--border-color) 1px solid;
+}
+
+div#cgit table.diffstat > tr:hover,
+div#cgit table.diffstat > tbody > tr:hover {
+ background-color: var(--light-bg-color);
+}
+
+div#cgit table.diffstat td {
+ white-space: nowrap;
+}
+
+div#cgit table.diffstat td.graph,
+div#cgit table.diffstat td.graph table {
+ width: 100%;
+}
+
+div#cgit table.diffstat td.graph td {
+ height: var(--inner-pad);
+}
+
+div#cgit table.diffstat td.graph td.add {
+ background-color: var(--add-border-color);
+}
+
+div#cgit table.diffstat td.graph td.rem {
+ background-color: var(--del-border-color);
+}
+
+div#cgit div.diffstat-header,
+div#cgit div.diffstat-summary {
+ border: var(--border-color) 1px solid;
+ background-color: var(--light-bg-color);
+ padding: 0 var(--inner-pad);
+ line-height: var(--size-header);
+}
+
+div#cgit div.diffstat-header {
+ border-radius: var(--border-radius) var(--border-radius) 0 0;
+ border-bottom: none;
+ margin-bottom: 0;
+}
+
+div#cgit div.diffstat-summary {
+ border-radius: 0 0 var(--border-radius) var(--border-radius);
+ border-top: none;
+ margin-top: 0;
+ color: var(--light-text-color);
+}
+
+div#cgit table.list td.ls-mode,
+div#cgit table.diffstat td.mode {
+ font-family: monospace;
+ white-space: nowrap;
+ font-size: var(--font-size-small);
+}
+
+div#cgit div.cgit-panel {
+ border-radius: var(--border-radius);
+ border: var(--border-color) 1px solid;
+ background-color: var(--light-bg-color);
+ float: none;
+ min-height: var(--size-header);
+ display: table;
+ font-size: var(--font-size-small);
+ padding: 0 var(--inner-pad);
+}
+
+div#cgit div.cgit-panel form {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: right;
+}
+
+div#cgit div.cgit-panel > b {
+ line-height: var(--size-header);
+ display: inline-block;
+ font-size: 1rem;
+ font-weight: normal;
+ white-space: pre;
+ color: var(--text-color);
+}
+
+div#cgit div.cgit-panel > b::first-letter {
+ text-transform: uppercase;
+}
+div#cgit div.cgit-panel > b::after {
+ content: ":";
+}
+
+div#cgit div.cgit-panel table {
+ border: none;
+ background: transparent;
+ vertical-align: middle;
+}
+
+div#cgit div.cgit-panel td {
+ display: none;
+}
+div#cgit div.cgit-panel table,
+div#cgit div.cgit-panel tr,
+div#cgit div.cgit-panel td.ctrl {
+ display: inline-block;
+ padding: 0;
+}
+
+div#cgit span.insertions,
+div#cgit table.diffstat td.add a {
+ color: var(--add-text-color);
+}
+
+div#cgit span.deletions,
+div#cgit table.diffstat td.del a,
+div#cgit table.diffstat td span.modechange {
+ color: var(--del-text-color);
+}
+
+div#cgit div.commit-subject,
+div#cgit div.content h2 {
+ font-size: 1.25rem;
+}
+
+div#cgit div.notes-header,
+div#cgit div.notes-footer {
+ display: none;
+}
+
+div#cgit div.notes {
+ border-radius: var(--border-radius);
+ border: var(--change-border-color) 1px solid;
+ background-color: var(--change-bg-color);
+ padding: var(--inner-pad);
+ float: none;
+}
+
+div#cgit table.stats {
+ border-collapse: separate;
+ border-spacing: 0px;
+ border-radius: var(--border-radius);
+ border: var(--border-color) 1px solid;
+}
+
+div#cgit table.stats td.sum {
+ color: var(--del-text-color);
+ font-weight: normal;
+}
+
+div#cgit table.stats td,
+div#cgit table.stats th {
+ text-align: right;
+}
+
+div#cgit table.stats td:first-child,
+div#cgit table.stats th:first-child {
+ text-align: left;
+}
+
+/* diffs */
+
+div#cgit table.diff td div.head {
+ color: inherit;
+ background-color: var(--light-bg-color);
+ margin-top: var(--inner-pad);
+ padding-top: var(--inner-pad);
+ border-top: var(--border-color) 1px solid;
+}
+
+div#cgit table.diff td div.hunk {
+ color: inherit;
+ background-color: var(--hunk-bg-color);
+}
+div#cgit table.diff td div.ctx {
+ color: inherit;
+ background-color: transparent;
+}
+div#cgit table.diff td div.add {
+ color: inherit;
+ background-color: var(--add-bg-color);
+}
+div#cgit table.diff td div.del {
+ color: inherit;
+ background-color: var(--del-bg-color);
+}
+
+div#cgit table.diff td div:first-child {
+ border-top: none;
+ margin-top: 0;
+}
+div#cgit table.diff td div:last-child {
+ padding-bottom: var(--inner-pad);
+}
+
+div#cgit table.diff td div {
+ padding: 0 var(--inner-pad);
+}
+div#cgit table.diff td {
+ padding: 0;
+}
+
+div#cgit table.diff,
+div#cgit table.ssdiff {
+ border-collapse: separate;
+ border-spacing: 0px;
+ border-radius: var(--border-radius);
+ border: var(--border-color) 1px solid;
+ width: 100%;
+ display: block;
+ overflow: scroll;
+}
+
+div#cgit table.diff > tbody,
+div#cgit table.ssdiff > tbody {
+ display: table;
+ width: 100%;
+}
+
+div#cgit table.diff td,
+div#cgit table.ssdiff td {
+ font-size: var(--font-size-small);
+ padding: 0;
+}
+
+div#cgit table.blob,
+div#cgit table.bin-blob {
+ font-size: var(--font-size-small);
+}
+
+div#cgit table.ssdiff td.lineno {
+ width: auto;
+ min-width: 3rem;
+ padding: 0 var(--inner-pad);
+}
+
+div#cgit table.ssdiff td.hunk,
+div#cgit table.ssdiff td.head {
+ padding-left: var(--inner-pad);
+}
+
+div#cgit table.ssdiff td.head {
+ padding-top: var(--inner-pad);
+}
+
+div#cgit table.diff:has(> tr:only-child > td:only-child:empty),
+div#cgit table.diff:has(> tbody > tr:only-child > td:only-child:empty),
+div#cgit table.diff:empty,
+div#cgit table.ssdiff:empty,
+div#cgit table.ssdiff td.space,
+div#cgit table.ssdiff tr:last-child td.foot {
+ display: none;
+}
+
+div#cgit table.ssdiff td {
+ border-left: none;
+ border-right: none;
+}
+
+div#cgit table.ssdiff td.hunk,
+div#cgit table.ssdiff td.head,
+div#cgit table.ssdiff td.foot {
+ border-top: none;
+ border-bottom: none;
+}
+
+div#cgit table.ssdiff td.head div.head {
+ color: inherit;
+}
+
+div#cgit table.ssdiff td.head,
+div#cgit table.ssdiff td.lineno,
+div#cgit table.ssdiff td.foot {
+ color: inherit;
+ background-color: var(--light-bg-color);
+}
+div#cgit table.ssdiff td.hunk {
+ color: inherit;
+ background-color: var(--hunk-bg-color);
+}
+div#cgit table.ssdiff td.add {
+ color: inherit;
+ background-color: var(--add-bg-color);
+}
+div#cgit table.ssdiff td.add_dark,
+div#cgit table.ssdiff span.add {
+ color: inherit;
+ background-color: var(--add-border-color);
+}
+div#cgit table.ssdiff td.del {
+ color: inherit;
+ background-color: var(--del-bg-color);
+}
+div#cgit table.ssdiff td.del_dark,
+div#cgit table.ssdiff span.del {
+ color: inherit;
+ background-color: var(--del-border-color);
+}
+div#cgit table.ssdiff td.changed {
+ color: inherit;
+ background-color: var(--change-bg-color);
+}
+div#cgit table.ssdiff td.changed_dark {
+ color: inherit;
+ background-color: var(--change-border-color);
+}
+
+div#cgit table.ssdiff td.foot {
+ border-top: var(--border-color) 1px solid;
+}
+
+/* blobs */
+
+div#cgit table.blob,
+div#cgit table.bin-blob {
+ border-radius: var(--border-radius);
+ border-collapse: separate;
+ border-spacing: 0;
+ border: var(--border-color) 1px solid;
+}
+
+div#cgit table.blob {
+ display: block;
+ overflow: scroll;
+}
+
+div#cgit table.blob td.linenumbers {
+ border-right: var(--border-color) 1px solid;
+ background-color: var(--light-bg-color);
+}
+
+div#cgit table.blob td.hashes,
+div#cgit table.blob td.linenumbers,
+div#cgit table.blob td.lines,
+div#cgit table.blob td.linenumbers a,
+div#cgit table.ssdiff td.lineno a {
+ color: var(--text-color);
+}
+
+div#cgit table.blob td.linenumbers a:hover,
+div#cgit table.ssdiff td.lineno a:hover {
+ color: var(--link-color);
+}
+
+div#cgit table.blob td.hashes,
+div#cgit table.blob td.linenumbers,
+div#cgit table.blob td.lines {
+ padding: var(--inner-pad) 0;
+}
+
+div#cgit table.blame > tbody {
+ display: table;
+ width: 100%;
+}
+
+div#cgit table.blame td.lines {
+ width: 100%;
+}
+
+div#cgit table.blame div.alt:nth-child(even) {
+ background-color: var(--light-bg-color);
+}
+
+div#cgit table.blame div.alt:nth-child(odd) {
+ background-color: transparent;
+}
+
+div#cgit table.bin-blob th {
+ border: none;
+ border-bottom: var(--border-color) 1px solid;
+ background-color: var(--light-bg-color);
+}
+
+div#cgit table.bin-blob td,
+div#cgit table.bin-blob th {
+ border-left: var(--border-color) 1px solid;
+}
+div#cgit table.bin-blob td:first-child,
+div#cgit table.bin-blob th:first-child {
+ border-left: none;
+}
+
+div#cgit table.blob td.linenumbers div.alt {
+ padding: 0;
+}
+
+div#cgit table.blob td.linenumbers pre,
+div#cgit table.blame td.lines > div > pre,
+div#cgit table.blob td.lines pre,
+div#cgit table.blob td.hashes div.alt {
+ padding: 0 var(--inner-pad);
+ tab-size: 4;
+}
+
+/* markup */
+
+pre code.hljs,
+code.hljs {
+ padding: 0;
+ color: var(--text-color);
+ background: transparent;
+}
+
+div#cgit div.content div.markdown-body {
+ line-height: 1.5;
+}
+
+div#cgit div.content div.markdown-body h1,
+div#cgit div.content div.markdown-body h2,
+div#cgit div.content div.markdown-body h3,
+div#cgit div.content div.markdown-body h4,
+div#cgit div.content div.markdown-body h5,
+div#cgit div.content div.markdown-body h6 {
+ margin: var(--content-v-margin) 0 1rem 0;
+}
+
+div#cgit div.content div.markdown-body p,
+div#cgit div.content div.markdown-body pre,
+div#cgit div.content div.markdown-body ul,
+div#cgit div.content div.markdown-body ol,
+div#cgit div.content div.markdown-body dl,
+div#cgit div.content div.markdown-body blockquote,
+div#cgit div.content div.markdown-body table {
+ margin: 1rem 0;
+}
+
+div#cgit div.content div.markdown-body li ul,
+div#cgit div.content div.markdown-body li ol {
+ margin: 0;
+}
+
+div#cgit div.content div.markdown-body img,
+div#cgit div.content div.markdown-body video,
+div#cgit div.content div.markdown-body hr {
+ margin: 1rem auto;
+ padding: 0;
+}
+
+div#cgit div.content div.markdown-body img,
+div#cgit div.content div.markdown-body video {
+ border: none;
+ display: block;
+ max-width: 100%;
+}
+
+div#cgit div.content div.markdown-body hr {
+ border: none;
+ color: var(--border-color);
+ background-color: var(--border-color);
+ height: 1px;
+}
+
+div#cgit div.content div.markdown-body pre {
+ background-color: var(--light-bg-color);
+ width: 100%;
+ max-width: 100%;
+ overflow: scroll;
+ padding: var(--inner-pad);
+ border-radius: var(--border-radius);
+ box-sizing: border-box;
+}
+
+div#cgit div.content div.markdown-body code,
+div#cgit div.content div.markdown-body tt {
+ padding: .2em .4em;
+ font-size: var(--font-size-small);
+ background-color: var(--lighter-bg-color);
+ border-radius: var(--border-radius);
+}
+
+div#cgit div.content div.markdown-body pre code {
+ background-color: transparent;
+ white-space: pre;
+ tab-size: 4;
+ padding: 0;
+}
+
+div#cgit div.content div.markdown-body table {
+ border-collapse: collapse;
+}
+
+div#cgit div.content div.markdown-body table td,
+div#cgit div.content div.markdown-body table th {
+ border: var(--border-color) 1px solid;
+ padding: var(--inner-pad);
+ text-align: left;
+}
+
+div#cgit div.content div.markdown-body table th,
+div#cgit div.content div.markdown-body table tr:hover {
+ background-color: var(--light-bg-color);
+}