DESIGN.md · Analysis

Grab

grab.com · 19 Jul 2026 · 47 colors · Inter

Grab

Southeast Asia's leading superapp delivering mobility, food, groceries, and financial services through a unified, accessible platform.

Colors

surface#ffffff
surface-dim#f5f5f5
surface-bright#ffffff
surface-container-lowest#fafafa
surface-container-low#f1f4f6
surface-container#eeeeee
surface-container-high#e8e8e8
surface-container-highest#d8d8d8
on-surface#161a1d
on-surface-variant#4b4b4b
inverse-surface#2b2b2b
inverse-on-surface#f5f5f5
outline#79747e
outline-variant#c4c7c8
surface-tint#00b14f
primary#00b14f
on-primary#ffffff
primary-container#ccefdc
on-primary-container#006a2f
inverse-primary#7fdd9f
secondary#54595f
on-secondary#ffffff
secondary-container#d8d8d8
on-secondary-container#3860be
tertiary#3860be
on-tertiary#ffffff
tertiary-container#8ed1fc
on-tertiary-container#001d3c
error#cf2e2e
on-error#ffffff
error-container#f9dedc
on-error-container#410e0b
primary-fixed#ccefdc
primary-fixed-dim#99e0b9
on-primary-fixed#006a2f
on-primary-fixed-variant#008e3f
secondary-fixed#d8d8d8
secondary-fixed-dim#bcc0c6
on-secondary-fixed#3860be
on-secondary-fixed-variant#54595f
tertiary-fixed#8ed1fc
tertiary-fixed-dim#6ec1e4
on-tertiary-fixed#001d3c
on-tertiary-fixed-variant#3860be
background#fffbfe
on-background#161a1d
surface-variant#e8e8e8

Typography

display
fontFamily: Inter · fontSize: 80px · fontWeight: 800 · lineHeight: 88px · letterSpacing: -0.04em
headline-lg
fontFamily: Inter · fontSize: 40px · fontWeight: 600 · lineHeight: 48px · letterSpacing: -0.02em
headline-md
fontFamily: Inter · fontSize: 28px · fontWeight: 600 · lineHeight: 36px · letterSpacing: 0em
title-lg
fontFamily: Inter · fontSize: 20px · fontWeight: 600 · lineHeight: 28px · letterSpacing: 0.01em
body-lg
fontFamily: Inter · fontSize: 18px · fontWeight: 400 · lineHeight: 28px · letterSpacing: 0em
body-md
fontFamily: Inter · fontSize: 16px · fontWeight: 400 · lineHeight: 24px · letterSpacing: 0em
label-md
fontFamily: Inter · fontSize: 14px · fontWeight: 600 · lineHeight: 20px · letterSpacing: 0.01em
label-sm
fontFamily: Inter · fontSize: 12px · fontWeight: 500 · lineHeight: 16px · letterSpacing: 0.05em

Design guidance

Overview

Grab is Southeast Asia's superapp ecosystem built on a foundation of **Pragmatic Accessibility**—a design philosophy that prioritizes clarity, speed, and inclusive interaction across diverse user contexts (urban commuters, delivery partners, merchants, financial service users). The visual language combines a vibrant, energetic green primary (#00B14F) with a neutral, professional gray secondary (#54595F), creating a confident yet approachable interface. The brand personality is solution-oriented and action-focused: Grab doesn't explain problems, it solves them. Voice is direct, conversational, and locally aware—never corporate-speak. Example sentence in brand voice: 'Your ride's 4 minutes away. Driver's name is Ravi.'

Colors

The color system is built around **Functional Vibrancy**: primary green (#00B14F) signals action, trust, and growth—it appears on all CTAs, confirmations, and success states. This is the color users click. Secondary gray (#54595F) grounds the interface, used for headers, navigation, and secondary text. Tertiary blue (#3860BE) supports data visualization and secondary actions. The surface stack (white #FFFFFF through #D8D8D8) provides clear visual hierarchy without relying on darkness. Usage rules: Primary (#00B14F) is reserved exclusively for interactive elements and confirmations—never use it for passive text or backgrounds. On-primary is always white (#FFFFFF) for maximum contrast (WCAG AAA). The primary-container (#CCEFDC) and on-primary-container (#006A2F) pair is used for success mess

Typography

The type system uses **Inter exclusively** across all scales, chosen for its exceptional legibility on small screens and its neutral, modern character. Display (80px, 800 weight) is reserved for hero headlines and brand moments—it commands attention without decoration. Headline-lg (40px, 600 weight) and headline-md (28px, 600 weight) structure page sections and card titles. Body-lg (18px, 400 weight) and body-md (16px, 400 weight) carry primary content and descriptions, with 28px and 24px line-heights respectively to ensure comfortable reading on mobile (line-height: 1.4–1.5). Label-md (14px, 600 weight) and label-sm (12px, 500 weight) are used for buttons, badges, and UI labels. Letter-spacing is tightened on display (-0.04em) to create visual impact, neutral (0em) on body text for readab

Layout

The layout system operates on a **12-column fluid grid** with a fixed container max-width of 1140px, scaling down to 1024px on tablets and 767px on mobile. Spacing follows a semantic scale: unit (8px) is the base; gutter (24px) separates major sections; lg (40px) creates breathing room between hero and content; xl (64px) is reserved for page-level separation. Margins and padding use multiples of the 8px unit (12px, 24px, 40px, 64px) to maintain rhythm. The page rhythm emphasizes white space: hero sections use 80px top/bottom padding, content sections use 40px, and cards use 24px internal padding. Container max-width ensures text lines stay within 65–75 characters for optimal readability. Mobile-first approach: base styles assume 375px viewport, then expand with media queries at 768px (tabl

Elevation & Depth

Elevation is achieved through **subtle layering and shadow depth**, not color darkening. Level 1 (Base): flat surfaces at surface (#FFFFFF) with no shadow, used for primary content areas and cards in neutral states. Level 2 (Raised): cards and containers use elevation.sm (0 1px 2px rgba(0, 0, 0, 0.06)) to create minimal separation from the background—this is the default card state. Level 3 (Elevated): interactive elements on hover or focus use elevation.md (0 4px 12px rgba(0, 0, 0, 0.08)), creating a subtle lift. Level 4 (Modal/Overlay): modals and dropdowns use elevation.lg (2px 8px 23px 3px

Shapes

The shape system follows **Pragmatic Softness**: corners are kept minimal and functional, never decorative. Buttons and inputs use sm (2px) radius for a clean, modern appearance that feels professional without coldness. Cards and larger containers use DEFAULT (4px) radius for subtle definition. Modals and elevated surfaces use lg (12px) radius to signal importance and create visual separation. Search inputs and pill-shaped elements use full (9999px) radius to signal accessibility and ease of use. The reasoning: 2–4px radii maintain the interface's efficiency and clarity, while 9999px is reserv

Components

Action Elements Buttons are the primary interaction mechanism. Button-primary uses primary green (#00B14F) background with white text, 44px height, 12px vertical / 24px horizontal padding, 2px radius, and label-md typography (14px, 600 weight). On hover, background shifts to #008E3F (darker green) with a 200ms transition. On active/pressed, background becomes #006A2F. Button-secondary uses surface-container-highest (#D8D8D8) background with primary text, 1px outline-variant border, and the same dimensions. Hover state shifts to surface-container-high (#E8E8E8). Both buttons disable to surface-container-highest with on-surface-variant text (50% opacity) and cursor: not-allowed.

Containers & Surfaces Cards are the primary content container. Default card uses surface (#FFFFFF) backgr

Do's and Don'ts

**Do**

  • Do use primary green (#00B14F) exclusively on CTAs and confirmations—it's the signal for 'click here' and 'success.'
  • Do maintain 24px gutters between major sections and 40px between hero and content to create visual breathing room.
  • Do apply 2px border-radius to buttons and inputs for a clean, modern appearance that feels efficient.
  • Do use Inter at 16px body-md with 24px line-height for comfortable reading on mobile devices.
  • Do transition all interactive states (hover, focus, active) over 200ms with ease-in-out timing to guide attention.
  • Do use elevation.sm (0 1px 2px rgba(0, 0, 0, 0.06)) as the default card shadow—it's subtle but present.

**Don't**

  • Don't use primary green on passive text, backgrounds, or non-interactive elements—reserve it for actions only.
  • Don't apply hard corners (0px radius) to buttons, inputs, or cards; use 2–4px for consistency.
  • Don't exceed 1140px container max-width on desktop; content becomes hard to scan.
  • Don't use shadows heavier than elevation.lg (2px 8px 23px 3px rgba(0, 0, 0, 0.2)) except for full-screen modals.
  • Don't mix typefaces; Inter is the only font family used across the system.
  • Don't disable buttons by reducing opacity; use surface-container-highest background with on-surface-variant text and cursor: not-allowed.