Proper AI

Brand

Identity, typography, color, voice, motion, and assets.

02.

Typography

Typefaces

Typeface 01Editorial voice

Newsreader

font-heading

The quick brown fox jumps over the lazy dog.

Use
Headlines, hero statements, the wordmark. Always italic, always negative tracking.
Weights
Italic 400, 500
License
SIL Open Font License — free for all use

Typeface 02Signal

Inter

font-body

The quick brown fox jumps over the lazy dog.

Use
Body copy, UI labels, buttons, long-form reading. Neutral and legible at every size.
Weights
400, 500, 700
License
SIL Open Font License — free for all use

Scale

The scale is deliberately small. Hierarchy comes from italic vs. roman, font family, and tracking — not size.

72pxHeroThe quick brown fox
48pxSectionThe quick brown fox
28pxCard titleThe quick brown fox
20pxSubsectionThe quick brown fox
14pxBodyThe quick brown fox
12pxMetaThe quick brown fox

Editorial patterns

Eyebrow + headline

Section 01 — Overview

Everything in one place.

Headline + lede

Quiet surfaces, loud content.

Strip the chrome. Let the work do the talking.

03.

Color

Color is a system of tokens, not hex values. Every surface references these CSS variables — never a raw color.

Dark canonicalLight availableWCAG AA on surface-1

Surfaces

Near-black backgrounds. The product lives on --bg-base; cards and menus lift one or two steps.

Base

--bg-base#0e0e0e

Surface 1

--bg-surface-1#141414

Surface 2

--bg-surface-2#1e2020

Surface 3

--bg-surface-3#1f2020

Accents

Lavender is the primary accent — focus rings, active nav, linkable text. Gold is secondary — used sparingly.

Lavender

--accent-lavender#c3c3ef

Lavender muted

--accent-lavender-muted#b5b5e1

Gold

--accent-gold#c0a67c

Gold secondary

--accent-gold-secondary#b49a71

Text

Four levels of hierarchy plus text-on-accent for content placed on a lavender or gold fill.

Primary

--text-primary#ffffff

Secondary

--text-secondary#9d9e9e

Muted

--text-muted#737373

Dimmed

--text-dimmed#525252

On accent

--text-on-accent#1e2021

Borders

Borders are always quiet — 3–10% alpha. They imply separation; they never shout it.

Subtle

--border-subtle#48484803

Default

--border-default#4848480a

Strong

--border-strong#48484817

Semantic

Reserve these for state, not decoration. Success on completion. Warning on risk. Error on failure.

Success

--success#22c55e

Warning

--warning#f59e0b

Error

--error#ef4444

Info

--info#3b82f6
04.

Voice & tone

Principles

01

Be decisive

Say what it is. Cut the hedges. “It might be worth considering” becomes “Do it.”

02

Use plain words

No jargon when a plain word works. “Leverage” is “use.” “Utilize” is always wrong.

03

One sentence at a time

Short sentences hit harder. Long ones earn their length or get cut.

04

Respect the reader

No hype. No all-caps urgency. Assume the reader is smart, busy, and fair.

Do / don't

Empty state

Don't

Oops! It looks like you don't have any invoices yet. Let's change that!

Do

No invoices yet. Add one to start a ledger.

Error message

Don't

Something went wrong. Please try again later or contact support.

Do

Save failed — network timeout. Retry or check your connection.

Marketing lede

Don't

Proper is a revolutionary AI-powered platform that empowers accountants to unlock unprecedented efficiency.

Do

Proper is bookkeeping, automated. Your ledger, closed in minutes.

Confirmation

Don't

Are you sure you really want to delete this? This action cannot be undone!!!

Do

Delete invoice INV-042? This can't be undone.

Glossary

Words we use consistently, and words we avoid.

  • ledgerPrimary noun. Always "a ledger," never "the books."
  • closeThe month is closed, not "finalized."
  • tenantInternal only. Customer-facing: "workspace."
  • AILowercase-capital, no hype. "Proper uses AI," not "powered by A.I."
  • ProperThe company. Always capitalized, no ".ai" suffix in copy.
05.

Motion

Principles

Fade and slight blur. No movement. Everything that enters the viewport fades opacity 0 → 1 and de-blurs 6px → 0. Nothing translates, scales, or rotates.

01

One primitive

Fade + deblur only. No translate, scale, or rotate. Consistency beats variety.

02

Appearance only

Motion is for mounting and revealing content. Hover and focus states are discrete — never animated.

03

Respect reduced motion

All animations honor prefers-reduced-motion. Duration drops to 0.01ms; content still transitions discretely.

Tokens

Three CSS custom properties define the entire animation system.

Token
Value
Use
--duration-fade
240ms
All fade animations
--ease-fade
cubic-bezier(0.2, 0, 0, 1)
All fade easings
--blur-enter
6px
Entry blur amount

Components

Three primitives cover every animation use case. All exported from @proper/ds. Planned in Plan 6.

<Fade>

Always-on mount animation. Wraps any element that should fade + deblur when it first renders. Used on page roots and new content blocks.

<Fade>…content…</Fade>
<Reveal>

IntersectionObserver-gated fade. Triggers once the element enters the viewport (threshold 0.1). Used on sections in long-scroll pages.

<Reveal>…section…</Reveal>
<Presence>

Keeps a child mounted for --duration-fade after visibility flips false, so the reverse fade completes before unmount.

<Presence show={open}>…panel…</Presence>
06.

Iconography

Library

Proper uses Google Material Symbols Outlined. Variable font — weight, optical size, and fill are all adjustable via CSS font-variation-settings.

Common icons

searchsearch
closeclose
addadd
checkcheck
arrow_forwardarrow_forward
arrow_backarrow_back
chevron_rightchevron_right
chevron_leftchevron_left
more_horizmore_horiz
more_vertmore_vert
settingssettings
personperson
homehome
folderfolder
descriptiondescription
uploadupload
downloaddownload
editedit
deletedelete
visibilityvisibility
visibility_offvisibility_off
locklock
lock_openlock_open
notificationsnotifications
warningwarning

Usage

<span className="material-symbols-outlined">search</span>

Style guidelines

All icons use the Outlined variant. Four CSS axes control appearance.

Axis
Value
Context
opsz (size)
20 / 24 / 48
Dense UI / default / display
wght (weight)
300 / 400
UI controls / default
FILL (fill)
0 / 1
Default / active or selected state
GRAD (grade)
0
Fixed — do not adjust

Set axes via CSS: font-variation-settings: 'wght' 300, 'opsz' 24, 'FILL' 0

Do / don't

Do

Use Outlined consistently

All icons across the product use the Outlined variant. Filled is only used to signal an active or selected state via the FILL axis.

Don't

Don't mix icon families

Never mix Material Symbols with Lucide, Heroicons, or any other set. Consistency matters more than individual icon quality.

Do

Match size to context

20px in dense UI (tables, sidebars), 24px default (buttons, headings), 48px display (empty states, hero).

Don't

Don't use icons without labels in dense UI

Icon-only buttons need a tooltip. Never rely on icon meaning alone in compact interfaces — not everyone shares the same visual vocabulary.

07.

Photography

Brand photography assets. Upload images to the bank for use in marketing, product, and recruiting.

Upload

Add brand photography to the image bank. Accepted formats: JPEG, PNG, WebP, AVIF.

08.

Downloads

Fonts

All three typefaces are available free under the SIL Open Font License.

  • Newsreader
    Google FontsSIL OFL
  • Inter
    Google FontsSIL OFL