.dot-spinner {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    transform-origin: center;
    width: 50px;
    height: 50px;
    animation: spin 1s linear infinite;
}

.dot-spinner .dot {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 15px;
    height: 15px;
    margin: -6px;
    border-radius: 50%;
    background-color: #1890ff;
    opacity: 0.3;
}

.dot-spinner .dot:nth-child(1) {
    transform: rotate(0deg) translateX(20px);
    opacity: 1;
}

.dot-spinner .dot:nth-child(2) {
    transform: rotate(90deg) translateX(20px);
    opacity: 0.6;
}

.dot-spinner .dot:nth-child(3) {
    transform: rotate(180deg) translateX(20px);
    opacity: 0.4;
}

.dot-spinner .dot:nth-child(4) {
    transform: rotate(270deg) translateX(20px);
    opacity: 0.2;
}

@keyframes spin {
    100% {
        transform: translate(-50%, -50%) rotate(360deg);
    }
}
