duply
Preview of Letter

Letter

A private-banking marketing surface that opens on a near-black cinematic hero with a high-contrast Albra Sans display headline, then drops to bright off-white editorial bands carrying 3D-rendered product imagery and iridescent gradient cards. The system is monochrome at the structural layer — black hero, white canvas, dark ink — with a wide palette of soft pastel accents reserved for rendered imagery rather than UI chrome. Corners are nearly square (2px), there are no shadows, and the type voice splits between a flared display face and an extended grotesk for everything else.

---
version: alpha
name: Letter-design-analysis
description: A private-banking marketing surface that opens on a near-black cinematic hero with a high-contrast Albra Sans display headline, then drops to bright off-white editorial bands carrying 3D-rendered product imagery and iridescent gradient cards. The system is monochrome at the structural layer — black hero, white canvas, dark ink — with a wide palette of soft pastel accents reserved for rendered imagery rather than UI chrome. Corners are nearly square (2px), there are no shadows, and the type voice splits between a flared display face and an extended grotesk for everything else.

colors:
  ink: "#191b1f"
  canvas: "#ffffff"
  hero-dark: "#000000"
  on-dark: "#ffffff"
  surface-soft: "#f6f9f9"
  surface-mist: "#e6ebec"
  muted: "#9fabad"
  muted-soft: "#c6c8c8"
  accent-teal: "#186f64"
  accent-teal-soft: "#e1f1f0"
  accent-blue: "#536eff"
  accent-blue-deep: "#154ea5"
  accent-blue-soft: "#7395e6"
  accent-periwinkle: "#8889e7"
  accent-violet: "#644bc4"
  accent-purple: "#a876e9"
  accent-sky: "#a8dbf8"
  accent-peach: "#fcede1"
  accent-mint: "#eefcef"
  accent-lilac: "#e6def0"
  accent-rose: "#ffcccb"

typography:
  h1:
    fontFamily: "Albra Sans, Fraunces, Georgia, serif"
    fontSize: 80px
    fontWeight: 600
    lineHeight: 1.1
    letterSpacing: normal
  h2:
    fontFamily: "Albra Sans, Fraunces, Georgia, serif"
    fontSize: 46px
    fontWeight: 600
    lineHeight: 1.2
    letterSpacing: normal
  h3:
    fontFamily: "Neufile Grotesk Extended, Space Grotesk, sans-serif"
    fontSize: 20px
    fontWeight: 600
    lineHeight: 1.2
    letterSpacing: 0.4px
  body:
    fontFamily: "Neufile Grotesk Extended, Space Grotesk, sans-serif"
    fontSize: 28px
    fontWeight: 400
    lineHeight: 1.4
    letterSpacing: normal
  button:
    fontFamily: "Neufile Grotesk Extended, Space Grotesk, sans-serif"
    fontSize: 16px
    fontWeight: 500
    lineHeight: 1.0
    letterSpacing: normal

rounded:
  none: 0px
  xs: 2px

spacing:
  xxs: 8px
  xs: 12px
  sm: 16px
  md: 23px
  lg: 27px
  xl: 32px
  xxl: 52px
  huge: 72px
  section: 104px
  jumbo: 128px
  max: 192px

components:
  top-nav:
    backgroundColor: "{colors.hero-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.button}"
    padding: 16px 32px
  nav-link:
    backgroundColor: transparent
    textColor: "{colors.on-dark}"
    typography: "{typography.button}"
  button-primary:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.xs}"
    padding: 12px 27.2px
  button-signin:
    backgroundColor: transparent
    textColor: "{colors.on-dark}"
    typography: "{typography.button}"
  hero-band:
    backgroundColor: "{colors.hero-dark}"
    textColor: "{colors.on-dark}"
    typography: "{typography.h1}"
    padding: 104px 32px
  editorial-band:
    backgroundColor: "{colors.surface-soft}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    padding: 52px 32px
  card:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    rounded: "{rounded.none}"
  gradient-image-card:
    backgroundColor: "{colors.surface-mist}"
    textColor: "{colors.ink}"
    rounded: "{rounded.none}"
  footer:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    padding: 52px 32px
  footer-heading:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.h3}"
  footer-copyright:
    backgroundColor: transparent
    textColor: "{colors.muted}"
    typography: "{typography.button}"
---

## Overview

Letter is a private-banking marketing surface ("Beyond banking — thoughtful finance and modern wealth management for high net worth individuals"). The page opens on a near-black, cinematic hero (`{colors.hero-dark}`#000000) with a glassy 3D render behind a large high-contrast display headline, then drops abruptly to bright off-white editorial bands (`{colors.surface-soft}`#f6f9f9) carrying rendered product imagery — a translucent payment card floating on an iridescent gradient, a chrome sculptural object. The contrast between the black hero and the white body is the system's primary editorial move.

The type voice splits cleanly into two roles: a **flared display face** (measured as `Albra Sans`, used for h1 and h2 — the "Beyond banking" headline reads as a high-contrast serif/flared display) and an **extended grotesk** (measured as `Neufile Grotesk Extended`, used for h3, body, and buttons). Both are commercial/custom faces — open-source substitutes are documented in the Typography section.

The structural layer is strictly monochrome: black hero, white canvas, near-black ink (`{colors.ink}`#191b1f). The wide palette of soft pastels and saturated accents that dembrandt measured (`{colors.accent-teal}`, `{colors.accent-blue}`, `{colors.accent-violet}`, and a family of mints, peaches, and lilacs) almost entirely live inside the 3D-rendered imagery and iridescent gradients — they are picked up from the rendered scenes, not applied to UI chrome. The single primary CTA ("Join") is a white button with dark text.

**Key Characteristics:**
- Black cinematic hero (`{colors.hero-dark}`#000000) with white display type (`{colors.on-dark}`#ffffff) over a glassy 3D render. The dark band anchors the top of the page.
- White / off-white editorial body — `{colors.canvas}` (#ffffff) and `{colors.surface-soft}` (#f6f9f9) — carrying near-black text (`{colors.ink}`#191b1f).
- Nearly-square corners: the only measured radius is `{rounded.xs}` (2px) on the primary button; cards measure `{rounded.none}` (0px). The system reads sharp and editorial.
- No shadows anywhere — dembrandt measured zero shadow tokens. Depth comes entirely from the rendered imagery and the black-to-white band contrast.
- A single white primary CTA (`{component.button-primary}`) — white background, `{colors.ink}` text, 2px radius. Nav also carries a low-emphasis "Sign In" text link.
- Pastel and saturated accents (teal #186f64, blue #536eff, violet #644bc4, plus mints/peaches/lilacs) appear inside iridescent gradients and 3D renders, not on interactive chrome.
- Generous, irregular vertical rhythm — large spacing steps (`{spacing.section}` 104px, `{spacing.jumbo}` 128px, `{spacing.max}` 192px) separate the rendered imagery from text blocks.

## Colors

### Brand & Accent
The accent palette is broad but almost entirely decorative — it is sampled from the 3D renders and iridescent gradients rather than applied to UI.
- **Accent Teal** (`{colors.accent-teal}`#186f64): The most frequent accent (frequency 26), seen in the hero gradient's left edge and in the logo mark. Its soft tint is `{colors.accent-teal-soft}` (#e1f1f0).
- **Accent Blue** (`{colors.accent-blue}`#536eff) and **Accent Blue Deep** (`{colors.accent-blue-deep}`#154ea5), with **Accent Blue Soft** (`{colors.accent-blue-soft}`#7395e6): the blue family that appears in gradient washes.
- **Accent Violet / Purple** (`{colors.accent-violet}`#644bc4, `{colors.accent-purple}`#a876e9, `{colors.accent-periwinkle}`#8889e7): the purple family on the card-on-gradient render.
- **Pastel washes**`{colors.accent-sky}` (#a8dbf8), `{colors.accent-peach}` (#fcede1), `{colors.accent-mint}` (#eefcef), `{colors.accent-lilac}` (#e6def0), `{colors.accent-rose}` (#ffcccb): the iridescent gradient behind the translucent payment card. These appear only inside rendered imagery.

### Surface
- **Hero Dark** (`{colors.hero-dark}`#000000): The hero band and top-nav backdrop — the only dark surface, and the highest-frequency color measured (frequency 106).
- **Canvas** (`{colors.canvas}`#ffffff): The default light page floor and footer background.
- **Surface Soft** (`{colors.surface-soft}`#f6f9f9): The off-white editorial band that holds the product imagery.
- **Surface Mist** (`{colors.surface-mist}`#e6ebec): A slightly cooler neutral used as a soft block / gradient-card base.

### Text
- **Ink** (`{colors.ink}`#191b1f): All dark text on light bands and the primary button label (measured as the button text color, frequency 46).
- **On Dark** (`{colors.on-dark}`#ffffff): Hero headline, sub-head, and nav text on the black band (frequency 54).
- **Muted** (`{colors.muted}`#9fabad): Tertiary text — footer copyright line, fine print.
- **Muted Soft** (`{colors.muted-soft}`#c6c8c8): The faintest neutral — disabled / divider tone.

### Semantic
No dedicated success / warning / error tokens were measured on the captured landing page — see Known Gaps.

## Typography

### Font Family
The system runs two custom/commercial faces:
- **Albra Sans** — used for h1 (80px) and h2 (46px), both weight 600. In the hero the "Beyond banking" headline reads as a high-contrast, flared display face. This is the brand display voice.
- **Neufile Grotesk Extended** — an extended-width grotesk used for h3 (20px), body (28px), and buttons (16px). It carries all running text, labels, and UI.

Both are non-free, foundry-licensed typefaces. They MUST NOT be shipped without a license. Documented substitutes appear below; the fallback stacks above walk to those substitutes and then to system serif / sans.

### Hierarchy

| Token | Family | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|---|
| `{typography.h1}` | Albra Sans | 80px | 600 | 1.1 | normal | Hero headline ("Beyond banking") |
| `{typography.h2}` | Albra Sans | 46px | 600 | 1.2 | normal | Section headlines |
| `{typography.h3}` | Neufile Grotesk Extended | 20px | 600 | 1.2 | 0.4px | Footer column headings, eyebrow labels |
| `{typography.body}` | Neufile Grotesk Extended | 28px | 400 | 1.4 | normal | Hero sub-head, editorial body copy |
| `{typography.button}` | Neufile Grotesk Extended | 16px | 500 | 1.0 | normal | Button labels, nav links, footer links |

### Principles
The display/grotesk boundary is strict: Albra Sans for headlines, Neufile Grotesk Extended for everything else. Display headlines stay at weight 600 — large-and-flared, not heavier. The extended grotesk's wide letterforms give the body a calm, premium-financial cadence; the small 0.4px tracking on h3 is the only positive letter-spacing in the system.

### Note on Font Substitutes
Neither Albra Sans nor Neufile Grotesk Extended is an open-source web font — they must be substituted unless licensed:
- **Albra Sans → Fraunces** (variable, optical-size aware) at weight 600 approximates the flared, high-contrast display character of the hero headline. **Spectral** or a high-optical-contrast **Playfair Display** are alternatives if a more serif read is acceptable.
- **Neufile Grotesk Extended → Space Grotesk** is the closest open alternative for the extended-grotesk body; **Familjen Grotesk** is another option. For a wider, more "extended" feel, apply a subtle `font-stretch` / slightly increased letter-spacing.

## Layout

### Spacing System
- **Tokens (measured):** `{spacing.xxs}` 8px · `{spacing.xs}` 12px · `{spacing.sm}` 16px · `{spacing.md}` 23px · `{spacing.lg}` 27px · `{spacing.xl}` 32px · `{spacing.xxl}` 52px · `{spacing.huge}` 72px · `{spacing.section}` 104px · `{spacing.jumbo}` 128px · `{spacing.max}` 192px.
- The high-frequency steps are 16px (frequency 33), 8px (17), 12px (16), 32px (11), and 52px (12) — these drive most internal padding and gaps. The 23px and 27px steps (frequency 8 each) come from the button's vertical/horizontal padding.
- **Section rhythm:** the large steps (104px / 128px / 192px) separate the black hero from the editorial band and the rendered imagery from text — note these are derived as the dominant large-gap values; each was measured once.

### Grid & Container
- **Hero:** full-bleed black band; centered headline + sub-head stack with the 3D render behind/below.
- **Editorial band:** a 2-column split — left text column ("Traditional private banks are slow…" / "We've built our own platform…") against a right-side gradient-image-card holding the translucent payment card.
- **Footer:** multi-column link list (Product / Company / Legal) with the wordmark and copyright beneath.

### Whitespace Philosophy
Letter uses dramatic, asymmetric whitespace — the editorial band leaves large vertical voids between the two text blocks, and the chrome-sculpture render sits alone with significant surrounding space. The pacing is deliberately sparse and gallery-like, signalling a premium, high-net-worth audience.

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow, no border | Every surface — nav, buttons, cards, footer |
| Band contrast | Black hero → white body | The primary depth cue is the hard transition from `{colors.hero-dark}` to `{colors.surface-soft}` |
| Rendered depth | 3D imagery carries its own lighting | The glassy hero render, translucent payment card, and chrome sculpture supply all visual depth |

dembrandt measured **zero shadow tokens**. There is no drop-shadow, no border-elevation, no glassmorphism in the UI layer. All sense of depth is delivered by the photographic/3D-rendered imagery and the black-to-white band contrast — the chrome is rendered with reflective lighting rather than CSS shadow.

### Decorative Depth
- The iridescent gradient behind the payment card (pastel sky / peach / lilac / rose) supplies chromatic depth without any system shadow token.
- The hero's glassy shard render is lit from within — the only light source in the dark band.

## Shapes

### Border Radius Scale

| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Cards, image blocks, editorial containers — measured at 0px |
| `{rounded.xs}` | 2px | The primary button (the only rounded element measured) |

The system is essentially square-cornered. The 2px on `{component.button-primary}` is barely perceptible — just enough to soften the corner of the white CTA. Everything else is hard-edged (0px), which reinforces the editorial, gallery-like tone.

### Photography / Render Geometry
Rendered imagery (the payment card, the chrome sculpture, the hero shard) sits in hard-edged rectangular frames with no corner rounding. Aspect ratios vary — the hero is wide and cinematic; the chrome-sculpture render is a tall portrait block.

## Components

### Navigation

**`top-nav`** — A black bar pinned to the top of the hero (`{colors.hero-dark}`), text in `{colors.on-dark}`. Carries the Letter logo mark at left, a horizontal menu (Deposit, Invest, Borrow, Lend, Office, Marketplace, Guides, About) in `{typography.button}`, and a right cluster with a "Join" `{component.button-primary}` and a "Sign In" text link. Sits transparently over the dark cinematic hero.

**`nav-link`** — Inline menu items, transparent background, `{colors.on-dark}` text, `{typography.button}` (Neufile Grotesk Extended 16px / 500).

### Buttons

**`button-primary`** — The signature "Join" CTA. Background `{colors.canvas}` (#ffffff), text `{colors.ink}` (#191b1f), `{typography.button}`, rounded `{rounded.xs}` (2px), padding 12px × 27.2px. A white pill-less block button — high contrast against the black nav.

**`button-signin`** — Low-emphasis text action in the nav. Transparent background, `{colors.on-dark}` text, `{typography.button}`. No fill or border.

### Bands & Containers

**`hero-band`** — Full-bleed black band (`{colors.hero-dark}`) holding the centered `{typography.h1}` headline and `{typography.body}` sub-head in `{colors.on-dark}`, layered over a glassy 3D render. Padding `{spacing.section}` (104px) vertical.

**`editorial-band`** — The off-white band (`{colors.surface-soft}`) below the hero. Two-column: left text in `{colors.ink}` using `{typography.body}`, right side holding the `{component.gradient-image-card}`.

**`card`** — Generic content container measured at `{rounded.none}` (0px), no shadow, transparent fill (defaults to the band behind it). Letter's cards are unstyled frames around imagery and text rather than elevated surfaces.

**`gradient-image-card`** — The rendered-product block (translucent payment card on an iridescent pastel gradient). Background `{colors.surface-mist}` as the base behind the render, hard-edged (`{rounded.none}`). The pastel accents (`{colors.accent-sky}`, `{colors.accent-peach}`, `{colors.accent-lilac}`, `{colors.accent-rose}`) live inside this rendered gradient.

### Footer

**`footer`** — Light footer on `{colors.canvas}`, text in `{colors.ink}`, links in `{typography.button}`. Organized as multi-column link lists (Product / Company / Legal) with the Letter wordmark beneath.

**`footer-heading`** — Column heads ("Product", "Company", "Legal") in `{typography.h3}` (Neufile Grotesk Extended 20px / 600, 0.4px tracking), `{colors.ink}`.

**`footer-copyright`** — Fine-print copyright line in `{colors.muted}` (#9fabad), `{typography.button}`.

## Do's and Don'ts

### Do
- Anchor the page with a single black hero (`{colors.hero-dark}`) and keep the rest of the body white / off-white. The black-to-white transition is the brand's primary depth move.
- Use Albra Sans (or its Fraunces substitute) for h1/h2 only; keep Neufile Grotesk Extended (or Space Grotesk) for everything else.
- Keep the primary CTA a white block with `{colors.ink}` text and `{rounded.xs}` (2px) corners.
- Confine the pastel and saturated accents to rendered imagery and iridescent gradients — they belong inside the renders, not on buttons or text.
- Keep corners hard (0px) on cards and image frames; reserve the 2px only for the button.
- Lean on large spacing steps (104 / 128 / 192px) to create the sparse, gallery-like pacing.

### Don't
- Don't add shadows — the system measured none. Use band contrast and rendered lighting for depth.
- Don't apply accent colors (`{colors.accent-blue}`, `{colors.accent-violet}`, the pastels) to UI chrome or CTAs; they're decorative render colors only.
- Don't round card corners — the editorial sharpness depends on 0px frames.
- Don't ship Albra Sans or Neufile Grotesk Extended without a license; use the documented substitutes.
- Don't bold the display headline beyond 600 or mix the two families across roles.
- Don't document hover styling — only default and active/pressed states are in scope.

## Responsive Behavior

| Name | Width | Key Changes |
|---|---|---|
| Mobile | < 768px | Nav likely collapses; hero h1 scales down from 80px; editorial band's 2-column text/image split stacks; footer link columns wrap |
| Tablet | 768–1024px | Nav menu tightens; editorial split may narrow; imagery scales proportionally |
| Desktop | 1024–1440px | Full horizontal nav; 2-column editorial band; large rendered imagery |
| Wide | > 1440px | Same as desktop with more outer breathing room |

Note: only the desktop landing page was captured. The breakpoint behavior above is inferred from the desktop layout — see Known Gaps.

### Touch Targets
- `{component.button-primary}` padding (12px × 27.2px) on `{typography.button}` (16px) yields a comfortably tappable block.
- Nav links and footer links are rendered in `{typography.button}` (16px / 500); their tap area depends on surrounding padding (16px is the dominant spacing step).

### Collapsing Strategy
- The hero headline (80px) must scale down substantially on narrow viewports to avoid wrapping awkwardly.
- The editorial band's text + gradient-image-card split should stack to single-column.
- Footer Product / Company / Legal columns wrap to fewer columns.

### Image Behavior
- The hero 3D render is full-bleed and should crop, not letterbox, on narrow viewports.
- The gradient-image-card and chrome-sculpture render retain native aspect ratios; their hard-edged frames resize.

## Iteration Guide

1. Focus on ONE component at a time. Reference its YAML key directly (`{component.button-primary}`, `{component.gradient-image-card}`).
2. Variants of an existing component (`-active`, `-disabled`) live as separate entries in `components:`.
3. Use `{token.refs}` everywhere — never inline a hex in a component.
4. Never document hover. Default and Active/Pressed states only.
5. Display headlines stay Albra Sans (Fraunces substitute) 600; body stays Neufile Grotesk Extended (Space Grotesk substitute). The split does not blur.
6. The black hero is the only dark surface — don't introduce other dark cards casually.
7. Keep accents inside imagery; the UI layer stays monochrome (black / white / ink).

## Known Gaps

- Only the desktop **landing** page was captured; responsive breakpoints, mobile nav, and any interior pages are inferred, not measured.
- No shadow tokens were measured (dembrandt returned an empty shadow set); the "no shadow" reading is from ground truth but could miss subtle blurs on imagery.
- Only two radii were measured (0px and 2px); any larger radii on unseen components are unknown.
- The accent palette (teal, blues, violets, and the pastel washes) was measured by CSS frequency and is largely sampled from 3D-rendered gradients — exact roles (which accent maps to which UI use) are unconfirmed because they don't appear on interactive chrome.
- Albra Sans and Neufile Grotesk Extended are commercial/custom faces (the `fonts_licensed` flag was empty, but neither is open-source); substitutes are documented but exact metrics will differ.
- No semantic colors (success / warning / error), form inputs, focus states, or hover states were present on the captured page.
- Button active/pressed and disabled states were not measured — only the default `{component.button-primary}` is confirmed.
- The exact background fill of the generic `{component.card}` was not measured (radius and shadow only); it is documented as transparent / inheriting the band behind it.
- Animation and transition timings (hero render motion, scroll reveals) are out of scope.

<!-- Documented by duply · real-world design systems as ready-to-use DESIGN.md for AI coding agents · https://duply.ai/letter/design-md -->

Color Palette

Accent

Neutrals

Typography

h180px · 600 · 1.1
The quick brown fox jumps
h246px · 600 · 1.2
The quick brown fox jumps
h320px · 600 · 1.2
The quick brown fox jumps
body28px · 400 · 1.4
The quick brown fox jumps
button16px · 500 · 1
The quick brown fox jumps

Spacing & Shape

Spacing

NameValuePreview
xxs8px
xs12px
sm16px
md23px
lg27px
xl32px
xxl52px
huge72px
section104px
jumbo128px
max192px

Border Radius

NameValuePreview
none0px
xs2px

More like this

Build in any
design language

Free to browse. Real design systems, documented as DESIGN.md. New designs land weekly.

Browse the libraryHow it works