@mixin button-variant($context) {
  white-space: nowrap;
  &:hover,
    &:focus-visible {
      border-radius: var(--c--components--button--border-radius--focus);
    }

  &--primary {
    background-color: var(--c--contextuals--background--semantic--#{$context}--primary);
    color: var(--c--contextuals--content--semantic--#{$context}--on-#{$context});

    &:focus-visible {
      box-shadow:
        0 0 0 1px #fff,
        0 0 0 4px var(--c--contextuals--border--semantic--#{$context}--primary);
    }
    &:hover,
    &:focus-visible {
      background-color: var(
        --c--contextuals--background--semantic--#{$context}--primary-hover
      );

    }

    &:disabled {
      background-color: var(--c--contextuals--background--semantic--disabled--primary);
      color: var(--c--contextuals--content--semantic--disabled--primary);
    }
  }

  &--secondary {
    background-color: var(--c--contextuals--background--semantic--#{$context}--secondary);
    color: var(--c--contextuals--content--semantic--#{$context}--secondary);

    &:focus-visible {
      box-shadow:
        0 0 0 1px #fff,
        0 0 0 4px var(--c--contextuals--border--semantic--#{$context}--primary);
    }
    &:hover,
    &:focus-visible {
      background-color: var(
        --c--contextuals--background--semantic--#{$context}--secondary-hover
      );
    }

    &:disabled {
      background-color: var(--c--contextuals--background--semantic--disabled--secondary);
      color: var(--c--contextuals--content--semantic--disabled--primary);
    }
  }

  &--tertiary {
    background-color: transparent;
    color: var(--c--contextuals--content--semantic--#{$context}--tertiary);

    &:focus-visible {
      box-shadow:
        0 0 0 1px #fff,
        0 0 0 4px var(--c--contextuals--border--semantic--#{$context}--primary);
    }
    &:hover,
    &:focus-visible {
      background-color: var(--c--contextuals--background--semantic--contextual--primary);
    }

    &:disabled {
      background-color: transparent;
      color: var(--c--contextuals--content--semantic--disabled--primary);
    }
  }

  &--bordered {
    border: 1px solid var(--c--contextuals--border--semantic--neutral--tertiary);
    background-color: transparent;
    color: var(--c--contextuals--content--semantic--#{$context}--tertiary);

    &:focus-visible {
      box-shadow:
        0 0 0 1px #fff,
        0 0 0 4px var(--c--contextuals--border--semantic--#{$context}--primary);
    }
    &:hover,
    &:focus-visible {
      background-color: var(--c--contextuals--background--semantic--contextual--primary);
    }

    &:disabled {
      background-color: transparent;
      color: var(--c--contextuals--content--semantic--disabled--primary);
      border-color: var(--c--contextuals--border--semantic--disabled--primary);
    }
  }
}

.c__button {
  align-items: center;
  border-radius: var(--c--components--button--border-radius);
  border: thin solid transparent;
  box-sizing: border-box;
  cursor: pointer;
  display: inline-flex;
  // When button is rendered as link.
  text-decoration: none;
  font-weight: var(--c--components--button--font-weight);
  font-family: var(--c--components--button--font-family);
  transition: all var(--c--globals--transitions--duration)
    var(--c--globals--transitions--ease-out);
  user-select: none;

  &__icon {
    display: flex;
    align-items: center;
  }

  &--full-width {
    width: 100%;
    justify-content: center;
  }

  &--medium {
    height: var(--c--components--button--medium-height);
    font-size: var(--c--components--button--medium-font-size);
    padding: 0 var(--c--globals--spacings--s);


    &.c__button--icon-only {
      width: var(--c--components--button--medium-height);
    }

    .c__button__icon,
    .c__button__icon * {
      font-size: var(--c--components--button--medium-icon-font-size);
    }
  }

  &--small {
    height: var(--c--components--button--small-height);
    font-size: var(--c--components--button--small-font-size);
    padding: 0 0.75rem;

    &.c__button--icon-only {
      width: var(--c--components--button--small-height);
    }

    .c__button__icon,
    .c__button__icon * {
      font-size: var(--c--components--button--small-icon-font-size);
    }
  }

  &--nano {
    height: var(--c--components--button--nano-height);
    font-size: var(--c--components--button--nano-font-size);
    padding: 0 0.5rem;

    &.c__button--icon-only {
      width: var(--c--components--button--nano-height);
    }

    .c__button__icon,
    .c__button__icon * {
      font-size: var(--c--components--button--nano-icon-font-size);
    }
  }

  &--icon-only {
    padding: 0;
    justify-content: center;
  }

  &--with-icon--left,
  &--with-icon--right {
    gap: var(--c--globals--spacings--xxxs);
  }

  &--with-icon--left {
    padding: 0 var(--c--globals--spacings--s) 0 var(--c--globals--spacings--t);
  }

  &--with-icon--right {
    padding: 0 var(--c--globals--spacings--t) 0 var(--c--globals--spacings--s);
  }

  &--brand {
    @include button-variant("brand");
  }
  &--neutral {
    @include button-variant("neutral");
  }
  &--warning {
    @include button-variant("warning");
  }
  &--error {
    @include button-variant("error");
  }
  &--success {
    @include button-variant("success");
  }
  &--info {
    @include button-variant("info");
  }
}
