:root {
    --button-width: 55px;
    --button-height: 30px;
    --toggle-diameter: 25px;
    --button-toggle-offset: calc((var(--button-height) - var(--toggle-diameter)) / 2);
    --toggle-shadow-offset: 10px;
    --toggle-wider: 28px;
    --color-grey: #E9E9E9;
    --color-green: #43b05c;
}

label.toggle {
    display: inherit;
}

label.toggle span {
    display: inline-block;
    width: var(--button-width);
    height: var(--button-height);
    background-color: var(--color-grey);
    border-radius: calc(var(--button-height) / 2);
    position: relative;
    transition: .1s all ease-in-out;
}

label.toggle span::after {
    content: '';
    display: inline-block;
    width: var(--toggle-diameter);
    height: var(--toggle-diameter);
    background-color: #fff;
    border-radius: calc(var(--toggle-diameter) / 2);
    position: absolute;
    top: var(--button-toggle-offset);
    transform: translateX(var(--button-toggle-offset));
    box-shadow: var(--toggle-shadow-offset) 0 calc(var(--toggle-shadow-offset) * 4) rgba(0, 0, 0, .10);
    transition: .2s all ease-in-out;
}



label.toggle input[type="checkbox"]:checked + span {
    background-color: var(--color-green);
}

label.toggle input[type="checkbox"]:checked + span::after {
    transform: translateX(calc(var(--button-width) - var(--toggle-diameter) - var(--button-toggle-offset)));
    box-shadow: calc(var(--toggle-shadow-offset) * -1) 0 calc(var(--toggle-shadow-offset) * 4) rgba(0, 0, 0, .10);
}

label.toggle input[type="checkbox"] {
    display: none;
}

label.toggle input[type="checkbox"]:active + span::after {
    width: var(--toggle-wider);
}

label.toggle input[type="checkbox"]:checked:active + span::after {
    transform: translateX(calc(var(--button-width) - var(--toggle-wider) - var(--button-toggle-offset)));
}

*, *:hover {
    user-select: none;
    -webkit-tap-highlight-color: transparent;
}