From dcfdcd9835801cff1d229b46d7629df97a5fe097 Mon Sep 17 00:00:00 2001 From: Travis Rich Date: Thu, 9 Apr 2026 17:09:58 -0400 Subject: [PATCH 01/13] First pass at font swap --- client/components/PubPreview/pubPreview.scss | 2 +- client/containers/Landing/landing.scss | 34 ++++++++++--------- .../containers/Pub/PubDocument/pubBody.scss | 11 +++--- .../containers/Pub/PubHeader/pubHeader.scss | 12 ++++--- client/styles/base.scss | 2 +- client/styles/variables.scss | 9 +++-- workers/tasks/export/html.tsx | 16 ++------- .../tasks/export/styles/printDocument.scss | 2 +- 8 files changed, 40 insertions(+), 48 deletions(-) diff --git a/client/components/PubPreview/pubPreview.scss b/client/components/PubPreview/pubPreview.scss index 58bbaf3f30..54a9eede45 100644 --- a/client/components/PubPreview/pubPreview.scss +++ b/client/components/PubPreview/pubPreview.scss @@ -213,7 +213,7 @@ .title-wrapper { padding-bottom: 5px; font-family: - multi-display, + 'Red Hat Display', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', diff --git a/client/containers/Landing/landing.scss b/client/containers/Landing/landing.scss index 43b8828a7c..6ea785c0f6 100644 --- a/client/containers/Landing/landing.scss +++ b/client/containers/Landing/landing.scss @@ -51,12 +51,12 @@ $leftColumnWidth: 20%; #landing-container { /***** Globals *****/ - font-family: upgrade, sans-serif; - font-weight: 300; + font-family: 'Outfit', sans-serif; + font-weight: 400; font-style: normal; font-size: 1em; line-height: 2em; - letter-spacing: 1px; + letter-spacing: 0.2px; strong { font-weight: 500; } @@ -183,13 +183,14 @@ $leftColumnWidth: 20%; .content { h1 { margin: 1em 0 0.5em 0; - font-weight: 400; + font-weight: 500; font-style: normal; - font-size: 4em; + font-size: 3.9em; + letter-spacing: 0.2px; } h2 { margin: 0.75em 0; - font-weight: 300; + font-weight: 350; font-style: normal; font-size: 2em; } @@ -203,9 +204,10 @@ $leftColumnWidth: 20%; .subtitle { max-width: 500px; font-size: 1.5em; - font-family: upgrade-lights, sans-serif; - font-weight: 500; + font-family: 'Outfit', sans-serif; + font-weight: 200; font-style: normal; + letter-spacing: 0.2px; } } } @@ -234,13 +236,13 @@ $leftColumnWidth: 20%; .feature-number { font-size: 1em; line-height: 2em; - font-weight: 200; + font-weight: 300; text-transform: uppercase; } h4 { font-size: 1.25em; line-height: 2em; - font-weight: 400; + font-weight: 500; } > div:nth-child(odd) { text-align: right; @@ -281,8 +283,8 @@ $leftColumnWidth: 20%; ul { margin-top: 4em; list-style-type: none; - font-family: upgrade-lights; - font-weight: 500; + font-family: 'Outfit', sans-serif; + font-weight: 250; li { margin: 2.4em 0; } @@ -389,8 +391,8 @@ $leftColumnWidth: 20%; .description { font-size: 0.9em; line-height: 1.2em; - font-family: upgrade-light; - font-weight: 300; + font-family: 'Outfit', sans-serif; + font-weight: 300; font-style: italic; } } @@ -429,8 +431,8 @@ $leftColumnWidth: 20%; line-height: 1.2em; } p.disclaimer { - font-family: upgrade-lights; - font-weight: 200; + font-family: 'Outfit', sans-serif; + font-weight: 100; font-style: italic; } } diff --git a/client/containers/Pub/PubDocument/pubBody.scss b/client/containers/Pub/PubDocument/pubBody.scss index ee549c93f1..1108e77817 100644 --- a/client/containers/Pub/PubDocument/pubBody.scss +++ b/client/containers/Pub/PubDocument/pubBody.scss @@ -41,20 +41,20 @@ $pub-body-font-size: if-is-export(14px, 20px); } h1 { font-size: 1.4em; - font-weight: 600; + font-weight: 900; line-height: 1.3em; letter-spacing: 0px; } h2 { font-size: 1.3em; line-height: 1.3em; - font-weight: 500; + font-weight: 700; letter-spacing: 0px; } h3 { font-size: 1.2em; line-height: 1.3em; - font-weight: 400; + font-weight: 500; letter-spacing: 0.5px; } h4 { @@ -86,11 +86,10 @@ $pub-body-font-size: if-is-export(14px, 20px); p, li { font-family: $body-font; - letter-spacing: 0.01rem; font-weight: 400; font-style: normal; - line-height: 1.7; - letter-spacing: -0.003em; + line-height: 1.75; + letter-spacing: -0.023em; word-break: break-word; } diff --git a/client/containers/Pub/PubHeader/pubHeader.scss b/client/containers/Pub/PubHeader/pubHeader.scss index a07e7b5460..8a1227cd97 100644 --- a/client/containers/Pub/PubHeader/pubHeader.scss +++ b/client/containers/Pub/PubHeader/pubHeader.scss @@ -52,8 +52,9 @@ $mobile-bottom-buttons-spacing: 10px; h1 { margin: 0; font-size: 48px; - line-height: 1.5em; - font-weight: normal; + line-height: 1.42em; + font-weight: 517; + letter-spacing: 0.3px; font-family: $header-font; box-decoration-break: clone; @include smaller-viewport { @@ -101,7 +102,8 @@ $mobile-bottom-buttons-spacing: 10px; padding-top: $title-elements-spacing; margin: 0; font-size: 18px; - font-weight: normal; + font-weight: 500; + letter-spacing: 0.3px; font-family: $header-font; } @@ -110,9 +112,9 @@ $mobile-bottom-buttons-spacing: 10px; margin: 0; font-size: 18px; font-style: italic; - font-weight: normal; + font-weight: 400; font-family: $header-font; - letter-spacing: 0.5px; + letter-spacing: 0.1px; .byline-icon svg { width: 14px; height: auto; diff --git a/client/styles/base.scss b/client/styles/base.scss index 86ce3da5e0..b377cc63ab 100644 --- a/client/styles/base.scss +++ b/client/styles/base.scss @@ -6,7 +6,7 @@ @import '~@blueprintjs/icons/lib/css/blueprint-icons.css'; @import './grid.scss'; -@import url('https://use.typekit.net/kmi0tdo.css'); +@import url('https://fonts.googleapis.com/css2?family=Red+Hat+Display:ital,wght@0,300..900;1,300..900&family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&family=Outfit:wght@100..900&display=swap'); @import './variables.scss'; @import './typography.scss'; diff --git a/client/styles/variables.scss b/client/styles/variables.scss index be7cb70642..86fcd2869c 100644 --- a/client/styles/variables.scss +++ b/client/styles/variables.scss @@ -6,16 +6,16 @@ } $cjk-body-font: - source-han-serif-tc, source-han-serif-korean, source-han-serif-japanese, source-han-serif-sc; + 'Noto Serif TC', 'Noto Serif KR', 'Noto Serif JP', 'Noto Serif SC'; $cjk-header-font: - source-han-sans-cjk-tc, source-han-sans-cjk-ko, source-han-sans-cjk-ja, source-han-sans-cjk-sc; + 'Noto Sans TC', 'Noto Sans KR', 'Noto Sans JP', 'Noto Sans SC'; $base-font: -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Open Sans', 'Helvetica Neue', sans-serif; $header-font: - multi-display, + 'Red Hat Display', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', @@ -28,10 +28,9 @@ $header-font: sans-serif, $cjk-header-font; -// We make this distinction because Adobe Acrobat hates skolar $export-body-font: Georgia, Cambria, 'Times New Roman', Times, 'DejaVu Serif', $cjk-body-font, serif; -$screen-body-font: skolar-latin, Georgia, Cambria, 'Times New Roman', Times, serif; +$screen-body-font: 'Source Serif 4', Georgia, Cambria, 'Times New Roman', Times, serif; $body-font: if-is-export($export-body-font, $screen-body-font); $mobile-cutoff: 750px; diff --git a/workers/tasks/export/html.tsx b/workers/tasks/export/html.tsx index afef635099..bcedeae86b 100644 --- a/workers/tasks/export/html.tsx +++ b/workers/tasks/export/html.tsx @@ -17,18 +17,8 @@ import { digestCitation, getAffiliations, getDedupedAffliations } from './util'; const nonExportableNodeTypes = ['discussion']; -// This script is provided by the "cjk-fonts" Web Fonts project that we manage from here: -// https://fonts.adobe.com/my_fonts#web_projects-section -const loadCjkFontsScript = ` -(function(d) { - var config = { - kitId: 'seb8nix', - scriptTimeout: 3000, - async: true - }, - h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(/\bwf-loading\b/g,"")+" wf-inactive";},config.scriptTimeout),tk=d.createElement("script"),f=false,s=d.getElementsByTagName("script")[0],a;h.className+=" wf-loading";tk.src='https://use.typekit.net/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f||a&&a!="complete"&&a!="loaded")return;f=true;clearTimeout(t);try{Typekit.load(config)}catch(e){}};s.parentNode.insertBefore(tk,s) -})(document); -`; +const cjkFontsHref = + 'https://fonts.googleapis.com/css2?family=Noto+Serif+TC&family=Noto+Serif+KR&family=Noto+Serif+JP&family=Noto+Serif+SC&family=Noto+Sans+TC&family=Noto+Sans+KR&family=Noto+Sans+JP&family=Noto+Sans+SC&display=swap'; let cachedCss: string | null = null; @@ -296,7 +286,7 @@ export const renderStaticHtml = async (options: RenderStaticHtmlOptions) => { + + +
+ + +
+

Font Tuner v2

+

Left = original Typekit · Right = new Google Font · Adjust sliders & dropdowns

+ + +
Font Selection
+
+ + +
+
+ + +
+
+ + +
+ + +
Pub Header — Title (h1)
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
Pub Header — Description
+
+ + +
+
+ + +
+ +
Pub Header — Byline
+
+ + +
+
+ + +
+ + +
Pub Body — Headings
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
Pub Body — Paragraph
+
+ + +
+
+ + +
+
+ + +
+ + +
Landing — Global
+
+ + +
+
+ + +
+
+ + +
+ +
Landing — Hero h1
+
+ + +
+
+ + +
+
+ + +
+ +
Landing — Hero h2
+
+ + +
+ +
Landing — Subtitle (was upgrade-lights 500)
+
+ + +
+
+ + +
+ +
Landing — Feature list (was upgrade-lights 500)
+
+ + +
+ +
Landing — Community desc (was upgrade-light 300)
+
+ + +
+ +
Landing — Disclaimer (was upgrade-lights 200)
+
+ + +
+ +
Landing — h3 / h4
+
+ + +
+
+ + +
+ + +
+
Import / Restore Values
+

Paste a previous output here and click Import to restore all values:

+ + +
+ + +
+
Export
+ + +
+
+ + +
+ + +
Pub Header — Light Theme
+
+
+
Before (multi-display)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models for academic publishing

+ +
+
+
+
After (Inter)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models for academic publishing

+ +
+
+
+ + +
Pub Header — White Blocks Theme (box-decoration-break)
+
+
+
Before (multi-display)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models

+ +
+
+
+
After (Inter)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models

+ +
+
+
+ + +
Pub Header — Black Blocks Theme
+
+
+
Before (multi-display)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models

+ +
+
+
+
After (Inter)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models

+ +
+
+
+ + +
Pub Body — Content (headings + body text)
+
+
+
Before (multi-display + skolar-latin)
+

1. Introduction to Open Publishing Infrastructure

+

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed.

+

1.1 Historical Context

+

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

+

1.1.1 The Journal Model

+

Peer-reviewed journals remain the gold standard for academic credentialing, yet their business models have come under increasing scrutiny.

+
+
+
After (Inter + Source Serif 4)
+

1. Introduction to Open Publishing Infrastructure

+

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed.

+

1.1 Historical Context

+

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

+

1.1.1 The Journal Model

+

Peer-reviewed journals remain the gold standard for academic credentialing, yet their business models have come under increasing scrutiny.

+
+
+ + +
Landing Page — Hero
+
+
+
Before (upgrade + upgrade-lights)
+
+

PubPub

+

An open-source, community-led, end-to-end publishing platform for knowledge communities.

+

Create knowledge. Share it with audiences who care.

+
+
+
+
After (Outfit)
+
+

PubPub

+

An open-source, community-led, end-to-end publishing platform for knowledge communities.

+

Create knowledge. Share it with audiences who care.

+
+
+
+ + +
Landing Page — Features
+
+
+
Before (upgrade + upgrade-lights)
+
+

Key Features

+

Collaborate & edit with co-authors in real time

+
    +
  • Keep everyone in the loop
  • +
  • Assign roles on-the-fly
  • +
  • Easy multi-file imports
  • +
  • Complex-content friendly
  • +
+
+
+
+
After (Outfit)
+
+

Key Features

+

Collaborate & edit with co-authors in real time

+
    +
  • Keep everyone in the loop
  • +
  • Assign roles on-the-fly
  • +
  • Easy multi-file imports
  • +
  • Complex-content friendly
  • +
+
+
+
+ + +
Landing Page — Communities & Disclaimer
+
+
+
Before (upgrade-light / upgrade-lights)
+
+

Harvard Data Science Review

+

A Harvard initiative focusing on foundational thinking, research milestones, and educational innovation in data science.

+
+

Start building with PubPub today.

+

PubPub is free to use. A premium hosted version is available for organizations that need additional support.

+
+
+
+
+
After (Outfit)
+
+

Harvard Data Science Review

+

A Harvard initiative focusing on foundational thinking, research milestones, and educational innovation in data science.

+
+

Start building with PubPub today.

+

PubPub is free to use. A premium hosted version is available for organizations that need additional support.

+
+
+
+
+ +
+
+ + + + From 1b0a34da57f61759d1e915c9ea99cea52b6b0eca Mon Sep 17 00:00:00 2001 From: Travis Rich Date: Mon, 13 Apr 2026 11:53:05 -0400 Subject: [PATCH 03/13] import fix --- tools/font-tuner.html | 60 +++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/tools/font-tuner.html b/tools/font-tuner.html index 9dccc30d4a..35d7069b69 100644 --- a/tools/font-tuner.html +++ b/tools/font-tuner.html @@ -603,34 +603,50 @@

{ - el.style[slider.dataset.prop] = rawVal + suffix; - }); + // Apply to sliders, matching by section + label + let currentDomSection = ''; + document.querySelectorAll('.controls-panel > *').forEach(el => { + if (el.classList.contains('section-header')) { + currentDomSection = el.textContent.trim(); + return; } + if (!el.classList.contains('control-group')) return; + const slider = el.querySelector('input[type="range"]'); + if (!slider || !currentDomSection) return; + const labelText = el.querySelector('label').childNodes[0].textContent.trim(); + const sectionData = sectionMap[currentDomSection]; + if (!sectionData || sectionData[labelText] === undefined) return; + + // Strip suffix to get raw number + const suffix = slider.dataset.suffix || ''; + let rawVal = sectionData[labelText]; + if (suffix && rawVal.endsWith(suffix)) rawVal = rawVal.slice(0, -suffix.length); + slider.value = rawVal; + // Trigger visual update + const displayEl = document.getElementById(slider.dataset.display); + if (displayEl) displayEl.textContent = rawVal + suffix; + document.querySelectorAll(slider.dataset.target).forEach(target => { + target.style[slider.dataset.prop] = rawVal + suffix; + }); }); document.getElementById('output-area').value = generateOutput(); From c6ab9b2c69809ccec3e217653eddfbf4a99cc8c3 Mon Sep 17 00:00:00 2001 From: Travis Rich Date: Mon, 13 Apr 2026 19:36:30 -0400 Subject: [PATCH 04/13] Apply more changes --- client/components/PubPreview/pubPreview.scss | 7 +- client/containers/Landing/landing.scss | 4 +- .../containers/Pub/PubDocument/pubBody.scss | 30 +- .../containers/Pub/PubHeader/pubHeader.scss | 12 +- client/styles/base.scss | 2 +- client/styles/variables.scss | 2 +- tools/font-tuner.html | 367 ++++++++++++++---- .../tasks/export/styles/printDocument.scss | 2 +- 8 files changed, 321 insertions(+), 105 deletions(-) diff --git a/client/components/PubPreview/pubPreview.scss b/client/components/PubPreview/pubPreview.scss index 54a9eede45..5534b4bbda 100644 --- a/client/components/PubPreview/pubPreview.scss +++ b/client/components/PubPreview/pubPreview.scss @@ -70,8 +70,9 @@ text-decoration: underline; } .pub-title { - font-weight: 500; + font-weight: 600; font-size: 24px; + letter-spacing: -1.1px; line-height: 1.33 !important; } } @@ -156,6 +157,7 @@ .pub-title { font-weight: 400; font-size: 22px; + letter-spacing: -1px; line-height: 1.33 !important; } } @@ -197,6 +199,7 @@ .pub-title { font-weight: 400; font-size: 18px; + letter-spacing: -0.5px; line-height: 1.33 !important; } } @@ -213,7 +216,7 @@ .title-wrapper { padding-bottom: 5px; font-family: - 'Red Hat Display', + 'Work Sans', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', diff --git a/client/containers/Landing/landing.scss b/client/containers/Landing/landing.scss index 6ea785c0f6..841640f3dc 100644 --- a/client/containers/Landing/landing.scss +++ b/client/containers/Landing/landing.scss @@ -190,7 +190,7 @@ $leftColumnWidth: 20%; } h2 { margin: 0.75em 0; - font-weight: 350; + font-weight: 300; font-style: normal; font-size: 2em; } @@ -207,7 +207,7 @@ $leftColumnWidth: 20%; font-family: 'Outfit', sans-serif; font-weight: 200; font-style: normal; - letter-spacing: 0.2px; + letter-spacing: 0px; } } } diff --git a/client/containers/Pub/PubDocument/pubBody.scss b/client/containers/Pub/PubDocument/pubBody.scss index 1108e77817..f86a617fc7 100644 --- a/client/containers/Pub/PubDocument/pubBody.scss +++ b/client/containers/Pub/PubDocument/pubBody.scss @@ -40,40 +40,40 @@ $pub-body-font-size: if-is-export(14px, 20px); } } h1 { - font-size: 1.4em; - font-weight: 900; - line-height: 1.3em; + font-size: 1.6em; + font-weight: 700; + line-height: 1.1em; letter-spacing: 0px; } h2 { - font-size: 1.3em; - line-height: 1.3em; - font-weight: 700; + font-size: 1.4em; + line-height: 1.1em; + font-weight: 600; letter-spacing: 0px; } h3 { - font-size: 1.2em; - line-height: 1.3em; - font-weight: 500; - letter-spacing: 0.5px; + font-size: 1.25em; + line-height: 0.8em; + font-weight: 400; + letter-spacing: 0px; } h4 { font-size: 1em; line-height: 1.3em; - font-weight: 500; - letter-spacing: 0.5px; + font-weight: 600; + letter-spacing: 0px; } h5 { font-size: 1em; line-height: 1.3em; - font-weight: 400; - letter-spacing: 0.5px; + font-weight: 500; + letter-spacing: 0px; } h6 { font-size: 1em; line-height: 1.3em; font-weight: 300; - letter-spacing: 0.5px; + letter-spacing: 0px; } * + h1, * + h2, diff --git a/client/containers/Pub/PubHeader/pubHeader.scss b/client/containers/Pub/PubHeader/pubHeader.scss index 8a1227cd97..7330f51010 100644 --- a/client/containers/Pub/PubHeader/pubHeader.scss +++ b/client/containers/Pub/PubHeader/pubHeader.scss @@ -52,9 +52,9 @@ $mobile-bottom-buttons-spacing: 10px; h1 { margin: 0; font-size: 48px; - line-height: 1.42em; - font-weight: 517; - letter-spacing: 0.3px; + line-height: 1.27em; + font-weight: 450; + letter-spacing: -1.4px; font-family: $header-font; box-decoration-break: clone; @include smaller-viewport { @@ -102,7 +102,7 @@ $mobile-bottom-buttons-spacing: 10px; padding-top: $title-elements-spacing; margin: 0; font-size: 18px; - font-weight: 500; + font-weight: 300; letter-spacing: 0.3px; font-family: $header-font; } @@ -110,9 +110,9 @@ $mobile-bottom-buttons-spacing: 10px; .byline-component { padding-top: $title-elements-spacing; margin: 0; - font-size: 18px; + font-size: 19px; font-style: italic; - font-weight: 400; + font-weight: 300; font-family: $header-font; letter-spacing: 0.1px; .byline-icon svg { diff --git a/client/styles/base.scss b/client/styles/base.scss index b377cc63ab..3b792c2944 100644 --- a/client/styles/base.scss +++ b/client/styles/base.scss @@ -6,7 +6,7 @@ @import '~@blueprintjs/icons/lib/css/blueprint-icons.css'; @import './grid.scss'; -@import url('https://fonts.googleapis.com/css2?family=Red+Hat+Display:ital,wght@0,300..900;1,300..900&family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&family=Outfit:wght@100..900&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,100..900;1,100..900&family=Source+Serif+4:ital,opsz,wght@0,8..60,200..900;1,8..60,200..900&family=Outfit:wght@100..900&display=swap'); @import './variables.scss'; @import './typography.scss'; diff --git a/client/styles/variables.scss b/client/styles/variables.scss index 86fcd2869c..a994795952 100644 --- a/client/styles/variables.scss +++ b/client/styles/variables.scss @@ -15,7 +15,7 @@ $base-font: -apple-system, 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Open Sans', 'Helvetica Neue', sans-serif; $header-font: - 'Red Hat Display', + 'Work Sans', -apple-system, 'BlinkMacSystemFont', 'Segoe UI', diff --git a/tools/font-tuner.html b/tools/font-tuner.html index 35d7069b69..e7d8154203 100644 --- a/tools/font-tuner.html +++ b/tools/font-tuner.html @@ -9,7 +9,22 @@ - + + + + + + + + @@ -237,16 +244,16 @@

Font Tuner v2

Pub Header — Title (h1)
- - + +
- - + +
- - + +
@@ -255,8 +262,8 @@

Font Tuner v2

Pub Header — Description
- - + +
@@ -273,8 +280,8 @@

Font Tuner v2

- - + +
@@ -284,16 +291,16 @@

Font Tuner v2

Pub Body — h1
- - + +
- - + +
- - + +
@@ -302,16 +309,16 @@

Font Tuner v2

Pub Body — h2
- - + +
- - + +
- - + +
@@ -320,34 +327,34 @@

Font Tuner v2

Pub Body — h3
- - + +
- - + +
- - + +
- - + +
Pub Body — h4 / h5 / h6
- - + +
- - + +
- - + +
@@ -403,8 +410,8 @@

Font Tuner v2

Landing — Hero h2
- - + +
@@ -421,14 +428,14 @@

Font Tuner v2

- - + +
Landing — Feature list (was upgrade-lights 500)
- - + +
Landing — Community desc (was upgrade-light 300)
@@ -439,8 +446,8 @@

Font Tuner v2

Landing — Disclaimer (was upgrade-lights 200)
- - + +
Landing — h3 / h4
@@ -453,19 +460,41 @@

Font Tuner v2

+
Landing — CTA heading
+
+ + +
+
+ + +
+
+ + +
+
Pub Preview — Title
- - + +
- - + + +
+
+ + +
+
+ +
@@ -476,8 +505,8 @@

Font Tuner v2

- - + +
@@ -488,8 +517,8 @@

Font Tuner v2

- - + +
@@ -511,6 +540,27 @@

Font Tuner v2

+ +
Pub Header — Default Theme (no background)
+
+
+
Before (multi-display)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models for academic publishing

+ +
+
+
+
After (Inter)
+
+

The Future of Open Access Publishing and Knowledge Sharing

+

A comprehensive exploration of emerging models for academic publishing

+ +
+
+
+
Pub Header — Light Theme
@@ -519,7 +569,7 @@

Font Tuner v2

The Future of Open Access Publishing and Knowledge Sharing

A comprehensive exploration of emerging models for academic publishing

- +
@@ -527,7 +577,7 @@

The Future of Open Access Publishing and Knowledge Sharing

A comprehensive exploration of emerging models for academic publishing

- +
@@ -540,7 +590,7 @@

The Future of Open Access Publishing and Knowledge Sharing

A comprehensive exploration of emerging models

- +
@@ -548,7 +598,7 @@

The Future of Open Access Publishing and Knowledge Sharing

A comprehensive exploration of emerging models

- +
@@ -561,7 +611,7 @@

The Future of Open Access Publishing and Knowledge Sharing

A comprehensive exploration of emerging models

- +
@@ -569,7 +619,7 @@

The Future of Open Access Publishing and Knowledge Sharing

A comprehensive exploration of emerging models

- +
@@ -579,27 +629,27 @@

Before (multi-display + skolar-latin)
-

1. Introduction to Open Publishing Infrastructure

-

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed.

-

1.1 Historical Context

-

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

-

1.1.1 The Journal Model

-

Peer-reviewed journals remain the gold standard for academic credentialing, yet their business models have come under increasing scrutiny.

-
Subscription-Based Access
-
Paywall Economics
-

A Note on Terminology

+

1. Introduction to Open Publishing Infrastructure

+

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed.

+

1.1 Historical Context

+

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

+

1.1.1 The Journal Model

+

Peer-reviewed journals remain the gold standard for academic credentialing, yet their business models have come under increasing scrutiny.

+
Subscription-Based Access
+
Paywall Economics
+

A Note on Terminology

After (Inter + Source Serif 4)
-

1. Introduction to Open Publishing Infrastructure

-

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed.

-

1.1 Historical Context

-

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

-

1.1.1 The Journal Model

-

Peer-reviewed journals remain the gold standard for academic credentialing, yet their business models have come under increasing scrutiny.

-
Subscription-Based Access
-
Paywall Economics
-

A Note on Terminology

+

1. Introduction to Open Publishing Infrastructure

+

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed.

+

1.1 Historical Context

+

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

+

1.1.1 The Journal Model

+

Peer-reviewed journals remain the gold standard for academic credentialing, yet their business models have come under increasing scrutiny.

+
Subscription-Based Access
+
Paywall Economics
+

A Note on Terminology

@@ -613,6 +663,13 @@

Catherine Ahearn, Travis Rich, Gabriel Stein
A comprehensive exploration of emerging models for academic publishing in the digital age.
+
+
+
+
Medium Preview: Community-Led Research Platforms
+
A comprehensive exploration of emerging models for academic publishing.
+
+
Community-Led Research Platforms
By the Knowledge Futures Lab
@@ -629,6 +686,13 @@
Catherine Ahearn, Travis Rich, Gabriel Stein
A comprehensive exploration of emerging models for academic publishing in the digital age.
+
+
+
+
Medium Preview: Community-Led Research Platforms
+
A comprehensive exploration of emerging models for academic publishing.
+
+
Community-Led Research Platforms
By the Knowledge Futures Lab
@@ -712,7 +776,7 @@

Harvard Data Science Review

A Harvard initiative focusing on foundational thinking, research milestones, and educational innovation in data science.

-

Start building with PubPub today.

+

Start building with PubPub today.

PubPub is free to use. A premium hosted version is available for organizations that need additional support.

From 98edfaf26fa4bf6717c84972e4354551795d11f5 Mon Sep 17 00:00:00 2001 From: Travis Rich Date: Tue, 14 Apr 2026 21:26:44 -0400 Subject: [PATCH 12/13] Tweak PDF output --- .../containers/Pub/PubDocument/pubBody.scss | 4 +- tools/font-tuner.html | 74 +++++++++++++++++++ .../tasks/export/styles/printDocument.scss | 3 + 3 files changed, 79 insertions(+), 2 deletions(-) diff --git a/client/containers/Pub/PubDocument/pubBody.scss b/client/containers/Pub/PubDocument/pubBody.scss index 276a1052d8..5b94ddb72f 100644 --- a/client/containers/Pub/PubDocument/pubBody.scss +++ b/client/containers/Pub/PubDocument/pubBody.scss @@ -5,7 +5,7 @@ $bp: vendor.$bp-namespace; @import 'styles/variables.scss'; @import '../pub.scss'; -$pub-body-font-size: if-is-export(14px, 19px); +$pub-body-font-size: if-is-export(13px, 19px); .pub-body-component .editor.ProseMirror, .pub-body-styles { @@ -93,7 +93,7 @@ $pub-body-font-size: if-is-export(14px, 19px); font-family: $body-font; font-weight: 400; font-style: normal; - line-height: 1.75; + line-height: if-is-export(1.7, 1.75); letter-spacing: -0.023em; word-break: break-word; } diff --git a/tools/font-tuner.html b/tools/font-tuner.html index bd3ed62fb6..13455c3b04 100644 --- a/tools/font-tuner.html +++ b/tools/font-tuner.html @@ -379,6 +379,47 @@

Font Tuner v2

+ +
PDF Export — Cover Title
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
PDF Export — Body
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
Landing — Global
@@ -653,6 +694,39 @@
PDF Export — Cover Page + Body (Letter-size simulation)
+
+
+
Before (multi-display + skolar-latin at export sizes)
+
+
The Future of Open Access Publishing and Knowledge Sharing
+
Catherine Ahearn, Travis Rich, Gabriel Stein
+
Published in Journal of Open Science · Jan 15, 2024
+
+
+

1. Introduction to Open Publishing

+

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed globally.

+

1.1 Historical Context

+

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

+
+
+
+
After (Inter + Source Serif 4)
+
+
The Future of Open Access Publishing and Knowledge Sharing
+
Catherine Ahearn, Travis Rich, Gabriel Stein
+
Published in Journal of Open Science · Jan 15, 2024
+
+
+

1. Introduction to Open Publishing

+

The landscape of academic publishing is undergoing a fundamental transformation. Open-access mandates from funding agencies, combined with new digital-first platforms, are reshaping how research is disseminated and consumed globally.

+

1.1 Historical Context

+

From the earliest scientific journals of the 17th century to modern preprint servers, the mechanisms for sharing knowledge have continuously evolved.

+
+
+
+
Pub Preview — Cards (header font at smaller sizes)
diff --git a/workers/tasks/export/styles/printDocument.scss b/workers/tasks/export/styles/printDocument.scss index a5df3955a0..bdeb5355f9 100644 --- a/workers/tasks/export/styles/printDocument.scss +++ b/workers/tasks/export/styles/printDocument.scss @@ -58,6 +58,9 @@ section.cover { .title { margin-top: 0; font-size: 3em; + font-weight: 600; + letter-spacing: -1.1px; + line-height: 1.4em; } .byline { h3 { From 754c86801c1924ae027b844e7f5cca63369d1c06 Mon Sep 17 00:00:00 2001 From: Travis Rich Date: Tue, 14 Apr 2026 21:40:59 -0400 Subject: [PATCH 13/13] pdf tweaks 2 --- workers/tasks/export/styles/printDocument.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workers/tasks/export/styles/printDocument.scss b/workers/tasks/export/styles/printDocument.scss index bdeb5355f9..4602894687 100644 --- a/workers/tasks/export/styles/printDocument.scss +++ b/workers/tasks/export/styles/printDocument.scss @@ -58,7 +58,7 @@ section.cover { .title { margin-top: 0; font-size: 3em; - font-weight: 600; + font-weight: 800; letter-spacing: -1.1px; line-height: 1.4em; }