- Alternating up/down equilateral triangles filling full boundary - buffer(-rib_w) for uniform rib spacing - buffer(-fillet_r).buffer(+fillet_r) for rounded corners - Clipped to actual boundary polygon - Sandbox 2: 39 pockets (40mm), Sandbox 1: 112 pockets (60mm)