01

Text fields

Single-line input with the label above and the hint between label and input. Validation messages sit directly under the input and always pair colour with an icon.

Account number

7 states · 44px height · 1.5px border
Default (empty)—

10 digits

Focused:focus-visible

10 digits

Filledvalue

10 digits

Disableddisabled

10 digits

Read-onlyreadonly

10 digits

Erroraria-invalid="true"

10 digits

Error: Enter a 10-digit account number.

Success.is-valid

10 digits

Account verified.

02

Choices

Checkbox, radio group, toggle and select. Selected controls use the brand colour; focus always uses the indigo ring so it never reads as a selection.

Checkbox

“Send me paper statements” · 20px box
Unchecked—
Checked:checked
Focused:focus-visible
Disableddisabled
Erroraria-invalid="true"

Error: Accept the terms to continue.

Radio group

“Statement frequency” · Monthly, Quarterly, Yearly
None selected—
Statement frequency
One selected:checked
Statement frequency
Focused:focus-visible
Statement frequency
Disabledfieldset[disabled]
Statement frequency
Erroraria-invalid="true"
Statement frequency

Error: Choose a frequency.

Toggle

“Notify me of transfers over $500” · role="switch"
Offaria-checked="false"
Onaria-checked="true"
Focused:focus-visible
Disableddisabled

Select

“Transfer from” · Everyday, Savings, Joint account
Closed (placeholder)—
Openaria-expanded="true"
Transfer from
  • Everyday account
  • Savings account
  • Joint account
Focused:focus-visible
Disableddisabled
Erroraria-invalid="true"

Error: Choose an account.

03

Buttons

Primary for the main action on a screen, secondary for alternatives, destructive for actions that remove money or access. Loading keeps the label and adds a spinner so the button does not change width.

Default—
Primary
Secondary
Destructive
Hover:hover
Primary
Secondary
Destructive
Focused:focus-visible
Primary
Secondary
Destructive
Pressed:active
Primary
Secondary
Destructive
Disableddisabled
Primary
Secondary
Destructive
Loadingaria-busy="true"
Primary
Secondary
Destructive
04

Transfers list

The “Recent transfers” card in each data state. Status badges differ by colour, icon and border style, so they stay distinct without relying on colour alone.

Loading

aria-busy="true"

Recent transfers

Loading transfers…

Empty

0 results

Recent transfers

No transfers match your search.

Check the spelling, or search by a different name, amount or date.

Error

request failed

Recent transfers

Transfers could not be loaded.

Check your connection, then try again. Your money and scheduled transfers are not affected.

Populated

4 results

Recent transfers

DateRecipientAmountStatus
Nora Jansen $120.00 Completed
Elm Street Rentals $1,450.00 Completed
City Power & Water $86.40 Pending
Kaito Mori $250.00 Failed
Showing 4 transfersView all transfers
05

Messages

Inline alerts sit in the page flow. Toasts confirm the result of an action and can be dismissed. Dialogs ask for confirmation before an action that cannot be undone.

Inline alerts

4 types · icon + colour + left rule
Information.alert--info

Information: Transfers made after 6 pm are processed the next business day.

Success.alert--success

Success: Your transfer was scheduled.

Warning.alert--warning

Warning: Your daily transfer limit is almost reached.

Error.alert--error

Error: Your transfer could not be sent.

Toast notifications

Shown in place · dismissible
Success toastrole="status"

Transfer scheduled

$250.00 to Kaito Mori on 18 Oct 2026.

Error toastrole="alert"

Transfer failed

The recipient’s bank declined the payment. No money left your account.

Confirmation dialog

Shown open inside its panel · destructive action
Openrole="dialog"
06

Transfer form

The same form after submission: on the left with two validation errors and a summary that links to each field, on the right after a successful submission.

Error state

2 errors

New transfer

Send money from your Harbor Bank account.

10 digits

Error: Enter a 10-digit account number.

Error: Enter an amount greater than $0.00.

Up to 140 characters. The recipient can see this.

Success state

form replaced

New transfer

Send money from your Harbor Bank account.

Transfer scheduled

$250.00 to Kaito Mori on 18 Oct 2026

From
Everyday account
Note
Concert tickets
Reference
HB-2026-48213

You can cancel this transfer until 6 pm on 17 Oct 2026.