Requirement
Product icons — the marks that stand for a product in a launcher, a switcher, a nav, or a card — render only from the approved product-icon family. A new mark enters the family by being produced through the Icon Generator and verified before use, never by being drawn ad hoc in a component.
The icon container is part of the mark. It does not take a per-product background colour or gradient, and the icon itself carries no wordmark, photograph, shadow, or gloss.
Rationale
Product icons are read as a set. Their value comes from being mutually consistent — the same optical weight, the same corner treatment, the same container — so a user can tell at a glance that two marks name two products in one family. A single ad-hoc icon breaks the set for every icon beside it, which is why the control is L1 and why it governs the container as well as the glyph.
Per-product background colours are the most common breach: they feel like a helpful distinction and they destroy the family's coherence, because the container stops being shared chrome and becomes per-product decoration.
Why this is hybrid
Static-check half. Resolving an icon reference against the approved product-icon set
is mechanical, and so are two of the three failure conditions: a background colour or
gradient declared on an icon container, and a box-shadow or gloss gradient inside the
mark. That half is planned in #159 as checks/identity-scan.py; no script exists yet.
Judgment half. Whether an inline mark is a product icon — rather than a general interface icon, which this control does not govern — is a reading of what the element stands for. So is deciding that a mark is a regeneration of an existing family member rather than a legitimately new one. The evaluator holds both.
Passes when
- Every product icon resolves to a member of the approved product-icon family.
- New marks were produced through the Icon Generator and verified before entering the set.
- Icon containers share one treatment across products, with no per-product background colour or gradient.
Fails when
- A product icon is drawn, traced, or regenerated in component source.
- An icon container takes a per-product background colour or gradient.
- A mark contains a wordmark, a photograph, a shadow, or a gloss highlight.
Evaluator guidance
Flag:
- Inline-drawn marks used where a product icon belongs.
- Per-product container backgrounds or gradients in a launcher, switcher, or card grid.
- Product icons whose optical weight or corner treatment differs visibly from the rest of the family.
Do not flag:
- General interface icons — the icon set used for actions and navigation is not the product-icon family and is out of scope here.
- Logos and lockups, which IDN-1 governs.
- Third-party product icons supplied by that party.
- A documented waiver recording why a non-family mark is necessary — this is an L1 control
with
waiver: documented.