# Shared UI theme package contract Discovery: `/ui/art/packages/catalog.json` on the Images application origin. Each catalog entry links to a version-pinned descriptor and ZIP under `neutral-base-v1//`. These URLs contain original public base artwork only and support anonymous cross-origin GET, with no credentials. Provider output, reference uploads and personal batch data are not published here. Modules should pin a descriptor URL and its `release` hash, verify the ZIP SHA-256, and extract it inside their own asset directory. `manifest.json` is the shared contract for Web, Unity, Design and other consumers: - `geometryId`: identifies the compatible shape/layout contract. - `assets[].id`: stable part key, for example `button.compact.raised`. - `atlas.page` and `atlas.rect`: page ID and top-left rectangle in source pixels. - `logicalSize` and `density`: native UI size; these rasters use density 2. - `slice`: left/top/right/bottom bands in source pixels. Keep corners fixed. - `render.mode`: nine-slice, fixed-aspect, tile or tile-x. - `componentBindings`: the 78 pinned Design component recipes and asset IDs. - `pages[].file` and `sha256`: page bytes to verify and cache together with the manifest. Do not mix the earlier production-plan rectangles with this package. Swap a theme only when its geometry ID and required asset IDs match the current consumer. Text, game-specific icons, layout and interaction remain separate. The runtime version is selected by the consuming module; a catalog update does not silently replace a pinned package. Convert coordinate conventions only in the consumer's rendering adapter. The optional `consumer.mjs` adapter loads a public descriptor, verifies the manifest and atlas hashes, and returns the manifest plus `readAtlas(id)` and `downloadArchive()`. Copy it into the consumer or import it from the package service. It sends no credentials. Non-JavaScript modules consume the same JSON and PNG contract with their standard HTTP and SHA-256 libraries. ## Restyled themes Open `/ui/art/base/restyle.html`. One click starts 13 sequential Images edit jobs from the base atlas pages plus zero or more UI style references. A style description or references are required. Original source atlases are never overwritten. The browser persists owner-scoped run receipts, reference inputs and stable per-page idempotency keys before submission. Closing the page pauses admission; explicitly resume after reloading. Existing jobs continue in Images. An uncertain submission is replayed only on Resume with the same request/key; failed/cancelled jobs are not automatically retried. For provider transport, the unscaled atlas is placed at (0,0) in a transparent 1024 or 2048 square. Exact canvas preservation is required. Only the added padding is cropped afterward. The original alpha is reapplied and its difference from provider alpha is reported. Missing interior artwork rejects the page. This does not prove internal alignment: every page requires visual review before export. The exported ZIP includes all 160 crops, 13 atlases, the unchanged geometry/Design bindings and provenance. It excludes reference images and credentials. Import this ZIP into the consuming module's asset store. It is not automatically published to the public base catalog.