private IEnumerator HandleDepartMotion()
        {
            Transform elevatorTransform           = elevatorAnimator.transform;
            Vector3   elevatorStartDepartPosition = elevatorTransform.position;
            float     elapsed         = 0f;
            float     duration        = 0.55f;
            float     yDistance       = 20f;
            bool      hasLayerSwapped = false;

            while (elapsed < duration)
            {
                if (elapsed > 0.15f && !crumblyBumblyAnimator.gameObject.activeSelf)
                {
                    crumblyBumblyAnimator.gameObject.SetActive(true);
                    crumblyBumblyAnimator.PlayAndDisableObject(string.Empty, null);
                }
                elapsed += BraveTime.DeltaTime;
                float t       = Mathf.SmoothStep(0f, 1f, elapsed / duration);
                float yOffset = BraveMathCollege.SmoothLerp(0f, -yDistance, t);
                if (yOffset < -2f && !hasLayerSwapped)
                {
                    hasLayerSwapped = true;
                    elevatorAnimator.gameObject.SetLayerRecursively(LayerMask.NameToLayer("BG_Critical"));
                }
                elevatorTransform.position = elevatorStartDepartPosition + new Vector3(0f, yOffset, 0f);
                if (facewallAnimator != null)
                {
                    facewallAnimator.Sprite.UpdateZDepth();
                }
                yield return(null);
            }
            yield break;
        }