Measured inventory first: the market modules authored their labels at raw token
sizes while the view uses the canvas text scale, leaving module labels near 6.5
physical pixels at 760, and the card, trait and cost surfaces were drawn in
fixed pixels against proportional label slots. Every module now takes the view's
canvas type scale; the card band and price strip are fractions of the card size
that cover their slots; the trait chip and cost strip are proportional chrome
with the coin anchored in the authored socket; ledger labels move to ink on
parchment and the ledger keeps the full availability string while the card row
carries only the amount.
The first header value started at the authored slot edge, which now sits on the
parchment band's corner bracket, so the title overlapped the trim. Header
labels are clamped to the band face (edge fraction plus a small pad) in both
locales. The header settings control was still a flat angular utility plate;
it now uses a compact member of the same hand-drawn plate family with the
engine-rendered settings glyph, so the top row carries no vector chrome.
Information surfaces were still flat drawn chrome while the commands were
already painted, so the page mixed two material languages. The warning rows,
status card, summary card and header now use a hand-drawn parchment panel, the
command dock is a painted wooden rail, and the warning severity marks use
enamel badges. All four use the same fraction-based nine-patch as the command
plates and import with mipmaps so the wide aspect ratios stay clean at 760.
The warning stack also carried no severity in its data, so all three rows fell
back to one colour; the visual fixture now matches the production
["warning","notice","info"] facts and the view falls back to that sequence
by row order instead of a single default.
The command row was still flat vector chrome, which read as a different
material language than the hand-drawn world. The four commands now use a
painted wood-and-gold plate (secondary, primary, disabled variants) drawn
through a fraction-based nine-patch so the frame keeps its proportions at
every viewport, with the icon and label slots kept inside the plate face.
The raw generations and the nine-patch normalisation are recorded under
docs/runtime/m57_command_plate_provenance/.
Stop reusing one plaque for every region. The header is now a compartmented
band with dividers, icons and left-aligned values; the bottom is a carved dock
band with four independent command plates (icon above label, wider green
primary) instead of buttons inside a long frame; the warning stack is three
cards with severity icons; the summary is a parchment card with shape markers,
values and pip rows; and typography uses explicit tracking and embolden so
titles, values and captions read as different ranks. View contract names and
z-order are unchanged.
The shared scaled-texture and ground-shadow caches held image RIDs past
teardown, which the strict attempt gate correctly reported as leaked
allocations. Clear them when the Readiness view leaves the tree.
The five header values now follow the authored master order (page title,
snapshot state, contract name, pressure, Company line) with the real contract
id instead of a placeholder phrase, and the duplicate rail title is removed.
Command buttons use the generated teal action plate with light labels instead
of the flat vector wood block.
Replace the page-local flat navy rails, translucent slabs and pill buttons with
the shared asset material, re-add the rail title, ground the party on one
baseline with a contact shadow and ink name plates, and move value/warning text
to a high-contrast ink-on-parchment pair. View contract node names and
z-order are unchanged; M37 readiness view contract passes.
Add runtime/ui/shared/asset_chrome.gd: large parchment/wood surfaces use the
approved generated components with ornament-safe asymmetric nine-patch
margins, while small controls use the size-independent market_chrome vector
material so decorative pixels are never stretched into bands. Record the rule
in M52_SHARED_UI_RULES.md before another page reuses it.