/**
 * 12-dot circular loading indicator (pure CSS).
 * --dot-spinner-radius: distance from center to each dot (default 22px)
 */
.dot-spinner {
    position: relative;
    width: 56px;
    height: 56px;
    margin-left: auto;
    margin-right: auto;
    animation: dot-spinner-rotate 0.9s linear infinite;
}

.dot-spinner__dot {
    position: absolute;
    left: 50%;
    top: 50%;
    border-radius: 50%;
    box-sizing: border-box;
    pointer-events: none;
}

@keyframes dot-spinner-rotate {
    to {
        transform: rotate(360deg);
    }
}

/* 深色底（前台 preloader）：淺色圓點 */
.dot-spinner--light .dot-spinner__dot:nth-child(1) {
    transform: rotate(0deg) translateY(-22px);
    width: 8px;
    height: 8px;
    margin: -4px 0 0 -4px;
    background: rgba(255, 255, 255, 1);
}
.dot-spinner--light .dot-spinner__dot:nth-child(2) {
    transform: rotate(30deg) translateY(-22px);
    width: 7.5px;
    height: 7.5px;
    margin: -3.75px 0 0 -3.75px;
    background: rgba(255, 255, 255, 0.92);
}
.dot-spinner--light .dot-spinner__dot:nth-child(3) {
    transform: rotate(60deg) translateY(-22px);
    width: 7px;
    height: 7px;
    margin: -3.5px 0 0 -3.5px;
    background: rgba(255, 255, 255, 0.8);
}
.dot-spinner--light .dot-spinner__dot:nth-child(4) {
    transform: rotate(90deg) translateY(-22px);
    width: 6.5px;
    height: 6.5px;
    margin: -3.25px 0 0 -3.25px;
    background: rgba(255, 255, 255, 0.68);
}
.dot-spinner--light .dot-spinner__dot:nth-child(5) {
    transform: rotate(120deg) translateY(-22px);
    width: 6px;
    height: 6px;
    margin: -3px 0 0 -3px;
    background: rgba(255, 255, 255, 0.55);
}
.dot-spinner--light .dot-spinner__dot:nth-child(6) {
    transform: rotate(150deg) translateY(-22px);
    width: 5.5px;
    height: 5.5px;
    margin: -2.75px 0 0 -2.75px;
    background: rgba(255, 255, 255, 0.42);
}
.dot-spinner--light .dot-spinner__dot:nth-child(7) {
    transform: rotate(180deg) translateY(-22px);
    width: 5px;
    height: 5px;
    margin: -2.5px 0 0 -2.5px;
    background: rgba(255, 255, 255, 0.32);
}
.dot-spinner--light .dot-spinner__dot:nth-child(8) {
    transform: rotate(210deg) translateY(-22px);
    width: 4.5px;
    height: 4.5px;
    margin: -2.25px 0 0 -2.25px;
    background: rgba(255, 255, 255, 0.24);
}
.dot-spinner--light .dot-spinner__dot:nth-child(9) {
    transform: rotate(240deg) translateY(-22px);
    width: 4px;
    height: 4px;
    margin: -2px 0 0 -2px;
    background: rgba(255, 255, 255, 0.18);
}
.dot-spinner--light .dot-spinner__dot:nth-child(10) {
    transform: rotate(270deg) translateY(-22px);
    width: 3.8px;
    height: 3.8px;
    margin: -1.9px 0 0 -1.9px;
    background: rgba(255, 255, 255, 0.14);
}
.dot-spinner--light .dot-spinner__dot:nth-child(11) {
    transform: rotate(300deg) translateY(-22px);
    width: 3.5px;
    height: 3.5px;
    margin: -1.75px 0 0 -1.75px;
    background: rgba(255, 255, 255, 0.11);
}
.dot-spinner--light .dot-spinner__dot:nth-child(12) {
    transform: rotate(330deg) translateY(-22px);
    width: 3.2px;
    height: 3.2px;
    margin: -1.6px 0 0 -1.6px;
    background: rgba(255, 255, 255, 0.08);
}

/* 淺色底（結帳 PayNow 卡片）：深色圓點 */
.dot-spinner--dark .dot-spinner__dot:nth-child(1) {
    transform: rotate(0deg) translateY(-22px);
    width: 8px;
    height: 8px;
    margin: -4px 0 0 -4px;
    background: rgba(0, 0, 0, 1);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(2) {
    transform: rotate(30deg) translateY(-22px);
    width: 7.5px;
    height: 7.5px;
    margin: -3.75px 0 0 -3.75px;
    background: rgba(0, 0, 0, 0.92);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(3) {
    transform: rotate(60deg) translateY(-22px);
    width: 7px;
    height: 7px;
    margin: -3.5px 0 0 -3.5px;
    background: rgba(0, 0, 0, 0.8);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(4) {
    transform: rotate(90deg) translateY(-22px);
    width: 6.5px;
    height: 6.5px;
    margin: -3.25px 0 0 -3.25px;
    background: rgba(0, 0, 0, 0.68);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(5) {
    transform: rotate(120deg) translateY(-22px);
    width: 6px;
    height: 6px;
    margin: -3px 0 0 -3px;
    background: rgba(0, 0, 0, 0.55);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(6) {
    transform: rotate(150deg) translateY(-22px);
    width: 5.5px;
    height: 5.5px;
    margin: -2.75px 0 0 -2.75px;
    background: rgba(0, 0, 0, 0.42);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(7) {
    transform: rotate(180deg) translateY(-22px);
    width: 5px;
    height: 5px;
    margin: -2.5px 0 0 -2.5px;
    background: rgba(0, 0, 0, 0.32);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(8) {
    transform: rotate(210deg) translateY(-22px);
    width: 4.5px;
    height: 4.5px;
    margin: -2.25px 0 0 -2.25px;
    background: rgba(0, 0, 0, 0.24);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(9) {
    transform: rotate(240deg) translateY(-22px);
    width: 4px;
    height: 4px;
    margin: -2px 0 0 -2px;
    background: rgba(0, 0, 0, 0.18);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(10) {
    transform: rotate(270deg) translateY(-22px);
    width: 3.8px;
    height: 3.8px;
    margin: -1.9px 0 0 -1.9px;
    background: rgba(0, 0, 0, 0.14);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(11) {
    transform: rotate(300deg) translateY(-22px);
    width: 3.5px;
    height: 3.5px;
    margin: -1.75px 0 0 -1.75px;
    background: rgba(0, 0, 0, 0.11);
}
.dot-spinner--dark .dot-spinner__dot:nth-child(12) {
    transform: rotate(330deg) translateY(-22px);
    width: 3.2px;
    height: 3.2px;
    margin: -1.6px 0 0 -1.6px;
    background: rgba(0, 0, 0, 0.08);
}
