.module-switch {
    appearance: none;
    -webkit-appearance: none;
    position: relative;
    width: 44px;
    height: 26px;
    flex-shrink: 0;
    border: 1px solid hsl(var(--border));
    border-radius: 999px;
    background: hsl(var(--muted-foreground) / .3);
    cursor: pointer;
    transition: background .18s;
}

.module-switch::before {
    content: '';
    position: absolute;
    top: 3px;
    left: 3px;
    width: 18px;
    height: 18px;
    background: white;
    border-radius: 50%;
    box-shadow: 0 1px 3px #0003;
    transition: transform .18s;
}

.module-switch:checked {
    background: hsl(var(--primary));
    border-color: hsl(var(--primary));
}

.module-switch:checked::before {
    transform: translateX(18px);
}

.module-switch:focus-visible,
.module-stepper button:focus-visible {
    outline: 2px solid hsl(var(--primary));
    outline-offset: 3px;
}

.module-price-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: 12px;
}

.module-stepper {
    flex-shrink: 0;
    display: inline-flex;
    align-items: center;
    border: 1px solid hsl(var(--border));
    border-radius: 10px;
}

.module-stepper button {
    width: 32px;
    height: 32px;
    font-size: 18px;
    border-radius: 7px;
    cursor: pointer;
}

.module-stepper button:hover:not(:disabled) {
    background: hsl(var(--primary) / .1);
}

.module-stepper button:disabled {
    opacity: .3;
    cursor: not-allowed;
}

.module-stepper output {
    min-width: 26px;
    font-size: 13px;
    text-align: center;
    font-variant-numeric: tabular-nums;
    font-weight: 600;
}

@media (prefers-reduced-motion: reduce) {

    .module-switch,
    .module-switch::before {
        transition: none;
    }
}