Moner
Design system

Moner, taken apart.

Copied from the Android app's own resources, not measured off screenshots. One file holds every value, src/styles/tokens.css, and this whole site, phone previews included, is built from it. Switch light and dark with the button in the top bar.

Colour

Names and values are the app's: core/src/main/res/values/colors.xml for light, values-night/colors.xml for dark. Ink is the only strong colour; green is the only filled control colour.

  • color_page--page#F4F4F5 · #0E0E10
  • color_card--card#FFFFFF · #18181B
  • color_day--day#FAFAFB · #141416
  • color_inset--inset#F7F7F9 · #1F1F23
  • color_sunken--sunken#ECECEF · #1F1F23
  • color_edge--edge#EBEBEF · #27272A
  • color_edge_strong--edge-strong#E4E4E7 · #3F3F46
  • color_ink--ink#18181B · #F4F4F5
  • color_text_secondary--text-2#5F5F6B · #A1A1AA
  • color_text_muted--muted#6E6E7A · #8B8B95
  • color_text_faint--faint#A1A1AA · #5C5C66
  • color_positive--positive#17B26A · #22C55E
  • color_nav_bg--nav-bg#18181B · #1C1C1F
  • color_toast--toast#18181B · #F4F4F5
  • color_dotted_end--dotted-end#2E2E33 · #2E2E33

Tints come in threes: content, container and stroke. Categories, status badges, people and notices each pick one.

  • orangetint_orange_*Food · avatar
  • bluetint_blue_*Transport
  • pinktint_pink_*Shopping · Person 2
  • skytint_sky_*Vehicle
  • purpletint_purple_*Settings
  • tealtint_teal_*Privacy
  • ambertint_amber_*Quick actions · Person 1
  • slatetint_slate_*Others
  • neutraltint_neutral_*Not chosen yet
  • greentint_green_*Under limit · done
  • warningtint_warning_*Waiting
  • dangertint_danger_*Over limit · delete
  • inktint_ink_*On a dotted card

Type

Space Grotesk for everything you read, Space Mono for times, references and small caps labels. The roles below are TextAppearance.Moner.* in styles.xml, at the app's real sizes.

Amount.Hero40 · SemiBold · tnum

Rp 499.000

Amount.Summary32 · SemiBold · tnum

Rp 7.000.000

Title22/28 · Bold · -0.01

Insights

Section18/24 · SemiBold

Where it went

Subtitle17/22 · SemiBold

Hey, Punk

RowTitle15/20 · SemiBold

Nasi Padang

Body14/20 · Regular · secondary

Waiting to be recorded

Label13/18 · SemiBold

November

Caption12/18 · Regular · muted

Food · QRIS · Mandiri

Mono11/16 · Space Mono · muted

22:32

Mono.Label11 · Space Mono · caps +0.08

Paid with

Shape and texture

  • 8badges--r-badge
  • 10tiles, keys--r-tile
  • 12buttons, chips--r-control
  • 14keypad tray--r-field
  • 16day groups, stubs, banners--r-container
  • 18Spend, Split bill, slide--r-action
  • 20cards, sheets--r-card
  • 999navbar, segmented--r-pill
Light dotsStat tiles: quiet numbers that sit inside a card.
Ticket
A dashed tear with two notches splits a form like a receipt.

Components

Buttons
SpendSplit billFetch nowChange
Chips
7% limit used13 to recordRp 120.000 over limit
Segmented
People
1Person 12Person 2
List row
Nasi Padang
Food · QRIS · Mandiri
Rp 45.000
22:32
Gojek Ride
Transport · E-wallet · GoPay
Rp 22.000
20:32
Banner
Limit card

Rp 492.000 spent

7% limit used
Nav bar
Home

Motion

On the website, things settle rather than bounce: one easing, cubic-bezier(.2, .8, .2, 1). Sheets rise in 550ms, rows and chips in 450–500ms, numbers count for 900ms. Only confirmation chips overshoot a little. Everything stops for people who ask for reduced motion.