/* 遮罩基础样式 */
.loading-mask {
    position: absolute;
    z-index: 2000;
    margin: 0;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: opacity 0.3s;
    animation: loading-fade-in 0.3s;
}

.loading-mask.is-fullscreen {
    position: fixed;
}

/* 内容布局 */
.loading-spinner {
    text-align: center;
}

.loading-text {
    color: var(--primary-color, #409eff);
    margin: 10px 0;
    font-size: 14px;
}

/* 默认 SVG 动画 */
.loading-spinner-svg {
    height: 42px;
    width: 42px;
    animation: loading-rotate 2s linear infinite;
}

.loading-path {
    stroke-dasharray: 90, 150;
    stroke-dashoffset: 0;
    stroke-width: 2;
    stroke: var(--primary-color, #409eff);
    stroke-linecap: round;
    animation: loading-dash 1.5s ease-in-out infinite;
}

/* 动画定义 */
@keyframes loading-fade-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

.loading-fade-out {
    opacity: 0 !important;
}

@keyframes loading-rotate {
    100% { transform: rotate(360deg); }
}

@keyframes loading-dash {
    0% { stroke-dasharray: 1, 200; stroke-dashoffset: 0; }
    50% { stroke-dasharray: 90, 150; stroke-dashoffset: -40px; }
    100% { stroke-dasharray: 90, 150; stroke-dashoffset: -120px; }
}