/* ─── CSS RESET & BASE STYLES ───────────────────────────────────── */
*,
*::before,
*::after {
    box-sizing: border-box;
}

html,
body {
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    margin: 0;
    min-height: 100dvh;
    transition: background-color 0.4s ease, color 0.4s ease;
    -ms-overflow-style: none;
    scrollbar-width: none;
}

html::-webkit-scrollbar,
body::-webkit-scrollbar {
    display: none;
}


/* 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 */
}

/* ─── ANIMATIONS ─────────────────────────────────────────────── */
@keyframes fadeUp {
    from {
        opacity: 0;
        transform: translateY(16px);
    }

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

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

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

@keyframes floatAvatar {

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

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

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

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

@keyframes bounceLink {

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

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

@keyframes pulseLink {

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

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

@keyframes wobbleLink {

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

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

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

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

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

@keyframes flashLink {

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

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

@keyframes drift1 {

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

    33% {
        transform: translate(40px, -30px) scale(1.08);
    }

    66% {
        transform: translate(-30px, 20px) scale(0.95);
    }
}

@keyframes drift2 {

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

    33% {
        transform: translate(-35px, 30px) scale(1.05);
    }

    66% {
        transform: translate(30px, -20px) scale(0.96);
    }
}

@keyframes neonFlicker {

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

    95% {
        opacity: 0.85;
    }

    96% {
        opacity: 1;
    }

    97% {
        opacity: 0.9;
    }
}

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

    100% {
        transform: translateY(100vh);
    }
}

@keyframes auroraShift {

    0%,
    100% {
        background-position: 0% 50%;
    }

    50% {
        background-position: 100% 50%;
    }
}

@keyframes leafSway {

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

    25% {
        transform: rotate(1.5deg) scale(1.01);
    }

    75% {
        transform: rotate(-1.5deg) scale(0.99);
    }
}

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

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

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

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

/* ─── SHARED UTILITY STYLES ─────────────────────────────────── */
.widget-media-wrapper {
    overflow: hidden;
    transition: border-radius 0.25s ease;
}

/* Public structure animations */
body .bio-page-card {
    animation: scaleIn 0.55s cubic-bezier(0.34, 1.56, 0.64, 1) both;
}

body .bio-profile-header {
    animation: fadeUp 0.6s 0.1s cubic-bezier(0.16, 1, 0.3, 1) both;
}

body .bio-links-wrapper {
    animation: fadeUp 0.6s 0.2s cubic-bezier(0.16, 1, 0.3, 1) both;
}

body .bio-plugins-wrapper {
    animation: fadeUp 0.6s 0.3s cubic-bezier(0.16, 1, 0.3, 1) both;
}

body .bio-footer-section {
    animation: fadeUp 0.6s 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
}

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

/* Preview phone mockup frame animations */
.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;
}