# Spacing Every gap, pad, and offset lands on a multiple of 4. The scale reaches from tight form fields to generous hero blocks, and components read it as `--bd-s-*` variables instead of fixed pixel values.

A 4-base rhythm

Spacing encodes relationship. Blocks that belong together sit closer, independent blocks sit farther apart. A single 4px base keeps that signal legible: two gaps either match or differ by a step a reader can perceive.

Scale structure

Twelve steps run 4, 8, 12, 16, 20, 24, 32, 40, 56, 72, 96, and 128 px, exposed as `--bd-s-1` through `--bd-s-12`. Small steps handle control internals, mid steps handle grouping, large steps frame sections and hero blocks.

Applying the scale

Space a group of blocks with the parent container's `gap`, not with the children's own margins. Use semantic HTML and local flex or grid CSS with `--bd-s-*` tokens. One container owns each rhythm.

Proximity ramp

Pick the gap between two blocks by how related they are. Tight (`--bd-s-1`) joins an element to its own satellite, such as a label and its control. Grouped (`--bd-s-3`) separates peers in one group. Related (`--bd-s-4`) separates headingless peer blocks. Distinct (`--bd-s-6`) separates sub-blocks within one surface. Zone (`--bd-s-8`) separates independent top-level sections and is the whitespace ceiling — when a firmer break is needed, add a boundary such as a `Divider` or a `Card` rather than more space.

Density and targets

Keep controls far enough apart that a pointer or a focus ring cannot land ambiguously between them. Grouped is the practical floor between adjacent interactive rows; Tight is reserved for an element and its own satellite. Density changes the scale a component consumes, so verify hit areas after switching density.

Tokens

`BD_TOKENS.space` holds the numeric scale, and `bdBuildCssVars` emits it as `--bd-s-1` through `--bd-s-12`. Reference the variables in component styles; read the numbers only when code needs the same values as CSS. Compose rhythm with semantic HTML and `--bd-s-*` tokens. Use [Section](/docs/components/section), [Divider](/docs/components/divider), or [Card](/docs/components/card) when a stable public frame is needed.