/* Hide scrollbars for the phone mockup preview screen */
.phone-screen-scroll::-webkit-scrollbar {
    display: none;
}

.phone-screen-scroll {
    -ms-overflow-style: none;
    /* IE and Edge */
    scrollbar-width: none;
    /* Firefox */
}

/* Core Micro-Animations for live previewing */
@keyframes fadeUp {
    from {
        opacity: 0;
        transform: translateY(12px);
    }

    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes scaleIn {
    from {
        opacity: 0;
        transform: scale(0.96);
    }

    to {
        opacity: 1;
        transform: scale(1);
    }
}

@keyframes floatAvatar {

    0%,
    100% {
        transform: translateY(0px);
    }

    50% {
        transform: translateY(-4px);
    }
}

@keyframes rotateHalo {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}

@keyframes bounceLink {

    0%,
    100% {
        transform: translateY(0);
    }

    50% {
        transform: translateY(-5px);
    }
}

.animate-bounce {
    animation: bounceLink 2.2s infinite ease-in-out !important;
}

@keyframes pulseLink {

    0%,
    100% {
        transform: scale(1);
    }

    50% {
        transform: scale(1.025);
    }
}

.animate-pulse {
    animation: pulseLink 2.5s infinite ease-in-out !important;
}

@keyframes wobbleLink {

    0%,
    100% {
        transform: rotate(0deg);
    }

    15% {
        transform: rotate(-3deg);
    }

    30% {
        transform: rotate(2deg);
    }

    45% {
        transform: rotate(-2deg);
    }

    60% {
        transform: rotate(1deg);
    }
}

.animate-wobble {
    animation: wobbleLink 1.8s infinite ease-in-out !important;
}

@keyframes flashLink {

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

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

.animate-flash {
    animation: flashLink 2s infinite ease-in-out !important;
}

@keyframes drift1 {

    0%,
    100% {
        transform: translate(0, 0) scale(1);
    }

    33% {
        transform: translate(15px, -10px) scale(1.04);
    }

    66% {
        transform: translate(-10px, 8px) scale(0.98);
    }
}

@keyframes drift2 {

    0%,
    100% {
        transform: translate(0, 0) scale(1);
    }

    33% {
        transform: translate(-15px, 10px) scale(1.03);
    }

    66% {
        transform: translate(12px, -8px) scale(0.97);
    }
}

@keyframes neonFlicker {

    0%,
    95%,
    100% {
        opacity: 1;
        filter: drop-shadow(0 0 6px var(--neon-cyan));
    }

    96% {
        opacity: 0.85;
        filter: drop-shadow(0 0 2px var(--neon-cyan));
    }

    97% {
        opacity: 1;
        filter: drop-shadow(0 0 8px var(--neon-cyan));
    }

    98% {
        opacity: 0.9;
        filter: drop-shadow(0 0 3px var(--neon-cyan));
    }
}

@keyframes scanline {
    0% {
        transform: translateY(-100%);
    }

    100% {
        transform: translateY(640px);
    }
}

/* Shared layout mechanics */
.preview-phone-frame .bio-page-card {
    width: 100%;
    animation: scaleIn 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}

.preview-phone-frame .bio-profile-header {
    animation: fadeUp 0.55s 0.05s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.preview-phone-frame .bio-links-wrapper {
    animation: fadeUp 0.55s 0.1s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.preview-phone-frame .bio-plugins-wrapper {
    animation: fadeUp 0.55s 0.15s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.preview-phone-frame .bio-footer-section {
    animation: fadeUp 0.55s 0.2s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.preview-phone-frame .avatar-float {
    animation: floatAvatar 4.5s ease-in-out infinite;
}

.preview-phone-frame .widget-media-wrapper {
    overflow: hidden;
    transition: border-radius 0.25s ease;
}