.ov-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ov-space-2);
  padding: var(--ov-space-3) var(--ov-space-6);
  border-radius: var(--ov-radius-pill);
  font-family: var(--ov-font-sans);
  font-weight: var(--ov-w-semibold);
  font-size: var(--ov-fs-sm);
  letter-spacing: 0.01em;
  border: none;
  cursor: pointer;
  text-decoration: none;
  transition:
    background var(--ov-dur-fast) var(--ov-ease),
    box-shadow var(--ov-dur-fast) var(--ov-ease),
    opacity var(--ov-dur-fast) var(--ov-ease),
    border-color var(--ov-dur-fast) var(--ov-ease);
  white-space: nowrap;
  user-select: none;
  position: relative;
  line-height: 1;
}

/* primary */
.ov-btn[data-variant="primary"] {
  background: var(--ov-blue);
  color: var(--ov-white);
  box-shadow: 0 1px 3px rgba(0, 150, 255, 0.25);
}
.ov-btn[data-variant="primary"]:hover:not(:disabled) {
  background: var(--ov-blue-700);
  box-shadow: 0 4px 12px rgba(0, 150, 255, 0.35);
}

/* secondary */
.ov-btn[data-variant="secondary"] {
  background: var(--ov-blue-50);
  color: var(--ov-blue-700);
  border: 1.5px solid var(--ov-blue-100);
}
.ov-btn[data-variant="secondary"]:hover:not(:disabled) {
  background: var(--ov-blue-100);
  border-color: var(--ov-blue-300);
}

/* ghost */
.ov-btn[data-variant="ghost"] {
  background: transparent;
  color: var(--ov-steel);
  border: 1.5px solid transparent;
}
.ov-btn[data-variant="ghost"]:hover:not(:disabled) {
  background: var(--ov-cloud);
  border-color: var(--ov-line);
}

/* danger */
.ov-btn[data-variant="danger"] {
  background: var(--ov-banned);
  color: var(--ov-white);
  box-shadow: 0 1px 3px rgba(255, 77, 94, 0.25);
}
.ov-btn[data-variant="danger"]:hover:not(:disabled) {
  background: var(--ov-banned-fg);
  box-shadow: 0 4px 12px rgba(255, 77, 94, 0.35);
}

/* sizes */
.ov-btn[data-size="sm"] {
  padding: var(--ov-space-2) var(--ov-space-4);
  font-size: var(--ov-fs-xs);
}
.ov-btn[data-size="lg"] {
  padding: var(--ov-space-4) var(--ov-space-8);
  font-size: var(--ov-fs-body);
}

/* disabled / loading */
.ov-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
  pointer-events: none;
}

/* focus ring — accessibility */
.ov-btn:focus-visible {
  outline: 2px solid var(--ov-blue);
  outline-offset: 3px;
}

/* spinner */
.ov-btn-spinner {
  width: 14px;
  height: 14px;
  border: 2px solid currentColor;
  border-top-color: transparent;
  border-radius: 50%;
  animation: ov-spin 0.6s linear infinite;
  flex-shrink: 0;
}

@keyframes ov-spin {
  to {
    transform: rotate(360deg);
  }
}
