first-commit

This commit is contained in:
johnabs
2026-03-27 14:50:18 -04:00
commit 7a38f74f3b
4 changed files with 906 additions and 0 deletions

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 bs-sensei
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

0
README.org Normal file
View File

234
home.tmpl Normal file
View File

@@ -0,0 +1,234 @@
{{template "base/head" .}}
<div class="page-content explore">
<style>
@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;600;700&family=IM+Fell+English:ital@0;1&display=swap');
.da-page * { box-sizing: border-box; margin: 0; padding: 0; }
.full.height, #navbar, .navbar, footer#footer,
.page-content { padding: 0 !important; margin: 0 !important; }
.da-bg {
position: fixed;
inset: 0;
z-index: 0;
background-image: url('https://images.unsplash.com/photo-1481627834876-b7833e8f5570?auto=format&fit=crop&w=1920&q=80');
background-size: cover;
background-position: center top;
}
.da-bg::after {
content: '';
position: absolute;
inset: 0;
background:
linear-gradient(180deg, rgba(5,3,1,0.72) 0%, rgba(8,5,2,0.68) 100%),
radial-gradient(ellipse 80% 50% at 50% 0%, rgba(196,96,28,0.15) 0%, transparent 70%);
}
.da-page {
position: fixed;
inset: 0;
z-index: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: 'IM Fell English', Georgia, serif;
color: #e8d5a3;
padding: 2rem;
gap: 1.5rem;
}
/* ── Header ──────────────────────────────────────────────── */
.da-header { text-align: center; }
.da-eyebrow {
font-family: 'Cinzel', serif;
font-size: 1.4rem;
letter-spacing: 0.5em;
text-transform: uppercase;
color: #b8905a;
margin-bottom: 0.6rem;
}
.da-title {
font-family: 'Cinzel', serif;
font-size: clamp(2.5rem, 5vw, 4.5rem);
font-weight: 700;
color: #f0d090;
letter-spacing: 0.12em;
line-height: 1;
text-shadow: 0 2px 30px rgba(212,162,40,0.5), 2px 4px 12px rgba(0,0,0,0.9);
margin-bottom: 0.5rem;
}
.da-subtitle {
font-family: 'IM Fell English', serif;
font-style: italic;
font-size: 2rem;
color: #9a7d5a;
letter-spacing: 0.06em;
}
/* ── Ornament ────────────────────────────────────────────── */
.da-ornament {
color: #8a6840;
font-size: 1.8rem;
letter-spacing: 0.5em;
display: flex;
align-items: center;
gap: 1.5rem;
width: 100%;
max-width: 600px;
}
.da-ornament::before,
.da-ornament::after {
content: '';
flex: 1;
height: 1px;
background: linear-gradient(90deg, transparent, #6a5030);
}
.da-ornament::after {
background: linear-gradient(90deg, #6a5030, transparent);
}
/* ── Inscription ─────────────────────────────────────────── */
.da-inscription {
background: rgba(11, 8, 4, 0.72);
border-top: 1px solid #3a2810;
border-bottom: 1px solid #3a2810;
padding: 1.25rem 3rem;
text-align: center;
backdrop-filter: blur(6px);
max-width: 700px;
width: 100%;
position: relative;
}
.da-inscription::before { content: '✦'; position: absolute; top: 0.5rem; left: 1rem; color: #6a5030; font-size: 1.3rem; }
.da-inscription::after { content: '✦'; position: absolute; top: 0.5rem; right: 1rem; color: #6a5030; font-size: 1.3rem; }
.da-inscription p {
font-family: 'IM Fell English', serif;
font-style: italic;
font-size: 2rem;
color: #b8905a;
line-height: 1.8;
}
/* ── Actions ─────────────────────────────────────────────── */
.da-actions {
display: flex;
justify-content: center;
gap: 1.25rem;
flex-wrap: wrap;
}
.da-btn {
font-family: 'Cinzel', serif;
font-size: 1.6rem;
font-weight: 600;
letter-spacing: 0.25em;
text-transform: uppercase;
padding: 0.85rem 2.5rem;
text-decoration: none;
border: 1px solid;
transition: all 220ms ease;
backdrop-filter: blur(4px);
display: inline-block;
}
.da-btn-primary {
background: rgba(120, 60, 15, 0.85);
color: #f0d090;
border-color: #a07020;
box-shadow: 0 4px 20px rgba(0,0,0,0.4);
}
.da-btn-primary:hover {
background: rgba(180, 90, 20, 0.92);
color: #fff8e0;
border-color: #d4a228;
box-shadow: 0 6px 28px rgba(196,96,28,0.3);
}
.da-btn-secondary {
background: rgba(11, 8, 4, 0.6);
color: #9a7d5a;
border-color: #6a5030;
}
.da-btn-secondary:hover { color: #c9b07a; border-color: #5a4020; }
/* ── Footer ──────────────────────────────────────────────── */
.da-footer {
position: fixed;
bottom: 0.75rem;
left: 50%;
transform: translateX(-50%);
}
.da-footer p {
font-family: 'IM Fell English', serif;
font-style: italic;
font-size: 1.36rem;
color: #6a5030;
letter-spacing: 0.03em;
white-space: nowrap;
}
.da-footer a { color: #5a4028; text-decoration: none; }
.da-footer a:hover { color: #c9a060; }
.da-photo-credit {
position: fixed;
bottom: 0.5rem;
left: 0.75rem;
font-family: 'Cinzel', serif;
font-size: 0.96rem;
letter-spacing: 0.08em;
color: rgba(40,25,8,0.35);
z-index: 10;
text-decoration: none;
}
.da-photo-credit:hover { color: rgba(100,70,30,0.7); }
</style>
<div class="da-bg"></div>
<div class="da-page">
<div class="da-header">
<div class="da-eyebrow">Codex &middot; Archive &middot; Repository</div>
<h1 class="da-title">{{AppName}}</h1>
<p class="da-subtitle">A curated archive of working manuscripts &amp; digital folios</p>
</div>
<div class="da-ornament">✦ ✦ ✦</div>
<div class="da-inscription">
<p>
Here are kept the working manuscripts, unfinished theories,<br>
and accumulated experiments of a restless scholar.
</p>
</div>
<div class="da-actions">
<a href="{{AppSubUrl}}/bs-sensei" class="da-btn da-btn-primary">Enter the Archive</a>
{{if .IsSigned}}
<a href="{{AppSubUrl}}/repo/create" class="da-btn da-btn-secondary">Open a New Volume</a>
{{end}}
</div>
<div class="da-footer">
<p>Powered by <a href="https://gitea.com">Gitea</a> &bull; {{AppName}}</p>
</div>
</div>
<a class="da-photo-credit"
href="https://unsplash.com/photos/gray-scale-photo-of-books-b7833e8f5570"
target="_blank" rel="noopener">Photo: Thomas Kelley / Unsplash</a>
</div>
{{template "base/footer" .}}

651
theme-custom.css Normal file
View File

@@ -0,0 +1,651 @@
gitea-theme-meta-info { --theme-display-name: "Codex Obscura"; }\n:root { --is-dark-theme: true; }
/* ============================================================
CODEX OBSCURA — Gitea Custom Theme
Fall Palette × Dark Academia × Pixel Borders
Matches the Hugo theme aesthetic
============================================================ */
@import url('https://fonts.googleapis.com/css2?family=VT323&family=IM+Fell+English:ital@0;1&family=Josefin+Sans:ital,wght@0,300;0,400;0,600;1,300;1,400&family=Courier+Prime:ital,wght@0,400;0,700;1,400&display=swap');
/* ── Core colour overrides ───────────────────────────────── */
:root {
--color-primary: #d4a228;
--color-primary-dark: #a07818;
--color-primary-light: #f0c040;
--color-secondary: #c4601c;
--color-bg-primary: #130e07;
--color-bg-secondary: #1c1509;
--color-bg-tertiary: #261c0e;
--color-bg-hover: #312414;
--color-primary-light-4: #3a2a14;
--color-primary-light-3: #6a4018;
--color-primary-light-2: #a07818;
--color-primary-light-1: #c4881c;
--color-primary: #d4a228;
--color-primary-dark-1: #d4a228;
--color-primary-dark-2: #e8b830;
--color-primary-dark-3: #f0c040;
--color-primary-dark-4: #f0c040;
--color-text-primary: #e8d5a3;
--color-text-secondary: #c9b07a;
--color-text-tertiary: #8a7050;
--color-border-primary: #5a4020;
--color-border-secondary: #3a2a14;
--color-border-hover: #8a6030;
--color-green: #4e7830;
--color-green-light: #6a9e44;
--color-red: #8a2e08;
--color-red-light: #c4601c;
--color-orange: #c4601c;
--color-yellow: #d4a228;
--color-input-background: #1c1509;
--color-input-border: #5a4020;
--color-menu-active: #d4a228;
--color-link: #d4a228;
--color-link-hover: #f0c040;
--color-diff-added-row: rgba(78, 120, 48, 0.15);
--color-diff-removed-row: rgba(138, 46, 8, 0.15);
--color-diff-added-word: rgba(78, 120, 48, 0.3);
--color-diff-removed-word: rgba(138, 46, 8, 0.3);
/* shadow / glow */
--shadow-sm: 2px 2px 0 #3a2a14;
--shadow-md: 2px 2px 0 #5c3a18;
}
/* ── Global typography ───────────────────────────────────── */
body,
.ui,
input,
textarea,
select,
button {
font-family: 'Josefin Sans', sans-serif !important;
}
h1, h2, h3, h4, h5, h6,
.header,
.ui.header,
.repository .file-header,
.navbar .item {
font-family: 'VT323', monospace !important;
letter-spacing: 0.05em;
}
code, pre, .code, tt,
.file-content,
.diff-file-box {
font-family: 'Courier Prime', monospace !important;
}
/* ── Body & background ───────────────────────────────────── */
body {
background: #0b0804 !important;
color: #e8d5a3 !important;
}
/* ── Navbar ──────────────────────────────────────────────── */
.navbar,
#navbar {
background: #1c1509 !important;
border-bottom: 2px solid #5a4020 !important;
box-shadow: 0 2px 0 #3a2a14 !important;
}
.navbar .item,
#navbar .item {
color: #c9b07a !important;
font-family: 'VT323', monospace !important;
font-size: 1.1rem !important;
letter-spacing: 0.08em !important;
}
.navbar .item:hover,
#navbar .item:hover {
color: #d4a228 !important;
background: #261c0e !important;
}
.navbar .item.active,
#navbar .item.active {
color: #d4a228 !important;
background: #312414 !important;
}
/* site logo text */
.navbar .header.item,
#navbar .header.item {
color: #e8d5a3 !important;
font-size: 1.4rem !important;
}
/* ── Page container ──────────────────────────────────────── */
.page-content,
.full.height > .left,
.repository,
.user,
.org {
background: #130e07 !important;
}
/* ── Segments & cards ────────────────────────────────────── */
.ui.segment,
.ui.segments,
.ui.card,
.ui.cards > .card {
background: #1c1509 !important;
border: 2px solid #5a4020 !important;
box-shadow: 2px 2px 0 #3a2a14 !important;
border-radius: 0 !important;
color: #c9b07a !important;
}
.ui.segment:hover,
.ui.card:hover {
border-color: #a07818 !important;
}
/* ── Menus & dropdowns ───────────────────────────────────── */
.ui.menu,
.ui.dropdown .menu {
background: #1c1509 !important;
border: 2px solid #5a4020 !important;
border-radius: 0 !important;
box-shadow: 2px 2px 0 #3a2a14 !important;
}
.ui.menu .item,
.ui.dropdown .menu .item {
color: #c9b07a !important;
border-radius: 0 !important;
}
.ui.menu .item:hover,
.ui.dropdown .menu .item:hover {
background: #261c0e !important;
color: #d4a228 !important;
}
.ui.menu .active.item,
.ui.menu .item.active {
background: #312414 !important;
color: #d4a228 !important;
border-color: #a07818 !important;
}
/* tabular menu */
.ui.tabular.menu .active.item {
background: #130e07 !important;
border-color: #5a4020 !important;
border-bottom-color: #130e07 !important;
color: #d4a228 !important;
}
/* ── Buttons ─────────────────────────────────────────────── */
.ui.button,
.ui.buttons .button {
background: #261c0e !important;
color: #c9b07a !important;
border: 2px solid #5a4020 !important;
border-radius: 0 !important;
box-shadow: 2px 2px 0 #3a2a14 !important;
font-family: 'VT323', monospace !important;
font-size: 1rem !important;
letter-spacing: 0.06em !important;
transition: all 150ms ease !important;
}
.ui.button:hover {
background: #312414 !important;
border-color: #a07818 !important;
color: #d4a228 !important;
transform: translate(-1px, -1px) !important;
box-shadow: 3px 3px 0 #3a2a14 !important;
}
.ui.primary.button,
.ui.green.button {
background: #a07818 !important;
color: #0b0804 !important;
border-color: #d4a228 !important;
}
.ui.primary.button:hover,
.ui.green.button:hover {
background: #d4a228 !important;
}
.ui.red.button,
.ui.negative.button {
background: #5a1a08 !important;
color: #e8d5a3 !important;
border-color: #8a2e08 !important;
}
.ui.red.button:hover {
background: #8a2e08 !important;
}
/* ── Inputs & forms ──────────────────────────────────────── */
.ui.input input,
.ui.form input,
.ui.form textarea,
.ui.form select,
input[type="text"],
input[type="password"],
input[type="email"],
input[type="search"],
textarea,
select {
background: #1c1509 !important;
border: 2px solid #5a4020 !important;
border-radius: 0 !important;
color: #e8d5a3 !important;
font-family: 'Josefin Sans', sans-serif !important;
}
.ui.input input:focus,
.ui.form input:focus,
.ui.form textarea:focus {
border-color: #a07818 !important;
outline: none !important;
box-shadow: 0 0 0 2px rgba(212, 162, 40, 0.15) !important;
}
/* ── Labels & badges ─────────────────────────────────────── */
.ui.label,
.ui.labels .label {
background: #261c0e !important;
border: 2px solid #5a4020 !important;
border-radius: 0 !important;
color: #c9b07a !important;
font-family: 'VT323', monospace !important;
letter-spacing: 0.06em !important;
}
/* issue labels */
.label[style] {
border-radius: 0 !important;
font-family: 'VT323', monospace !important;
letter-spacing: 0.06em !important;
}
/* open/closed badges */
.ui.green.label, .issue-state-label.open {
background: #2a4a18 !important;
border-color: #4e7830 !important;
color: #6a9e44 !important;
}
.ui.red.label, .issue-state-label.closed {
background: #3a1008 !important;
border-color: #8a2e08 !important;
color: #c4601c !important;
}
.ui.purple.label, .ui.violet.label {
background: #2a1a3a !important;
border-color: #5a3a7a !important;
color: #c9b0e8 !important;
}
/* ── Repository list items ───────────────────────────────── */
.repository.list .item,
.explore .list .item {
border-bottom: 1px solid #3a2a14 !important;
padding: 1rem !important;
transition: background 150ms ease !important;
}
.repository.list .item:hover,
.explore .list .item:hover {
background: #1c1509 !important;
}
/* repo name link */
.repository.list .item .header a,
.explore .list .item .header a {
color: #d4a228 !important;
font-family: 'VT323', monospace !important;
font-size: 1.2rem !important;
}
.repository.list .item .header a:hover {
color: #f0c040 !important;
}
/* ── File tree / code browser ────────────────────────────── */
.repository .file-list,
.repository .code-view {
background: #130e07 !important;
}
.repository .file-list .item,
.repository .files tr {
border-bottom: 1px solid #3a2a14 !important;
}
.repository .files tr:hover {
background: #1c1509 !important;
}
.repository .files .icon {
color: #8a6030 !important;
}
.repository .files .name a {
color: #c9b07a !important;
}
.repository .files .name a:hover {
color: #d4a228 !important;
}
/* commit message */
.repository .files .message a {
color: #8a7050 !important;
}
.repository .files .message a:hover {
color: #c9b07a !important;
}
/* ── Diff view ───────────────────────────────────────────── */
.diff-file-box {
border: 2px solid #5a4020 !important;
border-radius: 0 !important;
margin-bottom: 1rem !important;
}
.diff-file-box .file-header {
background: #261c0e !important;
border-bottom: 2px solid #5a4020 !important;
color: #c9b07a !important;
padding: 0.5rem 1rem !important;
}
.diff-file-box .file-header .file-header-title {
color: #d4a228 !important;
font-family: 'Courier Prime', monospace !important;
}
.code-diff tr.added td {
background: rgba(78, 120, 48, 0.12) !important;
}
.code-diff tr.deleted td {
background: rgba(138, 46, 8, 0.12) !important;
}
.code-diff td.lines-num {
background: #1c1509 !important;
color: #5a4830 !important;
border-right: 1px solid #3a2a14 !important;
}
/* ── Code blocks ─────────────────────────────────────────── */
.code-view .lines-code,
pre, code {
background: #0b0804 !important;
color: #e8d5a3 !important;
}
/* ── Issue & PR list ─────────────────────────────────────── */
.issue.list .item,
.pulls.list .item {
border-bottom: 1px solid #3a2a14 !important;
padding: 0.75rem 0 !important;
}
.issue.list .item:hover {
background: #1c1509 !important;
}
.issue.list .item .title,
.pulls.list .item .title {
color: #e8d5a3 !important;
font-family: 'Josefin Sans', sans-serif !important;
}
.issue.list .item .title:hover {
color: #d4a228 !important;
}
/* ── Comments ────────────────────────────────────────────── */
.comment .content {
background: #1c1509 !important;
border: 2px solid #5a4020 !important;
border-radius: 0 !important;
}
.comment .content .header {
background: #261c0e !important;
border-bottom: 2px solid #5a4020 !important;
color: #8a7050 !important;
}
.comment .content .header .author {
color: #d4a228 !important;
font-family: 'VT323', monospace !important;
font-size: 1.1rem !important;
}
/* ── Activity feed ───────────────────────────────────────── */
.feeds .news .desc {
color: #c9b07a !important;
}
.feeds .news .time {
color: #5a4830 !important;
}
/* ── User profile ────────────────────────────────────────── */
.user.profile .ui.card {
background: #1c1509 !important;
}
.user.profile .ui.card .extra {
border-top: 1px solid #3a2a14 !important;
}
/* ── Markdown rendered content ───────────────────────────── */
.markup,
.markdown {
color: #c9b07a !important;
}
.markup h1, .markup h2, .markup h3,
.markup h4, .markup h5, .markup h6,
.markdown h1, .markdown h2, .markdown h3 {
font-family: 'VT323', monospace !important;
color: #f0c040 !important;
border-bottom: 1px solid #3a2a14 !important;
letter-spacing: 0.05em !important;
}
.markup a, .markdown a {
color: #d4a228 !important;
border-bottom: 1px solid #a07818 !important;
text-decoration: none !important;
}
.markup a:hover, .markdown a:hover {
color: #f0c040 !important;
}
.markup blockquote, .markdown blockquote {
background: #1c1509 !important;
border-left: 4px solid #a07818 !important;
color: #8a7050 !important;
border-radius: 0 !important;
}
.markup table th, .markdown table th {
background: #261c0e !important;
color: #d4a228 !important;
border: 1px solid #5a4020 !important;
font-family: 'VT323', monospace !important;
}
.markup table td, .markdown table td {
border: 1px solid #3a2a14 !important;
color: #c9b07a !important;
}
.markup table tr:nth-child(even) td,
.markdown table tr:nth-child(even) td {
background: #1c1509 !important;
}
/* ── Dividers ────────────────────────────────────────────── */
.ui.divider {
border-color: #3a2a14 !important;
}
/* ── Pagination ──────────────────────────────────────────── */
.ui.pagination.menu .item {
background: #1c1509 !important;
color: #8a7050 !important;
border: 2px solid #3a2a14 !important;
border-radius: 0 !important;
min-width: 2.5rem !important;
text-align: center !important;
}
.ui.pagination.menu .item:hover {
background: #261c0e !important;
color: #d4a228 !important;
border-color: #a07818 !important;
}
.ui.pagination.menu .active.item {
background: #312414 !important;
color: #d4a228 !important;
border-color: #a07818 !important;
}
/* ── Footer ──────────────────────────────────────────────── */
#footer {
background: #0b0804 !important;
border-top: 2px solid #3a2a14 !important;
color: #5a4830 !important;
}
#footer a {
color: #8a7050 !important;
}
#footer a:hover {
color: #d4a228 !important;
}
/* ── Scrollbar ───────────────────────────────────────────── */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: #0b0804; }
::-webkit-scrollbar-thumb { background: #5c3a18; border: 2px solid #1c1509; }
::-webkit-scrollbar-thumb:hover { background: #a07818; }
/* ── Links globally ──────────────────────────────────────── */
a {
color: #d4a228 !important;
}
a:hover {
color: #f0c040 !important;
}
/* ── Statistic numbers ───────────────────────────────────── */
.ui.statistic .value {
color: #d4a228 !important;
font-family: 'VT323', monospace !important;
}
.ui.statistic .label {
color: #8a7050 !important;
font-family: 'Josefin Sans', sans-serif !important;
}
/* ── Flash/alert messages ────────────────────────────────── */
.ui.positive.message, .ui.success.message {
background: #1a3010 !important;
border-color: #4e7830 !important;
color: #6a9e44 !important;
}
.ui.negative.message, .ui.error.message {
background: #2a0e08 !important;
border-color: #8a2e08 !important;
color: #c4601c !important;
}
.ui.warning.message {
background: #2a1e08 !important;
border-color: #a07818 !important;
color: #d4a228 !important;
}
.ui.info.message {
background: #0e1a2a !important;
border-color: #2a5a8a !important;
color: #7ab0d4 !important;
}
/* ── Selection ───────────────────────────────────────────── */
::selection {
background: #a07818 !important;
color: #0b0804 !important;
}
/* Clone panel / dropdown background */
.clone-panel,
.clone-panel-tab,
.clone-panel-field,
.clone-panel-list,
.flex-items-block {
background: var(--color-box-body, #1c1509) !important;
color: var(--color-text, #e8d5a3) !important;
}
.clone-panel .item,
.clone-panel-tab .item {
color: var(--color-text, #c9b07a) !important;
}
.clone-panel-tab .item.active {
color: var(--color-primary, #d4a228) !important;
border-bottom: 2px solid var(--color-primary, #d4a228) !important;
}
.clone-panel input {
background: var(--color-input-background, #130e07) !important;
color: var(--color-text, #e8d5a3) !important;
border: 1px solid var(--color-border-primary, #3a2a14) !important;
}
.divider {
border-color: var(--color-border-primary, #3a2a14) !important;
}
.clone-panel-popup {
background: #1c1509 !important;
border: 1px solid #3a2a14 !important;
box-shadow: 2px 2px 0 #0b0804 !important;
}
.tippy-content,
.tippy-box {
background: #1c1509 !important;
border: 1px solid #3a2a14 !important;
box-shadow: 2px 2px 0 #0b0804 !important;
color: #e8d5a3 !important;
}
.tippy-arrow {
color: #1c1509 !important;
}