Replaces the emoji glyphs (💬🛡️💸🎮🧰🎧⚙️✨) in the category grid with
dedicated SVG icons under /static/icons/cat-<slug>.svg, following the
same visual family as the sibling .x marks (theseus, sirius, ariadne,
pithos, aegis): 12-radius dark square + acid-green mark, legible at
16 px tab-icon size and 40 px grid size.
Designs chosen to not blur with the Silent Mode product icons also
rendered on the site:
cat-communication speech bubble + three dots (not an envelope — too
close to the Hephaestus letter imagery elsewhere)
cat-privacy shield + checkmark (DISTINCT from aegis.svg's
shield+chevron, so category + listing don't collide)
cat-wallets stacked coins + B serif (hints at the BCH coin)
cat-games stylised controller (d-pad + two action buttons)
cat-devtools code brackets < / > (reads as "code" at 16 px
where a wrench/hammer blurs with the Utilities gear)
cat-media play triangle in a circle (equally "player" and
"publish/broadcast")
cat-utilities gear with hollow centre (less visual weight than
the Media circle; the two side-by-side don't
crowd each other)
cat-other sparkle burst + two smaller sparkles (sibling of
sirius.svg's 4-point mark, extras so the two don't
look identical)
pages-browse.js: CATEGORIES[].icon is now the path to the SVG, not an
emoji string. The three places the icon rendered — grid card, category
hero, and the inline chip on listing detail — all now use <img> at the
size they need (40, 56, 14 respectively). The CSS entry
`.cat .ico` loses the font-size + grayscale (text styling) and gains
width/height for the image plus a tiny hover rotation that matches the
existing lift transform.
Also: when a listing has no `icon` of its own, the detail page's icon
slot now falls back to the category's SVG (centered + padded) instead
of a plain 📦 emoji, so the detail hero always has a vector icon.