/*! Switches */ .switch { font-size: var(--switch-font-size); position: relative; & input { position: absolute; height: 1px; width: 1px; background: none; border: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; padding: 0; & + label { position: relative; min-width: calc(var(--switch-height) * 2); border-radius: var(--switch-border-radius); height: var(--switch-height); line-height: var(--switch-height); display: inline-block; cursor: pointer; outline: none; user-select: none; vertical-align: middle; text-indent: calc(var(--switch-height) * 2 + .5rem); } & + label::before, & + label::after { content: ''; position: absolute; top: 0; left: 0; width: calc(var(--switch-height) * 2); bottom: 0; display: block; } & + label::before { right: 0; background-color: var(--switch-bg-color); border-radius: var(--switch-border-radius); transition: var(--switch-speed) all; } & + label::after { top: var(--switch-thumb-spacing); left: var(--switch-thumb-spacing); width: calc(var(--switch-height) - var(--switch-thumb-spacing) * 2); height: calc(var(--switch-height) - var(--switch-thumb-spacing) * 2); border-radius: var(--switch-thumb-border-radius); background-color: var(--switch-thumb-color); transition: var(--switch-speed) margin; } &:checked + label::before { background-color: var(--switch-color); } &:checked + label::after { margin-left: var(--switch-height); } &:focus + label::before { outline: none; box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color) alpha(50%)); } &:disabled + label { opacity: .5; cursor: not-allowed; } } & + .switch { margin-left: 1rem; } /* Sizes */ &.switch-xs { font-size: var(--switch-font-size-xs); & input { & + label { min-width: calc(var(--switch-height-xs) * 2); height: var(--switch-height-xs); line-height: var(--switch-height-xs); text-indent: calc(var(--switch-height-xs) * 2 + .5rem); } & + label::before, & + label::after { width: calc(var(--switch-height-xs) * 2); } & + label::after { width: calc(var(--switch-height-xs) - var(--switch-thumb-spacing) * 2); height: calc(var(--switch-height-xs) - var(--switch-thumb-spacing) * 2); } &:checked + label::after { margin-left: var(--switch-height-xs); } } } &.switch-sm { font-size: var(--switch-font-size-sm); & input { & + label { min-width: calc(var(--switch-height-sm) * 2); height: var(--switch-height-sm); line-height: var(--switch-height-sm); text-indent: calc(var(--switch-height-sm) * 2 + .5rem); } & + label::before, & + label::after { width: calc(var(--switch-height-sm) * 2); } & + label::after { width: calc(var(--switch-height-sm) - var(--switch-thumb-spacing) * 2); height: calc(var(--switch-height-sm) - var(--switch-thumb-spacing) * 2); } &:checked + label::after { margin-left: var(--switch-height-sm); } } } &.switch-lg { font-size: var(--switch-font-size-lg); & input { & + label { min-width: calc(var(--switch-height-lg) * 2); height: var(--switch-height-lg); line-height: var(--switch-height-lg); text-indent: calc(var(--switch-height-lg) * 2 + .5rem); } & + label::before, & + label::after { width: calc(var(--switch-height-lg) * 2); } & + label::after { width: calc(var(--switch-height-lg) - var(--switch-thumb-spacing) * 2); height: calc(var(--switch-height-lg) - var(--switch-thumb-spacing) * 2); } &:checked + label::after { margin-left: var(--switch-height-lg); } } } &.switch-xl { font-size: var(--switch-font-size-xl); & input { & + label { min-width: calc(var(--switch-height-xl) * 2); height: var(--switch-height-xl); line-height: var(--switch-height-xl); text-indent: calc(var(--switch-height-xl) * 2 + .5rem); } & + label::before, & + label::after { width: calc(var(--switch-height-xl) * 2); } & + label::after { width: calc(var(--switch-height-xl) - var(--switch-thumb-spacing) * 2); height: calc(var(--switch-height-xl) - var(--switch-thumb-spacing) * 2); } &:checked + label::after { margin-left: var(--switch-height-xl); } } } /* Variations */ &.switch-secondary { & input { background-color: var(--switch-bg-color-secondary); & + label::after { background-color: var(--switch-thumb-color-secondary); } & + label::before { background-color: var(--switch-bg-color-secondary); } &:checked + label::before { background-color: var(--switch-color-secondary); } &:focus + label::before { box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color-secondary) alpha(50%)); } } } &.switch-success { & input { background-color: var(--switch-bg-color-success); & + label::after { background-color: var(--switch-thumb-color-success); } & + label::before { background-color: var(--switch-bg-color-success); } &:checked + label::before { background-color: var(--switch-color-success); } &:focus + label::before { box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color-success) alpha(50%)); } } } &.switch-info { & input { background-color: var(--switch-bg-color-info); & + label::after { background-color: var(--switch-thumb-color-info); } & + label::before { background-color: var(--switch-bg-color-info); } &:checked + label::before { background-color: var(--switch-color-info); } &:focus + label::before { box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color-info) alpha(50%)); } } } &.switch-warning { & input { background-color: var(--switch-bg-color-warning); & + label::after { background-color: var(--switch-thumb-color-warning); } & + label::before { background-color: var(--switch-bg-color-warning); } &:checked + label::before { background-color: var(--switch-color-warning); } &:focus + label::before { box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color-warning) alpha(50%)); } } } &.switch-danger { & input { background-color: var(--switch-bg-color-danger); & + label::after { background-color: var(--switch-thumb-color-danger); } & + label::before { background-color: var(--switch-bg-color-danger); } &:checked + label::before { background-color: var(--switch-color-danger); } &:focus + label::before { box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color-danger) alpha(50%)); } } } &.switch-light { & input { background-color: var(--switch-bg-color-light); & + label::after { background-color: var(--switch-thumb-color-light); } & + label::before { background-color: var(--switch-bg-color-light); } &:checked + label::before { background-color: var(--switch-color-light); } &:focus + label::before { box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color-light) alpha(50%)); } } } &.switch-dark { & input { background-color: var(--switch-bg-color-dark); & + label::after { background-color: var(--switch-thumb-color-dark); } & + label::before { background-color: var(--switch-bg-color-dark); } &:checked + label::before { background-color: var(--switch-color-dark); } &:focus + label::before { box-shadow: 0 0 0 var(--switch-focus-width) color(var(--switch-color-dark) alpha(50%)); } } } }