Icon lab

Every power-up, drawn exactly as the HUD draws it — same markup, same style.css, same sizes. Generated art shows where a file exists; everything else falls back to its emoji, which is the same rule the game uses. Nothing here is a mock-up, so what you see is what a player sees.
The row at the top is the real test: these are judged at 22–30px, next to each other, over moving terrain.

Back to menu
circle — a stacking passive triangle — an Active trinket square — gear you wear

At play size, on the panel

Full size (30px) and compact (22px), on the HUD's own background.

Full — 30px
Compact — 22px

Over the game's own grass

The panel is translucent and sits over the map. A dark icon on a dark chip can look fine on this page and vanish in play.

On terrain

On the ground, as the map draws them

The outline says what a thing IS before its icon is legible, and without spending a colour — colour is already carrying rarity out there. Circle = a stacking passive · triangle = an Active you press · square = gear you wear. Same language as the chips above and the item dock. This is drawn by the REAL renderer (slotOutline + _icon in render/renderer.js), on the game's own grass, at the tile size a phone actually uses — so if it reads here it reads in play.

Passives — circle
Trinkets — triangle
Gear — square

Only the generated art

Just the icons that have real art, side by side — the set-consistency check.

Trinkets — the Active slot

Triangles, so the slot is readable from the shape alone before you have read a word. Passives are circles; gear is square.

Full size, on a checkerboard

The checker is how you tell a true cut-out from dark art on a dark card: if you can see the squares through it, the alpha is real.