Time-lapse z-stacks of scanning fluorescent images were acquired using a Leica SP8 confocal microscope equipped with a 100X oil objective, recording the crystallization process of positively charged 375 nm and negatively charged 440 nm PFPMA particles in 40% DMSO at 30-minute intervals. The two BODIPY dyes were excited at 500 nm and 580 nm, with emission signals collected at 510-520 nm and 590-600 nm, respectively. The z-step size was set to 0.07 µm, allowing for 5 scans per particle to achieve precise tracking. To prevent dye bleaching during extended scanning, the lowest possible laser power (typically around 5% of the maximum) was used. The coordinates of oppositely charged particles were estimated from grayscale images of separated channels in the z-stack data using the TrackPy Python package. These coordinates were imported into Blender, where sizes based on scanning electron microscopy were assigned to recreate the structure in 3D. X-ray diffraction (XRD) patterns shown in Extended Data Fig. were subsequently generated using Mercury software from the particle coordinates.