.checkbox { --size: 16px; --border-width: 1px; 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: var(--border-width) solid var(--color-border-primary); background-color: var(--color-bg-primary); transition: 0.15s ease-out; transition-property: background-color, border-color; cursor: pointer; /* Increase clickable area, prevents misclicks and covers gap between control and label */ &::after { content: ''; position: absolute; --spread: calc(var(--border-width) + var(--form-field-label-gap, 8px)); inset-inline: calc(-1 * var(--spread)); inset-block: calc(-0.75 * var(--spread)); } &:disabled { background: var(--color-bg-tertiary); border: none; 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: none; background-color: var(--color-text-disabled); &::before { background-color: var(--color-bg-tertiary); } } &::before { opacity: 1; } } &:focus-visible { outline: var(--outline-focus-default); outline-offset: 2px; } }