.checkbox {
--size: 16px;
appearance: none;
box-sizing: border-box;
position: relative;
display: inline-flex;
margin: 0;
width: var(--size);
height: var(--size);
vertical-align: top;
border-radius: calc(var(--size) / 4);
border: 1px solid var(--color-border-primary);
background-color: var(--color-bg-primary);
transition: 0.15s ease-out;
transition-property: background-color, border-color;
cursor: pointer;
@supports not (appearance: none) {
accent-color: var(--color-bg-brand-base);
}
&:disabled {
background: var(--color-bg-secondary);
cursor: not-allowed;
}
/* Tick icon */
&::before {
content: '';
opacity: 0;
background-color: var(--color-text-on-brand-base);
display: block;
margin: auto;
width: calc(var(--size) * 0.625);
height: calc(var(--size) * 0.5);
mask-image: url("data:image/svg+xml;utf8,");
mask-position: center;
mask-size: 100%;
mask-repeat: no-repeat;
}
/* 'Minus' icon */
&:indeterminate::before {
width: calc(var(--size) * 0.5);
height: calc(var(--size) * 0.125);
mask-image: url("data:image/svg+xml;utf8,");
}
&:checked,
&:indeterminate {
background-color: var(--color-bg-brand-base);
border-color: var(--color-bg-brand-base);
&:disabled {
border-color: var(--color-bg-disabled);
background: var(--color-bg-disabled);
color: var(--color-text-on-disabled);
}
&::before {
opacity: 1;
}
}
&:focus-visible {
outline: var(--outline-focus-default);
outline-offset: 2px;
}
}