HOA Connect

Design system

The workspace surface: liquid glass, one accent, light and dark.

Accent

The workspace ships one brand accent, but it is resolved through getAdminAccent() — so letting an organization brand their own workspace is a one-line change. Pick a colour to preview it: the buttons, links, focus rings, glass rims and the active tab thumb all re-tint together.

HOA Connect

Type

Seven roles. Actions are Title Case, meta-labels are UPPERCASE, prose is sentence case.

The quick brown foxtype-displayPage title — one per page
The quick brown foxtype-sectionSection heading
The quick brown foxtype-cardCard & panel titles
The quick brown foxtype-bodyRunning text
The quick brown foxtype-metaTimestamps, secondary lines
The quick brown foxtype-microMetadata labels only
The quick brown foxtype-labelForm & field labels

Buttons

Pill by default. One primary action per view.

Segmented control

The one way to switch between sibling views. Arrow keys move and select; the thumb slides on the house spring.

Selected: overview / all

Stat cards

Direction and goodness are separate: dues going up is an increase and bad news.

Collected this month

Outstanding dues

Active units

Open requests

Data table

Sortable headers, keyboard-reachable rows, and a built-in empty state. Collapses to labelled cards on phones. `row-class` tints a whole row when its state — not one of its cells — is what matters.

Type

Charts

Every chart sits in an AppChartCard, which owns the three states a chart really has — loading, empty, drawn. Colour comes from --chart-1…5, declared light and dark, so a chart follows the theme without being told. A colour that MEANS something (overdue, failed) leaves the categorical ramp for the status tokens instead.

Email activity

Sends and opens over the week

Open work by type

Stacked — the parts sum to something worth knowing

Outstanding by age

One series, coloured per bar, past-due on the status tokens

Homes by occupancy

Composition, with the whole in the hole

The year in meetings and projects

A Gantt strip — a moment gets a dot, a span gets a bar

Empty is a state

Not an accident, and not bare axes

No dues history yet

Once a charge is paid, the months fill in.

Empty states

No documents yet

Published documents appear here for every resident.

No matches

Try a different search or clear your filters.

Top documents

No downloads yet

Documents residents open get counted here.

Forms

Email notifications

Send a digest every morning.

Progress

Storage used this month.

Bottom sheet

The create/edit surface. Drag the grabber down to dismiss — past 100px or with a flick it goes, otherwise it springs back.

Grouped rows

Materials

Glass belongs to floating chrome and cards — never to content backgrounds, and never stacked glass-on-glass.

glass-surface
--strong
ios-card
glass-edge
glass
active-thumb