$toggleWidth: $sizeL * 1.5;
$toggleHeight: $sizeM * 1.25;
$buttonOffset: 2px;
$buttonHeight: $toggleHeight - ($buttonOffset * 2);
$buttonWidth: $toggleWidth * 0.75 - ($buttonOffset * 2);

.vuiToggle {
  position: relative;
  display: inline-block;
  width: $toggleWidth;
  height: $toggleHeight;
}

.vuiToggle__input {
  opacity: 0;
  width: 0;
  height: 0;

  &:checked + .vuiToggle__button {
    background-color: var(--vui-color-primary-shade);
  }

  &:focus-visible + .vuiToggle__button {
    outline: 2px solid rgba(var(--vui-color-primary-shade-rgb), 0.75);
    outline-offset: 2px;
  }

  &:checked + .vuiToggle__button:before {
    transform: translateX($toggleWidth - $buttonWidth - ($buttonOffset * 2));
  }
}

.vuiToggle__button {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: var(--vui-color-medium-shade);
  transition: $transitionSpeed;
  border-radius: $buttonHeight;
  box-shadow: inset rgba(0, 0, 0, 0.1) 0px 2px 2px;

  &:before {
    position: absolute;
    content: "";
    height: $buttonHeight;
    width: $buttonWidth;
    left: $buttonOffset;
    bottom: $buttonOffset;
    background-color: var(--vui-color-empty-shade);
    transition: $transitionSpeed;
    border-radius: $buttonHeight;
  }
}
