columns accepts either a positive integer for the
repeat(N, 1fr) shortcut or any grid-template-columns value
("200px 1fr", "repeat(auto-fit, minmax(120px, 1fr))").
Bare attribute syntax works for both forms: columns="3" and
[columns]="3" produce identical output.
CSS gap between cells. The default reads the --cngx-gap-md override
hook and falls back to the density scale (--cngx-space-md), so a root
[data-density] swap rescales the grid; any CSS gap value is accepted.