Rails, bands and spacers

The landing grammar as live parts: one rail, full-width bands, hatch spacers and heads, with the widths and paddings at every breakpoint.

Updated

A General Translation landing page is one ruled column. The column draws its two lines once, the bands inside it close each seam with one rule, hatch spacers sit between the bands, and each section opens with a head: a heading and one lead. The production mirror at /d/production rebuilds the shipped site page for page, and every number on this page comes from its stylesheets and the toolchain engine under them.

The page skeleton

Add, remove and reorder the parts of a page, then move the width between 390 and 1440 pixels. Each part stands at the height the engine's numbers give it at that width, and the plate checks every seam for one owner.

Rail picks the column: 1104 pixels for the production mirror, or 1170 for the toolchain engine and the hub's own article. Rules switches between the shipped ownership, where a section gives up its bottom rule to a spacer or a band under it, and a page where every part draws its own edges. A doubled seam is marked in the accent on the skeleton and in the list of parts. Measures tints each part's padding, and the readout under the skeleton lists the numbers at the current width. Text is drawn as bars, so the skeleton reads at any scale.

The column

ColumnWidthLinesSource
Production mirrormin(1104px, 100%)border-inline on the wrapper, removed at 620px and underprod-shell.css
Toolchain enginemin(1170px, 100%)the sametoolchain/styles.css
Hub articlemin(1170px, 100%) (--pt-rail)border-inline on the wrapperprototemplate.css
Reading column1280px at most, 56px padding a side (16px at 900px and under)none: the toolbar's rule and the sidebar's edge are the only lines beside itSheet.css

The wrapper draws both lines with its own border-inline, and a band inside it draws no side rails. A full-bleed band sits outside the wrapper and draws the pair from its own inner column at the same two x positions, so each line runs through the band unbroken. On production pages a registration cross sits where each seam meets a line: 9 pixels across, at 38 percent ink in light and 34 percent in dark.

Bands and spacers

Every value below is a clamp() of the viewport width, so a band's padding moves continuously between the breakpoints. The columns give the resolved values at four widths.

ValueRule14401024720390
Gutter (--tc-gut)clamp(20px, 3.1vw, 36px)3631.722.320
Head, over (production)clamp(26px, 2.8vw, 36px), 72px at 720 and under3628.77272
Head, over (toolchain)clamp(54px, 6.4vw, 82px), 72px at 720 and under8265.57272
Head, underclamp(28px, 3.2vw, 38px), 36px at 720 and under3832.83636
Hatch spacerclamp(28px, 3.4vw, 40px); 36px (production) or 40px (toolchain) at 720 and under4034.83636
Cell, overclamp(26px, 3vw, 36px), clamp(34px, 6vw, 42px) at 720 and under3630.74234
Cell, underclamp(30px, 3.4vw, 40px), clamp(38px, 6.5vw, 46px) at 720 and under4034.84638
Band column, over (production)clamp(28px, 3vw, 40px), 36px at 720 and under4030.73636
Band column, over (toolchain)clamp(60px, 7vw, 96px)9671.76060
Band column, underclamp(56px, 7vw, 88px)8871.75656
Hero, over and underclamp(44px, 5.6vw, 72px) and clamp(40px, 5vw, 64px)72, 6457.3, 51.244, 4044, 40
WidthWhat changes
1023px and underBento rows stack to one column: BentoRow, shell.css and every .tc-row variant fold at the same width.
760px and upA production head holds one line (white-space: nowrap); an authored break still splits it in two.
720px and underThe mobile ladder: heads 72px over and 36px under, the heading at 36px on 1.18, the lead at 17px on 1.55 and 18px under the heading, buttons at 44px, the head's watermark and its authored break hidden.
620px and underThe column's two lines are removed, and the hero's buttons fill the column up to 440px.

The production spacer (.v0-hatch) is a 45 degree diagonal, 1 pixel in every 8 at 8.5 percent ink, between two rules it draws itself. The section above it gives up its bottom rule, and the spacer gives up its own bottom rule to a band below it, whose top rule closes that seam. The hub article's spacer is 42 pixels at minus 45 degrees and draws its bottom rule only, because every section of that article closes itself with its own bottom rule.

The head and the Cta row

A head is a heading and at most one lead in a ruled box. The plate sets the production heads in real type at the width the slider gives and reads the heading's lines back: two at most, and one at desktop on production pages unless an authored break splits it.

Cta Row shows the hero's two buttons. The solid face with the ring is the page's primary action, and the outline face sits beside it. The two sit in equal columns as wide as the wider label, and at 620 pixels and under they fill the column up to 440 pixels, half the row each when both labels fit.

PartDesktop720px and under
Headingclamp(1.62rem, 2.5vw, 2.2rem) on 1.06, -0.028em, weight 50036px on 1.18
Lead15px on 1.62 in ink-2, 60ch wide, 13px under the heading17px on 1.55, 18px under the heading
Watermarka Heroicons solid glyph at 240px and 5 percent ink, 48px off the right edge; the Locadex mark at 343pxhidden
Button38px tall, a 13.5px label, 17px of side padding, the 6px control corner44px tall, a 15px label
Cta rowequal columns, a 10px gap, centeredfills the column up to 440px at 620px and under
Ringa blurred spectrum 2px outside the face at 60 percent opacity, on an 8px cornerthe same

Import and props

The shipped site renders every button through gt-cloud's Cta; the mirror on this site writes the same tc-btn faces directly.

import Cta from '@/components/landing/shared/Cta';

<Cta ring href={SIGN_IN_HREF}>Get Started</Cta>;
<Cta variant='outline' href='/docs'>Read the Docs</Cta>;
PropValuesWhat it does
variant'solid', 'outline', 'on-ink-solid', 'on-ink-outline'The ink face (white in dark), the hairline face, or the two faces for a hero on the black-hole field.
ringbooleanThe spectrum ring that marks the page's primary action, once per band at most.
size'sm', 'md', 'lg'32, 38 or 44 pixels; at 720px and under every face is 44px and sm is 38px.
href, externalstring, booleanA link, an external anchor, or a <button> when href is absent.
trackedan existing location slugFires the cta_clicked event with that slug; the slugs are fixed.

Labels are Title Case, with short function words lowercase after the first: Get Started, Get a Demo, Talk to Us, Read the Docs.

The line law

Every seam is drawn once, by one owner. The plate draws one junction a pixel at a time, at about 20 times its size: the column's left line, a section above and a hatch spacer below. Each pixel is composited by the browser from the shell's own token alphas, so the plate reads the same in both themes. The inset at the corner is the same crop at its real size.

Seam picks who draws the rule. Spacer and Section are the two shipped arrangements, and the other three are the defect classes the line auditor (scripts/lint/lines.mjs) reports. Clip Ground turns off background-clip: padding-box, so the spacer's diagonals run under its own rule.

CaseWhat the auditor seesThe fix
Doubledtwo strokes from two owners 1 to 4 pixels apart along most of their runone owner yields its edge
Coincidenttwo strokes on one row, whose translucent inks stack darkerone owner yields its edge
Missinga junction between two blocks that no stroke closesthe owner the table names draws it
Self-stacka translucent border over the element's own translucent groundbackground-clip: padding-box
JunctionOwnerThe other side
The column and a band inside itthe wrapper's border-inlinethe band draws no side rails
The column and a full-bleed bandthe band's inner column, at the column's edgesnothing beside the column
A section and the next sectionthe upper section's bottom rulethe lower section draws no top
A section and a spacerthe spacer's top rulethe section drops its bottom rule
A spacer and a bandthe band's top rulethe spacer drops its bottom rule
A head and its bento rowthe row's top rulethe head draws none
Two cells in a rowthe row's 1px gap over the hairline groundthe cells draw no borders

On this page