Files
aetherbound-guild/docs/runtime/M52_RECRUIT_CARD_COMPONENT_CONTRACT.md
T

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.