feat(gitea): add custom brand themes for gitea instance

- add dark theme (nicholai) with high contrast text
- add light theme (nicholai-light) matching site design
- include Sora + IBM Plex Mono font imports
- add contribution graph alpha tokens
- remove tracked .fuse_hidden temp files
- gitignore .fuse_hidden files going forward
This commit is contained in:
Nicholai Vogel 2026-01-20 11:35:58 -07:00
parent 4445584353
commit fc4af6f15e
6 changed files with 326 additions and 113 deletions

View File

@ -1,48 +0,0 @@
{
"permissions": {
"allow": [
"WebFetch(domain:openrouter.ai)",
"Bash(node:*)",
"Bash(curl:*)",
"Bash(pnpm build:*)",
"Bash(find:*)",
"Bash(pnpm add:*)",
"WebFetch(domain:substance.biohazardvfx.com)",
"WebFetch(domain:substrate.biohazardvfx.com)",
"Bash(pnpm dev:*)",
"Bash(pnpm astro check:*)",
"Bash(pkill:*)",
"mcp__plugin_playwright_playwright__browser_navigate",
"mcp__plugin_playwright_playwright__browser_click",
"mcp__plugin_playwright_playwright__browser_evaluate",
"mcp__plugin_playwright_playwright__browser_take_screenshot",
"mcp__plugin_playwright_playwright__browser_press_key",
"mcp__plugin_playwright_playwright__browser_resize",
"mcp__plugin_playwright_playwright__browser_wait_for",
"WebFetch(domain:www.shadcn.io)",
"WebSearch",
"WebFetch(domain:ui.shadcn.com)",
"WebFetch(domain:shadcn-chatbot-kit.vercel.app)",
"WebFetch(domain:shadcn-chat.vercel.app)",
"WebFetch(domain:github.com)",
"WebFetch(domain:www.prompt-kit.com)",
"WebFetch(domain:docs-shadcn-chat.vercel.app)",
"mcp__plugin_playwright_playwright__browser_type",
"mcp__plugin_playwright_playwright__browser_snapshot",
"mcp__plugin_playwright_playwright__browser_console_messages",
"mcp__plugin_playwright_playwright__browser_network_requests",
"mcp__plugin_playwright_playwright__browser_close",
"mcp__plugin_playwright_playwright__browser_hover",
"mcp__plugin_playwright_playwright__browser_run_code",
"Bash(ls:*)",
"Bash(npx wrangler:*)",
"Bash(pnpm run deploy)",
"Bash(git add:*)",
"Bash(git commit -m \"$\\(cat <<''EOF''\nAdd D1 database ID for hubert-conversations\n\nCreated D1 database and updated wrangler.jsonc with actual database UUID.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(git push)",
"Bash(git commit:*)"
],
"deny": [],
"ask": []
}
}

View File

@ -1,16 +0,0 @@
{
"permissions": {
"allow": [
"WebFetch(domain:openrouter.ai)",
"Bash(node:*)",
"Bash(curl:*)",
"Bash(pnpm build:*)",
"Bash(find:*)",
"Bash(pnpm add:*)",
"WebFetch(domain:substance.biohazardvfx.com)",
"WebFetch(domain:substrate.biohazardvfx.com)"
],
"deny": [],
"ask": []
}
}

View File

@ -1,49 +0,0 @@
{
"name": "nicholai-work-2026",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"build": "astro build",
"preview": "astro build && wrangler pages dev",
"astro": "astro",
"deploy": "astro build && wrangler pages deploy",
"cf-typegen": "wrangler types",
"convert:avif": "node src/utils/convert-to-avif.js",
"convert:avif:all": "node src/utils/convert-to-avif.js --all",
"convert:avif:jpeg": "node src/utils/convert-to-avif.js --jpeg",
"convert:avif:png": "node src/utils/convert-to-avif.js --png",
"commit": "node src/utils/git-commit.js",
"notepad": "node src/utils/notepad.js"
},
"dependencies": {
"@astrojs/cloudflare": "^12.6.12",
"@astrojs/mdx": "^4.3.12",
"@astrojs/react": "^4.4.2",
"@astrojs/rss": "^4.0.14",
"@astrojs/sitemap": "^3.6.0",
"@langchain/cloudflare": "^1.0.1",
"@langchain/core": "^1.1.8",
"@langchain/langgraph": "^1.0.7",
"@langchain/openai": "^1.2.0",
"@tailwindcss/typography": "^0.5.19",
"@tailwindcss/vite": "^4.1.17",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"astro": "^5.16.4",
"dompurify": "^3.3.1",
"framer-motion": "^12.26.2",
"lunr": "^2.3.9",
"marked": "^17.0.1",
"react": "^19.2.1",
"react-dom": "^19.2.1",
"sharp": "^0.34.3",
"tailwindcss": "^4.1.17",
"zod": "^4.3.4"
},
"devDependencies": {
"@types/dompurify": "^3.2.0",
"@types/node": "^24.10.1",
"wrangler": "^4.53.0"
}
}

4
.gitignore vendored
View File

@ -50,3 +50,7 @@ GEMINI.md
# dev notes and scratch work # dev notes and scratch work
dev/ dev/
# FUSE filesystem temp files
.fuse_hidden*
**/.fuse_hidden*

View File

@ -0,0 +1,161 @@
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Sora:wght@400;500;600;700&display=swap');
gitea-theme-meta-info {
--theme-display-name: "Nicholai Work Light";
}
:root {
--is-dark-theme: false;
color-scheme: light;
/* fonts */
--fonts-regular: 'Sora', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
--fonts-monospace: 'IBM Plex Mono', 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', monospace;
/* primary accent - nicholai.work red */
--color-primary: #dd4132;
--color-primary-contrast: #ffffff;
--color-primary-dark-1: #c73a2d;
--color-primary-dark-2: #b13328;
--color-primary-light-1: #e35d50;
--color-primary-light-2: #e9796e;
/* contribution graph alpha tokens */
--color-primary-alpha-10: rgba(221, 65, 50, 0.15);
--color-primary-alpha-20: rgba(221, 65, 50, 0.30);
--color-primary-alpha-40: rgba(221, 65, 50, 0.50);
--color-primary-alpha-60: rgba(221, 65, 50, 0.70);
--color-primary-alpha-80: rgba(221, 65, 50, 0.85);
/* backgrounds - nicholai.work light palette */
--color-body: #FAFAFA;
--color-box-body: #F1F3F5;
--color-box-body-highlight: #E9ECEF;
--color-box-header: #E9ECEF;
--color-secondary: #DEE2E6;
--color-secondary-dark-1: #CED4DA;
--color-secondary-dark-2: #ADB5BD;
--color-secondary-light-1: #E9ECEF;
--color-secondary-light-2: #F1F3F5;
/* text colors - WCAG AA compliant on light backgrounds */
--color-text-dark: #0B0D11;
--color-text: #475569;
--color-text-light: #64748B;
--color-text-light-2: #94A3B8;
--color-text-light-3: #CBD5E1;
/* borders */
--color-border: #DEE2E6;
--color-light-border: #E9ECEF;
--color-input-border: #CED4DA;
--color-input-border-hover: #dd4132;
/* semantic colors */
--color-success: #059669;
--color-success-text: #047857;
--color-success-bg: rgba(16, 185, 129, 0.1);
--color-success-border: rgba(16, 185, 129, 0.3);
--color-warning: #D97706;
--color-warning-text: #B45309;
--color-warning-bg: rgba(245, 158, 11, 0.1);
--color-warning-border: rgba(245, 158, 11, 0.3);
--color-error: #DC2626;
--color-error-text: #B91C1C;
--color-error-bg: rgba(239, 68, 68, 0.1);
--color-error-border: rgba(239, 68, 68, 0.3);
--color-info: #2563EB;
--color-info-text: #1D4ED8;
--color-info-bg: rgba(59, 130, 246, 0.1);
--color-info-border: rgba(59, 130, 246, 0.3);
/* diff colors */
--color-diff-removed-word-bg: rgba(239, 68, 68, 0.3);
--color-diff-added-word-bg: rgba(16, 185, 129, 0.3);
--color-diff-removed-row-bg: rgba(239, 68, 68, 0.08);
--color-diff-moved-row-bg: rgba(245, 158, 11, 0.08);
--color-diff-added-row-bg: rgba(16, 185, 129, 0.08);
--color-diff-removed-row-border: rgba(239, 68, 68, 0.2);
--color-diff-moved-row-border: rgba(245, 158, 11, 0.2);
--color-diff-added-row-border: rgba(16, 185, 129, 0.2);
/* code/syntax */
--color-code-bg: #F1F3F5;
--color-code-sidebar-bg: #FAFAFA;
/* interactive states */
--color-hover: rgba(221, 65, 50, 0.08);
--color-active: rgba(221, 65, 50, 0.15);
--color-focus: rgba(221, 65, 50, 0.2);
/* shadows */
--color-shadow: rgba(0, 0, 0, 0.1);
/* buttons */
--color-button: #E9ECEF;
--color-button-hover: #DEE2E6;
/* navbar */
--color-nav-bg: #FAFAFA;
--color-nav-text: #475569;
--color-nav-hover-bg: #F1F3F5;
/* labels */
--color-label-bg: #E9ECEF;
--color-label-text: #475569;
--color-label-hover-bg: #DEE2E6;
/* menu */
--color-menu: #FFFFFF;
--color-menu-hover: #F1F3F5;
--color-menu-active: #E9ECEF;
/* markdown */
--color-markdown-code-block: #F1F3F5;
--color-markdown-table-row: #FAFAFA;
/* reaction */
--color-reaction-bg: #F1F3F5;
--color-reaction-hover-bg: #E9ECEF;
--color-reaction-active-bg: rgba(221, 65, 50, 0.15);
/* placeholder/input */
--color-placeholder-text: #94A3B8;
--color-input-text: #475569;
--color-input-background: #FFFFFF;
/* accent shades for various UI elements */
--color-accent: #dd4132;
--color-small-accent: #dd4132;
/* link colors */
--color-link: #dd4132;
--color-link-hover: #c73a2d;
}
/* font overrides */
body,
.ui,
.ui.menu,
.ui.text,
.ui.header,
.ui.message,
.ui.button,
input,
textarea,
select {
font-family: 'Sora', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important;
}
code,
pre,
.mono,
.codebox,
.CodeMirror,
.code-view,
.file-view {
font-family: 'IBM Plex Mono', 'SFMono-Regular', 'Menlo', monospace !important;
}

View File

@ -0,0 +1,161 @@
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Sora:wght@400;500;600;700&display=swap');
gitea-theme-meta-info {
--theme-display-name: "Nicholai Work";
}
:root {
--is-dark-theme: true;
color-scheme: dark;
/* fonts */
--fonts-regular: 'Sora', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', sans-serif;
--fonts-monospace: 'IBM Plex Mono', 'SFMono-Regular', 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', monospace;
/* primary accent - nicholai.work red */
--color-primary: #dd4132;
--color-primary-contrast: #ffffff;
--color-primary-dark-1: #c73a2d;
--color-primary-dark-2: #b13328;
--color-primary-light-1: #e35d50;
--color-primary-light-2: #e9796e;
/* contribution graph alpha tokens */
--color-primary-alpha-10: rgba(221, 65, 50, 0.15);
--color-primary-alpha-20: rgba(221, 65, 50, 0.30);
--color-primary-alpha-40: rgba(221, 65, 50, 0.50);
--color-primary-alpha-60: rgba(221, 65, 50, 0.70);
--color-primary-alpha-80: rgba(221, 65, 50, 0.85);
/* backgrounds - nicholai.work dark palette */
--color-body: #0B0D11;
--color-box-body: #111318;
--color-box-body-highlight: #171B22;
--color-box-header: #1A1F28;
--color-secondary: #1E242E;
--color-secondary-dark-1: #171B22;
--color-secondary-dark-2: #111318;
--color-secondary-light-1: #252C38;
--color-secondary-light-2: #2C3542;
/* text colors - high contrast for readability */
--color-text-dark: #FFFFFF;
--color-text: #D1D9E6; /* ~11:1 - primary text, very readable */
--color-text-light: #B0BFD0; /* ~8:1 - secondary text */
--color-text-light-2: #94A3B8; /* ~6.5:1 - tertiary text */
--color-text-light-3: #7A8A9D; /* ~4.8:1 - muted text */
/* borders */
--color-border: #2C3542;
--color-light-border: #1E242E;
--color-input-border: #2C3542;
--color-input-border-hover: #dd4132;
/* semantic colors */
--color-success: #10B981;
--color-success-text: #34D399;
--color-success-bg: rgba(16, 185, 129, 0.1);
--color-success-border: rgba(16, 185, 129, 0.3);
--color-warning: #F59E0B;
--color-warning-text: #FBBF24;
--color-warning-bg: rgba(245, 158, 11, 0.1);
--color-warning-border: rgba(245, 158, 11, 0.3);
--color-error: #EF4444;
--color-error-text: #F87171;
--color-error-bg: rgba(239, 68, 68, 0.1);
--color-error-border: rgba(239, 68, 68, 0.3);
--color-info: #3B82F6;
--color-info-text: #60A5FA;
--color-info-bg: rgba(59, 130, 246, 0.1);
--color-info-border: rgba(59, 130, 246, 0.3);
/* diff colors */
--color-diff-removed-word-bg: rgba(239, 68, 68, 0.4);
--color-diff-added-word-bg: rgba(16, 185, 129, 0.4);
--color-diff-removed-row-bg: rgba(239, 68, 68, 0.1);
--color-diff-moved-row-bg: rgba(245, 158, 11, 0.1);
--color-diff-added-row-bg: rgba(16, 185, 129, 0.1);
--color-diff-removed-row-border: rgba(239, 68, 68, 0.3);
--color-diff-moved-row-border: rgba(245, 158, 11, 0.3);
--color-diff-added-row-border: rgba(16, 185, 129, 0.3);
/* code/syntax */
--color-code-bg: #111318;
--color-code-sidebar-bg: #0B0D11;
/* interactive states */
--color-hover: rgba(221, 65, 50, 0.1);
--color-active: rgba(221, 65, 50, 0.2);
--color-focus: rgba(221, 65, 50, 0.3);
/* shadows */
--color-shadow: rgba(0, 0, 0, 0.5);
/* buttons */
--color-button: #252C38;
--color-button-hover: #2C3542;
/* navbar */
--color-nav-bg: #0B0D11;
--color-nav-text: #D1D9E6;
--color-nav-hover-bg: #1A1F28;
/* labels */
--color-label-bg: #252C38;
--color-label-text: #D1D9E6;
--color-label-hover-bg: #2C3542;
/* menu */
--color-menu: #111318;
--color-menu-hover: #1A1F28;
--color-menu-active: #1E242E;
/* markdown */
--color-markdown-code-block: #111318;
--color-markdown-table-row: #171B22;
/* reaction */
--color-reaction-bg: #1A1F28;
--color-reaction-hover-bg: #252C38;
--color-reaction-active-bg: rgba(221, 65, 50, 0.2);
/* placeholder/input */
--color-placeholder-text: #7A8A9D;
--color-input-text: #D1D9E6;
--color-input-background: #111318;
/* accent shades for various UI elements */
--color-accent: #dd4132;
--color-small-accent: #dd4132;
/* link colors */
--color-link: #dd4132;
--color-link-hover: #e35d50;
}
/* font overrides */
body,
.ui,
.ui.menu,
.ui.text,
.ui.header,
.ui.message,
.ui.button,
input,
textarea,
select {
font-family: 'Sora', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif !important;
}
code,
pre,
.mono,
.codebox,
.CodeMirror,
.code-view,
.file-view {
font-family: 'IBM Plex Mono', 'SFMono-Regular', 'Menlo', monospace !important;
}