From 804fddcc9c5a7b2eee8d6e457f3745aaff326805 Mon Sep 17 00:00:00 2001 From: h Date: Tue, 25 Nov 2025 22:48:39 +0100 Subject: [PATCH] feat(themes): add neogothic theme, add theme switcher to footer --- public/assets/css/theme-neogothic.css | 401 +++++++++++++++++++++++ templates/custom/extra_links_footer.tmpl | 13 + 2 files changed, 414 insertions(+) create mode 100644 public/assets/css/theme-neogothic.css create mode 100644 templates/custom/extra_links_footer.tmpl diff --git a/public/assets/css/theme-neogothic.css b/public/assets/css/theme-neogothic.css new file mode 100644 index 0000000..30c3892 --- /dev/null +++ b/public/assets/css/theme-neogothic.css @@ -0,0 +1,401 @@ +@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&family=JetBrains+Mono:wght@300;400;700&family=Playfair+Display:wght@400;700&display=swap'); + +gitea-theme-meta-info { + --theme-display-name: "neogothic"; +} + +:root { + --is-dark-theme: true; + --color-primary: #00f0ff; + --color-primary-dark-1: #00c0cc; + --color-primary-dark-2: #009099; + --color-primary-light-1: #33f3ff; + --color-primary-light-2: #66f6ff; + --color-primary-alpha-10: rgba(0, 240, 255, 0.1); + --color-primary-alpha-20: rgba(0, 240, 255, 0.2); + --color-primary-alpha-30: rgba(0, 240, 255, 0.3); + --color-primary-alpha-40: rgba(0, 240, 255, 0.4); + --color-primary-alpha-50: rgba(0, 240, 255, 0.5); + --color-primary-alpha-60: rgba(0, 240, 255, 0.6); + + --color-body: #050505; + --color-box-body: rgba(10, 10, 10, 0.8); + --color-box-header: rgba(5, 5, 5, 0.9); + --color-footer: #050505; + --color-navbar: rgba(5, 5, 5, 0.95); + --color-menu: #0a0a0a; + --color-card: rgba(10, 10, 10, 0.6); + + --color-text: #e0e0e0; + --color-text-light: #c0c0c0; + --color-text-light-2: #a0a0a0; + --color-text-light-3: #808080; + --color-link: #00f0ff; + --color-link-hover: #66f6ff; + + --color-border: #333333; + --color-border-secondary: #222222; + --color-secondary: #222222; + + --color-input-background: #000000; + --color-input-text: #e0e0e0; + --color-input-border: #333333; + --color-input-border-hover: #00f0ff; + + --color-code-bg: #1e1f22; + --color-code-sidebar-bg: #2b2d30; + --color-editor-line-number: #4b5059; + + --fonts-proportional: 'JetBrains Mono', 'Fira Code', monospace; + --fonts-monospace: 'JetBrains Mono', 'Fira Code', monospace; + --fonts-regular: 'JetBrains Mono', 'Fira Code', monospace; + --font-family-header: 'Cinzel', 'Playfair Display', serif; +} + +body { + background-color: var(--color-body); + color: var(--color-text); + font-family: var(--fonts-regular); + -webkit-font-smoothing: antialiased; +} + +h1, h2, h3, h4, h5, h6, .ui.header { + font-family: var(--font-family-header) !important; + font-weight: 400; + letter-spacing: 0.05em; + text-transform: uppercase; + color: var(--color-text); +} + +* { + border-radius: 0px !important; +} + +.ui.menu, .ui.secondary.menu, .following.bar { + background: var(--color-navbar) !important; + border-bottom: 1px solid var(--color-primary-alpha-30); + backdrop-filter: blur(10px); +} + +.ui.secondary.menu .item { + color: var(--color-text-light); + font-family: var(--fonts-monospace); + text-transform: uppercase; + font-size: 0.9em; + border: none !important; + margin: 0 5px; +} + +.ui.secondary.menu .active.item { + color: var(--color-primary); + background: transparent !important; + box-shadow: inset 0 -2px 0 0 var(--color-primary) !important; + border: none !important; +} + +.ui.container.fluid.padded { + border-bottom: 1px solid var(--color-border); + background: linear-gradient(180deg, rgba(5,5,5,0) 0%, rgba(0,240,255,0.05) 100%); +} + +.ui.button, .ui.basic.button { + background: rgba(0, 0, 0, 0.5); + border: 1px solid var(--color-primary-alpha-50); + color: var(--color-primary); + font-family: var(--fonts-monospace); + text-transform: uppercase; + letter-spacing: 1px; + transition: all 0.2s ease; + box-shadow: none !important; +} + +.ui.button:hover { + background: var(--color-primary-alpha-20); + color: #fff; + border-color: var(--color-primary); + box-shadow: 0 0 10px var(--color-primary-alpha-40) !important; +} + +.ui.primary.button, .ui.green.button, .ui.blue.button { + background: var(--color-primary) !important; + color: #000 !important; + border: 1px solid var(--color-primary); + font-weight: 700; +} + +.ui.primary.button:hover { + background: var(--color-primary-light-1) !important; + box-shadow: 0 0 15px var(--color-primary) !important; +} + +.ui.buttons { + display: inline-flex !important; + overflow: visible !important; + background: transparent !important; + border: none !important; + box-shadow: none !important; + margin: 0 !important; +} + +.ui.buttons > .button, +.ui.buttons > .ui.button { + margin: 0 !important; + margin-left: -1px !important; + z-index: 1; + position: relative; + border: 1px solid var(--color-primary-alpha-50) !important; + box-shadow: none !important; + flex-shrink: 0; +} + +.ui.buttons > .button:first-child, +.ui.buttons > .ui.button:first-child { + margin-left: 0 !important; +} + +.ui.buttons > .button:hover, +.ui.buttons > .button:active, +.ui.buttons > .button.active, +.ui.buttons > .ui.button:hover, +.ui.buttons > .ui.button:active, +.ui.buttons > .ui.button.active { + z-index: 10; + border: 1px solid var(--color-primary) !important; + box-shadow: none !important; +} + +.ui.vertical.buttons { + display: inline-flex !important; + flex-direction: column !important; + overflow: visible !important; + background: transparent !important; + border: none !important; + box-shadow: none !important; +} + +.ui.vertical.buttons > .button, +.ui.vertical.buttons > .ui.button { + margin: 0 !important; + margin-top: -1px !important; + margin-left: 0 !important; + z-index: 1; + position: relative; + border: 1px solid var(--color-primary-alpha-50) !important; +} + +.ui.vertical.buttons > .button:first-child, +.ui.vertical.buttons > .ui.button:first-child { + margin-top: 0 !important; +} + +.ui.vertical.buttons > .button:hover, +.ui.vertical.buttons > .button:active, +.ui.vertical.buttons > .button.active, +.ui.vertical.buttons > .ui.button:hover, +.ui.vertical.buttons > .ui.button:active, +.ui.vertical.buttons > .ui.button.active { + z-index: 10; + border: 1px solid var(--color-primary) !important; +} + +.ui.input input, .ui.form input[type="text"], .ui.form input[type="email"], .ui.form input[type="password"] { + background: transparent !important; + border: 1px solid var(--color-border) !important; + color: var(--color-text) !important; + padding: 10px 10px 10px 10px !important; +} + +.ui.icon.input > i.icon { + color: var(--color-primary); + opacity: 0.8; +} + +.ui.icon.input input { + padding-right: 2.67142857em !important; +} + +.ui.left.icon.input input { + padding-left: 2.67142857em !important; + padding-right: 10px !important; +} + +.ui.input input:focus, .ui.form input:focus { + border-color: var(--color-primary) !important; +} + +.ui.card, .ui.segment, .ui.attached.segment { + background: var(--color-box-body) !important; + border: 1px solid var(--color-border); + backdrop-filter: blur(10px); + box-shadow: none !important; +} + +.ui.header.segment, .ui.top.attached.header { + background: var(--color-box-header) !important; + border-bottom: 1px solid var(--color-border); +} + +.ui.segment.code-view, .view-code, pre, code, .chroma { + background-color: var(--color-code-bg) !important; + color: #bcbec4 !important; + border: 1px solid var(--color-border-secondary); +} + +.lines-num { + background-color: var(--color-code-sidebar-bg) !important; + color: var(--color-editor-line-number) !important; +} + +.chroma .k, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .kt { color: #cf8e6d !important; } +.chroma .s, .chroma .s1, .chroma .s2, .chroma .sb, .chroma .sc { color: #6aab73 !important; } +.chroma .sd { color: #5f826b !important; font-style: italic; } +.chroma .c, .chroma .c1, .chroma .cm { color: #7a7e85 !important; } +.chroma .m, .chroma .mb, .chroma .mf, .chroma .mh, .chroma .mi, .chroma .mo { color: #2aacb8 !important; } +.chroma .nf, .chroma .fm { color: #56a8f5 !important; } +.chroma .nd { color: #b3ae60 !important; } +.chroma .nc { color: #bcbec4 !important; } +.chroma .o, .chroma .ow { color: #bcbec4 !important; } +.chroma .p { color: #bcbec4 !important; } +.chroma .n { color: #bcbec4 !important; } +.chroma .na { color: #c77dbb !important; } +.chroma .nb { color: #8888c6 !important; } +.chroma .nt { color: #d5b778 !important; } +.chroma .nv, .chroma .vc, .chroma .vg, .chroma .vi { color: #bcbec4 !important; } +.chroma .kc { color: #cf8e6d !important; } +.chroma .nn { color: #bcbec4 !important; } + +.ui.table { + background: transparent; + border: 1px solid var(--color-border); +} +.ui.table thead th { + background: rgba(255,255,255,0.05); + color: var(--color-text); + border-bottom: 1px solid var(--color-primary-alpha-30); +} +.ui.table tbody tr { + border-bottom: 1px solid var(--color-border-secondary); +} + +.ui.label { + background: transparent; + border: 1px solid var(--color-border); + color: var(--color-text-light); +} + +.ui.popup, +.ui.tooltip, +.tippy-box, +[data-tooltip]:before, +[data-tooltip]:after { + background: var(--color-menu) !important; + color: var(--color-text) !important; + border: 1px solid var(--color-border) !important; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5) !important; +} + +.tippy-content { + background: var(--color-menu) !important; + color: var(--color-text) !important; +} + +.tippy-arrow { + color: var(--color-menu) !important; +} + +.ui.popup:before { + background: var(--color-menu) !important; + border: 1px solid var(--color-border) !important; +} + +.ui.dropdown .menu, +.ui.selection.dropdown .menu, +.ui.active.dropdown .menu, +.ui.visible.dropdown > .menu { + background: var(--color-menu) !important; + border: 1px solid var(--color-border) !important; + z-index: 1000 !important; + position: absolute !important; +} + +.ui.dropdown .menu > .item, +.ui.selection.dropdown .menu > .item { + background: transparent !important; + color: var(--color-text) !important; + border-top: 1px solid var(--color-border-secondary) !important; +} + +.ui.dropdown .menu > .item:first-child { + border-top: none !important; +} + +.ui.dropdown .menu > .item:hover, +.ui.dropdown .menu > .item.selected, +.ui.dropdown .menu > .item.active { + background: var(--color-primary-alpha-20) !important; + color: var(--color-primary) !important; +} + +.ui.dropdown { + position: relative; + z-index: 10; +} + +.ui.dropdown.active, +.ui.dropdown.visible { + z-index: 1001 !important; +} + +footer { + background: var(--color-footer) !important; + border-top: 1px solid var(--color-border); +} + +.theme-selector-footer { + margin-left: 15px !important; + padding: 0 10px; +} + +.theme-selector-footer form { + display: inline-flex !important; + align-items: center !important; + gap: 6px !important; +} + +.theme-selector-footer select, +.theme-selector-footer .ui.dropdown { + background: var(--color-menu) !important; + border: 1px solid var(--color-border) !important; + color: var(--color-text) !important; + min-width: 100px !important; + padding: 3px 6px !important; + font-size: 0.8em !important; + height: auto !important; + min-height: unset !important; +} + +.theme-selector-footer .ui.button { + padding: 3px 8px !important; + font-size: 0.75em !important; + margin: 0 !important; +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} +::-webkit-scrollbar-track { + background: #2b2d30; +} +::-webkit-scrollbar-thumb { + background: #4b5059; + border: 1px solid #2b2d30; +} +::-webkit-scrollbar-thumb:hover { + background: #548af7; +} + +::selection { + background: #2e436e; + color: #bcbec4; +} diff --git a/templates/custom/extra_links_footer.tmpl b/templates/custom/extra_links_footer.tmpl new file mode 100644 index 0000000..6942437 --- /dev/null +++ b/templates/custom/extra_links_footer.tmpl @@ -0,0 +1,13 @@ +{{if .IsSigned}} + +{{end}}