From 5cb67355fb85904a63393b5414a8af6785a0f181 Mon Sep 17 00:00:00 2001 From: code002lover Date: Fri, 19 Dec 2025 19:50:57 +0100 Subject: [PATCH] introduce new theming category --- frontend/src/App.tsx | 16 ++++++++++- frontend/src/index.css | 65 +++++++++++++++++++++++++++--------------- 2 files changed, 57 insertions(+), 24 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f0a60ac..b25b38e 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -35,10 +35,23 @@ function App() { const [isLoading, setIsLoading] = useState(false); useEffect(() => { - if (theme !== "default") { + if (theme !== "default" && theme !== "sakura") { + document.body.classList.remove("sakura-theme"); document.body.classList.add("shader-theme"); + if (theme === "clouds" || theme === "blackhole" || theme === "ball") { + document.body.classList.add("black-theme"); + return; + } + document.body.classList.remove("black-theme"); } else { document.body.classList.remove("shader-theme"); + document.body.classList.remove("black-theme"); + + if (theme === "sakura") { + document.body.classList.add("sakura-theme"); + return; + } + document.body.classList.remove("sakura-theme"); } }, [theme]); @@ -97,6 +110,7 @@ function App() { { id: "ball", label: "Ball", icon: "⚽" }, { id: "reflect", label: "Reflect", icon: "🪞" }, { id: "clouds", label: "Clouds", icon: "☁️" }, + { id: "sakura", label: "Sakura", icon: "🌸" }, ]; return ( diff --git a/frontend/src/index.css b/frontend/src/index.css index 6e9f6e6..ba97ace 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,15 +1,21 @@ :root { - --primary-bg: #23283d; - --secondary-bg: #1e2233; - --secondary-alt-bg: #191f2e; - --tertiary-bg: #101320; - --accent-color: #096dc0; - --secondary-accent: #0a4f8c; + --primary-bg-rgb: 35 40 61; + --secondary-bg-rgb: 30 34 51; + --secondary-alt-bg-rgb: 25 31 46; + --tertiary-bg-rgb: 16 19 32; + --accent-color-rgb: 9 109 192; + --secondary-accent-rgb: 10 79 140; + --border-color-rgb: 42 48 69; --text-color: #ffffff; --text-muted: #a0a0a0; - --border-color: #2a3045; - font-family: 'Inter', system-ui, Avenir, Helvetica, Arial, sans-serif; + --primary-bg: rgb(var(--primary-bg-rgb)); + --secondary-bg: rgb(var(--secondary-bg-rgb)); + --secondary-alt-bg: rgb(var(--tertiary-bg-rgb)); + --tertiary-bg: rgb(var(--border-color-rgb)); + --border-color: rgb(var(--text-color-rgb)); + + font-family: "Inter", system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.6; font-weight: 400; @@ -32,7 +38,12 @@ body { background-color: var(--primary-bg); } -h1, h2, h3, h4, h5, h6 { +h1, +h2, +h3, +h4, +h5, +h6 { color: var(--text-color); margin-top: 0; } @@ -74,7 +85,8 @@ button:focus-visible { outline: 4px auto -webkit-focus-ring-color; } -input, select { +input, +select { background-color: var(--secondary-alt-bg); border: 1px solid var(--border-color); color: var(--text-color); @@ -85,17 +97,18 @@ input, select { transition: all 0.2s ease; } -input:focus, select:focus { +input:focus, +select:focus { outline: none; border-color: var(--accent-color); - box-shadow: 0 0 0 2px rgba(9, 109, 192, 0.2); + box-shadow: 0 0 0 2px rgb(9, 109, 192, 0.2); } * { - transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease; + transition: background-color 0.3s ease, border-color 0.3s ease, + color 0.3s ease, box-shadow 0.3s ease; } - ul { list-style: none; padding: 0; @@ -103,15 +116,21 @@ ul { .shader-theme { --primary-bg: transparent; /* Let the shader show through */ - --secondary-bg: rgba(0, 0, 0, 0.7); /* Translucent cards */ - --secondary-alt-bg: rgba(20, 20, 20, 0.6); /* Translucent inputs */ - --tertiary-bg: rgba(40, 40, 40, 0.8); - --border-color: rgba(255, 255, 255, 0.15); + --secondary-bg: rgb(var(--secondary-bg-rgb) / 0.7); /* Translucent cards */ + --secondary-alt-bg: rgb( + var(--secondary-alt-bg-rgb) / 0.6 + ); /* Translucent inputs */ + --tertiary-bg: rgb(var(--tertiary-bg-rgb) / 0.8); + --border-color: rgb(var(--border-color-rgb) / 0.15); +} + +.black-theme { + --primary-bg: transparent; /* Let the shader show through */ + --secondary-bg: rgb(0, 0, 0, 0.7); /* Translucent cards */ + --secondary-alt-bg: rgb(20, 20, 20, 0.6); /* Translucent inputs */ + --tertiary-bg: rgb(40, 40, 40, 0.8); + --border-color: rgb(255, 255, 255, 0.15); --text-color: #ffffff; --accent-color: #121212; --secondary-accent: #212121; -} - -.shader-theme body { - background-color: transparent; -} +} \ No newline at end of file