diff --git a/docs/DESIGN_SYSTEM.md b/docs/DESIGN_SYSTEM.md
index 569e61e..47d1ba9 100644
--- a/docs/DESIGN_SYSTEM.md
+++ b/docs/DESIGN_SYSTEM.md
@@ -1222,3 +1222,19 @@ Use explicit textual tier capacity wherever Gear tier is summarized: `1 MOD
SLOT` for T0 and `2 MOD SLOTS` for T1/T2. On narrow screens the identity band
and preview controls stack, while repeated quality data may scroll rather than
compressing numeric controls below usable sizes.
+
+### Deferred game-data icons
+
+Game-data icons are optional enrichment, never a blocker for creating or
+proposing a canonical item. Upload fields must state that an icon may be
+contributed later and show the shared `/missing-item-icon.svg` artwork when no
+upload exists. Registries, relationship rails, and builder selection controls
+use the same placeholder instead of initials, empty boxes, or ad hoc glyphs.
+
+Treat the placeholder as an explicit incomplete-data state: keep its subdued
+SHD styling and useful alternative text where the surrounding item name is not
+already available. Do not persist placeholder metadata or copy the placeholder
+into per-item storage. A later contributor replaces it through the normal icon
+upload proposal, preserving the canonical record and audit history. The upload
+itself retains all transparent-format, size, SVG-safety, focus, drag/drop, and
+paste validation requirements.
diff --git a/docs/architecture.md b/docs/architecture.md
index a8e0568..22a135c 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -313,3 +313,11 @@ served by the validated `/icons/game-data/[type]/[id]` endpoint with immutable
cache headers and MIME sniffing disabled. ISAC save actions process files
before mutation, apply upload or removal after record validation, and include
only safe icon metadata—not image bytes—in their audit snapshots.
+
+Icon metadata is optional. Canonical records and contributor proposals may be
+created without an upload, allowing values and artwork to be contributed in
+separate dependency-safe changes. Missing artwork is represented at render
+time by the static `/missing-item-icon.svg` asset through the shared
+`ItemIcon` component; the placeholder is never inserted into
+`game_data_icons`. A later edit or proposal can attach the real icon without
+recreating or replacing the canonical item.
diff --git a/src/app.css b/src/app.css
index 0aed3bc..78a3887 100644
--- a/src/app.css
+++ b/src/app.css
@@ -196,4 +196,5 @@
.weapon-mod-exotic-quality{min-height:58px;display:flex;align-items:center;gap:8px;padding:7px;border:1px solid #74552a;border-left:2px solid var(--quality-high-end);background:#18150d}.weapon-mod-exotic-quality .game-icon{width:34px;height:34px}.weapon-mod-exotic-quality span{display:grid;gap:3px}.weapon-mod-exotic-quality b{color:var(--quality-high-end);font-size:7px;letter-spacing:.8px}.weapon-mod-exotic-quality small{color:#a89568;font-size:5px;letter-spacing:.35px}
.weapon-mod-exotic-toggle>span{width:44px;min-height:42px;padding:0}.weapon-mod-exotic-toggle input{position:absolute;width:1px;height:1px;margin:0;opacity:0;pointer-events:none}.weapon-mod-exotic-toggle .game-icon{width:30px;height:30px}.weapon-mod-compatibility .segmented-choice>div{height:48px}.weapon-mod-compatibility .segmented-choice .game-icon{width:34px;height:34px}.weapon-mod-exotic-section{margin-top:10px;padding:9px;border:1px solid #74552a;border-left:2px solid var(--quality-high-end);background:#0d1011}.weapon-mod-exotic-attributes{display:grid;gap:6px;margin-top:7px}.weapon-mod-exotic-attributes>div{display:grid;grid-template-columns:30px minmax(240px,1fr) 150px 150px 30px;align-items:end;gap:6px;padding:6px;border:1px solid var(--shd-border);background:#101314}.weapon-mod-exotic-attributes>div>strong{height:100%;display:grid;place-items:center;background:#171b1c;color:var(--quality-high-end);font-size:8px}.weapon-mod-exotic-attributes label{display:grid;gap:4px;color:var(--shd-text-muted);font-size:5px;font-weight:900;letter-spacing:.5px}.weapon-mod-exotic-attributes input{height:32px;margin:0;padding:0 6px}.weapon-mod-exotic-attributes>div>button{height:32px;border:1px solid #563734;background:#1d1212;color:var(--shd-danger);cursor:pointer}.weapon-mod-exotic-attributes>div>button:disabled{opacity:.3;cursor:not-allowed}@media(max-width:700px){.weapon-mod-exotic-attributes>div{grid-template-columns:30px 1fr}.weapon-mod-exotic-attributes label,.weapon-mod-exotic-attributes>div>button{grid-column:2}.weapon-mod-compatibility .segmented-choice>div{height:auto;grid-template-columns:repeat(3,1fr)}.weapon-mod-compatibility .segmented-choice span{min-height:50px}}
.gear-mod-identity{display:grid;grid-template-columns:minmax(320px,1fr) minmax(560px,1.5fr);align-items:end;gap:8px}.gear-mod-identity>.field{margin:0}.gear-mod-primary-types>div{flex-wrap:wrap}.gear-mod-row{min-width:1120px;grid-template-columns:1.2fr 1fr .9fr 1fr .55fr .55fr .3fr}.gear-mod-row>span{display:flex;align-items:center;gap:6px}.gear-mod-row>span small{color:var(--shd-text-muted)}@media(max-width:900px){.gear-mod-identity{grid-template-columns:1fr}}@media(max-width:700px){.gear-mod-primary-types>div{display:grid;grid-template-columns:1fr 1fr}}
+.missing-item-icon{opacity:.7;filter:saturate(.75)}.icon-upload-preview .missing-item-icon{width:66px;height:66px;opacity:.62}.registry-icon-identity>.missing-item-icon,.registry-icon-rail .missing-item-icon{padding:2px;border:1px dashed #424849;background:#101314}.builder-picker .missing-item-icon,.builder-radio-grid .missing-item-icon{opacity:.66}
diff --git a/src/lib/components/BuilderPicker.svelte b/src/lib/components/BuilderPicker.svelte
index 61a04b0..d716cc3 100644
--- a/src/lib/components/BuilderPicker.svelte
+++ b/src/lib/components/BuilderPicker.svelte
@@ -1,4 +1,6 @@
+
+
diff --git a/src/routes/builds/[slug]/+page.server.ts b/src/routes/builds/[slug]/+page.server.ts
index 1a1ca26..e76ab89 100644
--- a/src/routes/builds/[slug]/+page.server.ts
+++ b/src/routes/builds/[slug]/+page.server.ts
@@ -19,7 +19,7 @@ export const load: PageServerLoad = async ({ params, cookies }) => {
const [gear, weapons, chips, protocols, brands] = await Promise.all([
(await database.prepare('SELECT id,name,slot,tier FROM gear')).all(),
(await database.prepare('SELECT id,name,category,is_exotic FROM weapons')).all(),
- (await database.prepare('SELECT id,name,quality FROM skill_chip_sets')).all(),
+ (await database.prepare('SELECT id,name FROM skill_chip_sets')).all(),
(await database.prepare('SELECT id,name,quality FROM os_protocols')).all(),
(await database.prepare('SELECT id,name FROM brand_sets')).all()
]);
diff --git a/src/routes/isac/brands/+page.svelte b/src/routes/isac/brands/+page.svelte
index 721bd66..eb638d4 100644
--- a/src/routes/isac/brands/+page.svelte
+++ b/src/routes/isac/brands/+page.svelte
@@ -3,6 +3,7 @@
import RegistryPagination from '$lib/components/RegistryPagination.svelte';
import KpiFilters from '$lib/components/KpiFilters.svelte';
import IconUploadField from '$lib/components/IconUploadField.svelte';
+ import ItemIcon from '$lib/components/ItemIcon.svelte';
import SearchableAssignment from '$lib/components/SearchableAssignment.svelte';
let { data, form } = $props();
type Effect = { pieces_required: number; stat_attribute_id: string; value: number };
@@ -58,7 +59,7 @@
Upload only relevant game-data icons or assets you are permitted to share. Images must be safe for a general audience and must not contain harassment, explicit material, personal information, watermarks, advertisements, or misleading edits. Prefer clean transparent PNG, WebP, or SVG assets that remain legible at builder-icon sizes.
Icons are optional when contributing item data. If you do not have appropriate artwork, save the item without one; SHD.build will use a missing-icon placeholder and another contributor can add the icon later. When uploading, use only relevant game-data icons or assets you are permitted to share. Images must be safe for a general audience and must not contain harassment, explicit material, personal information, watermarks, advertisements, or misleading edits. Prefer clean transparent PNG, WebP, AVIF, or SVG assets that remain legible at builder-icon sizes.