39246-vm/frontend/app/globals.css
2026-03-20 05:56:48 +00:00

133 lines
3.9 KiB
CSS

@import "tailwindcss";
@theme {
--color-background: oklch(0.145 0 0);
--color-foreground: oklch(0.985 0 0);
--color-card: oklch(0.145 0 0);
--color-card-foreground: oklch(0.985 0 0);
--color-popover: oklch(0.145 0 0);
--color-popover-foreground: oklch(0.985 0 0);
--color-primary: oklch(0.835 0.28 152); /* Neon green #00ff88 equivalent */
--color-primary-foreground: oklch(0.145 0 0);
--color-secondary: oklch(0.269 0 0);
--color-secondary-foreground: oklch(0.985 0 0);
--color-muted: oklch(0.269 0 0);
--color-muted-foreground: oklch(0.708 0 0);
--color-accent: oklch(0.85 0.17 95); /* Neon gold #fbbf24 */
--color-accent-foreground: oklch(0.145 0 0);
--color-destructive: oklch(0.637 0.237 25.331); /* Neon red #ef4444 */
--color-destructive-foreground: oklch(0.985 0 0);
--color-border: oklch(0.269 0 0);
--color-input: oklch(0.269 0 0);
--color-ring: oklch(0.835 0.28 152);
--radius: 0.5rem;
}
@layer base {
:root {
--background: 222 47% 6%;
--foreground: 210 40% 98%;
--border: 217 32% 17%;
}
body {
background-color: #0a0e17;
color: #f8fafc;
border-color: #1e293b;
background-image:
radial-gradient(circle at 15% 50%, rgba(0, 255, 136, 0.04) 0%, transparent 25%),
radial-gradient(circle at 85% 30%, rgba(251, 191, 36, 0.04) 0%, transparent 25%);
}
}
/* Custom Cyberpunk Styles */
.neon-text-primary {
text-shadow: 0 0 10px rgba(0, 255, 136, 0.5), 0 0 20px rgba(0, 255, 136, 0.3);
}
.neon-text-accent {
text-shadow: 0 0 10px rgba(251, 191, 36, 0.5), 0 0 20px rgba(251, 191, 36, 0.3);
}
.neon-box-primary {
box-shadow: 0 0 15px rgba(0, 255, 136, 0.2), inset 0 0 10px rgba(0, 255, 136, 0.1);
border: 1px solid rgba(0, 255, 136, 0.4);
}
.neon-box-accent {
box-shadow: 0 0 15px rgba(251, 191, 36, 0.2), inset 0 0 10px rgba(251, 191, 36, 0.1);
border: 1px solid rgba(251, 191, 36, 0.4);
}
.cyber-grid {
background-size: 40px 40px;
background-image:
linear-gradient(to right, rgba(255, 255, 255, 0.03) 1px, transparent 1px),
linear-gradient(to bottom, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
mask-image: linear-gradient(to bottom, black 40%, transparent 100%);
-webkit-mask-image: linear-gradient(to bottom, black 40%, transparent 100%);
}
.glitch-wrapper {
position: relative;
}
.glitch-text::before,
.glitch-text::after {
content: attr(data-text);
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0.8;
}
.glitch-text::before {
color: #0ff;
z-index: -1;
animation: glitch-anim-1 2s infinite linear alternate-reverse;
}
.glitch-text::after {
color: #f0f;
z-index: -2;
animation: glitch-anim-2 3s infinite linear alternate-reverse;
}
@keyframes glitch-anim-1 {
0% { clip-path: inset(20% 0 80% 0); transform: translate(-2px, 1px); }
20% { clip-path: inset(60% 0 10% 0); transform: translate(2px, -1px); }
40% { clip-path: inset(40% 0 50% 0); transform: translate(-2px, 2px); }
60% { clip-path: inset(80% 0 5% 0); transform: translate(2px, -2px); }
80% { clip-path: inset(10% 0 70% 0); transform: translate(-1px, 1px); }
100% { clip-path: inset(30% 0 50% 0); transform: translate(1px, -1px); }
}
@keyframes glitch-anim-2 {
0% { clip-path: inset(10% 0 60% 0); transform: translate(2px, -1px); }
20% { clip-path: inset(30% 0 20% 0); transform: translate(-2px, 1px); }
40% { clip-path: inset(70% 0 10% 0); transform: translate(2px, -2px); }
60% { clip-path: inset(20% 0 50% 0); transform: translate(-2px, 2px); }
80% { clip-path: inset(50% 0 30% 0); transform: translate(1px, -1px); }
100% { clip-path: inset(5% 0 80% 0); transform: translate(-1px, 1px); }
}
/* CRT Scanline effect */
.scanlines::before {
content: " ";
display: block;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: linear-gradient(
to bottom,
rgba(18, 16, 16, 0) 50%,
rgba(0, 0, 0, 0.25) 50%
);
background-size: 100% 4px;
z-index: 50;
pointer-events: none;
}