Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions static/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "☀️";
}
});
})();
203 changes: 203 additions & 0 deletions static/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
}
Loading
Loading