remarque-tokens 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT_RULES.md +218 -0
- package/CHANGELOG.md +55 -0
- package/LICENSE +21 -0
- package/README.md +97 -0
- package/REMARQUE.md +356 -0
- package/fonts/inter-italic-latin.woff2 +0 -0
- package/fonts/inter-latin.woff2 +0 -0
- package/fonts/jetbrains-mono-latin.woff2 +0 -0
- package/fonts/newsreader-italic-latin.woff2 +0 -0
- package/fonts/newsreader-latin.woff2 +0 -0
- package/fonts.css +59 -0
- package/package.json +55 -0
- package/scripts/audit.mjs +236 -0
- package/tailwind.config.js +144 -0
- package/tokens-core.css +330 -0
- package/tokens-palette.css +128 -0
- package/tokens.css +24 -0
package/AGENT_RULES.md
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Remarque — Agent Rules
|
|
2
|
+
|
|
3
|
+
**This document is the implementation contract for any agent (AI or human) building with the Remarque design system.**
|
|
4
|
+
|
|
5
|
+
Read `REMARQUE.md` first for the full system specification. This file tells you *how to build*, not *what the system is*.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Build Order
|
|
10
|
+
|
|
11
|
+
Execute in this exact order. Do not skip steps. Do not reorder.
|
|
12
|
+
|
|
13
|
+
1. **Load tokens.** Import `tokens.css` and configure `tailwind.config.js` with Remarque's font families and extended theme values. Verify fonts load correctly.
|
|
14
|
+
|
|
15
|
+
2. **Set up global typography.** Apply display, title, section, body, meta, and prose classes. Verify the type scale renders correctly at mobile and desktop widths.
|
|
16
|
+
|
|
17
|
+
3. **Build the layout shell.** Header, content container (with constrained max-widths), and footer. The shell must enforce reading widths — content should never run full-width on large screens.
|
|
18
|
+
|
|
19
|
+
4. **Implement prose styling.** Article body text, headings within prose, blockquotes, lists, inline code, links. This is the core of Remarque — get it right before touching anything else.
|
|
20
|
+
|
|
21
|
+
5. **Implement metadata components.** Mono-styled date, reading time, tags, and status labels.
|
|
22
|
+
|
|
23
|
+
6. **Build navigation and footer.** Quiet, minimal. Navigation is functional, not decorative.
|
|
24
|
+
|
|
25
|
+
7. **Only then** build supplementary UI: buttons, tags, cards (if justified), code blocks, tables.
|
|
26
|
+
|
|
27
|
+
8. **Validate readability on mobile** before adding any visual polish.
|
|
28
|
+
|
|
29
|
+
9. **Verify every page conforms** to one of the four archetypes (Essay, Project Dossier, Notebook, Landing).
|
|
30
|
+
|
|
31
|
+
**Why this order matters:** Most agents build polished components first and bolt on typography later. That produces the exact aesthetic Remarque exists to prevent. Typography and prose are the foundation. Everything else is furniture.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Non-Negotiable Rules
|
|
36
|
+
|
|
37
|
+
These are not guidelines. Agents must follow them literally.
|
|
38
|
+
|
|
39
|
+
### Token Tiers
|
|
40
|
+
|
|
41
|
+
- NEVER change a value in `tokens-core.css` (or its tokens' values anywhere) — core tokens are Remarque's identity; changing them means the project has forked the system
|
|
42
|
+
- Site personalization happens ONLY by overriding `tokens-palette.css` tokens (font slots from the approved pairings, colors, accent, `--content-reading` per the measure table) in a stylesheet loaded after the tokens
|
|
43
|
+
- After ANY palette change, run the audit and fix every failure before shipping — `npm run audit` inside this repo; `npx remarque-audit --palette <file> --src <dir>` in a consumer project (the npm script only exists here)
|
|
44
|
+
|
|
45
|
+
### Typography
|
|
46
|
+
|
|
47
|
+
- Body text is never smaller than `--text-body` (17px / 1.0625rem)
|
|
48
|
+
- Prose columns never exceed `--content-reading` (46rem)
|
|
49
|
+
- Display/title text always uses `--font-display` (Newsreader)
|
|
50
|
+
- Body text always uses `--font-body` (Inter)
|
|
51
|
+
- Mono text is *only* for: metadata, code, labels, timestamps, technical accents
|
|
52
|
+
- Line height for body text is `--leading-body` (1.75) — never less
|
|
53
|
+
|
|
54
|
+
### Layout
|
|
55
|
+
|
|
56
|
+
- No page shows more than 3 content sections above the fold
|
|
57
|
+
- The first screen contains only: title, metadata, and the start of content
|
|
58
|
+
- Top padding before the main heading is at least `--space-9` (6rem)
|
|
59
|
+
- The site uses a **single centered column** layout: BaseLayout constrains all content to `content-standard` (72rem) centered. Individual pages do NOT set their own outer width constraints.
|
|
60
|
+
- Within the centered column, use `.content-reading` for prose-width sections (46rem, auto-centered within the 72rem column)
|
|
61
|
+
- Do NOT use Tailwind's `max-w-reading` or `max-w-standard` on page sections — these only set max-width without centering. Use the CSS classes `.content-reading` / `.content-standard` instead, which include `margin-inline: auto`
|
|
62
|
+
- Code blocks (`<pre>`) inherit the width of their parent container — no special wrapping needed when the parent is already constrained
|
|
63
|
+
|
|
64
|
+
### Color
|
|
65
|
+
|
|
66
|
+
- Accent color is used for exactly two things: inline links and one interactive element per viewport
|
|
67
|
+
- Dark mode is not an inverted light mode — it must be independently tuned for readability
|
|
68
|
+
- Background colors use `--color-bg`, never pure white (#fff) or pure black (#000)
|
|
69
|
+
|
|
70
|
+
### Components
|
|
71
|
+
|
|
72
|
+
- No component should be visually louder than the content it contains
|
|
73
|
+
- Borders use `--color-border` at 1px — never thicker, never drop shadows as replacements
|
|
74
|
+
- `--color-border` is decorative-only (below the 3:1 non-text minimum by design). Boundaries of interactive elements (inputs, dialogs, active states) use `--color-border-bold`, which meets WCAG 1.4.11
|
|
75
|
+
- Border radius never exceeds `--radius-md` (0.5rem / 8px)
|
|
76
|
+
- Buttons are quiet: text-only or subtle bordered. Never filled/solid as default.
|
|
77
|
+
|
|
78
|
+
### Motion
|
|
79
|
+
|
|
80
|
+
- Motion is permitted *only* on: hover states, focus rings, theme transitions
|
|
81
|
+
- Duration is `--motion-fast` (120ms) for micro-interactions, `--motion-normal` (180ms) for transitions
|
|
82
|
+
- No scroll-triggered, entrance, staggered, or parallax animations. Ever.
|
|
83
|
+
- All motion must respect `prefers-reduced-motion` — always use the duration tokens (tokens.css zeroes them under reduced motion); never hardcode durations
|
|
84
|
+
|
|
85
|
+
### Images
|
|
86
|
+
|
|
87
|
+
- Images stay within `--content-reading` width (diagrams may use `--content-standard`)
|
|
88
|
+
- Images get a 1px `--color-border` border, never shadows
|
|
89
|
+
- Captions use `--font-mono` at `--text-meta` size
|
|
90
|
+
- No decorative images. Every image serves the content.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Decision Protocol
|
|
95
|
+
|
|
96
|
+
When you face a design choice not explicitly covered above, apply these filters in order:
|
|
97
|
+
|
|
98
|
+
1. **Is it more readable?** → Choose that.
|
|
99
|
+
2. **Is it more typographically disciplined?** → Choose that.
|
|
100
|
+
3. **Is it quieter?** → Choose that.
|
|
101
|
+
4. **Is it more tokenized/reusable?** → Choose that.
|
|
102
|
+
5. **Does it have less visual noise?** → Choose that.
|
|
103
|
+
|
|
104
|
+
If you are still unsure, choose the option that looks more like a well-typeset book and less like a web application.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Disallowed Patterns
|
|
109
|
+
|
|
110
|
+
Do not introduce any of the following unless the project owner explicitly requests them:
|
|
111
|
+
|
|
112
|
+
- Material Design visual language (elevation, ripple, FAB)
|
|
113
|
+
- Large decorative gradients
|
|
114
|
+
- Glassmorphism / frosted glass
|
|
115
|
+
- Card grids as primary layout
|
|
116
|
+
- Over-rounded corners (border-radius > 0.5rem)
|
|
117
|
+
- "Friendly SaaS" visual language
|
|
118
|
+
- Flashy or attention-seeking motion
|
|
119
|
+
- Dense admin/dashboard layouts
|
|
120
|
+
- Full-width prose on screens wider than 768px
|
|
121
|
+
- Hero images or banners
|
|
122
|
+
- Multiple CTAs on a single page
|
|
123
|
+
- Feature comparison grids
|
|
124
|
+
- Newsletter popups or modals
|
|
125
|
+
- Hamburger menus on desktop
|
|
126
|
+
- Sticky headers that consume vertical space
|
|
127
|
+
- Social share buttons in content areas
|
|
128
|
+
- Pill-shaped tag badges (use plain mono text)
|
|
129
|
+
- Skeleton loading screens (use a simple spinner or nothing)
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## File Structure Convention
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
project/
|
|
137
|
+
├── fonts.css # Self-hosted @font-face declarations (import before tokens)
|
|
138
|
+
├── tokens.css # Aggregator — imports the two tiers below
|
|
139
|
+
├── tokens-core.css # CORE tier: type scale, spacing, widths, radius, motion, prose machinery. NEVER override
|
|
140
|
+
├── tokens-palette.css # PALETTE tier: font slots, colors, accent, reading measure. Override freely, then run the audit
|
|
141
|
+
├── tailwind.config.js # Tailwind v3 ONLY — v4 projects skip this and use an @theme block (see site/src/styles/globals.css)
|
|
142
|
+
├── public/
|
|
143
|
+
│ └── fonts/ # Self-hosted woff2 fonts (Inter, Newsreader, JetBrains Mono)
|
|
144
|
+
├── styles/
|
|
145
|
+
│ ├── globals.css # @import "tailwindcss"; @import "./tokens.css"; @font-face declarations
|
|
146
|
+
│ ├── prose.css # Article/essay body text styling (or use .remarque-prose from tokens.css)
|
|
147
|
+
│ └── components.css # Component-specific styles (minimal)
|
|
148
|
+
├── components/
|
|
149
|
+
│ ├── Layout.{jsx,astro} # Layout shell (header + content + footer + skip-link + theme toggle)
|
|
150
|
+
│ ├── Nav.{jsx,astro} # Navigation (content pages + design system docs)
|
|
151
|
+
│ ├── Footer.{jsx,astro} # Footer
|
|
152
|
+
│ ├── Meta.{jsx,astro} # Metadata row component
|
|
153
|
+
│ └── Prose.{jsx,astro} # Prose wrapper (<div class="remarque-prose content-reading">)
|
|
154
|
+
└── pages/
|
|
155
|
+
├── index # Landing archetype
|
|
156
|
+
├── writing/[slug] # Essay archetype
|
|
157
|
+
├── projects/[slug] # Project Dossier archetype
|
|
158
|
+
└── notes # Notebook archetype
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Implementation Pitfalls (learned from reference implementation)
|
|
162
|
+
|
|
163
|
+
1. **Tailwind spacing collision:** Never map Remarque's `--space-N` values onto Tailwind's default numeric spacing keys — in v4 `@theme` that means no `--spacing-9`…`--spacing-12`, and in the v3 config no `spacing: { "5"…"12" }` overrides — or `mt-12` produces 192px instead of 48px. Both shipped artifacts namespace instead: the v3 config exposes `mt-remarque-9` etc., the reference v4 `@theme` uses `--spacing-remarque-N`. Use those, or `var(--space-N)` in arbitrary values.
|
|
164
|
+
|
|
165
|
+
2. **Prose alignment:** The essay header and prose body must BOTH use centered max-width (`max-w-reading mx-auto`) to prevent misalignment. The `.content-reading` class auto-centers; match headers with `mx-auto`.
|
|
166
|
+
|
|
167
|
+
3. **Dark mode specificity:** Define `[data-theme="light"]` and `[data-theme="dark"]` overrides in addition to the `:root` defaults. Without an explicit light override, users with `prefers-color-scheme: dark` cannot toggle to light mode.
|
|
168
|
+
|
|
169
|
+
4. **Self-hosted fonts:** Replace the Google Fonts CDN link with self-hosted woff2 files + `@font-face` declarations. Use `font-display: swap` and `<link rel="preload">` for performance.
|
|
170
|
+
|
|
171
|
+
5. **GitHub Pages base path:** When deploying to a subpath (e.g., `/remarque/`), all internal links must use a base URL helper (Astro: `import.meta.env.BASE_URL`). Set `base` in your framework config.
|
|
172
|
+
|
|
173
|
+
6. **String-form @import only:** Always write `@import './tokens.css';` (string form). Tailwind v4 / Lightning CSS silently DROPS `@import url(...)` for local files — the build succeeds while the entire token cascade vanishes from the output. Verify the built CSS contains `.remarque-prose` after changing imports.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Quality Checklist
|
|
178
|
+
|
|
179
|
+
Before considering any implementation complete, verify:
|
|
180
|
+
|
|
181
|
+
- [ ] Fonts load: Newsreader for display, Inter for body, JetBrains Mono for meta
|
|
182
|
+
- [ ] Fonts are self-hosted (no Google CDN requests in network tab)
|
|
183
|
+
- [ ] Body text is ≥17px on all viewports
|
|
184
|
+
- [ ] Prose column is ≤46rem on desktop
|
|
185
|
+
- [ ] Prose header and body are aligned (both centered with `mx-auto` or both left-aligned)
|
|
186
|
+
- [ ] Line height for body text is 1.75
|
|
187
|
+
- [ ] Dark mode is readable and independently tuned (not just inverted)
|
|
188
|
+
- [ ] Theme toggle works in both directions (light→dark AND dark→light)
|
|
189
|
+
- [ ] No page has more than 3 content sections above the fold
|
|
190
|
+
- [ ] Top padding before main heading is ≥6rem
|
|
191
|
+
- [ ] Accent color appears in ≤2 roles per viewport
|
|
192
|
+
- [ ] No scroll-triggered or entrance animations exist
|
|
193
|
+
- [ ] Every image has a 1px border and mono caption
|
|
194
|
+
- [ ] Every page maps to an archetype (Essay, Dossier, Notebook, Landing)
|
|
195
|
+
- [ ] Mobile version is roomy — not a compressed desktop layout
|
|
196
|
+
- [ ] Mobile nav links have ≥44px touch targets
|
|
197
|
+
- [ ] No pure white or pure black backgrounds
|
|
198
|
+
- [ ] `npm run audit` passes (contrast, gamut, font floors, hardcoded colors)
|
|
199
|
+
- [ ] Muted text placed on `--color-surface` still meets 4.5:1 (check the surface pairing, not just bg)
|
|
200
|
+
- [ ] All transitions use the motion duration tokens (reduced-motion support depends on it)
|
|
201
|
+
- [ ] Skip-to-content link present and functional
|
|
202
|
+
- [ ] OG meta tags present (og:title, og:description, og:image)
|
|
203
|
+
- [ ] `<html lang="en">` attribute set
|
|
204
|
+
- [ ] The site looks more like a book than a web app
|
|
205
|
+
- [ ] Tailwind spacing utilities (`mt-12`, `pt-8`) produce expected values (not overridden by `@theme`)
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## How to Reference This System
|
|
210
|
+
|
|
211
|
+
In prompts, issues, or agent instructions, use:
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
Build this page using the Remarque design system.
|
|
215
|
+
See: REMARQUE.md for specification, AGENT_RULES.md for implementation contract, tokens.css for design tokens.
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Agents should load all three files before beginning work.
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `remarque-tokens` are documented here. Token value
|
|
4
|
+
changes always state the design rationale — downstream sites pin against
|
|
5
|
+
these entries when syncing.
|
|
6
|
+
|
|
7
|
+
## 0.2.0 — 2026-07-20
|
|
8
|
+
|
|
9
|
+
First published release. Everything below is relative to the unpublished
|
|
10
|
+
`0.1.0` files that early adopters copied by hand.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Two-tier token architecture** (#47): `tokens-core.css` (immutable
|
|
14
|
+
identity — type scale, spacing, widths, radius, motion, prose
|
|
15
|
+
machinery) and `tokens-palette.css` (sanctioned personalization —
|
|
16
|
+
font slots, colors, accent, `--content-reading` measure). `tokens.css`
|
|
17
|
+
remains a backwards-compatible aggregator. Subpath exports:
|
|
18
|
+
`remarque-tokens/core`, `remarque-tokens/palette`.
|
|
19
|
+
- **`remarque-audit`** CLI (#28): enforces the spec's checklist —
|
|
20
|
+
WCAG 2.x contrast (OKLCH → sRGB → relative luminance), sRGB gamut,
|
|
21
|
+
13px font floor, no hardcoded colors. `npx remarque-audit --palette
|
|
22
|
+
<file> --src <dir>`.
|
|
23
|
+
- **`fonts.css` + `fonts/`** (#40): self-hosted latin woff2 subsets for
|
|
24
|
+
all three slots, including true Inter italic. The Google Fonts CDN
|
|
25
|
+
`@import` is gone.
|
|
26
|
+
- `prefers-reduced-motion` support (#45): the motion duration tokens
|
|
27
|
+
zero out under reduced motion.
|
|
28
|
+
- Spec sections: Token Tiers, Font Slots with approved pairings,
|
|
29
|
+
Measure Compensation table, accent-hue derivation recipe.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
- **Contrast fixes** (#42), all computed and audit-enforced:
|
|
33
|
+
- light `--color-fg-muted` 0.45 → **0.43** L (7.55:1, meets the spec's own AAA line)
|
|
34
|
+
- light `--color-muted` 0.55 → **0.54** L; dark 0.58 → **0.60** L (≥4.5:1 on bg *and* surface)
|
|
35
|
+
- `--color-border-bold` light 0.78 → **0.62** L, dark 0.35 → **0.50** L (≥3:1, WCAG 1.4.11)
|
|
36
|
+
- `--color-border` documented **decorative-only** (below 3:1 by design;
|
|
37
|
+
functional boundaries use `border-bold`)
|
|
38
|
+
- **Gamut fixes:** light `--color-accent-hover` chroma 0.14 → **0.11**,
|
|
39
|
+
`--color-accent-subtle` 0.03 → **0.02** — previous values were outside
|
|
40
|
+
sRGB and browser-clipped.
|
|
41
|
+
- `tailwind.config.js` (#41): spacing namespaced as `remarque-N`
|
|
42
|
+
(Tailwind's default numeric scale no longer overridden — `mt-12` is
|
|
43
|
+
3rem again), `darkMode` keyed to `[data-theme="dark"]`, dead
|
|
44
|
+
typography-plugin block removed. Tailwind v3 only; v4 projects write
|
|
45
|
+
an `@theme` block.
|
|
46
|
+
|
|
47
|
+
### Removed
|
|
48
|
+
- `--weight-light`, `--space-px`, `--space-0` (defined but never
|
|
49
|
+
consumed anywhere).
|
|
50
|
+
|
|
51
|
+
### Known limitations
|
|
52
|
+
- Import the token files with **string-form** `@import './tokens.css'`
|
|
53
|
+
only — Tailwind v4 / Lightning CSS silently drops `@import url(...)`
|
|
54
|
+
for local files (AGENT_RULES.md Pitfall #6).
|
|
55
|
+
- No Tailwind v4 `@theme` file is shipped yet (#48).
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 William Zujkowski
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Remarque
|
|
2
|
+
|
|
3
|
+
**A typography-first design system for editorial, technical, and personal web projects.**
|
|
4
|
+
|
|
5
|
+
[Live Demo](https://williamzujkowski.github.io/remarque/) | [Type Specimen](https://williamzujkowski.github.io/remarque/specimen/) | [Design Tokens](https://williamzujkowski.github.io/remarque/tokens/) | [Get Started](https://williamzujkowski.github.io/remarque/start/)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Why Remarque?
|
|
10
|
+
|
|
11
|
+
Most developer sites inherit the visual language of SaaS dashboards or component-library defaults. Remarque is the antidote: a system rooted in book typography, editorial design, and the quiet confidence of a well-made publication.
|
|
12
|
+
|
|
13
|
+
**What makes it different:**
|
|
14
|
+
|
|
15
|
+
- **Typography is the interface** — not color, not illustration, not animation. Three fonts (Newsreader, Inter, JetBrains Mono), each with a strict role.
|
|
16
|
+
- **17px minimum body text** — one pixel above the industry default. The difference in reading comfort is immediate.
|
|
17
|
+
- **46rem reading column** — derived from the typographic standard of 45-75 characters per line.
|
|
18
|
+
- **OKLCH color space** — perceptually uniform. A lightness of 0.50 actually looks mid-brightness.
|
|
19
|
+
- **Self-hosted fonts** — no Google CDN dependency. Strict CSP. GDPR-compliant.
|
|
20
|
+
- **AI-native** — designed to be consumed by Claude Code, Cursor, Copilot, and other AI coding tools with zero aesthetic drift.
|
|
21
|
+
|
|
22
|
+
## Install
|
|
23
|
+
|
|
24
|
+
Copy `fonts.css`, `tokens.css`, `tokens-core.css`, `tokens-palette.css`, and the `fonts/` directory into your project (`tokens.css` is an aggregator that imports the two tier files), then:
|
|
25
|
+
|
|
26
|
+
```css
|
|
27
|
+
@import 'fonts.css';
|
|
28
|
+
@import 'tokens.css';
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Tailwind v3 projects can additionally copy `tailwind.config.js`. Tailwind v4 projects skip the config and write an `@theme` block from the token values (see `site/src/styles/globals.css` for the reference).
|
|
32
|
+
|
|
33
|
+
> **npm:** `remarque-tokens` is not yet published to the registry — the publish pipeline (provenance, semver, changelog) is tracked in [#46](https://github.com/williamzujkowski/remarque/issues/46) and [#48](https://github.com/williamzujkowski/remarque/issues/48). Until then, the copy path above (or `npm install github:williamzujkowski/remarque`) is the supported install.
|
|
34
|
+
|
|
35
|
+
## For AI Agents
|
|
36
|
+
|
|
37
|
+
Remarque includes a machine-readable implementation contract. When prompting any AI coding tool:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Build this page using the Remarque design system.
|
|
41
|
+
See: REMARQUE.md for specification, AGENT_RULES.md for implementation contract, tokens.css for design tokens.
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The agent rules define build order, non-negotiable rules, disallowed patterns, and a quality checklist. Every decision is specified — agents don't need to guess.
|
|
45
|
+
|
|
46
|
+
## Files
|
|
47
|
+
|
|
48
|
+
| File | Purpose |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| `REMARQUE.md` | Full system specification — philosophy, visual rules, page archetypes, acceptance criteria |
|
|
51
|
+
| `AGENT_RULES.md` | Implementation contract — build order, non-negotiables, pitfalls, quality checklist |
|
|
52
|
+
| `tokens.css` | Aggregator importing the two token tiers below |
|
|
53
|
+
| `tokens-core.css` | Core tier — type scale, spacing, widths, radius, motion, prose styling. Never overridden |
|
|
54
|
+
| `tokens-palette.css` | Palette tier — font slots, colors, accent, reading measure. The sanctioned personalization surface |
|
|
55
|
+
| `scripts/audit.mjs` | `npm run audit` — enforces the spec's contrast/gamut/font-floor/no-hardcoded-color checklist |
|
|
56
|
+
| `fonts.css` + `fonts/` | Self-hosted @font-face declarations and woff2 files (no CDN requests) |
|
|
57
|
+
| `tailwind.config.js` | Tailwind CSS **v3** configuration (v4 projects use an `@theme` block instead) |
|
|
58
|
+
| `package.json` | npm package manifest for `remarque-tokens` |
|
|
59
|
+
|
|
60
|
+
## Three-Font System
|
|
61
|
+
|
|
62
|
+
| Role | Font | Usage |
|
|
63
|
+
|------|------|-------|
|
|
64
|
+
| **Display** | Newsreader | Page titles, hero headings, article titles. Never for body copy. |
|
|
65
|
+
| **Body** | Inter | Body text, UI labels, navigation, buttons. The workhorse. |
|
|
66
|
+
| **Mono** | JetBrains Mono | Metadata, code, timestamps, labels. Never for headings. |
|
|
67
|
+
|
|
68
|
+
## Page Archetypes
|
|
69
|
+
|
|
70
|
+
Every page conforms to one of four archetypes:
|
|
71
|
+
|
|
72
|
+
- **Essay** — long-form writing with serif title, mono metadata, narrow reading column
|
|
73
|
+
- **Project Dossier** — structured project page with metadata block and architecture section
|
|
74
|
+
- **Notebook** — short-form notes with mono timestamps, no cards
|
|
75
|
+
- **Landing** — identity statement, content navigation, generous whitespace
|
|
76
|
+
|
|
77
|
+
See the [live demo](https://williamzujkowski.github.io/remarque/) for all four archetypes in action.
|
|
78
|
+
|
|
79
|
+
## Design Decisions
|
|
80
|
+
|
|
81
|
+
| Decision | Value | Why |
|
|
82
|
+
|----------|-------|-----|
|
|
83
|
+
| Body size | 17px | Measurably improves reading comfort over 16px default |
|
|
84
|
+
| Line height | 1.75 | Generous — this is what makes prose readable |
|
|
85
|
+
| Reading width | 46rem | ~70 chars/line at 17px Inter. Upper end of comfortable range for technical content |
|
|
86
|
+
| Color space | OKLCH | Perceptual uniformity. Consistent across hues without manual tuning |
|
|
87
|
+
| Top padding | 6rem min | The breathing room that says "this is editorial, not a dashboard" |
|
|
88
|
+
| Border radius | 0.5rem max | Restrained. No "friendly SaaS" over-rounding |
|
|
89
|
+
| Motion | 120ms/180ms | Hover and theme transitions only. No scroll-triggered, entrance, or staggered animations |
|
|
90
|
+
|
|
91
|
+
## Named For
|
|
92
|
+
|
|
93
|
+
In fine art printmaking, a *remarque* is a small original drawing made by the artist in the margin of a proof print. Found only in limited editions, it is the mark that says: this was made by someone specific, with intention.
|
|
94
|
+
|
|
95
|
+
## License
|
|
96
|
+
|
|
97
|
+
MIT
|