57 lines
2.0 KiB
Markdown
57 lines
2.0 KiB
Markdown
# 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
|
|
|
|
```text
|
|
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.
|