@layer base {
  .button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    white-space: nowrap;
    border-radius: var(--radius);
    font-family: var(--font-family-base);
    font-weight: 500;
    transition: all var(--animation-duration-fast) ease-in-out;
    cursor: pointer;
    border: 1px solid transparent;
    text-decoration: none;
    outline: none;
    user-select: none;
    position: relative;
    overflow: hidden;
  }

  .button:focus-visible {
    box-shadow: var(--shadow-focus);
  }

  .button:active {
    transform: translateY(1px);
  }

  /* Variants */
  .primary {
    background-color: var(--primary);
    color: var(--primary-foreground);
    border-color: var(--primary);
  }

  .primary:hover:not(.disabled) {
    background-color: color-mix(in srgb, var(--primary) 90%, black);
    border-color: color-mix(in srgb, var(--primary) 90%, black);
  }

  .secondary {
    background-color: var(--secondary);
    color: var(--secondary-foreground);
    border-color: var(--secondary);
  }

  .secondary:hover:not(.disabled) {
    background-color: color-mix(in srgb, var(--secondary) 90%, black);
    border-color: color-mix(in srgb, var(--secondary) 90%, black);
  }

  .outline {
    background-color: transparent;
    color: var(--foreground);
    border-color: var(--border);
  }

  .outline:hover:not(.disabled) {
    background-color: var(--muted);
    border-color: var(--primary);
  }

  .ghost {
    background-color: transparent;
    color: var(--foreground);
    border-color: transparent;
  }

  .ghost:hover:not(.disabled) {
    background-color: var(--muted);
  }

  .link {
    background-color: transparent;
    color: var(--primary);
    border-color: transparent;
    text-decoration: underline;
    text-underline-offset: 4px;
  }

  .link:hover:not(.disabled) {
    text-decoration: none;
  }

  .destructive {
    background-color: var(--error);
    color: var(--error-foreground);
    border-color: var(--error);
  }

  .destructive:hover:not(.disabled) {
    background-color: color-mix(in srgb, var(--error) 90%, black);
    border-color: color-mix(in srgb, var(--error) 90%, black);
  }

  /* Sizes */
  .sm {
    height: 2rem;
    padding: 0 var(--spacing-3);
    font-size: 0.875rem;
    gap: var(--spacing-1);
  }

  .md {
    height: 2.5rem;
    padding: 0 var(--spacing-4);
    font-size: 0.9375rem;
    gap: var(--spacing-2);
  }

  .lg {
    height: 3rem;
    padding: 0 var(--spacing-6);
    font-size: 1rem;
    gap: var(--spacing-2);
  }

  .icon {
    height: 2.5rem;
    width: 2.5rem;
    padding: 0;
  }

  .icon-sm {
    height: 2rem;
    width: 2rem;
    padding: 0;
  }

  .icon-md {
    height: 2.5rem;
    width: 2.5rem;
    padding: 0;
  }

  .icon-lg {
    height: 3rem;
    width: 3rem;
    padding: 0;
  }

  /* Disabled state */
  .disabled {
    opacity: 0.5;
    cursor: not-allowed;
    pointer-events: none;
  }

  .disabled:active {
    transform: none;
  }

  /* Loading state shimmer effect */
  .button::before {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 100%;
    height: 100%;
    background: linear-gradient(
      90deg,
      transparent,
      rgba(255, 255, 255, 0.2),
      transparent
    );
    transition: left var(--animation-duration-slow) ease;
  }

  .button:hover::before:not(.disabled) {
    left: 100%;
  }
}