@keyframes launcher-in {
    from { opacity: 0; transform: scale(0.9); }
}

@keyframes badge-pop {
    0% { transform: scale(0); }
    70% { transform: scale(1.2); }
    100% { transform: scale(1); }
}

@keyframes panel-in {
    from { opacity: 0; transform: translateY(12px) scale(0.97); }
}

@keyframes panel-out {
    0% { opacity: 1; transform: translateY(0) scale(1); }
    100% { opacity: 0; transform: translateY(8px) scale(0.97); }
}

@keyframes rise-in {
    0% { opacity: 0; transform: translateY(10px); }
    100% { opacity: 1; transform: translateY(0); }
}

@keyframes ghost-in {
    from { opacity: 0; }
}

@keyframes content-in {
    from { opacity: 0; }
}

@keyframes ghost-sweep {
    0% { background-position: -70vw 0; }
    70%, 100% { background-position: 70vw 0; }
}

@keyframes bubble-in {
    from { opacity: 0; transform: translateY(8px) scale(0.94); }
}

@keyframes wave {
    0%, 60%, 100% { transform: translateY(0); opacity: 0.35; }
    30% { transform: translateY(-4px); opacity: 1; }
}

@keyframes halo {
    0%, 100% { transform: scale(1); opacity: 0.5; }
    50% { transform: scale(1.22); opacity: 0; }
}

@keyframes sheen {
    0% { transform: translateX(-100%); }
    70%, 100% { transform: translateX(250%); }
}

@keyframes drift-a {
    0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
    50% { transform: translate3d(6%, -8%, 0) scale(1.12); }
}

@keyframes drift-b {
    0%, 100% { transform: translate3d(0, 0, 0) scale(1.06); }
    50% { transform: translate3d(-7%, 6%, 0) scale(0.94); }
}

@keyframes float-y {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-10px); }
}

@keyframes glint {
    0% { transform: translateX(-160%) skewX(-14deg); opacity: 0; }
    5% { opacity: 1; }
    18% { transform: translateX(360%) skewX(-14deg); opacity: 0; }
    100% { transform: translateX(360%) skewX(-14deg); opacity: 0; }
}

@keyframes pulse-dot {
    0%, 100% { opacity: 1; transform: scale(1); }
    50% { opacity: 0.4; transform: scale(0.85); }
}

@property --tilt-x { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
@property --tilt-y { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
@property --mag-x { syntax: "<length>"; inherits: false; initial-value: 0px; }
@property --mag-y { syntax: "<length>"; inherits: false; initial-value: 0px; }

.anim-launcher-in { animation: launcher-in 320ms cubic-bezier(0.16, 1, 0.3, 1) backwards; }
.anim-badge-pop { animation: badge-pop 320ms cubic-bezier(0.34, 1.56, 0.64, 1) both; }
.anim-panel-in { animation: panel-in 420ms cubic-bezier(0.16, 1, 0.3, 1) both; }
.anim-rise-in { animation: rise-in 420ms cubic-bezier(0.16, 1, 0.3, 1) backwards; }
.anim-halo { animation: halo 2.8s cubic-bezier(0.4, 0, 0.2, 1) infinite; }
.anim-sheen { animation: sheen 2.4s linear infinite; }

.anim-delay-60 { animation-delay: 60ms; }
.anim-delay-120 { animation-delay: 120ms; }

@media (prefers-reduced-motion: reduce) {
    .anim-launcher-in,
    .anim-badge-pop,
    .anim-panel-in,
    .anim-rise-in,
    .anim-halo,
    .anim-sheen {
        animation-duration: 0.01ms;
        animation-iteration-count: 1;
        animation-delay: 0ms;
    }

    .anim-halo,
    .anim-sheen {
        display: none;
    }
}
