Checking your session...

Not an admin account

Go to There & Then

There&Then Admin

Leave admin
Messages

Nothing waiting. Invite requests and contact-form messages arrive here.

Loading...

Create invite
Invites
Accounts

Could not load accounts.

Accounts

Legal documents

Could not load legal data.

Legal documents

Read-only — publishing a new version is a migration, not a UI action.

Activation funnel
Signups
Captured 1+
Captured 5+
First cited Ask
In a shared space
Activated (5 caps + Ask, 14d)
Welcome message

Re-show the welcome to everyone on their next login (bumps the version).

Design system

Every component in public/ds/, drawn from the live files in every state. The theme switch applies to this visit only.

Colour tokens

Semantic aliases only: components read these, never the raw scales, which is what keeps both themes automatic.

Type

There&Then

Wordmark · Fraunces instance + EB Garamond ampersand

The morning we found the spoonbill

Display · Newsreader · headings and editorial moments

Karla spotted it from the pier, and neither of us had ever seen one.

Body · Hanken Grotesk · everything you read and type

2026-09-21 19:12 · 24.5551, -81.7800

Mono · IBM Plex Mono · timestamps, counts, coordinates

Recent · 3 of 33

Eyebrow · 600, uppercase, +0.08em

Chip · .tt-chip

A selectable control. Hairline at rest so it reads as pressable; filled when chosen. Try them.

at rest · .is-selected

Thirsty Mermaid

.is-set · holds a value you chose, with .tt-chip__clear

Location ready Location off No location

Status · .is-ok .is-warn .is-muted · border and text only, so a status never looks like a selection

Scroll row · .tt-scroll-row

Sideways scrolling that says so: the edge with more beyond it fades and carries an arrow. Neither appears when everything fits.

Sheet · .tt-sheet

A focused panel for a short explanation and one action: slides up from the bottom on a phone, floats centred on a wide screen. Shown here in place (it is position: fixed in use), over .tt-sheet-backdrop.

__handle __head __title __close __body __foot · primary action last

__aside sets a destructive action apart on the left · --top (on the sheet and its backdrop) for a sheet opened from a full-screen overlay

Progress · .tt-progress

For work someone is waiting on. The caller reveals it only once the wait is noticeable; a quick save never shows it.

In progress · .is-done · .is-error · .tt-progress--overlay pins it to the bottom of a photo tile

Button · .tt-btn

Four intents, one shape. Primary anchors the pastels with solid ink; danger says so.

--primary --secondary --quiet --danger

--danger-fill · only for the final confirm of something irreversible; ordinary destructive actions stay outlined

--sm · :disabled

--block

Deliberately not .tt-btn

Every action button is on the component layer (2026-09-23). These are different components on purpose, not a migration gap.

.btn-oauth · provider sign-in buttons follow Apple's and Google's own rules for how they must look, not ours.

dK

.category-chip and .space-badge are TAGS and labels, not controls.

Also: icon buttons (.header-icon-btn, .mic-btn, .refresh-btn), footer text links (.footer-action), and a link inside a sentence (.linkish-btn).