Checking your session...
Nothing waiting. Invite requests and contact-form messages arrive here.
Loading...
Could not load accounts.
Includes notes created directly into a shared space; excludes notes shared with this account by others.
Could not load legal data.
Read-only — publishing a new version is a migration, not a UI action.
Re-show the welcome to everyone on their next login (bumps the version).
Every component in public/ds/, drawn from the live files in every
state. The theme switch applies to this visit only.
Semantic aliases only: components read these, never the raw scales, which is what keeps both themes automatic.
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
A selectable control. Hairline at rest so it reads as pressable; filled when chosen. Try them.
at rest · .is-selected
.is-set · holds a value you chose, with .tt-chip__clear
Status · .is-ok .is-warn .is-muted · border and
text only, so a status never looks like a selection
Sideways scrolling that says so: the edge with more beyond it fades and carries an arrow. Neither appears when everything fits.
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.
Why it matters, how to do it, and what counts as done.
__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
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
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
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.
.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).