AI Design Arena
Folio
DESIGN.md
# Folio — Design System

## Concept

**An image API published as a magazine.** Not documented, not marketed — *published*.
White paper, black ink, one editorial blue, and a page whose grid is not hidden but
**printed**: a measure that never widens, column rules between the columns, hairlines
between the rows, a drop cap opening the lead, a running head across the top and a
folio at the foot. The house style belongs to a print technology monthly; the copy
belongs to an image-processing API. **Two bodies of work that have never shared a leaf,
set on one leaf anyway** — and the setting is the argument.

Start at the name, because everything else was cut to fit it. A **folio** is the page
number printed at the foot of a leaf — the smallest, quietest, most unmistakably
*printed* mark a page can carry, and the one mark no SaaS site has ever put on itself.
Every page here carries one: `1 / 3`, `2 / 3`, `3 / 3`. It is a joke played completely
straight, and it states the thesis in four characters: **this is a three-page
publication, it numbers its pages, and it numbers them because a publication is what it
is.**

The governing principle is inherited whole from the reference and must not be softened:
**it refuses to be a SaaS marketing site.** That refusal is not an attitude; it is an
inventory, and an inventory can be checked against the page item by item. No hero
gradient. No pill. No card. No shadow. No dark band. No icon set. No badge. No monospace.
No accent that isn't the one blue the reference reserves for a link inside an article.
What is left when all of that is removed is a **page**, and the page turns out to be
enough.

The source language is **Wired's** — a strict editorial duet of black on white with no
chromatic accent except a single link blue (`#057dbc`) that lives inside long-form body
copy; a tall high-contrast display serif held at **weight 400 even at 64px**, because
the elegance is in the drawing of the face and not in the weight of it; a humanist serif
beneath it carrying every paragraph; and a sans confined to metadata, captions, eyebrows,
buttons, and nav. Square corners on everything. Hairline dividers instead of elevation.
Its three licensed faces have no exact substitutes, and the three named in its own Font
Substitutes section are the three used here: the display serif becomes **Playfair
Display** at 400, the body serif becomes **Source Serif 4**, and the sans becomes
**Manrope**. Two of its habits are deliberately broken, and the Palette and Components
sections say exactly why: its **black footer band** does not survive (a sheet of paper
has no black slab at its foot, and this design never inverts), and its **circular
icon button** does not survive (there is not one rounded corner in this system). That
lineage is named in this paragraph and **nowhere else**: the built page carries only the
product's own name, **Refract**, in English.

**Why a magazine, and not a costume?** Because of the thing a printer sees in the first
ten seconds of looking at a developer-tool page: **it and a magazine feature want
opposite things from a reader, and only one of them will admit it.** A marketing page
wants a scroll and a click; it hides its grid, softens its corners, and animates a number
upward so that the visitor feels something. A magazine wants the reader to *read* — so it
prints a 680px measure and
holds it, sets the type at a reading size, rules the columns so the eye knows where to
go, and puts the hard numbers in a box where they can be checked. An API reference is a
document. Documents have measures, tables, captions, and footnotes. **The magazine is not
a costume borrowed from another industry; it is the only form that was ever right for
this content, and the developer-tool genre had simply stopped using it.**

**Three other designs answer this brief, and folio stands at a different distance from
each of them — one of those distances needs stating twice.** `aperture` is white, soft,
and photography-led: a 64px hairline-segmented pill at 9999px radius, popovers opening
off it, a circular red orb, and not one square corner. Folio has no pill, no popover, no
circle, and no red. `cutaway` is the dark one — graphite, magenta-and-cyan voltage, an
88px industrial readout, a photograph exploded into a 3D stack — and it is the design
that keeps the **vertical console**, which is right, because an instrument is what it
is and an instrument gets a panel. Folio never goes dark, sets nothing at 88px, never
takes a photograph apart, and **owns no panel at all**: its controls are words inside a
caption (*Signature 1*).

**And this is not `carton`, which is the one that matters.** `carton` is also paper, also
cream-and-ink, and the two of us are the only designs in this brief that a careless eye
could merge. The split is absolute and it runs through every layer. `carton` is
**anti-design scrawl**: typewriter monospace body copy, four type voices mixed on purpose,
hand-drawn wobbly boxes, sticker badges, copy that will not shut up. **Folio is a refined
print grid**: three voices split absolutely by role, **no monospace anywhere in the
system**, not one hand-drawn line, not one badge, and every rule ruled straight because a
press does not wobble. `carton` is loud on purpose and wants you to laugh. **Folio is
quiet on purpose and wants you to read.** Where `carton` mocks the form, folio *keeps*
it: the drop cap is a real drop cap, the table is a real printed table, the footnote is a
real footnote, and the joke — if there is one — is that all of it works.

## Palette

White paper, black ink, one editorial blue. There is no second hue, no semantic palette,
and **no chromatic fill anywhere in this system.**

| Token          | Hex       | Role                                                                                      |
| -------------- | --------- | ----------------------------------------------------------------------------------------- |
| `--paper`      | `#FFFFFF` | Pure white paper — the page floor, every band, the nav, the tables, and the footer.        |
| `--paper-tint` | `#F5F5F5` | The one tint. It grounds **exactly one surface: the SDK listing.** Not an elevation tier.  |
| `--ink`        | `#000000` | Pure black. Display type, the heavy rule, every bounding rule, the caption's editable values, and the one filled button. |
| `--ink-soft`   | `#1A1A1A` | The reading ink — every paragraph the body serif sets, the listing, and `button-primary`'s hover fill. |
| `--ink-meta`   | `#6B6B6B` | The running words of every caption, running heads, folios, table meta, line numbers, unset table values, the daggered parameters in the credit line, the legal row. |
| `--on-ink`     | `#FFFFFF` | The white label on `--ink`. It appears on `button-primary` and on nothing else.            |
| `--rule`       | `#E0E0E0` | The 1px dividing hairline — table rows, column rules, FAQ rows, ledger rows, the rule that closes a caption. |
| `--blue`       | `#057DBC` | The editorial blue. **Rules and non-text marks only** — see the ration below.              |
| `--blue-deep`  | `#04618F` | The same hue, one stop down. **Every blue that carries text.**                             |

Rules:

- **Contrast (measured, WCAG 2.1, computed from the sRGB relative-luminance formula).**
  On `--paper` (`#FFFFFF`): `--ink` **21.00:1**, `--ink-soft` **17.40:1**, `--ink-meta`
  **5.33:1**, `--blue-deep` **6.75:1**. On `--paper-tint` (`#F5F5F5`): `--ink`
  **19.26:1**, `--ink-soft` **15.96:1**, `--ink-meta` **4.89:1**, `--blue-deep`
  **6.19:1**. On the `--ink` fill: `--on-ink` **21.00:1**. Everything named in this
  paragraph clears AA body text (4.5:1) on both surfaces, with margin.

- **The reference's link blue clears AA by one thousandth, and this design refuses to
  stand on that.** `--blue` (`#057DBC`) measures **4.501:1 on white** — it passes the
  4.5:1 body-text bar by 0.001, which is a rounding artifact, not a margin. And the ratio
  is **symmetric**: white *on* `#057DBC` is the same **4.50:1**, so a blue fill under a
  white label would carry the identical knife-edge. Worse, the moment the paper takes any
  tint at all the number collapses: on `--paper-tint` the same blue measures **4.13:1 and
  fails outright** — and `--paper-tint` is precisely where a link inside the SDK listing
  would sit. A colour that passes only on one of the design's two grounds, and only by a
  thousandth, is not a text colour. So the blue is split into two stops of one hue, and
  the split is exact:
  1. **`--blue` (`#057DBC`)** — **rules and non-text marks only**, where the 3:1 bar
     applies and 4.50:1 clears it with room. It is spent on exactly two marks: the **2px
     rule beneath the current option** in an open caption list, and the **2px rule beneath
     the active nav link**. It sets no paragraph, no label, no value, no caption, no table
     cell, and no button text. It never appears on `--paper-tint` at all.
  2. **`--blue-deep` (`#04618F`)** — the same hue one stop down (H 199.9° / S 94.6%
     against the reference blue's H 200.7° / S 94.8%; only the lightness moves, 37.8% →
     28.8%). **Every blue that carries text**: an inline link in a paragraph, its
     underline, and a validation message. **6.75:1 on paper, 6.19:1 on the tint** — it
     holds AA on both grounds, which is the whole reason it exists. **The remedy was
     found inside the hue, not outside it** — a second stop of the same blue, mixed
     darker — and a design that answers a contrast failure by reaching for a fresh
     colour has answered the wrong question.
- **Nothing chromatic is ever a fill.** There are exactly two **system-filled surfaces**
  in this design: `button-primary` — filled `--ink` at rest and `--ink-soft` on hover and
  press (see *Components*), never a third token — and the SDK listing, grounded in
  `--paper-tint` and nothing else. No other surface on the site takes a system fill. One
  further surface on the site is filled and it is **not the system's**: the letterbox
  painted inside the demo plate, which carries **the visitor's own `bg` colour and
  appears nowhere else on the page** (see *Signature 1*). **There is no blue fill anywhere and
  there never can be** — white on `--blue` is 4.50:1, the same knife-edge, and white on
  `--blue-deep` is 6.75:1 but a blue button would make the blue an *accent*, which is
  exactly what the reference forbids. The primary action is the ink.
- **The reference's own metadata grey fails AA on its own tint, and this design darkens
  it.** The reference sets bylines and timestamps in `#757575`, which measures **4.61:1 on
  white** — a pass — but **4.23:1 on `#f5f5f5`**, which is a fail. In this system the
  metadata grey has to survive on the tint, because the SDK listing's **line numbers** are
  set in it. So it steps down to `--ink-meta` (`#6B6B6B`): **5.33:1 on paper, 4.89:1 on
  the tint.** It holds AA on both, and therefore **there is no label-only ink token in
  this design at all** — every grey a visitor reads is body-legal, everywhere it appears.
- **A value that is not there is an em dash in a table and a word in a sentence.** There is
  no faint ink to ghost anything with, so a default the brief never states is set as an
  **em dash (`—`) in `--ink-meta`** (5.33:1) — the mark a table has always printed in a
  cell it has nothing to put in. A sentence has no cells to leave empty, so the live
  caption does the other thing a page can do and *says so*: an unrotated plate reads
  **unrotated**, an unblurred one reads **unblurred**, and both of those words are still
  controls (*Signature 1*). Either way, nothing in this design is communicated by making
  type harder to see.
- **The hairline carries no meaning.** `--rule` (`#E0E0E0`) measures **1.32:1** on paper —
  far below the 3:1 non-text bar — so **no control's identity and no control's state may
  rest on a rule alone.** An editable value in the caption is marked by two things at once
  and neither of them is a rule: it is `--ink` (21:1) among running words set in
  `--ink-meta` (5.33:1), and it is the sans at 600 among running words at 400. Focus is a
  **2px `--ink` outline** (21:1), never a blue-only one. The current option in an open
  caption list is marked by *three* changes at once — the 2px `--blue` rule beneath it,
  the step to weight 600, and `aria-selected="true"` — so no state anywhere in this design
  is carried by colour alone.
- **No gradients, and therefore no scrim.** Every surface is flat. A scrim is a
  gradient, so this design does not own one — and without a scrim there is no legible
  way to lay type over a picture. **Type never sits on top of a photograph here**, and
  it costs nothing: the words a plate needs go in the line beneath it, which is where a
  printed page has always put them.
- **No dark band. The page never inverts.** No dark hero, no dark section, and **no dark
  footer** — the reference's black footer band is its one inversion and it is dropped
  here. **`--ink` fills exactly one *surface* on this site — `button-primary`** — and a
  button is not a band. Everywhere else the ink touches the page it is type, a rule, or a
  mark built out of rules (the FAQ's plus; the `−` and `+` the caption offers a thumb),
  never a field of colour. The paper runs from the masthead to the legal row without a
  break.

## Typography

**Three voices, split absolutely by role.** All three are self-hosted as woff2 under
`assets/fonts/` via `@font-face` — no font CDN, no Google Fonts `<link>`. All three are
the substitutes the reference's own Font Substitutes section names.

**Display — Playfair Display, weight 400 only.** The high-contrast didone standing in for
the reference's licensed display serif. **It is held at 400 at every size, including the
64px cover line, and it is never bolded: there is no 500, no 600, and no 700 of this face
anywhere in the system.** This is not a preference and it is not a variant. The reference
is explicit that its display elegance comes from the *drawing* of the face — thin, tall,
high-contrast — and not from weight, and a 700-weight didone at 64px is a fashion
magazine, not a technology monthly. **Promoting the display serif to bold destroys this
design.** If a headline feels weak, the fix is a wider margin or a longer line, never a
heavier one.

**Body — Source Serif 4.** The humanist text serif. It carries **every paragraph on the
site** — the lead, the running copy, the deck, the table descriptions, the FAQ answers.
It runs at **400 and its italic, and at no other weight**: emphasis in this system is
italic, never bold. The face carries an `opsz` optical-size axis (8–60, verified in its
`fvar` table), so the 19px lead and the 15px table copy are set at their own optical
sizes rather than one drawing scaled twice — which is what a text serif is for.

**Sans — Manrope.** Confined, absolutely, to **metadata, captions, buttons, nav, running
heads, folios, table heads, and every literal API token** — the parameter keys, their
values, the URL string, and the SDK listing. It never sets a paragraph and it never sets
a headline.

**There is no monospace in this system, and that is a decision, not an omission.** The
reflex of every API page ever built is to reach for a monospace the moment a URL appears;
a printed magazine has no such reflex, and the refusal is the design. The URL string, the
ten parameter names, the seven live values inside the demo's caption, and the SDK listing
are all set in the **sans** — the same voice that sets a caption, because in a magazine a
code listing *is* a caption to a photograph of a machine. What a monospace was buying —
figures that lock into a column — is bought here instead by **`tnum` on the sans's data
roles**, which is a real feature that Manrope really ships, and the listing gets its
structure from **ruled line numbers in the margin**, which is how a print magazine has
always set a listing.

The bill for that arrives in exactly one place and it is paid in the open. A proportional
face sets a URL tighter than a URL wants to be read — a string is taken in one character
at a time, not one word at a time — and Manrope has no slashed zero to hand the reader.
So the URL role is **set at 17px and never set smaller anywhere on the site**, with 0.2px
of tracking opening the string until no two characters touch. *Give a number size and air
or do not print it* is a compositor's rule older than the URL, and it is the one taken
here (see the absent-features list below).

| Role         | Face                     | Size / Leading | Tracking | Features | Use                                                             |
| ------------ | ------------------------ | -------------- | -------- | -------- | --------------------------------------------------------------- |
| Display XXL  | Playfair Display 400     | 64px / 0.95    | -0.5px   | —        | The index cover line — the largest **set size** in the system     |
| Display XL   | Playfair Display 400     | 48px / 1.05    | -0.4px   | —        | Page openers on docs and pricing                                 |
| Display L    | Playfair Display 400     | 32px / 1.1     | -0.3px   | —        | Section heads, capability heads                                  |
| Display M    | Playfair Display 400     | 26px / 1.15    | 0        | —        | Sub-heads, tier names, FAQ questions                             |
| Drop cap     | Playfair Display 400     | 3 lines deep   | 0        | —        | The initial of the lead paragraph. One per page.                 |
| Figure       | Playfair Display 400     | 48px / 1.0     | -0.5px   | **lnum** | The four stats figures in the BY THE NUMBERS box                 |
| Price        | Playfair Display 400     | 40px / 1.0     | -0.4px   | **lnum** | The three tier prices in the tier table's head                   |
| Step numeral | Playfair Display 400     | 32px / 1.0     | 0        | **lnum** | The three quickstart numerals, hung in the outer margin          |
| Deck         | Source Serif 4 400 ital. | 22px / 1.45    | 0        | **onum** | The cover's standfirst and the standing box's                    |
| Lead         | Source Serif 4 400       | 19px / 1.55    | 0        | **onum** | The lead paragraph of each page — the one the drop cap opens     |
| Run-in       | Source Serif 4 400       | 19px / 1.55    | 0.6px    | **smcp** | The first four words after the drop cap, in true small caps      |
| Body         | Source Serif 4 400       | 16px / 1.6     | 0        | **onum** | Default running copy                                             |
| Body S       | Source Serif 4 400       | 15px / 1.55    | 0        | **onum** | Spec-table descriptions, FAQ answers, footnotes                  |
| Running head | Manrope 700              | 11px / 1.2     | 1.4px    | **case** | Uppercase running head at the top of every page                  |
| Eyebrow      | Manrope 700              | 12px / 1.2     | 1.4px    | **case** | Uppercase category eyebrow above a display line                  |
| Standing head| Manrope 700              | 12px / 1.2     | 1.4px    | **case** | Uppercase head of a standing box: `AT A GLANCE`, `BY THE NUMBERS` |
| Table head   | Manrope 700              | 12px / 1.2     | 1.2px    | **case** | Uppercase column heads in the spec and tier tables               |
| Nav          | Manrope 700              | 14px / 1.3     | 0.4px    | —        | Top-nav links                                                    |
| Button       | Manrope 700              | 16px / 1.25    | 0.3px    | —        | Button labels                                                    |
| Key          | Manrope 600              | 14px / 1.3     | 0        | —        | The ten parameter names — `w`, `fit`, `fm` — wherever they appear |
| Data         | Manrope 500              | 15px / 1.5     | 0        | **tnum** | Every figure that stacks in a column: table values, quotas, ledgers     |
| Listing      | Manrope 400              | 15px / 1.7     | 0        | **tnum** | The SDK listing and its ruled line numbers                       |
| URL          | Manrope 400              | 17px / 1.5     | 0.2px    | **tnum** | The live URL string. **Never set below 17px.**                    |
| Live caption | Manrope 400 / 600 | 17px / 1.6 | 0 | **tnum** | **The demo figure's caption — the site's one control surface.** Its running words at 400 in `--ink-meta`; its seven editable values at 600 in `--ink`. |
| Caption      | Manrope 400              | 12px / 1.4     | 0        | —        | Captions and figure numbers on every plate but the demo's                                   |
| Folio        | Manrope 400              | 12px / 1.2     | 0.6px    | —        | The page number at the foot: `1 / 3`                              |

Principles:

- **Serif for the argument, sans for the specification — and the split is absolute.** The
  serifs never carry a button label, a nav link, a table head, or a URL. The sans never
  carries a paragraph and never carries a headline. The test is not *is this a sentence*;
  it is **is this argued, or is this consulted.** A caption is consulted — it is where a
  picture's specification is printed, and the secondary face has been setting captions for
  as long as a page has had two faces on it. The live caption is therefore a sentence set
  in the sans, and it is not an exception to the rule; it is the rule said exactly.
- **Hierarchy is bought with size and air, never with weight.** The display serif sits at
  400 forever. The body serif sits at 400 forever. Only the sans has weights (400 / 500 /
  600 / 700), and it has them because an 11px uppercase running head needs 700 to hold at
  all. **The heaviest weight in this system is the sans's 700, and it never appears above
  16px** — that is the Button role, and there is nothing heavier anywhere on the site.
  Above 16px, one thing is set in something other than 400: the **live caption's editable
  values, at the sans's 600 at 17px** — and that step is not decoration, it is the entire
  affordance (*Signature 1*). (The drop cap is measured in *lines*, not points: three lines
  of the 19px Lead sit taller than the 64px cover line, and it is still weight 400.)
- **Emphasis in prose is italic.** Source Serif 4's italic is a *style of the body serif*,
  not a fourth voice. There is no bold serif in this system, and there is no underline
  except on a link.
- **Old-style figures in prose; lining figures in data.** This is the whole print argument
  in one line, and both halves are real declarations against real fonts:
  - **`onum` on the body serif.** Source Serif 4's default figures are lining, and it
    genuinely ships `onum` (verified in its GSUB: the feature maps the base digits `zero`,
    `one`, `two` … onto their old-style variants). So `1,000 transforms` and `30 days`,
    read inside a paragraph, sit as **text figures** with ascenders and descenders — the
    way a magazine sets a number it wants you to *read* rather than *check*.
  - **`lnum` on the display serif.** This one is load-bearing and it is easy to get
    backwards: **Playfair Display's default figures are old-style.** Verified in its GSUB
    — the `lnum` feature maps `zero → zero.lf`, `one → one.lf` and so on, which means the
    lining figures are the *opt-in* and the cmap default is the text figure. Without the
    declaration, `62%` at 48px in the stats box would render with a descending `6` and a
    baseline `2`, which is correct in a sentence and wrong in a readout. So the three
    display-serif roles that set figures — **Figure, Price, and Step numeral** — declare
    `lnum`, and no other role in the system does. A number in a box is a number you check.
- **Tabular figures where figures stack — and where a figure must hold still.** **`tnum` is
  declared on the sans's four data roles — Data, Listing, URL, and Live caption — and
  Manrope genuinely ships it** (verified in its GSUB: the feature maps the base digits onto
  their `.tf` tabular variants; the face's default figures are proportional, so the
  declaration does real work rather than re-asserting a default). It earns itself in **seven**
  places: the spec table's value column, the tier table's three stacked figure columns, the
  overage ledger, the `AT A GLANCE` box, the URL string, the **SDK listing's ruled line
  numbers** — and the live caption, where it is doing something a printed column never asked
  of it.

  The line numbers are the plainest case in the system and the one that most obviously earns
  the feature: a column of digits stacking down a margin behind a 1px rule, running `1` to
  `9` and then into two figures, where the only job a numeral has is to hold its column. A
  proportional `1` is narrower than a proportional `8`, so without `tnum` the tenth line's
  numbers would sit a hair off the ninth's and the ruled margin would stop being ruled. **A
  compositor sets a line-number column in tabular figures and always has.** It is why the
  Listing role declares the feature, and it is the reason to keep the declaration if a later
  hand ever asks what it is buying.

  In the caption, `tnum` is buying something else entirely: every digit is one width, so a
  numeral being scrubbed from `1200` to `1201` does not shudder under the pointer that is
  dragging it. **This is what the absent monospace was for**, and it is why the absence
  costs nothing.
- **`case` on the uppercase sans, and it does real work.** Declared on the four uppercase
  sans roles — **Running head, Eyebrow, Standing head, and Table head** — and Manrope
  genuinely ships it (verified in its GSUB: the feature maps `periodcentered →
  periodcentered.case`, `hyphen → hyphen.case`, and the parentheses). The running heads in
  this system are built on a middot — `REFRACT · QUICKSTART & REFERENCE` — and `case`
  lifts that middot from lowercase height to cap height, which is exactly where an
  all-caps line needs it.
- **`smcp` on the run-in, and Source Serif 4 genuinely ships it** (verified in its GSUB:
  355 substitutions, mapping `a`, `b`, `q`, `w` … onto true small-cap glyphs). The four
  words following each drop cap are set in **true small caps, not faux ones** — no
  `font-variant: small-caps` synthesis, no scaled-down capitals. This is the oldest
  typographic manner there is for opening a feature, and it is the second half of the drop
  cap: an initial with no run-in is a decoration; an initial *with* one is a typeset page.
  It is set on the roman only — **the italic of Source Serif 4 ships no `smcp`** (verified
  absent), so the run-in is never italic.
- **Exactly five features are declared in this system — `onum` and `smcp` (Source Serif 4),
  `lnum` (Playfair Display), `tnum` and `case` (Manrope) — and all five were verified
  present in the faces' real GSUB tables.** The refusals are listed too, and a later hand
  must not quietly add them back:
  - **`tnum` is never declared on Playfair Display.** The face **does not ship it at all**
    (verified absent from its GSUB feature list). The consequence is designed around
    rather than hidden: **the display serif never sets a figure that has to align with the
    figure above it.** The four stats figures each stand alone in their own ruled cell, and
    the three tier prices each stand alone at the head of their own column — no cross-cell
    alignment is required, so no tabular figures are required. Any figure that *must* lock
    into a stacked column is set in the sans Data role, which has `tnum`. If a later hand
    finds themselves wanting a numeric column in the display serif, the answer is that the
    column belongs in the sans, not that the feature belongs in the font.
  - **`tnum` is never declared on Source Serif 4.** The face *does* ship it — but its
    default figures are **already tabular lining** (verified: `pnum` is the opt-in that
    maps the base digits onto proportional variants, and `tnum`'s own sources are those
    proportional and old-style variants, not the defaults). Declaring `tnum` on default
    serif text would be a silent no-op that looks like a decision.
  - **`zero` is never declared.** Source Serif 4 ships a slashed zero, but the body serif
    sets no URL and no listing in this system. **Manrope, which sets both, ships no `zero`
    at all** (verified absent from its GSUB), so there is nothing to declare and declaring
    it would be a pure void. The URL role settles that debt in size and air rather than in
    glyphs, and it settles it in the open — see the monospace paragraph above.
  - **`liga` is never declared.** All three faces ship `liga` and it is on by default in
    every browser. Declaring it is a compositor writing out an instruction the press has
    already followed.
  - **`calt` is never declared.** Playfair Display and Manrope ship it (and it, too, is on
    by default); **Source Serif 4 ships no `calt` at all** (verified absent), so a
    system-wide declaration would be part no-op and part void.
  - **`onum` is never declared on the sans, and `smcp` is never declared on the sans.**
    Manrope ships **neither** (both verified absent from its GSUB): its figures are lining,
    always, and it has no small-cap glyphs. The sans's uppercase roles are **true
    uppercase with tracking**, never faux small caps.

## Spacing & layout

The grid is not a scaffold this design hides behind — **it is printed**, and every rule
you can see is a rule the layout is actually built on.

- **4px base unit** (the reference's own). Tokens: 2 · 4 · 8 · 12 · 16 · 20 · 24 · 32 ·
  48 · 64 · 96.
- **Section rhythm: 64px** top and bottom between bands. **The cover takes 96px.**
- Content centres in a **1200px container**. **The article measure — the text column — caps
  at 680px and never grows.** That is roughly 68 characters of 16px Source Serif, which is
  a reading measure, and it is the single most important number in this document. A
  marketing page widens its paragraph to fill a monitor; **a magazine does not widen its
  column because the paper got bigger.**
- **The two-column article grid.** On index and docs, the page runs a **680px measure and a
  300px outer column, divided by a 1px `--rule` column rule.** The outer column is where a
  magazine puts a box or a note, and this design uses it for both: the `AT A GLANCE` box on
  docs, and — beside the live caption on index — **two marginal notes, stacked in the order
  their subjects appear in the caption**: the unkeyed **shoulder note** against the caption's
  first line, and the **dagger footnote** beneath it, against the caption's second sentence,
  divided by a 1px `--rule` hairline (*Signature 1*). The capability trio and the two big
  tables **break the grid** and run the full 1200px measure — which is also a print move, and
  which is why the column rule stops where they start.
- **Every rule this design draws is one of four:**

  | Weight | Colour  | Use                                                                                              |
  | ------ | ------- | ------------------------------------------------------------------------------------------------ |
  | 1px    | `--rule`| The **dividing** hairline — table rows, column rules, FAQ rows, ledger rows, band separators, the rule that closes a caption. |
  | 1px    | `--ink` | The **bounding** hairline — `button-outline`, the writing rule under an editable value on hover and in edit, the frames of the caption's `−` and `+` marks, the FAQ marker. |
  | 2px    | `--ink` | The **heavy** rule — above a table head, above a box, bracketing the stats band, above the footer.|
  | 2px    | `--blue`| The **marking** rule — beneath the current option in an open caption list, beneath the active nav link. Nothing else. |

  A 2px black rule above a table head is the oldest typographic signal in print for *this
  is a table, read it as data*, and it is the only "elevation" this design owns. **Every
  ink mark on this site is one of three kinds: a rule, a letter, or a rectangle ruled out
  of four rules. There is no fourth kind of mark**, and nothing in the system needs one.
  Three counts are in play in this section and they are not each other: **three** kinds of
  mark, **four** weights of rule (the table above), and the *four* in *ruled out of four
  rules* is the four sides of a box.
- **Radius is 0px on every element in this system, without exception.** Buttons, plates,
  tables, boxes, the listing, the standing box, the caption's `−` and `+` marks. **There is
  not one rounded corner and not one circle on this site.** The reference's single circular
  shape — its social-share icon button — does not survive. A pill is not a variant here; it
  is `aperture`'s language, and it is the fastest way to destroy this design.
- **Elevation: there is none. No `box-shadow` is declared on any element, at rest or on
  hover, anywhere in this system** — not on the nav, not on the listing, not on a plate,
  not on a button, and not on the list that opens under a word in the caption. **The only
  elevation in this design is the paper itself**, and the only depth on the page is the
  depth inside a photograph.

Breakpoints:

| Width               | Behavior                                                                                                                                                                                                                                                                                    |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Mobile <768px       | Display steps **64 → 36px**; the **drop cap steps 3 lines → 2**; the article grid collapses to one column and **both marginal notes drop beneath the credit line — the shoulder note first, the dagger note under it**, a hairline between them; the demo's two plates stack; **the caption stays a caption** — its leading opens 1.6 → 2.0 and every editable value takes vertical padding until its touch target reaches 44px; **drag-scrub is off** (a horizontal drag on a phone is a scroll) and a focused numeral is given its `−` / `+` marks instead; the capability trio goes 1-up and its vertical column rules become horizontal hairlines; the spec table's Description column drops beneath its row; the tier table becomes **three stacked ruled blocks — never three cards**; running head and folio stay |
| Tablet 768–1024px   | Display **48px**; the article grid stays single-column, the caption still runs the full measure beneath the figure, and **both marginal notes sit beneath the credit line in the same order** — shoulder note, then dagger note; the capability trio holds 3-up on a tighter measure                                                                     |
| Desktop 1024–1200px | Display **64px**; **the two-column article grid appears** — a 680px measure and a 300px outer column, divided by a 1px column rule; the figure, its caption, and the credit line run in the measure, and the outer column carries **the shoulder note against the caption's first line and the dagger note beneath it**; the capability trio runs 3-up with column rules between the columns                                                                                            |
| Wide >1200px        | Content caps at 1200px and the margins absorb the rest. **The measure never exceeds 680px at any width.**                                                                                                                                                                                     |

Band rhythm — **`--paper` from the masthead to the legal row; `--paper-tint` on exactly one
surface; no dark band anywhere:**

- **index** — masthead band (paper, hairline above and below, the wordmark centred) →
  running head `REFRACT · TRANSFORM, OPTIMIZE, DELIVER` → **cover** (paper, 96px: the
  eyebrow, the 64px display line, an italic deck, a hairline, and the full-measure
  `cover-plate` with its caption beneath it) → **the lead** (paper, 680px measure: the
  drop cap, the small-caps run-in, and the paragraph that says what Refract is — point it
  at an existing image origin, no re-upload, originals fetched on demand and edge-cached,
  never stored permanently) → **capability trio** (paper, 64px, full 1200px measure: three
  columns divided by 1px column rules — **Transform**, **Optimize**, **Deliver** — each a
  plate, a 32px display head, and a body-serif paragraph) → **the live transform** (paper,
  64px, the two-column article grid: **Fig. 2** — the before/after plate pair — in the
  measure, **the live caption beneath it**, a closing hairline, then the **URL credit line**
  with its `button-outline` **Copy**; and in the outer column the two marginal notes — the
  **shoulder note** against the caption's first line and the **dagger footnote** beneath it)
  → **BY THE NUMBERS**
  (paper, 64px: the four figures in four ruled cells, bracketed by a 2px `--ink` rule
  above and a hairline below) → **CTA band** (paper, 64px, hairline-bracketed, one black
  `button-primary`: **"Start building" → `./docs.html`**) → folio `1 / 3` → footer.
- **docs** — masthead → running head `REFRACT · QUICKSTART & REFERENCE` → page opener
  (paper, 48px display line) → the lead (drop cap, run-in) → **quickstart** (paper, 64px,
  680px measure: three numbered article sections, each numeral hung in the outer margin in
  the 32px Step-numeral role; the first carries the square `docs-plate` figure with its
  caption; the third carries the **SDK listing** on `--paper-tint`) — with **caching &
  limits** rendered as the **`AT A GLANCE` standing box in the outer column beside it** →
  **parameter reference** (paper, 64px: the ten-row printed spec table, breaking the grid
  to the full 1200px measure, closed by a 2px `--ink` rule and the dagger footnote) →
  folio `2 / 3` → footer.
- **pricing** — masthead → running head `REFRACT · PLANS & PRICING` → page opener (paper,
  48px line) → the lead (drop cap, run-in) with the tall `pricing-plate` figure in the
  outer column → **tier table** (paper, 64px, full 1200px measure: three tier columns and
  a row-label column, one printed comparison table) → **overage & billing semantics**
  (paper, 64px, 680px measure: hairline-divided ledger rows) → **FAQ** (paper, 64px, 680px
  measure: four hairline-divided disclosure rows) → folio `3 / 3` → footer.

## Signature

Four devices carry this design. Three of them a magazine has had for centuries and this
one only has to keep; the fourth — the caption that can be edited — is what happens when
you hand a magazine an API and refuse to let it build a control panel.

### 1. The live caption — the parameter playground's control surface

**A magazine sets its parameters in a caption.** It does not stand a console beside a
photograph and invite you to operate it. It prints, under the picture, the line that says
what the picture is — the lens, the exposure, the stock, the crop — and that line is the
one place in the whole publication where a photograph's settings are allowed to be
written down. So that is where this playground is. **The seven browser-honest parameters
are words in a sentence, and the sentence is live.**

At rest, under the demo figure, the caption reads:

> **Fig. 2** — Left, the source. Right, the same source rendered **1200** px wide, at its
> **own** height, **unrotated**, **unblurred**.
>
> Format†, quality† and pixel ratio† are not set in this browser.

Worked, it reads one of these:

> **Fig. 2** — Left, the source. Right, the same source rendered **1200** px wide by
> **800** px tall, fitted **cover**, cropped **smart**, **unrotated**, blurred to **12**.

> **Fig. 2** — Left, the source. Right, the same source rendered **1200** px wide by
> **800** px tall, fitted **contain**, letterboxed against **#F5F5F5**, turned **90°**,
> blurred to **40**.

**No single sentence ever carries all seven at once, and that is a fact about the transform
rather than a shortfall in the caption.** `bg` exists only under `contain`; a crop strategy
exists only under a fit that crops. The two can never appear in the same caption because the
two can never be true of the same image. All seven are reachable; they are not all
simultaneous, because the thing they describe is not.

Every bold word is a control. **There is no panel.** No row list, no key column hung down
the left, no value column ruled down the right, no slider, no swatch row, no box of any
kind, and nothing that could be lifted out of the page and used somewhere else. The key
is the word *around* the value — "px wide" **is** the key `w`, "fitted" **is** the key
`fit` — and the value is the word you change. Everything a control panel needs a row to
say, a sentence says with grammar, and grammar is free.

**The parameter reference lives on docs. What the caption prints is the transform.** The
sentence never sets a key and an equals sign; it names the thing the parameter does. The
literal `w=1200` a developer will paste is printed one line below, in the URL, where a
publication prints its source credit — and the caption and the credit are the same fact
in two registers, which is the ordinary condition of a captioned photograph.

**Why a caption and not a console:** the console belongs to `cutaway`, and it belongs to
it honestly — that design is an instrument, and an instrument earns a panel. Folio is a
page. A page that grew a control panel in its outer column would be a magazine with a
dashboard bolted to the margin, and the whole argument of *Concept* would be over.

**Four states of an editable value, and every one of them is made of type or of a rule.**

- **At rest** — `--ink` (21:1) at the sans's **600**, sitting inside running caption words
  set in `--ink-meta` (5.33:1) at **400**. Ink and weight, both, and nothing else: no
  underline at rest, no dotted border, no colour, no icon, no chevron. In a grey line of
  400, a black 600 word is a word that has been *set* — and in this caption, every word
  that has been set is a word you can re-set. The daggered sentence beneath has no black
  word anywhere in it, which is exactly how it says *nothing here is yours to change*.
- **On hover** — the value takes the **writing rule**: a 1px `--ink` bounding hairline
  under the slug, the width of the word. It is the line a correction is written on, and it
  is the same 1px ink rule the rest of the system bounds things with. The cursor is
  `ew-resize` over a numeral on a fine pointer and `pointer` over anything that opens a
  list.
- **On focus** — the system's one focus mark, unchanged: a **2px `--ink` outline at a 2px
  offset** (21:1). The writing rule stays under it.
- **While it is being changed** — the slug **freezes at its widest measure**: four figures
  for `w` and `h`, three for `blur`, six for a hex. With `tnum` under it, every digit is
  one width, so a numeral counts up under a stationary pointer and **the caption does not
  rewrap while you are aiming at it.** The line breaks are re-set only on a commit — a
  click, a release, an Enter — never under a moving hand.

**Setting a number, with no slider anywhere near it.**

- **Drag-scrub** (fine pointers): press on the numeral and pull sideways. One unit per 2px
  of travel; ×10 with Shift held. The pointer is captured, so the value keeps coming even
  when the hand wanders off the line of type.
- **Click without dragging**: the slug takes a caret and becomes an in-place field — no
  box, no border, no fill; the writing rule under it is the whole of its chrome, because a
  boxed input in a caption is a control panel with one row. `inputmode="numeric"`. Enter or
  blur commits; Escape abandons and puts the previous value back.
- **Keyboard**: the value is a `role="spinbutton"` with `aria-valuenow`, `aria-valuemin`,
  `aria-valuemax`, and an `aria-valuetext` that reads the clause rather than the digits
  ("width, 1200 pixels"). Up/Down step by 1, Shift+Up/Down by 10, PageUp/PageDown by 100,
  Home and End go to the bounds. `blur` is bounded 0–100, which is the brief's range and
  not an invented one.
- **Coarse pointers**: no scrub — a horizontal drag on a phone is a scroll, and stealing it
  would be a lie about what the page is. A tap opens the field, and while the field holds
  focus a **`−` and a `+`** sit in the flow after the slug: two 24px squares, 1px `--ink`
  bounding rule, 0px radius, padded out to a 44px touch target and set in the sans like
  every other mark on this page. They leave when focus leaves. They are the one concession
  the caption makes to a thumb, and they are made of rules, like everything else.

**Choosing from a list, without a segmented control.** An enum value (`fit`, `crop`, `rot`)
is a `<button aria-haspopup="listbox">`. Enter, Space, or Down opens a short list **hung
directly beneath the word, inside the caption block and in the flow of the page**: one
option per line, left-aligned to the word's own left edge, in the same face at the same
size. The figure above never moves; the hairline, the credit line and the footnote below
move down and come back. The list has **no box, no border, no fill, and no shadow** — it
is set on the paper, and a 1px `--rule` hairline closes it, which is all a printed list
has ever needed. The current option carries the **2px `--blue` rule beneath it**, steps to
**600**, and takes `aria-selected="true"`. Up and Down move; a letter key jumps; Enter
commits; Escape closes and returns focus to the word. Clicking elsewhere on the page closes
it and changes nothing.

**`bg` takes a colour, and there is no swatch row anywhere in this design.** When `contain`
is the fit, the sentence grows a clause — *letterboxed against **#F5F5F5*** — and the value
is **the hex itself**: six characters in a six-character slug, set in the sans with `tnum`,
the `#` in front of it belonging to the sentence rather than to the value. Focus it and it
takes a caret; type, and the letterbox behind the plate changes on the sixth character. A
string that is short or not hexadecimal leaves the last good colour on the plate and prints
the validation message under the credit line in `--blue-deep` (6.75:1) — the same blue as a
link, because this system has no error red and will not grow one. A slug cleared to nothing
prints an em dash.

**And there is no chip beside it, because the plate is the chip.** A printed page does not
show you the same ink twice. The letterbox inside the figure is a specimen of the exact
colour you named, printed at the size of the plate, in the one place the parameter actually
acts — and a row of little squares beside the word would be a second, smaller, worse
rendering of information already on the page, and it would put a field of colour into an
interface that has none anywhere else. **The name is in the caption. The ink is on the
plate.** The cost is
real and it is accepted: a visitor cannot *browse* colours here, only *name* one. That is
the correct cost for a specimen page, and it is the wrong cost for a paint mixer, which this
is not.

**A clause exists when its parameter is doing something, and not one moment before.** This
is the thing prose can do that a panel cannot. A panel has to print a row for `bg` even when
`bg` is inert, and then grey it out and hope you understand why. A sentence simply has not
written the clause yet. **Three clauses are conditional, and every condition is a fact about
the transform rather than a preference:**

1. **The fit clause appears when `h` is set.** With no height, the rendered box takes the
   image's own aspect ratio, and a resize mode has no box to resize into: `object-fit` does
   nothing at all. So the caption says *at its **own** height* — and *own* is the control,
   the same numeric slug as any other, whose unset reading happens to be a word. Give it a
   number and the sentence grows *by **800** px tall, fitted **cover***.
2. **The crop clause appears when the fit is one that crops** — `cover` or the brief's own
   `crop` mode. Under `contain` or `fill` nothing is being cropped, so a crop strategy has
   nothing to choose between, and the caption does not pretend it has.
3. **The `bg` clause appears when the fit is `contain`.** The brief scopes `bg` as the
   background fill *for* `contain`; there is no letterbox to paint until there is a letterbox.

The invariant that makes this safe on a keyboard: **the word that removes a clause is never
inside the clause it removes.** `h` opens and closes the fit clause; `fit` opens and closes
the crop and `bg` clauses. Focus is never standing on the word that vanishes.

**And the conditional caption has a price, which this document is going to print rather than
pocket.** Every other design answering this brief keeps a surface on which **all seven
parameters are visible at once** — a bar of segments, a console of channel strips, a scatter
of callouts round a plate — and each of them, when a parameter is inert, prints the control
anyway and marks it dead: greyed, disabled, struck through. **Folio has no such surface, and
giving it up is the one thing this caption cost the brief.** At the request form the brief
itself writes — `?w=1200&fm=auto&q=80` — no height is set, so there is no fit clause, and
therefore no crop clause and no `bg` clause: **the first thing a visitor sees is four
controls, not seven, and three of the seven have no rendered trace on the page at all.** That
is a real cost. It is not rounded down here, and it is not a defect to be repaired by
reprinting the missing rows in grey.

It is accepted for the same reason the hex field's cost is accepted, and the reason is the
whole of what this caption is for: **a dead greyed-out row is the panel logic the sentence
exists to escape.** A greyed `bg` row is an interface talking about itself — *here is a
control, it does not work, do not ask.* An absent `bg` clause is a sentence talking about the
transform — *nothing is being letterboxed, so there is nothing to letterbox against.* The
first is furniture that then has to be explained. The second is simply true, and it costs no
ink. `fit` has no meaning without an explicit height and `bg` has no meaning outside
`contain`; **never printing a dead row is not this design's compromise, it is its best
mechanical idea**, and a visible-but-disabled control would be a return to the panel in the
one design that was built to do without one.

What the design does owe the visitor is not a dead row. It is **a way of knowing that the
sentence has more to say** — and a publication that leaves something out of a sentence puts
the explanation in the margin. That is the shoulder note, and it is next.

**The shoulder note — how a reader learns the sentence grows.**

A magazine has two marginal instruments and this design already owns one of them: the
**footnote**, keyed by a dagger, which is what the caption uses for `fm`, `q`, and `dpr`. The
other is the **shoulder note** — an unkeyed gloss set in the margin against the line it is
about, which is what a margin was for before it was somewhere to put footnotes. The growth of
the caption is a shoulder note and **not** a footnote, and the distinction is exact rather
than decorative: **a footnote mark is a promise that something has been left out of the
sentence and printed elsewhere.** Nothing has been left out here. The clause is not missing;
it is *not true yet*. So the note takes **no mark in the caption** — no dagger, no double
dagger, no asterisk, nothing added to the running words — and it does not disturb the order
of the marks that are already there.

- **What it says.** Set in the margin beside the caption's first line:

  > The sentence grows. Set a height and it takes a `fit`; a fit that crops takes a `crop`;
  > `contain` opens a letterbox, and a letterbox takes a `bg`. Three of the seven are waiting
  > on that height, and none of them is printed until it is doing something.

  The counts in it are counts of this page's own controls, set as words; **no figure in this
  note is a claim about the product**, and the parameter names are set as literal tokens in the
  sans Key role, as they are everywhere else in this system.
- **How it is set.** The **15px Body S role in its italic** — a style of the body serif and
  not a fourth voice — in `--ink-soft` (17.40:1 on paper), ragged right, with a **1px `--rule`
  hairline above it**. It is quieter than the caption because it is a gloss on the caption,
  and it is quiet by *position and italic*, never by a fainter ink: nothing in this design is
  communicated by making type harder to see.
- **Where it goes, at every width.** On **desktop (1024–1200px) and wide (>1200px)** it sits
  in the **300px outer column**, set against the caption's **first line** — the line whose
  height clause it is about — with the **dagger footnote beneath it**, set against the
  caption's second sentence, the two divided by a 1px `--rule` hairline. The two notes stack
  in the outer column **in the order their subjects appear in the caption**, which is the only
  order a margin has ever set notes in. On **tablet (768–1024px)** and **mobile (<768px)** the
  article grid is one column, so both notes drop **beneath the credit line, the shoulder note
  first and the footnote under it**, in the same order and with the same hairline between
  them. It never becomes a tooltip, a popover, or a disclosure: it is prose, and prose is
  always already open.
- **It is not a control and it owns nothing, so it takes no stop.** It has no `role`, no
  `tabindex`, and no focus state, and it adds **nothing** to the tab order — which is the test
  the parent rule sets: a mark that owns no value does not get a stop. But it is not invisible
  to a screen reader either, and it is not left to a sighted reader alone: **the note is the
  `aria-describedby` of the two words that open what it describes** — the height value, and
  the `fit` word once the fit clause exists. So the control that grows the sentence is the
  control that announces how, and no new stop was minted to do it.
- **It leaves when it has nothing to say.** Once a height is set *and* a fit is chosen, the
  path the note describes has been walked, so the note is **withdrawn** — the hairline with
  it. It is a gloss on a sentence that is still growing, not a standing instruction, and a
  publication does not keep printing a note about a clause that is now on the page. (It
  returns if the height is cleared back to *own*, because the sentence has shrunk back to the
  state the note is about.)

**Unset, in a sentence, is a word — not a dash and not a ghost.** `rot` unset reads
**unrotated**; `blur` at zero reads **unblurred**; a height not given reads **own**. Each of
those words is still a control, and each is still black and still 600, because *unset* is a
state of a value and not the absence of one. The em dash keeps the job it has always had and
no other: **a table cell with nothing to put in it** (the spec table's Default column, the
tier table), and a slug a visitor has just cleared. There is no `rot=0` and no `blur=0` in
the URL — the brief defines `rot` as `90` / `180` / `270`, and an unset parameter contributes
nothing to a string.

**Focus order is reading order, and the design got it for free.** Tab moves along the
sentence: `w`, `h`, then the fit and crop and `bg` clauses if they exist, then `rot`, then
`blur`, then the **Copy** button under the credit line. **That is the complete tab order of
this page's control surface, and no object on it owns two stops** — a rule the caption cannot
be built without, because every one of its controls is a word in a live sentence and a
sentence rewrites itself.

The three things that could quietly break it, named so a build cannot ship one of them:

- **The `−` and `+` marks a focused numeral offers a thumb are not stops** (*Components*,
  `caption-stepper`). They are `aria-hidden`, they carry `tabindex="-1"`, and they take
  `preventDefault()` on `pointerdown` so pressing one never moves focus. **This is not
  fastidiousness, it is the only shape the affordance can take**: the marks exist *only while
  the numeral holds focus*, so a stepper that could itself be tabbed into would blur the
  numeral, remove itself from the page in the same instant, and **destroy the node the visitor
  was standing on.** The increment it hands a thumb, the numeral already hands a keyboard and
  a screen reader — it is a `role="spinbutton"` with `aria-valuenow`, and assistive technology
  drives that directly, which is why the marks can be `aria-hidden` without costing anybody
  the ability to step the value.
- **An open `caption-list` is not a set of stops.** It is a listbox owned by the word that
  opened it: Up and Down move within it, Enter commits, Escape closes and returns focus to the
  word. No option is ever tabbed to, and the list closes before Tab can leave the word.
- **The shoulder note and the dagger footnote are not stops.** They own no value, so they get
  no stop. They reach a screen reader as the `aria-describedby` of the controls they are about
  (above), which is how a note reaches a reader without becoming a control.

The running words between the values are inert text, and so are the dagger, the folio, the
running head, and every em dash. **The caption is not an `aria-live` region** — a sentence
that re-reads itself into a screen reader every time a numeral ticks is not a caption, it is a
siren. Each value announces itself, as its own widget, with its own name and its own value.

**Manipulating any value mutates the figure immediately and rewrites the URL beneath it.**
Nothing on this page is a mock-up. If a word changes and the photograph does not, the design
has failed and should be thrown away.

Four clauses govern the caption, and they are the ones that keep it honest:

- **`fm`, `q`, and `dpr` are not controls — they are footnoted.** They are named in the
  caption's **second sentence**, which is set entirely in `--ink-meta` at 400 and therefore
  contains no black word and no control: *Format†, quality† and pixel ratio† are not set in
  this browser.* Each of the three carries a **dagger (`†`)**, and on index the footnote is
  set once, in the outer column beside the caption, in the 15px Body S serif:

  > `†` Not controls. `fm=auto` resolves AVIF → WebP → JPEG from the request's Accept
  > header and `q` is applied at the edge — a browser cannot demonstrate either re-encode.
  > `dpr` is different: the browser already reports it, honestly, as its own
  > `window.devicePixelRatio` — there is nothing to negotiate, only to print.

  A badge is what a software page reaches for at this moment. **A magazine has never needed
  one, because it has had the dagger for four centuries** — a mark that is a *letter*, not
  an ornament; that costs one glyph and no chrome; and that comes with somewhere to put the
  explanation. The same dagger marks the same three rows in the docs spec table, and the
  same footnote sits beneath that table, because a note to a table goes under the table and
  a note to a figure goes in the margin.

  The refusal underneath it is the part that matters. **The alternative is to set a number
  that is not true** — a payload figure ticking down beside the plate, a byte count under
  the credit line. A publication that prints a figure it was not given has committed the
  one error a printed page cannot take back, because a page cannot be quietly re-encoded
  after it has gone to press. **Every number in this system comes from the brief or it is
  not set at all.**
- **The plate carries the visitor's colour, and the interface never does.** The letterbox
  inside the figure is the only place on this page where a `bg` value is ever printed, and
  it does not travel: no button, no rule, no band, no mark, and no focus outline takes its
  ink from it. **A `bg` value can never be read as licensing a second hue in the
  interface**, because there is nowhere in the interface for it to go.
- **The caption is prose and it degrades like prose.** Narrow the viewport and it does what a
  paragraph does: it takes more lines. There is no mobile control panel, no bottom sheet, no
  drawer, and no fallback widget hiding behind a breakpoint. The leading opens, the values
  grow their touch targets, drag-scrub gives way to the `−` / `+` marks, and the sentence
  simply takes the lines it needs. A sentence is the most responsive layout ever devised,
  and it did not need a media query to become one.
- **Nothing here is dressed up as a control that is not one.** No inert row, no disabled
  slider, no greyed swatch, no fourth `rot` value invented so the option list would look
  balanced. What the browser can do is a black word. What the edge does is a grey one. **That
  is the entire vocabulary of the sentence** — and the thing the sentence cannot yet say, the
  margin says in prose, which is the shoulder note above and is not a control either.

The **URL prints beneath the caption**, under a 1px `--rule` hairline, the way a magazine
prints a source credit under a plate: 17px sans URL role, `tnum`, `--ink`. It opens at the
brief's own request form — `https://demo.refract.dev/hero.jpg?w=1200&fm=auto&q=80` — and
every word in the caption above rewrites it live. A `button-outline` reading **Copy** sits at
the right of that line, and drops beneath it below 768px. **Nothing in this block is round.**
It is type, a rule, and a squared button — a printed page does not grow a knob underneath its
own photograph.

`dpr` is in the string before the visitor has touched a thing. On load the credit line takes
`&dpr=` and the number **this display actually reports** — `window.devicePixelRatio`, clamped
to the brief's 1–3. Nothing was estimated to get that figure and nothing was invented: the
browser volunteers it, and typesetting it is the only work the design does. It is also why
`dpr` never reads as unset — every display has a ratio, so the string always has one to
print, while an untouched `rot` or `blur` has nothing to contribute and contributes nothing.
The three daggered parameters are set in `--ink-meta` (5.33:1) and the rest in `--ink`
(21:1), so **the credit line is legible as two inks: what happened in this browser, and what
happened at the edge.**

> **`q` reads 75 in one place and 80 in another, and both readings are correct — do not
> "fix" this.** The brief gives `q` a default of 75, and the request form it prints as its
> own example carries `q=80`. A publication does not silently reconcile its sources: the
> spec table sets the default it was given, the credit line sets the URL it was given, and
> the difference between them belongs to the content, faithfully typeset.

### 2. The figure the caption drives

**The caption sets; the plate shows** — and the inversion is one a magazine has lived with
forever. The line under a picture is written after the picture; here it is written *by the
visitor*, and the picture obeys it.

The live-transform demo is **one figure made of two square-cornered plates** in the 680px
measure: the source on the left, the transformed result on the right, the right one *derived
from the left in the browser* by the seven values currently set in the sentence below. There
is no second image asset and no "optimized" version prepared in advance — the right plate is
the left plate under `object-fit`, `object-position`, `transform`, `filter`, and a background
colour. **Seven values are reachable in the caption because the browser honestly performs
seven operations; a caption that offered an eighth would be describing a picture it had not
seen.**

The pair is **one figure and takes one caption**, which is why the caption sits beneath both
plates and runs the full measure, and why it names them: *Left, the source. Right, the same
source…*. The index carries **two numbered figures** — the cover plate is Fig. 1, this pair
is Fig. 2 — because the three capability plates take a display head instead of a caption, and
a figure with no caption takes no number.

The live caption is set at 17px where the site's other captions are set at 12px, and the
reason is not emphasis. **A 12px control is not a control.** This caption is not read past on
the way to the next paragraph; it is *operated*, at the size a hand and a screen reader can
both find it, and 17px is the size this system already holds a URL at for exactly the same
reason.

The plates carry no border, no radius, no shadow, and no scrim, and the paper around them
does all the framing. **No type ever sits on top of either of them.** Below 768px the pair
stacks vertically. **It never becomes a drag-slider comparison**, which hides half of each
image at all times and is a marketing device rather than an editorial one.

### 3. The printed spec table

The ten-parameter reference, and the place the reference's editorial logic pays off hardest.
**It is a printed table, not a documentation component.**

- A **2px `--ink` rule** above the head. The head row in the 12px uppercase sans with `case`.
  A **1px `--rule` hairline** beneath the head, **1px hairlines between the ten rows**, and a
  **2px `--ink` rule** closing the block. Nothing else: no tint behind alternate rows, no
  container, no border, no shadow, no fill — and **not one vertical rule**. A compositor
  spends a rule where the eye is likely to lose its place, and the eye loses its place
  crossing a row, never running down a column. A column is already a column; it does not
  need a fence to prove it.
- **Four columns:** the **parameter** in the sans Key role (`--ink`); the **accepted values**
  in the sans Data role with `tnum` (`--ink`); the **default** in the Data role
  (`--ink-meta`); and the **description** in the 15px body serif with `onum` (`--ink-soft`).
- **Every row but `q`'s prints an em dash in the Default column, and the dashes are the
  argument.** The brief fixes one default — `q` is 75 — and folio does not supply the rest
  out of politeness. A column of dashes looks, for about a second, like an unfinished table;
  then it reads as what it is, which is a publication declining to print something it was
  not told. It is the "no invented facts" rule made **visible**, in the one column a
  developer would audit first.
- The `fm`, `q`, and `dpr` rows carry the **dagger** after the parameter name. The footnote
  sits beneath the closing rule.

The same table form, at a smaller scale, carries the **tier table** on pricing and the
**overage ledger** beneath it.

### 4. Running heads, folios, and the drop cap — the page furniture

The three marks that no software page has and every printed page does. They are cheap,
they are structural, and **together they are the thing a visitor cannot un-see.**

- **The running head** sits above every page's content, between two hairlines: the product
  at the left, the section at the right, in 11px uppercase sans with `case` —
  `REFRACT · QUICKSTART & REFERENCE`. It is the page telling you where in the publication
  you are.
- **The folio** sits at the foot of every page, above the footer, centred, in the 12px sans:
  `1 / 3`, `2 / 3`, `3 / 3`. The site has three pages and it says so.
- **The drop cap** opens the lead paragraph of each page — **the display serif at 400, three
  lines deep, `--ink`** — followed immediately by the **run-in**: the next four words in
  **true small caps** (`smcp`, Source Serif 4 roman). There is **exactly one drop cap per
  page, on the lead paragraph, and nowhere else** — a second one on the same page is not
  emphasis, it is noise, and it is the difference between a typeset page and a themed one.

## Components

- **Masthead band.** `--paper`, a 1px `--rule` hairline above and below, 12px 24px padding.
  The wordmark **Refract** sits **centred** in the 26px Display M (Playfair Display 400) —
  centred because that is where a masthead goes, and this is the one place the layout is
  symmetrical.
- **Nav bar.** `--paper`, sitting under the masthead, closed by a 1px `--rule` hairline.
  Three page links — **Home · Docs · Pricing** — in the 14px Nav role (Manrope 700),
  `--ink`. The active link takes `aria-current="page"`, a **2px `--blue` rule beneath it**,
  and no other change of colour. **The links are words.** There is no icon set beside them
  and no flag above them: nothing in the content marks a page as new or recommended, and a
  design that hangs a flag on a page has invented a fact to fill a component slot. Below
  768px the row collapses; **the masthead never does.**
- **`button-primary`.** **`--ink` (`#000000`) fill, `--on-ink` white label** at the 16px
  Button role (**21:1**), **0px radius**, 48px tall, 12 × 24px padding. Hover and press step
  the fill to `--ink-soft` (`#1A1A1A`, white label at 17.4:1) — **a colour swap and nothing
  else: no transform, no lift, no shadow.** This is the site's primary action —
  **"Start building" → `./docs.html`** — and it appears **exactly once on the site, in the
  index's CTA band.** The nav carries no button, and **docs and pricing carry no filled
  button at all**: their actions are outlined. It is a black rectangle. **It is not a
  colour; it is the ink.**
- **`button-outline`.** `--paper` fill, `--ink` label, **1px `--ink` bounding rule**, 0px
  radius, 48px tall. Used for **Copy** — at the right of the URL credit line, and at the top
  right of the SDK listing — and for **all three tier CTAs**, Free, Pro, and Scale alike.
  **No tier CTA is ever `button-primary`:** the three columns are set identically, and
  filling one CTA with ink would be a typographic recommendation that the content never
  made.
- **Inline link.** `--blue-deep` (`#04618F`, **6.75:1**) with a 1px underline in the same
  colour, inside body-serif copy only — exactly the place the reference reserves its blue
  for. **Colour meets text in exactly two places in this design**: here, and in the
  validation message a bad value in the caption prints beneath the credit line. Both are
  `--blue-deep`, and **there is no third.**
- **`caption-value` — and there is no boxed input anywhere on this site.** The editable word
  inside the live caption, in the Live caption role: **`--ink` at the sans's 600** among
  running words at `--ink-meta` 400. Hover and edit draw the **writing rule** — a 1px `--ink`
  bounding hairline the width of the slug — and focus draws the **2px `--ink` outline at a 2px
  offset**. Editing gives it a caret and nothing else: no fill, no border box, no placeholder
  ink. A slug cleared to nothing prints an em dash in `--ink-meta` (5.33:1). A value outside
  its range (a `blur` outside the brief's 0–100, a `bg` that is not six hex characters) keeps
  the last good value on the plate and prints a message in `--blue-deep` beneath the credit
  line — **the same blue as a link, not a semantic second colour**, because this system has no
  error red and will not grow one. Three kinds, and no fourth: a **numeral** (drag-scrub on a
  fine pointer, `role="spinbutton"` on a keyboard, `−` / `+` marks on a coarse one), an
  **enum word** (opens a `caption-list`), and a **hex** (six characters, typed). Full mechanics
  in *Signature 1*.
- **`caption-list`.** The short list that hangs beneath an enum word, in the flow of the
  caption block: one option per line, left-aligned to the word's left edge, same face, same
  size, **no box, no border, no fill, no shadow**, closed by a 1px `--rule` hairline. The
  current option takes a **2px `--blue` rule beneath it**, steps to weight 600, and carries
  `aria-selected="true"`. **Not a pill, not a chip, not a segmented control, not a dropdown
  floating over the page, and never rounded.**
- **`caption-stepper`.** Coarse pointers only, present only while a numeral holds focus: a
  **`−`** and a **`+`**, each a 24px square with a 1px `--ink` bounding rule and a 0px radius,
  padded to a 44px touch target, sitting in the flow after the slug. Each mark is drawn with
  the same rules everything else here is drawn with. **It is `aria-hidden`, it carries
  `tabindex="-1"`, and it takes `preventDefault()` on `pointerdown` — so it is not a tab stop,
  not a node a screen reader lands on, and not a thing that can steal focus from the numeral
  that printed it.** That is load-bearing, not tidy: the marks are conditional on the numeral
  holding focus, so **a focusable stepper would blur the numeral, be removed in the same
  instant, and destroy the node the visitor was standing on.** It costs nobody the increment —
  the numeral is a `role="spinbutton"` with `aria-valuenow` and Up/Down (*Signature 1*), which
  is the route a keyboard and an assistive technology already take, and the stepper is only the
  route a thumb takes. It is the caption's one concession to a thumb, it is made of rules, and
  it leaves when focus leaves.
- **`shoulder-note`.** The unkeyed marginal gloss beside the live caption on index, and the
  design's answer to a sentence that grows: the **15px Body S role in its italic** in
  `--ink-soft` (17.40:1), ragged right, under a 1px `--rule` hairline, set in the 300px outer
  column against the caption's first line — and beneath the credit line, above the dagger
  footnote, below 1024px. **It carries no footnote mark**, because a mark promises that
  something was left out of the sentence and nothing was: the clause is not missing, it is not
  true yet (*Signature 1*). It has no `role`, no `tabindex`, and no focus state, and it **adds
  nothing to the tab order** — it reaches a screen reader as the `aria-describedby` of the
  height value and of the `fit` word, the two controls that open what it describes. It is
  withdrawn once a height is set and a fit chosen, and it returns if the height is cleared.
  **It is never a tooltip, a popover, a disclosure, or a badge.** It is prose in a margin,
  which is always already open.
- **`credit-line`.** The URL beneath the live caption, under a 1px `--rule` hairline: the
  17px sans URL role with `tnum`, the three daggered parameters in `--ink-meta` and the rest
  in `--ink`, with a `button-outline` **Copy** at its right (beneath it below 768px). It is
  set the way a magazine sets a source credit under a plate, and it is the only place on the
  site where the literal `w=1200` a developer will paste is printed.
- **`plate` — and there is no card in this system.** A photograph is a **plate**: a
  square-cornered image with **no border, no radius, no shadow, no overlay, and no scrim**,
  and a caption beneath it — the 12px sans on every plate but the demo's, which takes the
  17px live caption (*Signature 1*). The reference's story-card is a photograph, a
  headline, and a paragraph sitting on the page with nothing around them but a column rule —
  and that is exactly what the capability trio is. **The three capabilities are three
  columns of the grid, not three cards**, and giving them a border would be the first step
  back toward the SaaS page this design exists to refuse.
- **Spec table.** As set out in *Signature 3*: 2px `--ink` rule above the head, hairlines
  between rows, 2px `--ink` rule below, no fill, no striping, no vertical rules, dagger on
  the three server-side rows, footnote beneath.
- **Listing — and it is not a code block.** The SDK snippet sits on **`--paper-tint`**
  (`#F5F5F5`) — **the only tinted surface in the design** — with a **2px `--ink` rule above
  it and a 1px `--rule` hairline below it**, 0px radius, no border box, no shadow, 32px
  padding. It is set in the **sans** Listing role (15px / 1.7, `tnum`) in `--ink-soft`
  (15.96:1 on the tint), with **ruled line numbers hung in the left margin** in `--ink-meta`
  (4.89:1 on the tint — body-legal) behind a 1px `--rule` vertical. A `button-outline`
  **Copy** sits at its top right. **There is no syntax-highlight palette** — this design has
  one colour and will not spend it on a language keyword. Emphasis inside the listing, where
  it is needed, is weight 700 of the same sans and nothing else.
- **`tier-column` — and there is no tier card in this system.** The three plans are **three
  columns of one printed comparison table**, not three cards: a row-label column at the left,
  then Free, Pro, and Scale. The head of each tier column carries the tier name in the 26px
  Display M and the price beneath it in the 40px **Price** role with `lnum` (`$0`, `$29`,
  `$249`), with `/mo` stepping down to the sans. Then hairline-divided rows — transforms,
  bandwidth, support, custom domains, uptime SLA, billing — with every value in the sans Data
  role with `tnum` **so the figures lock into a column down each tier**, and an **em dash**
  wherever a tier does not carry the thing. The block is closed by a 2px `--ink` rule, and
  the three `button-outline` CTAs sit beneath their columns. **No tier is marked
  "recommended," "popular," or "best value."** The brief ranks nothing, and a publication
  does not print a recommendation it was never given. The three columns are set identically
  and the reader draws the conclusion, which is what a comparison table has always been for.
- **`ledger-row`.** A hairline-divided full-width row: the label hung at the left in the sans
  Key role, the value at the right in the Data role with `tnum`. It carries the overage and
  billing semantics on pricing ( `$2` per additional 1,000 transforms · `$0.08`/GB · a
  transform is one unique source-and-parameter combination per billing month · cached hits
  are free ) and the caching and limits inside the `AT A GLANCE` box on docs ( 50
  requests/second per key, all tiers · variants edge-cached 30 days · instant purge by URL or
  tag ). **No card, no fill, no shadow.**
- **`standing-box`.** A ruled box in the outer column, made of rules and nothing else: a 2px
  `--ink` rule on top, a standing head, a one-line italic deck in the body serif, then
  hairline-divided ledger rows, then a hairline at the foot. **No fill, no border box, no
  shadow, no radius.** It carries the **`AT A GLANCE`** box on docs. **It holds no controls —
  the live caption is the only control surface in this design**, and a box that grew a
  control would be the row-panel this design threw away.
- **FAQ row.** A full-width disclosure row, 1px `--rule` between rows, in the 680px measure:
  the question in the 26px Display M (Playfair Display 400 — **not bold**), the answer in the
  15px Body S with `onum`. The marker at the right of a closed row is a **plus**: a 12px
  `--ink` horizontal rule with a vertical one laid across it. Opening the row takes the
  vertical stroke away and leaves a minus. Both strokes are pseudo-elements — which is to say
  they are rules, like every other mark here. **The site loads no icon font and draws no SVG.**
  **No card, no fill, no shadow, no box.** A question, its answer, and a rule between them is
  what a printed Q&A has always been.
- **Footnote.** A dagger (`†`) in `--ink` after a key or a word, and a 15px Body S line set
  where the block it belongs to can see it. It serves one subject only — the three
  server-negotiated parameters — and it appears in two places: **in the outer column beside
  the live caption on index**, and **beneath the spec table on docs**. A note to a figure goes
  in the margin; a note to a table goes under the table.
- **Folio.** A 12px sans line, centred, above the footer, between two hairlines: `1 / 3`.
- **Footer.** **`--paper` — white, exactly like the page.** A 2px `--ink` rule above it, 48 ×
  24px padding, three columns of 14px sans links in `--ink`, closed by a 1px `--rule`
  hairline and a 12px `--ink-meta` legal row (5.33:1). **The reference closes on a black
  footer band and this design does not: a sheet of paper has no black slab at its foot, and
  the page never inverts.**

## Motion

**Essentially none, and never decorative.** A printed page does not move when you look at
it. The only thing motion is spent on here is making a control feel immediate.

- **The figure answers the word within one frame.** Change a value and the plate repaints
  immediately. There is no artificial delay, no skeleton, no shimmer — and above all no
  spinner, because **there is no request in flight.** Nothing is being fetched, nothing is
  being re-encoded, and a page that mimes waiting is lying about the machine it is running
  on.
- **A word is substituted, not animated.** No cross-fade when a value changes, no slide when
  a conditional clause arrives or leaves, no typewriter effect on the URL as it rewrites. A
  numeral counts while a visitor drags it, which is not an animation — it is the visitor's
  own hand — and `tnum` plus a frozen slug keep it from shaking the sentence while it does
  (*Signature 1*).
- **No scroll animation, no reveal-on-scroll, no parallax, no scroll-jacking, no
  hover-zoom on a photograph, no looping anything.** No element in this system carries a
  `box-shadow`, at rest or on hover, so there is nothing to lift.
- **No count-up on the stats box.** Ink does not arrive at a number. It is already there
  when the page is opened, which is the only tense a printed figure has.
- Hover and focus are **underlines, weight steps, and colour swaps only**, at ~120ms
  ease-out, **with no transform — no scale, no lift, no bounce.** A nav link gains an
  underline; an editable value gains its writing rule; `button-primary` steps its fill to
  `--ink-soft`; an FAQ row's question gains an underline; a table row does not react at all,
  because a printed table does not.
- **Focus is a 2px `--ink` outline** (21:1) at a 2px offset, on every interactive element,
  and it is never removed.
- Under **`prefers-reduced-motion: reduce`**, every transition is dropped and every element
  renders in its final state — the FAQ rows open instantly, a caption list appears with no
  easing, the writing rule appears with no fade. **The page is fully legible at rest, which
  is the only state paper has ever had.**

## Image treatment

**The bundle runs one picture desk, and it does not commission a second.** Every image in
this system is a **real photograph in a reportage register**: available natural light,
documentary framing, a real object in a real place, unstyled and unretouched-looking — the
kind of frame a technology monthly runs beside a feature. **There is no illustration, no
vector art, no icon set, no diagram, no schematic, no chart, no 3D render, and no
"flat" anything.** If it is not a photograph or type, it does not belong on this site.

The photographs are a **photo essay on light** — a darkroom, an enlarger's projected
rectangle, a stack of filters on a lightbox, a relay tower, a lens throwing a caustic. The
subject of the product is what happens to an image between an origin and a browser, and the
photographs are about exactly that, rather than about developers at desks.

**The reportage register is about the light and the framing, not about people — and this is
the one tension in the transplant, so it is resolved here explicitly.** Reportage normally
means *people*, and the instinct the lineage carries is to put someone in the darkroom.
**Resist it. Every frame in this bundle is unpeopled.** The practical reason is that the
image model cannot draw a hand — it fuses the fingers into a knuckleless mass — and **you do
not re-roll your way out of that. You clear the hands out of the room and photograph what is
left.** The editorial reason is the better one: what runs beside this article is not
lifestyle photography, it is a **specimen** — the raw material the API is about to act on —
and putting a person in a specimen quietly changes what the page is claiming.

**How every image in this system is prompted.** These are binding rules, and a generated
image that breaks one is rejected and re-generated rather than accepted and cropped around.

1. **Nothing in frame carries language.** Every prompt states, explicitly and in its own
   clause, that the image contains **no text, no lettering, no numerals, no labels, no
   logos, no brand markings, no signage, no dials or scales bearing numbers, and no engraved
   or stamped marks of any kind** — not on the equipment, not on the wall, not in the
   background, not anywhere. Invented lettering is the single most common failure in a
   generated still, it reads as counterfeit branding, and darkroom equipment is exactly the
   subject matter that tempts a model into inventing a maker's plate. Every apparatus in
   these frames is **unmarked**.
2. **No people and no hands.** Not one, not in the background, not out of focus. See above —
   this rule needs stating twice because the reportage lineage fights it.
3. **The frame is quiet and uncluttered.** No props beyond the subject each description
   names, no scattered incidental objects, no busy lived-in scenes.
4. **`demo-plate` must survive being taken apart.** It is cropped to 1:1, blurred to 100,
   rotated 270°, and letterboxed against a `bg` colour — live, in front of the visitor. **It
   has to read as a considered photograph in every one of those states, because the line
   printed underneath it is claiming that it does.** And **its subject must sit well
   off-centre**:
   *smart crop keeps subjects in frame* is a claim the brief makes, and a photograph whose
   subject is already dead centre lets `crop=smart` and `crop=center` land on the very same
   frame. The caption would then be asserting something the picture cannot show, which is
   the one thing a caption must never do.

Beyond those, each prompt carries the constant tone words: **available natural light,
documentary reportage photograph, real place, unstyled, still and quiet, no people, no
text.** Crops hold identical framing across breakpoints — this design never art-directs a
still into a dramatic mobile crop — **no image is ever full-bleed**, every plate is
square-cornered, and **no image ever has type set on top of it.** The caption sits beneath,
in the sans.

Needed images (referenced `./assets/<id>.webp`):

- `cover-plate` (16:9) — A dim darkroom under an amber safelight: three shallow developing
  trays set in a long sink, still liquid catching the light, a wet bench, deep shadows,
  available light, documentary reportage photograph, nothing else in frame, unmarked
  equipment, no text, no lettering, no numerals, no labels, no logos, no brand markings, no
  signage, no dials or scales bearing numbers, no engraved or stamped marks, no people, no
  hands.
- `demo-plate` (4:3) — A red-painted iron fire escape zig-zagging up the left third of a
  plain sunlit brick wall, its hard afternoon shadow thrown across the empty right two-thirds
  of the frame, the staircase set well off-centre, available daylight, documentary reportage
  photograph, no text, no lettering, no numerals, no labels, no logos, no brand markings, no
  signage, no dials or scales bearing numbers, no engraved or stamped marks, no people, no
  hands.
- `capability-transform` (4:3) — A darkroom enlarger easel holding a single blank sheet of
  photographic paper, a bright rectangle of projected light falling across it at an angle,
  dim room around it, unmarked equipment, no dials, no scales, available light, documentary
  reportage photograph, no text, no lettering, no numerals, no labels, no logos, no brand
  markings, no signage, no engraved or stamped marks, no people, no hands.
- `capability-optimize` (4:3) — A stack of neutral-density glass filters resting edge-on on a
  glowing lightbox, each sheet slightly offset from the last so the light deepens through the
  stack, sharp macro detail, available light, documentary reportage photograph, no text, no
  lettering, no numerals, no labels, no logos, no brand markings, no signage, no dials or
  scales bearing numbers, no engraved or etched marks on the glass, no people, no hands.
- `capability-deliver` (4:3) — A lattice relay tower standing on a bare hillside at dusk,
  small dishes at its crown, a plain open sky behind it, available light, documentary
  reportage photograph, nothing else in frame, no text, no lettering, no numerals, no labels,
  no logos, no brand markings, no signage, no dials or scales bearing numbers, no engraved or
  stamped marks, no people, no hands.
- `docs-plate` (1:1) — A single thick glass lens element lying on a dark workbench, a shaft
  of window light passing through it and throwing a bright refracted caustic across the wood,
  available daylight, documentary reportage photograph, nothing else in frame, no text, no
  lettering, no numerals, no labels, no logos, no brand markings, no signage, no dials or
  scales bearing numbers, no engraved or etched marks, no people, no hands.
- `pricing-plate` (3:4) — A tall column of daylight falling through a high dusty window into
  an empty workshop, the beam striking a plain concrete floor, dust suspended in the air,
  available light, documentary reportage photograph, tall portrait, nothing else in frame, no
  text, no lettering, no numerals, no labels, no logos, no brand markings, no signage, no
  dials or scales bearing numbers, no engraved or stamped marks, no people, no hands.

## Do / Don't

Do:

- Keep the paper white (`--paper` `#FFFFFF`) and the ink black (`--ink` `#000000`), and keep
  the footer the same white as the page.
- Hold the display serif at **weight 400 at every size**, including the 64px cover line.
- Split the three voices absolutely: **Playfair Display for display, Source Serif 4 for every
  paragraph, Manrope for metadata, captions, buttons, nav, and every literal API token.**
- Print the grid: a **680px measure that never widens**, 1px column rules between columns,
  hairlines between rows, a 2px `--ink` rule above every table head and every box.
- Give every page its **running head**, its **folio**, and **exactly one drop cap** on its
  lead — with the four-word small-caps run-in after it (`smcp`, Source Serif 4 roman).
- Set figures in prose as **old-style** (`onum`, Source Serif 4) and figures in a box or a
  table as **lining** (`lnum` on the display serif — its default is old-style; `tnum` on the
  sans Data, Listing, URL, and Live caption roles).
- **Build the playground inside the demo figure's caption.** The seven parameters are words
  in a live sentence: black at the sans's 600 among grey running words at 400; a numeral that
  scrubs and steps; an enum word that opens a short list hung beneath it; a `bg` that is a hex
  you type. **No panel, no rows, no key column, no value column, no slider, no swatch.**
- Keep the seven browser-honest parameters (`w` `h` `fit` `crop` `rot` `blur` `bg`)
  interactive and genuinely wired to the photograph, and mark `fm` `q` `dpr` with a **dagger
  and a footnote** — in the caption's second sentence and in the spec table.
- **Let a clause exist only while its parameter is doing something** — the fit clause needs a
  height, the crop clause needs a cropping fit, the `bg` clause needs `contain` — and let an
  unset value read as a **word** (*unrotated*, *unblurred*, *own*), never as a greyed-out row.
  **The cost is that four controls are visible at load and three are not, and it is paid, not
  hidden** (*Signature 1*).
- **Signpost the growth in the margin, and only in the margin.** The **shoulder note** — an
  unkeyed italic gloss in the outer column beside the caption's first line — is what tells a
  reader the sentence takes a `fit` once a height is set, a `crop` once the fit crops, and a
  `bg` once the fit is `contain`. It carries **no footnote mark, no tab stop, and no `role`**;
  it reaches assistive technology as the `aria-describedby` of the height value and the `fit`
  word; and it is withdrawn once the path it describes has been walked. **It is never a
  tooltip, a popover, a badge, or a greyed row** — those are the four answers this design
  refuses.
- Print an **em dash** where a table cell has nothing to put in it, and for every default the
  brief does not state.
- Set the ten-parameter reference as a **printed spec table** — horizontal rules only, no
  striping, no card, no shadow — and the three plans as **three columns of one printed
  table**, not three cards.
- Set every corner at **0px**, and let the paper be the only elevation.
- Keep `--ink-meta` (5.33:1 on paper, 4.89:1 on the tint) for metadata and `--blue-deep`
  (6.75:1) for every blue that carries text.

Don't:

- **Never bold the display serif.** There is no 500, no 600, and no 700 of Playfair Display
  in this system. Promoting it destroys the design, and it is the single easiest way to do so.
- **Never set body copy in the sans, and never set nav, a button, a table head, or a URL in a
  serif.** The three-voice split is absolute.
- **No monospace anywhere in this system.** Not in the URL, not in the listing, not in the
  parameter names, not in a caption. **A monospace body is `carton`'s language**, and reaching
  for one here is the first step toward becoming it.
- **No hand-drawn shape, no wobbly rule, no sticker badge, and never a fourth type voice.**
  Every rule in this design is ruled straight, because a press does not wobble; every mark is
  set, not scrawled. **These four are `carton`'s signature devices — the other paper design in
  this brief — and the split between the two of us is the one that has to stay legible.** The
  italic of Source Serif 4 is a *style of the body serif*, not a fourth voice.
- **No dark band anywhere** — no dark hero, no dark section, and **no dark footer.** The page
  never inverts. Paper has no night mode; `cutaway` does, and it is welcome to it.
- **No rounded corner and no circle.** Radius is 0px on every element. A pill or an orb is
  `aperture`'s language.
- **No `box-shadow` anywhere**, at rest or on hover, on any element. Depth is the rule, the
  paper, and the shadow inside a photograph.
- **No second hue.** No green success, no amber warning, no separate error red, no
  syntax-highlight palette. One editorial blue, two stops.
- **Never let the blue become a fill.** White on `--blue` (`#057DBC`) is **4.50:1** — the same
  knife-edge as blue on white, because contrast is symmetric — and a blue button would make
  the blue an accent, which the reference forbids. **`--blue` is rules and marks only; it never
  carries text and it never appears on `--paper-tint` (4.13:1 — it fails there).** Blue that
  carries text is `--blue-deep` (`#04618F`, 6.75:1 / 6.19:1).
- **No card and no tier card.** The capability trio is three columns of the grid; the three
  plans are three columns of one table. A border around either is the first step back to the
  page this design refuses.
- **Never rebuild the playground as a panel.** No row list of key · control · value, no
  sliders, no swatch row, no segmented control, no boxed input, no bottom sheet on mobile,
  and no floating popover over the page. The vertical console belongs to `cutaway` and it
  belongs there for a reason. **If a control cannot be said as a word in the caption, this
  design does not have it.**
- **Type never sits on top of a photograph.** There is no scrim in this system to make it
  legible, and a caption beneath the plate is the correct place for the words.
- **No illustration, no vector art, no icon set, no diagram, no chart.** Every image is a
  photograph in a reportage register. Every mark is a rule or a letter: the FAQ's plus is two
  rules laid across each other, and the site ships neither an icon font nor a single SVG.
- **No people and no hands in any generated image**, however strongly the reportage lineage
  suggests otherwise.
- **No invented facts, and no invented numbers.** No byte count beside the plate, no payload
  figure shrinking in an animation, no latency the brief did not supply, no "most popular"
  tier, no "NEW" badge, and **no default in the spec table except the one the brief states
  (`q` = 75)** — every other row prints an em dash. Every figure this site *asserts* — 62%,
  21 ms, 98.6%, 99.95%, 41 edge locations, 89 ms / 340 ms cold, 50 requests per second, 30
  days, $0 / $29 / $249, 1,000 / 50,000 / 1,000,000 transforms, 5 GB / 250 GB / 5 TB, $2 per
  1,000, $0.08/GB, `q` default 75, `q` 1–100, `dpr` 1–3, `blur` 0–100, `rot` 90/180/270 —
  comes from the brief. The only other numbers a visitor will see are the ones **they set
  themselves in the caption** and the **pixel ratio their own browser reports**, and not one
  of those is a claim this design is making.
- **No count-up animation, no charts, no sparklines, no scroll parallax, no reveal-on-scroll.**
- No emoji anywhere, and **no naming of the source reference in the built page** — the
  reference is named in this document's Concept and nowhere else. The site carries the
  product's own name, **Refract**, in English, and nothing else.