# M2 UI Gallery Delta Matrix

> **Evidence record — not current product guidance.** Use the [documentation index](../../../README.md)
> for current guidance. The canonical visual contract is the [Editor Design System](../../design-system.md),
> with architecture in [ADR 0049](../../../adr/0049-penpot-led-editor-visual-system.md).

This matrix distinguishes correctable production drift from deliberate differences between an
authored Penpot mock and a truthful interactive editor. The direct PNG is the visual reference;
the SVG is used to inspect numeric child geometry because it does not embed Source Sans Pro.

| Area | Penpot reference | Production/gallery truth | Classification | Evidence/state |
|------|------------------|--------------------------|----------------|----------------|
| Materials canvases | 620 x 539 and 420 x 735 | Exact presets render the shared `editor_ui` components | Required match | Geometry/unit tests pass; fresh paired gallery captures and full-editor primitive captures at 620/420 pass |
| Renderer canvases | 760 x 1233 and 480 x 828 | Exact gallery presets use shared renderer/component chrome | Required match | Fresh paired gallery captures cover both widths; the rebuilt full editor now has managed static-renderer captures at 760/480 |
| Renderer hierarchy | 50 px component header, 40 px array header, 84/60 px entry headers, 38 px properties heading, and 50 px indexed-material heading | The gallery and full editor call the same `editor_ui::renderer` view-model/chrome functions | Resolved structural drift | Focused checks pass and the fresh full-editor static renderer shows the same hierarchy without the former duplicate slot presentation |
| Renderer slot states | Full primary slot, compact secondary slot, explicit unassigned drop target, and collapsed sibling renderers | The shared material panel supports a full header with collapsed parameters and a first-class empty thumbnail/Choose Material action | Resolved structural drift | Fresh 760/480 gallery pairs show all states without gallery-only material cards |
| Scalar geometry | 6 px inset, 93.8/160.3 px track, 6 px gap, 33 px number | Same exported child coordinates at 620/420 | Resolved drift | Focused tests and 620 overlay pass |
| Scalar sample value | Text reads `0.72`; thumb is positioned near 0.55 | Thumb position is computed from the displayed/runtime value | Intentional semantic delta | Keep truthful 0.72 normalization |
| ORM channels | ORM selected while AO, Roughness, and Metallic sample glyphs all read G | Canonical ORM is AO=R, Roughness=G, Metallic=B | Intentional semantic delta | Runtime/schema invariant and fixture test |
| Material preview | Authored static sample sphere | Gallery uses a deterministic fixture approximation; full editor uses the real typed thumbnail | Intentional content delta | Full-editor thumbnail was observed pending and then resolved in place without layout movement |
| Texture identity | Mock fields use generic/synthetic asset art | Ready project textures show their typed thumbnail without a redundant generic icon | Intentional product delta | Texture-field test passes |
| Borders/rasterization | Browser-rendered SVG strokes can antialias across pixel boundaries | egui uses deterministic inside strokes | Renderer-level delta | Do not alter semantic colors or geometry to mimic browser antialiasing |
| Typography | Direct PNG preserves Source Sans Pro | Production bundles Source Sans Pro Regular/Bold and maps explicit 400/700 families | Required match | Font/type-role tests and fresh gallery/full-editor captures pass |
| Difference metric | Raw per-pixel comparison includes all sample and raster deltas | Latest Materials 620 diagnostic: mean 7.41, max 231, 22.8% of pixels above 8 | Diagnostic only | Must be interpreted through this matrix, never used alone for acceptance |
| Runtime reload | Not applicable to the design mock | Theme and material fixture JSON reload without rebuild/restart | Framework requirement | Focused reload tests pass |
| Rebuild/restart | Not applicable to the design mock | Focused managed build reports bounded progress; replacement launches before last-good exits; failures preserve last-good | Framework requirement | Eight workflow tests pass |

## Remaining acceptance

- Primitive Materials pass full-editor 620/420 and deep-scroll containment. The rebuilt static
  renderer passes the native 760/480 hierarchy and containment check. The current checked-in scene
  has no placed skinned actor, so skinned presentation remains proven through the shared production
  component, renderer gallery fixture, focused tests, and editor compile rather than a separate
  native actor capture.
- The broad `penpot-material-inspector` scenario intentionally remains incomplete because picker,
  color, invalid-drop, dirty/save/relaunch, and broken-reference assertions are outside this gallery
  framework boundary. Its fixture was restored byte-for-byte after the two managed integration
  captures.
- Attach the paired reference/native evidence to #68 at the next authorized tracker synchronization.
  Keep #68, #59, #65, and M2 in Acceptance-in-progress; this framework slice is evidence for the
  next visual pass, not permission to publish or close the milestone.

## Fresh local evidence — 2026-07-18 10:20 UTC

- Materials 620: `ui-gallery-materials-620-20260718T102015Z.png`
  (`cc918c567522204f9dc8d8f179e24e49ba802fe03a81d3a65fa1e5b6058623c9`)
- Materials 420: `ui-gallery-materials-420-20260718T102015Z.png`
  (`70dea081df62ab38d589ea559d73a6e8d3685f26fee54dbc87cc8682ebed8474`)
- Renderer 760: `ui-gallery-renderer-760-20260718T102015Z.png`
  (`724d9cedf25753de9315993f9e6ea656949f54e5b54c44f1f8ab46f1db88b0d6`)
- Renderer 480: `ui-gallery-renderer-480-20260718T102015Z.png`
  (`f90c3f72b757649f5c11362ed6d776e5e85288751ffd74f08f8cc386f162fc4f`)
- Full-editor primitive Inspector 620, 420, and deep-scroll captures are recorded under the same
  local `.codex/evidence/` store with timestamp `20260718T095413Z`.
- Full-editor static renderer 480: `penpot-material-inspector-20260718T104504Z.png`
  (`3c5c6585822afffa6c29994aa757adf645c81d653e369e059bbee08c26c1aa26`)
- Full-editor static renderer 760: `penpot-material-inspector-20260718T104550Z.png`
  (`95ef7366d1671ac494cb5fd389d3332d51a0d5636cd0a02f66e9faf0399eb82f`)
