- index.html: structure linking external CSS and JS - style.css: futuristic dark theme with glitch animation and scanlines - main.js: canvas particle field, typewriter loop, live uptime counter Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
126 lines
2.4 KiB
CSS
126 lines
2.4 KiB
CSS
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
background: #0a0a0f;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
min-height: 100vh;
|
|
font-family: 'Courier New', monospace;
|
|
overflow: hidden;
|
|
}
|
|
|
|
canvas {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
z-index: 0;
|
|
}
|
|
|
|
.container {
|
|
position: relative;
|
|
z-index: 1;
|
|
text-align: center;
|
|
}
|
|
|
|
.glitch {
|
|
font-size: clamp(3rem, 10vw, 8rem);
|
|
font-weight: 900;
|
|
color: #fff;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.1em;
|
|
position: relative;
|
|
animation: glitch-main 3s infinite;
|
|
}
|
|
|
|
.glitch::before,
|
|
.glitch::after {
|
|
content: attr(data-text);
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.glitch::before {
|
|
color: #0ff;
|
|
animation: glitch-before 3s infinite;
|
|
clip-path: polygon(0 30%, 100% 30%, 100% 50%, 0 50%);
|
|
}
|
|
|
|
.glitch::after {
|
|
color: #f0f;
|
|
animation: glitch-after 3s infinite;
|
|
clip-path: polygon(0 60%, 100% 60%, 100% 80%, 0 80%);
|
|
}
|
|
|
|
@keyframes glitch-main {
|
|
0%, 90%, 100% { transform: translate(0); }
|
|
92% { transform: translate(-2px, 1px); }
|
|
94% { transform: translate(2px, -1px); }
|
|
96% { transform: translate(-1px, 2px); }
|
|
}
|
|
|
|
@keyframes glitch-before {
|
|
0%, 90%, 100% { transform: translate(0); opacity: 0; }
|
|
91% { transform: translate(-4px, 0); opacity: 0.8; }
|
|
93% { transform: translate(4px, 0); opacity: 0.8; }
|
|
95% { opacity: 0; }
|
|
}
|
|
|
|
@keyframes glitch-after {
|
|
0%, 90%, 100% { transform: translate(0); opacity: 0; }
|
|
92% { transform: translate(4px, 0); opacity: 0.8; }
|
|
94% { transform: translate(-4px, 0); opacity: 0.8; }
|
|
96% { opacity: 0; }
|
|
}
|
|
|
|
.subtitle {
|
|
margin-top: 1rem;
|
|
font-size: clamp(0.8rem, 2vw, 1.2rem);
|
|
color: #0ff;
|
|
letter-spacing: 0.5em;
|
|
text-transform: uppercase;
|
|
opacity: 0;
|
|
animation: fade-in 1s ease forwards 0.5s;
|
|
}
|
|
|
|
.counter {
|
|
margin-top: 2rem;
|
|
font-size: 0.85rem;
|
|
color: #444;
|
|
letter-spacing: 0.3em;
|
|
animation: fade-in 1s ease forwards 1s;
|
|
opacity: 0;
|
|
}
|
|
|
|
#typed {
|
|
color: #0f0;
|
|
}
|
|
|
|
@keyframes fade-in {
|
|
to { opacity: 1; }
|
|
}
|
|
|
|
.scanline {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: repeating-linear-gradient(
|
|
to bottom,
|
|
transparent 0px,
|
|
transparent 3px,
|
|
rgba(0, 0, 0, 0.08) 3px,
|
|
rgba(0, 0, 0, 0.08) 4px
|
|
);
|
|
pointer-events: none;
|
|
z-index: 2;
|
|
}
|