.elementor-widget-ws-rainbow-button .ws-rainbow-button__bg {
    width: 100%;
    height: 100%;
    position: absolute;
    z-index: -1;
    top: 0;
    left: 0;
    border-radius: calc(var(--border-radius, 8px) - var(--border-width, 3px));
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a)),
.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a)) span:nth-of-type(1),
.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))::before,
.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))::after,
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a,
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a span:nth-of-type(1),
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a::before,
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a::after {
    animation-composition: add;
    animation: ws-rainbow var(--rainbow-duration, 12s) infinite var(--rainbow-easing, linear),
               ws-rainbow calc(var(--rainbow-duration, 12s) / 2) infinite var(--rainbow-easing, linear) var(--state, paused);
}

@keyframes ws-rainbow {
    to {
        background-position: 0 0, 0 0, 400% 0;
    }
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a)),
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a {
    border: var(--border-width, 3px) solid transparent;
    cursor: pointer;
    outline: none;
    position: relative;
    z-index: 1;
    display: block;
    width: fit-content;
    --background-color: transparent;

    background: linear-gradient(light-dark(var(--background-color), var(--background-color)) 0 0) padding-box,
        linear-gradient(0deg, #0000 0, var(--border, #333333) 18px) border-box,
        linear-gradient(
            to right,
            #f47373,
            #f79a49,
            #f6ce3a,
            #b5e04b,
            #5ae390,
            #54d7d7,
            #4caff0,
            #6485e2,
            #9c6edb,
            #d86acb,
            #f47373
        ) border-box 0 0 /
        400% 100%;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button[data-always-play="0"]:not(:has(> a)),
.elementor-widget-ws-rainbow-button .ws-rainbow-button[data-always-play="1"]:not(:has(> a)),
.elementor-widget-ws-rainbow-button .ws-rainbow-button[data-always-play="0"] > a,
.elementor-widget-ws-rainbow-button .ws-rainbow-button[data-always-play="1"] > a {
    --state: running;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))::before,
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a::before {
    background: linear-gradient(#0000 0 0), linear-gradient(#0000 0 0),
        linear-gradient(
            to right,
            #f47373,
            #f79a49,
            #f6ce3a,
            #b5e04b,
            #5ae390,
            #54d7d7,
            #4caff0,
            #6485e2,
            #9c6edb,
            #d86acb,
            #f47373
        ) border-box 0 0 /
        400% 100%;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))::after,
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a::after {
    background: linear-gradient(#0000 0 0) padding-box,
        linear-gradient(#0000 0 0) border-box,
        linear-gradient(
            to right,
            #f47373,
            #f79a49,
            #f6ce3a,
            #b5e04b,
            #5ae390,
            #54d7d7,
            #4caff0,
            #6485e2,
            #9c6edb,
            #d86acb,
            #f47373
        ) border-box 0 0 /
        400% 100%;
    mask: linear-gradient(#0000 0 0), linear-gradient(#000 0 0);
    mask-clip: padding-box, border-box;
    mask-composite: intersect;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))::before,
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a::before {
    content: '';
    position: absolute;
    z-index: -2;
    filter: blur(calc(var(--blur, 10) * 1px)) brightness(var(--brightness, 1.25));
    inset: 60% 0 0 0;
    border-radius: 50% 50% 6px 6px / 50% 50% 6px 6px;
    transform-origin: 50% 25%;
    opacity: 1;
    scale: 0.6 0.4;
    transition: scale 0.24s;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))[data-always-play="0"]:is(:hover, :focus-visible)::before,
.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))[data-always-play="1"]::before,
.elementor-widget-ws-rainbow-button .ws-rainbow-button[data-always-play="0"] > a:is(:hover, :focus-visible)::before,
.elementor-widget-ws-rainbow-button .ws-rainbow-button[data-always-play="1"] > a::before {
    scale: 1.1 1.25;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a))::after,
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a::after {
    content: '';
    position: absolute;
    border: calc(var(--border-width, 2) * 1px) solid #0000;
    inset: -8px;
    border-radius: 14px;
    opacity: 0;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button:not(:has(> a)),
.elementor-widget-ws-rainbow-button .ws-rainbow-button > a {
    cursor: pointer;
}

.elementor-widget-ws-rainbow-button .ws-rainbow-button .ws-rainbow-button__anchor {
    display: flex;
    width: fit-content;
    height: fit-content;
    text-decoration: unset;
}