Every 4:3 flag from flag-icons as a full-resolution, 16-colour JPEG XL icon. Detailed emblems stay sharp, and every flag also has an editable jxl-art DSL sketch. No SVG or raster fallback is used in the gallery.
1.42 MiB source archive → 217 KiB JXL pack: 85.1% smaller. Comparing only the 271 unpacked 4:3 artworks, the payload drops from 1.91 MiB of SVG to 175 KiB of JXL, a 91.0% reduction.
The first full-colour lossless JXL pass was 610 KiB. Keeping the full 192 x 144 geometry but reducing the palette cuts 71.3%, and the largest flag is now 2.4 KiB instead of 13.3 KiB.
Complex coats of arms stay as full-resolution palette residuals instead of blocky prediction-tree tiles. The jxl-art links remain editable DSL sketches; hand-tuned spline versions can replace them independently, as the India link already does.
The source inventory comes from flag-icons: 249 ISO entries and all 22 regional, organization, and special entries in its country.json. Chromium renders the source at 192 x 144, then reduces it to a 16-colour palette without reducing the geometry.
build_pack.py pins the source revision, checks the full inventory, losslessly encodes every palette icon, and verifies every decoded pixel. generate_art_links.py also creates and validates a reduced-grid DSL tree and editable jxl-art URL for every flag.