A page-bottom region containing partner logos, regulatory disclaimers, and helper links.
Keep — all findings resolved
Rebuilt on node
4227:11068 in the 2026 Working File as Alignment × LogoType × Label × Description, authored as a curated seven-variant set. The per-partner axes are collapsed into one enum, property and layer naming follow the guidelines throughout, and every dimension is a whole pixel. Five questions the original assessment left open are settled by decision: the raster partner marks, the baked disclaimer, Alignment staying a property, Footer remaining a component, and the variant selection being curated rather than partial. All four DS Health traits pass; the only item still open is Code Connect, blocked until the native library exists.In Context
The Footer sits at the bottom of lending/savings/investment flows — carrying regulatory disclosures, partner attribution, and a link to more information on the Help Center.
Live Preview
Properties
Variant
Alignment
Description
Partner Logos
DS Health
Reusable
Pass
Works as the page-bottom region across the flows that need a regulatory disclaimer. The seven authored variants are a curated set matching real screens rather than a partial matrix, so every supported arrangement is available without detaching.
Self-contained
Pass
Owns its disclaimer copy, partner marks and layout. The baked legal text is deliberate — fixed wording that must not drift per instance.
Consistent
Pass
Property names follow §1, the partner axes are collapsed into one
LogoType enum, Label reads True/False, and every layer carries a semantic name.Composable
Pass
Partner marks come from
Logos - Footer instances so a logo change updates from one source, and the component drops into any page bottom without configuration.Behavior
| State | iOS | Android | Figma Property | Notes |
|---|---|---|---|---|
| Default | Yes | Yes | 7 variants | The only modeled state — footer is informational. |
| Link pressed | N/A | N/A | Not modeled | "GLoan/GCredit/GSave on Help Center" should be a Text Button / Link instance with its own pressed state. |
| Link disabled | N/A | N/A | Not modeled | Informational link — rarely disabled in practice. |
Issues
- Code Connect mappings not registered. Blocked — no native library exists yet. C7 · Code Connect Linkability
- Property names cleaned up. v2.0: Rebuilt on node
4227:11068in the 2026 Working File. The spaced, jargon-laden property names are gone — the schema is nowAlignment×LogoType×Label×Description, all PascalCase per §1. (C2 · Rename) C2 · Variant & Property Naming - Three partner axes collapsed into one enum. v2.0:
LogoType = Group | Single | Nonereplaces the separate per-partner axes, which is what drove most of the original cartesian blow-up. (C2 · Property) C2 · Variant & Property Naming -
hasDescriptionrenamed toDescription. v2.1: The property carries three values —Default,None,Link— so ahas*prefix was wrong on two counts: §2 reserves it for true/false booleans, andLinkdescribes a content type rather than presence. Now a plain enum. (C2 · Rename) C2 · Variant & Property Naming - Layer naming cleaned up. v2.1:
container→FooterContentand#text→Disclaimer, so the layer names say what they hold. (C1) C1 · Layer Structure & Naming - Raster partner logos accepted. v2.1: Closed by owner decision — the partner marks stay as supplied raster assets inside
Logos - Footerinstances. Partner branding arrives as fixed artwork the DS does not control and may not redraw, so vectorising would mean recreating third-party marks. The instancing is the part that matters: a logo change updates from one source rather than per variant. (C6) C6 · Asset & Icon Quality - Baked disclaimer copy accepted. v2.1: Closed by owner decision — the regulatory disclaimer stays as text in the component rather than becoming a slot. It is legal copy with fixed wording, so making it freely editable per instance would invite exactly the drift the fixed wording exists to prevent. (C1) C1 · Layer Structure & Naming
-
Alignmentretained as a property. v2.1: Closed by owner decision — alignment stays on the component rather than moving to the consumer. The original assessment argued it is a layout concern; in practice the two alignments pair with different logo and label arrangements, so treating it as a component property keeps those pairings authored rather than left to each screen. (C4) C4 · Native Mappability - Footer confirmed as a component. v2.1: Closed by owner decision — Footer stays a DS component rather than becoming a screen-level composition. The regulatory disclaimer and partner marks are fixed content that must appear identically wherever they appear, which is precisely what a component guarantees and a composition does not. (Family) C4 · Native Mappability
-
Labelvalues normalised. v2.2: TheNovalue is renamedFalse, soLabelnow readsTrue/Falseconsistently across all seven variants. It maps cleanly to a SwiftBoolor KotlinBoolean. The property keeps the bare nameLabelrather than taking ahasprefix — worth revisiting only if the family standardises on verb-prefixed booleans. (C2 · Rename) C2 · Variant & Property Naming - Variant heights rounded. v2.3: All seven variants now measure whole pixels — 150, 182, 120, 116, 95, 108 and 80 — replacing the unrounded auto-layout results. The last outlier,
Alignment=Left, LogoType=Single, Label=False, Description=Link, went 115.751 → 116. Every dimension maps cleanly to a native layout value. (C4) C4 · Native Mappability - Variant selection confirmed curated. v2.3: Closed by owner decision — the seven authored variants are the curated set, not a partial fill of a 36-cell matrix. Each corresponds to a screen that exists: left-aligned footers carry no label,
LogoType=NoneandDescription=Defaulteach serve a single context. Unauthored combinations are deliberately unsupported rather than pending, so a consumer finding no variant for a pairing has the answer. (C2) C2 · Variant & Property Naming
Types
Default
DES DEV
Page-bottom region. Flip the Variant control to walk through every shipped layout (1–7), then override Alignment / Description / Partner Logos to compose your own.
Properties
Variant
Alignment
Description
Partner Logos
Properties
Variant 1
Alignment left
Description none
Partner logos powered-by
Colors
Surface #FFFFFF
Label #90A8D0
Description #6780A9
Link #005CE5
Layout
Width 360
Padding 24 all sides
Row gap (V1/V6) 16
Logo→logo gap 16
Logo size 18 tall (asset)
Typography
Label (Powered by) Proxima Soft Bold · 12 / 12 · +0.5 · #90A8D0
Disclaimer BarkAda Semibold · 12 / 18 · #6780A9
Link BarkAda Semibold · 12 / 18 · #005CE5
EBFooter("Powered by Fuse")
.ebDisclaimer("Regulatory disclaimer copy")
.ebHelpLink("Help center", destination: url) Variant 1 — Colors
Footer chrome palette: white surface with muted helper labels and an accent link.
| Role | Token | Default |
|---|---|---|
| Surface | footer/color/bg | #FFFFFF |
| Label | footer/color/label | #90A8D0 |
| Description | footer/color/description | #6780A9 |
| Link | footer/color/label-link | #005CE5 |
Property Mapping
| Figma Property | SwiftUI | Compose |
|---|---|---|
label: yes | no | poweredByLabel?: String | poweredByLabel: String? |
gcash x partner + with partner + grouped logos | partnerLogos?: .none | .single | .grouped | .gcashX | partnerLogos: EBPartnerLogos? |
| (baked in each variant) | partnerLogo slot | partnerLogo: Image? |
description: none | default | with link | disclaimer?: String | disclaimer: String? |
| (baked in each variant) | helpLink?: { label, action } | helpLink: EBHelpLink? |
alignment: left | center | (removed — consumer owns layout) | (n/a) |
Accessibility
| Requirement | iOS | Android |
|---|---|---|
| Logo alt text | Each partner logo must carry .accessibilityLabel("GCash") / .accessibilityLabel("CIMB"). | Each logo Image must supply contentDescription. |
| Help link role | Expose as Button with accessibility hint "Opens help center". | Wrap in Modifier.clickable with Role.Button semantics. |
| Minimum touch target | Help-link hit area ≥44×44pt. | Help-link hit area ≥48×48dp. |
| Reading order | Label → logos → disclaimer → help link. VoiceOver follows DOM order. | Same order — TalkBack follows composition order. |
| Disclaimer readability | Ensure Dynamic Type scales disclaimer text; do not clip at large sizes. | Support fontScale; wrap rather than truncate. |
Criteria Scorecard
| ID | Criterion | Status | Notes |
|---|---|---|---|
| C1 | Layer Structure & Naming | Requires Rework | Variant names spell out all 6 axes verbatim; layer names default-hug groups like "Logos - Footer Group" repeat across variants. |
| C2 | Variant & Property Naming | Requires Rework | Property names contain spaces (gcash x partner, grouped logos, with partner). Three axes describe the same thing. |
| C3 | Token Coverage | Ready | Spacing, bg, label, description, and link-label are all bound to main/footer/color/* and space/space-* tokens. Typography pulls Primary/Label/Fine, Secondary/Bold/Caption, and Secondary/Bold/Small Caption. |
| C4 | Native Mappability | Requires Rework | Disclaimer copy + help link live inside variants — not props. Alignment is a consumer concern. Partner logos are baked assets, not a slot. |
| C5 | Interaction State Coverage | Requires Rework | Help-center link is styled text, not a Text Button instance — no pressed/focused/disabled states. |
| C6 | Asset & Icon Quality | Requires Rework | CIMB, Fuse, PDAX, Bayad logos ship as raster <img> fills. Need vector source + a Partner Logos set. |
| C7 | Code Connect Linkability | Not Mapped | Cannot map until property names normalize, drawn text becomes slots, and partner logos resolve via a Slot. |
Variants Inventory (7 total)
Six boolean-ish axes combine to ~96 theoretical shapes — only 7 built. Each shipped variant solves a specific product flow (GLoan, GCredit, GSave, PDAX, Bayad).
| # | Node | description | label | gcash x partner | alignment | with partner | grouped logos | Use case |
|---|---|---|---|---|---|---|---|---|
| 1 | 21:215191 | none | no | no | left | yes | no | GLoan — Powered-by Fuse + disclaimer + link |
| 2 | 21:215193 | default | no | yes | left | no | no | Credit acknowledgement + GCash × CIMB |
| 3 | 21:215195 | with link | no | no | center | no | no | GSave — centered help-link only |
| 4 | 21:215197 | none | no | yes | center | no | no | GCash × CIMB logos, centered, no text |
| 5 | 21:215199 | with link | no | yes | left | no | no | GCredit — link + GCash × CIMB |
| 6 | 21:215201 | with link | no | no | left | yes | no | Powered-by Bayad row + link |
| 7 | 21:215203 | none | yes | no | center | no | yes | "In partnership with" · GCash + PDAX grouped |
1.0.0 — April 2026Major
Initial Assessment · node 21:215190
Verdict: Restructure — Rename 6 axes to camelCase, collapse three partner booleans into one
ArchitecturepartnerLogos enum, expose partner-logo Slot, remove alignment axis (consumer owns layout). OpenDisclaimer + help link should be slots, not baked copy — Disclaimer becomes
C4 · C5disclaimer: String (or Inline Text instance). Help link becomes a Text Button instance with its own state coverage. OpenPartner logos are raster — Provide vector source in a Partner Logos set; swap raster fills for Logo instances. Open
C6C7 — Code Connect — Blocked until property names normalize and content slots are introduced. Open
C7