The welcome's Get started Fredoka, with NanumSquareRound for Hangul
- One element: the welcome's Get started, on iOS and Android.
- Fredoka SemiBold 17 px; Hangul in NanumSquareRound ExtraBold.
- Never a heading, a greeting or anything to read.
Design
How Foxl looks: Geist type, ink and paper with one blue, a sky with glass in it, and the patchwork pets that live there. For anyone building with Foxl or writing about it.
Three come from Foxl Sky and Glass, the design system of the iOS and Android apps. The fourth is the type system's.
Your agent works around the clock, so the app is a sky that keeps time: a steel-blue day with cumulus, a black night with stars. The sky is behind, never under body copy.
The composer, the tab bar, chips, a card with a control on it: each floats over the page with a rim of light. A sheet of text is never glass.
A pet appears where something is empty, waiting or arriving: a zero state, the welcome, an empty inbox. Never on a control, never on a list row.
Words are set in Geist, with JetBrains Mono for code: Foxl's own lines as much as a chat answer. The one exception is the welcome's Get started, in the round Fredoka of the stickers it opens onto.
Everything a person reads or works in, and everything Foxl says, is set in Geist, with JetBrains Mono for code. The one exception is the phone apps' welcome: its Get started is set in Fredoka, the round face of the stickers it opens onto. Every face is self-hosted and under the SIL Open Font License 1.1.
The welcome's Get started Fredoka, with NanumSquareRound for Hangul
Everything else Geist, with Pretendard for Hangul and JetBrains Mono for code
Moving the launch
The release moves to November 4. Design owns the onboarding copy, and the beta keeps its current build until then.
main once the train is green.release.yml with the dated changelog heading.| Role | Face | Size | Weight | Line height |
|---|---|---|---|---|
| Greeting (Foxl speaking)Where should we start today? | Geist | 17 px | 400 | 1.3 |
| Door titleSign in to Foxl | Geist | 28 px | 600 | 1.25 |
| Call to action (the welcome)Get started | Fredoka | 17 px | 600 | 1 |
| Empty state titleNo notifications | Geist | 14 px | 500 | 1.43 |
| Page titleSchedules | Geist | 28 px (20 px in the iOS top bar) | 600 | 1.25 |
| Body: chat answer, noteThe launch moves to Nov 4. | Geist | 16 px | 400 | 1.6 (notes 1.75) |
| CaptionUpdated 2 min ago | Geist | 13 px | 400 | 1.3 to 1.6 |
Foxl Blue belongs to the logo, never a background. The sky is the backdrop of the phone apps' welcome and, in Foxl's own colour theme, of their sign-in door and empty screens: a day gradient and a night one, faded into the page before the reading area starts. The stops below are the welcome's. Brand tokens as JSON.
#121212Mark body, wordmark, text on light backgrounds#FFFFFFDefault background#0969E3The crescent. Logo accent only, never a background#6f9dc4middle #97bad5horizon #bcd2e3#000000middle #010811horizon #02222fOn the phone apps a button is a capsule, except a list row and a button on a Settings card. On iOS 26 the tab bar, the header's icon buttons and the welcome are the system's own Liquid Glass; everywhere else glass is frost with a rim of light.
The one call to action on a screen. Ink by day, white by night.
A secondary control that sits on the sky: white by day, a soft shadow and only a faint hairline. Its words are Geist.
Foxl's own words in a sticker collage. Decoration, not a control: on the iOS welcome a touch only makes it bounce.
Chrome you act on: it lets the sky through and carries a rim of light. On iOS 26 the system glass also lenses it at the edge.
Foxl's patchwork pets, die-cut with a white vinyl border by the same recipe as the stickers the apps draw in an empty chat or an empty inbox. A pet appears where something is empty, waiting or arriving, never on a control or a list row. All 120 as PNG: ZIP, 2.8 MB.

An empty inbox, no schedules, no summary yet. The calico, asleep: nothing is waiting, so nobody is up.

A search or a filter found nothing. The hedgehog, still looking.

The desktop does not answer, or something failed to load. The frog, crying.

Connect a desktop, a channel or GitHub before there is anything to show. The bunny, waving you over.

Nyaa~ Stay with me and we will be happy together, always!

Point me at something hard. I like a challenge.

I heard you coming from three rooms away. I always do.

One eye is a button. It still sees everything you do.

Long day? Good. I have energy for two.

I do not know what we are doing but I am coming with you.

Three colours, one nap schedule.

The hat was here when I arrived. I have decided it is mine.

I keep the late shift. Someone has to.

I came in through the door you left open. I'm staying.

This seed is for later. Everything is for later.

I lean on my reed and watch the rain. It's a good life.

Chirp! Did you see that? Neither did I. Chirp!

This acorn is mine. You may look. Gently.

The scarf stays on. It's part of the look.
These are Foxl's characters: use them to refer to Foxl. Please do not use them in a way that suggests Foxl sponsors or endorses you. For anything else, email support@foxl.ai.
Reduce Motion, in the system or in the app, stops all of it and every screen still reads in its final state. The native iOS welcome follows the system switch and cross-fades instead.
| Motion | Duration | Curve |
|---|---|---|
| The planet into the orb (the welcome) | 820 to 850 ms | iOS a spring, damping 0.86; Android an ease-out |
| A headline writes in | 800 ms, letter by letter (Android: word by word, 600 ms each) | rise 12 px, fade, unblur |
| A sticker pops | 560 ms | back-out (overshoot 1.56) |
| A sticker pours out of the orb | 620 ms, staggered by distance | back-out (iOS: a spring, damping 0.62) |
| The hero fading as you swipe | follows the gesture | linear on iOS, eased on Android |