Files
dotfiles/claude/memory/project-arc-web-typography-spec-coverage.md
T
David F GliddenandClaude Opus 4.8 3f9a89b00c chore(memory): Basic Memory trial begins — sync normalization baseline (283 files)
Basic Memory v0.21.6 first sync over the live memory dir (steward-authorized
live-dir trial, Option A 2026-06-06): adds permalink: to frontmatter, refolds
long YAML description lines, strips final newlines. Bodies untouched —
verified via full diff classification. From this commit forward, any diff in
claude/memory shows only what Basic Memory or the session writes.

Trial design: MemPalace untouched as incumbent; git status check on this dir
at every wrap; end-of-day evaluation (recall quality, sync robustness,
rebuild-from-files, malformed-file behavior).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 09:52:17 +02:00

19 KiB

name, description, type, originSessionId, permalink
name description type originSessionId permalink
ARC web typography spec coverage — what still needs care Inventory of web-only and web-medium typography elements in ARC that have NOT been considered with the same care as the major spec sections. The link work of 2026-05-02 surfaced that "humble" typography (links) had been left to browser-defaults plus ad-hoc accumulation; the same is likely true for several other surfaces. Per steward direction 2026-05-02 — "the work needs to be bien-fait." Care is constitutive; no element is too humble for considered attention. project 8d9ac240-47df-4578-aec1-a9dd32965027 claude-memory/project-arc-web-typography-spec-coverage

ARC web typography spec coverage — what still needs care

Date: 2026-05-02 Discipline: bien-fait — well-made. Care is constitutive of ARC; no typographic surface is too humble for considered first-principles attention. The link work surfaced that even "the humble link" had been treated ad-hoc; the same is likely true for several other surfaces.

Origin: After completing §VII.c Links spec + the migration that converged 14+ context-specific link rules to "one rule, two exceptions," steward asked: "what other, web-only typography needs spec? We've been full of care for the typography in general, but the work we've just done on something so humble as the link shows that some areas have not been considered carefully enough."

The pattern noticed: implementation existed (browser default + minor reset), but no first-principles consideration had been brought. The same diagnostic test applies to the items below: has this been considered, or merely styled?


Tier 1 — almost certainly need attention soon

These are foundational reading-flow furniture — a reader will encounter them dozens of times per essay. Each currently sits on browser-defaults or near-defaults.

1. Lists ✓ DONE 2026-05-02 — spec §I.b

Spec §I.b drafted + SCSS landed in commit 8980af9. Unordered → en-dash via list-style-type: '\2013\00a0'; ordered → old-style figures via font-variant-numeric: oldstyle-nums tabular-nums; definition <dt> → italic (banish-bold posture). Dead :before rule in _dark.scss retired. Nested-list spec deferred until needed.

2. Inline <code> + code blocks ✓ DONE 2026-05-02 — spec §I.c

Spec §I.c drafted + SCSS landed in commit 36e5d08. Inline + block treatments separated; Pandoc/Skylighting class targeting (the previous _syntax.scss was 172 lines of dead Jekyll/Rouge code targeting .highlight .c etc. that Pandoc never emits — replaced wholesale, net -88 lines). Quiet palette per Rutter's simplification: gray + italic for comments; Pompeian green (terre verte, color-wheel opposite of Pompeian red — no link confusion) for keywords; italic alone for strings. New $code-keyword-color variable (light/dark pair) added to _variables.scss, exposed as var(--code-keyword) in theme cascade. Code-captions / language-indicators not specced — defer until needed.

3. Headings hierarchy beyond H1 ✓ DONE 2026-05-02 — spec §I.d

Spec §I.d drafted + SCSS landed in commit 9ce607e. Minor-third modular scale (ratio 1.2) per Rutter — h6 = body floor (previous SCSS had h5/h6 smaller than body, typographically wrong); chained variables ($heading-scale-ratio + $h1-size...$h6-size) so one ratio change updates entire scale. Per-level line-height tuned (1.2 → 1.5 from h1 to h6); letter-spacing -0.01em on h1-h2 for optical compensation. Style: upright across all levels (h3 italic removed per steward direction — no strong precedent for that level specifically; size differential alone carries hierarchy). New "Banish-bold — lineage" subsection naming Tschichold/Penguin/Bringhurst-restraint and the literary-contemplative tradition that ARC inherits. New "Font stack — current and future" subsection: ARC currently loads Regular (400), Italic (400), Bold (700) of EB Garamond; Bold unused per banish-bold (audit candidate); Medium (500) and Semibold (600) available in typeface, can be added selectively if heading-emphasis-via-weight ever wanted (the principled path that doesn't break banish-bold — intermediate cuts of the same typeface, not full bold).


Tier 2 — worth considering when the moment fits

4. Smart quotes, em-dash, en-dash conventions

  • Bringhurst's territory exactly (Elements §5)
  • Currently relying on Pandoc defaults
  • Explicit ARC convention worth specifying:
    • English: curly quotes (primary "..." secondary '...'), em-dash usage (spaced or unspaced — steward to decide), en-dash for ranges
    • Multi-language extends: French guillemets «..», German „..." — per the multi-language spec already pending
  • Connects to the multi-language spec project memory

5. Numerals — lining vs old-style + tabular

  • Currently lining-nums tabular-nums in apparatus contexts (sequence-listing-numeral, dateline)
  • Body text numerals (footnote markers, dates inline, ages, counts) probably default
  • Bringhurst is firm: old-style figures (oldstyle-nums) for body prose; lining-nums for technical/apparatus
  • A unified numeral spec would clarify when each variant is right
  • EB Garamond has both sets available; needs font-variant-numeric declarations per context

6. Selection styling (::selection) ✓ DONE 2026-05-02 — spec §III.b

Spec §III.b drafted + SCSS landed in commit 04944eb. Quiet Pompeian-tint highlight: 25% accent + 75% bg (light), 35% accent + 65% bg (dark), via SCSS compile-time mix() — solid color, no opacity ambiguity. Text color not overridden — body color flows through; browser handles contrast naturally across themes. Treatment principle: selection is an interaction state of the typography, not separate apparatus; its color belongs to the existing palette family (same Pompeian red that carries links + future register markers extends to "this is what you've selected").


Tier 3 — corners worth at least naming

7. <abbr> / <mark> — already styled, never specced

  • <abbr> has dotted-underline + cursor:help treatment in _typography.scss:97-101 — needs spec home
  • <mark> has rgba background-color treatment in _typography.scss:104-108 — needs spec home
  • Both work; need spec articulation for consistency and future-proofing

Spec §I.g drafted + SCSS landed in commit b73bda7. Header weight: Medium (500), NOT Bold (banish-bold honored even though tables are exempt from body-prose reasoning; Bold still too loud for ARC's restrained register). Italic alone insufficient for scanning per Rutter (tables consulted not read). Small caps NOT used (governed elsewhere; principle: typographic marks with governed meaning are reserved). Three header signals: Medium weight + heavier border-bottom + heading color. Striped rows avoided (Bringhurst-firm). Mobile scrollable. Caption styling deferred until first ARC table uses <caption>.

9. Print stylesheet

  • Does ARC have one? Likely not, or minimal
  • Reader-printing-an-essay is a real use case (long-form reading, archive)
  • Print needs distinct treatment for: apparatus glyphs, sidenotes (margin disappears at narrow paper widths — stack inline?), links (URL appended? small-caps? footnote-style?), Reading Compass (probably suppress), backgrounds (suppress)
  • @media print block in dedicated _print.scss partial

10. prefers-reduced-motion

  • Small accessibility hook
  • Current transition declarations in _typography.scss (link hover) and elsewhere should honor @media (prefers-reduced-motion: reduce) to disable
  • Not just accessibility — a quieter contemplative-default move

Font stack inventory (2026-05-02 — survey + actions)

Currently loaded (all self-hosted under static/fonts/; no runtime CDN; GDPR/privacy preserved)

Family Weight Style Subsets Provenance
EB Garamond 400 normal combined (incl. Greek per After-the-Reply rendering) original ARC
EB Garamond 400 italic combined original ARC
EB Garamond 500 normal latin + latin-ext (separate, unicode-range) added 2026-05-02 from fontsource
EB Garamond 600 normal latin + latin-ext (separate, unicode-range) added 2026-05-02 from fontsource
EB Garamond 700 normal combined original ARC; banish-bold candidate
EB Garamond SC 400 normal small-caps subset original ARC
EB Garamond SC Display 400 normal small-caps display subset @font-face declared 2026-05-02 (file was on disk + referenced in _utilities.scss:10 but undeclared — silent rendering bug)
IBM Plex Sans 400 normal basic original ARC
IBM Plex Sans 500 normal basic original ARC
IBM Plex Sans 700 normal basic original ARC
IBM Plex Mono 400 normal basic original ARC

Bugs fixed this session (commit 5753fd7)

  1. EB Garamond SC Display silent-bug — file on disk, referenced in _utilities.scss:10, never @font-face declared. Wherever the rule fired, rendering silently degraded to regular $serif-family. Fixed: @font-face declaration added.
  2. font-weight 600 inconsistent fallback — _chamber.scss:14, 162 referenced Semibold but no Semibold loaded; browser fell back to either Medium (500) or Bold (700) depending on rendering algorithm. Fixed: Semibold loaded.

Held for future (NOT loaded)

  • EB Garamond Medium Italic / Semibold Italic — only useful if italic+emphasis simultaneously; rare, no current need
  • EB Garamond Bold Italic — moot if banish-bold persists
  • EB Garamond Italic Small Caps — useful for some apparatus contexts; deferred until needed
  • IBM Plex Mono Italic — no current SCSS reference; could be useful for italicized apparatus mono if a future convention wants it
  • IBM Plex Mono Medium / Bold — no current need

Audit candidates (remaining)

  1. IBMPlexSans-Italic.woff2 — file on disk, never referenced anywhere in SCSS, no @font-face. Pure dead weight. Either declare @font-face + use OR remove from disk.
  2. EB Garamond Bold (700) @font-face — loaded but should be unused per banish-bold posture. Becomes removable dead load AFTER the 17 banish-bold violations are cleaned.
  3. 17 banish-bold violations across SCSS — $bold-weight / font-weight: 700 references that should retire per banish-bold posture (Tschichold/Penguin/Bringhurst-restraint). Includes _post.scss:154+ anchor-link # ::before { font-weight: $bold-weight }.
  4. $font-size-xxl / $font-size-xl / $font-size-lg — may be unused after §I.d heading-scale variables took over. Verify usage; remove if dead.
  5. _dark.scss heading rule (h1, h2, h3, h4, h5, h6 { color: var(--heading) }) — no-op; the bare-base heading rule already sets color: var(--heading) and the cascade will pick up the dark-mode value automatically through the custom-property change. Removable.

Long-term option (held)

  • Variable-font migration — EB Garamond ships as a variable .woff2 with weight + italic axes. A single variable file could replace multiple static-weight files. Tradeoffs: single file ~150-300 KB vs 3-5 separate ~70 KB files; gives weight-axis flexibility for any heading-emphasis tuning without additional fetch. The @font-face syntax differs slightly (font-weight: 400 700 ranges vs single values). Architectural decision deferred.

Format

WOFF2 confirmed correct — modern web standard, Brotli-compressed, universal browser support since 2018+. ARC's choice is right; nothing to change.


Cross-cutting — exhaustive SCSS audit

Steward direction 2026-05-02 (after the lists spec landed): "at some point an exhaustive scss audit would be a good idea, I'd be very surprised if there weren't other stale/dead/blocking/conflicting code in there. I'd like to know that what is there is all used and that there is no unnecessary cruft."

Why this is warranted: the §VII.c Links work + Lists work together surfaced multiple categories of cruft in just the partials we touched:

  • Dead code: _dark.scss link block (overridden by !important and never cleaned up); _dark.scss li:before rule (never functional, :before doesn't exist on <li> by default); pseudo-element underline arms-race (!important in _typography.scss provoking !important in nav, frontispiece, avatar-link defenses)
  • Conflicting rules: the .page-content a block in _post.scss overriding the global link rule with red-text-on-hover-border instead of §VII.c
  • Redundant rules: the lex sidenote density-exception duplicated between line 101 (broad) and line 295-302 (narrower, inside @include desktop) — narrowed but the @include desktop duplicate kept
  • Stale references: the voicesCtx (already removed), other artifacts of retired branches; SCSS comments referencing systems that have been retired

Since these all surfaced in 4-5 hours of focused work on TWO elements (links + lists), the corpus-wide expectation is that significantly more cruft exists in untouched partials.

Audit scope (when it happens):

  • Scan every .scss partial under scss/AldineXXI/ (excluding archive-v1/ and *.bak)
  • For each rule: is the selector still in use anywhere (templates, content, generated HTML)? Is the rule overridden universally by a later rule? Does any !important correspond to a real cascade conflict, or is it defensive against something now removed? Are there rules whose comments cite retired systems (UCE, voicesCtx, the old triptych, polyphonic marginalia, etc.)?
  • For each !important: justify or retire. The link migration showed that !important is almost always a sign of a cascade fight that should be reasoned, not enforced.
  • For each pseudo-element override (::after, ::before, ::marker): is the original rule still in place? If not, the override is dead.
  • Output: a categorized list of removable / consolidatable rules + a one-pass cleanup commit (or batched commits per file)

Sequencing: This is a 3-6 hour focused session. Best after the next handful of element specs land (so we don't audit then immediately add things). Could be sequenced after Tier 1 (lists ✓ done; code; headings) is complete — at that point the spec coverage is comprehensive enough that the audit can confidently say "if it doesn't match a spec section, it's a candidate for removal."

Cross-references: feedback-arc-link-treatment-one-rule-two-exceptions.md (the discipline that makes the audit possible — predictability lets you spot deviations); project-arc-rework.md (the broader cleanup landscape).


Tier 0 — already in spec or in active progress (cross-reference)

These have been considered and are spec'd; included here so they don't get re-raised:

  • §I.b Lists — spec'd 2026-05-02; SCSS landed; nested-list spec deferred until needed
  • §I.c Code — spec'd 2026-05-02; SCSS landed (_syntax.scss rewritten from dead Rouge to live Pandoc/Skylighting); Pompeian green for keywords; italic-alone for strings (Rutter simplification); $code-keyword-color added to palette
  • §I.d Headings — spec'd 2026-05-02; SCSS landed; minor-third modular scale (ratio 1.2); upright across all levels (h3 italic removed); banish-bold lineage paragraph (Tschichold/Penguin/Bringhurst); font-stack note re Medium/Semibold as future option
  • §I.e Numerals — spec'd 2026-05-03; articulates the existing oldstyle-default + lining-for-apparatus convention centrally (architecture was already correct in SCSS)
  • §I.f Smart Punctuation — spec'd 2026-05-03; convention switch from Chicago em-dash to Bringhurst spaced en-dash; 848 em-dashes converted in content + 344 in spec; Oxford comma + capitalization conventions added
  • §I.g Tables — spec'd 2026-05-03; SCSS landed; Medium (500) header weight per Rutter (tables scanned not read); small caps reserved for governed contexts; striped rows avoided
  • §III.b Selection — spec'd 2026-05-02 (retuned 2026-05-03 after duplicate-rule fix surfaced via §III.b not rendering)
  • §VII.c Links — spec'd 2026-05-02; SCSS migrated; tuning iteration ongoing
  • Bold audit (posts/) — done 2026-05-03; 58 bold→italic conversions in 3 posts; pages/ + chamber/ deferred
  • §VII.b Sources — spec'd 2026-05-01 (PROVISIONAL); first instance live on After the Reply
  • §XII Sidenotes + §XII.b Register Markers + §XII.c Preface + §XII.d Body-Block — all spec'd
  • §VII Apparatus (dateline, epigraph, footnotes, captions, post metadata, dedications) — spec'd
  • §IV Ornament Taxonomy (Pause + Close, section breaks) — spec'd
  • §VIII Image System (figure / figcaption) — spec'd
  • §XI Awaiting Governance — drop caps, polyphonic marginalia (deferred)

Open question (from §VII.b note 2026-05-02)

Source-glyph link (§) in essay apparatus locator currently does NOT follow §VII.c (no underline; color-shift on hover only). Spec note logged in §VII.b. Decision deferred: formal exception status (alongside avatar-link + Reading Compass) OR bring into §VII.c conformance. Argument for exception: § already carries glyph weight; underline beneath would compete. Argument against: predictability principle.


Genuinely-don't-need-it for ARC's content shape

Naming these so they don't get accidentally re-raised:

  • Forms — none exist (no contact form, no comment system, no newsletter signup at the typographic level)
  • <kbd> — no keyboard-input register present in ARC's content
  • Scrollbar styling — purely cosmetic, distracting work
  • <details> / <summary> — no current use, but if introduced (progressive-disclosure footnotes?), would need spec
  • <address> — not used; colophon serves this function differently

How this list is meant to be used

NOT a sweep-it-all backlog. Each item enters its own focused session when the moment fits — the same shape as the link work today (one piece, considered carefully, spec first, implementation flows, tuning iterates).

Suggested ordering: Tier 1 first, in roughly the order listed (lists → code → headings hierarchy). Tier 2 surfaces opportunistically (a piece that uses lots of inline code surfaces inline code; a multi-language spec session naturally surfaces smart-quote conventions). Tier 3 lives until the moment forces it.

The discipline: bien-fait. Care is the principle; the size of the surface doesn't determine the depth of the consideration. The link case proved this.


Cross-references (so this doesn't get lost)

  • project-arc-rework.md — main ARC todo / rework landscape. This memory is linked from there under the Style Guide section. When the rework doc is consulted, this list surfaces. When this list is consulted, the broader rework context is one hop away.
  • project-arc-breadcrumb-spec-pending.md — adjacent: type-pass + breadcrumb spec session. The About-enfilade siblings classification question (Hearth misclass + the broader "what class: should the door pages share") will surface during type-pass; this typography list and the type-pass should be sequenced together when the moment fits.
  • feedback-arc-link-treatment-one-rule-two-exceptions.md — the discipline that produced this list. One rule, two named exceptions, everything else predictable applies to lists / headings / code / etc. just as much as to links.
  • AldineXXI specification at _Dev/animal-davidglidden-eu/docs/AldineXXI-Codex/AldineXXI-specification.md — single source of truth; SCSS flows from it; new spec sections drafted here go in there, in the right §.