---
version: alpha
name: Puzzle
description: Light design system extracted from puzzle.io (DOM-true values, Emblematic extractor 0.2.0, 2026-11-12).
colors:
  background: "#F3F4F1"
  surface: "#FFFFFF"
  on-surface: "#0A0B0B"
  on-surface-variant: "#0A0B0BB3"
  primary: "#CEB4FA"
  outline: "#0A0B0B33"
  -colors---violet-dark: "#311164"
  -colors---violet-light: "#F3EDFE"
  color-9: "#FFFFFF0D"
  -colors---green-light: "#CAFDE6"
  black-30: "#0000004D"
  color-12: "#000000"
  light-purple: "#E6DEF8"
  color-14: "#DFFCEE"
typography:
  display-lg:
    fontFamily: Haskoy
    fontSize: 54px
    fontWeight: 500
    lineHeight: 1.2
  headline-md:
    fontFamily: Generalsans
    fontSize: 38.7px
    fontWeight: 500
    lineHeight: 1.2
  title-md:
    fontFamily: Generalsans
    fontSize: 28.08px
    fontWeight: 500
    lineHeight: 1.25
  body-md:
    fontFamily: Haskoy
    fontSize: 18px
    fontWeight: 400
    lineHeight: 1.5
  body-sm:
    fontFamily: Haskoy
    fontSize: 16px
    fontWeight: 400
    lineHeight: 1.4
  mono-md:
    fontFamily: Jet Brains Mono
    fontSize: 14.4px
    fontWeight: 400
    lineHeight: 1.7
rounded:
  xs: 6.5px
  sm: 8px
  md: 9.5px
  lg: 10.5px
  xl: 14.5px
  2xl: 15.5px
  3xl: 16px
  4xl: 17px
  full: 9999px
spacing:
  xxs: 7px
  xs: 8px
  sm: 9px
  md: 9.5px
  lg: 10px
  xl: 10.5px
  2xl: 12px
  3xl: 12.5px
  4xl: 14px
  5xl: 16px
  6xl: 17px
  7xl: 18px
  8xl: 18.5px
  9xl: 23.5px
  container: 960px
components:
  button-primary:
    backgroundColor: "{colors.on-surface}"
    textColor: "{colors.surface}"
    rounded: "{rounded.sm}"
    padding: 8px
    height: 35.6px
  button-secondary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.on-surface}"
    rounded: "{rounded.sm}"
    padding: 8px
    height: 35.6px
  card:
    backgroundColor: "{colors.surface}"
    rounded: 15.3px
    padding: 18.7px
---

# Puzzle

> Extracted from [https://puzzle.io/](https://puzzle.io/) on 2026-11-12 by Emblematic. Every value below was read from the rendered DOM (computed styles, `document.fonts`, and the fonts Chrome actually used to paint text), not estimated from pixels. When the YAML front matter and this prose disagree, the YAML wins. Copy values from this file exactly; don't transcribe them from memory. Don't copy logos, imagery, illustrations or marketing copy.

## Overview

Puzzle uses a light canvas (#F3F4F1) with a palette led by #CEB4FA. Type is set in **Haskoy**, **Generalsans** (display), **Jet Brains Mono** (mono), with 18px body text. Layout: 960px container, top-sticky navigation, 11 sections. Built with webflow, gsap, jquery, hubspot, posthog, intercom, google-tag-manager, fastly.

## Colors

Area-weighted from painted backgrounds, text and borders on the 1440px light capture. Roles are inferred from usage (largest background, most text, interactive fills). Every hex is an exact computed value; a role marked *unverified* is a best guess that has not passed review, so its canonical token (e.g. `primary`) is left out of the front matter.

| Token | Hex | OKLCH | Role | Share of paint | CSS variable |
|---|---|---|---|---|---|
| `background` | `#F3F4F1` | 0.966 0.004 121.6 | bg | 39.3% | `--_colors---powder` |
| `surface` | `#FFFFFF` | 1 0 0 | surface | 24.6% | — |
| `on-surface` | `#0A0B0B` | 0.148 0.002 197 | text | 7.3% | `--neutral-black` |
| `on-surface-variant` | `#0A0B0BB3` (on bg `#505150`) | 0.148 0.002 197 | muted | 0.62% | `--_colors---neutral-black-70` |
| `primary` | `#CEB4FA` | 0.816 0.1 301.2 | accent | 0.19% | `--_colors---violet-medium` |
| `outline` | `#0A0B0B33` (on bg `#C4C5C3`) | 0.148 0.002 197 | border | 0.05% | `--_colors---neutral-black-20` |
| `-colors---violet-dark` | `#311164` | 0.286 0.133 293.6 | other | 17.4% | `--_colors---violet-dark` |
| `-colors---violet-light` | `#F3EDFE` | 0.956 0.023 302 | other | 4.2% | `--_colors---violet-light` |
| `color-9` | `#FFFFFF0D` (on bg `#F4F5F2`) | 1 0 0 | other | 2.1% | — |
| `-colors---green-light` | `#CAFDE6` | 0.953 0.06 165.9 | other | 1.3% | `--_colors---green-light` |
| `black-30` | `#0000004D` (on bg `#AAABA9`) | 0 0 0 | other | 0.72% | `--black-30` |
| `color-12` | `#000000` | 0 0 0 | other | 0.52% | — |
| `light-purple` | `#E6DEF8` | 0.915 0.036 299.7 | other | 0.64% | `--light-purple` |
| `color-14` | `#DFFCEE` | 0.966 0.035 165 | other | 0.26% | — |

Sparse chromatic highlights (not accents): `#8A4B08`.

Declared brand/accent tokens: `--accent` = `#84F6B1` (declared, not painted on this page), `--yellow-accent` = `#FFFA84` (declared, not painted on this page).

Contrast: text on background 17.85:1, muted text 7.23:1, accent 1.65:1.

Gradients in use: `linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3))`.

The site does not change under `prefers-color-scheme: dark`.

## Typography

| Family | Role | Weights | Share of text | Source |
|---|---|---|---|---|
| **Haskoy** | body | 400, 500, 700 | 65.6% | webfont |
| **Generalsans** (CSS: `Generalsans Webfont`) | display | 400, 500 | 31.9% | webfont |
| **Jet Brains Mono** (CSS: `JetBrainsMono`) | mono | 400 | 2.1% | webfont |

Scale (px): 12.5, 13, 14, 14.5, 15, 16, 17, 18, 18.5, 20, 23.5, 28, 38.5, 52. Effective ratio ≈ 1.193 (close to a minor third). Body 18px at line-height 1.5; display 54px with tracking 0em. Headings are sentence case. On a 390px viewport the body is 17px and display 42px.

## Layout

Spacing has no reliable single base unit; the most used steps are 7, 8, 9, 9.5, 10, 10.5, 12, 12.5, 14, 16, 17, 18, 18.5, 23.5px. Sections open with about 130px of space before their first line of text. Content sits in a 960px container on a 2-column grid. Text density 0.119 (text area / page area).

Section order (desktop). Kinds below the review threshold are shown as *section*:

1. **nav** (119px, bg #F5F5F1)
2. **hero** — “Introducing Puzzle 2.0: AI-native accounting software + Puzzle accounting servic” (852px, bg #F3F4F1)
3. **section** — “One platform underneath. Pick how much you do yourself.” (616px, bg #F3F4F1)
4. **pricing** — “Ask anything. Puzzle prepares the work. You approve it.” (2075px, bg #311164)
5. **section** — “Your books. Your way. With an expert when you need one.” (1272px, bg #F3F4F1)
6. **section** — “How much help do you want?” (1158px, bg #F3F4F1)
7. **section** — “50% faster month-end close — or your money back.” (403px, bg #F3F4F1)
8. **section** — “What would you do with more time?” (737px, bg #F3F4F1)
9. **section** — “Leave legacy accounting & manual processes behind. Keep everything that matters.” (1423px, bg #F3F4F1)
10. **faq** — “Accurate Books. AI Speed. Starting Now.” (1807px, bg #311164)
11. **footer** (771px, bg #F5F5F1)

## Elevation & Depth

Style: elevated. Most used shadows:

- `rgba(192, 143, 238, 0.2) 0px 2px 20px 0px`
- `rgb(80, 250, 171) 0px 2px 26px 0px`

## Shapes

Dominant corner radius 16px; radii in use: 6.5px, 8px, 9.5px, 10.5px, 14.5px, 15.5px, 16px, 17px, 18.5px, 27px, pill. Borders: hairline (1px).

## Components

- **button-primary**: backgroundColor `#0A0B0B`, textColor `#FFFFFF`, rounded `8px`, padding `8px 30px`, height `35.6px`, fontFamily `Haskoy`, fontSize `14px`, fontWeight `500` (e.g. “Book a demo”)
- **button-secondary**: backgroundColor `#CEB4FA`, textColor `#0A0B0B`, rounded `8px`, padding `8px 30px`, height `35.6px`, fontFamily `Haskoy`, fontSize `14px`, fontWeight `500` (e.g. “Try for free”)
- **card**: rounded `15.3px`, padding `18.7px`, backgroundColor `#FFFFFF`, border `1px solid #94949466`, shadow `rgba(192, 143, 238, 0.2) 0px 2px 20px 0px`

## Do's and Don'ts

- Do reserve `#CEB4FA` for primary actions and highlights; it covers only 0.19% of the painted page.
- Do set body copy in Haskoy at 18px / 1.5.
- Do use Generalsans only for display sizes, not for body text.
- Don't introduce font weights beyond 400, 500, 700.
- Do keep corners at 16px for most controls, and use the larger radii only for cards and media.
- Don't copy this site's logos, illustrations, photography or copy; use the system, not the brand assets.

## Provenance

Spec v2, extractor 0.2.0. Render quality: **ok**. Vision pass: not run. Fields below confidence 0.7 are hedged or left out above: `color.accent_strategy`, `layout.columns`, `layout.hero`, `layout.section_count`, `sections[].kind`, `space.base`, `space.section_padding_px`. Full per-field provenance is in `spec.json`.
