/* FONT & RESET */
@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;700&display=swap');

body {
    background-color: #050505;
    color: #00ff00;
    font-family: 'Fira Code', monospace;
    overflow-x: hidden;
    margin: 0;
}

/* BACKGROUND GRID ANIMATION (DNA Web3) */
.bg-grid {
    position: fixed;
    top: 0;
    left: 0;
    width: 200vw;
    height: 200vh;
    background-image: 
        linear-gradient(rgba(0, 255, 0, 0.1) 1px, transparent 1px),
        linear-gradient(90deg, rgba(0, 255, 0, 0.1) 1px, transparent 1px);
    background-size: 40px 40px;
    transform: perspective(500px) rotateX(60deg) translateY(-100px) translateZ(-200px);
    animation: grid-move 20s linear infinite;
    z-index: -1;
    pointer-events: none;
}

@keyframes grid-move {
    0% { transform: perspective(500px) rotateX(60deg) translateY(0) translateZ(-200px); }
    100% { transform: perspective(500px) rotateX(60deg) translateY(40px) translateZ(-200px); }
}

/* NEON UTILITIES */
.text-neon-green { color: #00ff00; text-shadow: 0 0 5px #00ff00; }
.text-neon-pink { color: #ff00ff; text-shadow: 0 0 5px #ff00ff; }
.border-neon-green { border: 1px solid #00ff00; box-shadow: 0 0 5px #00ff00, inset 0 0 5px #00ff00; }
.border-neon-pink { border: 1px solid #ff00ff; box-shadow: 0 0 5px #ff00ff, inset 0 0 5px #ff00ff; }

/* SCANNER LINE ANIMATION */
.scan-line {
    width: 100%;
    height: 2px;
    background: #00ff00;
    position: absolute;
    z-index: 10;
    animation: scan 3s linear infinite;
    opacity: 0.5;
}
@keyframes scan {
    0% { top: 0%; }
    100% { top: 100%; }
}

/* GAUGE NEEDLE */
.needle {
    transition: transform 1s cubic-bezier(0.4, 2, 0.55, 0.44); /* Bouncy effect */
    transform-origin: bottom center;
}

/* GLITCH EFFECT */
.glitch { position: relative; }
.glitch::before, .glitch::after {
    content: attr(data-text);
    position: absolute;
    top: 0; left: 0; width: 100%; height: 100%;
}
.glitch::before { left: 2px; text-shadow: -1px 0 #ff00ff; clip: rect(24px, 550px, 90px, 0); animation: glitch-anim 3s infinite linear alternate-reverse; }
.glitch::after { left: -2px; text-shadow: -1px 0 #00ff00; clip: rect(85px, 550px, 140px, 0); animation: glitch-anim 2s infinite linear alternate-reverse; }

@keyframes glitch-anim {
    0% { clip: rect(10px, 9999px, 30px, 0); }
    20% { clip: rect(80px, 9999px, 100px, 0); }
    40% { clip: rect(10px, 9999px, 50px, 0); }
    60% { clip: rect(60px, 9999px, 90px, 0); }
    80% { clip: rect(20px, 9999px, 60px, 0); }
    100% { clip: rect(40px, 9999px, 80px, 0); }
}