.ds-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--ds-space-2);
  font-family: var(--ds-font-family);
  font-size: var(--ds-font-size-sm);
  font-weight: var(--ds-font-weight-medium);
  line-height: 1;
  padding: var(--ds-space-3) var(--ds-space-5);
  border-radius: var(--ds-radius-md);
  border: 1px solid transparent;
  cursor: pointer;
  transition: background-color var(--ds-transition-fast),
              border-color var(--ds-transition-fast),
              color var(--ds-transition-fast),
              box-shadow var(--ds-transition-fast);
  text-decoration: none;
  white-space: nowrap;
}

.ds-btn:focus-visible {
  outline: 2px solid var(--ds-color-primary);
  outline-offset: 2px;
}

.ds-btn--primary {
  background-color: var(--ds-color-primary);
  color: var(--ds-color-white);
}

.ds-btn--primary:hover:not(:disabled) {
  background-color: var(--ds-color-primary-hover);
}

.ds-btn--secondary {
  background-color: var(--ds-color-secondary);
  color: var(--ds-color-white);
}

.ds-btn--secondary:hover:not(:disabled) {
  background-color: var(--ds-color-secondary-hover);
}

.ds-btn--outline {
  background-color: transparent;
  color: var(--ds-color-primary);
  border-color: var(--ds-color-primary);
}

.ds-btn--outline:hover:not(:disabled) {
  background-color: var(--ds-color-primary-light);
}

.ds-btn--ghost {
  background-color: transparent;
  color: var(--ds-color-gray-700);
}

.ds-btn--ghost:hover:not(:disabled) {
  background-color: var(--ds-color-gray-100);
}

.ds-btn--soft {
  background-color: rgba(255, 255, 255, 0.08);
  color: rgba(255, 255, 255, 0.92);
  border-color: transparent;
}

.ds-btn--soft:hover:not(:disabled) {
  background-color: rgba(255, 255, 255, 0.14);
  border-color: transparent;
  color: var(--ds-color-white);
}

.ds-btn--danger {
  background-color: var(--ds-color-danger);
  color: var(--ds-color-white);
}

.ds-btn--danger:hover:not(:disabled) {
  background-color: #dc2626;
}

.ds-btn--sm {
  font-size: var(--ds-font-size-xs);
  padding: var(--ds-space-2) var(--ds-space-3);
}

.ds-btn--lg {
  font-size: var(--ds-font-size-base);
  padding: var(--ds-space-4) var(--ds-space-6);
}

.ds-btn--block {
  display: flex;
  width: 100%;
}

.ds-btn:disabled,
.ds-btn--disabled {
  opacity: 0.5;
  cursor: not-allowed;
  pointer-events: none;
}

.ds-btn-group {
  display: inline-flex;
  gap: var(--ds-space-2);
  flex-wrap: wrap;
}

.ds-btn--black {
  background-color: var(--ds-color-black);
  color: var(--ds-color-white);
}

.ds-btn--black:hover:not(:disabled) {
  background-color: var(--ds-color-gray-800);
}

.ds-btn--shadow-xs {
  box-shadow: var(--ds-shadow-xs);
}

.ds-btn--shadow-sm {
  box-shadow: var(--ds-shadow-sm);
}

.ds-btn--shadow-md {
  box-shadow: var(--ds-shadow-md);
}

.ds-btn--shadow-lg {
  box-shadow: var(--ds-shadow-lg);
}

.ds-btn--shadow-xl {
  box-shadow: var(--ds-shadow-xl);
}

.ds-btn--shadow-2xl {
  box-shadow: var(--ds-shadow-2xl);
}