251 lines
5.9 KiB
CSS
251 lines
5.9 KiB
CSS
@import "tailwindcss";
|
|
|
|
@theme {
|
|
--color-*: initial;
|
|
}
|
|
|
|
@variant dark (&:where(.dark, .dark *));
|
|
|
|
@layer base {
|
|
:root {
|
|
/* Light mode colors */
|
|
--bg-primary: 241 245 249;
|
|
--bg-secondary: 226 232 240;
|
|
--bg-tertiary: 203 213 225;
|
|
--text-primary: 15 23 42;
|
|
--text-secondary: 51 65 85;
|
|
--text-muted: 100 116 139;
|
|
--border-primary: 203 213 225;
|
|
--border-subtle: 226 232 240;
|
|
}
|
|
|
|
.dark {
|
|
/* Dark mode colors - INDUSTRIAL */
|
|
--bg-primary: 24 24 27;
|
|
--bg-secondary: 15 23 42;
|
|
--bg-tertiary: 30 41 59;
|
|
--text-primary: 241 245 249;
|
|
--text-secondary: 203 213 225;
|
|
--text-muted: 100 116 139;
|
|
--border-primary: 71 85 105;
|
|
--border-subtle: 30 41 59;
|
|
}
|
|
}
|
|
|
|
@layer utilities {
|
|
.scrollbar-hide {
|
|
-ms-overflow-style: none;
|
|
scrollbar-width: none;
|
|
}
|
|
.scrollbar-hide::-webkit-scrollbar {
|
|
display: none;
|
|
}
|
|
|
|
/* Industrial/Terminal aesthetic utilities */
|
|
.grid-bg {
|
|
background-image:
|
|
linear-gradient(rgba(100, 116, 139, 0.1) 1px, transparent 1px),
|
|
linear-gradient(90deg, rgba(100, 116, 139, 0.1) 1px, transparent 1px);
|
|
background-size: 20px 20px;
|
|
}
|
|
|
|
/* Noise texture */
|
|
.noise-bg {
|
|
background-image: url('/noise.svg');
|
|
opacity: 0.03;
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* Scanline effect */
|
|
.scanline {
|
|
background: linear-gradient(
|
|
0deg,
|
|
transparent 0%,
|
|
rgba(6, 182, 212, 0.1) 50%,
|
|
transparent 100%
|
|
);
|
|
background-size: 100% 3px;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.scanline::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: linear-gradient(
|
|
to bottom,
|
|
transparent 0%,
|
|
rgba(6, 182, 212, 0.05) 50%,
|
|
transparent 100%
|
|
);
|
|
animation: scanline 8s linear infinite;
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* CRT screen curvature effect */
|
|
.crt-effect {
|
|
animation: flicker 0.15s infinite;
|
|
}
|
|
|
|
/* Glitch text effect */
|
|
.glitch-text {
|
|
position: relative;
|
|
}
|
|
|
|
.glitch-text::before,
|
|
.glitch-text::after {
|
|
content: attr(data-text);
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
opacity: 0;
|
|
}
|
|
|
|
.glitch-text.active::before {
|
|
color: #06b6d4;
|
|
animation: glitch-1 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
clip-path: polygon(0 0, 100% 0, 100% 45%, 0 45%);
|
|
transform: translate(-2px, -2px);
|
|
opacity: 0.8;
|
|
}
|
|
|
|
.glitch-text.active::after {
|
|
color: #10b981;
|
|
animation: glitch-2 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
clip-path: polygon(0 55%, 100% 55%, 100% 100%, 0 100%);
|
|
transform: translate(2px, 2px);
|
|
opacity: 0.8;
|
|
}
|
|
|
|
@keyframes glitch-1 {
|
|
0%, 100% { clip-path: polygon(0 0, 100% 0, 100% 45%, 0 45%); transform: translate(0); }
|
|
20% { clip-path: polygon(0 15%, 100% 15%, 100% 65%, 0 65%); }
|
|
40% { clip-path: polygon(0 30%, 100% 30%, 100% 70%, 0 70%); }
|
|
60% { clip-path: polygon(0 5%, 100% 5%, 100% 60%, 0 60%); }
|
|
80% { clip-path: polygon(0 25%, 100% 25%, 100% 40%, 0 40%); }
|
|
}
|
|
|
|
@keyframes glitch-2 {
|
|
0%, 100% { clip-path: polygon(0 55%, 100% 55%, 100% 100%, 0 100%); transform: translate(0); }
|
|
20% { clip-path: polygon(0 70%, 100% 70%, 100% 95%, 0 95%); }
|
|
40% { clip-path: polygon(0 40%, 100% 40%, 100% 85%, 0 85%); }
|
|
60% { clip-path: polygon(0 60%, 100% 60%, 100% 100%, 0 100%); }
|
|
80% { clip-path: polygon(0 50%, 100% 50%, 100% 90%, 0 90%); }
|
|
}
|
|
|
|
/* Grayscale filter with instant toggle */
|
|
.grayscale {
|
|
filter: grayscale(100%);
|
|
}
|
|
|
|
.grayscale-0 {
|
|
filter: grayscale(0%);
|
|
}
|
|
|
|
/* Cyberpunk Glitch Effect for Button */
|
|
.glitch-btn {
|
|
position: relative;
|
|
animation: glitch 300ms cubic-bezier(.25, .46, .45, .94);
|
|
}
|
|
|
|
.glitch-layer {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
opacity: 0.8;
|
|
clip-path: polygon(0 0, 100% 0, 100% 45%, 0 45%);
|
|
}
|
|
|
|
.glitch-layer:first-of-type {
|
|
animation: glitch-1 300ms cubic-bezier(.25, .46, .45, .94);
|
|
color: rgb(6 182 212); /* cyan-500 */
|
|
transform: translate(-2px, 0);
|
|
clip-path: polygon(0 0, 100% 0, 100% 35%, 0 35%);
|
|
}
|
|
|
|
.glitch-layer:last-of-type {
|
|
animation: glitch-2 300ms cubic-bezier(.25, .46, .45, .94);
|
|
color: rgb(16 185 129); /* emerald-500 */
|
|
transform: translate(2px, 0);
|
|
clip-path: polygon(0 65%, 100% 65%, 100% 100%, 0 100%);
|
|
}
|
|
|
|
@keyframes glitch-1 {
|
|
0%, 100% {
|
|
transform: translate(0, 0);
|
|
clip-path: polygon(0 0, 100% 0, 100% 35%, 0 35%);
|
|
}
|
|
25% {
|
|
transform: translate(-3px, 2px);
|
|
clip-path: polygon(0 10%, 100% 10%, 100% 45%, 0 45%);
|
|
}
|
|
50% {
|
|
transform: translate(3px, -2px);
|
|
clip-path: polygon(0 20%, 100% 20%, 100% 55%, 0 55%);
|
|
}
|
|
75% {
|
|
transform: translate(-2px, -1px);
|
|
clip-path: polygon(0 5%, 100% 5%, 100% 40%, 0 40%);
|
|
}
|
|
}
|
|
|
|
@keyframes glitch-2 {
|
|
0%, 100% {
|
|
transform: translate(0, 0);
|
|
clip-path: polygon(0 65%, 100% 65%, 100% 100%, 0 100%);
|
|
}
|
|
25% {
|
|
transform: translate(3px, -2px);
|
|
clip-path: polygon(0 55%, 100% 55%, 100% 90%, 0 90%);
|
|
}
|
|
50% {
|
|
transform: translate(-3px, 2px);
|
|
clip-path: polygon(0 45%, 100% 45%, 100% 80%, 0 80%);
|
|
}
|
|
75% {
|
|
transform: translate(2px, 1px);
|
|
clip-path: polygon(0 60%, 100% 60%, 100% 95%, 0 95%);
|
|
}
|
|
}
|
|
|
|
/* Border Pulse Animation */
|
|
.border-pulse {
|
|
animation: pulse-border 2s ease-in-out infinite;
|
|
}
|
|
|
|
/* Screen Flicker Effect */
|
|
body.screen-flicker {
|
|
animation: flicker 150ms ease-in-out;
|
|
}
|
|
|
|
body.screen-flicker::before {
|
|
content: '';
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: rgba(6, 182, 212, 0.1);
|
|
pointer-events: none;
|
|
z-index: 9999;
|
|
animation: flicker 150ms ease-in-out;
|
|
}
|
|
|
|
/* CRT Noise Texture */
|
|
@supports (filter: url('#noise')) {
|
|
.noise-bg {
|
|
filter: url('#noise');
|
|
}
|
|
}
|
|
}
|