Skip to content

fix(design): prose dark-mode fix + editorial typography overhaul#8

Merged
ronaldtse merged 4 commits into
mainfrom
design-overhaul
Jul 16, 2026
Merged

fix(design): prose dark-mode fix + editorial typography overhaul#8
ronaldtse merged 4 commits into
mainfrom
design-overhaul

Conversation

@ronaldtse

Copy link
Copy Markdown
Contributor

Summary

  • Fix invisible headings in dark mode on all content pages (about, concepts, blog, library, specs, adopt). Templates used prose prose-pubid but prose-pubid was never defined as a typography theme, so Tailwind's default light-mode tokens were used — dark text on dark background. Override .prose directly with semantic tokens that swap correctly under [data-theme="dark"].
  • Editorial design polish (technical-editorial aesthetic): Newsreader serif body, JetBrains Mono code, deeper dark palette, atmospheric gradient + noise texture, refined blockquotes/tables/code chips, eyebrow labels.
  • Header refinements: top accent strip, logo hover glow, brand-colored "ID".
  • Bug: removed duplicate <h1> from concepts template (markdown already provides one).

Test plan

  • npm run check — 0 errors
  • npm run build — 309 pages
  • npm test — 374/374 passing
  • Visual verification (dark + light) via Playwright screenshots on /about and /concepts/anatomy
  • Reviewer spot-checks /blog, /library, /specs, /adopt in both themes

Headings on content pages (about, concepts, blog, library, specs, adopt)
were invisible in dark mode because templates applied "prose prose-pubid"
but prose-pubid was never defined as a custom typography theme. Tailwind's
default prose tokens (light-mode-only) were used, leaving h1/h2/h3 with
dark text on a dark background.

Fix by overriding .prose directly with semantic color tokens that already
swap correctly under [data-theme=dark]. Drop the dead prose-pubid class
from all content templates.

Design polish (technical-editorial aesthetic):
- Newsreader Variable for serif body, JetBrains Mono Variable for code
- Deeper dark palette (#0b0d12 bg, #eceef2 text) for richer contrast
- Atmospheric gradient mesh + subtle noise texture on body
- Display-serif headings with balanced text-wrap
- Refined blockquotes, code chips, hairline tables
- Eyebrow label on all content pages for editorial structure
- Header: top accent strip, logo hover glow, brand-colored ID
- Remove duplicate h1 from concepts template (markdown already has one)
The wordmark used Fraunces Variable at browser-default axis settings,
which renders soft and blobby (high SOFT axis, no optical-size tuning).

Switch to Newsreader at opsz=72 (the display cut), weight 700, with the
"id" portion in italic at weight 500. This creates a refined editorial
masthead rather than a quirky display face.

Import Newsreader's opsz axis files explicitly (opsz.css + opsz-italic.css)
instead of the default wght-only entry — the default doesn't expose the
optical-size axis, so font-variation-settings on opsz was being ignored.
Wordmark:
- Switch from Newsreader serif to Schibsted Grotesk (modern editorial
  sans-serif) per request for a sans-serif logo
- "id" rendered in brand accent blue at medium weight, "Pub" at bold
- Tight tracking for wordmark presence

Anatomy section ("What is a PubID?"):
- Replace 2-column chip+description grid with a vertical annotated list
- Each row: colored dot marker + uppercase label + readable description
  (the chips with background-color boxes could feel "out of bounds" on
  narrower viewports; dots + labels cannot overflow)
- Identifier upgraded to a card with subtle radial accent glow,
  uppercase mono label ("Example — ISO/IEC with Amendment"), and a
  wrapping string (overflow-wrap: anywhere) so segments never escape
  the card on any viewport
- Hover state: row tints with segment color + colored left border
- Mobile-first single-column layout; descriptions capped at 70ch
Lowercase "id" was a typo — the brand is "PubID".
@ronaldtse
ronaldtse merged commit dab2025 into main Jul 16, 2026
2 checks passed
@ronaldtse
ronaldtse deleted the design-overhaul branch July 16, 2026 11:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant