.btn {
  align-items: center;
  background-color: var(--btn-background, var(--color-bg));
  border-radius: var(--btn-radius, var(--rounded-md));
  border: 1px solid var(--btn-border-color, var(--color-border));
  color: var(--btn-color, var(--color-text));
  cursor: pointer;
  display: inline-flex;
  font-size: var(--btn-font-size, var(--text-sm));
  font-weight: var(--btn-font-weight, var(--font-medium));
  gap: var(--size-2);
  justify-content: var(--btn-justify-content, center);
  padding: var(--btn-padding, 0.5rem 1rem);
  text-align: center;
  white-space: nowrap;

  img:not([class]) {
    filter: var(--btn-icon-color, var(--color-filter-text));
  }

  &:hover {
    --hover-color: var(--btn-background, var(--color-bg));
    --hover-color-l: var(--btn-hover-lightness, calc(l * .96));
    background-color: oklch(from var(--hover-color) var(--hover-color-l) c h);
  }

  &:focus-visible {
    outline: var(--btn-outline-size, 2px) solid var(--color-selected-dark);
    outline-offset: var(--border-2);
  }

  &:is(:disabled, [aria-disabled]) {
    opacity: var(--opacity-50);
    pointer-events: none;
  }
}

.btn--primary {
  --btn-background: var(--color-primary);
  --btn-border-color: transparent;
  --btn-color: var(--color-text-reversed);
  --btn-icon-color: var(--color-filter-text-reversed);
}

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

.btn--borderless {
  --btn-border-color: transparent;
}

.btn--positive {
  --btn-background: var(--color-positive);
  --btn-border-color: transparent;
  --btn-color: var(--color-text-reversed);
  --btn-icon-color: var(--color-filter-text-reversed);
}

.btn--negative {
  --btn-background: var(--color-negative);
  --btn-border-color: transparent;
  --btn-color: var(--color-text-reversed);
  --btn-icon-color: var(--color-filter-text-reversed);
}

.btn--plain {
  --btn-background: transparent;
  --btn-border-color: transparent;
  --btn-hover-lightness: 100%;
  --btn-padding: 0;
}

.btn--icon {
  --btn-padding: var(--size-2);
  --btn-radius: var(--rounded-full);
}

[aria-busy] .btn--loading:disabled {
  > * {
    visibility: hidden;
  }

  &::after {
    filter: var(--btn-icon-color, var(--color-filter-text));
  }

  &::after {
    animation: spin 1s linear infinite;
    background-image: url("loader-circle.svg");
    background-size: cover;
    block-size: var(--size-4);
    content: "";
    inline-size: var(--size-4);
    position: absolute;
  }
}