.pf-c-button {
  // Component
  --pf-c-button--PaddingTop: var(--pf-global--spacer--form-element);
  --pf-c-button--PaddingRight: var(--pf-global--spacer--md);
  --pf-c-button--PaddingBottom: var(--pf-global--spacer--form-element);
  --pf-c-button--PaddingLeft: var(--pf-global--spacer--md);
  --pf-c-button--LineHeight: var(--pf-global--LineHeight--md);
  --pf-c-button--FontWeight: var(--pf-global--FontWeight--semi-bold);
  --pf-c-button--FontSize: var(--pf-global--FontSize--md);
  --pf-c-button--BorderRadius: var(--pf-global--BorderRadius--sm);
  --pf-c-button--BorderColor: transparent;
  --pf-c-button--BorderWidth: var(--pf-global--BorderWidth--sm);

  // Hover state variables
  --pf-c-button--hover--BorderWidth: var(--pf-global--BorderWidth--md);

  // Focus state variables
  --pf-c-button--focus--BorderWidth: var(--pf-global--BorderWidth--md);

  // Active state variables
  --pf-c-button--active--BorderWidth: var(--pf-global--BorderWidth--md);

  // Disabled state variables
  --pf-c-button--disabled--Color: var(--pf-global--disabled-color--100);
  --pf-c-button--disabled--BackgroundColor: var(--pf-global--disabled-color--200);
  --pf-c-button--disabled--BorderColor: transparent;

  // Primary btn
  --pf-c-button--m-primary--BackgroundColor: var(--pf-global--primary-color--100);
  --pf-c-button--m-primary--Color: var(--pf-global--Color--light-100);
  --pf-c-button--m-primary--hover--BackgroundColor: var(--pf-global--primary-color--200);
  --pf-c-button--m-primary--hover--Color: var(--pf-global--Color--light-100);
  --pf-c-button--m-primary--focus--BackgroundColor: var(--pf-global--primary-color--200);
  --pf-c-button--m-primary--focus--Color: var(--pf-global--Color--light-100);
  --pf-c-button--m-primary--active--BackgroundColor: var(--pf-global--primary-color--200);
  --pf-c-button--m-primary--active--Color: var(--pf-global--Color--light-100);

  // Secondary btn
  --pf-c-button--m-secondary--BackgroundColor: transparent;
  --pf-c-button--m-secondary--BorderColor: var(--pf-global--primary-color--100);
  --pf-c-button--m-secondary--Color: var(--pf-global--primary-color--100);
  --pf-c-button--m-secondary--hover--BackgroundColor: transparent;
  --pf-c-button--m-secondary--hover--BorderColor: var(--pf-global--primary-color--100);
  --pf-c-button--m-secondary--hover--Color: var(--pf-global--primary-color--100);
  --pf-c-button--m-secondary--focus--BackgroundColor: transparent;
  --pf-c-button--m-secondary--focus--BorderColor: var(--pf-global--primary-color--100);
  --pf-c-button--m-secondary--focus--Color: var(--pf-global--primary-color--100);
  --pf-c-button--m-secondary--active--BackgroundColor: transparent;
  --pf-c-button--m-secondary--active--BorderColor: var(--pf-global--primary-color--100);
  --pf-c-button--m-secondary--active--Color: var(--pf-global--primary-color--100);

  // Tertiary btn
  --pf-c-button--m-tertiary--BackgroundColor: transparent;
  --pf-c-button--m-tertiary--BorderColor: var(--pf-global--Color--100);
  --pf-c-button--m-tertiary--Color: var(--pf-global--Color--100);
  --pf-c-button--m-tertiary--hover--BackgroundColor: transparent;
  --pf-c-button--m-tertiary--hover--BorderColor: var(--pf-global--Color--100);
  --pf-c-button--m-tertiary--hover--Color: var(--pf-global--Color--100);
  --pf-c-button--m-tertiary--focus--BackgroundColor: transparent;
  --pf-c-button--m-tertiary--focus--BorderColor: var(--pf-global--Color--100);
  --pf-c-button--m-tertiary--focus--Color: var(--pf-global--Color--100);
  --pf-c-button--m-tertiary--active--BackgroundColor: transparent;
  --pf-c-button--m-tertiary--active--BorderColor: var(--pf-global--Color--100);
  --pf-c-button--m-tertiary--active--Color: var(--pf-global--Color--100);

  // danger btn
  --pf-c-button--m-danger--BackgroundColor: var(--pf-global--danger-color--100);
  --pf-c-button--m-danger--Color: var(--pf-global--Color--light-100);
  --pf-c-button--m-danger--hover--BackgroundColor: var(--pf-global--danger-color--200);
  --pf-c-button--m-danger--hover--Color: var(--pf-global--Color--light-100);
  --pf-c-button--m-danger--focus--BackgroundColor: var(--pf-global--danger-color--200);
  --pf-c-button--m-danger--focus--Color: var(--pf-global--Color--light-100);
  --pf-c-button--m-danger--active--BackgroundColor: var(--pf-global--danger-color--200);
  --pf-c-button--m-danger--active--Color: var(--pf-global--Color--light-100);

  // Link btn
  --pf-c-button--m-link--Color: var(--pf-global--link--Color);
  --pf-c-button--m-link--hover--Color: var(--pf-global--link--Color--hover);
  --pf-c-button--m-link--focus--Color: var(--pf-global--link--Color--hover);
  --pf-c-button--m-link--active--Color: var(--pf-global--link--Color--hover);
  --pf-c-button--m-link--disabled--BackgroundColor: transparent;
  --pf-c-button--m-link--m-inline--hover--TextDecoration: var(--pf-global--link--TextDecoration--hover);
  --pf-c-button--m-link--m-inline--hover--Color: var(--pf-global--link--Color--hover);


  // Plain btn
  --pf-c-button--m-plain--Color: var(--pf-global--Color--200);
  --pf-c-button--m-plain--hover--Color: var(--pf-global--Color--100);
  --pf-c-button--m-plain--focus--Color: var(--pf-global--Color--100);
  --pf-c-button--m-plain--active--Color: var(--pf-global--Color--100);
  --pf-c-button--m-plain--disabled--Color: var(--pf-global--disabled-color--200);
  --pf-c-button--m-plain--disabled--BackgroundColor: transparent;

  // Input Button
  --pf-c-button--m-control--after--BorderWidth: var(--pf-global--BorderWidth--sm);
  --pf-c-button--m-control--after--BorderTopColor: var(--pf-global--BorderColor--300);
  --pf-c-button--m-control--after--BorderRightColor: var(--pf-global--BorderColor--300);
  --pf-c-button--m-control--after--BorderBottomColor: var(--pf-global--BorderColor--200);
  --pf-c-button--m-control--after--BorderLeftColor: var(--pf-global--BorderColor--300);
  --pf-c-button--m-control--hover--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);
  --pf-c-button--m-control--hover--after--BorderBottomColor: var(--pf-global--active-color--100);
  --pf-c-button--m-control--active--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);
  --pf-c-button--m-control--active--after--BorderBottomColor: var(--pf-global--active-color--100);
  --pf-c-button--m-control--focus--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);
  --pf-c-button--m-control--focus--after--BorderBottomColor: var(--pf-global--active-color--100);
  --pf-c-button--m-control--m-expanded--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);
  --pf-c-button--m-control--m-expanded--after--BorderBottomColor: var(--pf-global--active-color--100);
  --pf-c-button--m-control--disabled--after--BorderBottomColor: var(--pf-global--BorderColor--300);
  --pf-c-button--m-control--disabled--BackgroundColor: transparent;

  // Styles for an icon in button
  --pf-c-button__icon--MarginRight: var(--pf-global--spacer--xs);
  --pf-c-button__text--icon--MarginLeft: var(--pf-global--spacer--xs);

  position: relative;
  display: inline-block;
  padding: var(--pf-c-button--PaddingTop) var(--pf-c-button--PaddingRight) var(--pf-c-button--PaddingBottom) var(--pf-c-button--PaddingLeft);
  font-size: var(--pf-c-button--FontSize);
  font-weight: var(--pf-c-button--FontWeight);
  line-height: var(--pf-c-button--LineHeight);
  text-align: center;
  white-space: nowrap;
  user-select: none;
  border: 0;
  border-radius: var(--pf-c-button--BorderRadius);

  .pf-c-button__icon {
    margin-right: var(--pf-c-button__icon--MarginRight);
  }

  .pf-c-button__text + .pf-c-button__icon {
    margin-right: 0;
    margin-left: var(--pf-c-button__text--icon--MarginLeft);
  }

  &::after {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    content: "";
    border: var(--pf-c-button--BorderWidth) solid;
    border-color: var(--pf-c-button--BorderColor);
    border-radius: var(--pf-c-button--BorderRadius);
  }

  &:hover,
  &.pf-m-hover {
    text-decoration: none;

    &::after {
      --pf-c-button--BorderWidth: var(--pf-c-button--hover--BorderWidth);
    }
  }

  &:active,
  &.pf-m-active {
    &::after {
      --pf-c-button--BorderWidth: var(--pf-c-button--active--BorderWidth);
    }
  }

  &:focus,
  &.pf-m-focus {
    &::after {
      --pf-c-button--BorderWidth: var(--pf-c-button--focus--BorderWidth);
    }
  }

  &.pf-m-block {
    display: block;
    width: 100%;
  }

  // Primary buttons
  &.pf-m-primary {
    color: var(--pf-c-button--m-primary--Color);
    background-color: var(--pf-c-button--m-primary--BackgroundColor);

    &:hover,
    &.pf-m-hover {
      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--hover--Color);
      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--hover--BackgroundColor);
    }

    &:active,
    &.pf-m-active {
      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--active--Color);
      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--active--BackgroundColor);
    }

    &:focus,
    &.pf-m-focus {
      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--focus--Color);
      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--focus--BackgroundColor);
    }
  }

  // Secondary buttons
  &.pf-m-secondary {
    color: var(--pf-c-button--m-secondary--Color);
    background-color: var(--pf-c-button--m-secondary--BackgroundColor);

    &::after {
      --pf-c-button--BorderColor: var(--pf-c-button--m-secondary--BorderColor);
    }

    &:hover,
    &.pf-m-hover {
      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--hover--Color);
      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--hover--BackgroundColor);

      &::after {
        --pf-c-button--BorderColor: var(--pf-c-button--m-secondary--hover--BorderColor);
      }
    }

    &:active,
    &.pf-m-active {
      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--active--Color);
      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--active--BackgroundColor);

      &::after {
        --pf-c-button--BorderColor: var(--pf-c-button--m-secondary--active--BorderColor);
      }
    }

    &:focus,
    &.pf-m-focus {
      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--focus--Color);
      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--focus--BackgroundColor);

      &::after {
        --pf-c-button--BorderColor: var(--pf-c-button--m-secondary--focus--BorderColor);
      }
    }
  }

  // Tertiary buttons
  &.pf-m-tertiary {
    color: var(--pf-c-button--m-tertiary--Color);
    background-color: var(--pf-c-button--m-tertiary--BackgroundColor);

    &::after {
      --pf-c-button--BorderColor: var(--pf-c-button--m-tertiary--BorderColor);
    }

    &:hover,
    &.pf-m-hover {
      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--hover--Color);
      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--hover--BackgroundColor);

      &::after {
        --pf-c-button--BorderColor: var(--pf-c-button--m-tertiary--hover--BorderColor);
      }
    }

    &:active,
    &.pf-m-active {
      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--active--Color);
      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--active--BackgroundColor);

      &::after {
        --pf-c-button--BorderColor: var(--pf-c-button--m-tertiary--active--BorderColor);
      }
    }

    &:focus,
    &.pf-m-focus {
      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--focus--Color);
      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--focus--BackgroundColor);

      &::after {
        --pf-c-button--BorderColor: var(--pf-c-button--m-tertiary--focus--BorderColor);
      }
    }
  }

  // Danger buttons
  &.pf-m-danger {
    color: var(--pf-c-button--m-danger--Color);
    background-color: var(--pf-c-button--m-danger--BackgroundColor);

    &:hover,
    &.pf-m-hover {
      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--hover--Color);
      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--hover--BackgroundColor);
    }

    &:active,
    &.pf-m-active {
      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--active--Color);
      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--active--BackgroundColor);
    }

    &:focus,
    &.pf-m-focus {
      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--focus--Color);
      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--focus--BackgroundColor);
    }
  }

  // Link buttons
  &.pf-m-link {
    color: var(--pf-c-button--m-link--Color);

    &:not(.pf-m-inline) {
      &:hover,
      &.pf-m-hover {
        --pf-c-button--m-link--Color: var(--pf-c-button--m-link--hover--Color);
      }

      &:active,
      &.pf-m-active {
        --pf-c-button--m-link--Color: var(--pf-c-button--m-link--active--Color);
      }

      &:focus,
      &.pf-m-focus {
        --pf-c-button--m-link--Color: var(--pf-c-button--m-link--focus--Color);
      }
    }

    &:disabled,
    &.pf-m-disabled {
      background-color: var(--pf-c-button--m-link--disabled--BackgroundColor);
    }

    &.pf-m-inline {
      display: inline;
      padding: 0;

      &:hover {
        --pf-c-button--m-link--Color: var(--pf-c-button--m-link--m-inline--hover--Color);

        text-decoration: var(--pf-c-button--m-link--m-inline--hover--TextDecoration);
      }
    }
  }

  &.pf-m-control {
    &::after {
      --pf-c-button--BorderWidth: var(--pf-c-button--m-control--after--BorderWidth);
      --pf-c-button--BorderColor: var(--pf-c-button--m-control--after--BorderTopColor) var(--pf-c-button--m-control--after--BorderRightColor) var(--pf-c-button--m-control--after--BorderBottomColor) var(--pf-c-button--m-control--after--BorderLeftColor);

      border-radius: initial;
    }

    &:hover,
    &.pf-m-hover {
      &::after {
        --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--hover--after--BorderBottomColor);

        border-bottom-width: var(--pf-c-button--m-control--hover--after--BorderBottomWidth);
      }
    }

    &:active,
    &.pf-m-active {
      &::after {
        --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--active--after--BorderBottomColor);

        border-bottom-width: var(--pf-c-button--m-control--active--after--BorderBottomWidth);
      }
    }

    &:focus,
    &.pf-m-focus {
      &::after {
        --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--focus--after--BorderBottomColor);

        border-bottom-width: var(--pf-c-button--m-control--focus--after--BorderBottomWidth);
      }
    }

    &.pf-m-expanded {
      &::after {
        --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--m-expanded--after--BorderBottomColor);

        border-bottom-width: var(--pf-c-button--m-control--m-expanded--after--BorderBottomWidth);
      }
    }

    &:disabled,
    &.pf-m-disabled {
      background-color: var(--pf-c-button--m-control--disabled--BackgroundColor);

      &::after {
        --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--disabled--after--BorderBottomColor);
      }
    }
  }

  // Disabled buttons
  // These styles need to go after the button types because they need to override some of the type styling
  &:disabled,
  &.pf-m-disabled {
    color: var(--pf-c-button--disabled--Color);
    pointer-events: none;
    background-color: var(--pf-c-button--disabled--BackgroundColor);

    &::after {
      --pf-c-button--BorderColor: var(--pf-c-button--disabled--BorderColor);
    }
  }

  // Icon buttons
  &.pf-m-plain {
    color: var(--pf-c-button--m-plain--Color);

    &:hover,
    &.pf-m-hover {
      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--hover--Color);
    }

    &:active,
    &.pf-m-active {
      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--active--Color);
    }

    &:focus,
    &.pf-m-focus {
      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--focus--Color);
    }

    &:disabled,
    &.pf-m-disabled {
      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--disabled--Color);

      background-color: var(--pf-c-button--m-plain--disabled--BackgroundColor);
    }
  }
}

// RedHat Font overrides
@include pf-m-redhat-font {
  .pf-c-button {
    --pf-c-button--FontWeight: var(--pf-global--FontWeight--normal);
  }
}
