2.0 KiB
2.0 KiB
M52 RecruitCard Component Contract
This is the first independently reviewable UI module in the M52 Market reconstruction. It is intentionally not mounted by Market yet.
Ownership tree
ABGM52RecruitCard (Button)
├── VisualLayer
│ ├── CardShell
│ ├── ProfessionRibbon
│ ├── PortraitModule
│ │ ├── PortraitFrameOuter
│ │ ├── PortraitViewport (clip_contents=true)
│ │ │ ├── PortraitFrameInner
│ │ │ ├── PortraitImage (keep-aspect-covered)
│ │ │ └── PortraitShadow
│ │ ├── IdentityModule
│ │ ├── TraitModule
│ │ └── CostModule
├── StateLayer
│ └── SelectedBorder
└── HitArea
Content rules
- The portrait keeps its aspect ratio and is center-cropped inside a fixed viewport. It cannot paint over the frame or adjacent copy.
- The name is a single line with ellipsis inside
NamePlate. - The trait is a short, wrapped line inside
TraitModule. - Availability and cost are one line inside
CostModule; the cost must remain complete in the card's minimum play size. - Dynamic text is engine-owned. Generated art supplies material and ornament, never names, prices, or fake glyphs.
State rules
normal, hover, pressed, selected, disabled, and focus are state
layers over the same geometry. State changes must not move the portrait,
identity, trait, or cost modules.
Responsive rules
The card root receives a normalized slot from its parent. Children use local normalized slots and local clipping. Background and paper may stretch; the portrait and icons keep aspect; text is never geometrically stretched.
Acceptance
- Component tree and slot boundaries pass
m52_recruit_card_component_test.gd. - HTML showroom:
docs/prototype/m52_components/recruit_card/index.html. - Owner review is still required before this component is integrated into the Market page.