

.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--secondary-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--secondary-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--secondary-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--secondary-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;

  // 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;

  // Styles for an icon in button
  --pf-c-button__icon--MarginRight: 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);

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

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

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

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

  &:focus,
  &.pf-m-focus {
    &::after {
      border-width: 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 {
      color: var(--pf-c-button--m-primary--hover--Color);
      background-color: var(--pf-c-button--m-primary--hover--BackgroundColor);
    }

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

    &:focus,
    &.pf-m-focus {
      color: var(--pf-c-button--m-primary--focus--Color);
      background-color: 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 {
      border-color: var(--pf-c-button--m-secondary--BorderColor);
    }

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

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

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

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

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

      &::after {
        border-color: 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 {
      border-color: var(--pf-c-button--m-tertiary--BorderColor);
    }

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

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

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

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

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

      &::after {
        border-color: 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 {
      color: var(--pf-c-button--m-danger--hover--Color);
      background-color: var(--pf-c-button--m-danger--hover--BackgroundColor);
    }

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

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

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

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

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

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

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

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

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

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

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

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

  // 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 {
      border-color: var(--pf-c-button--disabled--BorderColor);
    }
  }
}

// Add spacing to an icon in the button
.pf-c-button__icon {
  margin-right: var(--pf-c-button__icon--MarginRight);
}
