diff --git a/devussy-web/src/app/globals.css b/devussy-web/src/app/globals.css index c11fe88..3323a7d 100644 --- a/devussy-web/src/app/globals.css +++ b/devussy-web/src/app/globals.css @@ -575,4 +575,48 @@ [data-theme="bliss"] *:focus-visible { outline: 1px dotted #000000; outline-offset: 2px; -} \ No newline at end of file +} + +/* Theme: Cyberpunk */ +[data-theme="cyberpunk"] { + --background: #0d0221; + --foreground: #00f0ff; + --card: rgba(1, 22, 39, 0.8); + --card-foreground: #f0f; + --popover: #011627; + --popover-foreground: #00f0ff; + --primary: #f0f; + --primary-foreground: #0d0221; + --secondary: #00f0ff; + --secondary-foreground: #0d0221; + --muted: #011627; + --muted-foreground: #00f0ff; + --accent: #f0f; + --accent-foreground: #0d0221; + --destructive: #ff3333; + --border: #f0f; + --input: #011627; + --ring: #f0f; +} + +/* Theme: Retro */ +[data-theme="retro"] { + --background: #f1f1f1; + --foreground: #333; + --card: #fff; + --card-foreground: #333; + --popover: #fff; + --popover-foreground: #333; + --primary: #ff5722; + --primary-foreground: #fff; + --secondary: #ffc107; + --secondary-foreground: #333; + --muted: #eee; + --muted-foreground: #666; + --accent: #ff9800; + --accent-foreground: #fff; + --destructive: #f44336; + --border: #ccc; + --input: #fff; + --ring: #ff5722; +} diff --git a/devussy-web/src/components/theme/ThemeProvider.tsx b/devussy-web/src/components/theme/ThemeProvider.tsx index f457409..0cfa539 100644 --- a/devussy-web/src/components/theme/ThemeProvider.tsx +++ b/devussy-web/src/components/theme/ThemeProvider.tsx @@ -2,7 +2,7 @@ import React, { createContext, useContext, useEffect, useState } from 'react'; -export type Theme = 'default' | 'terminal' | 'bliss'; +export type Theme = 'default' | 'terminal' | 'bliss' | 'cyberpunk' | 'retro'; interface ThemeContextType { theme: Theme; @@ -19,7 +19,7 @@ export function ThemeProvider({ children }: { children: React.ReactNode }) { setMounted(true); // Load theme from localStorage const savedTheme = localStorage.getItem('devussy-theme') as Theme; - if (savedTheme && ['default', 'terminal', 'bliss'].includes(savedTheme)) { + if (savedTheme && ['default', 'terminal', 'bliss', 'cyberpunk', 'retro'].includes(savedTheme)) { setThemeState(savedTheme); document.documentElement.setAttribute('data-theme', savedTheme); } diff --git a/devussy-web/src/components/theme/ThemeToggle.tsx b/devussy-web/src/components/theme/ThemeToggle.tsx index 022feb5..1a389e7 100644 --- a/devussy-web/src/components/theme/ThemeToggle.tsx +++ b/devussy-web/src/components/theme/ThemeToggle.tsx @@ -1,12 +1,14 @@ 'use client'; import { useTheme, Theme } from './ThemeProvider'; -import { Monitor, Terminal, Image } from 'lucide-react'; +import { Monitor, Terminal, Image, Cpu, Ghost } from 'lucide-react'; const themes: { value: Theme; label: string; icon: React.ReactNode }[] = [ { value: 'default', label: 'Default', icon: }, { value: 'terminal', label: 'Terminal', icon: }, { value: 'bliss', label: 'Bliss', icon: }, + { value: 'cyberpunk', label: 'Cyberpunk', icon: }, + { value: 'retro', label: 'Retro', icon: }, ]; export function ThemeToggle() {