@layer components {
  :root {
    --btn-radius: 12px;
    --btn-radius-sm: 8px;
    --btn-radius-lg: 16px;

    --btn-font-size: 0.9375rem;
    --btn-font-weight: 500;
    --btn-letter-spacing: 0.01em;

    --btn-transition: 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
    --btn-focus-ring: 0 0 0 3px var(--color-accent-muted);

    --btn-gap: 10px;
  }

  /* ===========================
      Base Button
  =========================== */

  .btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    gap: var(--btn-gap);

    min-height: var(--btn-height-md);
    padding-inline: var(--btn-padding-x-md);
    padding-block: 0;

    font-family: var(--font-ui);
    font-size: var(--btn-font-size);
    font-weight: var(--btn-font-weight);
    letter-spacing: var(--btn-letter-spacing);
    line-height: 1.25;

    text-decoration: none;
    white-space: nowrap;
    user-select: none;

    border: none;
    border-radius: var(--btn-radius);

    cursor: pointer;

    transition:
      transform var(--btn-transition),
      box-shadow var(--btn-transition),
      background-color var(--btn-transition),
      border-color var(--btn-transition),
      color var(--btn-transition),
      opacity var(--btn-transition);
  }

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

  .btn:disabled,
  .btn[aria-disabled="true"] {
    opacity: .5;
    pointer-events: none;
    cursor: not-allowed;
  }

  /* ===========================
      Text
  =========================== */

  .btn__text {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    line-height: inherit;

    padding-block: 2px;

    overflow: visible;
  }

  /* ===========================
      Icons
  =========================== */

  .btn__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;

    flex-shrink: 0;

    transition: transform var(--btn-transition);
  }

  .btn:hover .btn__icon {
    transform: translateX(3px);
  }

  /* ===========================
      Primary
  =========================== */

  .btn--primary {
    color: var(--color-bg-primary);
    background: var(--color-text-primary);

    box-shadow:
      0 1px 2px rgba(0,0,0,.05),
      0 2px 4px rgba(0,0,0,.03);
  }

  .btn--primary:hover:not(:disabled) {
    transform: translateY(-1px);

    box-shadow:
      0 4px 12px rgba(0,0,0,.12),
      0 2px 6px rgba(0,0,0,.08);
  }

  .btn--primary:active:not(:disabled) {
    transform: translateY(0);
  }

  /* ===========================
      Secondary
  =========================== */

  .btn--secondary {
    background: transparent;

    color: var(--color-text-primary);

    border: 1px solid var(--color-border);

    box-shadow:
      0 1px 2px rgba(0,0,0,.03);
  }

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

    border-color: var(--color-text-tertiary);

    transform: translateY(-1px);

    box-shadow:
      0 4px 12px rgba(0,0,0,.08),
      0 2px 6px rgba(0,0,0,.04);
  }

  .btn--secondary:active:not(:disabled) {
    transform: translateY(0);

    border-color: var(--color-border);
  }

  /* ===========================
      Ghost
  =========================== */

  .btn--ghost {
    padding-inline: var(--space-3);

    color: var(--color-text-secondary);

    background: transparent;

    border: 1px solid transparent;
  }

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

  .btn--ghost:active:not(:disabled) {
    background: var(--color-surface);
  }

  /* ===========================
      Sizes
  =========================== */

  .btn--sm {
    min-height: var(--btn-height-sm);

    padding-inline: var(--btn-padding-x-sm);

    font-size: var(--text-sm);

    border-radius: var(--btn-radius-sm);
  }

  .btn--lg {
    min-height: var(--btn-height-lg);

    padding-inline: var(--btn-padding-x-lg);

    font-size: var(--text-base);

    border-radius: var(--btn-radius-lg);
  }

  /* ===========================
      Icon Buttons
  =========================== */

  .btn--icon {
    width: var(--btn-height-md);
    min-height: var(--btn-height-md);

    padding: 0;
  }

  .btn--icon.btn--sm {
    width: var(--btn-height-sm);
    min-height: var(--btn-height-sm);
  }

  .btn--icon.btn--lg {
    width: var(--btn-height-lg);
    min-height: var(--btn-height-lg);
  }

  /* ===========================
      Full Width
  =========================== */

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

  /* ===========================
      Mobile
  =========================== */

  @media (max-width: 767px) {

    .btn {
      width: 100%;
    }

    .btn__text {
      justify-content: center;
    }

  }

  /* ===========================
      Reduced Motion
  =========================== */

  @media (prefers-reduced-motion: reduce) {

    .btn,
    .btn__icon {
      transition: none;
    }

  }
}