#spinner {
  position: absolute;
  width: var(--animation-icon-size);
  height: var(--animation-icon-size);
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border: var(--spinner-border-width) solid var(--spinner-border);
  border-color: var(--primary) rgb(var(--primary-rgb), 0.9) rgb(var(--primary-rgb), 0.6) rgb(var(--primary-rgb), 0.9);
  z-index: 1001;
  opacity: 0;
  visibility: hidden;
  transition:
    opacity 0.2s ease,
    visibility 0s 0.2s linear;
  animation: spin 1s linear infinite;
  background: transparent;
  box-shadow: var(--spinner-glow), var(--control-shadow-unified);
  border-radius: var(--control-radius-round);
  will-change: var(--transform-will-change), var(--opacity-will-change);
}

#spinner.visible {
  opacity: 1;
  visibility: visible;
  transition-delay: 0s;
  animation:
    spin 0.7s linear infinite,
    spinner-pulse 1.2s ease-in-out infinite;
}

.message-overlay {
  position: fixed;
  top: 20%;
  left: 50%;
  transform: translateX(-50%);
  border-radius: var(--control-radius-box);
  padding: 10px 20px;
  color: var(--text-color);
  font-size: 16px;
  text-align: center;
  opacity: 0;
  visibility: hidden;
  z-index: 10000;
  transition:
    opacity 0.3s ease,
    visibility 0.3s ease;
}

.message-overlay.visible {
  opacity: 1;
  visibility: visible;
}

/* Spinner inside message overlay */
.message-overlay.with-spinner {
  padding-left: 40px;
  position: relative;
}

.message-overlay.with-spinner::before {
  content: "";
  position: absolute;
  left: 15px;
  top: 50%;
  transform: translateY(-50%);
  width: 16px;
  height: 16px;
  border: 2px solid var(--spinner-border);
  border-color: var(--primary) rgb(var(--primary-rgb), 0.9) rgb(var(--primary-rgb), 0.6) rgb(var(--primary-rgb), 0.9);
  border-radius: 50%;
  animation: spin-message 0.7s linear infinite;
}

@keyframes spin-message {
  0% {
    transform: translateY(-50%) rotate(0deg);
  }

  100% {
    transform: translateY(-50%) rotate(360deg);
  }
}

@keyframes spin {
  0% {
    transform: translate(-50%, -50%) rotate(0deg);
  }

  100% {
    transform: translate(-50%, -50%) rotate(360deg);
  }
}

@keyframes spinner-pulse {
  0%,
  100% {
    box-shadow: var(--spinner-glow), var(--control-shadow-unified);
    border-width: var(--spinner-border-width);
    filter: var(--animation-glow-filter-base);
  }

  50% {
    box-shadow: var(--spinner-shadow-peak);
    border-width: var(--spinner-border-peak);
    filter: var(--animation-glow-filter-peak);
  }
}
