DESIGN.md · Analysis

Grass

grass.io · 26 Jun 2026 · 47 colors · DM Sans Variable

Grass

Grass turns unused internet bandwidth into passive rewards. A fintech-meets-lifestyle brand using vibrant lime-green accents on a clean, light-first canvas to communicate accessibility, energy, and trust.

Colors

surface#ffffff
surface-dim#f3f3f3
surface-bright#fafafa
surface-container-lowest#f9f9f9
surface-container-low#f5f5f5
surface-container#f0f0f0
surface-container-high#e8e8e8
surface-container-highest#e0e0e0
on-surface#1a1a1a
on-surface-variant#545454
inverse-surface#191a23
inverse-on-surface#e5e5e5
outline#666666
outline-variant#c7c7c7
surface-tint#abf600
primary#abf600
on-primary#000000
primary-container#d3ff53
on-primary-container#1a1c1c
inverse-primary#89c500
secondary#f2fed1
on-secondary#1a1a1a
secondary-container#dbfb9a
on-secondary-container#2d3131
tertiary#4299e1
on-tertiary#ffffff
tertiary-container#bee3f8
on-tertiary-container#0d2e4a
error#e21212
on-error#ffffff
error-container#ffeded
on-error-container#5f0a0a
primary-fixed#d3ff53
primary-fixed-dim#abf600
on-primary-fixed#1a1c1c
on-primary-fixed-variant#2d3131
secondary-fixed#dbfb9a
secondary-fixed-dim#f2fed1
on-secondary-fixed#1a1a1a
on-secondary-fixed-variant#2d3131
tertiary-fixed#bee3f8
tertiary-fixed-dim#90cdf4
on-tertiary-fixed#0d2e4a
on-tertiary-fixed-variant#1a3a52
background#ffffff
on-background#1a1a1a
surface-variant#e5e5e5

Typography

display
fontFamily: DM Sans Variable · fontSize: 60px · fontWeight: 600 · lineHeight: 68px · letterSpacing: -0.02em
headline-lg
fontFamily: DM Sans Variable · fontSize: 40px · fontWeight: 600 · lineHeight: 48px · letterSpacing: -0.015em
headline-md
fontFamily: DM Sans Variable · fontSize: 28px · fontWeight: 600 · lineHeight: 36px · letterSpacing: -0.01em
title-lg
fontFamily: DM Sans Variable · fontSize: 20px · fontWeight: 600 · lineHeight: 28px · letterSpacing: 0em
body-lg
fontFamily: DM Sans Variable · fontSize: 18px · fontWeight: 400 · lineHeight: 28px · letterSpacing: 0.005em
body-md
fontFamily: DM Sans Variable · fontSize: 16px · fontWeight: 400 · lineHeight: 24px · letterSpacing: 0em
label-md
fontFamily: DM Sans Variable · fontSize: 14px · fontWeight: 700 · lineHeight: 20px · letterSpacing: 0.01em
label-sm
fontFamily: DM Sans Variable · fontSize: 12px · fontWeight: 600 · lineHeight: 16px · letterSpacing: 0.02em

Design guidance

Overview

Grass is a fintech-lifestyle platform that monetizes unused internet bandwidth, transforming a passive resource into active earnings. The brand serves privacy-conscious users aged 18–45 who value both financial reward and digital autonomy. The aesthetic is 'Energetic Minimalism'—a design movement that pairs clean, light-first surfaces with vivid, high-saturation accent colors to communicate both trustworthiness and dynamism. The UI evokes a sense of effortless passive income: simple, unobtrusive, always working in the background. Users feel empowered, not surveilled.

Grass speaks in a conversational, direct tone—never corporate, never breathless. The vocabulary is grounded in real value: 'earnings,' 'rewards,' 'connected,' 'running,' 'background.' Brand personality is approachable-yet-technical, like a friend who understands both finance and privacy. Example sentence: 'Your internet is already running—now it's earning for you.'

Colors

The color system is anchored by a single, unmissable accent: Grass Primary (#ABF600), a vibrant lime-green that dominates all call-to-action buttons, interactive states, and brand moments. This high-saturation hue (HSL 82°, 100%, 50%) sits at the intersection of 'growth' and 'energy,' signaling both financial gain and active participation. Primary is always paired with pure black text (rgb(0, 0, 0)) for maximum contrast and legibility, even on small touch targets.

The surface stack is deliberately light and neutral: white (#FFFFFF) as the base, with a shallow container hierarchy (surface-container-low at #F5F5F5, surface-container-high at #E8E8E8) to create subtle depth without visual noise. Secondary (#F2FED1), a pale lime wash, is reserved for informational cards and non-critical surfac

Typography

The type system uses DM Sans Variable exclusively—a geometric, friendly sans-serif that balances technical precision with human warmth. Display (60px, 600 weight, -0.02em tracking) anchors hero sections and commands attention without aggression. Headline-lg (40px, 600 weight) and headline-md (28px, 600 weight) structure content hierarchy, with tighter letter-spacing (-0.015em, -0.01em respectively) to reinforce the brand's energetic compression. Body text (16–18px, 400 weight, 24–28px line-height) is set loose and airy, with 0.005em tracking on body-lg to prevent the eye from tiring during longer reads. Labels (14px and 12px, 700 weight) are used on buttons and badges with 0.01–0.02em letter-spacing to add visual snap. On small labels over busy backgrounds (e.g., badge text on primary butt

Layout

The layout follows a 12-column grid with a max-width of 1180px, centered on the viewport. The design favors a fluid, breathing approach: sections are separated by lg spacing (40px) on desktop, md spacing (24px) on tablet, and sm spacing (12px) on mobile. The gutter (24px) is consistent across all breakpoints, creating a predictable rhythm. Hero sections use full-width backgrounds with a contained text layer (max 1180px), allowing imagery and gradients to extend edge-to-edge while keeping copy readable. Cards and containers use md padding (24px) internally, with sm gaps (12px) between child elements. White-space is treated as a design material: negative space around primary CTAs is never less than 16px, ensuring they remain focal points. The container-max-width of 1180px prevents content fr

Elevation & Depth

Elevation in Grass is achieved through subtle shadow and background-color shifts rather than dramatic depth. Level 1 (Base): white background (rgb(255, 255, 255)) with no shadow, establishing the clean canvas. Level 2 (Standard Card): surface-container-lowest (#F9F9F9) background with elevation-sm shadow (0 1px 2px rgba(0, 0, 0, 0.05)), creating a barely-perceptible lift. Level 3 (Elevated Card/Modal): surface-bright (#FAFAFA) background with elevation-md shadow (0 4px 12px rgba(0, 0, 0, 0.08)), signaling modal prominence. Interactive elements (buttons, inputs) use no shadow at rest but gain e

Shapes

The shape philosophy is 'Soft-Technical'—rounded corners that feel approachable without sacrificing precision. Buttons and primary interactive elements use full border-radius (9999px), creating pill-shaped targets that feel friendly and modern. Cards and containers default to lg radius (1rem / 16px), balancing softness with structure. Inputs and secondary surfaces use DEFAULT radius (0.5rem / 8px), maintaining visual hierarchy while staying cohesive. The rationale: full-radius buttons are the brand's signature gesture, instantly recognizable and tactile on mobile; lg-radius cards feel contempo

Components

Action Elements Buttons are the primary interaction pattern. The button-primary component uses primary (#ABF600) background, on-primary (#000000) text, full border-radius (9999px), and label-md typography (14px, 700 weight) with 16px vertical and 32px horizontal padding, yielding a 48px height. On hover, background shifts to primary-fixed-dim (#ABF600) with a 200ms transition; on active/press, background becomes inverse-primary (#89C500) with an inset shadow (0 2px 4px rgba(0, 0, 0, 0.12)) to signal depression. Button-secondary uses a transparent background with a 1px outline-variant border (#C7C7C7), on-surface text, and the same full radius; hover state fills with surface-container-high (#E8E8E8). Secondary CTAs should never compete visually with primary—use them for 'Learn More,' 'S

Do's and Don'ts

**Do**

  • Do use primary (#ABF600) exclusively for the most important CTA on each page—never more than one per viewport.
  • Do maintain at least 16px of white-space around primary buttons to ensure they remain focal points.
  • Do apply the full border-radius (9999px) to all primary CTAs; it is the brand's signature gesture.
  • Do use DM Sans Variable at 600 weight for all headings; it reinforces the energetic, geometric brand voice.
  • Do pair primary (#ABF600) with pure black text (rgb(0, 0, 0)) for maximum contrast and accessibility.
  • Do use elevation-sm shadow (0 1px 2px rgba(0, 0, 0, 0.05)) as the default card shadow; reserve elevation-md for modals and hero callouts.

**Don't**

  • Don't use primary (#ABF600) for body text, backgrounds, or non-interactive elements—it will dilute its impact as an accent.
  • Don't apply sharp corners (0px radius) to any interactive element; the brand requires softness.
  • Don't mix typefaces; DM Sans Variable is the sole font family for all text.
  • Don't use drop shadows larger than elevation-md (0 4px 12px rgba(0, 0, 0, 0.08)) on cards; the aesthetic is clean and minimal, not layered.
  • Don't place text directly on primary backgrounds without sufficient contrast testing; always verify WCAG AA compliance.
  • Don't use secondary (#F2FED1) or tertiary (#4299E1) as primary CTAs; they are supporting colors only.