Skip to content

Commit 0effebe

Browse files
committed
feat(theme): enable light theme
1 parent c7b65ad commit 0effebe

22 files changed

Lines changed: 2405 additions & 548 deletions

src/app/globals.css

Lines changed: 245 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,255 @@
11
@import "tailwindcss";
22

3-
:root {
4-
--background: #ffffff;
5-
--foreground: #171717;
6-
}
7-
8-
@theme inline {
9-
--color-background: var(--background);
10-
--color-foreground: var(--foreground);
3+
:root {
4+
--background: #FFFFFF;
5+
--surface: #F7F7F9;
6+
--surface-variant: #EEEEF2;
7+
8+
--text-primary: #18181B;
9+
--text-secondary: #52525B;
10+
--text-tertiary: #71717A;
11+
12+
--border: #E4E4E7;
13+
--divider: #F1F1F4;
14+
15+
--success: #22C55E;
16+
--error: #EF4444;
17+
--warning: #F59E0B;
18+
--info: #3B82F6;
19+
20+
21+
--network-primary: #E6007A;
22+
--network-secondary: #BC318F;
23+
--network-light: #FAE6F2;
24+
--network-dark: #9C0054;
25+
26+
27+
--elevation-level0: none;
28+
--elevation-level1: 0 1px 3px rgba(0, 0, 0, 0.08);
29+
--elevation-level2: 0 3px 6px rgba(0, 0, 0, 0.12);
30+
--elevation-level3: 0 8px 16px rgba(0, 0, 0, 0.15);
31+
32+
1133
--font-sans: var(--font-geist-sans);
1234
--font-mono: var(--font-geist-mono);
1335
}
1436

15-
@media (prefers-color-scheme: dark) {
16-
:root {
17-
--background: #0a0a0a;
18-
--foreground: #ededed;
19-
}
37+
38+
[data-theme="dark"] {
39+
--background: #0F0F14;
40+
--surface: #1C1C24;
41+
--surface-variant: #2D2D3A;
42+
43+
--text-primary: #F4F4F6;
44+
--text-secondary: #A1A1AA;
45+
--text-tertiary: #8E8E99;
46+
47+
--border: #303042;
48+
--divider: #27272F;
49+
50+
--success: #4ADE80;
51+
--error: #F87171;
52+
--warning: #FBBF24;
53+
--info: #60A5FA;
54+
55+
2056
}
2157

58+
2259
body {
23-
background: var(--background);
24-
color: var(--foreground);
25-
font-family: Arial, Helvetica, sans-serif;
60+
background-color: var(--background);
61+
color: var(--text-primary);
62+
font-family: var(--font-sans);
63+
transition: background-color 0.3s ease, color 0.3s ease;
64+
}
65+
66+
67+
[data-network="westend"] {
68+
--network-primary: #46DDD2;
69+
--network-secondary: #37B3AA;
70+
--network-light: #E0FAF8;
71+
--network-dark: #2C8C85;
72+
}
73+
74+
[data-network="paseo"] {
75+
--network-primary: #FF7B00;
76+
--network-secondary: #D98A37;
77+
--network-light: #FFF0E0;
78+
--network-dark: #B35600;
79+
}
80+
81+
[data-network="rococo"] {
82+
--network-primary: #7D42BC;
83+
--network-secondary: #6340A8;
84+
--network-light: #F0E5FF;
85+
--network-dark: #512C7E;
86+
}
87+
88+
89+
.bg-theme-surface {
90+
background-color: var(--surface);
91+
}
92+
93+
.bg-theme-surface-variant {
94+
background-color: var(--surface-variant);
95+
}
96+
97+
.border-theme {
98+
border-color: var(--border);
99+
}
100+
101+
.text-theme-primary {
102+
color: var(--text-primary);
103+
}
104+
105+
.text-theme-secondary {
106+
color: var(--text-secondary);
26107
}
108+
109+
.text-theme-tertiary {
110+
color: var(--text-tertiary);
111+
}
112+
113+
.bg-network-primary {
114+
background-color: var(--network-primary);
115+
}
116+
117+
.text-network-primary {
118+
color: var(--network-primary);
119+
}
120+
121+
.border-network-primary {
122+
border-color: var(--network-primary);
123+
}
124+
125+
126+
.network-transition {
127+
transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
128+
}
129+
130+
.fade-in {
131+
animation: fadeIn 0.2s ease-in-out;
132+
}
133+
134+
@keyframes fadeIn {
135+
from { opacity: 0; }
136+
to { opacity: 1; }
137+
}
138+
139+
.scale-in {
140+
animation: scaleIn 0.2s ease-out;
141+
}
142+
143+
@keyframes scaleIn {
144+
from { transform: scale(0.95); opacity: 0; }
145+
to { transform: scale(1); opacity: 1; }
146+
}
147+
148+
149+
.monaco-editor {
150+
transition: background-color 0.3s;
151+
}
152+
153+
154+
:focus-visible {
155+
outline: 2px solid var(--network-primary);
156+
outline-offset: 2px;
157+
}
158+
159+
160+
161+
162+
@keyframes fadeIn {
163+
from { opacity: 0; }
164+
to { opacity: 1; }
165+
}
166+
167+
@keyframes slideInDown {
168+
from {
169+
transform: translateY(-10px);
170+
opacity: 0;
171+
}
172+
to {
173+
transform: translateY(0);
174+
opacity: 1;
175+
}
176+
}
177+
178+
@keyframes slideInRight {
179+
from {
180+
transform: translateX(20px);
181+
opacity: 0;
182+
}
183+
to {
184+
transform: translateX(0);
185+
opacity: 1;
186+
}
187+
}
188+
189+
@keyframes pulse {
190+
0% { transform: scale(1); }
191+
50% { transform: scale(1.05); }
192+
100% { transform: scale(1); }
193+
}
194+
195+
.animate-fadeIn {
196+
animation: fadeIn 0.3s ease-in-out;
197+
}
198+
199+
.animate-slideInDown {
200+
animation: slideInDown 0.3s ease-out;
201+
}
202+
203+
.animate-slideInRight {
204+
animation: slideInRight 0.3s ease-out;
205+
}
206+
207+
.animate-pulse-slow {
208+
animation: pulse 2s infinite ease-in-out;
209+
}
210+
211+
212+
::-webkit-scrollbar {
213+
width: 8px;
214+
height: 8px;
215+
}
216+
217+
::-webkit-scrollbar-track {
218+
background: var(--surfaceVariant);
219+
border-radius: 8px;
220+
}
221+
222+
::-webkit-scrollbar-thumb {
223+
background: var(--network-primary);
224+
border-radius: 8px;
225+
opacity: 0.7;
226+
}
227+
228+
::-webkit-scrollbar-thumb:hover {
229+
opacity: 1;
230+
}
231+
232+
233+
:focus-visible {
234+
outline: 2px solid var(--network-primary);
235+
outline-offset: 2px;
236+
border-radius: 4px;
237+
}
238+
239+
240+
::selection {
241+
background-color: var(--network-primary);
242+
color: white;
243+
}
244+
245+
246+
@media (max-width: 768px) {
247+
.container {
248+
padding-left: 16px;
249+
padding-right: 16px;
250+
}
251+
252+
.card-compact {
253+
padding: 12px !important;
254+
}
255+
}

src/app/layout.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Metadata } from "next";
22
import { Geist, Geist_Mono } from "next/font/google";
33
import "./globals.css";
4+
import { ThemeProvider } from "@/lib/theme/ThemeProvider";
45

56
const geistSans = Geist({
67
variable: "--font-geist-sans",
@@ -27,8 +28,8 @@ export default function RootLayout({
2728
<body
2829
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
2930
>
30-
{children}
31+
<ThemeProvider>{children}</ThemeProvider>
3132
</body>
3233
</html>
3334
);
34-
}
35+
}

0 commit comments

Comments
 (0)