@switch-circle-diameter: 16px;
@switch-inner-padding: 2px;
@switch-width: 34px;
@switch-height: @switch-circle-diameter + @switch-inner-padding +
  @switch-inner-padding;
@switch-circle-translate-x: @switch-width - @switch-circle-diameter -
  @switch-inner-padding - @switch-inner-padding;
@switch-circle-wrapper-border-radius: @switch-height / 2;
@switch-transition: 0.4s;

.switch-input {
  position: relative;
  display: inline-block;
  width: @switch-width;
  height: @switch-height;

  input.invisible-input {
    opacity: 0;
    width: 0;
    height: 0;

    // span.switch -> circle "wrapper"
    & + span.switch {
      background-color: @ol-blue-gray-4;
      position: absolute;
      cursor: pointer;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      transition: @switch-transition;
      border-radius: @switch-circle-wrapper-border-radius;
    }

    // span.switch::before is the circle itself
    & + span.switch::before {
      position: absolute;
      content: '';
      height: @switch-circle-diameter;
      width: @switch-circle-diameter;
      left: @switch-inner-padding;
      bottom: @switch-inner-padding;
      background-color: @white;
      transition: @switch-transition;
      border-radius: 50%;
    }

    &:checked + span.switch {
      background-color: @ol-green;
    }

    // when input is checked, move circle to the right
    &:checked + span.switch::before {
      transform: translateX(@switch-circle-translate-x);
    }
  }

  &.disabled {
    input.invisible-input + span.switch {
      background-color: @gray-light;
    }
  }
}
