a.ControlButton:hover {
  color: var(--btn-fg-color, var(--control-fg-color));
}

.ControlButton {
  cursor: var(--btn-cursor, pointer);
  appearance: none;
  user-select: none;
  /* Places the border on the inside allowing for borders to not impact button sizes */
  box-sizing: border-box;
  transition: 180ms cubic-bezier(0.65, 0, 0.35, 1);
  transition-property: color, fill, background-color, border-color, box-shadow;

  display: inline-flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  min-width: max-content;
  -webkit-user-select: none;
  text-decoration-line: none;
  gap: var(--control-gap);
  padding: 0 var(--control-padding);
  font-size: var(--control-font-size);
  font-weight: var(--btn-font-weight, var(--control-button-weight));
  height: var(--control-size);
  border-radius: var(--control-radius);

  border: var(--btn-border-size, 1px) solid var(--btn-border-color, var(--control-border-color));
  background-color: var(--btn-bg-color, var(--control-bg-color));
  color: var(--btn-fg-color, var(--control-fg-color));


  &:hover {
    background-color: var(--btn-bg-color--hover, var(--control-bg-color--hover));
  }

  &[data-truncate="true"] {
    min-width: auto;
    max-width: var(--truncate-width, 100%);

    &>[data-component="contents"] {

      &>[data-component="text"] {
        overflow: hidden;
        text-overflow: ellipsis;
      }
    }
  }

  &[data-state="active"] {
    background-color: var(--btn-bg-color--active, var(--control-bg-color--active));
  }

  &[aria-expanded="true"] {
    background-color: var(--btn-bg-color--active, var(--control-bg-color--active));
  }

  &:disabled,
  &[data-state="disabled"],
  &[data-state="loading"] {
    --btn-cursor: not-allowed;
    background-color: var(--btn-bg-color--disabled, var(--control-bg-color--disabled));
    color: var(--btn-fg-color--disabled, var(--control-fg-color--disabled));
    border-color: var(--btn-border-color--disabled, var(--control-border-color--disabled));
  }

  &[data-state="loading"] {
    --btn-cursor: progress;
  }

  &>[data-component="contents"] {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: auto;
    display: grid;
    grid-template-areas: "leadingVisual text trailingVisual";
    grid-template-columns: min-content minmax(0px, auto) min-content;
    align-items: center;
    align-content: center;
    justify-content: center;

    &[data-icon="true"]>[data-component="leadingVisual"] {
      margin-right: 0;
    }

    &>[data-component="loading"] {
      align-self: center;
      justify-self: center;
    }

    &>[data-component="loading"],
    &>[data-component="text"] {
      grid-row: text;
      grid-column: text;
    }

    &>[data-component="leadingVisual"] {
      grid-row: leadingVisual;
      grid-column: leadingVisual;
      margin-right: var(--control-gap);
    }

    &>[data-component="trailingVisual"] {
      grid-row: trailingVisual;
      grid-column: trailingVisual;
      margin-left: var(--control-gap);
    }

    &>[data-component="text"] {
      line-height: calc(1.428571);
      white-space-collapse: collapse;
      text-wrap-mode: nowrap;
    }

    &>[data-component="loading"]+[data-component="text"] {
      visibility: hidden;
    }
  }

  [data-component="ButtonChip"] {
    font-size: 85%;
    display: inline-block;
    padding: 0.25em 0.55em;
    font-weight: 500;
    line-height: 1;
    border-radius: 20px;
    background-color: var(--btn-chip-bg-color, var(--control-surface-color));
  }

  [data-component="loading"],
  [data-component="leadingVisual"],
  [data-component="trailingVisual"],
  [data-component="trailingAction"] {
    color: var(--btn-visual-color, var(--control-icon-color));
    line-height: 0.9;

    svg {
      display: inline-block;
      vertical-align: bottom;
      overflow: visible;
    }
  }

  [data-component="trailingAction"] {
    margin-right: calc(var(--control-gap) / -2);
  }

  /* Sizing */
  &[data-size="sm"] {
    --control-font-size: var(--control-small-font-size);
    --control-size: var(--control-small-size);
    --control-gap: var(--control-small-gap);
    --control-padding: var(--control-small-padding);
  }

  &[data-size="lg"] {
    --control-size: var(--control-large-size);
  }

  &[data-block="true"] {
    width: 100%;
    width: -moz-available;          /* WebKit-based browsers will ignore this. */
    width: -webkit-fill-available;  /* Mozilla-based browsers will ignore this. */
    width: stretch;
  }

  /* Alignment */
  &[data-alignment="start"]>[data-component="contents"] {
    justify-content: flex-start;
  }

  &[data-alignment="end"]>[data-component="contents"] {
    justify-content: flex-end;
  }
}
