diff --git a/conf/app.ini b/conf/app.ini
new file mode 100644
index 0000000..6a8fe36
--- /dev/null
+++ b/conf/app.ini
@@ -0,0 +1,119 @@
+APP_NAME = NHCarrigan
+RUN_MODE = prod
+RUN_USER = git
+WORK_PATH = /data/gitea
+
+[admin]
+DISABLE_REGULAR_ORG_CREATION=true
+
+[repository]
+ROOT = /data/git/repositories
+MAX_CREATION_LIMIT = 0
+
+[repository.local]
+LOCAL_COPY_PATH = /data/gitea/tmp/local-repo
+
+[repository.upload]
+TEMP_PATH = /data/gitea/uploads
+
+[server]
+APP_DATA_PATH = /data/gitea
+DOMAIN = git.nhcarrigan.com
+SSH_DOMAIN = git.nhcarrigan.com
+HTTP_PORT = 3000
+ROOT_URL = https://git.nhcarrigan.com/
+DISABLE_SSH = false
+SSH_PORT = 22
+SSH_LISTEN_PORT = 22
+LFS_START_SERVER = true
+LFS_JWT_SECRET =
+OFFLINE_MODE = true
+MAX_GIT_UPLOAD_SIZE = 5000
+
+[database]
+PATH = /data/gitea/gitea.db
+DB_TYPE = sqlite3
+HOST = localhost:3306
+NAME = gitea
+USER = root
+PASSWD =
+LOG_SQL = false
+SCHEMA =
+SSL_MODE = disable
+
+[indexer]
+ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve
+
+[session]
+PROVIDER_CONFIG = /data/gitea/sessions
+PROVIDER = file
+
+[picture]
+AVATAR_UPLOAD_PATH = /data/gitea/avatars
+REPOSITORY_AVATAR_UPLOAD_PATH = /data/gitea/repo-avatars
+AVATAR_MAX_FILE_SIZE = 5242880
+
+[attachment]
+PATH = /data/gitea/attachments
+
+[log]
+MODE = console
+LEVEL = info
+ROOT_PATH = /data/gitea/log
+
+[security]
+INSTALL_LOCK = true
+SECRET_KEY =
+REVERSE_PROXY_LIMIT = 1
+REVERSE_PROXY_TRUSTED_PROXIES = *
+INTERNAL_TOKEN =
+PASSWORD_HASH_ALGO = pbkdf2
+
+[service]
+DISABLE_REGISTRATION = true
+REQUIRE_SIGNIN_VIEW = false
+REGISTER_EMAIL_CONFIRM = false
+REGISTER_MANUAL_CONFIRM = true
+ENABLE_NOTIFY_MAIL = false
+ALLOW_ONLY_EXTERNAL_REGISTRATION = false
+ENABLE_CAPTCHA = true
+CAPTCHA_TYPE = recaptcha
+RECAPTCHA_SECRET =
+RECAPTCHA_SITEKEY =
+DEFAULT_KEEP_EMAIL_PRIVATE = false
+DEFAULT_ALLOW_CREATE_ORGANIZATION = false
+DEFAULT_ENABLE_TIMETRACKING = true
+NO_REPLY_ADDRESS = noreply.nhcarrigan.com
+DEFAULT_USER_IS_RESTRICTED = true
+
+[lfs]
+PATH = /data/git/lfs
+
+[mailer]
+ENABLED = true
+FROM = noreply@nhcarrigan.com
+PROTOCOL = smtps
+SMTP_ADDR = mail.nhcarrigan.com
+SMTP_PORT = 465
+USER = noreply@nhcarrigan.com
+PASSWD =
+
+[openid]
+ENABLE_OPENID_SIGNIN = false
+ENABLE_OPENID_SIGNUP = false
+
+[cron.update_checker]
+ENABLED = true
+
+[repository.pull-request]
+DEFAULT_MERGE_STYLE = squash
+
+[repository.signing]
+DEFAULT_TRUST_MODEL = committer
+
+[oauth2]
+JWT_SECRET =
+
+[ui]
+DEFAULT_THEME = trans-pride
+THEMES = trans-pride,trans-pride-dark
\ No newline at end of file
diff --git a/public/assets/css/theme-trans-pride-dark.css b/public/assets/css/theme-trans-pride-dark.css
new file mode 100644
index 0000000..206b9f3
--- /dev/null
+++ b/public/assets/css/theme-trans-pride-dark.css
@@ -0,0 +1,468 @@
+/* Trans Wrath - A dark mode variant of Trans Pride for Gitea */
+
+@font-face {
+ font-family: 'Vampyr';
+ src: url('https://cdn.nhcarrigan.com/fonts/vampyr.ttf') format('truetype');
+ }
+
+ :root {
+ --fonts-regular: "Vampyr" !important;
+ --fonts-proportional: "Vampyr" !important;
+ --fonts-monospace: "Vampyr" !important;
+ --fonts-emoji: "Vampyr" !important;
+ --is-dark-theme: true;
+
+ /* Primary (pinks) */
+ --color-primary: #ff6b94; /* flag pink pop */
+ --color-primary-dark: #ff3b6f; /* deeper pink for hover/active */
+ --color-primary-light: #ffb6c1; /* soft pink for subtle accents */
+ --color-primary-very-light: #3a1a2a; /* dim pink-plum for muted fills */
+
+ /* Main Text & Background */
+ --color-text: #ffe6ee; /* near-white with pink warmth */
+ --color-text-light: #ffd1dc; /* lighter/paler text */
+ --color-text-dark: #ffc0cb; /* headings/links emphasis */
+ --color-body: #2a0a18; /* your existing plum base */
+
+ /* UI (blues for contrast = trans stripes!) */
+ --color-secondary: #3b6ea8; /* medium trans-blue */
+ --color-secondary-dark: #2d5a8b; /* hover/active */
+ --color-secondary-light: #4f84c2; /* borders/badges */
+
+ /* State Colors */
+ --color-success: #87cefa; /* sky blue success */
+ --color-success-dark: #5dade2;
+ --color-success-light: #add8e6;
+ --color-danger: #ff4f7a; /* pinkish red */
+ --color-danger-dark: #ff2f66;
+ --color-danger-light: #ff7fa1;
+ --color-warning: #ffc3a0; /* peach pairs nicely */
+ --color-warning-dark: #ffb78f;
+ --color-warning-light: #ffd4b7;
+ --color-info: #5dade2; /* bright info blue */
+ --color-info-dark: #3f8ecb;
+ --color-info-light: #87c7f1;
+
+ /* Other UI Elements */
+ --color-menu: #2a0a18;
+ --color-card: #241624; /* slightly darker than body */
+ --color-markup-table-row: #2f1b30; /* alternating rows */
+ --color-markup-code-block: #2f1b30; /* code blocks */
+ --color-button: #ff6b94; /* primary buttons = pink */
+ --color-border: #3a2847; /* muted plum border */
+ --color-input-border: #4f84c2; /* blue focus ring vibe */
+ --color-input-background: #241624;
+ --color-small-accent: #add8e6; /* tiny blue sparkles */
+
+ /* Diff Colors (trans-tinted, still readable) */
+ --color-diff-add-line: #162235; /* blue-tinted add */
+ --color-diff-add-word: #203149;
+ --color-diff-del-line: #2a1620; /* pink-tinted delete */
+ --color-diff-del-word: #3b2030;
+ --color-diff-section: #1e1b2a; /* neutral section bg */
+
+ /* Code Syntax Highlighting (blue + pink duo) */
+ --color-code-keyword: #1e90ff; /* keywords = trans blue */
+ --color-code-function: #ff3b6f; /* functions = deep pink */
+ --color-code-string: #ff9aac; /* strings = soft pink */
+ --color-code-number: #5dade2; /* numbers = bright blue */
+ --color-code-comment: #c79bb1; /* gentle mauve comment */
+ --color-code-type: #87cefa; /* types = sky blue */
+
+ --vscode-editor-background: #151a28; /* cooler dark editor well */
+ --color-footer: #2a0a18;
+ --color-nav-bg: #2a0a18;
+ }
+
+
+ /* Header */
+ .ui.menu.inverted {
+ background-color: var(--color-secondary);
+ color: var(--color-text);
+ }
+
+ .ui.secondary.menu .item {
+ color: var(--color-text);
+ }
+
+ .ui.secondary.menu .active.item {
+ background-color: var(--color-primary-very-light);
+ }
+
+ /* Repository header */
+ .repository.header {
+ background-color: var(--color-menu);
+ }
+
+ /* Buttons */
+ .ui.primary.button {
+ background-color: var(--color-primary);
+ }
+
+ .ui.primary.button:hover {
+ background-color: var(--color-primary-dark);
+ }
+
+ .ui.basic.button {
+ box-shadow: 0 0 0 1px var(--color-border) inset;
+ color: var(--color-text) !important;
+ }
+
+ .ui.basic.button:hover {
+ background-color: var(--color-primary-very-light) !important;
+ color: var(--color-text-dark) !important;
+ }
+
+ /* Tabs */
+ .ui.tabular.menu .item {
+ color: var(--color-text-light);
+ }
+
+ .ui.tabular.menu .active.item {
+ background-color: var(--color-primary-very-light);
+ color: var(--color-text);
+ border-color: var(--color-border);
+ }
+
+ /* Tables */
+ .ui.table thead th {
+ background: var(--color-menu);
+ color: var(--color-text);
+ }
+
+ .ui.table {
+ border-color: var(--color-border);
+ }
+
+ /* Form inputs */
+ .ui.input input {
+ background-color: var(--color-input-background);
+ border-color: var(--color-input-border);
+ color: var(--color-text);
+ }
+
+ .ui.input input:focus {
+ border-color: var(--color-primary);
+ }
+
+ /* Labels */
+ .ui.label {
+ background-color: var(--color-primary-very-light);
+ color: var(--color-text);
+ }
+
+ /* Markdown Content */
+ .markdown:not(code) {
+ color: var(--color-text);
+ }
+
+ .markdown code, .markdown pre {
+ background-color: var(--color-markup-code-block);
+ border-color: var(--color-border);
+ }
+
+ /* Sidebar */
+ .ui.vertical.menu {
+ background-color: var(--color-menu);
+ }
+
+ .ui.vertical.menu .item {
+ color: var(--color-text);
+ }
+
+ .ui.vertical.menu .active.item {
+ background-color: var(--color-primary-very-light);
+ }
+
+ /* Status tags */
+ .ui.green.label {
+ background-color: var(--color-success) !important;
+ color: var(--color-body) !important;
+ }
+
+ .ui.red.label {
+ background-color: var(--color-danger) !important;
+ color: var(--color-body) !important;
+ }
+
+ .ui.yellow.label {
+ background-color: var(--color-warning) !important;
+ color: var(--color-text-dark) !important;
+ }
+
+ .ui.blue.label {
+ background-color: var(--color-info) !important;
+ color: var(--color-body) !important;
+ }
+
+ /* Dashboard cards */
+ .dashboard-card {
+ background-color: var(--color-card);
+ border-color: var(--color-border);
+ }
+
+ /* Timeline and activities */
+ .timeline-item {
+ border-color: var(--color-border);
+ }
+
+ .timeline-item .badge {
+ background-color: var(--color-primary-very-light);
+ color: var(--color-text);
+ }
+
+ /* Code diff view */
+ .diff-file-box .code-diff-split .add-code {
+ background-color: var(--color-diff-add-line);
+ }
+
+ .diff-file-box .code-diff-split .del-code {
+ background-color: var(--color-diff-del-line);
+ }
+
+ .diff-file-box .code-diff-split .add-code .add-line {
+ background-color: var(--color-diff-add-word);
+ }
+
+ .diff-file-box .code-diff-split .del-code .del-line {
+ background-color: var(--color-diff-del-word);
+ }
+
+ .monaco-editor, .monaco-diff-editor, .monaco-component, .monaco-editor-background, .monaco-editor .margin {
+ background: var(--vscode-editor-background) !important;
+ }
+
+ .monaco-editor {
+ --vscode-editor-selectionBackground: var(--color-primary) !important;
+ --vscode-editor-inactiveSelectionBackground: var(--color-primary) !important;
+ --vscode-editor-lineHighlightBackground: var(--color-primary) !important;
+ }
+
+ .monaco-editor .view-overlays .current-line {
+ background-color: var(--color-primary) !important;
+ }
+
+ .monaco-editor .margin {
+ background-color: transparent !important;
+ }
+
+ .monaco-editor .margin-view-overlays .current-line-margin {
+ background-color: var(--color-primary) !important;
+ }
+
+ .active-line-number {
+ background-color: transparent !important;
+ }
+ /* Scrollbar */
+ ::-webkit-scrollbar-thumb {
+ background: var(--color-primary-light);
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: var(--color-primary);
+ }
+
+ ::-webkit-scrollbar-track {
+ background: var(--color-primary-very-light);
+ }
+
+ body::before {
+ background: url(https://cdn.nhcarrigan.com/background.png);
+ background-size: cover;
+ background-position: center;
+ width: 100%;
+ height: 100%;
+ z-index: -100;
+ content: "";
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ opacity: 1;
+ pointer-events: none;
+ }
+
+ body::after {
+ background: var(--color-body);
+ opacity: 0.8;
+ width: 100%;
+ height: 100%;
+ z-index: -50;
+ content: "";
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ pointer-events: none;
+ }
+
+ html {
+ cursor: url('https://cdn.nhcarrigan.com/cursors/cursor.cur'), auto;
+ font-family: "Vampyr";
+ }
+
+ a, button, .button, .dropdown {
+ cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer !important;
+ }
+
+ #tree-nation-offset-website {
+ display: flex;
+ align-items: center;
+ }
+ @media screen and (max-width: 885px) {
+ #tree-nation-offset-website {
+ display: none;
+ }
+ }
+
+ footer {
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: var(--foreground);
+ background-color: var(--background);
+ position: fixed;
+ bottom: 0;
+ height: 75px;
+ padding: 0 10px;
+ }
+
+ @media (max-width: 880px) {
+ .page-footer {
+ flex-direction: row;
+ }
+ }
+
+ #navbar {
+ position: fixed;
+ top: 0;
+ height: 50px;
+ width: 100%;
+ z-index: 1;
+ }
+
+ .page-content {
+ margin-top: 50px;
+ }
+
+ *::selection {
+ color: var(--color-body) !important;
+ background: var(--color-text) !important;
+ }
+
+ @media screen and (max-width: 768px) {
+
+ .navbar-right > .item {
+ justify-content: right !important;
+ width: 50% !important;
+ right: 0 !important;
+ margin-right: 0 !important;
+ margin-left: auto !important;
+ background: var(--color-nav-bg) !important;
+ }
+
+ .navbar-left > .item {
+ justify-content: left !important;
+ width: 50% !important;
+ left: 0 !important;
+ margin-left: 0 !important;
+ margin-right: auto !important;
+ background: var(--color-nav-bg) !important;
+ }
+ }
+
+ .home a {
+ text-decoration: underline !important;
+ }
+
+ .home ul {
+ list-style-type: none !important;
+ padding-left: 0 !important;
+ }
+
+
+ #show-socials-button {
+ background: none;
+ border: none;
+ cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
+ color: var(--color-text);
+ font-size: 1rem;
+ }
+ #show-socials-button > i {
+ font-size: 1.5rem;
+ }
+ #social-list {
+ position: absolute;
+ bottom: 75px;
+ left: 0;
+ right: 0;
+ width: 100vw;
+ max-width: 400px;
+ padding: 10px;
+ background-color: var(--header_background);
+ color: var(--color-text);
+ border-radius: 10px;
+ border: 1px solid var(--color-text);
+ display: none;
+ z-index: 1000;
+ }
+ .social-list-item {
+ padding: 10px;
+ }
+ .social-list-item > a {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ text-decoration: none;
+ }
+ .social-list-divider {
+ border: 0.5px solid var(--color-text);
+ }
+ .social-list-item:hover {
+ background-color: var(--color-text);
+ color: var(--header_background);
+ }
+ #show-socials-button {
+ background: none;
+ border: none;
+ cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
+ color: var(--color-text);
+ font-size: 1rem;
+ }
+ #show-socials-button > i {
+ font-size: 1.5rem;
+ }
+ #social-list {
+ position: absolute;
+ bottom: 75px;
+ left: 0;
+ right: 0;
+ width: 100vw;
+ max-width: 400px;
+ padding: 10px;
+ background-color: var(--header_background);
+ color: var(--color-text);
+ border-radius: 10px;
+ border: 1px solid var(--color-text);
+ display: none;
+ z-index: 1000;
+ }
+ .social-list-item {
+ padding: 10px;
+ }
+ .social-list-item > a {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ text-decoration: none;
+ }
+ .social-list-divider {
+ border: 0.5px solid var(--color-text);
+ }
+ .social-list-item:hover {
+ background-color: var(--color-text);
+ color: var(--header_background);
+ }
\ No newline at end of file
diff --git a/public/assets/css/theme-trans-pride.css b/public/assets/css/theme-trans-pride.css
new file mode 100644
index 0000000..731a2d7
--- /dev/null
+++ b/public/assets/css/theme-trans-pride.css
@@ -0,0 +1,468 @@
+/* Trans Pride - A light theme for Gitea */
+
+@font-face {
+ font-family: 'Vampyr';
+ src: url('https://cdn.nhcarrigan.com/fonts/vampyr.ttf') format('truetype');
+ }
+
+ :root {
+ --is-dark-theme: false;
+ --fonts-regular: "Vampyr" !important;
+ --fonts-proportional: "Vampyr" !important;
+ --fonts-monospace: "Vampyr" !important;
+ --fonts-emoji: "Vampyr" !important;
+ /* Primary (pinks) */
+ --color-primary: #ff6b94; /* flag pink pop */
+ --color-primary-dark: #db7093; /* medium pink for hover/active */
+ --color-primary-light: #ffc0cb; /* soft pastel pink */
+ --color-primary-very-light: #ffe6ee;/* pale pink background fills */
+
+ /* Main Text & Background */
+ --color-text: #2a0a18; /* deep plum text */
+ --color-text-light: #4d2037; /* muted variant */
+ --color-text-dark: #000000; /* headings/strong */
+ --color-body: #DAFFFC; /* almost white with pink tint */
+
+ /* UI (trans blues for balance) */
+ --color-secondary: #87cefa; /* sky blue */
+ --color-secondary-dark: #5dade2; /* medium bright blue */
+ --color-secondary-light: #add8e6; /* pastel blue */
+
+ /* State Colors */
+ --color-success: #5dade2; /* success = strong blue */
+ --color-success-dark: #1e90ff;
+ --color-success-light: #87cefa;
+ --color-danger: #ff4f7a; /* pinkish red */
+ --color-danger-dark: #ff2f66;
+ --color-danger-light: #ff7fa1;
+ --color-warning: #ffb347; /* warm orange */
+ --color-warning-dark: #ff9f1a;
+ --color-warning-light: #ffd699;
+ --color-info: #1e90ff; /* crisp blue */
+ --color-info-dark: #187bcd;
+ --color-info-light: #87cefa;
+
+ /* Other UI Elements */
+ --color-menu: #fff9fb;
+ --color-card: #ffffff; /* pure white cards */
+ --color-markup-table-row: #f5f9ff; /* faint blue row */
+ --color-markup-code-block: #fff0f6; /* faint pink block */
+ --color-button: #ff6b94; /* primary = pink */
+ --color-border: #ffd1dc; /* pale pink border */
+ --color-input-border: #add8e6; /* soft blue border */
+ --color-input-background: #ffffff;
+ --color-small-accent: #87cefa; /* tiny blue accent */
+
+ /* Diff Colors (soft pink/blue tints) */
+ --color-diff-add-line: #e6f6ff; /* pale blue add */
+ --color-diff-add-word: #cceeff;
+ --color-diff-del-line: #ffe6f0; /* pale pink delete */
+ --color-diff-del-word: #ffccd9;
+ --color-diff-section: #f0f6ff;
+
+ /* Code Syntax Highlighting (balanced) */
+ --color-code-keyword: #1e90ff; /* keywords = bright blue */
+ --color-code-function: #ff3b6f; /* functions = hot pink */
+ --color-code-string: #db7093; /* strings = medium pink */
+ --color-code-number: #5dade2; /* numbers = medium blue */
+ --color-code-comment: #8a6b78; /* muted plum comment */
+ --color-code-type: #87cefa; /* types = sky blue */
+
+ --vscode-editor-background: #fff9fb;/* soft background */
+ --color-footer: #DAFFFC;
+ --color-nav-bg: #DAFFFC;
+ }
+
+
+ /* Header */
+ .ui.menu.inverted {
+ background-color: var(--color-secondary);
+ color: var(--color-text);
+ }
+
+ .ui.secondary.menu .item {
+ color: var(--color-text);
+ }
+
+ .ui.secondary.menu .active.item {
+ background-color: var(--color-primary-very-light);
+ }
+
+ /* Repository header */
+ .repository.header {
+ background-color: var(--color-menu);
+ }
+
+ /* Buttons */
+ .ui.primary.button {
+ background-color: var(--color-primary);
+ }
+
+ .ui.primary.button:hover {
+ background-color: var(--color-primary-dark);
+ }
+
+ .ui.basic.button {
+ box-shadow: 0 0 0 1px var(--color-border) inset;
+ color: var(--color-text) !important;
+ }
+
+ .ui.basic.button:hover {
+ background-color: var(--color-primary-very-light) !important;
+ color: var(--color-text-dark) !important;
+ }
+
+ /* Tabs */
+ .ui.tabular.menu .item {
+ color: var(--color-text-light);
+ }
+
+ .ui.tabular.menu .active.item {
+ background-color: var(--color-primary-very-light);
+ color: var(--color-text);
+ border-color: var(--color-border);
+ }
+
+ /* Tables */
+ .ui.table thead th {
+ background: var(--color-menu);
+ color: var(--color-text);
+ }
+
+ .ui.table {
+ border-color: var(--color-border);
+ }
+
+ /* Form inputs */
+ .ui.input input {
+ background-color: var(--color-input-background);
+ border-color: var(--color-input-border);
+ color: var(--color-text);
+ }
+
+ .ui.input input:focus {
+ border-color: var(--color-primary);
+ }
+
+ /* Labels */
+ .ui.label {
+ background-color: var(--color-primary-very-light);
+ color: var(--color-text);
+ }
+
+ /* Markdown Content */
+ .markdown:not(code) {
+ color: var(--color-text);
+ }
+
+ .markdown code, .markdown pre {
+ background-color: var(--color-markup-code-block);
+ border-color: var(--color-border);
+ }
+
+ /* Sidebar */
+ .ui.vertical.menu {
+ background-color: var(--color-menu);
+ }
+
+ .ui.vertical.menu .item {
+ color: var(--color-text);
+ }
+
+ .ui.vertical.menu .active.item {
+ background-color: var(--color-primary-very-light);
+ }
+
+ /* Status tags */
+ .ui.green.label {
+ background-color: var(--color-success) !important;
+ color: var(--color-body) !important;
+ }
+
+ .ui.red.label {
+ background-color: var(--color-danger) !important;
+ color: var(--color-body) !important;
+ }
+
+ .ui.yellow.label {
+ background-color: var(--color-warning) !important;
+ color: var(--color-text-dark) !important;
+ }
+
+ .ui.blue.label {
+ background-color: var(--color-info) !important;
+ color: var(--color-body) !important;
+ }
+
+ /* Dashboard cards */
+ .dashboard-card {
+ background-color: var(--color-card);
+ border-color: var(--color-border);
+ }
+
+ /* Timeline and activities */
+ .timeline-item {
+ border-color: var(--color-border);
+ }
+
+ .timeline-item .badge {
+ background-color: var(--color-primary-very-light);
+ color: var(--color-text);
+ }
+
+ /* Code diff view */
+ .diff-file-box .code-diff-split .add-code {
+ background-color: var(--color-diff-add-line);
+ }
+
+ .diff-file-box .code-diff-split .del-code {
+ background-color: var(--color-diff-del-line);
+ }
+
+ .diff-file-box .code-diff-split .add-code .add-line {
+ background-color: var(--color-diff-add-word);
+ }
+
+ .diff-file-box .code-diff-split .del-code .del-line {
+ background-color: var(--color-diff-del-word);
+ }
+
+ .monaco-editor, .monaco-diff-editor, .monaco-component, .monaco-editor-background, .monaco-editor .margin {
+ background: #fff5f8 !important;
+ }
+
+ .monaco-editor {
+ --vscode-editor-selectionBackground: var(--color-primary) !important;
+ --vscode-editor-inactiveSelectionBackground: var(--color-primary) !important;
+ --vscode-editor-lineHighlightBackground: var(--color-primary) !important;
+ }
+
+ .monaco-editor .view-overlays .current-line {
+ background-color: var(--color-primary) !important;
+ }
+
+ .monaco-editor .margin {
+ background-color: transparent !important;
+ }
+
+ .monaco-editor .margin-view-overlays .current-line-margin {
+ background-color: var(--color-primary) !important;
+ }
+
+ .active-line-number {
+ background-color: transparent !important;
+ }
+
+ /* Scrollbar */
+ ::-webkit-scrollbar-thumb {
+ background: var(--color-primary-light);
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: var(--color-primary);
+ }
+
+ ::-webkit-scrollbar-track {
+ background: var(--color-primary-very-light);
+ }
+
+ body::before {
+ background: url(https://cdn.nhcarrigan.com/background.png);
+ background-size: cover;
+ background-position: center;
+ width: 100%;
+ height: 100%;
+ z-index: -100;
+ content: "";
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ opacity: 1;
+ pointer-events: none;
+ }
+
+ body::after {
+ background: var(--color-body);
+ opacity: 0.8;
+ width: 100%;
+ height: 100%;
+ z-index: -50;
+ content: "";
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ pointer-events: none;
+ }
+
+ html {
+ cursor: url('https://cdn.nhcarrigan.com/cursors/cursor.cur'), auto;
+ font-family: "Vampyr";
+ }
+
+ a, button, .button, .dropdown {
+ cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer !important;
+ }
+
+ #tree-nation-offset-website {
+ display: flex;
+ align-items: center;
+ }
+ @media screen and (max-width: 885px) {
+ #tree-nation-offset-website {
+ display: none;
+ }
+ }
+
+ footer {
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: var(--foreground);
+ background-color: var(--background);
+ position: fixed;
+ bottom: 0;
+ height: 75px;
+ padding: 0 10px;
+ }
+
+ @media (max-width: 880px) {
+ .page-footer {
+ flex-direction: row;
+ }
+ }
+
+ #navbar {
+ position: fixed;
+ top: 0;
+ height: 50px;
+ width: 100%;
+ z-index: 1;
+ }
+
+ .page-content {
+ margin-top: 50px;
+ }
+
+ *::selection {
+ color: var(--color-body) !important;
+ background: var(--color-text) !important;
+ }
+
+ @media screen and (max-width: 768px) {
+
+ .navbar-right > .item {
+ justify-content: right !important;
+ width: 50% !important;
+ right: 0 !important;
+ margin-right: 0 !important;
+ margin-left: auto !important;
+ background: var(--color-nav-bg) !important;
+ }
+
+ .navbar-left > .item {
+ justify-content: left !important;
+ width: 50% !important;
+ left: 0 !important;
+ margin-left: 0 !important;
+ margin-right: auto !important;
+ background: var(--color-nav-bg) !important;
+ }
+ }
+
+ .home a {
+ text-decoration: underline !important;
+ }
+
+ .home ul {
+ list-style-type: none !important;
+ padding-left: 0 !important;
+ }
+
+
+ #show-socials-button {
+ background: none;
+ border: none;
+ cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
+ color: var(--color-text);
+ font-size: 1rem;
+ }
+ #show-socials-button > i {
+ font-size: 1.5rem;
+ }
+ #social-list {
+ position: absolute;
+ bottom: 75px;
+ left: 0;
+ right: 0;
+ width: 100vw;
+ max-width: 400px;
+ padding: 10px;
+ background-color: var(--header_background);
+ color: var(--color-text);
+ border-radius: 10px;
+ border: 1px solid var(--color-text);
+ display: none;
+ z-index: 1000;
+ }
+ .social-list-item {
+ padding: 10px;
+ }
+ .social-list-item > a {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ text-decoration: none;
+ }
+ .social-list-divider {
+ border: 0.5px solid var(--color-text);
+ }
+ .social-list-item:hover {
+ background-color: var(--color-text);
+ color: var(--header_background);
+ }
+ #show-socials-button {
+ background: none;
+ border: none;
+ cursor: url('https://cdn.nhcarrigan.com/cursors/pointer.cur'), pointer;
+ color: var(--color-text);
+ font-size: 1rem;
+ }
+ #show-socials-button > i {
+ font-size: 1.5rem;
+ }
+ #social-list {
+ position: absolute;
+ bottom: 75px;
+ left: 0;
+ right: 0;
+ width: 100vw;
+ max-width: 400px;
+ padding: 10px;
+ background-color: var(--header_background);
+ color: var(--color-text);
+ border-radius: 10px;
+ border: 1px solid var(--color-text);
+ display: none;
+ z-index: 1000;
+ }
+ .social-list-item {
+ padding: 10px;
+ }
+ .social-list-item > a {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ text-decoration: none;
+ }
+ .social-list-divider {
+ border: 0.5px solid var(--color-text);
+ }
+ .social-list-item:hover {
+ background-color: var(--color-text);
+ color: var(--header_background);
+ }
\ No newline at end of file
diff --git a/public/assets/img/favicon.png b/public/assets/img/favicon.png
new file mode 100644
index 0000000..61fc0eb
Binary files /dev/null and b/public/assets/img/favicon.png differ
diff --git a/public/assets/img/favicon.svg b/public/assets/img/favicon.svg
new file mode 100644
index 0000000..a44a57e
--- /dev/null
+++ b/public/assets/img/favicon.svg
@@ -0,0 +1,81623 @@
+
\ No newline at end of file
diff --git a/public/assets/img/logo.png b/public/assets/img/logo.png
new file mode 100644
index 0000000..61fc0eb
Binary files /dev/null and b/public/assets/img/logo.png differ
diff --git a/public/assets/img/logo.svg b/public/assets/img/logo.svg
new file mode 100644
index 0000000..a44a57e
--- /dev/null
+++ b/public/assets/img/logo.svg
@@ -0,0 +1,81623 @@
+
\ No newline at end of file
diff --git a/templates/base/footer.tmpl b/templates/base/footer.tmpl
new file mode 100644
index 0000000..98f24df
--- /dev/null
+++ b/templates/base/footer.tmpl
@@ -0,0 +1,94 @@
+
+
+
+
+
+