.reveal {
    opacity: 0;
    transform: translateY(20px);
    transition: 0.8s ease;
}

.reveal.active {
    opacity: 1;
    transform: translateY(0);
}

/* Typing cursor */
.typing::after {
    content: "|";
    margin-left: 6px;
    color: var(--color-primary);
    animation: blink 1s infinite;
}

@keyframes blink {

    0%,
    50%,
    100% {
        opacity: 1;
    }

    25%,
    75% {
        opacity: 0;
    }
}

.project-card:hover img {
    transform: scale(1.05);
    transition: 0.6s ease;
}

.project-card img {
    transition: 0.6s ease;
}

.btn-primary:active {
    transform: scale(0.97);
}

body,
section,
header,
footer,
.project-card,
.cv-box,
form input,
form textarea {
    transition: background-color 0.4s ease, color 0.4s ease, border-color 0.4s ease;
}