Ballmac UI home

Presets / Harbor

Harbor preset

A confident ocean blue with Manrope's wide, modern letters and soft corners. Looks established without looking stiff. Tune it below, check it in light and dark, then install it with one command or its code.

Start from a design system

Colour, corners, typeface, platform feel and motion, tuned together. Pick one, then change anything below. Each has a code, so it is one line to share.

Quiet greys, sharp typeGeist · Web feel · Snappy motion
Trustworthy blue, open typeManrope · Web feel · Native motion
Deep indigo, editorial sansInstrument Sans · Web feel · Native motion
Rich purple, very round, playfulPlus Jakarta Sans · Web feel · Playful motion
Burnt orange, technical lettersSpace Grotesk · Web feel · Playful motion
Blush and soft serifFraunces · Web feel · Calm motion
Deep green, friendly and groundedFigtree · Web feel · Calm motion
Fresh teal, round and clearDM Sans · Web feel · Native motion
Paper, gold and bold typeBricolage Grotesque · Web feel · Native motion
Printed page, reading serifNewsreader · Web feel · Calm motion
Black, white, square, monospacedJetBrains Mono · Web feel · Snappy motion
Electric blue, built for darkGeist · Web feel · Snappy motion
A native Mac appSystem font · macOS feel · Native motion
An iOS app, in a browserSystem font · iOS feel · Custom motion
A Windows appSystem font · Windows feel · Custom motion

Or start from a colour theme

Twelve themes, each checked for contrast in light and dark. They set colour, corners and motion and leave your font and feel alone.

Customise

Harbor

Preset code
2814-78n7-rge5-7z4b

Paste a code and the design loads. Nothing is stored: the code is the design.

Platform feel

A feel sets radius, density, font, motion, focus ring, shadows, text and control sizes together. Change any of them below afterwards.

Colour
248°
65%
Buttons

Buttons take the brand colour.

27%
Page
Shape
0.625rem
Density

Scales every gap and padding.

Borders
Type

Modern and a little wide. Fintech, SaaS. Installed from Fontsource, so the files are served from your own app.

Motion

Quick, quiet, a hint of spring

1×
25%

How far springs overshoot before they settle.

1×

How far things move when they enter.

1×

Lift on hover and depth on press.

1×

The gap between items that enter one after another.

Reduced motion

Visitors who ask for less motion get no travel, lift, bounce or loops. Fades stay.

Your own components follow too: Tailwind's duration-* and ease-* classes read these tokens.

Light previewReal Ballmac components
Northwind
MJ
Net new revenue
Monthly recurring revenue, by source
$128,400 12.4%
New revenue grows from 42 in January to 78 in June; expansion from 18 to 42.
Plan usage
72% of your seats are in use
ProAnnual18 seatsOverdue

The five chart colours, in order.

New project
Fields, switches and sliders

Enter a full email address.

Invoice sent
Northwind will email the receipt to maya@northwind.example today.
Payment failed
The card ending 4242 was declined. Update it to keep your plan active.

The quick brown fox jumps over the lazy dog

Body text in the muted colour: contrast is measured for this pairing, on the page and on muted surfaces.

Northwind
The window chrome follows the platform feel: traffic lights on the left for macOS, caption buttons on the right for Windows, a plain bar otherwise.

Menus and dialogs open outside the preview, so they are left out. In your app they follow the same tokens.

Feel the motion

Hover, press and replay. Every panel reads the tokens your settings produce, so what you feel here is what your components do.

Native motion

1× speed · 25% bounce · 1× travel

Easing

Spring overshoots by 2%. The ease-out never does.

— ease-out— spring

Hover and press

Lift and press depth follow the hover setting.

Hover this cardLifts 2 px

Enter and stagger

50 ms between rows, 10 px of travel.

  • Design review
  • Ship the beta
  • Write the changelog
  • Invite the team

Durations

Tailwind's duration-150, duration-200 and the rest scale with speed.

  • Fast140 ms
  • Base220 ms
  • Slow320 ms
  • Reveal600 ms

Springs in JavaScript

Components built on Motion read the same speed and bounce.

Loops

Decorative loops run.

Compare the feels

The same app in your colours, once per platform feel. Only the handling changes: sizes, corners, focus, shadows, menus and window controls.

Notes
WebNeutral, as it is today
Notes
macOSCompact, soft shadows, frosted menus
Notes
iOSBig targets, rounded, dims on press
Notes
WindowsSquare-ish, bordered, crisp 2 px focus

These are web components that feel like each platform, not native controls. Ballmac UI is not affiliated with Apple or Microsoft.

Use it

$ pnpm dlx shadcn@latest add @ballmac/preset-harbor
What to install

Everything. Untick a part to keep your own: the command then installs only what is ticked.

This is the Harbor preset, so it installs by name. The command writes the tokens into your globals.css, and adds the typeface (with next/font on Next.js, from Fontsource elsewhere).

Contrast

32 of 32 checks pass

Every text and graphic pairing the components use, measured against WCAG: 4.5:1 for text, 3:1 for focus rings and chart colours. The builder moves lightness for you, so the result stays readable at any hue.

Contrast ratios in light and dark mode
PairingLightDarkNeeds
Text on page19.1:117.8:14.5:1
Text on cards19.1:116.6:14.5:1
Text in popovers19.1:116.6:14.5:1
Button text4.5:18.5:14.5:1
Primary used as text4.7:18.5:14.5:1
Secondary button text16.4:114.7:14.5:1
Muted text on page6.0:17.8:14.5:1
Muted text on muted5.4:16.5:14.5:1
Text on accent15.9:113.3:14.5:1
Destructive text5.2:15.7:14.5:1
Focus ring3.6:16.3:13:1
Chart 13.9:17.3:13:1
Chart 23.3:18.6:13:1
Chart 33.0:19.8:13:1
Chart 44.0:17.1:13:1
Chart 53.3:18.5:13:1

Tokens

Light