If I try this code I just wrote:
function changeBackgroundColor() {
  const clickingDiv = document.getElementById("test");
  clickingDiv.style.setProperty("--primary-color-new", "#3474A7");
  clickingDiv.style.setProperty("--secondary-color-new", "#ffd340");
  clickingDiv.style.animation = "change-background 1s";
  clickingDiv.classList.add("change-bg");
  setTimeout(() => {
    clickingDiv.style.setProperty("--primary-color", "#3474A7");
    clickingDiv.style.setProperty("--secondary-color", "#ffd340");
    clickingDiv.style.animation = "";
    clickingDiv.classList.remove("change-bg");
  }, 1000);
}@keyframes change-background {
    from {
        background: linear-gradient(to right, var(--primary-color), var(--secondary-color));
    }
    to {
        background: linear-gradient(to right, var(--primary-color-new), var(--secondary-color-new));
    }
}
#test {
  width: 500px;
  height: 500px;
}
.change-bg {
    animation-name: change-background;
    animation-duration: 1s;
    animation-iteration-count: 1;
    animation-fill-mode: both;
    animation-timing-function: ease;
}<div id="test" style="--primary-color: #2568f6; --secondary-color: #804cda;">
  <button onclick="changeBackgroundColor()">click me</button>
</div>the animation don't work and it directly switch from the first color to the other. (Normally I retrieve the color from an API)
I would want to do a transition between the 2 values
