.ds-btn {
  appearance: none;
  border: var(--ds-border-width) solid transparent;
  border-radius: calc(var(--ds-border-radius) - 2px);
  background: transparent;
  color: var(--ds-color-text);
  font-family: var(--ds-font-family);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: calc(var(--ds-spacing-unit) * 2);
  cursor: pointer;
  text-decoration: none;
  transition: background var(--ds-animation-duration) var(--ds-animation-easing),
    border-color var(--ds-animation-duration) var(--ds-animation-easing),
    color var(--ds-animation-duration) var(--ds-animation-easing),
    box-shadow var(--ds-animation-duration) var(--ds-animation-easing);
  position: relative;
  overflow: hidden;
}

/* Ripple Animation */
.ripple-effect {
  position: absolute;
  border-radius: 50%;
  transform: scale(0);
  animation: ripple 0.6s linear;
  pointer-events: none;
}

@keyframes ripple {
  to {
    transform: scale(4);
    opacity: 0;
  }
}

.ds-btn:focus-visible {
  outline: none;
  box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.20);
}

.ds-btn:disabled,
.ds-btn[aria-disabled="true"] {
  opacity: 0.55;
  cursor: not-allowed;
  transform: none;
}

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

.ds-btn-primary:hover:not(:disabled) {
  transform: translateY(-1px);
  box-shadow: var(--ds-shadow-md);
}

.ds-btn-ghost {
  background: transparent;
  border-color: var(--ds-color-border);
  color: var(--ds-color-text);
}

.ds-btn-ghost:hover:not(:disabled) {
  background: color-mix(in srgb, var(--ds-color-text) 6%, transparent);
}

.ds-btn--sm {
  font-size: 12px;
  padding: calc(var(--ds-spacing-unit) * 2) calc(var(--ds-spacing-unit) * 3);
}

.ds-btn--md {
  font-size: 13px;
  padding: calc(var(--ds-spacing-unit) * 3) calc(var(--ds-spacing-unit) * 5);
}

.ds-btn--lg {
  font-size: 14px;
  padding: calc(var(--ds-spacing-unit) * 4) calc(var(--ds-spacing-unit) * 7);
}

.ds-btn--full-width {
  width: 100%;
}