From 5d071e23862d8f869d90be788e4d17d7c6a570e7 Mon Sep 17 00:00:00 2001 From: UnbreakableMJ Date: Sun, 26 Jul 2026 12:43:00 +0300 Subject: [PATCH] =?UTF-8?q?feat(standard):=20=C2=A711.3.5=20Tokyo=20Night,?= =?UTF-8?q?=20=C2=A711.5=20fidelity=20palettes,=20=C2=A711.4.1=20reference?= =?UTF-8?q?=20names=20=E2=80=94=20v1.39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registers three external palettes and adds the class the two of them that cannot conform belong in. §11.3.5 — Tokyo Night, verbatim from enkia/tokyo-night-vscode-theme: canvas Night #1A1B26, surface the documented Storm background #24283B, surface-alt the Night bg_dark #16161E (darker than the canvas, which §11.0.1 permits). No Spacecraft-derived substitutes were needed — every role token clears 4.5:1 on all three backgrounds — so it is registered as a conforming alternate. tokyonight-high-contrast lifts the two tokens under 7:1 on the canvas (accent #97B6F9, error #F998AA). The upstream comment tone #565F89 (2.76:1) is recorded as unbindable. §11.5 — Fidelity Palettes (registered, non-conforming). Solarized Dark and Solarized Light are reproduced exactly from ethanschoonover.com with no token substituted, deepened, or lifted, and they do not satisfy §11's contrast guarantee: Solarized Light's body text is 4.13:1, under the AA floor, and its success/warning/focus tokens fall below 3:1. The printed ratios are the measurement, not a target. §11.5 bars adopting a fidelity palette as a project palette, keeps steelbore-mono as the accessible path, and ships no high-contrast sibling for them. §11.4.1 — Reference Names. Every palette gains an additive reference name for prose (steelbore-color-palette, steelboreclassic-color-palette, blue-, blackpinkpanther-, matrixgreen-, navywhite-, tokyonight-, solarizeddark-, solarizedlight-color-palette). Slugs are unchanged and remain the machine identifier, so no consumer breaks. Every ratio in §11.3.5, §11.5, and the changelog was computed from the canonical steelbore.toml rather than transcribed, then re-verified against it. Verified: makeinfo --no-split → zero errors/warnings; reuse lint → compliant 8/8; .md companion regenerated. Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 1 + The_Steelbore_Standard.md | 161 ++++++++++++++++- The_Steelbore_Standard.texi | 339 +++++++++++++++++++++++++++++++++++- 3 files changed, 496 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1ecb3f..51c7c47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ Entries are newest-first. Dates are UTC, ISO 8601 (§14). Versioning policy: bum for upstream skill changes, registry updates (§2.1, §15.1), factual corrections to normative content, and brand/identity changes. +- **v1.39 (2026-07-26):** **Three external palettes registered, and a new class for the two that cannot conform.** **§11.3.5 added — Tokyo Night**, taken verbatim from the upstream editor theme (canvas Night `#1A1B26`, `surface` the documented Storm background `#24283B`, `surface-alt` the Night `bg_dark` `#16161E`, which sits darker than the canvas as §11.0.1 permits). It needed no Spacecraft-derived substitutes: every role token clears 4.5:1 on all three backgrounds — accent `#7AA2F7` 6.79:1, structure `#BB9AF7` 7.39:1, success `#9ECE6A` 9.35:1, error `#F7768E` 6.46:1, warning `#E0AF68` 8.55:1, focus `#7DCFFF` 9.96:1 — so it is registered as a conforming alternate, with `tokyonight-high-contrast` lifting the two tokens below 7:1 on the canvas (`accent` → `#97B6F9` 8.44:1, `error` → `#F998AA` 8.22:1). The upstream comment tone `#565F89` (2.76:1) is recorded as not bindable to any role token. **§11.5 added — Fidelity Palettes (registered, non-conforming):** a new class for palettes reproduced exactly from a widely used external theme so tooling can meet a user already working in it. **Solarized Dark (§11.5.1) and Solarized Light (§11.5.2)** are registered verbatim from Ethan Schoonover's Solarized — no token substituted, deepened, or lifted to make a number pass — and they **do not** satisfy §11's contrast guarantee. Solarized Dark: body text `base0` 4.75:1 on the canvas, twelve pairings below 4.5:1, and `structure`/`border` (2.97:1) and `error` (2.81:1) below 3:1 on `base02`. Solarized Light is worse: body text `base00` measures **4.13:1, under the AA floor**, and `success` (2.97:1), `warning` (2.98:1), and `focus` (2.93:1) fall below 3:1, so an interface built on it cannot signal status by color at all. §11.5 therefore bars adopting a fidelity palette as a project's §11.4 palette, keeps `steelbore-mono` as the accessible-mode path, and ships no `-high-contrast` sibling for them (lifting would change the values they exist to reproduce); † and ‡ mark the two failure bands throughout. Solarized defines one elevated tone per mode, so `surface-alt` shares `surface`. **§11.4.1 added — Reference Names:** every palette gains an additive reference name for prose (`steelbore-color-palette`, `steelboreclassic-color-palette`, `blue-color-palette`, `blackpinkpanther-color-palette`, `matrixgreen-color-palette`, `navywhite-color-palette`, `tokyonight-color-palette`, `solarizeddark-color-palette`, `solarizedlight-color-palette`). Slugs are unchanged and remain the machine identifier, so no consumer breaks. **§11.4** gains bullets for both additions. - **v1.38 (2026-07-26):** **§4.3 corrected — the symlink runs the other way.** v1.36 required the root `LICENSE` to be a symlink into `LICENSES/`, on the premise that GitHub follows symlinks for license detection. It does not: GitHub's detector reads **git blobs**, and a symlink's blob is the target *path*, not the license text. Measured after v1.36 landed, both `Standard` and `Construct` reported `NOASSERTION` — no identified license — where sibling repos with a regular `LICENSE` file report `GPL-3.0`. The rule is inverted: the root `LICENSE` is now a **regular file** holding the verbatim primary license text, and `LICENSES/.txt` for that license is a **symlink back to it** (`ln -s ../LICENSE LICENSES/GPL-3.0-or-later.txt`). `reuse` reads the working tree through the filesystem, so it follows the link and lints clean; GitHub gets a real blob. The single-source-of-truth goal of v1.36 is preserved — the text still exists exactly once — and two independently maintained copies remain non-compliant. Added: the root text MUST be a **canonical, unmodified** copy as published (FSF text for the GPL family, Creative Commons text for CC-BY-SA-4.0, or the choosealicense.com copy) — reflowed or Markdown-formatted texts defeat detection even when the wording is intact. Secondary licenses in `LICENSES/` (§4.2 upstream texts, a differently-licensed tooling class per §4.1.1) stay regular files; only the primary license is linked. §5.2 `LICENSE` row and the §16 checklist bullet updated to match. - **v1.37 (2026-07-26):** **Changelog extracted from the document.** The full version history moves out of §1 — Preamble into this file (`CHANGELOG.md`) at diff --git a/The_Steelbore_Standard.md b/The_Steelbore_Standard.md index fdba58c..8e6592b 100644 --- a/The_Steelbore_Standard.md +++ b/The_Steelbore_Standard.md @@ -29,7 +29,7 @@ repository](https://github.com/Spacecraft-Software/Standard), newest entry first. It is kept out of this document so the standard reads as the rules *in force* rather than the record of how they got there. -This document is **version 1.38**, updated 2026-07-26 (§14: UTC, ISO +This document is **version 1.39**, updated 2026-07-26 (§14: UTC, ISO 8601). The skill encoding of the standard keeps a parallel history in `spacecraft-standard-constitution/references/CHANGELOG.md` in the [Construct @@ -902,7 +902,7 @@ Red Oxide is 1.13:1 and Radium Green on Liquid Coolant is 1.01:1. ## §11.3 — Alternate Palettes -Four alternate palettes are registered. Each declares its own canvas, +Five alternate palettes are registered. Each declares its own canvas, its own surfaces, and a full set of §11.1 role tokens verified against all three of its backgrounds. **A project adopts exactly one palette** (§11.4); tokens are never mixed across palettes. @@ -1039,6 +1039,41 @@ backgrounds. (7.76:1). `foreground` and `structure` are already ≥7:1 and carry over verbatim. +### §11.3.5 — Tokyo Night + +Anchored on **Night** and **Tokyo Blue**, registered verbatim from the +upstream editor theme +([enkia/tokyo-night-vscode-theme](https://github.com/enkia/tokyo-night-vscode-theme)). +`surface` is that project’s documented *Storm* background and +`surface-alt` its *Night* `bg_dark` — like MatrixGreen’s Ambient Black, +the code well sits *darker* than the canvas, which §11.0.1 permits. No +Spacecraft-derived substitutes were needed: every role token clears +4.5:1 on all three backgrounds, so this palette is registered as a +conforming alternate rather than a §11.5 fidelity palette. + +| Role token | Color | Hex | vs canvas | +|---------------|----------------|-----------|-----------| +| `background` | Night | `#1A1B26` | (canvas) | +| `surface` | Storm | `#24283B` | 1.17:1 | +| `surface-alt` | Night Deep | `#16161E` | 1.05:1 | +| `foreground` | Starlight | `#C0CAF5` | 10.59:1 | +| `accent` | Tokyo Blue | `#7AA2F7` | 6.79:1 | +| `structure` | Neon Purple | `#BB9AF7` | 7.39:1 | +| `success` | Signal Green | `#9ECE6A` | 9.35:1 | +| `error` | Sakura Red | `#F7768E` | 6.46:1 | +| `warning` | Lantern Yellow | `#E0AF68` | 8.55:1 | +| `focus` | Ice Cyan | `#7DCFFF` | 9.96:1 | +| `border` | Neon Purple | `#BB9AF7` | 7.39:1 | + +The upstream comment tone **Comment Slate** `#565F89` (2.76:1 on Night) +is **not bindable to a role token** — it clears neither the 4.5:1 text +floor nor the 3:1 non-text floor. Boundaries are drawn in `structure` +per §11.0.1. + +`tokyonight-high-contrast` lifts the two tokens that sit below 7:1 on +the canvas: `accent` to `#97B6F9` (8.44:1) and `error` to `#F998AA` +(8.22:1). The other six carry over verbatim. + ## §11.4 — Palette Selection - **Modern is the default.** An artifact that declares nothing uses @@ -1067,6 +1102,128 @@ verbatim. declared palette. Where no project context exists (a standalone document, a one-off diagram), use Modern. +- **Fidelity palettes are not adoptable.** The §11.5 palettes are + registered for interoperability and are excluded from this section — a + project may not declare one as its palette. They also ship no + high-contrast sibling, so the bullet above does not apply to them. + +- **Palettes have reference names.** Every palette carries a reference + name (§11.4.1) alongside its slug. The slug stays the machine + identifier; the reference name is for prose and conversation. + +### §11.4.1 — Reference Names + +Each palette carries a **reference name** for prose, conversation, and +documentation. Reference names are *additive*: the slug remains the +machine identifier that themes, `steelbore.toml` keys, and application +theme lookups use, and it is unchanged by this section. Both forms +appear in the canonical file, the reference name as the `reference` key +of each `[palettes.]` table. + +| Slug (machine identifier) | Reference name | +|------------------------------|----------------------------------| +| `steelbore` | `steelbore-color-palette` | +| `steelbore-classic` | `steelboreclassic-color-palette` | +| `steelbore-blue` | `blue-color-palette` | +| `steelbore-blackpinkpanther` | `blackpinkpanther-color-palette` | +| `steelbore-matrixgreen` | `matrixgreen-color-palette` | +| `steelbore-navywhite` | `navywhite-color-palette` | +| `tokyonight` | `tokyonight-color-palette` | +| `solarized-dark` | `solarizeddark-color-palette` | +| `solarized-light` | `solarizedlight-color-palette` | + +———————————————————————— + +## §11.5 — Fidelity Palettes (registered, non-conforming) + +A **fidelity palette** reproduces a widely used external theme +**exactly**, so Spacecraft Software tooling can meet a user who already +works in it — an editor, a terminal, a diff viewer. Its values are +copied verbatim from upstream; no token is substituted, deepened, or +lifted to make a number pass. + +The consequence is stated plainly: **a fidelity palette is not required +to satisfy §11’s contrast guarantee, and the two registered here do +not.** The ratios printed below are **the measurement, not a target**. +They are recorded so the gap is visible rather than discovered later. + +**Rules for fidelity palettes.** + +- A project **MUST NOT** adopt a fidelity palette as its declared §11.4 + palette. §13’s WCAG 2.2 Level AA obligation and §18’s accessible-mode + requirements are unaffected by this section. + +- Where an application offers one as a *user-selectable* theme, a + conforming palette remains the default, and `steelbore-mono` (§11.1.1, + palette-independent) remains the accessible-mode path. + +- A fidelity palette ships **no** `-high-contrast` sibling. Lifting its + tokens to 7:1 would change the very values it exists to reproduce. + +- Fidelity palettes are recorded in `steelbore.toml` under + `meta.fidelity-palettes`, and each theme carries + `conformance = "non-conforming"` in its `rules` table. + +† marks a token whose worst pairing falls between 3:1 and 4.5:1 — large +text, icons, and non-text UI only. ‡ marks one below 3:1, which carries +no legible use at any size. + +### §11.5.1 — Solarized Dark + +Ethan Schoonover’s Solarized +([ethanschoonover.com/solarized](https://ethanschoonover.com/solarized/)), +dark mode: canvas `base03`, elevated tone `base02`, body text `base0`. +Solarized defines a single elevated tone per mode, so `surface-alt` +shares `surface`. + +| Role token | Color | Hex | vs canvas | +|---------------|--------|-----------|--------------| +| `background` | base03 | `#002B36` | (canvas) | +| `surface` | base02 | `#073642` | 1.15:1 | +| `surface-alt` | base02 | `#073642` | 1.15:1 | +| `foreground` | base0 | `#839496` | **4.75:1** † | +| `accent` | blue | `#268BD2` | **4.08:1** † | +| `structure` | violet | `#6C71C4` | **3.43:1** ‡ | +| `success` | green | `#859900` | **4.69:1** † | +| `error` | red | `#DC322F` | **3.25:1** ‡ | +| `warning` | yellow | `#B58900` | **4.68:1** † | +| `focus` | cyan | `#2AA198` | **4.75:1** † | +| `border` | violet | `#6C71C4` | **3.43:1** ‡ | + +Body text clears AA on the canvas (4.75:1) and falls to 4.11:1 on +`base02`. Restricted to large text, icons, and non-text UI: `foreground` +(4.11:1), `accent` (3.53:1), `success` (4.06:1), `warning` (4.05:1), +`focus` (4.12:1). Below 3:1 on `base02`: `structure` (2.97:1), `error` +(2.81:1), `border` (2.97:1). + +### §11.5.2 — Solarized Light + +The same accent set on Solarized’s light bases: canvas `base3`, elevated +tone `base2`, body text `base00`. + +| Role token | Color | Hex | vs canvas | +|---------------|--------|-----------|--------------| +| `background` | base3 | `#FDF6E3` | (canvas) | +| `surface` | base2 | `#EEE8D5` | 1.14:1 | +| `surface-alt` | base2 | `#EEE8D5` | 1.14:1 | +| `foreground` | base00 | `#657B83` | **4.13:1** † | +| `accent` | blue | `#268BD2` | **3.41:1** † | +| `structure` | violet | `#6C71C4` | **4.06:1** † | +| `success` | green | `#859900` | **2.97:1** ‡ | +| `error` | red | `#DC322F` | **4.29:1** † | +| `warning` | yellow | `#B58900` | **2.98:1** ‡ | +| `focus` | cyan | `#2AA198` | **2.93:1** ‡ | +| `border` | violet | `#6C71C4` | **4.06:1** † | + +**Solarized Light does not clear the AA floor for body text.** `base00` +on `base3` measures 4.13:1, below 4.5:1 — Solarized’s own emphasized +tone `base01` (4.99:1) would, but substituting it would no longer be +Solarized. Restricted (3:1–4.5:1): `foreground` (3.64:1), `accent` +(3.00:1), `structure` (3.57:1), `error` (3.77:1), `border` (3.57:1). +Below 3:1, and so carrying no legible use at any size: `success` +(2.62:1), `warning` (2.62:1), `focus` (2.58:1) — an interface built on +these values cannot signal success, warning, or focus by color at all. + ———————————————————————— # §12 — Typography (FOSS-Licensed Fonts Only) diff --git a/The_Steelbore_Standard.texi b/The_Steelbore_Standard.texi index 4c28081..23b4096 100644 --- a/The_Steelbore_Standard.texi +++ b/The_Steelbore_Standard.texi @@ -5,10 +5,10 @@ @setfilename The_Steelbore_Standard.info @documentencoding UTF-8 @documentlanguage en -@settitle The Steelbore Standard 1.38 +@settitle The Steelbore Standard 1.39 @c %**end of header -@set VERSION 1.38 +@set VERSION 1.39 @set UPDATED 2026-07-26 @set SUBDOMAIN https://Standard.SpacecraftSoftware.org/ @@ -1329,6 +1329,7 @@ forbidden (§11.4). * Steelbore Classic:: * Alternate Palettes:: * Palette Selection:: +* Fidelity Palettes:: @end menu @node Surface Class @@ -1677,7 +1678,7 @@ on Red Oxide is 1.13:1 and Radium Green on Liquid Coolant is 1.01:1. @node Alternate Palettes @section §11.3 — Alternate Palettes -Four alternate palettes are registered. Each declares its own canvas, +Five alternate palettes are registered. Each declares its own canvas, its own surfaces, and a full set of §11.1 role tokens verified against all three of its backgrounds. @strong{A project adopts exactly one palette} (§11.4); tokens are never mixed across palettes. @@ -2014,6 +2015,90 @@ lightens: @code{accent} and @code{focus} to @code{#1F4A73} (7.30:1), (7.76:1). @code{foreground} and @code{structure} are already ≥7:1 and carry over verbatim. +@subsection §11.3.5 — Tokyo Night + +Anchored on @strong{Night} and @strong{Tokyo Blue}, registered verbatim +from the upstream editor theme (@uref{https://github.com/enkia/tokyo-night-vscode-theme,enkia/tokyo-night-vscode-theme}). +@code{surface} is that project's documented @emph{Storm} background and +@code{surface-alt} its @emph{Night} @code{bg_dark} --- like MatrixGreen's +Ambient Black, the code well sits @emph{darker} than the canvas, which +§11.0.1 permits. No Spacecraft-derived substitutes were needed: every role +token clears 4.5:1 on all three backgrounds, so this palette is registered as a +conforming alternate rather than a §11.5 fidelity palette. + +@multitable {@code{surface-alt}} {Lantern Yellow} {@code{#000000}} {vs canvas} +@headitem +Role token + @tab Color + @tab Hex + @tab vs canvas +@item +@code{background} + @tab Night + @tab @code{#1A1B26} + @tab (canvas) +@item +@code{surface} + @tab Storm + @tab @code{#24283B} + @tab 1.17:1 +@item +@code{surface-alt} + @tab Night Deep + @tab @code{#16161E} + @tab 1.05:1 +@item +@code{foreground} + @tab Starlight + @tab @code{#C0CAF5} + @tab 10.59:1 +@item +@code{accent} + @tab Tokyo Blue + @tab @code{#7AA2F7} + @tab 6.79:1 +@item +@code{structure} + @tab Neon Purple + @tab @code{#BB9AF7} + @tab 7.39:1 +@item +@code{success} + @tab Signal Green + @tab @code{#9ECE6A} + @tab 9.35:1 +@item +@code{error} + @tab Sakura Red + @tab @code{#F7768E} + @tab 6.46:1 +@item +@code{warning} + @tab Lantern Yellow + @tab @code{#E0AF68} + @tab 8.55:1 +@item +@code{focus} + @tab Ice Cyan + @tab @code{#7DCFFF} + @tab 9.96:1 +@item +@code{border} + @tab Neon Purple + @tab @code{#BB9AF7} + @tab 7.39:1 +@end multitable + +The upstream comment tone @strong{Comment Slate} @code{#565F89} (2.76:1 on +Night) is @strong{not bindable to a role token} --- it clears neither the +4.5:1 text floor nor the 3:1 non-text floor. Boundaries are drawn in +@code{structure} per §11.0.1. + +@code{tokyonight-high-contrast} lifts the two tokens that sit below 7:1 on the +canvas: @code{accent} to @code{#97B6F9} (8.44:1) +and @code{error} to @code{#F998AA} (8.22:1). The +other six carry over verbatim. + @node Palette Selection @section §11.4 — Palette Selection @@ -2045,8 +2130,256 @@ governs and the file is corrected. Documents, editor themes, and terminal themes follow the project's declared palette. Where no project context exists (a standalone document, a one-off diagram), use Modern. +@item +@strong{Fidelity palettes are not adoptable.} The §11.5 palettes are +registered for interoperability and are excluded from this section --- a +project may not declare one as its palette. They also ship no +high-contrast sibling, so the bullet above does not apply to them. +@item +@strong{Palettes have reference names.} Every palette carries a +reference name (§11.4.1) alongside its slug. The slug stays the machine +identifier; the reference name is for prose and conversation. +@end itemize + +@subsection §11.4.1 — Reference Names + +Each palette carries a @strong{reference name} for prose, conversation, and +documentation. Reference names are @emph{additive}: the slug remains the +machine identifier that themes, @code{steelbore.toml} keys, and application +theme lookups use, and it is unchanged by this section. Both forms appear in +the canonical file, the reference name as the @code{reference} key of each +@code{[palettes.]} table. + +@multitable {@code{steelbore-blackpinkpanther}} {@code{blackpinkpanther-color-palette}} +@headitem +Slug (machine identifier) + @tab Reference name +@item +@code{steelbore} + @tab @code{steelbore-color-palette} +@item +@code{steelbore-classic} + @tab @code{steelboreclassic-color-palette} +@item +@code{steelbore-blue} + @tab @code{blue-color-palette} +@item +@code{steelbore-blackpinkpanther} + @tab @code{blackpinkpanther-color-palette} +@item +@code{steelbore-matrixgreen} + @tab @code{matrixgreen-color-palette} +@item +@code{steelbore-navywhite} + @tab @code{navywhite-color-palette} +@item +@code{tokyonight} + @tab @code{tokyonight-color-palette} +@item +@code{solarized-dark} + @tab @code{solarizeddark-color-palette} +@item +@code{solarized-light} + @tab @code{solarizedlight-color-palette} +@end multitable + + +@iftex +@bigskip@hrule@bigskip +@end iftex +@ifnottex +------------------------------------------------------------------------ +@end ifnottex + +@node Fidelity Palettes +@section §11.5 — Fidelity Palettes (registered, non-conforming) + +A @strong{fidelity palette} reproduces a widely used external theme +@strong{exactly}, so Spacecraft Software tooling can meet a user who already +works in it --- an editor, a terminal, a diff viewer. Its values are copied +verbatim from upstream; no token is substituted, deepened, or lifted to make a +number pass. + +The consequence is stated plainly: @strong{a fidelity palette is not required +to satisfy §11's contrast guarantee, and the two registered here do not.} The +ratios printed below are @strong{the measurement, not a target}. They are +recorded so the gap is visible rather than discovered later. + +@strong{Rules for fidelity palettes.} + +@itemize +@item +A project @strong{MUST NOT} adopt a fidelity palette as its declared §11.4 +palette. §13's WCAG 2.2 Level AA obligation and §18's accessible-mode +requirements are unaffected by this section. +@item +Where an application offers one as a @emph{user-selectable} theme, a +conforming palette remains the default, and @code{steelbore-mono} (§11.1.1, +palette-independent) remains the accessible-mode path. +@item +A fidelity palette ships @strong{no} @code{-high-contrast} sibling. Lifting +its tokens to 7:1 would change the very values it exists to reproduce. +@item +Fidelity palettes are recorded in @code{steelbore.toml} under +@code{meta.fidelity-palettes}, and each theme carries +@code{conformance = "non-conforming"} in its @code{rules} table. @end itemize +† marks a token whose worst pairing falls between 3:1 and 4.5:1 --- large text, +icons, and non-text UI only. ‡ marks one below 3:1, which carries no legible +use at any size. + +@subsection §11.5.1 — Solarized Dark + +Ethan Schoonover's Solarized (@uref{https://ethanschoonover.com/solarized/,ethanschoonover.com/solarized}), +dark mode: canvas @code{base03}, elevated tone @code{base02}, body text +@code{base0}. Solarized defines a single elevated tone per mode, so +@code{surface-alt} shares @code{surface}. + +@multitable {@code{surface-alt}} {base03} {@code{#000000}} {vs canvas} +@headitem +Role token + @tab Color + @tab Hex + @tab vs canvas +@item +@code{background} + @tab base03 + @tab @code{#002B36} + @tab (canvas) +@item +@code{surface} + @tab base02 + @tab @code{#073642} + @tab 1.15:1 +@item +@code{surface-alt} + @tab base02 + @tab @code{#073642} + @tab 1.15:1 +@item +@code{foreground} + @tab base0 + @tab @code{#839496} + @tab @strong{4.75:1} † +@item +@code{accent} + @tab blue + @tab @code{#268BD2} + @tab @strong{4.08:1} † +@item +@code{structure} + @tab violet + @tab @code{#6C71C4} + @tab @strong{3.43:1} ‡ +@item +@code{success} + @tab green + @tab @code{#859900} + @tab @strong{4.69:1} † +@item +@code{error} + @tab red + @tab @code{#DC322F} + @tab @strong{3.25:1} ‡ +@item +@code{warning} + @tab yellow + @tab @code{#B58900} + @tab @strong{4.68:1} † +@item +@code{focus} + @tab cyan + @tab @code{#2AA198} + @tab @strong{4.75:1} † +@item +@code{border} + @tab violet + @tab @code{#6C71C4} + @tab @strong{3.43:1} ‡ +@end multitable + +Body text clears AA on the canvas (4.75:1) and falls +to 4.11:1 on @code{base02}. Restricted to large +text, icons, and non-text UI: @code{foreground} (4.11:1), @code{accent} (3.53:1), @code{success} (4.06:1), @code{warning} (4.05:1), @code{focus} (4.12:1). Below 3:1 on +@code{base02}: @code{structure} (2.97:1), @code{error} (2.81:1), @code{border} (2.97:1). + +@subsection §11.5.2 — Solarized Light + +The same accent set on Solarized's light bases: canvas @code{base3}, elevated +tone @code{base2}, body text @code{base00}. + +@multitable {@code{surface-alt}} {base00} {@code{#000000}} {vs canvas} +@headitem +Role token + @tab Color + @tab Hex + @tab vs canvas +@item +@code{background} + @tab base3 + @tab @code{#FDF6E3} + @tab (canvas) +@item +@code{surface} + @tab base2 + @tab @code{#EEE8D5} + @tab 1.14:1 +@item +@code{surface-alt} + @tab base2 + @tab @code{#EEE8D5} + @tab 1.14:1 +@item +@code{foreground} + @tab base00 + @tab @code{#657B83} + @tab @strong{4.13:1} † +@item +@code{accent} + @tab blue + @tab @code{#268BD2} + @tab @strong{3.41:1} † +@item +@code{structure} + @tab violet + @tab @code{#6C71C4} + @tab @strong{4.06:1} † +@item +@code{success} + @tab green + @tab @code{#859900} + @tab @strong{2.97:1} ‡ +@item +@code{error} + @tab red + @tab @code{#DC322F} + @tab @strong{4.29:1} † +@item +@code{warning} + @tab yellow + @tab @code{#B58900} + @tab @strong{2.98:1} ‡ +@item +@code{focus} + @tab cyan + @tab @code{#2AA198} + @tab @strong{2.93:1} ‡ +@item +@code{border} + @tab violet + @tab @code{#6C71C4} + @tab @strong{4.06:1} † +@end multitable + +@strong{Solarized Light does not clear the AA floor for body text.} +@code{base00} on @code{base3} measures 4.13:1, below 4.5:1 --- +Solarized's own emphasized tone @code{base01} (4.99:1) +would, but substituting it would no longer be Solarized. Restricted (3:1–4.5:1): +@code{foreground} (3.64:1), @code{accent} (3.00:1), @code{structure} (3.57:1), @code{error} (3.77:1), @code{border} (3.57:1). Below 3:1, and so carrying no legible use at any size: +@code{success} (2.62:1), @code{warning} (2.62:1), @code{focus} (2.58:1) --- an interface built on these values cannot signal success, +warning, or focus by color at all. + @iftex @bigskip@hrule@bigskip @end iftex