/* ============================================================
   按钮加载动画样式
   ============================================================ */
.sub_login_button.is-loading {
    opacity: 0.8;
    pointer-events: none;
}
.sub_login_button .el-loading-spinner {
    display: inline-block;
    margin-right: 8px;
    vertical-align: middle;
}
.sub_login_button .el-loading-spinner .circular {
    width: 16px;
    height: 16px;
    animation: loading-rotate 2s linear infinite;
}
.sub_login_button .el-loading-spinner .path {
    stroke: #fff;
    stroke-width: 3;
    stroke-linecap: round;
    animation: loading-dash 1.5s ease-in-out infinite;
}
@keyframes loading-rotate {
    100% {
        transform: rotate(360deg);
    }
}
@keyframes loading-dash {
    0% {
        stroke-dasharray: 1, 150;
        stroke-dashoffset: 0;
    }
    50% {
        stroke-dasharray: 90, 150;
        stroke-dashoffset: -35;
    }
    100% {
        stroke-dasharray: 90, 150;
        stroke-dashoffset: -124;
    }
}

/* ── Error 提示文字：红点 icon + 红字，输入框正下方 ── */
.sub_login_content .tips.ERROR{
  position: absolute;
  left: 9px;
  bottom: -19px;
  display: block;
  font-size: 12px;
  color: #e02020;
}
.sub_login_content .tips.ERROR i {vertical-align: -2px;margin-right: 3px;position: static;color:#e02020;}
.sub_login_content input{-webkit-animation: shake 0.18s linear forwards;animation: shake 0.18s linear forwards}
.sub_login_content .tips.ERROR::before,
.sub_login_content .tips.ERROR::after { display: none; }