At a Glance
The numbers behind every screen. If you remember nothing else, remember these.
1 · Anatomy of a Screen
Every GCash screen is built from the same five vertical regions, top to bottom. Designing a new screen starts by placing these regions, then filling the content area with DS components.
The five stacked regions of every screen, top to bottom.
| Region | Height | What it holds |
|---|---|---|
| Status bar | 44–54px (iOS) · 24–28dp (Android) | OS-owned. Time, signal, battery. Never draw content here — it sits inside the top safe area. |
| App bar / Header | 56px standard · up to 96px hero | Screen title, back / close, and up to two trailing actions. Use the Header family. One header per screen. |
| Content area | Fills remaining height (scrolls) | The scrollable body — lists, cards, fields, sections. Side margins 16px. This is where most of the design happens. |
| Action dock | Button height + 16px padding | Optional. Pinned primary CTA at the bottom. Sits above the home indicator on a surface/default bar, often with a top hairline or shadow. |
| Home indicator / nav bar | 34px (iOS) · 48dp (Android) | OS-owned bottom safe area. Keep tappable content clear of it; the action dock pads above it. |
2 · Frame & Safe Areas
Design at one baseline device, then verify the small and large bounds. GCash is portrait-only.
Baseline frame with safe-area insets and 16px side margins (dashed).
| Setting | Value | Note |
|---|---|---|
| Baseline frame | 390 × 844 | iPhone 14 / 13. Design here first. |
| Small bound | 360 × 640 | Smallest common Android. Check nothing clips or wraps badly. |
| Large bound | 430 × 932 | iPhone Pro Max. Content should grow, not stretch. |
| Side margins | 16px | The default content inset on both edges. Full-bleed media may go edge-to-edge. |
| Top safe area | ≈ 47px | Header sits below this. Use Figma's device frame to visualize. |
| Bottom safe area | ≈ 34px | Action dock and floating elements pad above this. |
3 · Layout Grid & Spacing
All spacing comes from the space/space-* token scale — a 4px base unit.
| Token | Value | Typical use |
|---|---|---|
| space-4 | 4px | Icon-to-label, tight inline gaps. |
| space-8 | 8px | Within a component — chip padding, stacked label + caption. |
| space-12 | 12px | List row padding, gap between related fields. |
| space-16 | 16px | The default. Side margins, gap between cards, section inset. |
| space-20 / 24 | 20 / 24px | Gap between distinct content blocks. |
| space-32 / 48 | 32 / 48px | Gap between major sections, above a section header. |
Available steps: 0 · 2 · 4 · 6 · 8 · 10 · 12 · 16 · 20 · 24 · 28 · 32 · 36 · 48 · 56.
space-8. Default block rhythm: space-16. Beyond space-48 you usually want a divider or a new section, not more whitespace.4 · Headers
The East Blue Header assessment found four distinct header roles collapsed into look-alike components. Use the right one for the job; don't mix roles on one screen.
| Header type | Height | Title style | When to use |
|---|---|---|---|
| Title bar (app bar) | 56px | Heading / 18–20 | Default for almost every screen. Back / close on the left, title centered or leading, up to 2 trailing actions. |
| Large-title hero | 88–96px | Display / 24–28 | Top-level destinations (Home, a hub). Bigger title that collapses to a title bar on scroll. |
| Section header | Auto + space-32 above | Heading / 16 | Inside the content area to label a group. Not an app bar — no back button. |
| Transaction / detail hero | Auto | Display + amount | Receipt and detail screens — avatar, title, amount, divider. A card hero, not a navigation bar. |
5 · Typography
The label scale below is the one shipped on the Button and shared across components.
| Role | Text style | Size | Used for |
|---|---|---|---|
| Screen title | Display / Heading | 24–28px | Hero header titles. Heading font. |
| Section heading | Heading | 18–20px | Title bar, section labels. |
| Body / primary label | Primary/Label/Large | 18px | Primary actions, list titles. |
| Default text | Primary/Label/Base | 16px | Body copy, field labels, most UI text. |
| Small / supporting | Primary/Label/Small | 14px | Captions, secondary lines, helper text. |
| Fine print | Primary/Label/Fine | 12px | Legal, timestamps, badge text. |
Body font is Proxima Soft; headings use the brand heading face. Minimum on-screen text size is 12px — never smaller.
6 · Buttons — which to use
Three styles, one decision tree. Everything steps down from the main action.
| Style | API | Use for |
|---|---|---|
| Filled (primary) | EBButton | The single main action — Continue, Send, Confirm. Brand blue #005CE5. |
| Outline (secondary) | EBOutlinedButton | Secondary action paired with a primary — Cancel, Back, Maybe later. |
| Text (tertiary) | EBTextButton | Low-emphasis / inline actions — Skip, Learn more, See all. |
Size ladder
Large is the default for the GCash app — it's what fills the action dock. Smaller sizes are for inline and dense contexts.
| Size | Height | Padding H / V | Text style |
|---|---|---|---|
| Large (default) | 50px | 20 / 16 | Primary/Label/Large · 18px |
| Medium | 48px | 16 / 12 | Primary/Label/Base · 16px |
| Small | 36px | 12 / 8 | Primary/Label/Base · 16px |
| Compact | 28px | 12 / 5 | Primary/Label/Small · 14px |
| XSmall | 24px | 10 / 4 | Primary/Label/Fine · 12px |
All sizes: pill radius 99px, font Proxima Soft Bold, tracking 0.25px. Use the Destructive appearance for irreversible actions (delete, remove); White / Subtle appearances are for colored or media backgrounds.
16px padding on all sides, on a surface/default bar above the home indicator. Pair with an Outline button stacked above or beside it when a secondary action is needed.7 · Color & Surfaces
Screens are built on the surface scale; intent colors carry meaning.
| Role | Token | Use |
|---|---|---|
| Page background | surface/default | The base canvas of the screen. |
| Card / content surface | surface/content | Raised cards, sheets, grouped rows. |
| Pressed surface | surface/pressed | Tap feedback on rows and tiles. |
| Disabled surface | surface/disabled | Inactive controls. |
| Brand | #005CE5 | Primary actions, links, selected states. Pressed → #2340A9. |
Intent colors (Information, Positive, Notice, Negative) come from the Badge / Alert palettes — use them for status, never for decoration. Radius scale: radius-1 → radius-4 for cards (≈ 4–16px), radius-round (pill) for buttons and chips.
8 · Touch Targets & States
Native readiness depends on real interaction states. A screen built only in its resting state is incomplete.
| Rule | Spec |
|---|---|
| Minimum touch target | 44 × 44pt (iOS) · 48 × 48dp (Android) |
| Min gap between targets | 8px (space-8) |
| Required states per control | Default · Pressed · Disabled (+ Selected / Error where relevant) |
| Focus / loading | Model loading as a skeleton or spinner state, not a blank gap |
9 · Figma Setup Spec
The exact settings for a new screen frame in Figma so it stays on-system and hands off cleanly to native.
Layout grid: one stretch column, 16px margins (highlighted).
1 stretch column, 16px margins. Optionally a 4px row grid to keep vertical spacing on the space-* scale.space/space-* variables — not typed numbers. Default gap space-16.surface/* and brand variables; every text layer assigned a named text style. No raw hex, no loose sizes.header, content, action-dock) — never Frame 42 / Group 7. Clean names map straight to native code.10 · Screen-Build Checklist
space-* token. Default block rhythm space-16.