# M52 CandidateLedger Component Contract `ABGM52CandidateLedger` is the second independently reviewable M52 module. It is a warm adventurer ledger, not a page controller: it receives candidate data and emits one `action_requested` signal. ## Ownership tree ```text ABGM52CandidateLedger (Control) ├── LedgerShell ├── LedgerHeader ├── PortraitModule ├── IdentityModule ├── FactCopy ├── TraitModule ├── CostModule └── ActionButton ``` ## Layout rules - The shell and action use shared market chrome; the page must not add a second panel or a second button style around this component. - Portrait, name, trait and cost remain independent clipped modules. Text is engine-rendered and never baked into generated art. - The fact copy is limited to profession plus one short detail sentence; long descriptions belong to a later full-screen detail state. - The action occupies one bottom dock with a 48px minimum hit target. ## Responsive rules The parent supplies a normalized slot. The ledger background may stretch, while portrait and icon content preserve aspect ratio. All dynamic labels clip or wrap inside their local bounds; no label may paint over the neighboring slot. ## Acceptance - `m52_candidate_ledger_component_test.gd` verifies the tree, clipping and non-overlapping slots. - `m52_candidate_ledger_component_capture.gd` produces a 420x560 normal-render evidence image. - Owner visual review is required before Market integration.