Skip to content

Grid, Layout & Rhythm

Governs how content is placed on every Fernando Kylas surface: the page edge, bands, pauses, columns, breakpoints and the spatial scale that every product, chapter and non-screen canvas inherits.

Status
Approved
Status note
Canonical. The sole spatial foundation; fifteen refinement questions are acknowledged and intentionally excluded (§14).
Version
7
Updated
2026-09-01
Approved by
Fernando Kylas
Approved
2026-09-01
Supersedes
spacing.md and layout.md, both absorbed into this chapter on 2026-08-25 by Fernando's decision on GRID-08. This chapter is now the sole spatial foundation: the base unit and its scale, radii, the page edge, bands, pauses, columns, breakpoints and every non-screen canvas belong here.
Open items
15 open, 7 resolved, of 22 recorded
Canonical source
foundations/grid-layout-rhythm.md

This is the canonical spatial chapter of the Fernando Kylas Brand System. It defines how content is placed, how far apart things sit, and what those distances mean. Every product that inherits the brand inherits this file: the rendered chapters, the Publishing Platform, the Report Engine, the living brand website, and any future foundation.

Every spatial behaviour in this document was measured before it was named. 199 intervals between blocks, the page edge at eleven viewports from 320 to 1600, the reading measure, layout nesting depth, and the correlation between each interval and the block preceding it were measured in a browser against the three rendered chapters on 2026-07-25. Where a statement is a judgement rather than a measurement, it says so.

What is approved

Fernando Kylas approved Grid, Layout & Rhythm on 2026-08-26, and Version 7 on 2026-09-01. The approval covers the spatial language and the values that now resolve it: the page edge and its dimensions (§2), the bands (§3), the three pause types and their screen values (§4), indivisibility and the bound-pair model (§5), the separation of component spacing from editorial pacing (§6), the 4px unit, the twelve-step scale and the radii (§6.1 to §6.3), columns, nesting and collapse (§8), alignment (§9), the four breakpoints and the canvas exemption from stepping (§10), the bleed contract and its two-element structure (§3.5), and the prohibitions (§12).

Fifteen open items remain and none of them contradicts what this chapter states, which is why the count is less alarming than it reads. They are acknowledged and intentionally excluded in two groups:

No undocumented change may modify the approved spatial system. A change supersedes a decision in DECISIONS.md, with a reason.


Version 1 defined vocabulary and relationships, not dimensions. That was deliberate, and it was the substance of the chapter rather than a gap in it. Per DECISIONS.md, 2026-07-25: a pause is a relationship, and the medium determines the distance. A version that opened with numbers would have contradicted its own first principle.

Version 4 supplies the dimensions, and supplies them as resolutions rather than as definitions. The pause values (§4.7), the base unit, scale and radii (§6.1 to §6.3) and the breakpoints (§10.1) arrived on 2026-08-25. Not one of them was chosen. Every value was already realised in production and was ratified against the rule it claims to express, which is the order §13.6 argued for: publish the vocabulary first so that a proposed value becomes falsifiable when it arrives.

CompanionPurpose
typography.mdOwns measure, display composition, optical alignment and canvas floors
colour.mdOwns surfaces and borders, which decide when a block has a visible edge
identity.mdOwns clear space, which is a spatial rule this file does not override
../GRID-FOUNDATION-BRIEF.mdThe measured brief this chapter answers
../platform/DESIGN.mdThe reference implementation

1. Spatial philosophy

Space carries meaning, or it is noise

brand-principles.md §3.2, in the spatial domain.

This is the colour philosophy applied to space. colour.md §1 holds that colour communicates meaning or it does not appear. Space is held to the same standard here.

The system had already reached this position before anyone wrote it down. Across the three rendered chapters, 199 intervals between top-level blocks fall on exactly three values, with no exceptions. A fourth value was never needed, because there was never a fourth thing to say.

A spacing value that carries no meaning is decoration, and this system does not permit decoration.

A pause is a relationship, not a distance

The distance is what the medium does with the relationship. The relationship is what the author means.

This is not a convenient abstraction. It is what the measurement showed. Of the three intervals in use, two express the same relationship: one where the preceding block ends in plain text, one where it ends in a visible edge. The relationship is identical. The number differs because a bordered block already ends with its own boundary and its own padding, so an identical measured gap does not read as an identical gap.

IntervalAfter a block with a visible edgeAfter plain content
the shorter3114
the middle4819
the longer213

One relationship, two numbers, and the difference is optical. That is the whole argument for defining types rather than values, and the system made it before the rule existed.

Width belongs to content, not to columns

brand-principles.md §3.4.

The chapters do not assign width by column span. Prose takes the reading measure. A lead takes more. A table takes the content column. A type specimen that must hold its true size takes a rail of its own and scrolls.

Width is a property of what the content is. This is the same logic as the semantic colour tokens, where a token names a job and never a colour: grounds change, jobs do not.

Restraint is functional, not aesthetic

brand-principles.md §3.1. What follows is what it costs in space.

colour.md §1 argues that each additional hue costs a contrast obligation, a meaning obligation and a reproduction obligation. Each additional spacing value costs the same kind of debt. It must mean something, be distinguishable from its neighbours, and survive every viewport, every canvas and print.

The evidence that restraint is already practice: the spacing scale offers thirteen steps, and the two largest are never used once in any chapter.

Some space must be refused

Every other rule in this chapter concerns space the system should provide. One rule concerns space it must withhold. A heading and its opening sentence are one thought, and the grid may not come between them.

This is the only prohibition in the system that is not about excess. It is about intrusion, and §5 treats it as a first-class concept rather than an exception.


2. The page edge

What it is

The page edge is intentional breathing room. It exists to serve reading comfort, compositional restraint and visual confidence. It communicates calm rather than density.

It is not residual whitespace, not a by-product of the content column, and not a margin left over once the content has been placed. It is placed first and everything else is placed inside it. Decided 2026-07-25.

What the measurement shows

The edge already behaves as a proportional rule with a floor and a ceiling. It held a constant 5.0% of viewport width at four separate viewports, sat at a fixed maximum across the four widest, and rested on a minimum across the three narrowest.

A judgement, not a measurement: that this proportional behaviour was intentional rather than incidental. Nothing in the repository states it. The support for reading it as intentional is that typography.md §8 already governs type as a percentage of canvas width, so a proportional edge is consistent with an existing proportional rule rather than a new idea.

The rules that hold regardless of dimension

Why it is not negotiable per page

A page that tightens its edge to fit more in has decided that density matters more than calm. That is a legitimate decision for some design systems and it is not this one. colour.md §1 refuses a second accent because variety is not a requirement, clarity is. The edge refuses the same trade.

The dimensions

Resolves GRID-01, 2026-08-26.

Value
Proportion5% of viewport width
Floor20px (1.25rem)
Ceiling64px (4rem), reached at 1280

Declared as clamp(1.25rem, 5vw, 4rem).

Ratified, not chosen. These are the values the three rendered chapters already realised, measured at eleven viewports on 2026-07-25: a constant 5.0% between a 20px floor and a 64px ceiling, with the floor holding across the three narrowest and the ceiling across the four widest. The measurement came first and this section names it.

The edge interpolates rather than stepping, and §10.3 is why. That is the one exemption from §10's stepping rule, and it exists because the edge is derived from the canvas rather than from type.


3. Bands

A band is a permitted horizontal width, chosen by what the content is. Four are in active use across the three chapters, and a fifth is required by the website and does not exist yet.

3.1 Reading measure

For continuously-read prose. Owned by typography.md §6, which derives it from measured character widths rather than from taste. This chapter does not restate the value and does not own it.

The measure is a reading instrument, not a container. Content that is not being read continuously has no business obeying it. That distinction is the reason the remaining bands exist.

3.2 Wide

For leads, section introductions and structural headings: content that is read, but not at length, and that needs to feel like an opening rather than a paragraph.

Measured, leads exceed the reading measure 9 to 14 times per chapter, and structural headings 22 times in one chapter. The wide band is already in use and was never declared.

3.3 Content column

For tables, records, panels, specimens, grids and proofs. Anything the reader scans, compares or consults rather than reads through.

This is the widest band that respects the page edge, and it is where most of a documentation chapter lives.

3.4 Rails: content that must hold its size

Some content cannot shrink without becoming false. A type specimen set at a specific size is that size; a demonstration drawn at a fixed width marks that width. Shrinking it to fit would leave the label truthful and the artefact lying.

A rail lets such content keep its true size and scroll within its own bounds, rather than shrinking or overflowing the page.

Rails are active in one chapter and absent from the other two, which is correct: only Typography has yet had content that must hold its size. The rail is the system's answer to the conflict between fidelity and fit, and fidelity wins.

3.5 Bleed

Content that extends to the viewport edge, crossing the page edge deliberately.

No documentation chapter uses bleed, and none should. A document has no reason to reach the paper's edge. A website does: WEBSITE-ARCHITECTURE-REVIEW.md §7 identifies the total absence of any edge-to-edge moment as the strongest single signal that a page reads as a PDF rather than a site.

Bleed is therefore scoped to public pages and is the one genuinely new spatial capability this foundation adds.

A bleed section is two elements, and that is the whole contract. One crosses the page edge and carries the surface; the other re-establishes the page edge and holds the content. Neither does the other's job.

ElementSpansCarriesNever carries
The bleedPage edge to page edge, the full width of its containerThe surface: a background token, a ground image, a ruleContent, and no measure of its own
The inner bandAn ordinary band, chosen by content role (§3.6)The content, aligned exactly as it would be outside a bleedThe surface

Why two elements rather than one. A single element would have to escape the page edge and then restore it by arithmetic, and the arithmetic is the part that drifts. With two, the inner element is an ordinary band that has never heard of bleed: it takes its band token and centres itself exactly as the section above it does. Alignment is preserved by construction rather than recomputed, so a bleeding section and its neighbours align because they obey one rule, not because two rules were made to agree.

This is not a new shape. The masthead and the footer are already built this way, and the site's own shell.css records why: a full-bleed band containing a contained row, so a future surface can reach the viewport edge without moving the content inside it. The contract ratifies the structure already carrying the system's two most repeated bands rather than inventing one.

The escape is measured from the container, never from the viewport. 100vw is wider than the container whenever a classic scrollbar is present, and that difference is horizontal overflow on the one assertion that has to stay at zero from 320 to 1600 px. The page edge is a token; negating it is exact at every viewport and at 200% text.

Bleed does not change vertical rhythm, and it gets no pause of its own. The distance between a bleeding section and its neighbour is the pause the relationship calls for (§4), chosen exactly as it would be if neither bled. A surface change is not a relationship, and letting the visual weight of an edge-to-edge band argue for a larger gap is how a rhythm becomes a series of exceptions.

Its internal padding is a different thing from the pause. A bleed with a visible surface needs space between that surface's edge and its own content; that padding sits inside the surface and is not spacing between sections. The pause stays outside the surface, on the page ground — otherwise two consecutive bleeds fuse into one uninterrupted block of colour.

At most one bleed per public page. §12 already states the remedy for a page that never bleeds as one edge-to-edge moment, deliberately placed, and the plural is what breaks it: a second edge-to-edge moment halves the first. imagery.md §4.4 reaches the same conclusion from the other side — two grounds in a row is wallpaper. Consecutive bleeds are forbidden, and a second one anywhere on a page is a judgement that owes a reason.

What may sit inside a bleed is narrower than what may sit in a section. Where the bleed carries a ground, imagery.md §4.4 governs: a ground sits behind a heading, a mark, or nothing, and never behind body text, because the contrast of text over a photograph cannot be computed in advance and therefore cannot be gated. A bleed carrying a flat surface token has no such restriction, because a token's contrast is measured.

Bleed is removed in print. This section's own first rule is that a document has no reason to reach the paper's edge, and a printed public page is a document. The bleed collapses to the page's own margins; the inner band is already correct and needs no print rule of its own. A component that cannot degrade to paper is a product component (component-architecture.md §8), and this one degrades by construction.

3.6 The rule that binds the bands together

A band is chosen by content role, never by available space. Two blocks of the same kind take the same band on every page and every surface. A table does not become a reading-measure table because the page around it is sparse.

A band must never be coupled to anything other than width. This is not a preference. The engine's prose container couples a heading's rhythm behaviour to the reading measure, and the consequence is measurable: of 61 structural headings across the three chapters, 2 use it. The chapters needed the rhythm at the wide band, could not have it, and each reimplemented the rhythm without the binding. §5.4 records what that cost.


4. Pauses

A pause is the interval between neighbouring content. Its length is decided by the medium. Its type is decided by the relationship, and the type is what this foundation defines.

4.1 The hierarchy

TypeThe relationshipWhat the reader should perceive
BoundOne continuous thoughtNo boundary at all. The two parts read as one thing
RelatedA continuation within the same topicA breath. The thought moves on without restarting
SectionA deliberate conceptual boundaryA new thought begins. The previous one is finished

Three types, and the ordering is by increasing separation. Accepted 2026-07-25.

4.2 Bound

Not a small pause. The absence of a perceived boundary. Bound is the only pause type whose job is to prevent separation rather than to create it, and §5 treats it as its own concept because it needs enforcing rather than measuring.

The default. Measured, it accounts for roughly 90% of all intervals between blocks once optical compensation is accounted for.

Related takes more than one physical distance. After plain text it is shorter; after a block that ends in a visible edge it is longer, because a bordered block already supplies a boundary and its own internal padding. The relationship has not changed. Only the perception has.

This is the clearest illustration of the chapter's first principle. Anyone maintaining this system who sees two different measured gaps and concludes there are two relationships will get the rhythm wrong.

4.4 Section

Rare by design. Measured, the longest interval accounts for roughly 7.5% of intervals: about three uses per chapter. A Section pause used often stops meaning anything, in the same way that a page of em dashes stops marking interruption. Restraint is what preserves the signal.

4.5 What the medium decides

The same three types resolve differently by surface. Screen resolves a Section pause as vertical space. Print resolves a Bound pause as a page-break refusal. A fixed canvas such as A4 cannot expand, so it resolves the hierarchy by proportion rather than by addition.

One declaration, resolved per medium. This is the currentColor contract from identity.md §4.1, applied to space: the artwork ships once and the consuming context supplies the value, so the declaration cannot drift from the medium it lands in.

4.6 What is still open

Whether optical compensation is part of the Related type or a separate correction applied to it is GRID-04. Values are no longer deferred; they are §4.7.

4.7 The values, per medium

Resolves GRID-03, 2026-08-25.

The type stays canonical and the number below is one medium's resolution of it. That is §13.1 kept rather than abandoned: a pause is still a relationship, and screen is one of the surfaces that has to express it.

TypeScreenTokenMeasured, of 199 intervals
Bound32px--fk-space-6the smallest editorial separation in use (§5.7, assertion 4)
Related56px--fk-space-8117 · 59%
Related, optically compensated72px--fk-space-967 · 34%
Section96px--fk-space-1015 · 7.5%

Nothing here was chosen. All three values were already in production, and §1 is the evidence: 199 intervals across the three rendered chapters fall on exactly these numbers with no exceptions. What was missing was never the value. It was the rule saying which relationship each one expresses, and that rule is §4.1.

The two Related numbers are one type, which is §4.3 rather than an exception to it. §1's cross-tabulation shows the split is optical: the shorter value follows plain content 114 times out of 117, the middle value follows a block with a visible edge 48 times out of 67.

The ratios matter more than the numbers. 56 : 72 : 96 is 1 : 1.29 : 1.71, so separation widens as the hierarchy climbs. §4.1 asserts that ordering; this is it made physical.

Other media resolve the same types differently, per §4.5 and §11. Print resolves Bound as a page-break refusal rather than a distance, and a fixed canvas resolves the hierarchy by proportion because it cannot expand. Those resolutions are not stated here and are not implied by these numbers.


5. Indivisibility

Three terms, one of which is the Bound pause seen from the other side. The vocabulary is not new: it already exists in the engine's print rules, where it works. It has no equivalent on screen, where it fails.

TermMeaningCurrently
BoundMay not be separated from what followsDeclared for print. Fails on screen
AtomicMay not be split internallyDeclared for print across 25 components. Works
DivisibleExplicitly permitted to breakDeclared for print with three named exceptions. Works

Divisible matters as much as the other two. A system that only ever forbids splitting will strand blank space at the foot of a page. The three named exceptions in the print rules exist because a long register must be allowed to break rather than leave half a page empty.

5.1 What a bound pair is

A bound pair is a directed, adjacent, non-transitive relationship between an antecedent and a consequent, where the antecedent is incomplete without the consequent, and where the system may not place a perceptible boundary between them.

The antecedent is the member that cannot stand alone. The consequent completes it. A heading is incomplete without the content it introduces; the content is complete without the heading. That asymmetry is the whole relationship, and it is why an orphaned heading reads as broken while an orphaned paragraph does not.

The content declares the relationship. The medium decides the distance. A relationship carried only by a spacing value is not a relationship. Accepted 2026-07-25.

5.2 The seven properties every bound pair possesses

  1. Directed. Antecedent to consequent, never the reverse. The relationship is asymmetric because the incompleteness is asymmetric.
  2. Adjacent. The consequent immediately follows the antecedent. Intervening content does not weaken a binding; it means there was never a pair. Adjacency is therefore not a spacing concern but a structural one, and a violation is an authoring error rather than a rendering fault.
  3. Threshold-satisfied, not wholeness-satisfied. A binding is satisfied when enough of the consequent accompanies the antecedent to establish continuity, not when all of it does. The engine already works this way in print, where a paragraph's binding is satisfied by its first few lines rather than by the whole paragraph. This is what stops Bound from collapsing into Atomic.
  4. Non-transitive. If A binds B and B binds C, A does not bind C. Without this rule a chapter would be one unbreakable block. Chains are resolved by atomicity rather than by transitivity: the engine makes an eyebrow and its title one atomic unit, and that unit then binds forward exactly once.
  5. Single-parent scoped. The antecedent and the consequent share a parent. A binding may not span a container boundary, because a container boundary is itself the kind of boundary the binding forbids. An antecedent that is the last child of its parent has an unsatisfiable binding, which is a detectable error.
  6. Position-independent. The relationship holds wherever the pair sits within its parent. This is the property the current mechanism lacks, and its absence is the entire defect (§5.5).
  7. Medium-neutral. Declared once; resolved by each medium. Screen resolves it as the smallest available separation, print as a page-break refusal, a fixed canvas by proportion.

5.3 Lifecycle: what is inherited, and what terminates

PropertyBehaviourConsequence
AtomicityInherits downward. An atomic unit's contents cannot be splitEvery binding inside an atomic unit is satisfied automatically, which is why 43 componentised pairs have never failed
BindingTerminates at the consequent. It does not propagate forwardA consequent that is itself an antecedent starts a new, separate binding
BindingTerminates at the parent. It does not propagate outwardA binding cannot be inherited by, or exported to, a sibling container
DirectionInherits into a consequent that is also an antecedentChains are legal as a sequence of separate pairs, never as one long pair

Nesting is permitted; chaining is not. A bound pair may sit inside an atomic unit, and an atomic unit may be the consequent of a bound pair. What may not exist is a single binding spanning three members.

5.4 How a binding is recognised

Three tiers, in precedence order. Recognition must never be positional.

  1. Structural, where the pair is closed. The two parts are one unit, so there is no "between" for anything to occupy. Measured: 43 label-and-content relationships across 28 engine components, every one a sibling inside its own component, none spanning a boundary, and none has ever failed. Prefer this always.
  2. By kind, where the pair is open. Where the consequent is arbitrary, the antecedent binds because of what it is, not because anyone remembered to say so. A heading is an antecedent because it is a heading. The engine already does this for print, declaring the binding once for every heading level and never needing to recall it per instance.
  3. By declaration, for exceptions only. An instance that binds unusually, or that must not bind. Rare by design, because anything requiring authors to remember will eventually be forgotten.

Recognition by kind is the correction. The print rules work because they ask what is this. The screen rules fail because they ask where is this.

5.5 The failure this model resolves

All three rendered chapters state, in identical words, that a heading and its opening sentence are one thought and that the rhythm rule deliberately leaves that gap alone. Measured:

ChapterStructural headingsWhat encloses themResult
Colour2319 sit inside a <div> carrying no class or attribute at allBinding held
Identity107 sit inside a <div> carrying no class or attribute at allBinding held
Typography22none; all sit at the top level of the section bodyBinding lost in all 22

All three chapters use the same content patterns, roughly two-thirds of headings introducing a demonstration block and one-third introducing prose. All three declare the same intent. The only thing that differs is whether an author happened to wrap the heading in an empty element.

An attribute-less <div> is currently deciding the most deliberate spatial rule in the system. No author chose that. It is the clearest possible demonstration that a relationship expressed positionally is not expressed at all, and it is why §5.2 property 6 exists.

5.6 What is bound

A judgement, not a measurement. Read from existing component structure and from the print rules, not from a stated inventory. The complete registry is GRID-06.

AntecedentConsequentRecognised by
A heading of any levelThe content it introducesKind
A labelIts panel contentStructure
An eyebrowIts titleStructure, as one atomic unit
A captionIts figure or specimenStructure
A specimenIts metadataStructure
A statisticIts unit or qualifierStructure
A questionIts answerStructure
A termIts definitionStructure

5.7 Validation

A binding is validatable only because it is declared. None of these assertions requires a value, so validation can exist before Version 2 supplies dimensions.

  1. Every antecedent has a consequent. Detects the last-child error of §5.2 property 5. Currently zero violations across the three chapters.
  2. Nothing intervenes between antecedent and consequent. Adjacency.
  3. No binding crosses a container boundary. Currently zero violations across 43 componentised pairs.
  4. The realised separation is the smallest available at that medium. Checkable without knowing any value, by comparing against the set of separations actually in use. This assertion alone would have caught all 22 failures.
  5. Every antecedent kind is registered. Coverage. This is the failure mode a declared model introduces, and it is the one worth watching.

5.8 Semantics and presentation

Belongs to semanticsBelongs to presentation
That the relationship existsThe distance
Its directionThe break behaviour
The kind of pairWhether there is any visible signature
The satisfaction thresholdHow the threshold is realised in a given medium
Its scope

Nothing in the left column may be inferred from the right. That is the rule the current mechanism breaks: it stores the relationship in the distance, so changing the distance changes the relationship, and moving the element changes the distance.


6. Component spacing and editorial pacing are two systems

They look alike and behave differently, and the system already declares them differently.

Component spacingEditorial pacing
Governsspace inside a block: padding, internal gaps, offsetsspace between blocks
Carriesconstructionmeaning
Declaredlocally, per component, many times overonce, as a rule, and inherited
Measured222 uses across the lower two-thirds of the scale17 declarations across three steps

Confusing them is the failure this chapter most wants to prevent. The engine offers five semantic spacing tokens for flow. Across three chapters, only one is ever used. The other four describe distance between paragraphs, which is component spacing, while what the chapters needed was distance between editorial units. Having no vocabulary for the second, all three chapters reached past the semantic layer to the raw scale and then duplicated the result three times.

That duplication is the clearest evidence that the missing thing was a vocabulary and not a value.

Whether the two unused steps at the top of the scale should be retired is GRID-07.

6.1 The base unit and the scale

Resolves GRID-21, first of two parts, 2026-08-25.

The unit is 4px. Every step is a multiple of it, and no spacing value in the system is not.

SteprempxSteprempx
space-000space-72.540
space-10.254space-83.556
space-20.58space-94.572
space-30.7512space-10696
space-4116space-118128
space-51.524space-1210160
space-6232

Declared in rem. The px column is a reading aid, not a second declaration. A reader who enlarges their root font size enlarges the spacing with it, which is the same argument §10.1 makes for breakpoints.

The interval widens as the scale climbs: 4 up to space-4, then 8, then 16, then 24, then 32. That is not decoration. It is the behaviour §4.1 requires of pauses, which is why the pause values fall on this scale rather than beside it.

A correction to the implementation's own comment. tokens.css labels space-2 "base unit". Eight is the commonest step, not the unit: space-1 and space-3 are 4 and 12, and neither is a multiple of 8. The unit is 4, and this chapter is the authority that says so.

6.2 The three regions, and why the scale has twelve steps

The division §6 measures is not a description of habit. It is the scale's structure.

RegionStepsRangeCarriesMeasured
Component1 to 74 to 40pxconstruction: padding, internal gaps, offsets222 uses, the lower two-thirds
Editorial8 to 1056 to 96pxmeaning: the three pause types of §417 declarations, three steps
Unallocated11 to 12128, 160pxnothingzero uses in any chapter

This is what GRID-21 asked for: the steps justified against §4's pause types. Steps 8, 9 and 10 are the pause values of §4.7 and are not available for component construction. Steps 1 to 7 are component construction and may not pace editorial content. §6's warning becomes enforceable rather than advisory, because the boundary now has a number.

Whether steps 11 and 12 are retired, reserved or left is GRID-07, unchanged. The region model does not decide it. It explains why they are empty: the editorial range ends at 96 and component construction never reaches 128.

6.3 Radii

Resolves GRID-21, second of two parts, 2026-08-25.

TokenValueApplies to
radius-none0every surface not named below
radius-sm2pxtags, chips
radius-md4pxinputs, small panels
radius-lg6pxcards, large panels. The maximum
radius-pill999pxcompact metadata tags only

Radius is a function of the element's own size. A chip takes 2 and a card takes 6 because softening should read as the same amount of softening at every size, and a constant radius does not: 2px on a card is invisible, 6px on a chip is a blob.

Why there is a maximum, and why it is 6. Past roughly 6px a corner stops reading as a softened panel and starts reading as an application widget. Every surface this system produces is a document, including the ones that happen to be interactive, so the ceiling is the point where a document would start to look like an app. A judgement, not a measurement, and stated as one.

radius-pill is exempt from that ceiling because it is not softening. At 999px the shape is the point, and it is confined to compact metadata tags so it stays a shape rather than becoming a button language.


7. Density

Density is how much a page carries per unit of vertical space. It is a property of the page's purpose, not of its content volume.

Three modes are implied by the surfaces this system serves. A judgement, not a measurement: the modes are inferred from the page-type inventory in WEBSITE-ARCHITECTURE-REVIEW.md §6, not from an existing rule.

ModeWhereCharacter
DocumentLong-form chaptersDense. Every interval earns its place. Sparse would waste the reader's scroll
EditorialPractice, principles, evolutionMedium. Reading dominates, with room for a figure or an aside
ExpressiveLanding, hero, closingSparse. One idea per screen. The only mode that may bleed

Density selects among the pause types; it does not add new ones. An expressive page uses Section pauses more often and Related pauses less. It does not acquire a fourth type, and it does not stretch the existing ones arbitrarily. Whether density selects from one scale or requires two is GRID-09.


8. Columns, nesting and collapse

Columns

A column count is a consequence, not an instruction. Where a count is named, it must be honoured: a two-column arrangement renders two columns.

This is currently untrue. Measured, a base grid renders three columns in fifteen places across the three chapters and five in one, and a class named for two columns renders three at the content width. One chapter replaced it with an explicit arrangement for exactly this reason. Names that describe intent while arithmetic decides the outcome are worse than no names, because they are trusted.

Collapse

Collapse order is declared, never emergent. When a multi-column arrangement narrows, the sequence in which it becomes single-column is a decision about which content leads, and that decision belongs to the author.

A column stops being useful before it stops fitting. The variant cards in the Identity chapter were reduced from three columns to two because each card carries a lead and three editorial rows, and needs a reading measure rather than a catalogue slot. Fitting is not the test. Reading is.

Nesting

Measured, layout nesting settles at exactly four levels in all three chapters, and the deepest node is a button in every case. Three independently built documents converged on the same ceiling.

Treat four as an observation and a warning rather than a limit. Whether it becomes an enforced constraint is GRID-10.


9. Alignment

Alignment is where this foundation most often defers to another.


10. Responsive behaviour

A relationship does not change with the viewport. Only its resolution does.

That is why this foundation could be written before the responsive type work is finished. A Section pause means a new thought on the narrowest phone and on the widest display alike. What changes is how much space says so.

Two rules follow, and one is inherited:

10.1 The breakpoints

Resolves GRID-13, 2026-08-25.

Four named spatial breakpoints, declared in rem.

Namerempx at a 16px rootAlready stepped at by
sm30480the engine's typography.css and layout.css
md40640the engine's components.css, the publication's layout.css
lg48768the engine's typography.css and layout.css, the publication's shell
xl641024the engine's typography.css, the publication's components

Nothing is invented here. 480, 768 and 1024 are the ladder the engine's typography.css already steps type at, which is the ladder TYPE-02 exists to formalise. 640 is the most-used single breakpoint in the publication layer. Naming them moves no pixel.

In rem rather than px, for the reason §10 gives for stepping at all. A px breakpoint cannot see a reader who has enlarged their root font size: their type grows, their layout does not, and the two drift apart at exactly the moment legibility depends on them agreeing. typography.md holds that tracking is a property of rendered size, and a breakpoint blind to rendered size cannot honour it.

This unblocks TYPE-02 rather than pre-empting it. GRID-13 recorded the dependency the other way round, breakpoints waiting on the responsive type table. That was backwards: the ladder is a fact about the canvas, and the type table declares what type does at each rung. Type now has rungs to step at.

10.2 A component may collapse at its own threshold, and that is not a breakpoint

§8 holds that a column stops being useful before it stops fitting, and that reading rather than fitting is the test. That is a judgement about one component's content. It does not belong on a canvas ladder.

So there are two kinds of threshold, and they are not interchangeable. A spatial breakpoint governs what the canvas does: the page edge, the bands, the pauses. A collapse threshold governs what one component does, is declared with that component, and needs no entry in §10.1.

Measured 2026-08-25, the implementation uses twelve distinct thresholds beyond the four named above, almost all of them in component and shell stylesheets. Under this rule most are legitimate rather than stray.

One thing is a defect rather than a threshold, and it is recorded rather than fixed. The same rung is written in two units in different layers: 768px and 48rem, 640px and 40rem, 1024px and 64rem are each one breakpoint expressed twice, and a 55.999rem maximum pairs with a 56rem minimum. Correcting them changes rendered output already issued as PDF, which is a rendering change under AGENTS.md §6 and wants a superseding decision rather than a quiet edit, exactly as §13.7 holds for the spacing scale. Recorded as GRID-22.

10.3 The one exemption: a value derived from the canvas

Resolves PLAT-08, 2026-08-26.

Spatial resolution steps at named breakpoints, except where a value is derived from the canvas rather than from type. §2's page edge is that value, and at present it is the only one.

This is a correction to §10's scope, not a retreat from its rule. §10 exists so that space cannot drift out of alignment with type, and type steps because tracking is a property of rendered size (typography.md TYPE-02). A value computed from the viewport has nothing to drift against: there is no type metric it must stay in register with, because it was never derived from one. The rule was right and its scope was one word too wide.

PLAT-08 recorded the contradiction honestly and it was real. §2 described a clamp and §10 forbade one, and the implementation ran fluid under a labelled judgement rather than picking a side quietly. This section is that side being picked.

What stepping the edge would have cost, measured before deciding. A stepped edge lags the proportion by up to 13.2px at 1023px wide, and again just before 1280: it runs tight, then jumps. And the measured ceiling is reached at 1280, so it would need a fifth rung at 80rem that the type ladder has no use for, adding a breakpoint to the system for the benefit of one value. The exemption costs a clause. Stepping cost a breakpoint, a jump at four widths, and made the calmest element on the page behave like the busiest.

The exemption is narrow by construction. A value qualifies only if it is computed from the canvas and from no type metric. Anything derived from the reading measure, the scale or the tracking curve steps, because all three are type.


11. Print and other canvases

Print is not a degraded screen. It is a canvas where vertical space cannot expand, so the hierarchy resolves by proportion and by page-break behaviour rather than by addition.

Whether this foundation owns the A4 and social canvases or only screen is GRID-14.


12. Prohibitions

Each is a real failure mode with a specific consequence, not a generic caution.

ProhibitedWhat breaksInstead
A spacing value as the sole carrier of a relationshipThe relationship survives only while the document structure does. Measured: 22 silent failuresDeclare the relationship (§5.2)
Coupling a binding to a width or measureAuthors who need a different width lose the binding with it. Measured: 2 of 61 adoptionKeep bindings independent of bands (§3.6)
A fourth pause typeThree types cover 199 measured intervals. A fourth would have to mean something the system has never needed to sayUse the existing three, or make the case in DECISIONS.md
Reading a measured difference as a semantic differenceTwo numbers already express one relationship. Treating them as two will produce a rhythm that looks right and reads wrongCorrelate against the preceding block's edge (§4.3)
A Section pause used frequentlyIt stops signalling a new thought. Measured at about three uses per chapterReserve it. Restraint is what preserves the signal
Bleed in a documentation chapterA document that reaches the paper's edge has confused itself with a posterScope bleed to public pages (§3.5)
Never bleeding on a public pageThe page reads as a PDF in a browserOne edge-to-edge moment, deliberately placed
Shrinking content that must hold its sizeThe label stays truthful and the artefact becomes falseA rail (§3.4)
A column count that the arithmetic overridesThe name is trusted and wrong. Measured in sixteen placesHonour named counts, or stop naming them
Emergent collapse orderWhich content leads at narrow widths becomes an accidentDeclare it
Tightening the page edge to fit more inTrades calm for density, which is the wrong trade for this systemReduce the content
Using the spacing scale for both construction and meaning without distinctionThe two systems become indistinguishable and pacing stops being legible. Measured: four of five semantic tokens abandonedKeep them separate (§6)
A band chosen by available spaceThe same content takes different widths on different pages, and the system stops feeling like one familyChoose by content role (§3.6)

13. Design decisions

13.1 Why pauses are types rather than values

Because the measurement forced it. Three intervals looked like three relationships until each was correlated against the block preceding it, at which point two of them turned out to be one relationship optically compensated for a visible edge. A system defined by values would have encoded a distinction that does not exist, and would have been wrong in about a third of its intervals.

13.2 Why the page edge is placed before anything else

Because it is the only spatial decision that cannot be made locally. Every other measurement in this chapter is relative to something: a measure to legibility, a pause to a relationship, a band to a content role. The edge is relative to the canvas alone, so it is decided first and everything is placed inside it.

13.3 Why bleed exists at all, given documents never use it

Because the absence of any edge-to-edge moment is what makes a web page read as a document. The chapters are documents and should read as documents. The website is not, and must not.

This is the only capability in this foundation that exists solely for the public surface, and scoping it explicitly is what keeps a chapter from acquiring it by accident.

13.4 Why a binding must not be coupled to a width

Because it already was, and the cost is measured. The engine binds heading rhythm inside a container that also caps the reading measure. Structural headings need the wide band. Sixty-one headings, two adoptions, and three chapters that reimplemented the rhythm and lost the binding. Coupling did not merely reduce use. It inverted the outcome: the container designed to protect the relationship is the reason the relationship is unprotected.

13.5 Why there is no column system in this chapter

Because the evidence does not support one. Three chapters, built independently, produced no case where content needed to span a defined fraction of a modular grid. What they needed was a small set of widths keyed to content role, and they arrived at four of them without a specification. A twelve-column grid would be an answer to a question this system has not asked.

13.6 Why values are absent from version 1

Because a chapter whose first principle is that distance belongs to the medium cannot open by fixing distances. Publishing the vocabulary first also makes the values falsifiable when they arrive: a proposed value can be checked against the relationship it claims to express. The reverse is not true.

A judgement, not a measurement. The risk is that a foundation without values is harder to implement against, and §14 recorded that risk as an open item rather than resolving it.

The judgement held. When the values arrived in version 4 they were checked against the relationships this chapter had already named, and each one passed: 199 measured intervals resolved onto exactly the three pause types of §4.1, and the scale's regions fell out of §6's own measurement. Values written first could not have been tested that way, because there would have been nothing to test them against.

13.7 Why the spacing scale is not redefined here

Because it underpins report output already validated and issued as PDF. Changing it is a rendering change under AGENTS.md §6 and wants a superseding decision, not a quiet edit. The two unused steps are recorded as GRID-07 rather than removed.


14. Open items

Numbered so they can be cited from outside this chapter. Resolved items stay, struck through, with the date and what closed them.

14.1 GRID-01: The page edge has no dimensions · RESOLVED 2026-08-26

Its philosophy was accepted and its behaviour measured, but the floor, the ceiling and the proportion were not specified. §2 now specifies them: 5% of viewport width between a 20px floor and a 64px ceiling, clamp(1.25rem, 5vw, 4rem). Ratified from the measurement at eleven viewports rather than chosen, and the publication's provisional adoption under SITE-02 was correct, so nothing renders differently.

Resolved together with PLAT-08 (§10.3), because the value could not be stated without first deciding whether the edge steps or interpolates.

14.2 GRID-02: The bleed contract is undefined · RESOLVED 2026-09-01

Scope was already settled: public pages only. The two open questions were how contained content nests inside a bleed section without losing alignment, and whether a bleed section participates in vertical rhythm. §3.5 answers both.

Nesting: a bleed is two elements, an outer that carries the surface and an inner that is an ordinary band, so alignment is preserved by construction rather than recomputed. Rhythm: a bleed takes the pause its relationship calls for and gets none of its own, with its internal padding held distinct from that pause.

The structure was ratified rather than chosen. The masthead and the footer have been built this way since Milestone 2 and shell.css had already recorded the reason. What was missing was the rule, not the mechanism, which is why this resolution adds no new primitive and no new token.

14.3 GRID-03: Pause values are undefined · RESOLVED 2026-08-25

Three types were named with no distances attached, for the reason given in §13.6, and it was the largest single gap in this chapter. §4.7 attaches them: Bound 32px, Related 56px, Related compensated 72px, Section 96px, each the screen resolution of a type rather than a redefinition of it. All three were already realised across 199 measured intervals, so the values were ratified rather than chosen.

14.4 GRID-04: Is optical compensation part of a type, or applied to it? · Open

Measured, the Related pause takes a longer distance after a block with a visible edge. Unresolved: whether that is the type's own behaviour or a correction layered on top. The answer changes how many values version 2 declares.

A second part, also unresolved: roughly 20% of measured intervals are misclassified, because each chapter keeps its own hand-written list of which blocks count as closed. A structural definition would remove the list.

14.5 GRID-05: How a bound pair is enforced on screen · RESOLVED 2026-07-25

Resolved. §5 now carries the canonical model: a bound pair is a directed, adjacent, non-transitive relationship between an antecedent and a consequent, with seven required properties, a lifecycle, a three-tier recognition order in which recognition is by kind and never by position, five value-free validation assertions, and a semantics-versus-presentation split. Recorded in DECISIONS.md.

The 22 measured failures were classified rather than fixed, and all 22 resolve once recognition is by kind. No individual correction is required, which is the strongest evidence the model is right. They remain in place as legacy, per the precedent set on 2026-07-25 for em dashes: reviewed as prose is next revised, not corrected mechanically.

Retained here rather than deleted so a reader can see what the chapter did not know and when that changed.

14.6 GRID-06: The complete inventory of bound pairs · Open

Six are named in §5.5 by reading existing component structure. Whether that list is complete is unknown.

14.7 GRID-07: Two spacing steps are never used · Open

The largest two steps of the scale appear in no chapter. Retire, reserve, or leave. Touches issued output (§13.7).

14.8 GRID-08: Does this chapter absorb spacing.md and replace layout.md? · RESOLVED 2026-08-25

Yes to both. Decided by Fernando on 2026-08-25. GRID-FOUNDATION-BRIEF.md had recommended absorbing spacing.md on the grounds that a scale and its meanings cannot sensibly be specified apart, and the same argument applies to layout.md: a grid whose measurements live in another file is a grid that can drift from them.

Both files were empty skeletons, every value cell blank, while carrying Governs statements claiming authority over the base unit, the scale, radii, breakpoints, containers and composition. Two chapters asserting ownership of values neither held is worse than one chapter that says plainly which values are still open. They are removed, and Git holds what they said.

This does not supply the values. They remain open, and they are tracked rather than lost:

Absorbed fromNow open as
Base unit, scale, radiiGRID-21 below
Application rules, section rhythmGRID-03, pause values
Breakpoints, containersGRID-13, breakpoint values
Page edge, bleedGRID-01, GRID-02
Print and fixed canvasesGRID-14, canvas ownership

The engine ships a working spacing scale and breakpoint set today. Nothing in this chapter yet authorises them, and consolidating makes that gap easier to see rather than harder, which is the point.

14.9 GRID-09: One scale with a density selector, or two scales? · Open

§7 assumes one. Unverified.

14.10 GRID-10: Is nesting depth four a constraint or an observation? · Open

Three chapters converged on it. Recorded as a warning, not enforced.

14.11 GRID-11: Alignment ownership between Typography and Grid · Open

The optical inset for large display type and the trailing-space cancellation for tracked uppercase are specified in typography.md §7. Which foundation owns their application is unresolved.

14.12 GRID-12: Does the identity's clear space compose with the page edge? · Open

identity.md §3.3 specifies clear space applied at use. Whether the page edge satisfies it, adds to it, or is independent of it is unresolved.

14.13 GRID-13: Breakpoint values are undefined · RESOLVED 2026-08-25

Deferred deliberately, on a stated dependency on typography.md TYPE-02. The dependency ran the other way: §10.1 names four rungs, 30 / 40 / 48 / 64rem, taken from the ladder the engine's typography.css already steps at, so TYPE-02 now has rungs to declare type against. §10.2 separates a spatial breakpoint from a component's own collapse threshold, and records the unit inconsistency as GRID-22.

14.14 GRID-14: Does this foundation own non-screen canvases? · Open

Print behaviour is inherited from colour.md and the engine. Whether A4 and social canvases fall under this chapter or under typography.md §8 is unresolved.

14.15 GRID-15: Does this chapter get a rendered chapter? · Open

Two of three mature foundations have one. A spatial system is arguably the least judgeable of all from markdown, since it can be demonstrated but not described. Recommended, not decided.

14.16 GRID-16: Should the six unpromoted engine primitives be promoted here? · Open

FOUNDATION-ARCHITECTURE-REVIEW.md Part 9 identifies six primitives proven by independent double invention. They are now duplicated a third time. Promotion is spatial work, but it may belong to the engine rather than to this foundation.

14.17 GRID-17: What satisfies the threshold for a non-prose consequent? · Open

§5.2 property 3 establishes that a binding is satisfied by enough of the consequent rather than all of it, and the engine already answers this for prose by counting lines. No answer exists for a consequent that is a container. Measured, two-thirds of the headings in the three chapters introduce a demonstration block rather than prose, so this is the majority case and it is unanswered. Candidates include the container's first child, its label, or its full extent where it is also atomic.

14.18 GRID-18: Is caption-and-figure a distinct kind of pair? · Open

Of the 22 classified failures, 15 have a demonstration block as their consequent, where the heading functions as that block's caption rather than as an introduction to prose. A judgement, not a measurement: this may be a second kind of pair with a stronger binding and a different threshold, or the same kind with a different consequent. GRID-17 cannot be answered without deciding this.

14.19 GRID-19: Where does recognition-by-kind live? · Open

§5.4 establishes that an antecedent binds because of what it is. It does not establish which layer performs that recognition. The repository already contains three pipelines that derive structure from a canonical source and fail on drift, which is the closest existing precedent. Whether recognition belongs to the engine, to a build step, or to both is an engineering decision that the model deliberately leaves open.

14.20 GRID-20: The antecedent registry · Open

§5.6 lists eight antecedent kinds read from existing structure. §5.7 assertion 5 requires every kind to be registered, because coverage is the failure mode a declared model introduces. No registry exists.


14.21 GRID-21: The base unit, the scale and the radii are undefined · RESOLVED 2026-08-25

Inherited from spacing.md when it was absorbed on 2026-08-25, and stated here because nothing else covers it. spacing.md declared a base unit and a nine-step scale and filled in neither, and named a radii table with no rows.

What ships today, and what no chapter authorises, read from the engine's tokens.css:

TokenrempxTokenrempx
space-10.254space-72.540
space-20.58space-83.556
space-30.7512space-94.572
space-4116space-10696
space-51.524space-118128
space-6232space-1210160

Twelve steps on a 4px base. The interval is 4px to space-4, then 8px, then 16px, then 24px, then 32px: it widens as the scale climbs, which is the behaviour §4 describes for pauses but nothing states as a rule. Radii are none 0, sm 2px, md 4px, lg 6px and pill 999px.

These values work and are in production. They were a measured implementation without a written rule, which is the inversion of how every other value in this system arrived.

Settled in §6.1, §6.2 and §6.3, on the three terms this item set. The unit is 4px, not the 8 the implementation's own comment claims. The scale's twelve steps are justified as three regions, component construction at steps 1 to 7, the editorial pauses of §4 at steps 8 to 10, and nothing at 11 and 12, which is why GRID-07 found two steps unused. The radii are tied to the rule that radius is a function of an element's own size, with a ceiling at 6px where a document would start to read as an application.

14.22 GRID-22: One breakpoint, written in two units · Open

Opened by §10.2 on 2026-08-25. 768px and 48rem, 640px and 40rem, 1024px and 64rem each express one rung twice, in different layers, and a 55.999rem maximum pairs with a 56rem minimum. §10.1 declares rem canonical. Correcting the px forms changes rendered output already issued as PDF, so it wants a superseding decision rather than a quiet edit (§13.7, AGENTS.md §6).


15. In closing

Three pause types, five bands, one page edge, and no measurements. The absence is the chapter: a pause is a relationship and the medium decides the distance, so a version that opened with numbers would have contradicted its own first principle on its first page.

The practical consequence is that spatial questions are answered by asking what the content is. How wide should this be? Whatever its role takes. How far apart? Whatever the relationship means. When may a heading be separated from what follows? Never, and not because of a distance but because it is a heading.

The chapter's sharpest lesson is a failure it documents rather than a rule it states. Twenty-two relationships broke silently because they were carried by a spacing value instead of being declared, and the only difference between the chapters that held and the chapter that did not was whether an author had wrapped a heading in an empty element. A relationship carried only by a distance is not a relationship.

Next: Identity System, the one chapter in this system that is approved.


16. Provenance