Themes/ Ram Increased to 16GB

This commit is contained in:
JCBSComputer
2026-06-29 16:38:40 +02:00
parent 54b19123ca
commit 1d080761fb
11 changed files with 1074 additions and 91 deletions
+282
View File
@@ -0,0 +1,282 @@
.dark.theme-cosmic {
--background: 260 30% 8%;
--foreground: 210 40% 98%;
--card: 260 25% 12%;
--card-foreground: 210 40% 98%;
--popover: 260 25% 12%;
--popover-foreground: 210 40% 98%;
--primary: 280 60% 55%;
--primary-foreground: 0 0% 100%;
--secondary: 260 20% 20%;
--secondary-foreground: 210 40% 98%;
--muted: 260 20% 18%;
--muted-foreground: 260 10% 60%;
--accent: 280 60% 55%;
--accent-foreground: 210 40% 98%;
--destructive: 0 70% 50%;
--destructive-foreground: 210 40% 98%;
--border: 260 20% 22%;
--input: 260 20% 22%;
--ring: 280 60% 55%;
--radius: 0.5rem;
--sidebar: 260 30% 8%;
--sidebar-foreground: 210 40% 98%;
--sidebar-primary: 280 60% 55%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 280 60% 55%;
--sidebar-accent-foreground: 210 40% 98%;
--sidebar-border: 260 20% 20%;
--sidebar-ring: 280 60% 55%;
}
.light.theme-cosmic {
--background: 0 0% 98%;
--foreground: 260 30% 12%;
--card: 0 0% 100%;
--card-foreground: 260 30% 12%;
--popover: 0 0% 100%;
--popover-foreground: 260 30% 12%;
--primary: 280 50% 50%;
--primary-foreground: 0 0% 100%;
--secondary: 260 20% 92%;
--secondary-foreground: 260 30% 20%;
--muted: 260 15% 92%;
--muted-foreground: 260 10% 45%;
--accent: 280 50% 50%;
--accent-foreground: 0 0% 100%;
--destructive: 0 80% 50%;
--destructive-foreground: 0 0% 100%;
--border: 260 15% 85%;
--input: 260 15% 85%;
--ring: 280 50% 50%;
--radius: 0.5rem;
--sidebar: 0 0% 100%;
--sidebar-foreground: 260 30% 12%;
--sidebar-primary: 280 50% 50%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 280 50% 50%;
--sidebar-accent-foreground: 0 0% 100%;
--sidebar-border: 260 15% 85%;
--sidebar-ring: 280 50% 50%;
}
.dark.theme-cosmic body {
background: transparent
radial-gradient(ellipse 120% 70% at 20% 30%, rgba(100, 60, 200, 0.25) 0%, transparent 60%),
radial-gradient(ellipse 80% 60% at 80% 70%, rgba(0, 200, 100, 0.15) 0%, transparent 50%),
radial-gradient(ellipse 60% 50% at 60% 20%, rgba(200, 50, 180, 0.2) 0%, transparent 50%),
radial-gradient(ellipse 100% 80% at 40% 80%, rgba(50, 100, 220, 0.15) 0%, transparent 50%);
background-size: 200% 200%;
animation: cosmic-drift 90s linear infinite;
}
.dark.theme-cosmic body > div {
background: transparent !important;
}
.light.theme-cosmic body::before {
content: "";
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
background:
radial-gradient(ellipse 100% 60% at 15% 25%, rgba(0, 200, 80, 0.06) 0%, transparent 60%),
radial-gradient(ellipse 70% 50% at 80% 70%, rgba(100, 60, 200, 0.04) 0%, transparent 50%),
radial-gradient(ellipse 50% 40% at 60% 20%, rgba(0, 200, 80, 0.05) 0%, transparent 50%);
}
@keyframes cosmic-drift {
0% { background-position: 0% 0%; }
50% { background-position: 100% 100%; }
100% { background-position: 0% 0%; }
}
.dark.theme-cosmic .text-glow {
text-shadow: 0 0 10px hsl(120, 100%, 45%), 0 0 30px hsl(120, 100%, 45%), 0 0 60px rgba(0, 220, 100, 0.4);
}
.light.theme-cosmic .text-glow {
text-shadow: 0 0 8px hsl(280, 50%, 50%), 0 0 20px hsl(280, 50%, 50%), 0 0 40px rgba(200, 50, 200, 0.3);
}
.dark.theme-cosmic h1, .dark.theme-cosmic h2, .dark.theme-cosmic h3 {
background: linear-gradient(135deg, hsl(120, 100%, 45%), hsl(170, 80%, 50%));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.light.theme-cosmic h1, .light.theme-cosmic h2, .light.theme-cosmic h3 {
background: linear-gradient(135deg, hsl(280, 50%, 45%), hsl(280, 60%, 55%));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.dark.theme-cosmic a {
color: hsl(120, 90%, 50%);
text-decoration: none;
transition: color 0.2s;
}
.light.theme-cosmic a {
color: hsl(280, 50%, 45%);
text-decoration: none;
transition: color 0.2s;
}
.dark.theme-cosmic a:hover {
color: hsl(170, 80%, 50%);
text-shadow: 0 0 8px rgba(0, 220, 100, 0.4);
}
.light.theme-cosmic a:hover {
color: hsl(280, 60%, 55%);
}
.dark.theme-cosmic blockquote {
border-left: 3px solid hsl(280, 60%, 55%);
color: hsl(260, 15%, 70%);
font-style: italic;
}
.light.theme-cosmic blockquote {
border-left: 3px solid hsl(280, 50%, 50%);
color: hsl(260, 10%, 45%);
font-style: italic;
}
.dark.theme-cosmic code {
color: hsl(120, 90%, 50%);
background: rgba(100, 60, 200, 0.15);
border: 1px solid rgba(100, 60, 200, 0.2);
}
.light.theme-cosmic code {
color: hsl(280, 50%, 45%);
background: rgba(100, 60, 200, 0.06);
border: 1px solid rgba(100, 60, 200, 0.15);
}
.dark.theme-cosmic pre {
background: rgba(13, 8, 32, 0.8);
border: 1px solid rgba(100, 60, 200, 0.15);
}
.light.theme-cosmic pre {
background: rgba(0, 200, 80, 0.03);
border: 1px solid rgba(0, 200, 80, 0.1);
}
.dark.theme-cosmic hr {
border-color: rgba(100, 60, 200, 0.2);
}
.light.theme-cosmic hr {
border-color: rgba(0, 200, 80, 0.15);
}
.dark.theme-cosmic table th {
color: hsl(120, 90%, 50%);
}
.light.theme-cosmic table th {
color: hsl(280, 50%, 45%);
}
.dark.theme-cosmic table td {
border-color: rgba(100, 60, 200, 0.15);
}
.light.theme-cosmic table td {
border-color: rgba(0, 200, 80, 0.1);
}
.dark.theme-cosmic ::selection {
background: rgba(200, 50, 200, 0.25);
color: hsl(0, 0%, 100%);
}
.light.theme-cosmic ::selection {
background: rgba(200, 50, 200, 0.15);
color: hsl(0, 0%, 0%);
}
.dark.theme-cosmic input::placeholder,
.dark.theme-cosmic textarea::placeholder {
color: hsl(260, 10%, 40%);
}
.light.theme-cosmic input::placeholder,
.light.theme-cosmic textarea::placeholder {
color: hsl(260, 10%, 65%);
}
.dark.theme-cosmic .page-header-title {
color: hsl(120, 90%, 50%);
}
.light.theme-cosmic .page-header-title {
color: hsl(280, 50%, 45%);
}
.dark.theme-cosmic .stat-card-value {
color: hsl(120, 90%, 50%);
}
.light.theme-cosmic .stat-card-value {
color: hsl(280, 50%, 45%);
}
.dark.theme-cosmic .badge {
color: hsl(120, 90%, 50%);
}
.light.theme-cosmic .badge {
color: hsl(280, 50%, 45%);
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .h-1.w-full {
background: linear-gradient(to right, hsl(280, 60%, 55%), hsl(280, 70%, 65%), hsl(280, 60%, 55%)) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .h-1.w-full {
background: linear-gradient(to right, hsl(120, 100%, 45%), hsl(120, 100%, 55%), hsl(120, 100%, 45%)) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .rounded-xl.shrink-0 {
background: hsla(280, 60%, 55%, 0.1) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .rounded-xl.shrink-0 {
background: hsla(120, 100%, 45%, 0.1) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .rounded-xl.shrink-0 svg {
color: hsl(280, 60%, 55%) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .rounded-xl.shrink-0 svg {
color: hsl(120, 100%, 45%) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .absolute.bottom-0.h-1 {
background: linear-gradient(to right, transparent, hsla(280, 60%, 55%, 0.25), transparent) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .absolute.bottom-0.h-1 {
background: linear-gradient(to right, transparent, hsla(120, 100%, 45%, 0.25), transparent) !important;
}
.dark.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 .rounded-full.bg-gradient-to-r {
background: linear-gradient(to right, hsl(280, 60%, 55%), hsl(120, 100%, 45%)) !important;
}
.light.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .h-1.w-full {
background: linear-gradient(to right, hsl(280, 50%, 50%), hsl(280, 60%, 60%), hsl(280, 50%, 50%)) !important;
}
.light.theme-cosmic .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .h-1.w-full {
background: linear-gradient(to right, hsl(120, 80%, 40%), hsl(120, 80%, 50%), hsl(120, 80%, 40%)) !important;
}
+117
View File
@@ -0,0 +1,117 @@
{
"theme": {
"id": "cosmic",
"name": "Cosmic",
"description": "Dark mode: green text with purple highlights + glowing NEBULA header; Light mode: purple text + purple NEBULA header",
"type": "dual",
"default": false
},
"modes": {
"dark": {
"colors": {
"background": "hsl(260, 30%, 8%)",
"foreground": "hsl(210, 40%, 98%)",
"card": "hsl(260, 25%, 12%)",
"cardForeground": "hsl(210, 40%, 98%)",
"popover": "hsl(260, 25%, 12%)",
"popoverForeground": "hsl(210, 40%, 98%)",
"primary": "hsl(280, 60%, 55%)",
"primaryForeground": "hsl(0, 0%, 100%)",
"secondary": "hsl(260, 20%, 20%)",
"secondaryForeground": "hsl(210, 40%, 98%)",
"muted": "hsl(260, 20%, 18%)",
"mutedForeground": "hsl(260, 10%, 60%)",
"accent": "hsl(280, 60%, 55%)",
"accentForeground": "hsl(210, 40%, 98%)",
"destructive": "hsl(0, 70%, 50%)",
"destructiveForeground": "hsl(210, 40%, 98%)",
"border": "hsl(260, 20%, 22%)",
"input": "hsl(260, 20%, 22%)",
"sidebar": "hsl(260, 30%, 8%)",
"sidebarForeground": "hsl(210, 40%, 98%)",
"sidebarPrimary": "hsl(280, 60%, 55%)",
"sidebarPrimaryForeground": "hsl(0, 0%, 100%)",
"sidebarAccent": "hsl(280, 60%, 55%)",
"sidebarAccentForeground": "hsl(210, 40%, 98%)",
"sidebarBorder": "hsl(260, 20%, 22%)",
"sidebarRing": "hsl(280, 60%, 55%)"
},
"textColors": {
"heading": "linear-gradient(135deg, #00E060, #2dd4bf)",
"body": "#e8e8ef",
"muted": "#8a7faa",
"link": "#00E060",
"linkHover": "#2dd4bf",
"code": "#00E060",
"placeholder": "#554b70"
},
"backgroundImage": null,
"backgroundGradients": [
"rgba(100, 60, 200, 0.15) at 20% 30%",
"rgba(0, 220, 100, 0.08) at 80% 70%",
"rgba(200, 50, 180, 0.10) at 60% 20%",
"rgba(50, 100, 220, 0.08) at 40% 80%"
]
},
"light": {
"colors": {
"background": "hsl(0, 0%, 98%)",
"foreground": "hsl(260, 30%, 12%)",
"card": "hsl(0, 0%, 100%)",
"cardForeground": "hsl(260, 30%, 12%)",
"popover": "hsl(0, 0%, 100%)",
"popoverForeground": "hsl(260, 30%, 12%)",
"primary": "hsl(280, 50%, 50%)",
"primaryForeground": "hsl(0, 0%, 100%)",
"secondary": "hsl(260, 20%, 92%)",
"secondaryForeground": "hsl(260, 30%, 20%)",
"muted": "hsl(260, 15%, 92%)",
"mutedForeground": "hsl(260, 10%, 45%)",
"accent": "hsl(280, 50%, 50%)",
"accentForeground": "hsl(0, 0%, 100%)",
"destructive": "hsl(0, 80%, 50%)",
"destructiveForeground": "hsl(0, 0%, 100%)",
"border": "hsl(260, 15%, 85%)",
"input": "hsl(260, 15%, 85%)",
"sidebar": "hsl(0, 0%, 100%)",
"sidebarForeground": "hsl(260, 30%, 12%)",
"sidebarPrimary": "hsl(280, 50%, 50%)",
"sidebarPrimaryForeground": "hsl(0, 0%, 100%)",
"sidebarAccent": "hsl(280, 50%, 50%)",
"sidebarAccentForeground": "hsl(0, 0%, 100%)",
"sidebarBorder": "hsl(260, 15%, 85%)",
"sidebarRing": "hsl(280, 50%, 50%)"
},
"textColors": {
"heading": "linear-gradient(135deg, #7c3aed, #a855f7)",
"body": "#1a0a2e",
"muted": "#6b5b7a",
"link": "#7c3aed",
"linkHover": "#a855f7",
"code": "#7c3aed",
"placeholder": "#a8a0b0"
},
"backgroundImage": null,
"backgroundGradients": [
"rgba(0, 200, 80, 0.06) at 15% 25%",
"rgba(100, 60, 200, 0.04) at 80% 70%",
"rgba(0, 200, 80, 0.05) at 60% 20%"
]
}
},
"borderRadius": "0.5rem",
"typography": {
"fontFamily": "Inter, sans-serif",
"headingFont": "Inter, sans-serif"
},
"keyColors": {
"primary": "#a855f7 (dark) / #7c3aed (light)",
"background": "#0d0820 (dark) / #fafafa (light)",
"card": "#16102e (dark) / #ffffff (light)",
"sidebar": "#0d0820 (dark) / #ffffff (light)",
"border": "#2a2240 (dark) / #d4d0dc (light)",
"text": "#e8e8ef (dark) / #1a0a2e (light)",
"mutedText": "#8a7faa (dark) / #6b5b7a (light)",
"headingGradient": "#00E060 → #2dd4bf (dark) / #7c3aed → #a855f7 (light)"
}
}
+313
View File
@@ -0,0 +1,313 @@
.dark.theme-cyber {
--background: 240 30% 4%;
--foreground: 180 50% 95%;
--card: 240 25% 8%;
--card-foreground: 180 50% 95%;
--popover: 240 25% 8%;
--popover-foreground: 180 50% 95%;
--primary: 280 80% 55%;
--primary-foreground: 0 0% 100%;
--secondary: 280 80% 55%;
--secondary-foreground: 0 0% 100%;
--muted: 240 15% 15%;
--muted-foreground: 180 10% 55%;
--accent: 280 80% 55%;
--accent-foreground: 0 0% 100%;
--destructive: 0 70% 50%;
--destructive-foreground: 210 40% 98%;
--border: 180 30% 20%;
--input: 180 30% 20%;
--ring: 280 80% 55%;
--radius: 0.5rem;
--sidebar: 240 30% 4%;
--sidebar-foreground: 180 50% 95%;
--sidebar-primary: 280 80% 55%;
--sidebar-primary-foreground: 0 0% 0%;
--sidebar-accent: 280 80% 55%;
--sidebar-accent-foreground: 0 0% 100%;
--sidebar-border: 180 30% 15%;
--sidebar-ring: 280 80% 55%;
}
.light.theme-cyber {
--background: 180 20% 96%;
--foreground: 240 40% 10%;
--card: 0 0% 100%;
--card-foreground: 240 40% 10%;
--popover: 0 0% 100%;
--popover-foreground: 240 40% 10%;
--primary: 280 60% 50%;
--primary-foreground: 0 0% 100%;
--secondary: 280 60% 50%;
--secondary-foreground: 0 0% 100%;
--muted: 180 15% 88%;
--muted-foreground: 240 10% 45%;
--accent: 280 60% 50%;
--accent-foreground: 0 0% 100%;
--destructive: 0 80% 50%;
--destructive-foreground: 0 0% 100%;
--border: 180 15% 82%;
--input: 180 15% 82%;
--ring: 280 60% 50%;
--radius: 0.5rem;
--sidebar: 0 0% 100%;
--sidebar-foreground: 240 40% 10%;
--sidebar-primary: 280 60% 50%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 280 60% 50%;
--sidebar-accent-foreground: 0 0% 100%;
--sidebar-border: 180 15% 82%;
--sidebar-ring: 280 60% 50%;
}
.dark.theme-cyber body {
background: transparent
linear-gradient(135deg, rgba(0, 10, 20, 0.95), rgba(10, 0, 20, 0.9));
position: relative;
}
.dark.theme-cyber body > div {
background: transparent !important;
}
.dark.theme-cyber body::before {
content: "";
position: fixed;
inset: 0;
z-index: -2;
pointer-events: none;
background-image:
linear-gradient(0deg, rgba(0, 255, 255, 0.03) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 255, 255, 0.03) 1px, transparent 1px);
background-size: 40px 40px;
}
.dark.theme-cyber body::after {
content: "";
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
background:
radial-gradient(ellipse 100% 50% at 10% 20%, rgba(0, 255, 255, 0.08) 0%, transparent 60%),
radial-gradient(ellipse 80% 50% at 90% 80%, rgba(255, 0, 255, 0.08) 0%, transparent 60%),
radial-gradient(ellipse 60% 40% at 50% 50%, rgba(0, 255, 255, 0.04) 0%, transparent 50%),
radial-gradient(20px 20px at 15% 15%, rgba(0, 255, 255, 0.15) 0%, transparent 100%),
radial-gradient(15px 15px at 85% 25%, rgba(255, 0, 255, 0.12) 0%, transparent 100%),
radial-gradient(12px 12px at 45% 75%, rgba(0, 255, 255, 0.1) 0%, transparent 100%),
radial-gradient(10px 10px at 70% 45%, rgba(255, 0, 255, 0.08) 0%, transparent 100%),
radial-gradient(8px 8px at 30% 60%, rgba(0, 255, 255, 0.12) 0%, transparent 100%),
radial-gradient(11px 11px at 60% 10%, rgba(255, 0, 255, 0.1) 0%, transparent 100%),
radial-gradient(9px 9px at 90% 65%, rgba(0, 255, 255, 0.08) 0%, transparent 100%),
radial-gradient(13px 13px at 5% 85%, rgba(255, 0, 255, 0.1) 0%, transparent 100%),
radial-gradient(7px 7px at 55% 55%, rgba(0, 255, 255, 0.06) 0%, transparent 100%);
animation: neon-drift 20s ease-in-out infinite alternate;
}
.light.theme-cyber body::before {
content: "";
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
background:
radial-gradient(ellipse 80% 50% at 15% 20%, rgba(0, 200, 200, 0.05) 0%, transparent 60%),
radial-gradient(ellipse 80% 50% at 85% 80%, rgba(200, 0, 200, 0.04) 0%, transparent 60%),
repeating-linear-gradient(0deg, transparent, transparent 40px, rgba(0, 200, 200, 0.02) 40px, rgba(0, 200, 200, 0.02) 41px),
repeating-linear-gradient(90deg, transparent, transparent 40px, rgba(0, 200, 200, 0.02) 40px, rgba(0, 200, 200, 0.02) 41px);
}
@keyframes neon-drift {
0% { background-position: 0% 0%; opacity: 0.6; }
50% { background-position: 100% 100%; opacity: 1; }
100% { background-position: 0% 100%; opacity: 0.6; }
}
.dark.theme-cyber .text-glow {
text-shadow: 0 0 10px hsl(180, 100%, 50%), 0 0 30px hsl(180, 100%, 50%), 0 0 60px rgba(0, 255, 255, 0.5);
}
.light.theme-cyber .text-glow {
text-shadow: 0 0 8px hsl(180, 100%, 40%), 0 0 20px hsl(180, 100%, 40%), 0 0 40px rgba(0, 200, 200, 0.3);
}
.dark.theme-cyber h1, .dark.theme-cyber h2, .dark.theme-cyber h3 {
background: linear-gradient(135deg, hsl(180, 100%, 50%), hsl(280, 80%, 55%));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.light.theme-cyber h1, .light.theme-cyber h2, .light.theme-cyber h3 {
background: linear-gradient(135deg, hsl(180, 100%, 35%), hsl(280, 60%, 45%));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.dark.theme-cyber a {
color: hsl(180, 100%, 55%);
text-decoration: none;
transition: color 0.2s;
}
.light.theme-cyber a {
color: hsl(180, 100%, 35%);
text-decoration: none;
transition: color 0.2s;
}
.dark.theme-cyber a:hover {
color: hsl(280, 80%, 60%);
text-shadow: 0 0 8px rgba(255, 0, 255, 0.4);
}
.light.theme-cyber a:hover {
color: hsl(280, 60%, 50%);
}
.dark.theme-cyber blockquote {
border-left: 3px solid hsl(280, 80%, 55%);
color: hsl(180, 20%, 70%);
font-style: italic;
}
.light.theme-cyber blockquote {
border-left: 3px solid hsl(280, 60%, 50%);
color: hsl(240, 10%, 45%);
font-style: italic;
}
.dark.theme-cyber code {
color: hsl(180, 100%, 55%);
background: rgba(0, 255, 255, 0.08);
border: 1px solid rgba(0, 255, 255, 0.15);
}
.light.theme-cyber code {
color: hsl(280, 60%, 45%);
background: rgba(0, 200, 200, 0.05);
border: 1px solid rgba(0, 200, 200, 0.1);
}
.dark.theme-cyber pre {
background: rgba(0, 5, 15, 0.9);
border: 1px solid rgba(0, 255, 255, 0.1);
}
.light.theme-cyber pre {
background: rgba(0, 200, 200, 0.03);
border: 1px solid rgba(0, 200, 200, 0.08);
}
.dark.theme-cyber hr {
border-color: rgba(0, 255, 255, 0.15);
}
.light.theme-cyber hr {
border-color: rgba(0, 200, 200, 0.1);
}
.dark.theme-cyber table th {
color: hsl(180, 100%, 55%);
}
.light.theme-cyber table th {
color: hsl(180, 100%, 35%);
}
.dark.theme-cyber table td {
border-color: rgba(0, 255, 255, 0.12);
}
.light.theme-cyber table td {
border-color: rgba(0, 200, 200, 0.1);
}
.dark.theme-cyber ::selection {
background: rgba(0, 255, 255, 0.2);
color: hsl(0, 0%, 0%);
}
.light.theme-cyber ::selection {
background: rgba(0, 200, 200, 0.12);
color: hsl(0, 0%, 0%);
}
.dark.theme-cyber input::placeholder,
.dark.theme-cyber textarea::placeholder {
color: hsl(180, 20%, 40%);
}
.light.theme-cyber input::placeholder,
.light.theme-cyber textarea::placeholder {
color: hsl(240, 10%, 65%);
}
.dark.theme-cyber .page-header-title {
color: hsl(180, 100%, 55%);
}
.light.theme-cyber .page-header-title {
color: hsl(180, 100%, 35%);
}
.dark.theme-cyber .stat-card-value {
color: hsl(180, 100%, 55%);
}
.light.theme-cyber .stat-card-value {
color: hsl(180, 100%, 35%);
}
.dark.theme-cyber .badge {
color: hsl(180, 100%, 55%);
}
.light.theme-cyber .badge {
color: hsl(180, 100%, 35%);
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .h-1.w-full {
background: linear-gradient(to right, hsl(180, 100%, 50%), hsl(180, 100%, 70%), hsl(180, 100%, 50%)) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .h-1.w-full {
background: linear-gradient(to right, hsl(280, 80%, 55%), hsl(280, 80%, 70%), hsl(280, 80%, 55%)) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .rounded-xl.shrink-0 {
background: hsla(180, 100%, 50%, 0.1) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .rounded-xl.shrink-0 {
background: hsla(280, 80%, 55%, 0.1) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .rounded-xl.shrink-0 svg {
color: hsl(180, 100%, 50%) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .rounded-xl.shrink-0 svg {
color: hsl(280, 80%, 55%) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .absolute.bottom-0.h-1 {
background: linear-gradient(to right, transparent, hsla(180, 100%, 50%, 0.25), transparent) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .absolute.bottom-0.h-1 {
background: linear-gradient(to right, transparent, hsla(280, 80%, 55%, 0.25), transparent) !important;
}
.dark.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 .rounded-full.bg-gradient-to-r {
background: linear-gradient(to right, hsl(180, 100%, 50%), hsl(280, 80%, 55%)) !important;
}
.light.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .h-1.w-full {
background: linear-gradient(to right, hsl(180, 100%, 40%), hsl(180, 100%, 55%), hsl(180, 100%, 40%)) !important;
}
.light.theme-cyber .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .h-1.w-full {
background: linear-gradient(to right, hsl(280, 60%, 50%), hsl(280, 60%, 65%), hsl(280, 60%, 50%)) !important;
}
+69
View File
@@ -0,0 +1,69 @@
{
"name": "Cyberpunk",
"description": "Neon-cyberpunk theme with cyan grid, magenta accents, and futuristic glow",
"dark": {
"colors": {
"background": "240 30% 4%",
"foreground": "180 50% 95%",
"primary": "180 100% 50%",
"secondary": "280 80% 55%",
"accent": "280 80% 55%",
"muted": "240 15% 15%",
"border": "180 30% 20%",
"ring": "180 100% 50%",
"card": "240 25% 8%",
"popover": "240 25% 8%"
},
"textColors": {
"heading": "linear-gradient(135deg, hsl(180,100%,50%), hsl(280,80%,55%))",
"link": "hsl(180, 100%, 55%)",
"link-hover": "hsl(280, 80%, 60%)",
"code": "hsl(180, 100%, 55%)",
"blockquote": "hsl(180, 20%, 70%)",
"table-header": "hsl(180, 100%, 55%)",
"stat-card-value": "hsl(180, 100%, 55%)",
"badge": "hsl(180, 100%, 55%)",
"page-header-title": "hsl(180, 100%, 55%)",
"text-glow": "0 0 10px hsl(180,100%,50%), 0 0 30px hsl(180,100%,50%), 0 0 60px rgba(0,255,255,0.5)"
},
"backgrounds": {
"body": "Deep navy-black with cyan grid lines, cyan and magenta neon glow gradients, and glowing dot particles",
"grid-color": "rgba(0, 255, 255, 0.03)",
"grid-size": "40px",
"glow-colors": ["rgba(0, 255, 255, 0.08)", "rgba(255, 0, 255, 0.08)"]
},
"effects": {
"body-background-animation": "neon-drift 20s ease-in-out infinite alternate"
}
},
"light": {
"colors": {
"background": "180 20% 96%",
"foreground": "240 40% 10%",
"primary": "180 100% 40%",
"secondary": "280 60% 50%",
"accent": "280 60% 50%",
"muted": "180 15% 88%",
"border": "180 15% 82%",
"ring": "180 100% 40%",
"card": "0 0% 100%",
"popover": "0 0% 100%"
},
"textColors": {
"heading": "linear-gradient(135deg, hsl(180,100%,35%), hsl(280,60%,45%))",
"link": "hsl(180, 100%, 35%)",
"link-hover": "hsl(280, 60%, 50%)",
"code": "hsl(280, 60%, 45%)",
"blockquote": "hsl(240, 10%, 45%)",
"table-header": "hsl(180, 100%, 35%)",
"stat-card-value": "hsl(180, 100%, 35%)",
"badge": "hsl(180, 100%, 35%)",
"page-header-title": "hsl(180, 100%, 35%)",
"text-glow": "0 0 8px hsl(180,100%,40%), 0 0 20px hsl(180,100%,40%), 0 0 40px rgba(0,200,200,0.3)"
},
"backgrounds": {
"body": "Light with subtle cyan and magenta gradient washes and faint grid lines",
"glow-colors": ["rgba(0, 200, 200, 0.05)", "rgba(200, 0, 200, 0.04)"]
}
}
}
+118 -6
View File
@@ -1,9 +1,7 @@
/* ============================================================================
Spidey Theme — Baseline Design Tokens
This is the current website appearance captured as a reusable CSS theme.
============================================================================ */
@import url("./cosmic-theme.css");
@import url("./cyber-theme.css");
.theme-spidey {
.dark.theme-spidey {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
@@ -34,7 +32,38 @@
--sidebar-ring: 0 100% 53%;
}
.theme-spidey body::before {
.light.theme-spidey {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 0 100% 45%;
--primary-foreground: 0 0% 100%;
--secondary: 210 40% 96%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 0 100% 45%;
--radius: 0.5rem;
--sidebar: 0 0% 100%;
--sidebar-foreground: 222.2 84% 4.9%;
--sidebar-primary: 0 100% 45%;
--sidebar-primary-foreground: 0 0% 100%;
--sidebar-accent: 210 40% 96%;
--sidebar-accent-foreground: 222.2 47.4% 11.2%;
--sidebar-border: 214.3 31.8% 91.4%;
--sidebar-ring: 0 100% 45%;
}
.dark.theme-spidey body::before {
content: "";
position: fixed;
inset: 0;
@@ -67,3 +96,86 @@
background-size: 200% 200%;
animation: drift 60s linear infinite;
}
.light.theme-spidey body::before {
content: "";
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
background-image:
repeating-conic-gradient(
from 10deg,
transparent 0deg 10deg,
rgba(220, 38, 38, 0.03) 10deg 12deg
),
repeating-radial-gradient(
circle at 50% 50%,
transparent 0,
transparent 30px,
rgba(37, 99, 235, 0.02) 30px,
transparent 32px
),
radial-gradient(1.5px 1.5px at 10% 20%, rgba(220,38,38,0.2) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 30% 80%, rgba(37,99,235,0.2) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 50% 30%, rgba(220,38,38,0.15) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 70% 60%, rgba(37,99,235,0.15) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 85% 15%, rgba(220,38,38,0.2) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 20% 50%, rgba(37,99,235,0.15) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 65% 85%, rgba(220,38,38,0.15) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 40% 10%, rgba(37,99,235,0.2) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 90% 75%, rgba(220,38,38,0.15) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 5% 60%, rgba(37,99,235,0.2) 0%, transparent 100%),
radial-gradient(1.5px 1.5px at 55% 55%, rgba(220,38,38,0.1) 0%, transparent 100%);
background-size: 200% 200%;
animation: drift 60s linear infinite;
}
@keyframes drift {
0% { background-position: 0% 0%; }
100% { background-position: 100% 100%; }
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .h-1.w-full {
background: linear-gradient(to right, hsl(0, 100%, 53%), hsl(0, 100%, 65%), hsl(0, 100%, 53%)) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .h-1.w-full {
background: linear-gradient(to right, hsl(217, 91%, 60%), hsl(217, 91%, 70%), hsl(217, 91%, 60%)) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .rounded-xl.shrink-0 {
background: hsla(0, 100%, 53%, 0.1) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .rounded-xl.shrink-0 {
background: hsla(217, 91%, 60%, 0.1) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .rounded-xl.shrink-0 svg {
color: hsl(0, 100%, 53%) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .rounded-xl.shrink-0 svg {
color: hsl(217, 91%, 60%) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .absolute.bottom-0.h-1 {
background: linear-gradient(to right, transparent, hsla(0, 100%, 53%, 0.25), transparent) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .absolute.bottom-0.h-1 {
background: linear-gradient(to right, transparent, hsla(217, 91%, 60%, 0.25), transparent) !important;
}
.dark.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 .rounded-full.bg-gradient-to-r {
background: linear-gradient(to right, hsl(0, 100%, 53%), hsl(217, 91%, 60%)) !important;
}
.light.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(odd) .group .h-1.w-full {
background: linear-gradient(to right, hsl(0, 100%, 45%), hsl(0, 100%, 55%), hsl(0, 100%, 45%)) !important;
}
.light.theme-spidey .sm\:grid-cols-2.lg\:grid-cols-3.gap-4.mt-4 > .relative:nth-child(even) .group .h-1.w-full {
background: linear-gradient(to right, hsl(217, 91%, 50%), hsl(217, 91%, 60%), hsl(217, 91%, 50%)) !important;
}
+43 -8
View File
@@ -2,10 +2,12 @@
"theme": {
"id": "spidey",
"name": "Spidey",
"description": "Current website appearance — dark theme with red accents",
"type": "dark",
"description": "Dark mode with red accents and web patterns; light mode with clean red-blue accents",
"type": "dual",
"default": true
},
"modes": {
"dark": {
"colors": {
"background": "hsl(222.2, 84%, 4.9%)",
"foreground": "hsl(210, 40%, 98%)",
@@ -34,6 +36,39 @@
"sidebarAccentForeground": "hsl(210, 40%, 98%)",
"sidebarBorder": "hsl(217.2, 32.6%, 17.5%)",
"sidebarRing": "hsl(0, 100%, 53%)"
}
},
"light": {
"colors": {
"background": "hsl(0, 0%, 100%)",
"foreground": "hsl(222.2, 84%, 4.9%)",
"card": "hsl(0, 0%, 100%)",
"cardForeground": "hsl(222.2, 84%, 4.9%)",
"popover": "hsl(0, 0%, 100%)",
"popoverForeground": "hsl(222.2, 84%, 4.9%)",
"primary": "hsl(0, 100%, 45%)",
"primaryForeground": "hsl(0, 0%, 100%)",
"secondary": "hsl(210, 40%, 96%)",
"secondaryForeground": "hsl(222.2, 47.4%, 11.2%)",
"muted": "hsl(210, 40%, 96%)",
"mutedForeground": "hsl(215.4, 16.3%, 46.9%)",
"accent": "hsl(210, 40%, 96%)",
"accentForeground": "hsl(222.2, 47.4%, 11.2%)",
"destructive": "hsl(0, 84.2%, 60.2%)",
"destructiveForeground": "hsl(210, 40%, 98%)",
"border": "hsl(214.3, 31.8%, 91.4%)",
"input": "hsl(214.3, 31.8%, 91.4%)",
"ring": "hsl(0, 100%, 45%)",
"sidebar": "hsl(0, 0%, 100%)",
"sidebarForeground": "hsl(222.2, 84%, 4.9%)",
"sidebarPrimary": "hsl(0, 100%, 45%)",
"sidebarPrimaryForeground": "hsl(0, 0%, 100%)",
"sidebarAccent": "hsl(210, 40%, 96%)",
"sidebarAccentForeground": "hsl(222.2, 47.4%, 11.2%)",
"sidebarBorder": "hsl(214.3, 31.8%, 91.4%)",
"sidebarRing": "hsl(0, 100%, 45%)"
}
}
},
"borderRadius": "0.5rem",
"typography": {
@@ -42,11 +77,11 @@
},
"keyColors": {
"primary": "#FF0000",
"background": "#0a0a0f",
"card": "#141414",
"sidebar": "#0a0a0f",
"border": "#1a1a24",
"text": "#e8e8ef",
"mutedText": "#888888"
"background": "#0a0a0f (dark) / #ffffff (light)",
"card": "#141414 (dark) / #ffffff (light)",
"sidebar": "#0a0a0f (dark) / #ffffff (light)",
"border": "#1a1a24 (dark) / #e2e4ea (light)",
"text": "#e8e8ef (dark) / #0a0a1a (light)",
"mutedText": "#888888 (dark) / #6b7280 (light)"
}
}
+4 -1
View File
@@ -24,8 +24,10 @@ import {
SelectValue,
} from "@/components/ui/select"
import { DashboardStats } from "@/types"
import { useWebsiteTheme } from "@/providers/website-theme-provider"
export default function DashboardPage() {
const { websiteTheme } = useWebsiteTheme()
const [period, setPeriod] = useState("6months")
const [stats, setStats] = useState<DashboardStats | null>(null)
const pollingRef = useRef<NodeJS.Timeout | null>(null)
@@ -104,12 +106,13 @@ export default function DashboardPage() {
<RecentLeadsTable leads={stats?.recentLeads ?? []} />
</div>
{/* Daily Bugle watermark */}
{websiteTheme === "spidey" && (
<div className="absolute top-12 right-4 pointer-events-none select-none z-0 opacity-[0.09] dark:opacity-[0.15]">
<span className="text-[96px] font-['Bangers',cursive] leading-none text-[#CC0000] dark:text-[#FF1111] tracking-wider">
DAILY BUGLE
</span>
</div>
)}
</div>
)
}
+52 -5
View File
@@ -5,12 +5,14 @@ import { usePathname } from "next/navigation"
import { motion, AnimatePresence } from "framer-motion"
import { Sidebar } from "./sidebar"
import { Topbar } from "./topbar"
import { useWebsiteTheme } from "@/providers/website-theme-provider"
interface AppShellProps {
children: React.ReactNode
}
export function AppShell({ children }: AppShellProps) {
const { websiteTheme } = useWebsiteTheme()
const [sidebarCollapsed, setSidebarCollapsed] = useState(false)
const [mobileOpen, setMobileOpen] = useState(false)
const pathname = usePathname()
@@ -34,16 +36,16 @@ export function AppShell({ children }: AppShellProps) {
return (
<div className="min-h-screen bg-[#F8F8F8] dark:bg-[#0A0A0A] relative overflow-hidden"
style={{
style={websiteTheme === "spidey" ? {
backgroundImage: "radial-gradient(circle, #CC000010 1px, transparent 1px), radial-gradient(circle, #0033CC06 1px, transparent 1px)",
backgroundSize: "28px 28px, 14px 14px",
backgroundPosition: "0 0, 7px 7px",
}}
} : {}}
>
{/* Spider-Man top gradient bar */}
{/* Spider-Man decorations — Spidey theme only */}
{websiteTheme === "spidey" && (
<>
<div className="fixed top-0 left-0 right-0 h-[3px] w-full bg-gradient-to-r from-[#CC0000] via-[#FFFFFF] to-[#0033CC] dark:from-[#FF1111] dark:via-[#FFFFFF] dark:to-[#1144FF] z-50" />
{/* Corner spider webs */}
<div className="hidden lg:block fixed top-0 left-0 pointer-events-none z-0 opacity-[0.15] dark:opacity-[0.25]">
<svg width="180" height="180" viewBox="0 0 180 180" fill="none" xmlns="http://www.w3.org/2000/svg">
<line x1="0" y1="0" x2="180" y2="0" stroke="#CC0000" strokeWidth="0.8"/>
@@ -78,6 +80,51 @@ export function AppShell({ children }: AppShellProps) {
<path d="M0,180 Q180,180 180,0" stroke="#CC0000" strokeWidth="0.8" fill="none"/>
</svg>
</div>
</>
)}
{/* Cosmic decorations */}
{websiteTheme === "cosmic" && (
<>
<div className="fixed top-0 left-0 right-0 h-[2px] w-full bg-gradient-to-r from-transparent via-[#00CCB3] to-transparent dark:via-[#00CCB3] z-50 opacity-60" />
<div className="hidden lg:block fixed top-0 left-0 pointer-events-none z-0 opacity-[0.12]">
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="40" cy="30" r="2" fill="#00CCB3" opacity="0.8"/>
<circle cx="85" cy="65" r="1.5" fill="#a855f7" opacity="0.6"/>
<circle cx="25" cy="120" r="1" fill="#00CCB3" opacity="0.5"/>
<circle cx="60" cy="170" r="2.5" fill="#a855f7" opacity="0.7"/>
<circle cx="120" cy="25" r="1.5" fill="#00CCB3" opacity="0.6"/>
<circle cx="160" cy="80" r="1" fill="#a855f7" opacity="0.4"/>
<circle cx="140" cy="150" r="2" fill="#00CCB3" opacity="0.7"/>
<circle cx="180" cy="40" r="1.5" fill="#a855f7" opacity="0.5"/>
<circle cx="50" cy="90" r="3" fill="#00CCB3" opacity="0.08"/>
<circle cx="130" cy="110" r="4" fill="#a855f7" opacity="0.06"/>
<path d="M40,30 Q60,50 85,65" stroke="#00CCB3" strokeWidth="0.4" opacity="0.25"/>
<path d="M85,65 Q100,120 60,170" stroke="#a855f7" strokeWidth="0.4" opacity="0.2"/>
<path d="M25,120 Q80,140 140,150" stroke="#00CCB3" strokeWidth="0.4" opacity="0.2"/>
<path d="M120,25 Q150,50 160,80" stroke="#a855f7" strokeWidth="0.3" opacity="0.2"/>
</svg>
</div>
<div className="hidden lg:block fixed top-0 right-0 pointer-events-none z-0 opacity-[0.12]">
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ transform: "scaleX(-1)" }}>
<circle cx="40" cy="30" r="2" fill="#a855f7" opacity="0.8"/>
<circle cx="85" cy="65" r="1.5" fill="#00CCB3" opacity="0.6"/>
<circle cx="25" cy="120" r="1" fill="#a855f7" opacity="0.5"/>
<circle cx="60" cy="170" r="2.5" fill="#00CCB3" opacity="0.7"/>
<circle cx="120" cy="25" r="1.5" fill="#a855f7" opacity="0.6"/>
<circle cx="160" cy="80" r="1" fill="#00CCB3" opacity="0.4"/>
<circle cx="140" cy="150" r="2" fill="#a855f7" opacity="0.7"/>
<circle cx="180" cy="40" r="1.5" fill="#00CCB3" opacity="0.5"/>
<circle cx="50" cy="90" r="3" fill="#a855f7" opacity="0.08"/>
<circle cx="130" cy="110" r="4" fill="#00CCB3" opacity="0.06"/>
<path d="M40,30 Q60,50 85,65" stroke="#a855f7" strokeWidth="0.4" opacity="0.25"/>
<path d="M85,65 Q100,120 60,170" stroke="#00CCB3" strokeWidth="0.4" opacity="0.2"/>
<path d="M25,120 Q80,140 140,150" stroke="#a855f7" strokeWidth="0.4" opacity="0.2"/>
<path d="M120,25 Q150,50 160,80" stroke="#00CCB3" strokeWidth="0.3" opacity="0.2"/>
</svg>
</div>
</>
)}
<Sidebar
collapsed={sidebarCollapsed}
+1 -1
View File
@@ -2,7 +2,7 @@
import { useState, useEffect } from "react"
const RAM_LIMIT_MB = 8192
const RAM_LIMIT_MB = 16000
const CPU_LIMIT_PCT = 400
interface SystemMonitorProps {
@@ -31,7 +31,10 @@ const themeOptions = [
]
const backgroundOptions = [
{ value: "default", label: "None", icon: Shield, color: "bg-gray-400", ring: "ring-gray-400", desc: "No background theme" },
{ value: "spidey", label: "Spidey", icon: Shield, color: "bg-red-600", ring: "ring-red-600", desc: "Dark theme with red accents" },
{ value: "cosmic", label: "Cosmic", icon: Shield, color: "bg-gradient-to-r from-purple-500 to-green-500", ring: "ring-purple-500", desc: "Deep space with purple nebula and cyan accents" },
{ value: "cyber", label: "Cyber", icon: Shield, color: "bg-gradient-to-r from-cyan-400 to-fuchsia-500", ring: "ring-cyan-400", desc: "Neon grid with magenta and cyan glow" },
]
function getStoredColorTheme(): string {
+5 -3
View File
@@ -6,6 +6,8 @@ const WEBSITE_THEME_KEY = "crm-website-theme"
const themeClasses: Record<string, string> = {
spidey: "theme-spidey",
cosmic: "theme-cosmic",
cyber: "theme-cyber",
}
interface WebsiteThemeContextValue {
@@ -38,7 +40,7 @@ function storeTheme(theme: string) {
}
export function WebsiteThemeProvider({ children }: { children: ReactNode }) {
const [websiteTheme, setWebsiteThemeState] = useState<string>("spidey")
const [websiteTheme, setWebsiteThemeState] = useState<string>("default")
const [loading, setLoading] = useState(true)
useEffect(() => {
@@ -52,13 +54,13 @@ export function WebsiteThemeProvider({ children }: { children: ReactNode }) {
fetch("/api/settings/website-theme")
.then((res) => (res.ok ? res.json() : null))
.then((data) => {
const theme = data?.websiteTheme || "spidey"
const theme = data?.websiteTheme || "default"
setWebsiteThemeState(theme)
storeTheme(theme)
applyWebsiteTheme(theme)
})
.catch(() => {
applyWebsiteTheme("spidey")
applyWebsiteTheme("default")
})
.finally(() => setLoading(false))
}, [])