duply
Preview of Ventriloc

Ventriloc

A quiet, editorial business-intelligence interface built on a warm off-white canvas (#f5f5f5) with near-black ink, sharp zero-radius UI primitives, and a bronze/gold accent that signals "analytics consultancy". The system is flat — no shadows — and leans on a large PolySans display headline, restrained Inter body copy, and full-bleed dark feature bands with soft-rounded corners that punctuate an otherwise airy, generous-whitespace layout. Brand voltage comes from a single warm orange motion-mark and product dashboard fragments shown inside the hero rather than from decorative color.

---
version: alpha
name: Ventriloc-design-analysis
description: A quiet, editorial business-intelligence interface built on a warm off-white canvas (#f5f5f5) with near-black ink, sharp zero-radius UI primitives, and a bronze/gold accent that signals "analytics consultancy". The system is flat — no shadows — and leans on a large PolySans display headline, restrained Inter body copy, and full-bleed dark feature bands with soft-rounded corners that punctuate an otherwise airy, generous-whitespace layout. Brand voltage comes from a single warm orange motion-mark and product dashboard fragments shown inside the hero rather than from decorative color.

colors:
  ink: "#202020"
  black: "#000000"
  muted: "#4d4d4d"
  neutral: "#828282"
  accent: "#816729"
  accent-orange: "#ff682c"
  accent-brown: "#512520"
  accent-blush: "#edd0c6"
  accent-clay: "#863b32"
  link-blue: "#007aff"
  canvas: "#f5f5f5"
  surface: "#ffffff"
  surface-soft: "#efefef"
  surface-strong: "#e8e8e8"
  surface-cream: "#ebe6dd"
  hairline: "#e4e4e4"
  on-dark: "#ffffff"

typography:
  h1:
    fontFamily: "PolySans, Inter, sans-serif"
    fontSize: 66px
    fontWeight: 400
    lineHeight: 0.909
    letterSpacing: -1.32px
  h2:
    fontFamily: "PolySans, Inter, sans-serif"
    fontSize: 24px
    fontWeight: 400
    lineHeight: 1.0
    letterSpacing: -0.48px
  h3:
    fontFamily: "PolySans, Inter, sans-serif"
    fontSize: 20px
    fontWeight: 600
    lineHeight: 1.0
    letterSpacing: 0
  body:
    fontFamily: "Inter, sans-serif"
    fontSize: 18px
    fontWeight: 500
    lineHeight: 1.333
    letterSpacing: 0
  button:
    fontFamily: "PolySans, Inter, sans-serif"
    fontSize: 16px
    fontWeight: 400
    lineHeight: 1.0
    letterSpacing: 0

rounded:
  none: 0px
  xs: 3px
  sm: 6px
  md: 8px
  lg: 12px
  xl: 16px
  xxl: 20px
  pill: 200px

spacing:
  xxs: 5px
  xs: 8px
  sm: 10px
  md: 15px
  lg: 20px
  xl: 24px
  xxl: 30px
  xxxl: 40px
  huge: 50px

components:
  button-primary:
    backgroundColor: "{colors.ink}"
    textColor: "{colors.on-dark}"
    typography: "{typography.button}"
    rounded: "{rounded.none}"
    padding: 0px 12px 2px 18px
  button-secondary:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.button}"
    rounded: "{rounded.none}"
    padding: 0px 12px 2px 18px
  button-pill:
    backgroundColor: "{colors.ink}"
    textColor: "{colors.on-dark}"
    typography: "{typography.button}"
    rounded: "{rounded.pill}"
    padding: 0px 12px 2px 18px
  text-link:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.button}"
  card:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.ink}"
    rounded: "{rounded.none}"
  dashboard-fragment-card:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.md}"
  input:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.none}"
  dark-feature-band:
    backgroundColor: "{colors.ink}"
    textColor: "{colors.on-dark}"
    typography: "{typography.h1}"
    rounded: "{rounded.xxl}"
    padding: 50px
  hero-band:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.h1}"
    padding: 40px
  logo-strip:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.neutral}"
    typography: "{typography.body}"
    padding: 20px
  cookie-banner:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.muted}"
    typography: "{typography.body}"
    rounded: "{rounded.md}"
    padding: 20px
  search-tile:
    backgroundColor: "{colors.surface-cream}"
    textColor: "{colors.muted}"
    typography: "{typography.body}"
    rounded: "{rounded.xxl}"
    padding: 30px
---

## Overview

Ventriloc's landing surface is a calm, editorial business-intelligence interface — a warm off-white canvas (`{colors.canvas}`#f5f5f5) carrying near-black ink (`{colors.ink}`#202020), a bronze/gold accent (`{colors.accent}`#816729), and a single warm orange motion-mark (`{colors.accent-orange}`#ff682c). The system reads as a confident analytics consultancy: lots of whitespace, a large quiet display headline, and real product dashboard fragments shown directly in the hero rather than marketing illustration.

Type voice splits into two roles: **PolySans** (the display + UI face — h1, h2, h3, and button labels) and **Inter** (running body copy). The h1 is set large (66px) at regular weight 400 with tight negative tracking (-1.32px) and a sub-unity line-height (0.909) — a modern, slightly compressed editorial headline that does the brand work without bold weight.

The most distinctive structural move is the **flat, zero-radius UI layer**: buttons, cards, and inputs all measure 0px border-radius (sharp corners), and the system carries **no shadows at all**. Depth comes entirely from color blocking — most notably the full-bleed dark feature band (`{colors.ink}`) with soft 20px rounded corners that punctuates the long-scroll page, where the orange motion-mark glyph appears at large scale.

Color is deployed sparingly. The page is almost monochrome — off-white canvas, near-black ink, gray secondary text — with the bronze accent reserved for small highlights ("Trusted by") and the orange reserved for the brand glyph and accents inside dashboard fragments. A small warm-brown / blush / clay palette (`{colors.accent-brown}`, `{colors.accent-blush}`, `{colors.accent-clay}`) appears only inside embedded product UI and illustrative tiles.

**Key Characteristics:**
- Warm off-white canvas (`{colors.canvas}`#f5f5f5) rather than pure white — the page floor reads soft and editorial.
- Zero-radius UI primitives: buttons, cards, and inputs all measured at 0px radius. Sharp corners are the system's signature on the interactive layer.
- No shadows anywhere — depth is purely color-block contrast (the measured shadow set is empty).
- Large quiet PolySans h1 (66px / weight 400 / -1.32px tracking / 0.909 line-height) — display presence without bold weight.
- Bronze/gold accent (`{colors.accent}`#816729) used sparingly for label highlights; warm orange (`{colors.accent-orange}`#ff682c) used for the brand motion-mark and dashboard accents.
- Full-bleed dark feature band (`{colors.ink}`) with soft `{rounded.xxl}` (20px) corners — the only large rounded surface, and the place where the orange glyph lives.
- Pill-radius treatment (`{rounded.pill}` — 200px) reserved for the cookie-consent "Allow all" button — derived as a pill from the 200px measurement.
- Real product dashboard fragments (revenue charts, profitability donut, finance cards) shown in-hero at `{rounded.md}` (8px) — brand voltage from actual product chrome, not illustration.

## Colors

### Brand & Accent
- **Accent / Bronze** (`{colors.accent}`#816729): The brand's signature warm-metal tone. Used on the "Trusted by" highlight and small label accents. It is the highest-frequency non-ink color in the analysis, but appears as small text/highlight rather than fills.
- **Accent Orange** (`{colors.accent-orange}`#ff682c): The brand motion-mark color — the large flowing glyph in the dark feature band, and accent moments inside dashboard fragments. The single piece of high-chroma voltage in an otherwise monochrome system.
- **Accent Brown / Clay / Blush** (`{colors.accent-brown}`#512520, `{colors.accent-clay}`#863b32, `{colors.accent-blush}`#edd0c6): A small warm earth-tone set observed only inside embedded product UI fragments and illustrative tiles. Never used on primary CTAs or editorial type.
- **Link Blue** (`{colors.link-blue}`#007aff): The system default link/UI blue — appears rarely (4 occurrences), likely inside product chrome or native controls, not in the marketing voice.

### Surface
- **Canvas** (`{colors.canvas}`#f5f5f5): The warm off-white page floor.
- **Surface** (`{colors.surface}`#ffffff): White cards, cookie banner, dashboard fragment backgrounds.
- **Surface Soft** (`{colors.surface-soft}`#efefef): Soft section dividers / low-contrast panels.
- **Surface Strong** (`{colors.surface-strong}`#e8e8e8): Slightly deeper neutral panel.
- **Surface Cream** (`{colors.surface-cream}`#ebe6dd): A warm cream tile background used in the lower search/illustration zone.
- **Hairline** (`{colors.hairline}`#e4e4e4): The 1px divider / border tone on light surfaces.

### Text
- **Ink** (`{colors.ink}`#202020): All headlines and primary text; also the dark feature-band background and primary button fill.
- **Muted** (`{colors.muted}`#4d4d4d): Body and secondary running text (the cookie-banner copy, paragraph text).
- **Neutral** (`{colors.neutral}`#828282): Tertiary text — greyscale partner logos, fine print.
- **Black** (`{colors.black}`#000000): Pure-black used in occasional UI fragments / glyph strokes.
- **On Dark** (`{colors.on-dark}`#ffffff): Text on the dark feature band and primary buttons.

## Typography

### Font Family
The system runs **PolySans** for display + UI (h1, h2, h3, button labels) and **Inter** for body copy. PolySans is a commercial geometric grotesque — it is not freely available as a public web font, so an open substitute should ship in its place (see note below). Inter carries the running text at weight 500.

The split is functional:
- PolySans (display + UI, weight 400–600, negative tracking on large sizes) — h1, h2, h3, button labels
- Inter (body, weight 500, neutral tracking) — paragraphs and supporting copy

### Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.h1}` | 66px | 400 | 0.909 | -1.32px | Hero headline ("Accelerating Growth Through Analytics") — PolySans |
| `{typography.h2}` | 24px | 400 | 1.0 | -0.48px | Section sub-heads — PolySans |
| `{typography.h3}` | 20px | 600 | 1.0 | 0 | Small card / list titles — PolySans (weight 600) |
| `{typography.body}` | 18px | 500 | 1.333 | 0 | Running text, descriptions, banner copy — Inter |
| `{typography.button}` | 16px | 400 | 1.0 | 0 | Button labels — PolySans |

### Principles
The h1 is the brand's loudest statement, but it is loud through **size and negative tracking, not weight** — PolySans at 400 with -1.32px tracking and a sub-unity 0.909 line-height creates a compressed, modern editorial headline. Don't bold the display headline; the regular weight is the voice.

Body copy stays Inter at weight 500 — slightly heavier than a typical 400 body, which keeps small text legible against the warm canvas. The boundary between PolySans (structure) and Inter (prose) is strict.

### Note on Font Substitutes
PolySans is a licensed/commercial typeface and should not be shipped without a license. A close open-source substitute is **Inter Display** (or **Inter** itself) at the equivalent weights with the measured negative tracking applied (-1.32px on the 66px h1, -0.48px on the 24px h2). For a more geometric character closer to PolySans, **Schibsted Grotesk** or **Hanken Grotesk** are usable open alternatives. Preserve the weight (400 display / 600 h3) and the negative letter-spacing signature in any substitution.

## Layout

### Spacing System
- **Base unit:** ~5px (the smallest measured value; the scale runs in 5/8/10px increments rather than a strict 4px grid).
- **Tokens:** `{spacing.xxs}` 5px · `{spacing.xs}` 8px · `{spacing.sm}` 10px · `{spacing.md}` 15px · `{spacing.lg}` 20px · `{spacing.xl}` 24px · `{spacing.xxl}` 30px · `{spacing.xxxl}` 40px · `{spacing.huge}` 50px.
- **Most frequent steps:** 20px (`{spacing.lg}`) and 10px (`{spacing.sm}`) dominate the measured set — they are the workhorse gap/padding values.
- **Section padding:** the dark feature band and large tiles use `{spacing.huge}` (50px) / `{spacing.xxxl}` (40px) for generous internal breathing room.

### Grid & Container
- **Hero band:** a left-aligned headline + body + button row, with product dashboard fragment cards floated to the right — a roughly 1/2 editorial split at desktop.
- **Logo strip:** "Trusted by 80+ partners" with a single horizontal row of greyscale partner logos (ABB, Olymel, Cascades, Angelcare, etc.).
- **Long-scroll rhythm:** large amounts of empty canvas separate bands — the page is deliberately airy, with the dark feature band acting as the major visual punctuation point.

### Whitespace Philosophy
Ventriloc uses very generous whitespace — far more empty canvas than a typical SaaS page. The editorial intent is calm and confident: a single large headline, a short paragraph, two buttons, and a quiet logo strip carry the entire above-the-fold, with the product dashboard fragments providing the only visual density.

## Elevation & Depth

| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow, no border | Body sections, hero band, logo strip — the default |
| Hairline | 1px `{colors.hairline}` border | Card outlines, input borders where present |
| Color-block | `{colors.ink}` full-bleed dark band on `{colors.canvas}` | The dark feature band — color contrast does all the elevation work |
| Soft tile | `{colors.surface-cream}` / `{colors.surface}` panels at `{rounded.xxl}` | Lower-page search / illustration tiles |

The measured shadow set is **empty** — the system uses no drop shadows at all. Depth is achieved entirely through color blocking and the soft 20px corners of the dark band. This is a deliberately flat, editorial elevation model.

### Decorative Depth
- The large orange motion-mark glyph inside the dark feature band is the system's single decorative focal point — a flowing curved form in `{colors.accent-orange}` against `{colors.ink}`.
- Dashboard fragment cards carry their own internal product chrome (chart lines, donut gauges, value labels) — these render as content, not as system-level elevation.

## Shapes

### Border Radius Scale

| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Buttons, cards, inputs — the sharp-corner UI layer (measured directly on all three primitives) |
| `{rounded.xs}` | 3px | Minor inline accents |
| `{rounded.sm}` | 6px | Small chips / inner elements |
| `{rounded.md}` | 8px | Dashboard fragment cards in the hero |
| `{rounded.lg}` | 12px | Mid-size panels |
| `{rounded.xl}` | 16px | Larger inner panels |
| `{rounded.xxl}` | 20px | The dark feature band and large lower-page tiles — the dominant rounded surface |
| `{rounded.pill}` | 200px | Cookie-consent "Allow all" button — derived as pill from the 200px measurement |

The shape system is deliberately bimodal: **interactive primitives are sharp (0px)** while **large content surfaces are soft (20px)**. The contrast between sharp buttons/inputs and the soft-cornered dark band is a defining characteristic.

### Photography & Glyph Geometry
Partner logos render as flat greyscale wordmarks in `{colors.neutral}`. The orange motion-mark is a freeform curved vector glyph, not a geometric shape. Dashboard fragments retain their native product chrome at `{rounded.md}` (8px).

## Components

### Buttons

**`button-primary`** — The signature dark CTA ("Contact us"). Background `{colors.ink}` (#202020), text `{colors.on-dark}`, type `{typography.button}` (PolySans 16px / 400), zero radius (`{rounded.none}`), padding measured at 0px 12px 2px 18px (the slightly asymmetric padding is a real measured value).

**`button-secondary`** — The outlined alternate ("About us"). Transparent background, `{colors.ink}` text, type `{typography.button}`, zero radius. A 1px hairline outline distinguishes it from canvas.

**`button-pill`** — The cookie-consent primary ("Allow all"). Background `{colors.ink}`, text `{colors.on-dark}`, `{rounded.pill}` (200px, derived). The pill radius appears only in the consent UI — it is not the marketing-button shape.

**`text-link`** — Inline text actions ("Reject & close", "Personalize", "Privacy policy"). Transparent background, `{colors.ink}` text, type `{typography.button}`. Underlined where used as a body-inline link (e.g., "Privacy policy").

### Cards & Containers

**`card`** — The base content card. Background `{colors.surface}` (#ffffff), zero radius (`{rounded.none}`), no shadow (measured). The system's default container is sharp and flat.

**`dashboard-fragment-card`** — Product UI fragments shown in the hero (Finance chart, Revenue $14,878,500 panel, Profitability 26% donut). Background `{colors.surface}`, rounded `{rounded.md}` (8px), holding live-style chart chrome. These show the actual product at small scale rather than illustrating it.

**`hero-band`** — The above-the-fold band. Background `{colors.canvas}`, headline in `{typography.h1}`, body in `{typography.body}`, button row beneath, dashboard fragments to the right. Internal padding around `{spacing.xxxl}` (40px).

**`dark-feature-band`** — The full-bleed dark punctuation band. Background `{colors.ink}` (#202020), text `{colors.on-dark}`, soft `{rounded.xxl}` (20px) corners, generous `{spacing.huge}` (50px) padding. Carries the large orange motion-mark glyph (`{colors.accent-orange}`). The only large dark surface on the page.

**`search-tile`** — A warm lower-page tile holding a search field and small illustrative thumbnails. Background `{colors.surface-cream}` (#ebe6dd), rounded `{rounded.xxl}` (20px), padding `{spacing.xxl}` (30px).

**`logo-strip`** — "Trusted by 80+ partners" row. Background `{colors.canvas}`, greyscale partner wordmarks in `{colors.neutral}`, "Trusted by" label highlighted in `{colors.accent}` (#816729). Padding `{spacing.lg}` (20px).

### Inputs & Forms

**`input`** — Standard text/search input. Background `{colors.surface}`, text `{colors.ink}`, type `{typography.body}`, zero radius (`{rounded.none}`). The sharp-corner treatment matches buttons and cards.

### Consent

**`cookie-banner`** — The bottom-right consent card. Background `{colors.surface}` (#ffffff), copy in `{colors.muted}` via `{typography.body}`, rounded `{rounded.md}` (8px), padding `{spacing.lg}` (20px). Carries the `{component.text-link}` "Personalize" / "Reject & close" and the `{component.button-pill}` "Allow all".

## Do's and Don'ts

### Do
- Keep buttons, cards, and inputs at zero radius (`{rounded.none}`). The sharp corner is the system's interactive signature.
- Reserve `{rounded.xxl}` (20px) for large content surfaces — the dark feature band and the warm cream tiles. Don't soften the small primitives.
- Set the h1 large and quiet — PolySans 400 with -1.32px tracking. Size and tracking carry the headline, not weight.
- Keep the palette nearly monochrome: off-white canvas, near-black ink, gray secondary text. Let `{colors.accent}` (bronze) and `{colors.accent-orange}` appear only as small highlights.
- Show real product dashboard fragments in `{component.dashboard-fragment-card}` rather than marketing illustration.
- Use the dark feature band (`{component.dark-feature-band}`) as the single major punctuation point in the long scroll.
- Keep the system flat — no drop shadows. Use color blocking for depth.

### Don't
- Don't add shadows. The measured system carries none — shadows would break the flat editorial voice.
- Don't round the buttons or inputs. Sharp corners are intentional; the only pill is the cookie "Allow all".
- Don't bold the h1 or set it in Inter. Display is PolySans 400 with negative tracking.
- Don't spread the warm earth-tones (`{colors.accent-brown}`, `{colors.accent-clay}`, `{colors.accent-blush}`) into the editorial layer — they belong inside product fragments and illustrations only.
- Don't use the orange (`{colors.accent-orange}`) on primary CTAs — the CTA is `{colors.ink}`. Orange is the brand glyph color.
- Don't crowd the layout — generous whitespace is part of the voice.

## Responsive Behavior

### Breakpoints
Only the desktop landing page was captured, so responsive rules are inferred from the band structure rather than measured at multiple widths.

| Name | Width | Key Changes (inferred) |
|---|---|---|
| Mobile | < 768px | Hero headline + dashboard fragments stack to single column; h1 scales down from 66px; logo strip wraps to multiple rows |
| Tablet | 768–1024px | Hero retains split but tightens; dashboard fragments shrink |
| Desktop | 1024–1440px | Full hero split (headline left, fragments right); single-row logo strip |
| Wide | > 1440px | Same as desktop with more outer canvas breathing room |

### Touch Targets
- `{component.button-primary}` padding (0px 12px 2px 18px) yields a compact label button — on touch surfaces it should be padded to a 44px minimum height.
- `{component.button-pill}` (cookie "Allow all") is comfortably tappable at pill scale.
- `{component.text-link}` actions are small — they need adequate spacing on touch.

### Collapsing Strategy
- Hero's headline/fragment split collapses to single-column on mobile — copy first, dashboard fragments below.
- The dark feature band keeps its `{rounded.xxl}` corners but reduces padding from `{spacing.huge}` (50px) at narrow widths.
- The logo strip reduces to wrapped multi-row at mobile rather than scaling logos down.

### Image Behavior
- Dashboard fragment cards retain native aspect ratios and resize proportionally.
- Partner logos stay flat greyscale wordmarks at every breakpoint.
- The orange motion-mark glyph scales with the dark band.

## Iteration Guide

1. Focus on ONE component at a time. Reference its YAML key directly (`{component.dark-feature-band}`, `{component.dashboard-fragment-card}`).
2. Variants of an existing component live as separate entries in `components:` (e.g., `button-pill` vs `button-primary`).
3. Use `{token.refs}` everywhere — never inline a hex in a component.
4. Never document hover. Default and Active/Pressed states only.
5. Keep the bimodal shape rule intact: sharp (0px) on primitives, soft (20px) on big surfaces.
6. The system is flat — resist adding shadows.
7. When in doubt about emphasis: bigger PolySans before bolder PolySans.

## Known Gaps

- Only the desktop landing page was captured; tablet/mobile breakpoints, the full navigation bar, and footer are not in the analysis. Responsive rules above are inferred.
- PolySans is a licensed/commercial typeface (though not flagged in `fonts_licensed` by the analyzer); an open substitute is documented in the Typography section and must be used unless a license is held.
- The dark feature band's background is documented as `{colors.ink}` (#202020) — its exact background was not measured separately and may be a marginally different near-black; the orange glyph color (`{colors.accent-orange}`) is confirmed by frequency.
- The asymmetric button padding (0px 12px 2px 18px) is a verbatim measured value; the secondary/outlined "About us" button's exact border color and radius were not separately measured (documented as hairline + zero-radius by inference).
- No shadow tokens were measured (the shadow set is empty) — confirmed flat, but any subtle product-UI shadows inside dashboard fragments belong to product chrome and are out of scope.
- The deep warm-brown / clay / blush tones (`#512520`, `#863b32`, `#edd0c6`, plus `#3c1e1a`, `#331613`, `#6b1e1c`, `#1f3138`) were measured at low frequency and appear to originate inside embedded product UI and illustration; their systematic roles are not confirmed.
- Animation and transition timings (the motion-mark, chart reveals) are not in scope.
- Input focus, error, and success states were not captured — only base zero-radius input geometry is documented.

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

Color Palette

Accent

Neutrals

Typography

h166px · 400 · 0.909
The quick brown fox jumps
h224px · 400 · 1
The quick brown fox jumps
h320px · 600 · 1
The quick brown fox jumps
body18px · 500 · 1.333
The quick brown fox jumps
button16px · 400 · 1
The quick brown fox jumps

Spacing & Shape

Spacing

NameValuePreview
xxs5px
xs8px
sm10px
md15px
lg20px
xl24px
xxl30px
xxxl40px
huge50px

Border Radius

NameValuePreview
none0px
xs3px
sm6px
md8px
lg12px
xl16px
xxl20px
pill200px

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