From aedfb022f39e7031d0bd40696507ee0e0e8ea9e3 Mon Sep 17 00:00:00 2001 From: asepharyana Date: Fri, 21 Aug 2026 11:13:05 +0700 Subject: [PATCH] fix(theme): support full dynamic Light Mode and Dark Mode with CSS variables and storage sync --- apps/web/app/[section]/[...slug]/page.tsx | 134 ++++++++-------- apps/web/app/[section]/page.tsx | 50 +++--- apps/web/app/components/CommandMenu.tsx | 48 +++--- apps/web/app/components/DocActions.tsx | 16 +- apps/web/app/components/DocForm.tsx | 74 ++++----- apps/web/app/components/Header.tsx | 32 ++-- apps/web/app/components/McpConfigSnippet.tsx | 18 +-- apps/web/app/components/Sidebar.tsx | 32 ++-- apps/web/app/components/TOC.tsx | 12 +- apps/web/app/components/ThemeToggle.tsx | 46 ++++-- apps/web/app/create/page.tsx | 14 +- apps/web/app/globals.css | 155 ++++++++++++++----- apps/web/app/layout.tsx | 25 ++- apps/web/app/login/page.tsx | 20 +-- apps/web/app/page.tsx | 78 +++++----- apps/web/app/search/page.tsx | 58 +++---- 16 files changed, 464 insertions(+), 348 deletions(-) diff --git a/apps/web/app/[section]/[...slug]/page.tsx b/apps/web/app/[section]/[...slug]/page.tsx index d51457f..e892321 100644 --- a/apps/web/app/[section]/[...slug]/page.tsx +++ b/apps/web/app/[section]/[...slug]/page.tsx @@ -54,47 +54,47 @@ function CustomFieldBadges({ if (customEntries.length === 0) return null; return ( -
+
{customEntries.map(([key, value]) => { const label = key.charAt(0).toUpperCase() + key.slice(1).replace(/_/g, " "); - let colorClass = "bg-[#141517] border-[#23252a] text-[#d0d6e0]"; + let colorClass = "bg-[var(--bg-elevated)] border-[var(--border-color)] text-[var(--text-secondary)]"; let icon = "๐Ÿท๏ธ"; let displayValue: string; if (typeof value === "number") { - colorClass = "bg-[#5e6ad2]/10 border-[#5e6ad2]/30 text-[#7170ff]"; + colorClass = "bg-[#5e6ad2]/10 border-[#5e6ad2]/30 text-[#5e6ad2] dark:text-[#7170ff]"; icon = "๐ŸŽฏ"; displayValue = `${value} pts`; } else if (typeof value === "boolean") { colorClass = value - ? "bg-emerald-500/10 border-emerald-500/30 text-emerald-400" - : "bg-rose-500/10 border-rose-500/30 text-rose-400"; + ? "bg-emerald-500/10 border-emerald-500/30 text-emerald-600 dark:text-emerald-400" + : "bg-rose-500/10 border-rose-500/30 text-rose-600 dark:text-rose-400"; icon = value ? "โœ“" : "โœ•"; displayValue = value ? "Solved" : "Pending"; } else if (Array.isArray(value)) { - colorClass = "bg-[#5e6ad2]/10 border-[#5e6ad2]/30 text-[#7170ff]"; + colorClass = "bg-[#5e6ad2]/10 border-[#5e6ad2]/30 text-[#5e6ad2] dark:text-[#7170ff]"; icon = "๐Ÿ—‚๏ธ"; displayValue = value.join(", "); } else { const v = String(value).toLowerCase(); if (/^(easy|simple|beginner)/i.test(v)) { - colorClass = "bg-emerald-500/10 border-emerald-500/30 text-emerald-400"; + colorClass = "bg-emerald-500/10 border-emerald-500/30 text-emerald-600 dark:text-emerald-400"; icon = "๐ŸŸข"; displayValue = "Easy"; } else if (/^(medium|intermediate)/i.test(v)) { - colorClass = "bg-amber-500/10 border-amber-500/30 text-amber-400"; + colorClass = "bg-amber-500/10 border-amber-500/30 text-amber-600 dark:text-amber-400"; icon = "๐ŸŸก"; displayValue = "Medium"; } else if (/^(hard|expert|advanced)/i.test(v)) { - colorClass = "bg-rose-500/10 border-rose-500/30 text-rose-400"; + colorClass = "bg-rose-500/10 border-rose-500/30 text-rose-600 dark:text-rose-400"; icon = "๐Ÿ”ด"; displayValue = "Hard"; } else if (/^(pwn|web|crypto|misc|forensic|reverse|binary)/i.test(v)) { - colorClass = "bg-indigo-500/10 border-indigo-500/30 text-indigo-300"; + colorClass = "bg-indigo-500/10 border-indigo-500/30 text-indigo-600 dark:text-indigo-300"; icon = "โšก"; displayValue = v.toUpperCase(); } else if (/ctf|def.?con|event/i.test(v)) { - colorClass = "bg-[#5e6ad2]/10 border-[#5e6ad2]/30 text-[#7170ff]"; + colorClass = "bg-[#5e6ad2]/10 border-[#5e6ad2]/30 text-[#5e6ad2] dark:text-[#7170ff]"; icon = "๐Ÿ†"; displayValue = String(value); } else { @@ -108,7 +108,7 @@ function CustomFieldBadges({ className={`inline-flex items-center gap-1.5 px-2.5 py-1 border rounded-md text-xs font-mono transition-colors ${colorClass}`} > {icon} - {label}: + {label}: {displayValue} ); @@ -157,12 +157,12 @@ function FolderIndexPage({ return (
{/* Breadcrumb */} -