diff --git a/pygitweb/static/main.css b/pygitweb/static/main.css
index c0178e3..d61e84a 100644
--- a/pygitweb/static/main.css
+++ b/pygitweb/static/main.css
@@ -40,6 +40,16 @@
 
 	--pgw-blob-selection-bg: rgba(193, 173, 0, 0.35);
 
+	--pgw-navbar-bg: #e2e8f0;
+	--pgw-navbar-text: #1e293b;
+	--pgw-navbar-text-muted: #64748b;
+	--pgw-navbar-link-hover-bg: #cbd5e1;
+	--pgw-navbar-active-bg: #94a3b8;
+	--pgw-navbar-active-text: #ffffff;
+	--pgw-navbar-border: #cbd5e1;
+	--pgw-navbar-toggler-border: #94a3b8;
+	--pgw-navbar-toggler-icon: #475569;
+
 	/* diff2html (optional overrides) */
 	--d2h-info-bg-color: #f0f0f0;
 	--d2h-file-header-bg-color: rgb(220, 220, 255);
@@ -86,6 +96,16 @@
 
 		--pgw-blob-selection-bg: rgba(193, 173, 0, 0.4);
 
+		--pgw-navbar-bg: #2d2d4a;
+		--pgw-navbar-text: #e2e8f0;
+		--pgw-navbar-text-muted: #94a3b8;
+		--pgw-navbar-link-hover-bg: #3d3d5c;
+		--pgw-navbar-active-bg: #4f4f7a;
+		--pgw-navbar-active-text: #f1f5f9;
+		--pgw-navbar-border: #3d3d48;
+		--pgw-navbar-toggler-border: #64748b;
+		--pgw-navbar-toggler-icon: #94a3b8;
+
 		--d2h-info-bg-color: #222;
 		--d2h-file-header-bg-color: rgb(38, 38, 98);
 		--d2h-empty-placeholder-bg-color: #222;
@@ -257,6 +277,7 @@ body:has(.page) {
 	bottom: 0;
 	left: 0;
 	z-index: 1030;
+	background-color: var(--pgw-navbar-bg);
 }
 .page .navbar-vertical.position-fixed ~ .page-wrapper {
 	margin-left: var(--tblr-navbar-vertical-width, 15rem);
@@ -332,7 +353,48 @@ tbody tr:hover {
 	background-color: var(--pgw-title-hover-bg);
 }
 
-/* Vertical navbar: size inline nav icons */
+/* Vertical navbar: variables and link states */
+.navbar-vertical .nav-link {
+	color: var(--pgw-navbar-text);
+}
+.navbar-vertical .nav-link:hover {
+	background-color: var(--pgw-navbar-link-hover-bg);
+	color: var(--pgw-navbar-text);
+}
+.navbar-vertical .nav-link.active {
+	background-color: var(--pgw-navbar-active-bg);
+	color: var(--pgw-navbar-active-text);
+}
+.navbar-vertical .navbar-brand .text-reset,
+.navbar-vertical .nav-link-title {
+	color: var(--pgw-navbar-text);
+}
+.navbar-vertical .nav-link:hover .nav-link-title,
+.navbar-vertical .nav-link:hover .text-reset {
+	color: var(--pgw-navbar-text);
+}
+.navbar-vertical .nav-link.active .nav-link-title {
+	color: var(--pgw-navbar-active-text);
+}
+.navbar-vertical .navbar-toggler {
+	border-color: var(--pgw-navbar-toggler-border);
+}
+.navbar-vertical .navbar-toggler-icon {
+	background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23475569' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+[data-bs-theme="dark"] .navbar-vertical .navbar-toggler-icon {
+	background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%2394a3b8' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+.navbar-user {
+	border-top-color: var(--pgw-navbar-border) !important;
+}
+.navbar-user .navbar-user-name {
+	color: var(--pgw-navbar-text);
+}
+.navbar-user .navbar-user-meta,
+.navbar-user .text-muted {
+	color: var(--pgw-navbar-text-muted);
+}
 .navbar-vertical .nav-link-icon {
 	display: inline-flex;
 	align-items: center;
