@keyframes orbPulse {
    0% { transform: scale(1); opacity: 0.2; }
    100% { transform: scale(1.35); opacity: 0.4; }
}

@keyframes mainFloat {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-14px); }
}

@keyframes ringSpin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

@keyframes starSpin {
    0% { transform: translate(-50%, -50%) rotate(0deg); }
    100% { transform: translate(-50%, -50%) rotate(360deg); }
}

@keyframes particleBurst {
    0% { box-shadow: 0 0 0 0 rgba(155, 48, 255, 0.7); }
    70% { box-shadow: 0 0 0 20px rgba(155, 48, 255, 0); }
    100% { box-shadow: 0 0 0 0 rgba(155, 48, 255, 0); }
}

@keyframes textShimmer {
    0% { opacity: 0.7; }
    50% { opacity: 1; }
    100% { opacity: 0.7; }
}

.orb1,
.orb2,
.orb3 {
    animation: orbPulse 8s ease-in-out infinite alternate;
}

.orb2 {
    animation-delay: 2s;
}

.orb3 {
    animation-delay: 4s;
}

.character-container {
    animation: mainFloat 4s ease-in-out infinite;
}

.sparkle-ring {
    animation: ringSpin 20s linear infinite;
}

.loader-logo,
.nav-logo,
.profile-name,
.server-header h1,
.portfolio-group-title {
    animation: textShimmer 4s ease-in-out infinite;
}

.spell-ring {
    position: fixed;
    border: 2px solid rgba(191, 95, 255, 0.8);
    border-radius: 50%;
    transform: translate(-50%, -50%) scale(0);
    opacity: 1;
    pointer-events: none;
    animation: spellRingAnim 0.8s ease-out forwards;
    z-index: 9999;
}

.spell-spark {
    position: fixed;
    width: 6px;
    height: 6px;
    background: #fff;
    border-radius: 50%;
    box-shadow: 0 0 10px #bf5fff, 0 0 20px #8b00ff;
    pointer-events: none;
    z-index: 9999;
}

@keyframes spellRingAnim {
    0% { transform: translate(-50%, -50%) scale(0); opacity: 1; }
    100% { transform: translate(-50%, -50%) scale(2.5); opacity: 0; }
}

@keyframes badgePulse {
    0% { box-shadow: 0 0 15px rgba(155, 48, 255, 0.3), inset 0 0 10px rgba(191, 95, 255, 0.2); border-color: rgba(191, 95, 255, 0.4); }
    100% { box-shadow: 0 0 25px rgba(155, 48, 255, 0.6), inset 0 0 15px rgba(191, 95, 255, 0.4); border-color: rgba(191, 95, 255, 0.8); transform: translateY(-2px); }
}
