From 761f9ca52b9f62ec8a6b9667e72641b0b33cc769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Fazekas?= Date: Mon, 26 Oct 2026 13:09:03 +0100 Subject: [PATCH] Self-host Figtree as the site font Replaces the Open Sans Google Fonts import (regular weight only, so bold was synthesized) with a self-hosted Figtree variable font (300-900, latin subset, SIL OFL 1.1) plus a metric-matched Arial fallback and a preload link. --- docusaurus.config.js | 10 +++ src/css/custom.css | 21 +++++- static/fonts/OFL.txt | 93 ++++++++++++++++++++++++++ static/fonts/figtree-latin-wght.woff2 | Bin 0 -> 20156 bytes 4 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 static/fonts/OFL.txt create mode 100644 static/fonts/figtree-latin-wght.woff2 diff --git a/docusaurus.config.js b/docusaurus.config.js index 4cd8ce31..0b68a98e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -32,6 +32,16 @@ const config = { content: '4d5BqkXr-_mwLPx8aDAONR6uA0d8v6oSPaVFPEn8KK0', }, }, + { + tagName: 'link', + attributes: { + rel: 'preload', + href: '/fonts/figtree-latin-wght.woff2', + as: 'font', + type: 'font/woff2', + crossorigin: 'anonymous', + }, + }, ], onBrokenLinks: 'warn', diff --git a/src/css/custom.css b/src/css/custom.css index f7cc9b26..72df14a0 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -4,7 +4,24 @@ * work well for content-centric websites. */ -@import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap'); +@font-face { + font-family: 'Figtree'; + font-style: normal; + font-weight: 300 900; + font-display: swap; + src: /* webpackIgnore: true */ url('/fonts/figtree-latin-wght.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +/* Metric-matched Arial so the swap to Figtree doesn't shift layout. */ +@font-face { + font-family: 'Figtree Fallback'; + src: local('Arial'); + size-adjust: 100.72%; + ascent-override: 94.32%; + descent-override: 24.82%; + line-gap-override: 0%; +} /* You can override the default Infima variables here. */ :root { @@ -16,7 +33,7 @@ --mbx-black: #23262d; - --ifm-font-family-base: 'Open Sans', sans-serif; + --ifm-font-family-base: 'Figtree', 'Figtree Fallback', system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif; --ifm-font-weight-normal: 400; --ifm-color-font-base: #23262d; diff --git a/static/fonts/OFL.txt b/static/fonts/OFL.txt new file mode 100644 index 00000000..9766a6f8 --- /dev/null +++ b/static/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2022 The Figtree Project Authors (https://github.com/erikdkennedy/figtree) Figtree-Italic[wght].ttf: Copyright 2022 The Figtree Project Authors (https://github.com/erikdkennedy/figtree) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/static/fonts/figtree-latin-wght.woff2 b/static/fonts/figtree-latin-wght.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..05ce657de89207cf12c6a6457c4a1c83ea520626 GIT binary patch literal 20156 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 literal 0 HcmV?d00001