Checkbox and Radio share a shell: 64px min-height, 12px 16px padding, white fill, 1px --input-border-color, radius --input-border-radius, overflow: hidden, hover --gray-6, checked --blue-3 with a --blue-1 border. In both, the native input is display: none and the <label> is the control, so the whole row is the hit target. Checkbox small is 48px at 6px/16px. Disabled is opacity 0.5 with pointer events off, and error is suppressed while disabled — :not(.disabled).error in the source. Radio's row geometry applies only to a string label: pass a node and you get the shell with no padding, gap or min-height, which is how the large tile fills it.
The compact variant is borderless and stateless by design: 8px padding, a 1px transparent border, and no hover, no checked background and no min-height. Only the icon changes. Its label is body4 in --gray-3 and leads with the icon, the reverse of Checkbox's h5 label followed by the icon. The transparent border exists so the error state has something to colour. Both components swap a regular square for a solid check-square in --blue-1 when checked — one of the few places the code imports the solid face.
The circle is 12px outer with a 6px inner dot that fades in by opacity, never a border swap; hideCircle removes it. The title is written as 14px/24px/600 literally in the source — the h5 metrics, not the token. A leading icon takes --blue-1 and an asymmetric 0 18px 0 10px margin. The Recommended badge is absolute at the top-right with radius 0 var(--input-border-radius) 0 3px, so it mitres into the row's corner. The large tile is --blue-1 unchecked and --green-1 checked, dropping its border and scaling to 1.02; backgroundColor fills only the 60px round icon well. RadioGroup gaps: 8px around the group label, 16px between rows.
Dealer-controlled: --form-input-border-radius → --input-border-radius shapes every Checkbox and Radio row, and mitres the Recommended badge with it. Nothing else on these rows is dealer-facing: the checked blue-3, the blue-1 border and the tile's blue-1/green-1 pair are widget-owned, so a dealer's brand colour never reaches a selection state. Design accordingly: selection reads as the widget's blue, not the dealer's.