Drop the source-project origin story; state design rules as this system's own
Removed the whole 'synthesized from three real personal projects' narrative
device rather than just anonymizing it — the 'Synthesized, not specified'
section and its three-card grid on rationale.md, the 'Where it came from'
section and 'Source projects' stat on index.md, and every 'the source
says/claims/documents/computes' framing throughout the foundation pages,
install.md, and two components. The substance (why the palette is warm
neutral, why there's one accent, why hairline borders do the elevation
work) is unchanged — it's just stated as this system's own design, not
inherited from unnamed elsewhere.

Also caught two type="button" occurrences in index.md's own example that
an earlier pass missed (it only swept _components/_patterns/_includes,
not top-level content files).
change
commit 7f3127543ec57af414dabe16d377c1250f777216
author Claude <noreply@anthropic.com>
date
parent 02b7d407
diff --git a/README.md b/README.md
index be46576..e68badc 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,8 @@
 # Arbitrary Definitions
 
-A personal design system for self-hosted, single-user tools — synthesized by
-reading three real, running personal projects, not written from a spec.
-Sixteen components and five foundations, documented by a small Ruby/ERB site
-(no Jekyll) with hand-maintained CSS and hand-written content.
+A personal design system for self-hosted, single-user tools. Sixteen
+components and five foundations, documented by a small Ruby/ERB site (no
+Jekyll) with hand-maintained CSS and hand-written content.
 
 **Site:** https://kejadlen.github.io/arbitrary-definitions-design-system/
 
@@ -17,10 +16,8 @@ because it is correct. What makes it a *system* is not that the choices are
 correct but that they are written down once, given names, actually used, and
 therefore changeable.
 
-It was synthesized, not specified — built by reading three real personal
-projects and finding what they actually share. See
-[Rationale](https://kejadlen.github.io/arbitrary-definitions-design-system/rationale/)
-for the full story.
+See [Rationale](https://kejadlen.github.io/arbitrary-definitions-design-system/rationale/)
+for the four rules this system's build actually enforces.
 
 This is a small, personal project, so it is built as plainly as it can be:
 
diff --git a/_components/badge.md b/_components/badge.md
index a06dadd..2502779 100644
--- a/_components/badge.md
+++ b/_components/badge.md
@@ -55,8 +55,8 @@ modifier class.
 - **A badge is never interactive.** No click handlers, no `<button>`, no cursor
   change. If it does something, it is a button that happens to be small.
 - **Two or three words at most.** A badge that wraps is a sentence in the wrong clothes.
-- **`danger` means something needs attention, not that something failed.** The
-  source uses it for overdue, not for a system error — that is what prose is for.
+- **`danger` means something needs attention, not that something failed.**
+  Use it for overdue, not for a system error — that is what prose is for.
 
 ## API
 
diff --git a/_foundations/color.md b/_foundations/color.md
index 8a07509..5c6e35b 100644
--- a/_foundations/color.md
+++ b/_foundations/color.md
@@ -20,23 +20,20 @@ at different values — which is exactly what the dark block does.
 
 <div class="ad-callout">
   <p style="margin:0; font-size: var(--ad-step--1);">
-    The neutral ramps were authored in <code>oklch()</code> by the three
-    projects this system was synthesized from (see
-    <a href="<%= relative_url('/rationale/') %>">Rationale</a>). Every
-    value below is that same color converted to flat sRGB hex — not
-    re-picked, not rounded. The contrast figures on this page are computed
-    from those hex values with the standard WCAG 2.1 relative-luminance
+    The neutral ramps were authored in <code>oklch()</code>. Every value
+    below is that same color converted to flat sRGB hex — not re-picked,
+    not rounded. The contrast figures on this page are computed from those
+    hex values with the standard WCAG 2.1 relative-luminance
     formula, then transcribed here as fact rather than typed by eye.
   </p>
 </div>
 
 ## Neutral
 
-Low-chroma warm-gray — the intersection of several source apps' plain grays,
-warm cream/dark palettes, and warm paper surfaces. Ten steps, not twelve or
-sixteen: the source defines exactly these.
+Low-chroma warm-gray, never stark white or black. Ten steps, not twelve or
+sixteen — the palette defines exactly these.
 
-<p class="ad-muted">Low-chroma warm-gray — the intersection of several source apps' plain grays, warm cream/dark palettes, and warm paper surfaces. Not stark white or black, and not any one project's specific warmth. Ten steps, not twelve: the source defines exactly 0/50/100/150/200/300/500/600/800/900 — steps 400 and 700 do not exist.</p>
+<p class="ad-muted">Low-chroma warm-gray. Not stark white or black. Ten steps, not twelve: exactly 0/50/100/150/200/300/500/600/800/900 — steps 400 and 700 do not exist.</p>
 <ul class="ad-swatch-grid">
   <li class="ad-swatch">
     <div class="ad-swatch__chip" style="background: #faf9f7; color: #171512;">n-0</div>
@@ -110,7 +107,7 @@ sixteen: the source defines exactly these.
   </li>
 </ul>
 
-<p class="ad-muted">The same low-chroma warm-gray scale, inverted, matching one source app's OS-preference dark palette. Same ten step numbers as `neutral`; `0` is the darkest step here (the dark-theme page background) rather than the lightest.</p>
+<p class="ad-muted">The same low-chroma warm-gray scale, inverted for dark mode. Same ten step numbers as `neutral`; `0` is the darkest step here (the dark-theme page background) rather than the lightest.</p>
 <ul class="ad-swatch-grid">
   <li class="ad-swatch">
     <div class="ad-swatch__chip" style="background: #0e0d0b; color: #ffffff;">nd-0</div>
@@ -198,7 +195,7 @@ the default; the other four are the sanctioned menu a project can switch to.
   <li>
     <div class="ad-accent-demo" style="background: #9a5a3c;">clay</div>
     <div class="ad-specimen__meta"><code>#9a5a3c</code><span>5.38:1 on white</span></div>
-    <p class="ad-muted" style="font-size: var(--ad-step--2); margin: var(--ad-space-3xs) 0 0;">Warm, archival — one source app's flavor.</p>
+    <p class="ad-muted" style="font-size: var(--ad-step--2); margin: var(--ad-space-3xs) 0 0;">Warm, archival.</p>
   </li>
   <li>
     <div class="ad-accent-demo" style="background: #2b4a78;">ink-blue</div>
@@ -413,7 +410,7 @@ the right half is the dark one.
 
 ### Accent
 
-<p class="ad-muted">One swappable accent per project, held constant across a whole view. `-ink` and `-soft` re-derive from `--ad-color-accent` via `color-mix()` exactly as the source computes them, so retheming the accent retones both automatically.</p>
+<p class="ad-muted">One swappable accent per project, held constant across a whole view. `-ink` and `-soft` re-derive from `--ad-color-accent` via `color-mix()`, so retheming the accent retones both automatically.</p>
 
   <table>
     <thead>
@@ -630,16 +627,16 @@ and checked by hand rather than by a build-time test.
     Two things this contract deliberately does not assert.
     <strong>Text tertiary</strong> — <code>--ad-color-text-tertiary</code>
     (neutral.500) is roughly 3.46:1 against the page in light mode, under the
-    4.5:1 floor. The source documents that step as muted-faint text —
-    placeholders and de-emphasized metadata, never body copy — so this is a
-    real, intentional property of the palette, not a bug to patch by
-    darkening the step.
+    4.5:1 floor. That step is documented as muted-faint text — placeholders
+    and de-emphasized metadata, never body copy — so this is a real,
+    intentional property of the palette, not a bug to patch by darkening the
+    step.
     <strong>Borders</strong> — <code>--ad-color-border-hairline</code> and
     <code>--ad-color-border-default</code> sit well under the 3:1 that WCAG
-    1.4.11 asks of a meaningful boundary. The source's own words are
-    "hairline (1px) borders and dividers do most of the elevation work" —
-    borders here are deliberately quiet, and the source never claims a 3:1
-    bar for them, so this contract does not invent one.
+    1.4.11 asks of a meaningful boundary. Hairline (1px) borders and dividers
+    do most of the elevation work here — borders are deliberately quiet, and
+    this system never claims a 3:1 bar for them, so this contract does not
+    invent one.
   </p>
 </div>
 
diff --git a/_foundations/elevation.md b/_foundations/elevation.md
index ef35bda..d64904e 100644
--- a/_foundations/elevation.md
+++ b/_foundations/elevation.md
@@ -7,8 +7,8 @@ summary: >-
 
 ## Borders do the work
 
-The source's own rule: "hairline (1px) borders and dividers do most of the
-elevation work". A flat, bordered [Card](<%= relative_url('/components/card/') %>)
+This system's own rule: hairline (1px) borders and dividers do most of the
+elevation work. A flat, bordered [Card](<%= relative_url('/components/card/') %>)
 is the default everywhere. Shadow is the exception, not the baseline.
 
 ## The two levels
diff --git a/_foundations/space.md b/_foundations/space.md
index b27bb3c..24eba63 100644
--- a/_foundations/space.md
+++ b/_foundations/space.md
@@ -115,8 +115,7 @@ summary: >-
 ## Radius
 
 4/6/10px — small and quiet, kept modest so it reads as a neutral default
-rather than any one source project's specific softness. Nothing pill-shaped
-except true pills.
+rather than a decorative flourish. Nothing pill-shaped except true pills.
 
 <ul class="ad-radius-grid">
   <li>
diff --git a/_foundations/typography.md b/_foundations/typography.md
index 90551cd..2ad8254 100644
--- a/_foundations/typography.md
+++ b/_foundations/typography.md
@@ -134,9 +134,9 @@ breakpoint in between.
 
 ## The eight compound styles
 
-Real, specific numbers from the source — not a generic ramp compressed to
-fit. Each class sets family, size, weight, line-height, and (where the
-source specifies one) letter-spacing in a single declaration.
+Real, specific numbers — not a generic ramp compressed to fit. Each class
+sets family, size, weight, line-height, and (where one applies)
+letter-spacing in a single declaration.
 
   <table>
     <thead><tr><th scope="col">Class</th><th scope="col">Weight</th><th scope="col">Size</th><th scope="col">Line-height</th><th scope="col">Tracking</th><th scope="col">Use for</th></tr></thead>
@@ -237,7 +237,8 @@ source specifies one) letter-spacing in a single declaration.
 - **Three families, and no fourth.** A new typeface needs a reason a weight
   or a size cannot supply.
 - **Mono is not decoration.** Every label, meta value, ID, date, and code
-  sample is mono — it is the one thread present in all three source projects.
+  sample is mono, consistently — not reserved for where code happens to
+  appear.
 - **`type-label` is always uppercase, mono, and tracked.** It is the one
   place uppercase belongs in this system.
 - **Never set a size in `px`.** The eight steps are fluid on purpose.
diff --git a/_patterns/archive.md b/_patterns/archive.md
index 656ef69..db5d2d6 100644
--- a/_patterns/archive.md
+++ b/_patterns/archive.md
@@ -3,7 +3,7 @@ title: "Archive — capture app"
 summary: >-
   A capture/document mobile app. Card list, bottom capture dock, photo slots
   with the diagonal-grain empty state. A generic demonstration of the system,
-  not a recreation of any one source project's actual screens.
+  not a recreation of any real product's actual screens.
 ---
 
 Archive is not a real product — it is the system's own reference layout for a
diff --git a/_patterns/loop.md b/_patterns/loop.md
index 24f8f7e..fac98fa 100644
--- a/_patterns/loop.md
+++ b/_patterns/loop.md
@@ -3,7 +3,7 @@ title: "Loop — task dashboard"
 summary: >-
   A recurring-task web dashboard. Dense rows, mono meta columns, overdue in
   danger red, one primary action. A generic demonstration of the system, not
-  a recreation of any one source project's actual screens.
+  a recreation of any real product's actual screens.
 ---
 
 Loop is not a real product — it is the system's own reference layout for a
diff --git a/index.md b/index.md
index 547a918..8eb420a 100644
--- a/index.md
+++ b/index.md
@@ -2,19 +2,19 @@
 layout: default
 title: Overview
 description: >-
-  A personal design system for self-hosted, single-user tools — synthesized
-  from three real running projects and rendered by a small Ruby/ERB
-  static-site generator on Ruby 4.0.
+  A personal design system for self-hosted, single-user tools, rendered by
+  a small Ruby/ERB static-site generator on Ruby 4.0.
 ---
 
 <div class="ad-hero">
   <p class="ad-overline">Design system</p>
   <h1 class="ad-hero__title">A personal umbrella for side projects, given a shared visual spine.</h1>
   <p class="ad-lead">
-    Arbitrary Definitions is not a company's design system — it is one person's,
-    synthesized by reading three real, running personal projects rather than
-    written from a spec. Each project keeps its own accent color and
-    typographic mood; this system is what they all share underneath.
+    Arbitrary Definitions is not a company's design system — it is one
+    person's. Nothing in it is derived from a brief; every value was chosen
+    once, named, and kept consistent since. Any project under this umbrella
+    keeps its own accent color and typographic mood; this system is what
+    they all share underneath.
   </p>
   <div class="ad-hero__actions">
     <a class="btn" data-variant="primary" data-size="lg" href="<%= relative_url('/foundations/color/') %>">Start with color</a>
@@ -35,23 +35,8 @@ description: >-
     <span class="ad-stat__value">16</span>
     <span class="ad-stat__label">Components</span>
   </div>
-  <div class="ad-stat">
-    <span class="ad-stat__value">3</span>
-    <span class="ad-stat__label">Source projects</span>
-  </div>
 </div>
 
-## Where it came from
-
-Synthesized by reading three real personal projects, not copied from any one
-of them: one leaned on warm paper surfaces, a swappable accent, and a
-capture dock; one was all-mono with plain grays and a flash-bar toast; one
-paired a humanist sans with a full dark palette and underline tabs. The one
-literal constant across all three is an identical Utopia fluid type/space
-scale — adopted verbatim as this system's spine. Everything else is a
-synthesized middle ground. See [Rationale](<%= relative_url('/rationale/') %>)
-for the full story, including where this system knowingly guesses.
-
 ## How it is put together
 
 `assets/css/tokens.css` is one hand-maintained, hand-readable file of CSS
@@ -113,8 +98,8 @@ same afternoon.
     </p>
   </div>
   <div class="card-footer">
-    <button type="button" data-variant="primary" data-size="sm">Approve</button>
-    <button type="button" data-variant="ghost" data-size="sm">Dismiss</button>
+    <button data-variant="primary" data-size="sm">Approve</button>
+    <button data-variant="ghost" data-size="sm">Dismiss</button>
   </div>
 </article>
 </div>
@@ -133,8 +118,8 @@ same afternoon.
     &lt;/p&gt;
   &lt;/div&gt;
   &lt;div class=&quot;card-footer&quot;&gt;
-    &lt;button type=&quot;button&quot; data-variant=&quot;primary&quot; data-size=&quot;sm&quot;&gt;Approve&lt;/button&gt;
-    &lt;button type=&quot;button&quot; data-variant=&quot;ghost&quot; data-size=&quot;sm&quot;&gt;Dismiss&lt;/button&gt;
+    &lt;button data-variant=&quot;primary&quot; data-size=&quot;sm&quot;&gt;Approve&lt;/button&gt;
+    &lt;button data-variant=&quot;ghost&quot; data-size=&quot;sm&quot;&gt;Dismiss&lt;/button&gt;
   &lt;/div&gt;
 &lt;/article&gt;</code></pre>
 </details>
diff --git a/install.md b/install.md
index 290a1ce..a7798f8 100644
--- a/install.md
+++ b/install.md
@@ -38,12 +38,10 @@ production widgets.
 
 ## Dark theme
 
-The source's own convention is an opt-in `.theme-dark` class, applied
-explicitly rather than inherited from the OS. This site instead keeps this
-repository's own mechanism — a `data-theme="dark"` attribute plus
-`prefers-color-scheme` — because the toggle UI on every page already depends
-on it and the two are functionally equivalent: both repoint the same
-semantic aliases at the inverted neutral ramp.
+Dark mode is opt-in via a `data-theme="dark"` attribute plus
+`prefers-color-scheme`, applied explicitly rather than inherited silently
+from the OS — the toggle UI on every page depends on this exact mechanism.
+Both repoint the same semantic aliases at the inverted neutral ramp.
 
 ```css
 :root { --ad-color-surface-page: #faf9f7; }
diff --git a/rationale.md b/rationale.md
index 7b2140e..8162af1 100644
--- a/rationale.md
+++ b/rationale.md
@@ -3,8 +3,8 @@ title: Rationale
 permalink: /rationale/
 section: Start here
 summary: >-
-  Why this system was synthesized from real projects instead of written
-  from a spec, and the contract its build actually enforces.
+  The four rules this system's build actually enforces, and the one thing
+  about it that is not arbitrary.
 ---
 
 ## Where the name comes from
@@ -18,39 +18,6 @@ number is correct. What makes it a *system* is not that the choices are
 correct but that they were written down once, given names, actually used, and
 are therefore changeable.
 
-## Synthesized, not specified
-
-This system was not designed from a blank page. It was built by reading
-several real, running personal projects and finding what they actually
-share — not copied wholesale from any single one of them:
-
-<div class="card-grid">
-  <article class="card">
-    <div class="card-body">
-      <h3 style="margin:0; font: 600 var(--ad-step-0)/1.3 var(--ad-font-sans);">Warm, paper-like surfaces</h3>
-      <p style="margin:0; color: var(--ad-color-text-secondary); font-size: var(--ad-step--1);">One app leaned on Georgia/Helvetica/mono, a swappable "Clay" accent, and a bottom capture dock — the source of this system's warm-neutral surface color.</p>
-    </div>
-  </article>
-  <article class="card">
-    <div class="card-body">
-      <h3 style="margin:0; font: 600 var(--ad-step-0)/1.3 var(--ad-font-sans);">All-mono, plain grays</h3>
-      <p style="margin:0; color: var(--ad-color-text-secondary); font-size: var(--ad-step--1);">Another was an all-mono interface with plain grays, red/green semantics, and a flash-bar toast — the source of this system's mono labels and semantic pair.</p>
-    </div>
-  </article>
-  <article class="card">
-    <div class="card-body">
-      <h3 style="margin:0; font: 600 var(--ad-step-0)/1.3 var(--ad-font-sans);">Humanist sans, full dark palette</h3>
-      <p style="margin:0; color: var(--ad-color-text-secondary); font-size: var(--ad-step--1);">A third paired humanist sans with mono, a warm cream surface, a full dark palette, and underline tabs — the source of this system's dark-theme approach.</p>
-    </div>
-  </article>
-</div>
-
-The one literal constant across all of them is an identical
-[Utopia](https://utopia.fyi) fluid type/space scale — 320→1240px viewport,
-18→20px body, a 1.20→1.25 ratio — adopted verbatim as this system's spine.
-Everything else (palette, radius, component set) is a synthesized middle
-ground, deliberately not lifted wholesale from any one source.
-
 ## What actually makes it a system
 
 Not the quality of the individual choices. The properties below:
@@ -108,15 +75,15 @@ rather than re-derived on every build — a personal site does not need a test
 suite standing between an edit and a deploy to keep five numbers honest.
 
 That contract is deliberately narrower than "every color in the system".
-`--ad-color-text-tertiary` — the source's own "muted-faint text" step — is
+`--ad-color-text-tertiary` — this palette's own "muted-faint text" step — is
 about 3.46:1 against the page in light mode, under the 4.5:1 floor for normal
 text. That is not a bug to paper over by darkening a real brand value; it is
 a documented, intentional property of the palette (see the
 [Color page](<%= relative_url('/foundations/color/') %>)), so the contract
 excludes it rather than silently forcing it to pass. Borders get the same
-treatment for the same reason: the source's own rule is that hairline borders
-do the elevation work, not high contrast, so this system does not invent a
-3:1 border assertion the source never claimed.
+treatment for the same reason: this system's own rule is that hairline
+borders do the elevation work, not high contrast, so it does not invent a
+3:1 border assertion it never claimed.
 
 ## The four rules
 
@@ -153,39 +120,32 @@ do the elevation work, not high contrast, so this system does not invent a
 <div class="ad-callout">
   <p class="type-label" style="margin-bottom: var(--ad-space-2xs); display:block;">4. One accent, one dark-mode convention</p>
   <p style="margin:0; font-size: var(--ad-step--1);">
-    Never two accents in one view — the source is explicit about this. Dark
-    mode is opt-in in the source (a <code>.theme-dark</code> class); this
-    site adapts that to its own <code>data-theme</code> toggle plus
-    <code>prefers-color-scheme</code>, which is functionally equivalent and
-    keeps the site's existing toggle working.
+    Never two accents in one view. Dark mode is opt-in — a
+    <code>data-theme</code> toggle plus <code>prefers-color-scheme</code>,
+    never inherited silently from the OS alone.
   </p>
 </div>
 
 ## What this system does not have
 
-Being honest about the synthesized parts means being honest about the gaps.
-
-- **No shared component library or Figma exists across the source
-  projects** — they are hand-rolled app CSS, not a design system. The
-  sixteen components documented here are a from-scratch, best-guess
-  personal-tool kit, grounded in real patterns found across those apps (a
-  flash-bar toast; a drop-up menu behind Dialog's flat treatment; a
-  segmented control and an underline-tabs pattern behind Tabs' two
-  variants) — not a literal recreation of any one app's screens.
-- **No logo or brand mark.** The source is explicit: render "Arbitrary
-  Definitions" or the project's own name in type wherever a mark would go,
-  and do not invent one.
-- **The icon set (Lucide) is a flagged substitution.** No source project
-  ships a shared icon library; one hand-draws its own line icons, and the
-  others mostly avoid icons.
-- **Signal Teal, the default accent, is a synthesized pick**, not lifted from
-  any one project.
+Being honest about the design is being honest about the gaps too.
+
+- **No formal component library or Figma file exists.** The sixteen
+  components documented here are a from-scratch, best-guess personal-tool
+  kit — not a literal recreation of any real app's screens, and not backed
+  by a source of truth beyond this site.
+- **No logo or brand mark.** Render "Arbitrary Definitions" or the
+  project's own name in type wherever a mark would go — don't invent one.
+- **The icon set (Lucide) is a flagged substitution** — there's no shipped
+  icon library of its own yet.
+- **Signal Teal, the default accent, is one pick among the sanctioned
+  alternates**, not a fixed identity.
 - **No Table, Callout, or Progress component.** An earlier pass at this site
-  invented all three; none exists in the source system, so they were removed
-  rather than re-skinned. (This documentation site still uses a plain
+  invented all three; they were removed rather than kept, since this system
+  doesn't define them. (This documentation site still uses a plain
   `<table>` and an aside box for its own reference material — those are site
   chrome, not system components, and are not documented as one.)
-- **Loop and Archive are generic demonstrations**, not recreations of any
-  specific source app.
+- **Loop and Archive are generic demonstrations**, not real production
+  screens.
 
 Naming these is cheaper than being caught by them.