diff --git a/static/script.js b/static/script.js
index bb0f30e9..08379d9f 100644
--- a/static/script.js
+++ b/static/script.js
@@ -965,3 +965,38 @@ if (scrollTopBtn) {
window.addEventListener('scroll', handleScroll);
scrollTopBtn.addEventListener('click', scrollToTop);
}
+}
+
+
+// ============================================================
+// Dark Mode Toggle
+// ============================================================
+
+(function initDarkMode() {
+ const toggle = document.getElementById("theme-toggle");
+
+ if (!toggle) return;
+
+ // Load saved theme
+ const savedTheme = localStorage.getItem("theme");
+
+ if (savedTheme === "dark") {
+ document.documentElement.setAttribute("data-theme", "dark");
+ toggle.textContent = "☀️";
+ }
+
+ toggle.addEventListener("click", function () {
+ const isDark =
+ document.documentElement.getAttribute("data-theme") === "dark";
+
+ if (isDark) {
+ document.documentElement.removeAttribute("data-theme");
+ localStorage.setItem("theme", "light");
+ toggle.textContent = "🌙";
+ } else {
+ document.documentElement.setAttribute("data-theme", "dark");
+ localStorage.setItem("theme", "dark");
+ toggle.textContent = "☀️";
+ }
+ });
+})();
\ No newline at end of file
diff --git a/static/style.css b/static/style.css
index b399ee5f..26457f7b 100644
--- a/static/style.css
+++ b/static/style.css
@@ -77,6 +77,27 @@
--entry-delay-step: 110ms;
}
+[data-theme="dark"] {
+ --white: #0b1120;
+ --gray-50: #111827;
+ --gray-100: #1f2937;
+ --gray-200: #374151;
+ --gray-300: #4b5563;
+ --gray-400: #9ca3af;
+ --gray-500: #d1d5db;
+ --gray-600: #e5e7eb;
+ --gray-700: #f3f4f6;
+ --gray-900: #ffffff;
+
+ --text-heading: #ffffff;
+ --text-body: #d1d5db;
+ --border: #374151;
+
+ background: #0b1120;
+ color: #f9fafb;
+}.feature-card--pink
+
+
/* ---- Reset ------------------------------------------------- */
*,
*::before,
@@ -137,6 +158,13 @@ ol {
margin-bottom: 16px;
}
+/* Dark mode section eyebrow */
+[data-theme="dark"] .section-eyebrow {
+ background: #1f2937;
+ color: #f9fafb;
+ border: 1px solid #374151;
+}
+
.section-title {
font-family: var(--font-display);
font-size: clamp(1.75rem, 3.5vw, 2.5rem);
@@ -437,6 +465,26 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
text-decoration: none;
}
+/* Dark mode toggle button */
+.theme-toggle {
+ width: 42px;
+ height: 42px;
+ border-radius: 12px;
+ border: 1px solid rgba(255,255,255,0.15);
+ background: rgba(255,255,255,0.08);
+ color: white;
+ cursor: pointer;
+ font-size: 1rem;
+ transition: all 0.25s ease;
+}
+
+.theme-toggle:hover {
+ background: rgba(255,255,255,0.18);
+ transform: translateY(-2px);
+}
+
+
+
/* Mobile hamburger */
.nav-mobile-toggle {
display: none;
@@ -650,6 +698,16 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
text-decoration: none;
}
+[data-theme="dark"] .btn-hero-primary {
+ background: #fbbf24;
+ color: #111827;
+ box-shadow: none;
+}
+
+[data-theme="dark"] .btn-hero-primary:hover {
+ background: #f59e0b;
+}
+
.btn-hero-ghost {
display: inline-flex;
align-items: center;
@@ -690,6 +748,12 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
box-shadow: var(--shadow-lg);
}
+/* Dark mode hero visual cards */
+[data-theme="dark"] .hero-visual-card {
+ background: #111827;
+ border: 1px solid #374151;
+}
+
.hvc-icon {
width: 40px;
height: 40px;
@@ -710,6 +774,11 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
color: var(--green-500);
}
+[data-theme="dark"] .hvc-icon {
+ background: #1f2937;
+ border: 1px solid #374151;
+}
+
.hvc-text {
display: flex;
flex-direction: column;
@@ -723,11 +792,19 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
color: var(--gray-900);
}
+[data-theme="dark"] .hvc-title {
+ color: #f9fafb;
+}
+
.hvc-sub {
font-size: 0.77rem;
color: var(--gray-500);
}
+[data-theme="dark"] .hvc-sub {
+ color: #d1d5db;
+}
+
/* Code preview card */
.hero-visual-main {
background: #0d1117;
@@ -973,6 +1050,17 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
padding: 18px 32px;
}
+[data-theme="dark"] .skill-strip {
+ background:
+ radial-gradient(circle at top left,
+ rgba(79, 70, 229, 0.08),
+ transparent 35%),
+ radial-gradient(circle at bottom right,
+ rgba(99, 102, 241, 0.06),
+ transparent 30%),
+ #020617;
+}
+
.skill-strip-inner {
max-width: 1140px;
margin: 0 auto;
@@ -988,6 +1076,13 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
-webkit-backdrop-filter: blur(10px);
}
+/* Dark mode skill strip */
+[data-theme="dark"] .skill-strip-inner {
+ background: #111827;
+ border: 1px solid #374151;
+ box-shadow: none;
+}
+
.skill-strip-label {
font-size: 0.8rem;
font-weight: 600;
@@ -1015,6 +1110,20 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
border-radius: 24px;
}
+/* Dark mode tech stack pills */
+[data-theme="dark"] .ss-item {
+ background: rgba(31, 41, 55, 0.9);
+ color: #f9fafb;
+ border: 1px solid rgba(75, 85, 99, 0.4);
+}
+
+
+.ss-item:hover {
+ transform: translateY(-1px);
+ color: var(--indigo-700);
+ background: var(--white);
+ border-color: rgba(79, 110, 247, 0.28);
+ box-shadow: 0 8px 20px rgba(15, 21, 96, 0.08);
.ss-item-green {
font-size: 0.88rem;
font-weight: 600;
@@ -1035,6 +1144,13 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
border-radius: 24px;
}
+[data-theme="dark"] .ss-sep {
+ color: #818cf8;
+}
+
+@keyframes skill-strip-marquee {
+ from { transform: translateX(0); }
+ to { transform: translateX(-50%); }
.ss-item-pink {
font-size: 0.88rem;
font-weight: 600;
@@ -1055,12 +1171,23 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
animation-duration: 36s;
}
+ .skill-strip-marquee {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ flex-wrap: nowrap;
+ white-space: nowrap;
+ overflow: hidden;
.ss-item-pink {
font-size: 0.8rem;
padding: 5px 12px;
}
}
+.skill-strip-marquee > * {
+ flex-shrink: 0;
+}
+
@media (max-width: 768px) {
.skill-strip {
padding: 14px 16px;
@@ -1189,6 +1316,14 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
background: var(--purple-100);
}
+/* Dark mode feature cards */
+[data-theme="dark"] .feature-card.feature-card--pink,
+[data-theme="dark"] .feature-card.feature-card--yellow,
+[data-theme="dark"] .feature-card.feature-card--purple {
+ background: #111827;
+ border: 1px solid #374151;
+}
+
.feature-card-icon {
width: 52px;
height: 52px;
@@ -1199,6 +1334,17 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
justify-content: center;
margin-bottom: 22px;
box-shadow: var(--shadow-xs);
+
+}
+
+/* Dark mode feature icons */
+[data-theme="dark"] .feature-card-icon {
+ background: #1f2937;
+ border: 1px solid #374151;
+}
+
+[data-theme="dark"] .feature-card-icon svg {
+ stroke: #f9fafb;
}
.feature-card--pink .feature-card-icon {
@@ -1240,6 +1386,19 @@ html[data-entry-anim="true"] .form-card form > .btn-submit { animation-delay: 39
padding: 7px 16px;
border-radius: var(--r-full);
transition: background var(--t), border-color var(--t);
+
+}
+
+/* Dark mode feature buttons */
+[data-theme="dark"] .feature-card-link {
+ background: #1f2937;
+ color: #f9fafb;
+ border: 1px solid #374151;
+}
+
+[data-theme="dark"] .feature-card-link:hover {
+ background: #374151;
+ color: white;
}
.feature-card-link:hover {
@@ -1445,6 +1604,14 @@ label {
transition: background var(--t), border-color var(--t), color var(--t);
}
+[data-theme="dark"] .skill-pill,
+[data-theme="dark"] .skill-chip,
+[data-theme="dark"] .tech-pill {
+ background: #1f2937;
+ color: #f9fafb;
+ border: 1px solid #374151;
+}
+
.skill-chip:hover,
.skill-chip.active {
background: var(--indigo-700);
@@ -1548,6 +1715,17 @@ select:focus {
box-shadow: none;
}
+/* Dark mode clear button */
+[data-theme="dark"] .btn-clear {
+ background: #1f2937;
+ color: #f9fafb;
+ border: 1px solid #374151;
+}
+
+[data-theme="dark"] .btn-clear:hover {
+ background: #374151;
+}
+
/* ---- Results Section -------------------------------------- */
.results-section {
padding: 80px 0 108px;
@@ -2726,6 +2904,17 @@ select:focus {
border-color: rgba(79, 110, 247, 0.2);
}
+/* Dark mode GitHub import button */
+[data-theme="dark"] #btn-show-github {
+ background: #1f2937 !important;
+ color: #f9fafb !important;
+ border: 1px solid #374151 !important;
+}
+
+[data-theme="dark"] #btn-show-github:hover {
+ background: #374151 !important;
+}
+
#github-modal-overlay.active {
display: flex !important; /* Overrides the 'none' display */
backdrop-filter: blur(4px);
@@ -2983,4 +3172,18 @@ select:focus {
flex: 1;
white-space: pre;
color: #e6edf3;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ html:focus-within {
+ scroll-behavior: auto;
+ }
+
+ *,
+ *::before,
+ *::after {
+ animation-duration: 0.01ms !important;
+ animation-iteration-count: 1 !important;
+ transition-duration: 0.01ms !important;
+ }
}
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
index e90b7946..f6e959ed 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -28,7 +28,10 @@
Features
Find Project
GitHub
-
+
+