/* ==========================================================================
 * Toggle Button
 * ========================================================================== */

.mds-c-toggle-button {
  --mds-v-toggle-button__border-color: var(--mds-t-border-color--primary);
  --mds-v-toggle-button__border-color--active: var(
    --mds-t-border-color--accent
  );
  --mds-v-toggle-button__border-color--focus: var(--mds-t-border-color--accent);
  --mds-v-toggle-button__focus-shadow: var(
    --mds-t-border-color--accent-transparent
  );
  --mds-v-toggle-button__background--focus: var(
    --mds-t-background-color--secondary
  );
  --mds-v-toggle-button__color: var(--mds-t-text-color--primary);
  --mds-v-toggle-button__color-active: var(--mds-t-text-color--accent);
  --mds-v-toggle-button__color--muted: var(--mds-t-text-color--tertiary);
  --mds-v-toggle-button__icon-size: 4.75rem;

  border: 1px solid var(--mds-t-border-color--primary);
  border-radius: var(--mds-d-border-radius--default);
  box-shadow: none;
  color: var(--mds-v-toggle-button__color);
  cursor: pointer;
  display: flex;
  flex-direction: column;
  padding: var(--mds-d-spacing--med);
  transition:
    border 0.25s ease-out,
    box-shadow 0.25s ease-out;
  user-select: none;

  &--horizontal {
    flex-direction: row;

    /* so safari doesn't expand the height of the checkmark svg beyond its parent flexbox */
    &.mds-is-checked {
      & > svg {
        align-self: center;
        max-height: unset;
      }
    }
  }

  .mds-c-toggle-buttons--size-sm & {
    padding: var(--mds-d-spacing--xs);
  }

  &:hover:not(.mds-is-disabled):not(.mds-is-checked) {
    border-color: var(--mds-v-toggle-button__border-color);
    box-shadow: var(--mds-d-elevation--3);
  }

  &.mds-has-error {
    border-color: var(--mds-t-border-color--danger);
  }

  &.mds-is-focused {
    border-color: var(--mds-v-toggle-button__border-color--focus);
    box-shadow: 0 0 0 2px var(--mds-v-toggle-button__focus-shadow);
    outline: none; /* Remove default browser outline */
  }

  &.mds-is-checked {
    border-color: var(--mds-v-toggle-button__border-color--active);
    box-shadow: var(--mds-d-elevation--4);

    .mds-c-icon {
      color: var(--mds-v-toggle-button__color-active);
      opacity: 1;
    }

    &.focus-outline {
      border-color: var(--mds-d-border-color--primary);
      outline: 3px solid
        var(--mds-t-outline-color, var(--mds-t-text-color--accent));
      outline-offset: 3px;
    }
  }

  &.mds-is-disabled {
    cursor: default;
    opacity: 0.4;
    pointer-events: none;

    .mds-c-icon {
      opacity: 0.4;
    }
  }

  input {
    @mixin mds-m-screenreader-text;

    display: block;
    opacity: 0;
  }

  &__icon {
    text-align: center;

    &:not(:last-child) {
      margin-bottom: var(--mds-d-spacing--med);
    }

    .mds-c-toggle-button--vertical & {
      font-size: 4.75rem;
    }

    .mds-c-toggle-button--horizontal & {
      flex-shrink: 0;
      font-size: var(--mds-d-font-size--xl);
    }

    .mds-c-toggle-buttons--size-sm & {
      font-size: var(--mds-d-font-size--lg);
      line-height: 1;
      margin: calc(var(--mds-d-spacing--xs) * -1);
      padding: var(--mds-d-spacing--xs);
    }

    /* stylelint-disable-next-line */
    & > .mds-c-icon {
      color: var(--mds-t-text-color--tertiary);
      opacity: 0.5;
    }
  }

  &__content {
    display: flex;
    flex-direction: row;
  }

  &__check {
    align-self: center;
    flex-shrink: 0;
    margin-left: var(--mds-d-spacing--sm);
  }

  &__info {
    margin-left: var(--mds-d-spacing--sm);

    .mds-c-toggle-button--horizontal & {
      flex-grow: 1;
    }
  }

  &__label {
    @mixin mds-m-heading--size-med;

    .mds-c-toggle-buttons--size-sm & {
      @mixin mds-m-screenreader-text;
    }
  }

  &__sublabel {
    @mixin mds-m-text--size-sm;

    color: var(--mds-v-toggle-button__color--muted);

    .mds-c-toggle-buttons--size-sm & {
      @mixin mds-m-screenreader-text;
    }
  }
}
