The style behind the software.
Warm white and near-black bands, giant 500-weight Geist, pill buttons, 24px media cards, lots of air. The same sheet follows twice — once on each tone. If it looks wrong here, it's wrong everywhere.
tailwind.config.ts · app/globals.css · components/ui<Band tone="dark">
Everything below reads the dark tone's CSS variables. Nothing in this block changes when it moves to the other band.
Tone swatches
--bg · --fg · --fg2 · --fg3 · --hair · --card — set by data-tone on the Band.
var(--bg)#050505var(--fg)#F4F1EAvar(--fg2)#A9A49Avar(--fg3)#6F6A62var(--hair)#1F1F1Cvar(--card)#111110Display scale
Geist 500. Tracking tightens as size grows. The lede is always grey (--fg2).
.display-heroFootage hero, CTA band · 44 → 96px · -0.04emFilm a walk. Get a world..display-2xlPage H1, section lead · 40 → 72px · -0.04emFilm a walk. Get a world..display-xlSection H2, Feature title · 32 → 52px · -0.03emFilm a walk. Get a world..display-lgH3, MediaRow titles · 26 → 34px · -0.03emFilm a walk. Get a world..display-mdCard titles, grid tiles · 20 → 24px · -0.02emFilm a walk. Get a world.
.ledeOne phone video becomes a 3D space anyone can walk, in any browser.
.body-lg · .bodyA failed reconstruction is never charged and never counts against your plan.
Typically under an hour from upload to a link, an embed and a file you own.
.body-sm · monoChecks run every 10 minutes via Vercel Cron. Grey means nothing was recorded.
Real reconstruction · phone-shot · via Giotto 7
Tags
<Tag> · <Tag soft> · <Tag solid>. Uppercase 12px/600 pill outlines. One sun dot per band at most.
Buttons
Pills. primary fills with --btn-fill, secondary is a hairline, text is a quiet link. Sizes sm (38) · md (48) · lg (56).
size="sm"size="md"size="lg"
.pill.chipInline code like NEXT_PUBLIC_HERO_SPLAT_URL or a path /t/via-giotto-7.
Inputs
h-12 rounded-full border t-hair bg-[var(--card)] px-5 t-fg placeholder:text-[var(--fg3)] focus:border-[var(--fg)]. Textareas are rounded-2xl.
Surfaces
.card — 24px radius, --card fill, hairline that strengthens on hover. .media — 24px radius, black behind. .dotgrid — radial-gradient backdrop, tone aware.
.cardHover me
The default container for a belief, a channel, a row of a security table. No shadow; depth is the hairline.

<Media src ratio="4/3"> · Real reconstruction · phone-shot · via Giotto 7.dotgridBehind a Feature's media. Fades at the edges.
<Feature>
Ray-style row: text one side, media in a dot-grid the other. side="left" | "right".
A two-minute walk at head height.
Any iPhone or Android. Lights on, slow steady pass, every room edge to edge. None of the shot guide's five rules is about hardware.

<MediaRow>
The grid under a heading: media card + display-lg title + body + small pill. cols=2 | 3.

The file
.plyEvery tour is a file you own. Download it, archive it, move it to another host.
<Band tone="dusk">
Everything below reads the dusk tone's CSS variables. Nothing in this block changes when it moves to the other band.
Tone swatches
--bg · --fg · --fg2 · --fg3 · --hair · --card — set by data-tone on the Band.
var(--bg)#17120Dvar(--fg)#F4F1EAvar(--fg2)#B5A994var(--fg3)#7A6F5Evar(--hair)#2A2119var(--card)#1F180FDisplay scale
Geist 500. Tracking tightens as size grows. The lede is always grey (--fg2).
.display-heroFootage hero, CTA band · 44 → 96px · -0.04emFilm a walk. Get a world..display-2xlPage H1, section lead · 40 → 72px · -0.04emFilm a walk. Get a world..display-xlSection H2, Feature title · 32 → 52px · -0.03emFilm a walk. Get a world..display-lgH3, MediaRow titles · 26 → 34px · -0.03emFilm a walk. Get a world..display-mdCard titles, grid tiles · 20 → 24px · -0.02emFilm a walk. Get a world.
.ledeOne phone video becomes a 3D space anyone can walk, in any browser.
.body-lg · .bodyA failed reconstruction is never charged and never counts against your plan.
Typically under an hour from upload to a link, an embed and a file you own.
.body-sm · monoChecks run every 10 minutes via Vercel Cron. Grey means nothing was recorded.
Real reconstruction · phone-shot · via Giotto 7
Tags
<Tag> · <Tag soft> · <Tag solid>. Uppercase 12px/600 pill outlines. One sun dot per band at most.
Buttons
Pills. primary fills with --btn-fill, secondary is a hairline, text is a quiet link. Sizes sm (38) · md (48) · lg (56).
size="sm"size="md"size="lg"
.pill.chipInline code like NEXT_PUBLIC_HERO_SPLAT_URL or a path /t/via-giotto-7.
Inputs
h-12 rounded-full border t-hair bg-[var(--card)] px-5 t-fg placeholder:text-[var(--fg3)] focus:border-[var(--fg)]. Textareas are rounded-2xl.
Surfaces
.card — 24px radius, --card fill, hairline that strengthens on hover. .media — 24px radius, black behind. .dotgrid — radial-gradient backdrop, tone aware.
.cardHover me
The default container for a belief, a channel, a row of a security table. No shadow; depth is the hairline.

<Media src ratio="4/3"> · Real reconstruction · phone-shot · via Giotto 7.dotgridBehind a Feature's media. Fades at the edges.
<Feature>
Ray-style row: text one side, media in a dot-grid the other. side="left" | "right".
A two-minute walk at head height.
Any iPhone or Android. Lights on, slow steady pass, every room edge to edge. None of the shot guide's five rules is about hardware.

<MediaRow>
The grid under a heading: media card + display-lg title + body + small pill. cols=2 | 3.

The file
.plyEvery tour is a file you own. Download it, archive it, move it to another host.
<Band tone="light">
Everything below reads the light tone's CSS variables. Nothing in this block changes when it moves to the other band.
Tone swatches
--bg · --fg · --fg2 · --fg3 · --hair · --card — set by data-tone on the Band.
var(--bg)#FAF8F3var(--fg)#0A0A0Avar(--fg2)#55524Cvar(--fg3)#8A867Evar(--hair)#E6E2D8var(--card)#FFFFFFDisplay scale
Geist 500. Tracking tightens as size grows. The lede is always grey (--fg2).
.display-heroFootage hero, CTA band · 44 → 96px · -0.04emFilm a walk. Get a world..display-2xlPage H1, section lead · 40 → 72px · -0.04emFilm a walk. Get a world..display-xlSection H2, Feature title · 32 → 52px · -0.03emFilm a walk. Get a world..display-lgH3, MediaRow titles · 26 → 34px · -0.03emFilm a walk. Get a world..display-mdCard titles, grid tiles · 20 → 24px · -0.02emFilm a walk. Get a world.
.ledeOne phone video becomes a 3D space anyone can walk, in any browser.
.body-lg · .bodyA failed reconstruction is never charged and never counts against your plan.
Typically under an hour from upload to a link, an embed and a file you own.
.body-sm · monoChecks run every 10 minutes via Vercel Cron. Grey means nothing was recorded.
Real reconstruction · phone-shot · via Giotto 7
Tags
<Tag> · <Tag soft> · <Tag solid>. Uppercase 12px/600 pill outlines. One sun dot per band at most.
Buttons
Pills. primary fills with --btn-fill, secondary is a hairline, text is a quiet link. Sizes sm (38) · md (48) · lg (56).
size="sm"size="md"size="lg"
.pill.chipInline code like NEXT_PUBLIC_HERO_SPLAT_URL or a path /t/via-giotto-7.
Inputs
h-12 rounded-full border t-hair bg-[var(--card)] px-5 t-fg placeholder:text-[var(--fg3)] focus:border-[var(--fg)]. Textareas are rounded-2xl.
Surfaces
.card — 24px radius, --card fill, hairline that strengthens on hover. .media — 24px radius, black behind. .dotgrid — radial-gradient backdrop, tone aware.
.cardHover me
The default container for a belief, a channel, a row of a security table. No shadow; depth is the hairline.

<Media src ratio="4/3"> · Real reconstruction · phone-shot · via Giotto 7.dotgridBehind a Feature's media. Fades at the edges.
<Feature>
Ray-style row: text one side, media in a dot-grid the other. side="left" | "right".
A two-minute walk at head height.
Any iPhone or Android. Lights on, slow steady pass, every room edge to edge. None of the shot guide's five rules is about hardware.

<MediaRow>
The grid under a heading: media card + display-lg title + body + small pill. cols=2 | 3.

The file
.plyEvery tour is a file you own. Download it, archive it, move it to another host.
The accordion. Hairline rows.
The living reference for docs/DESIGN_SYSTEM.md v2. Every element here is the production component on a real Band, not a drawing of it.
Once on a dark band, once on a light one. A block that only reads well on one tone has a hard-coded colour in it.
No. /style is listed in EXCLUDED_SITE_PAGES so it never appears in the sitemap.
Do this. Not that.
Condensed from docs/DESIGN_SYSTEM.md. The honesty rules are enforced by tests; the rest by review.
- Every section is a <Band tone>. Light and dark alternate down the page.
- Dusk is the third tone — a deep warm band, at most once per page, for the single most technical or most important section.
- Colour only through tone classes: t-fg, t-fg2, t-fg3, t-hair, .card, .media, var(--bg).
- Headlines through <Heading>: 500 weight, tight tracking, grey lede, optional pill on the right.
- Buttons are pills. Primary fills with the band's foreground; secondary is a hairline.
- Labels are <Tag> — uppercase pill outlines. Soft variant for metadata, solid rarely.
- Footage and renders live in <Media>: 24px radius, black behind, real reconstruction only.
- Label provenance once per page: “Real reconstruction · phone-shot”.
- Sun #E9A24E is the logo dot, live dots and at most one tag per band. Never a fill.
- “Under an hour” always sits next to “typically” or “a target, not a guarantee”.
- Every page keeps its pageMeta + JSON-LD and ends on <CTABand />.
- Hard-coded colours: text-bone, bg-card, border-line, text-ash, text-mute, bg-canvas.
- Serif, italics, glows, text-shadows, gradients on type.
- Aurora, particles, blurred blobs. (Film grain is systemic on dark and dusk bands — 5% noise on the ground, never decorative, never over type.)
- Sticky scroll-jacking, parallax, marquees, magnetic cursors.
- Hairline-only “Linear” panels with traffic lights (retired).
- Logo walls, testimonials, customer or tour counts, “% faster”.
- A promised turnaround — the tests fail the build on it.
- Stock imagery or any still presented as a customer listing.
The band every page ends on.
<CTABand title body primary secondary /> — hero type, centred, two pills. This is the real one.
