/* BaseButton Component Styles */

.mint-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  border-radius: var(--radius-md);
  font-weight: 500;
  /* Tactile physicality: 150ms ease-out-quart for rising states (default → hover).
     Dimension comes from a soft colored shadow (added per-variant below) plus a
     1px translateY lift on hover — no gradient overlay. Press is snapped to 50ms
     via the :active override so the down-stroke feels instantaneous. */
  transition:
    color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
    background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
    border-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
    box-shadow 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
    transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
  line-height: 1.25;
  white-space: nowrap;
  cursor: pointer;
  border: none;
  box-sizing: border-box;
  /* Pre-stage transform so initial paint and active state share the same
     transform layer — prevents a 1px flicker on first press. */
  transform: translateY(0);
}

/* Hover: gentle lift. Per-variant shadows deepen on hover below. */
.mint-button:hover:not(.mint-button--disabled) {
  transform: translateY(-1px);
}

/* Press: 50ms snap back to baseline, shadow off.
   The asymmetry between 50ms press and 150ms rise creates the spring-release
   sensation users recognize from mechanical keyboards. */
.mint-button:active:not(.mint-button--disabled) {
  transform: translateY(0);
  box-shadow: none;
  transition-duration: 0.05s;
}

.mint-button:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring-offset);
}

.mint-button--disabled {
  opacity: var(--mint-disabled-opacity);
  cursor: not-allowed;
}

/* Colored variants shift to neutral bg when disabled for WCAG AA contrast */
.mint-button--primary.mint-button--disabled,
.mint-button--cta.mint-button--disabled,
.mint-button--danger.mint-button--disabled,
.mint-button--success.mint-button--disabled {
  background-color: var(--bg-tertiary);
  color: var(--text-muted);
}

.mint-button--full-width {
  width: 100%;
}

/* Variants */
.mint-button--primary {
  background-color: var(--color-primary);
  color: white;
  box-shadow: 0 1px 2px rgba(20, 184, 166, 0.20);
}

.mint-button--primary:hover:not(.mint-button--disabled) {
  background-color: var(--color-primary-hover);
  box-shadow: 0 2px 5px rgba(20, 184, 166, 0.28);
}

.mint-button--secondary {
  background-color: var(--bg-secondary);
  color: var(--text-secondary-strong);
  border: 1px solid var(--border-color);
  /* Secondary is lower-emphasis through surface, border, and shadow, but keeps
     medium label weight so it still reads as an actionable button. */
  font-weight: 500;
  box-shadow: 0 1px 1px rgba(15, 23, 42, 0.03);
}

.mint-button--secondary:hover:not(.mint-button--disabled) {
  background-color: var(--bg-tertiary);
  box-shadow: 0 2px 4px rgba(15, 23, 42, 0.06);
}

.mint-button--cta {
  background-color: var(--color-cta);
  color: white;
  box-shadow: 0 1px 2px rgba(249, 115, 22, 0.20);
}

.mint-button--cta:hover:not(.mint-button--disabled) {
  background-color: var(--color-cta-hover);
  box-shadow: 0 2px 5px rgba(249, 115, 22, 0.28);
}

.mint-button--danger {
  background-color: var(--mint-error);
  color: white;
  box-shadow: 0 1px 2px rgba(239, 68, 68, 0.20);
}

.mint-button--danger:hover:not(.mint-button--disabled) {
  background-color: var(--mint-error-hover);
  box-shadow: 0 2px 5px rgba(239, 68, 68, 0.28);
}

.mint-button--success {
  background-color: var(--mint-success);
  color: white;
  box-shadow: 0 1px 2px rgba(16, 185, 129, 0.20);
}

.mint-button--success:hover:not(.mint-button--disabled) {
  background-color: var(--mint-success-hover);
  box-shadow: 0 2px 5px rgba(16, 185, 129, 0.28);
}

.mint-button--ghost {
  background-color: transparent;
  color: var(--text-secondary-strong);
  /* Lowest-emphasis variant: regular (400) weight, below secondary. */
  font-weight: 400;
}

.mint-button--ghost:hover:not(.mint-button--disabled) {
  background-color: var(--bg-tertiary);
}

/* Sizes */
.mint-button--sm {
  padding: 0.375rem 0.75rem;
  font-size: 0.875rem;
  font-weight: 500;
  min-height: var(--form-height-sm);
}

.mint-button--secondary.mint-button--sm {
  font-weight: 500;
}

.mint-button--md {
  padding: 0.5rem 1rem;
  font-size: 0.875rem;
  min-height: var(--form-height-md);
}

.mint-button--lg {
  padding: 0.75rem 1.5rem;
  font-size: 1rem;
  min-height: var(--form-height-lg);
}

/* Spinner */
.mint-button__spinner {
  animation: mint-button-spin 1s linear infinite;
  width: 1rem;
  height: 1rem;
}

@keyframes mint-button-spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

/* Respect motion preferences: disable lift/press but keep color/shadow
   transitions (those don't trigger vestibular responses). */
@media (prefers-reduced-motion: reduce) {
  .mint-button {
    transition:
      color 0.15s ease,
      background-color 0.15s ease,
      border-color 0.15s ease,
      box-shadow 0.15s ease;
  }
  .mint-button:hover:not(.mint-button--disabled),
  .mint-button:active:not(.mint-button--disabled) {
    transform: none;
  }
}
