diff --git a/.changeset/heavy-donuts-shave.md b/.changeset/heavy-donuts-shave.md new file mode 100644 index 000000000..08090b54b --- /dev/null +++ b/.changeset/heavy-donuts-shave.md @@ -0,0 +1,5 @@ +--- +"gitbook": patch +--- + +Self-host default Google fonts and inline only the @font-face rules of the fonts a site uses, instead of shipping render-blocking stylesheets covering all 23 families on every page. diff --git a/packages/gitbook/package.json b/packages/gitbook/package.json index 65ac7fcca..716df89a9 100644 --- a/packages/gitbook/package.json +++ b/packages/gitbook/package.json @@ -118,8 +118,9 @@ }, "scripts": { "generate": "./scripts/generate.sh", - "generate:assets": "bun ./scripts/generate-mermaid-runtime.ts && bun ./scripts/generate-scalar-runtime.ts", - "clean": "rm -rf ./.next && rm -rf ./public/~gitbook/static/icons && rm -rf ./public/~gitbook/static/math && rm -rf ./public/~gitbook/static/mermaid && rm -rf ./public/~gitbook/static/scalar", + "generate:assets": "bun ./scripts/generate-mermaid-runtime.ts && bun ./scripts/generate-scalar-runtime.ts && bun ./scripts/download-fonts.ts", + "generate:fonts": "bun ./scripts/generate-font-faces.ts", + "clean": "rm -rf ./.next && rm -rf ./public/~gitbook/static/icons && rm -rf ./public/~gitbook/static/math && rm -rf ./public/~gitbook/static/mermaid && rm -rf ./public/~gitbook/static/scalar && rm -rf ./public/~gitbook/static/fonts", "dev": "bun run generate:assets && env-cmd --silent -f ../../.env.local next --webpack", "build": "bun run generate:assets && next build --webpack", "build:local": "bun run generate:assets && GITBOOK_URL=http://localhost:3000 next build --webpack", diff --git a/packages/gitbook/scripts/download-fonts.ts b/packages/gitbook/scripts/download-fonts.ts new file mode 100644 index 000000000..cd29eb4cd --- /dev/null +++ b/packages/gitbook/scripts/download-fonts.ts @@ -0,0 +1,85 @@ +import { copyFile, mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises'; +import { dirname, join, relative } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import type { FontSourcesData } from '../src/fonts/types'; +import { getFontDefinitionsHash } from './font-definitions-hash'; + +const CONCURRENCY = 8; +const ATTEMPTS = 6; + +const scriptDir = dirname(fileURLToPath(import.meta.url)); +const fontsDir = join(scriptDir, '../src/fonts'); +const outputDir = join(scriptDir, '../public/~gitbook/static/fonts'); +const sourcesPath = join(fontsDir, 'generated/sources.json'); + +const readSources = async () => JSON.parse(await readFile(sourcesPath, 'utf8')) as FontSourcesData; + +let sourcesData = await readSources(); +if (sourcesData.definitionsHash !== (await getFontDefinitionsHash())) { + console.warn( + 'definitions.ts changed since the font manifest was generated — regenerating. Commit the changes in src/fonts/generated.' + ); + await import('./generate-font-faces'); + sourcesData = await readSources(); +} + +const { google, local } = sourcesData; +const sources = new Map(Object.entries(local)); +for (const [googleId, { prefix, files }] of Object.entries(google)) { + for (const file of files) { + sources.set(`${googleId}/${file}`, `${prefix}/${file}`); + } +} + +// Faces move between releases; stale files would otherwise pile up in the deployed assets. +await mkdir(outputDir, { recursive: true }); +for (const entry of await readdir(outputDir, { recursive: true, withFileTypes: true })) { + if (entry.isFile()) { + const file = relative(outputDir, join(entry.parentPath, entry.name)); + if (!sources.has(file)) { + await rm(join(outputDir, file)); + } + } +} + +const pending = [...sources].filter(([file]) => !Bun.file(join(outputDir, file)).size); +if (pending.length > 0) { + console.log(`Downloading ${pending.length} font files…`); +} + +const queue = pending.values(); +await Promise.all(Array.from({ length: CONCURRENCY }, () => worker())); + +async function worker() { + for (const [file, source] of queue) { + const target = join(outputDir, file); + await mkdir(dirname(target), { recursive: true }); + + if (source.startsWith('./')) { + await copyFile(join(fontsDir, source), target); + continue; + } + + await writeFile(target, await fetchWithRetries(source)); + } +} + +// Google Fonts intermittently refuses connections when a build asks for hundreds of files at once, +// and a single miss fails the whole build. +async function fetchWithRetries(url: string): Promise { + for (let attempt = 1; ; attempt++) { + try { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`${response.status} ${response.statusText}`); + } + return Buffer.from(await response.arrayBuffer()); + } catch (error) { + if (attempt >= ATTEMPTS) { + throw new Error(`Unable to download ${url}: ${error}`); + } + await new Promise((resolve) => setTimeout(resolve, 500 * 2 ** attempt)); + } + } +} diff --git a/packages/gitbook/scripts/font-definitions-hash.ts b/packages/gitbook/scripts/font-definitions-hash.ts new file mode 100644 index 000000000..1066a6a82 --- /dev/null +++ b/packages/gitbook/scripts/font-definitions-hash.ts @@ -0,0 +1,11 @@ +import { createHash } from 'node:crypto'; +import { readFile } from 'node:fs/promises'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +export async function getFontDefinitionsHash(): Promise { + const path = join(dirname(fileURLToPath(import.meta.url)), '../src/fonts/definitions.ts'); + return createHash('sha256') + .update(await readFile(path)) + .digest('hex'); +} diff --git a/packages/gitbook/scripts/generate-font-faces.ts b/packages/gitbook/scripts/generate-font-faces.ts new file mode 100644 index 000000000..408e54704 --- /dev/null +++ b/packages/gitbook/scripts/generate-font-faces.ts @@ -0,0 +1,194 @@ +// Regenerates the committed font manifest from the Google Fonts CSS API. download-fonts.ts runs it +// automatically when definitions.ts changed since the last generation; `bun run generate:fonts` +// forces it (e.g. to pick up new Google Fonts releases). +import { createHash } from 'node:crypto'; +import { readFile, writeFile } from 'node:fs/promises'; +import { createRequire } from 'node:module'; +import { basename, dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { ABC_FAVORIT, FONT_DEFINITIONS, type FontDefinition } from '../src/fonts/definitions'; +import type { + FontFacesData, + FontFallbackFaceData, + FontSourcesData, + FontVariantData, +} from '../src/fonts/types'; +import { getFontDefinitionsHash } from './font-definitions-hash'; + +// Google Fonts picks the file format from the user agent — the same modern Chrome `next/font` sends, +// so we keep getting compact woff2 (and vector rather than bitmap emoji). +const USER_AGENT = + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'; + +// The precalculated metrics `next/font/google` uses, so the fallback faces stay identical. +const { calculateSizeAdjustValues } = createRequire(import.meta.url)( + 'next/dist/server/font-utils' +) as { + calculateSizeAdjustValues: (family: string) => { + ascent: string; + descent: string; + lineGap: string; + fallbackFont: string; + sizeAdjust: string; + }; +}; + +type ResolvedFace = { + weight: string; + style: string; + file: string; + source: string; + unicodeRange: string; +}; + +const scriptDir = dirname(fileURLToPath(import.meta.url)); +const faces: FontFacesData = {}; +const sources: FontSourcesData = { + definitionsHash: await getFontDefinitionsHash(), + google: {}, + local: {}, +}; + +for (const [name, definition] of Object.entries(FONT_DEFINITIONS)) { + const resolved = definition.googleId + ? await getGoogleFaces(definition) + : await getABCFavoritFaces(); + + if (resolved.length === 0) { + throw new Error(`No font faces resolved for ${name}`); + } + + recordSources(definition, resolved); + + const subsets = [...new Set(resolved.map((face) => face.unicodeRange))]; + const variants = new Map(); + + for (const face of resolved) { + const key = `${face.weight}|${face.style}`; + let variant = variants.get(key); + if (!variant) { + variant = { weight: face.weight, style: face.style, files: [] }; + variants.set(key, variant); + } + variant.files[subsets.indexOf(face.unicodeRange)] = face.file; + } + + faces[name] = { + family: definition.family, + variable: definition.variable, + fontFamilyValue: [ + `"${definition.family}"`, + ...(definition.adjustFallback ? [`"${definition.family} Fallback"`] : []), + ...definition.fallback, + ].join(','), + subsets, + variants: [...variants.values()], + fallbackFace: definition.adjustFallback ? getFallbackFace(name, definition.family) : null, + ...(definition.googleId ? {} : { ascentOverride: ABC_FAVORIT.ascentOverride }), + }; +} + +const generatedDir = join(scriptDir, '../src/fonts/generated'); +await writeFile(join(generatedDir, 'faces.json'), `${JSON.stringify(faces, null, 4)}\n`); +await writeFile(join(generatedDir, 'sources.json'), `${JSON.stringify(sources, null, 4)}\n`); + +/** Google serves every file of a family from one versioned directory, so only the names differ. */ +function recordSources(definition: FontDefinition, resolved: ResolvedFace[]) { + if (!definition.googleId) { + for (const face of resolved) { + sources.local[face.file] = face.source; + } + return; + } + + const prefixes = new Set( + resolved.map((face) => face.source.slice(0, face.source.lastIndexOf('/'))) + ); + if (prefixes.size !== 1) { + throw new Error(`${definition.family} spans several Google Fonts directories`); + } + + sources.google[definition.googleId] = { + prefix: [...prefixes][0] as string, + files: [...new Set(resolved.map((face) => basename(face.file)))], + }; +} + +async function getGoogleFaces(definition: FontDefinition): Promise { + const { family, googleId, weights } = definition; + const url = `https://fonts.googleapis.com/css2?family=${family.replaceAll(' ', '+')}:wght@${weights.join(';')}&display=swap`; + + const response = await fetch(url, { headers: { 'User-Agent': USER_AGENT } }); + if (!response.ok) { + throw new Error(`Unable to fetch ${family} from Google Fonts: ${response.status} (${url})`); + } + + const resolved = [...(await response.text()).matchAll(/@font-face\s*\{([^}]*)\}/g)].map( + (match) => { + const block = match[1] ?? ''; + const source = read(block, 'src')?.match(/url\((https:[^)]+\.woff2)\)/)?.[1]; + const weight = read(block, 'font-weight'); + const unicodeRange = read(block, 'unicode-range'); + + if (!source || !weight || !unicodeRange) { + throw new Error(`Unexpected @font-face for ${family}: ${block}`); + } + + return { + weight, + style: read(block, 'font-style') ?? 'normal', + // Google's filenames are content-addressed, so the asset can stay immutable. + file: `${googleId}/${basename(new URL(source).pathname)}`, + source, + unicodeRange: unicodeRange.toLowerCase(), + }; + } + ); + + const missing = weights.filter((weight) => !resolved.some((face) => face.weight === weight)); + if (missing.length > 0) { + throw new Error(`Google Fonts returned no ${missing.join('/')} weight for ${family}`); + } + + return resolved; +} + +async function getABCFavoritFaces(): Promise { + return Promise.all( + ABC_FAVORIT.sources.map(async (source) => { + const path = join(scriptDir, '../src/fonts/ABCFavorit', source.file); + const digest = createHash('sha256') + .update(await readFile(path)) + .digest('hex'); + + return { + weight: source.weight, + style: source.style, + file: `abcfavorit/${digest.slice(0, 16)}.woff2`, + source: `./ABCFavorit/${source.file}`, + unicodeRange: '', + }; + }) + ); +} + +function getFallbackFace(name: string, family: string): FontFallbackFaceData { + if (name === 'ABCFavorit') { + return { family: `${family} Fallback`, local: 'Arial', ...ABC_FAVORIT.fallbackMetrics }; + } + + const metrics = calculateSizeAdjustValues(family); + return { + family: `${family} Fallback`, + local: metrics.fallbackFont, + ascentOverride: `${metrics.ascent}%`, + descentOverride: `${metrics.descent}%`, + lineGapOverride: `${metrics.lineGap}%`, + sizeAdjust: `${metrics.sizeAdjust}%`, + }; +} + +function read(block: string, property: string): string | undefined { + return block.match(new RegExp(`${property}\\s*:\\s*([^;]+);`))?.[1]?.trim(); +} diff --git a/packages/gitbook/src/components/RootLayout/CustomizationRootLayout.tsx b/packages/gitbook/src/components/RootLayout/CustomizationRootLayout.tsx index a7af18e60..c3f2d9cb7 100644 --- a/packages/gitbook/src/components/RootLayout/CustomizationRootLayout.tsx +++ b/packages/gitbook/src/components/RootLayout/CustomizationRootLayout.tsx @@ -26,8 +26,12 @@ import { AnnouncementDismissedScript } from '../Announcement'; import { SelectStateScript } from '../Select'; import { OperatingSystemClassScript } from './OperatingSystemClassScript'; import { RootLayoutClientContexts } from './RootLayoutClientContexts'; -import { type FontData, getFontData } from '@/fonts'; -import { fontNotoColorEmoji, fonts } from '@/fonts/default'; +import { + DEFAULT_MONOSPACE_FONT, + type FontData, + generateEmojiFontFacesCSS, + getFontData, +} from '@/fonts'; import './globals.css'; import { getContentLocale, getSpaceLanguage } from '@/intl/server'; import { getAssetURL } from '@/lib/assets'; @@ -91,12 +95,10 @@ export async function CustomizationRootLayout(props: { const fontData = getFontData(customization.styling.font, 'content'); // Temporarily add a if here while the cache is being warmed up. // We can remove the condition after 14-07-2025. - const monospaceFontData = customization.styling.monospaceFont - ? getFontData(customization.styling.monospaceFont, 'mono') - : { - type: 'default' as const, - variable: fonts.IBMPlexMono.variable, - }; + const monospaceFontData = getFontData( + customization.styling.monospaceFont ?? DEFAULT_MONOSPACE_FONT, + 'mono' + ); // Preconnect and preload custom fonts if needed preloadFont(fontData); @@ -127,10 +129,8 @@ export async function CustomizationRootLayout(props: { sidebarStyles.list && `sidebar-list-${sidebarStyles.list}`, 'links' in customization.styling && `links-${customization.styling.links}`, 'depth' in customization.styling && `depth-${customization.styling.depth}`, - fontNotoColorEmoji.variable, - monospaceFontData.type === 'default' ? monospaceFontData.variable : null, - fontData.type === 'default' - ? [fontData.variable, `font-${customization.styling.font}`] + typeof customization.styling.font === 'string' + ? `font-${customization.styling.font}` : null, // Set the dark/light class statically to avoid flashing and make it work when JS is disabled @@ -150,11 +150,10 @@ export async function CustomizationRootLayout(props: { {/* Apply the visitor's content selection to before first paint (no flash) */} - {/* Inject custom font @font-face rules */} - {fontData.type === 'custom' ? : null} - {monospaceFontData.type === 'custom' ? ( - - ) : null} + {/* Only the picked families, so the head never carries every font we support */} + + + {/* Inject a script to detect if the announcmeent banner has been dismissed */} {'announcement' in customization && customization.announcement?.enabled ? ( diff --git a/packages/gitbook/src/fonts/default.ts b/packages/gitbook/src/fonts/default.ts index f2e1df9bf..f8c445f6b 100644 --- a/packages/gitbook/src/fonts/default.ts +++ b/packages/gitbook/src/fonts/default.ts @@ -1,297 +1,83 @@ -import { - DM_Mono, - Fira_Code, - Fira_Sans_Extra_Condensed, - IBM_Plex_Mono, - IBM_Plex_Serif, - Inconsolata, - Inter, - JetBrains_Mono, - Lato, - Merriweather, - Noto_Color_Emoji, - Noto_Sans, - Open_Sans, - Overpass, - Poppins, - Raleway, - Roboto, - Roboto_Mono, - Roboto_Slab, - Source_Code_Pro, - Source_Sans_3, - Space_Mono, - Ubuntu, -} from 'next/font/google'; -import localFont from 'next/font/local'; +import { CustomizationDefaultMonospaceFont } from '@gitbook/api'; -import { CustomizationDefaultFont, CustomizationDefaultMonospaceFont } from '@gitbook/api'; +import { EMOJI_FONT, type FontName } from './definitions'; +import faces from './generated/faces.json'; +import type { FontFacesData, FontFamilyData } from './types'; +import { getAssetURL } from '@/lib/assets'; -export const fontNotoColorEmoji = Noto_Color_Emoji({ - variable: '--font-noto-color-emoji', - weight: ['400'], - preload: false, - display: 'swap', -}); +const fontFaces = faces as FontFacesData; -/* - Fonts are downloaded and loaded by next/font. +// The rules only vary by font, and every page renders a few dozen of them. +const cache = new Map(); - We can't use "preload: true" as otherwise Next will preload all the fonts on the page - while spaces only use one font at a time. - */ +/** Used until the cache has warmed up for sites saved before the setting existed. */ +export const DEFAULT_MONOSPACE_FONT = CustomizationDefaultMonospaceFont.IBMPlexMono; -const inter = Inter({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); +// Emitted per picked family and inlined in the head, so a page never carries the other 20 families +// the way a shared `next/font` stylesheet did. +export function generateDefaultFontFacesCSS(font: FontName): string { + const cached = cache.get(font); + if (cached !== undefined) { + return cached; + } -const firaSans = Fira_Sans_Extra_Condensed({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); + const family = fontFaces[font]; + if (!family) { + throw new Error(`Missing generated font faces for ${font}`); + } -const ibmPlexSerif = IBM_Plex_Serif({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['serif'], -}); + const css = [ + ...family.variants.flatMap((variant) => + variant.files.map((file, subset) => + generateFace(family, variant.weight, variant.style, file, family.subsets[subset]) + ) + ), + generateFallbackFace(family), + `:root { ${family.variable}: ${family.fontFamilyValue}; }`, + ] + .filter(Boolean) + .join('\n'); -const lato = Lato({ - weight: ['400', '700', '900'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); + cache.set(font, css); + return css; +} -const merriweather = Merriweather({ - weight: ['400', '700', '900'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['serif'], -}); +export function generateEmojiFontFacesCSS(): string { + return generateDefaultFontFacesCSS(EMOJI_FONT); +} -const notoSans = Noto_Sans({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); +function generateFace( + family: FontFamilyData, + weight: string, + style: string, + file: string, + unicodeRange: string | undefined +): string { + return `@font-face { + font-family: "${family.family}"; + font-style: ${style}; + font-weight: ${weight}; + font-display: swap;${family.ascentOverride ? `\n ascent-override: ${family.ascentOverride};` : ''} + src: url(${getAssetURL(`fonts/${file}`)}) format("woff2");${ + unicodeRange ? `\n unicode-range: ${unicodeRange};` : '' + } +}`; +} -const openSans = Open_Sans({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); +// A `local()` face with the real font's metrics: the page keeps the system font's glyphs but the +// picked font's proportions, so swapping it in barely shifts the layout. +function generateFallbackFace(family: FontFamilyData): string { + const fallback = family.fallbackFace; + if (!fallback) { + return ''; + } -const overpass = Overpass({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); - -const poppins = Poppins({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); - -const raleway = Raleway({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); - -const roboto = Roboto({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); - -const robotoSlab = Roboto_Slab({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); - -const sourceSansPro = Source_Sans_3({ - weight: ['400', '500', '600', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); - -const ubuntu = Ubuntu({ - weight: ['400', '500', '700'], - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], -}); - -const abcFavorit = localFont({ - variable: '--font-content', - preload: false, - display: 'swap', - fallback: ['system-ui', 'arial'], - src: [ - { - path: './ABCFavorit/ABCFavorit-Variable.woff2', - weight: '400 700', - style: 'normal', - }, - { - path: './ABCFavorit/ABCFavorit-BoldItalic.woff2', - weight: '700', - style: 'italic', - }, - { - path: './ABCFavorit/ABCFavorit-MediumItalic.woff2', - weight: '500', - style: 'italic', - }, - { - path: './ABCFavorit/ABCFavorit-RegularItalic.woff2', - weight: '400', - style: 'italic', - }, - ], - declarations: [{ prop: 'ascent-override', value: '100%' }], -}); - -const ibmPlexMono = IBM_Plex_Mono({ - weight: ['400', '500', '600', '700'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -const dmMono = DM_Mono({ - weight: ['400', '500'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -const firaCode = Fira_Code({ - weight: ['400', '500', '600', '700'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -const inconsolata = Inconsolata({ - weight: ['400', '500', '600', '700'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -const jetBrainsMono = JetBrains_Mono({ - weight: ['400', '500', '600', '700'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -const robotoMono = Roboto_Mono({ - weight: ['400', '500', '600', '700'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -const sourceCodePro = Source_Code_Pro({ - weight: ['400', '500', '600', '700'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -const spaceMono = Space_Mono({ - weight: ['400', '700'], - variable: '--font-mono', - style: 'normal', - display: 'swap', - preload: false, - fallback: ['monospace'], - adjustFontFallback: false, -}); - -/** - * Font definitions. - */ -export const fonts: { - [fontName in CustomizationDefaultFont | CustomizationDefaultMonospaceFont]: { - variable: string; - }; -} = { - [CustomizationDefaultFont.Inter]: inter, - [CustomizationDefaultFont.FiraSans]: firaSans, - [CustomizationDefaultFont.IBMPlexSerif]: ibmPlexSerif, - [CustomizationDefaultFont.Lato]: lato, - [CustomizationDefaultFont.Merriweather]: merriweather, - [CustomizationDefaultFont.NotoSans]: notoSans, - [CustomizationDefaultFont.OpenSans]: openSans, - [CustomizationDefaultFont.Overpass]: overpass, - [CustomizationDefaultFont.Poppins]: poppins, - [CustomizationDefaultFont.Raleway]: raleway, - [CustomizationDefaultFont.Roboto]: roboto, - [CustomizationDefaultFont.RobotoSlab]: robotoSlab, - [CustomizationDefaultFont.SourceSansPro]: sourceSansPro, - [CustomizationDefaultFont.Ubuntu]: ubuntu, - [CustomizationDefaultFont.ABCFavorit]: abcFavorit, - [CustomizationDefaultMonospaceFont.IBMPlexMono]: ibmPlexMono, - [CustomizationDefaultMonospaceFont.DMMono]: dmMono, - [CustomizationDefaultMonospaceFont.FiraCode]: firaCode, - [CustomizationDefaultMonospaceFont.Inconsolata]: inconsolata, - [CustomizationDefaultMonospaceFont.JetBrainsMono]: jetBrainsMono, - [CustomizationDefaultMonospaceFont.RobotoMono]: robotoMono, - [CustomizationDefaultMonospaceFont.SourceCodePro]: sourceCodePro, - [CustomizationDefaultMonospaceFont.SpaceMono]: spaceMono, -}; + return `@font-face { + font-family: "${fallback.family}"; + src: local("${fallback.local}"); + ascent-override: ${fallback.ascentOverride}; + descent-override: ${fallback.descentOverride}; + line-gap-override: ${fallback.lineGapOverride}; + size-adjust: ${fallback.sizeAdjust}; +}`; +} diff --git a/packages/gitbook/src/fonts/definitions.ts b/packages/gitbook/src/fonts/definitions.ts new file mode 100644 index 000000000..93cc73b29 --- /dev/null +++ b/packages/gitbook/src/fonts/definitions.ts @@ -0,0 +1,178 @@ +import { CustomizationDefaultFont, CustomizationDefaultMonospaceFont } from '@gitbook/api'; + +/** The emoji font is always loaded, alongside whichever content and monospace fonts a site picked. */ +export const EMOJI_FONT = 'NotoColorEmoji'; + +export type FontName = + | CustomizationDefaultFont + | CustomizationDefaultMonospaceFont + | typeof EMOJI_FONT; + +export interface FontDefinition { + /** `font-family` to declare the faces under. */ + family: string; + /** Family id on Google Fonts, or `null` for the fonts we ship ourselves. */ + googleId: string | null; + weights: string[]; + /** CSS variable the family is exposed as. */ + variable: '--font-content' | '--font-mono' | '--font-noto-color-emoji'; + /** Families appended after the (metric-adjusted) fallback. */ + fallback: string[]; + /** Declare a ` Fallback` face with metric overrides, so the swap shifts layout as + * little as possible. Monospace fonts opt out, as they did under `next/font`. */ + adjustFallback: boolean; +} + +const content = ( + family: string, + googleId: string, + weights: string[], + fallback: string[] = ['system-ui', 'arial'] +): FontDefinition => ({ + family, + googleId, + weights, + variable: '--font-content', + fallback, + adjustFallback: true, +}); + +const mono = (family: string, googleId: string, weights: string[]): FontDefinition => ({ + family, + googleId, + weights, + variable: '--font-mono', + fallback: ['monospace'], + adjustFallback: false, +}); + +export const FONT_DEFINITIONS: Record = { + [CustomizationDefaultFont.Inter]: content('Inter', 'inter', ['400', '500', '600', '700']), + [CustomizationDefaultFont.FiraSans]: content( + 'Fira Sans Extra Condensed', + 'fira-sans-extra-condensed', + ['400', '500', '600', '700'] + ), + [CustomizationDefaultFont.IBMPlexSerif]: content( + 'IBM Plex Serif', + 'ibm-plex-serif', + ['400', '500', '600', '700'], + ['serif'] + ), + [CustomizationDefaultFont.Lato]: content('Lato', 'lato', ['400', '700', '900']), + [CustomizationDefaultFont.Merriweather]: content( + 'Merriweather', + 'merriweather', + ['400', '700', '900'], + ['serif'] + ), + [CustomizationDefaultFont.NotoSans]: content('Noto Sans', 'noto-sans', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultFont.OpenSans]: content('Open Sans', 'open-sans', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultFont.Overpass]: content('Overpass', 'overpass', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultFont.Poppins]: content('Poppins', 'poppins', ['400', '500', '600', '700']), + [CustomizationDefaultFont.Raleway]: content('Raleway', 'raleway', ['400', '500', '600', '700']), + [CustomizationDefaultFont.Roboto]: content('Roboto', 'roboto', ['400', '500', '600', '700']), + [CustomizationDefaultFont.RobotoSlab]: content('Roboto Slab', 'roboto-slab', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultFont.SourceSansPro]: content('Source Sans 3', 'source-sans-3', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultFont.Ubuntu]: content('Ubuntu', 'ubuntu', ['400', '500', '700']), + [CustomizationDefaultFont.ABCFavorit]: { + family: 'abcFavorit', + googleId: null, + weights: [], + variable: '--font-content', + fallback: ['system-ui', 'arial'], + adjustFallback: true, + }, + + [CustomizationDefaultMonospaceFont.IBMPlexMono]: mono('IBM Plex Mono', 'ibm-plex-mono', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultMonospaceFont.DMMono]: mono('DM Mono', 'dm-mono', ['400', '500']), + [CustomizationDefaultMonospaceFont.FiraCode]: mono('Fira Code', 'fira-code', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultMonospaceFont.Inconsolata]: mono('Inconsolata', 'inconsolata', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultMonospaceFont.JetBrainsMono]: mono('JetBrains Mono', 'jetbrains-mono', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultMonospaceFont.RobotoMono]: mono('Roboto Mono', 'roboto-mono', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultMonospaceFont.SourceCodePro]: mono('Source Code Pro', 'source-code-pro', [ + '400', + '500', + '600', + '700', + ]), + [CustomizationDefaultMonospaceFont.SpaceMono]: mono('Space Mono', 'space-mono', ['400', '700']), + + [EMOJI_FONT]: { + family: 'Noto Color Emoji', + googleId: 'noto-color-emoji', + weights: ['400'], + variable: '--font-noto-color-emoji', + fallback: [], + adjustFallback: true, + }, +}; + +// `abcFavorit` is licensed, so it ships in the repo instead of coming from Google Fonts. The +// fallback metrics are the ones `next/font/local` measured from these exact files with fontkit. +export const ABC_FAVORIT = { + sources: [ + { file: 'ABCFavorit-Variable.woff2', weight: '400 700', style: 'normal' }, + { file: 'ABCFavorit-BoldItalic.woff2', weight: '700', style: 'italic' }, + { file: 'ABCFavorit-MediumItalic.woff2', weight: '500', style: 'italic' }, + { file: 'ABCFavorit-RegularItalic.woff2', weight: '400', style: 'italic' }, + ], + /** The design sits low in its em box; without this the fallback swap jumps vertically. */ + ascentOverride: '100%', + fallbackMetrics: { + ascentOverride: '90.97%', + descentOverride: '37.34%', + lineGapOverride: '0.00%', + sizeAdjust: '104.43%', + }, +} as const; diff --git a/packages/gitbook/src/fonts/generated/faces.json b/packages/gitbook/src/fonts/generated/faces.json new file mode 100644 index 000000000..6954c8bc9 --- /dev/null +++ b/packages/gitbook/src/fonts/generated/faces.json @@ -0,0 +1,1488 @@ +{ + "Inter": { + "family": "Inter", + "variable": "--font-content", + "fontFamilyValue": "\"Inter\",\"Inter Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2", + "inter/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2" + ] + } + ], + "fallbackFace": { + "family": "Inter Fallback", + "local": "Arial", + "ascentOverride": "90.44%", + "descentOverride": "22.52%", + "lineGapOverride": "0.00%", + "sizeAdjust": "107.12%" + } + }, + "FiraSans": { + "family": "Fira Sans Extra Condensed", + "variable": "--font-content", + "fontFamilyValue": "\"Fira Sans Extra Condensed\",\"Fira Sans Extra Condensed Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "fira-sans-extra-condensed/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fKuulWcrE5Hcg.woff2", + "fira-sans-extra-condensed/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fuuulWcrE5Hcg.woff2", + "fira-sans-extra-condensed/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fOuulWcrE5Hcg.woff2", + "fira-sans-extra-condensed/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fyuulWcrE5Hcg.woff2", + "fira-sans-extra-condensed/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fCuulWcrE5Hcg.woff2", + "fira-sans-extra-condensed/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fGuulWcrE5Hcg.woff2", + "fira-sans-extra-condensed/NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1f-uulWcrE4.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3W-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3y-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3S-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3u-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3e-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3a-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3i-oWR9e2U.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3W-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3y-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3S-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3u-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3e-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3a-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3i-oWR9e2U.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3W-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3y-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3S-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3u-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3e-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3a-oWR9e2WPJQ.woff2", + "fira-sans-extra-condensed/NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3i-oWR9e2U.woff2" + ] + } + ], + "fallbackFace": { + "family": "Fira Sans Extra Condensed Fallback", + "local": "Arial", + "ascentOverride": "109.98%", + "descentOverride": "31.17%", + "lineGapOverride": "0.00%", + "sizeAdjust": "85.02%" + } + }, + "IBMPlexSerif": { + "family": "IBM Plex Serif", + "variable": "--font-content", + "fontFamilyValue": "\"IBM Plex Serif\",\"IBM Plex Serif Fallback\",serif", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "ibm-plex-serif/jizDREVNn1dOx-zrZ2X3pZvkTiUS2zcZiVbJsNo.woff2", + "ibm-plex-serif/jizDREVNn1dOx-zrZ2X3pZvkTiUb2zcZiVbJsNo.woff2", + "ibm-plex-serif/jizDREVNn1dOx-zrZ2X3pZvkTiUQ2zcZiVbJsNo.woff2", + "ibm-plex-serif/jizDREVNn1dOx-zrZ2X3pZvkTiUR2zcZiVbJsNo.woff2", + "ibm-plex-serif/jizDREVNn1dOx-zrZ2X3pZvkTiUf2zcZiVbJ.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI5q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3s-CIwq1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI7q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI6q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI0q1vjitOh.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI5q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3A_yIwq1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI7q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI6q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI0q1vjitOh.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI5q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi2k_iIwq1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI7q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI6q1vjitOh3oc.woff2", + "ibm-plex-serif/jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI0q1vjitOh.woff2" + ] + } + ], + "fallbackFace": { + "family": "IBM Plex Serif Fallback", + "local": "Times New Roman", + "ascentOverride": "88.04%", + "descentOverride": "23.62%", + "lineGapOverride": "0.00%", + "sizeAdjust": "116.43%" + } + }, + "Lato": { + "family": "Lato", + "variable": "--font-content", + "fontFamilyValue": "\"Lato\",\"Lato Fallback\",system-ui,arial", + "subsets": [ + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "lato/S6uyw4BMUTPHjxAwXiWtFCfQ7A.woff2", + "lato/S6uyw4BMUTPHjx4wXiWtFCc.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "lato/S6u9w4BMUTPHh6UVSwaPGQ3q5d0N7w.woff2", + "lato/S6u9w4BMUTPHh6UVSwiPGQ3q5d0.woff2" + ] + }, + { + "weight": "900", + "style": "normal", + "files": [ + "lato/S6u9w4BMUTPHh50XSwaPGQ3q5d0N7w.woff2", + "lato/S6u9w4BMUTPHh50XSwiPGQ3q5d0.woff2" + ] + } + ], + "fallbackFace": { + "family": "Lato Fallback", + "local": "Arial", + "ascentOverride": "101.03%", + "descentOverride": "21.80%", + "lineGapOverride": "0.00%", + "sizeAdjust": "97.69%" + } + }, + "Merriweather": { + "family": "Merriweather", + "variable": "--font-content", + "fontFamilyValue": "\"Merriweather\",\"Merriweather Fallback\",serif", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.woff2" + ] + }, + { + "weight": "900", + "style": "normal", + "files": [ + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.woff2", + "merriweather/u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.woff2" + ] + } + ], + "fallbackFace": { + "family": "Merriweather Fallback", + "local": "Times New Roman", + "ascentOverride": "80.59%", + "descentOverride": "22.36%", + "lineGapOverride": "0.00%", + "sizeAdjust": "122.09%" + } + }, + "NotoSans": { + "family": "Noto Sans", + "variable": "--font-content", + "fontFamilyValue": "\"Noto Sans\",\"Noto Sans Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0900-097f, u+1cd0-1cf9, u+200c-200d, u+20a8, u+20b9, u+20f0, u+25cc, u+a830-a839, u+a8e0-a8ff, u+11b00-11b09", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aPdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5ardu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a_du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aLdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a3du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aHdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aDdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a7du3mhPy0.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aPdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5ardu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a_du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aLdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a3du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aHdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aDdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a7du3mhPy0.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aPdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5ardu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a_du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aLdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a3du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aHdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aDdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a7du3mhPy0.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aPdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5ardu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a_du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aLdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a3du3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aHdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aDdu3mhPy1Fig.woff2", + "noto-sans/o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a7du3mhPy0.woff2" + ] + } + ], + "fallbackFace": { + "family": "Noto Sans Fallback", + "local": "Arial", + "ascentOverride": "100.54%", + "descentOverride": "27.56%", + "lineGapOverride": "0.00%", + "sizeAdjust": "106.33%" + } + }, + "OpenSans": { + "family": "Open Sans", + "variable": "--font-content", + "fontFamilyValue": "\"Open Sans\",\"Open Sans Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0307-0308, u+0590-05ff, u+200c-2010, u+20aa, u+25cc, u+fb1d-fb4f", + "u+0302-0303, u+0305, u+0307-0308, u+0310, u+0312, u+0315, u+031a, u+0326-0327, u+032c, u+032f-0330, u+0332-0333, u+0338, u+033a, u+0346, u+034d, u+0391-03a1, u+03a3-03a9, u+03b1-03c9, u+03d1, u+03d5-03d6, u+03f0-03f1, u+03f4-03f5, u+2016-2017, u+2034-2038, u+203c, u+2040, u+2043, u+2047, u+2050, u+2057, u+205f, u+2070-2071, u+2074-208e, u+2090-209c, u+20d0-20dc, u+20e1, u+20e5-20ef, u+2100-2112, u+2114-2115, u+2117-2121, u+2123-214f, u+2190, u+2192, u+2194-21ae, u+21b0-21e5, u+21f1-21f2, u+21f4-2211, u+2213-2214, u+2216-22ff, u+2308-230b, u+2310, u+2319, u+231c-2321, u+2336-237a, u+237c, u+2395, u+239b-23b7, u+23d0, u+23dc-23e1, u+2474-2475, u+25af, u+25b3, u+25b7, u+25bd, u+25c1, u+25ca, u+25cc, u+25fb, u+266d-266f, u+27c0-27ff, u+2900-2aff, u+2b0e-2b11, u+2b30-2b4c, u+2bfe, u+3030, u+ff5b, u+ff5d, u+1d400-1d7ff, u+1ee00-1eeff", + "u+0001-000c, u+000e-001f, u+007f-009f, u+20dd-20e0, u+20e2-20e4, u+2150-218f, u+2190, u+2192, u+2194-2199, u+21af, u+21e6-21f0, u+21f3, u+2218-2219, u+2299, u+22c4-22c6, u+2300-243f, u+2440-244a, u+2460-24ff, u+25a0-27bf, u+2800-28ff, u+2921-2922, u+2981, u+29bf, u+29eb, u+2b00-2bff, u+4dc0-4dff, u+fff9-fffb, u+10140-1018e, u+10190-1019c, u+101a0, u+101d0-101fd, u+102e0-102fb, u+10e60-10e7e, u+1d2c0-1d2d3, u+1d2e0-1d37f, u+1f000-1f0ff, u+1f100-1f1ad, u+1f1e6-1f1ff, u+1f30d-1f30f, u+1f315, u+1f31c, u+1f31e, u+1f320-1f32c, u+1f336, u+1f378, u+1f37d, u+1f382, u+1f393-1f39f, u+1f3a7-1f3a8, u+1f3ac-1f3af, u+1f3c2, u+1f3c4-1f3c6, u+1f3ca-1f3ce, u+1f3d4-1f3e0, u+1f3ed, u+1f3f1-1f3f3, u+1f3f5-1f3f7, u+1f408, u+1f415, u+1f41f, u+1f426, u+1f43f, u+1f441-1f442, u+1f444, u+1f446-1f449, u+1f44c-1f44e, u+1f453, u+1f46a, u+1f47d, u+1f4a3, u+1f4b0, u+1f4b3, u+1f4b9, u+1f4bb, u+1f4bf, u+1f4c8-1f4cb, u+1f4d6, u+1f4da, u+1f4df, u+1f4e3-1f4e6, u+1f4ea-1f4ed, u+1f4f7, u+1f4f9-1f4fb, u+1f4fd-1f4fe, u+1f503, u+1f507-1f50b, u+1f50d, u+1f512-1f513, u+1f53e-1f54a, u+1f54f-1f5fa, u+1f610, u+1f650-1f67f, u+1f687, u+1f68d, u+1f691, u+1f694, u+1f698, u+1f6ad, u+1f6b2, u+1f6b9-1f6ba, u+1f6bc, u+1f6c6-1f6cf, u+1f6d3-1f6d7, u+1f6e0-1f6ea, u+1f6f0-1f6f3, u+1f6f7-1f6fc, u+1f700-1f7ff, u+1f800-1f80b, u+1f810-1f847, u+1f850-1f859, u+1f860-1f887, u+1f890-1f8ad, u+1f8b0-1f8bb, u+1f8c0-1f8c1, u+1f900-1f90b, u+1f93b, u+1f946, u+1f984, u+1f996, u+1f9e9, u+1fa00-1fa6f, u+1fa70-1fa7c, u+1fa80-1fa89, u+1fa8f-1fac6, u+1face-1fadc, u+1fadf-1fae9, u+1faf0-1faf8, u+1fb00-1fbff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu0SC55K5gw.woff2", + "open-sans/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2" + ] + } + ], + "fallbackFace": { + "family": "Open Sans Fallback", + "local": "Arial", + "ascentOverride": "101.65%", + "descentOverride": "27.86%", + "lineGapOverride": "0.00%", + "sizeAdjust": "105.15%" + } + }, + "Overpass": { + "family": "Overpass", + "variable": "--font-content", + "fontFamilyValue": "\"Overpass\",\"Overpass Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "overpass/qFdH35WCmI96Ajtm81GoU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GhU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GqU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GrU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GlU9vgwBcI.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "overpass/qFdH35WCmI96Ajtm81GoU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GhU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GqU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GrU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GlU9vgwBcI.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "overpass/qFdH35WCmI96Ajtm81GoU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GhU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GqU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GrU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GlU9vgwBcI.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "overpass/qFdH35WCmI96Ajtm81GoU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GhU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GqU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GrU9vgwBcIs1s.woff2", + "overpass/qFdH35WCmI96Ajtm81GlU9vgwBcI.woff2" + ] + } + ], + "fallbackFace": { + "family": "Overpass Fallback", + "local": "Arial", + "ascentOverride": "87.67%", + "descentOverride": "38.03%", + "lineGapOverride": "0.00%", + "sizeAdjust": "100.72%" + } + }, + "Poppins": { + "family": "Poppins", + "variable": "--font-content", + "fontFamilyValue": "\"Poppins\",\"Poppins Fallback\",system-ui,arial", + "subsets": [ + "u+0900-097f, u+1cd0-1cf9, u+200c-200d, u+20a8, u+20b9, u+20f0, u+25cc, u+a830-a839, u+a8e0-a8ff, u+11b00-11b09", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "poppins/pxiEyp8kv8JHgFVrJJbecnFHGPezSQ.woff2", + "poppins/pxiEyp8kv8JHgFVrJJnecnFHGPezSQ.woff2", + "poppins/pxiEyp8kv8JHgFVrJJfecnFHGPc.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "poppins/pxiByp8kv8JHgFVrLGT9Z11lFd2JQEl8qw.woff2", + "poppins/pxiByp8kv8JHgFVrLGT9Z1JlFd2JQEl8qw.woff2", + "poppins/pxiByp8kv8JHgFVrLGT9Z1xlFd2JQEk.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "poppins/pxiByp8kv8JHgFVrLEj6Z11lFd2JQEl8qw.woff2", + "poppins/pxiByp8kv8JHgFVrLEj6Z1JlFd2JQEl8qw.woff2", + "poppins/pxiByp8kv8JHgFVrLEj6Z1xlFd2JQEk.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "poppins/pxiByp8kv8JHgFVrLCz7Z11lFd2JQEl8qw.woff2", + "poppins/pxiByp8kv8JHgFVrLCz7Z1JlFd2JQEl8qw.woff2", + "poppins/pxiByp8kv8JHgFVrLCz7Z1xlFd2JQEk.woff2" + ] + } + ], + "fallbackFace": { + "family": "Poppins Fallback", + "local": "Arial", + "ascentOverride": "93.62%", + "descentOverride": "31.21%", + "lineGapOverride": "8.92%", + "sizeAdjust": "112.16%" + } + }, + "Raleway": { + "family": "Raleway", + "variable": "--font-content", + "fontFamilyValue": "\"Raleway\",\"Raleway Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "raleway/1Ptug8zYS_SKggPNyCAIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCkIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCIIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCMIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyC0IT4ttDfA.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "raleway/1Ptug8zYS_SKggPNyCAIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCkIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCIIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCMIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyC0IT4ttDfA.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "raleway/1Ptug8zYS_SKggPNyCAIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCkIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCIIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCMIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyC0IT4ttDfA.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "raleway/1Ptug8zYS_SKggPNyCAIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCkIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCIIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyCMIT4ttDfCmxA.woff2", + "raleway/1Ptug8zYS_SKggPNyC0IT4ttDfA.woff2" + ] + } + ], + "fallbackFace": { + "family": "Raleway Fallback", + "local": "Arial", + "ascentOverride": "90.51%", + "descentOverride": "22.53%", + "lineGapOverride": "0.00%", + "sizeAdjust": "103.86%" + } + }, + "Roboto": { + "family": "Roboto", + "variable": "--font-content", + "fontFamilyValue": "\"Roboto\",\"Roboto Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0302-0303, u+0305, u+0307-0308, u+0310, u+0312, u+0315, u+031a, u+0326-0327, u+032c, u+032f-0330, u+0332-0333, u+0338, u+033a, u+0346, u+034d, u+0391-03a1, u+03a3-03a9, u+03b1-03c9, u+03d1, u+03d5-03d6, u+03f0-03f1, u+03f4-03f5, u+2016-2017, u+2034-2038, u+203c, u+2040, u+2043, u+2047, u+2050, u+2057, u+205f, u+2070-2071, u+2074-208e, u+2090-209c, u+20d0-20dc, u+20e1, u+20e5-20ef, u+2100-2112, u+2114-2115, u+2117-2121, u+2123-214f, u+2190, u+2192, u+2194-21ae, u+21b0-21e5, u+21f1-21f2, u+21f4-2211, u+2213-2214, u+2216-22ff, u+2308-230b, u+2310, u+2319, u+231c-2321, u+2336-237a, u+237c, u+2395, u+239b-23b7, u+23d0, u+23dc-23e1, u+2474-2475, u+25af, u+25b3, u+25b7, u+25bd, u+25c1, u+25ca, u+25cc, u+25fb, u+266d-266f, u+27c0-27ff, u+2900-2aff, u+2b0e-2b11, u+2b30-2b4c, u+2bfe, u+3030, u+ff5b, u+ff5d, u+1d400-1d7ff, u+1ee00-1eeff", + "u+0001-000c, u+000e-001f, u+007f-009f, u+20dd-20e0, u+20e2-20e4, u+2150-218f, u+2190, u+2192, u+2194-2199, u+21af, u+21e6-21f0, u+21f3, u+2218-2219, u+2299, u+22c4-22c6, u+2300-243f, u+2440-244a, u+2460-24ff, u+25a0-27bf, u+2800-28ff, u+2921-2922, u+2981, u+29bf, u+29eb, u+2b00-2bff, u+4dc0-4dff, u+fff9-fffb, u+10140-1018e, u+10190-1019c, u+101a0, u+101d0-101fd, u+102e0-102fb, u+10e60-10e7e, u+1d2c0-1d2d3, u+1d2e0-1d37f, u+1f000-1f0ff, u+1f100-1f1ad, u+1f1e6-1f1ff, u+1f30d-1f30f, u+1f315, u+1f31c, u+1f31e, u+1f320-1f32c, u+1f336, u+1f378, u+1f37d, u+1f382, u+1f393-1f39f, u+1f3a7-1f3a8, u+1f3ac-1f3af, u+1f3c2, u+1f3c4-1f3c6, u+1f3ca-1f3ce, u+1f3d4-1f3e0, u+1f3ed, u+1f3f1-1f3f3, u+1f3f5-1f3f7, u+1f408, u+1f415, u+1f41f, u+1f426, u+1f43f, u+1f441-1f442, u+1f444, u+1f446-1f449, u+1f44c-1f44e, u+1f453, u+1f46a, u+1f47d, u+1f4a3, u+1f4b0, u+1f4b3, u+1f4b9, u+1f4bb, u+1f4bf, u+1f4c8-1f4cb, u+1f4d6, u+1f4da, u+1f4df, u+1f4e3-1f4e6, u+1f4ea-1f4ed, u+1f4f7, u+1f4f9-1f4fb, u+1f4fd-1f4fe, u+1f503, u+1f507-1f50b, u+1f50d, u+1f512-1f513, u+1f53e-1f54a, u+1f54f-1f5fa, u+1f610, u+1f650-1f67f, u+1f687, u+1f68d, u+1f691, u+1f694, u+1f698, u+1f6ad, u+1f6b2, u+1f6b9-1f6ba, u+1f6bc, u+1f6c6-1f6cf, u+1f6d3-1f6d7, u+1f6e0-1f6ea, u+1f6f0-1f6f3, u+1f6f7-1f6fc, u+1f700-1f7ff, u+1f800-1f80b, u+1f810-1f847, u+1f850-1f859, u+1f860-1f887, u+1f890-1f8ad, u+1f8b0-1f8bb, u+1f8c0-1f8c1, u+1f900-1f90b, u+1f93b, u+1f946, u+1f984, u+1f996, u+1f9e9, u+1fa00-1fa6f, u+1fa70-1fa7c, u+1fa80-1fa89, u+1fa8f-1fac6, u+1face-1fadc, u+1fadf-1fae9, u+1faf0-1faf8, u+1fb00-1fbff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2", + "roboto/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2" + ] + } + ], + "fallbackFace": { + "family": "Roboto Fallback", + "local": "Arial", + "ascentOverride": "92.98%", + "descentOverride": "24.47%", + "lineGapOverride": "0.00%", + "sizeAdjust": "99.78%" + } + }, + "RobotoSlab": { + "family": "Roboto Slab", + "variable": "--font-content", + "fontFamilyValue": "\"Roboto Slab\",\"Roboto Slab Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufA5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufJ5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufB5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufO5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufC5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufD5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufN5qWr4xCC.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufA5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufJ5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufB5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufO5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufC5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufD5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufN5qWr4xCC.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufA5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufJ5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufB5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufO5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufC5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufD5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufN5qWr4xCC.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufA5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufJ5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufB5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufO5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufC5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufD5qWr4xCCQ_k.woff2", + "roboto-slab/BngMUXZYTXPIvIBgJJSb6ufN5qWr4xCC.woff2" + ] + } + ], + "fallbackFace": { + "family": "Roboto Slab Fallback", + "local": "Times New Roman", + "ascentOverride": "89.69%", + "descentOverride": "23.20%", + "lineGapOverride": "0.00%", + "sizeAdjust": "116.83%" + } + }, + "SourceSansPro": { + "family": "Source Sans 3", + "variable": "--font-content", + "fontFamilyValue": "\"Source Sans 3\",\"Source Sans 3 Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wIaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wsaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wMaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wwaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wAaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wEaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3w8aZejf5Hc.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wIaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wsaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wMaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wwaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wAaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wEaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3w8aZejf5Hc.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wIaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wsaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wMaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wwaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wAaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wEaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3w8aZejf5Hc.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wIaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wsaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wMaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wwaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wAaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3wEaZejf5HdF8Q.woff2", + "source-sans-3/nwpStKy2OAdR1K-IwhWudF-R3w8aZejf5Hc.woff2" + ] + } + ], + "fallbackFace": { + "family": "Source Sans 3 Fallback", + "local": "Arial", + "ascentOverride": "109.21%", + "descentOverride": "42.66%", + "lineGapOverride": "0.00%", + "sizeAdjust": "93.76%" + } + }, + "Ubuntu": { + "family": "Ubuntu", + "variable": "--font-content", + "fontFamilyValue": "\"Ubuntu\",\"Ubuntu Fallback\",system-ui,arial", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "ubuntu/4iCs6KVjbNBYlgoKcg72nU6AF7xm.woff2", + "ubuntu/4iCs6KVjbNBYlgoKew72nU6AF7xm.woff2", + "ubuntu/4iCs6KVjbNBYlgoKcw72nU6AF7xm.woff2", + "ubuntu/4iCs6KVjbNBYlgoKfA72nU6AF7xm.woff2", + "ubuntu/4iCs6KVjbNBYlgoKcQ72nU6AF7xm.woff2", + "ubuntu/4iCs6KVjbNBYlgoKfw72nU6AFw.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "ubuntu/4iCv6KVjbNBYlgoCjC3jvWyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCjC3jtGyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCjC3jvGyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCjC3js2yNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCjC3jvmyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCjC3jsGyNPYZvgw.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "ubuntu/4iCv6KVjbNBYlgoCxCvjvWyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCxCvjtGyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCxCvjvGyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCxCvjs2yNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCxCvjvmyNPYZvg7UI.woff2", + "ubuntu/4iCv6KVjbNBYlgoCxCvjsGyNPYZvgw.woff2" + ] + } + ], + "fallbackFace": { + "family": "Ubuntu Fallback", + "local": "Arial", + "ascentOverride": "91.32%", + "descentOverride": "18.52%", + "lineGapOverride": "2.74%", + "sizeAdjust": "102.06%" + } + }, + "ABCFavorit": { + "family": "abcFavorit", + "variable": "--font-content", + "fontFamilyValue": "\"abcFavorit\",\"abcFavorit Fallback\",system-ui,arial", + "subsets": [""], + "variants": [ + { + "weight": "400 700", + "style": "normal", + "files": ["abcfavorit/7bb31c73cb8d820e.woff2"] + }, + { + "weight": "700", + "style": "italic", + "files": ["abcfavorit/aed849de6e333605.woff2"] + }, + { + "weight": "500", + "style": "italic", + "files": ["abcfavorit/b435fb7330f5e171.woff2"] + }, + { + "weight": "400", + "style": "italic", + "files": ["abcfavorit/aee27c224ccd5167.woff2"] + } + ], + "fallbackFace": { + "family": "abcFavorit Fallback", + "local": "Arial", + "ascentOverride": "90.97%", + "descentOverride": "37.34%", + "lineGapOverride": "0.00%", + "sizeAdjust": "104.43%" + }, + "ascentOverride": "100%" + }, + "IBMPlexMono": { + "family": "IBM Plex Mono", + "variable": "--font-mono", + "fontFamilyValue": "\"IBM Plex Mono\",monospace", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "ibm-plex-mono/-F63fjptAgt5VM-kVkqdyU8n1iIq131nj-otFQ.woff2", + "ibm-plex-mono/-F63fjptAgt5VM-kVkqdyU8n1isq131nj-otFQ.woff2", + "ibm-plex-mono/-F63fjptAgt5VM-kVkqdyU8n1iAq131nj-otFQ.woff2", + "ibm-plex-mono/-F63fjptAgt5VM-kVkqdyU8n1iEq131nj-otFQ.woff2", + "ibm-plex-mono/-F63fjptAgt5VM-kVkqdyU8n1i8q131nj-o.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgsAXHNk.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl1FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3vAOwlRFgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl9FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl5FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3vAOwlBFgsAXHNk.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3pQPwl1FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3pQPwlRFgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3pQPwl9FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3pQPwl5FgsAXHNlYzg.woff2", + "ibm-plex-mono/-F6qfjptAgt5VM-kVkqdyU8n3pQPwlBFgsAXHNk.woff2" + ] + } + ], + "fallbackFace": null + }, + "DMMono": { + "family": "DM Mono", + "variable": "--font-mono", + "fontFamilyValue": "\"DM Mono\",monospace", + "subsets": [ + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "dm-mono/aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2", + "dm-mono/aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "dm-mono/aFTR7PB1QTsUX8KYvumzEY2tbYf-Vlh3uA.woff2", + "dm-mono/aFTR7PB1QTsUX8KYvumzEYOtbYf-Vlg.woff2" + ] + } + ], + "fallbackFace": null + }, + "FiraCode": { + "family": "Fira Code", + "variable": "--font-mono", + "fontFamilyValue": "\"Fira Code\",monospace", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+2000-2001, u+2004-2008, u+200a, u+23b8-23bd, u+2500-259f", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "fira-code/uU9NCBsR6Z2vfE9aq3bh0NSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh2dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh0dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3tSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bhZ_Wmh3mUfBsu_Q.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh09SDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3dSDqFGedA.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "fira-code/uU9NCBsR6Z2vfE9aq3bh0NSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh2dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh0dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3tSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bhZ_Wmh3mUfBsu_Q.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh09SDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3dSDqFGedA.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "fira-code/uU9NCBsR6Z2vfE9aq3bh0NSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh2dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh0dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3tSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bhZ_Wmh3mUfBsu_Q.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh09SDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3dSDqFGedA.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "fira-code/uU9NCBsR6Z2vfE9aq3bh0NSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh2dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh0dSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3tSDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bhZ_Wmh3mUfBsu_Q.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh09SDqFGedCMX.woff2", + "fira-code/uU9NCBsR6Z2vfE9aq3bh3dSDqFGedA.woff2" + ] + } + ], + "fallbackFace": null + }, + "Inconsolata": { + "family": "Inconsolata", + "variable": "--font-mono", + "fontFamilyValue": "\"Inconsolata\",monospace", + "subsets": [ + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyxq15IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyx615IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyya15IDhunA.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyxq15IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyx615IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyya15IDhunA.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyxq15IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyx615IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyya15IDhunA.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyxq15IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyx615IDhunJ_o.woff2", + "inconsolata/QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyya15IDhunA.woff2" + ] + } + ], + "fallbackFace": null + }, + "JetBrainsMono": { + "family": "JetBrains Mono", + "variable": "--font-mono", + "fontFamilyValue": "\"JetBrains Mono\",monospace", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2", + "jetbrains-mono/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2" + ] + } + ], + "fallbackFace": null + }, + "RobotoMono": { + "family": "Roboto Mono", + "variable": "--font-mono", + "fontFamilyValue": "\"Roboto Mono\",monospace", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhGq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhPq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhIq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhEq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhFq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhLq3-cXbKD.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhGq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhPq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhIq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhEq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhFq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhLq3-cXbKD.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhGq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhPq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhIq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhEq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhFq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhLq3-cXbKD.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhGq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhPq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhIq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhEq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhFq3-cXbKDO1w.woff2", + "roboto-mono/L0x5DF4xlVMF-BfR8bXMIjhLq3-cXbKD.woff2" + ] + } + ], + "fallbackFace": null + }, + "SourceCodePro": { + "family": "Source Code Pro", + "variable": "--font-mono", + "fontFamilyValue": "\"Source Code Pro\",monospace", + "subsets": [ + "u+0460-052f, u+1c80-1c8a, u+20b4, u+2de0-2dff, u+a640-a69f, u+fe2e-fe2f", + "u+0301, u+0400-045f, u+0490-0491, u+04b0-04b1, u+2116", + "u+1f00-1fff", + "u+0370-0377, u+037a-037f, u+0384-038a, u+038c, u+038e-03a1, u+03a3-03ff", + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMOvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlOevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlM-vWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2" + ] + }, + { + "weight": "500", + "style": "normal", + "files": [ + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMOvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlOevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlM-vWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2" + ] + }, + { + "weight": "600", + "style": "normal", + "files": [ + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMOvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlOevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlM-vWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMOvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlOevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMevWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlMuvWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlM-vWnsUnxlC9.woff2", + "source-code-pro/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2" + ] + } + ], + "fallbackFace": null + }, + "SpaceMono": { + "family": "Space Mono", + "variable": "--font-mono", + "fontFamilyValue": "\"Space Mono\",monospace", + "subsets": [ + "u+0102-0103, u+0110-0111, u+0128-0129, u+0168-0169, u+01a0-01a1, u+01af-01b0, u+0300-0301, u+0303-0304, u+0308-0309, u+0323, u+0329, u+1ea0-1ef9, u+20ab", + "u+0100-02ba, u+02bd-02c5, u+02c7-02cc, u+02ce-02d7, u+02dd-02ff, u+0304, u+0308, u+0329, u+1d00-1dbf, u+1e00-1e9f, u+1ef2-1eff, u+2020, u+20a0-20ab, u+20ad-20c0, u+2113, u+2c60-2c7f, u+a720-a7ff", + "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" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "space-mono/i7dPIFZifjKcF5UAWdDRYE58RXi4EwSsbg.woff2", + "space-mono/i7dPIFZifjKcF5UAWdDRYE98RXi4EwSsbg.woff2", + "space-mono/i7dPIFZifjKcF5UAWdDRYEF8RXi4EwQ.woff2" + ] + }, + { + "weight": "700", + "style": "normal", + "files": [ + "space-mono/i7dMIFZifjKcF5UAWdDRaPpZUFqaHi6WZ3S_Yg.woff2", + "space-mono/i7dMIFZifjKcF5UAWdDRaPpZUFuaHi6WZ3S_Yg.woff2", + "space-mono/i7dMIFZifjKcF5UAWdDRaPpZUFWaHi6WZ3Q.woff2" + ] + } + ], + "fallbackFace": null + }, + "NotoColorEmoji": { + "family": "Noto Color Emoji", + "variable": "--font-noto-color-emoji", + "fontFamilyValue": "\"Noto Color Emoji\",\"Noto Color Emoji Fallback\"", + "subsets": [ + "u+1f1e6-1f1ff", + "u+200d, u+2620, u+26a7, u+fe0f, u+1f308, u+1f38c, u+1f3c1, u+1f3f3-1f3f4, u+1f6a9, u+e0062-e0063, u+e0065, u+e0067, u+e006c, u+e006e, u+e0073-e0074, u+e0077, u+e007f", + "u+23, u+2a, u+30-39, u+a9, u+ae, u+200d, u+203c, u+2049, u+20e3, u+2122, u+2139, u+2194-2199, u+21a9-21aa, u+23cf, u+23e9-23ef, u+23f8-23fa, u+24c2, u+25aa-25ab, u+25b6, u+25c0, u+25fb-25fe, u+2611, u+2622-2623, u+2626, u+262a, u+262e-262f, u+2638, u+2640, u+2642, u+2648-2653, u+2660, u+2663, u+2665-2666, u+2668, u+267b, u+267e-267f, u+2695, u+269b-269c, u+26a0, u+26a7, u+26aa-26ab, u+26ce, u+26d4, u+2705, u+2714, u+2716, u+271d, u+2721, u+2733-2734, u+2747, u+274c, u+274e, u+2753-2755, u+2757, u+2764, u+2795-2797, u+27a1, u+27b0, u+27bf, u+2934-2935, u+2b05-2b07, u+2b1b-2b1c, u+2b55, u+3030, u+303d, u+3297, u+3299, u+fe0f, u+1f170-1f171, u+1f17e-1f17f, u+1f18e, u+1f191-1f19a, u+1f201-1f202, u+1f21a, u+1f22f, u+1f232-1f23a, u+1f250-1f251, u+1f310, u+1f3a6, u+1f3b5-1f3b6, u+1f3bc, u+1f3e7, u+1f441, u+1f499-1f49c, u+1f49f-1f4a0, u+1f4ac-1f4ad, u+1f4b1-1f4b2, u+1f4b9, u+1f4db, u+1f4f2-1f4f6, u+1f500-1f507, u+1f515, u+1f518-1f524, u+1f52f-1f53d, u+1f549, u+1f54e, u+1f5a4, u+1f5e8, u+1f5ef, u+1f6ab, u+1f6ad-1f6b1, u+1f6b3, u+1f6b7-1f6bc, u+1f6be, u+1f6c2-1f6c5, u+1f6d0-1f6d1, u+1f6d7, u+1f6dc, u+1f7e0-1f7eb, u+1f7f0, u+1f90d-1f90e, u+1f9d1-1f9d2, u+1f9e1, u+1fa75-1fa77, u+1faaf", + "u+200d, u+231a-231b, u+2328, u+23f0-23f3, u+2602, u+260e, u+2692, u+2694, u+2696-2697, u+2699, u+26b0-26b1, u+26cf, u+26d1, u+26d3, u+2702, u+2709, u+270f, u+2712, u+fe0f, u+1f302, u+1f321, u+1f392-1f393, u+1f3a9, u+1f3bd, u+1f3ee, u+1f3f7, u+1f3fa, u+1f451-1f462, u+1f484, u+1f489-1f48a, u+1f48c-1f48e, u+1f4a1, u+1f4a3, u+1f4a5, u+1f4b0, u+1f4b3-1f4b8, u+1f4bb-1f4da, u+1f4dc-1f4f1, u+1f4ff, u+1f508-1f514, u+1f516-1f517, u+1f526-1f529, u+1f52c-1f52e, u+1f550-1f567, u+1f56f-1f570, u+1f576, u+1f587, u+1f58a-1f58d, u+1f5a5, u+1f5a8, u+1f5b1-1f5b2, u+1f5c2-1f5c4, u+1f5d1-1f5d3, u+1f5dc-1f5de, u+1f5e1, u+1f5f3, u+1f6aa, u+1f6ac, u+1f6bd, u+1f6bf, u+1f6c1, u+1f6cb, u+1f6cd-1f6cf, u+1f6d2, u+1f6e0-1f6e1, u+1f6f0, u+1f97b-1f97f, u+1f9af, u+1f9ba, u+1f9e2-1f9e6, u+1f9ea-1f9ec, u+1f9ee-1f9f4, u+1f9f7-1f9ff, u+1fa71-1fa74, u+1fa79-1fa7b, u+1fa86, u+1fa8e-1fa8f, u+1fa91-1fa93, u+1fa96, u+1fa99-1faa0, u+1faa2-1faa7, u+1faaa-1faae", + "u+265f, u+26bd-26be, u+26f3, u+26f8, u+fe0f, u+1f004, u+1f0cf, u+1f380-1f384, u+1f386-1f38b, u+1f38d-1f391, u+1f396-1f397, u+1f399-1f39b, u+1f39e-1f39f, u+1f3a3-1f3a5, u+1f3a7-1f3a9, u+1f3ab-1f3b4, u+1f3b7-1f3bb, u+1f3bd-1f3c0, u+1f3c5-1f3c6, u+1f3c8-1f3c9, u+1f3cf-1f3d3, u+1f3f8-1f3f9, u+1f47e, u+1f4e2, u+1f4f7-1f4fd, u+1f52b, u+1f579, u+1f58c-1f58d, u+1f5bc, u+1f6f7, u+1f6f9, u+1f6fc, u+1f93f, u+1f941, u+1f945, u+1f947-1f94f, u+1f9e7-1f9e9, u+1f9f5-1f9f6, u+1fa70-1fa71, u+1fa80-1fa81, u+1fa83-1fa85, u+1fa87-1fa8a, u+1fa94-1fa95, u+1fa97-1fa98, u+1faa1, u+1faa9, u+1fadf", + "u+2693, u+26e9-26ea, u+26f1-26f2, u+26f4-26f5, u+26fa, u+26fd, u+2708, u+fe0f, u+1f301, u+1f303, u+1f306-1f307, u+1f309, u+1f310, u+1f3a0-1f3a2, u+1f3aa, u+1f3cd-1f3ce, u+1f3d5, u+1f3d7-1f3db, u+1f3df-1f3e6, u+1f3e8-1f3ed, u+1f3ef-1f3f0, u+1f488, u+1f492, u+1f4ba, u+1f54b-1f54d, u+1f5fa-1f5ff, u+1f680-1f6a2, u+1f6a4-1f6a8, u+1f6b2, u+1f6d1, u+1f6d5-1f6d6, u+1f6dd-1f6df, u+1f6e2-1f6e5, u+1f6e9, u+1f6eb-1f6ec, u+1f6f3-1f6f6, u+1f6f8, u+1f6fa-1f6fb, u+1f9bc-1f9bd, u+1f9ed, u+1f9f3, u+1fa7c", + "u+200d, u+2615, u+fe0f, u+1f32d-1f330, u+1f336, u+1f33d, u+1f344-1f37f, u+1f382, u+1f52a, u+1f7e9, u+1f7eb, u+1f942-1f944, u+1f950-1f96f, u+1f99e, u+1f9aa, u+1f9c0-1f9cb, u+1fad0-1fadc", + "u+200d, u+2600-2601, u+2603-2604, u+2614, u+2618, u+26a1, u+26c4-26c5, u+26c8, u+26f0, u+2728, u+2744, u+2b1b, u+2b50, u+fe0f, u+1f300, u+1f304-1f305, u+1f308, u+1f30a-1f30f, u+1f311-1f321, u+1f324-1f32c, u+1f331-1f335, u+1f337-1f33c, u+1f33e-1f344, u+1f3d4, u+1f3d6, u+1f3dc-1f3de, u+1f3f5, u+1f400-1f43f, u+1f490, u+1f4a7, u+1f4ae, u+1f525, u+1f54a, u+1f573, u+1f577-1f578, u+1f648-1f64a, u+1f6d8, u+1f940, u+1f980-1f9ae, u+1f9ba, u+1fa90, u+1faa8, u+1fab0-1fabf, u+1facd-1facf, u+1fae7", + "u+200d, u+2640, u+2642, u+2695-2696, u+26f7, u+26f9, u+2708, u+2764, u+27a1, u+fe0f, u+1f33e, u+1f373, u+1f37c, u+1f384-1f385, u+1f393, u+1f3a4, u+1f3a8, u+1f3c2-1f3c4, u+1f3c7, u+1f3ca-1f3cc, u+1f3eb, u+1f3ed, u+1f3fb-1f3ff, u+1f430, u+1f466-1f469, u+1f46b-1f478, u+1f47c, u+1f481-1f483, u+1f486-1f487, u+1f48b, u+1f48f, u+1f491, u+1f4bb-1f4bc, u+1f527, u+1f52c, u+1f574-1f575, u+1f57a, u+1f645-1f647, u+1f64b, u+1f64d-1f64e, u+1f680, u+1f692, u+1f6a3, u+1f6b4-1f6b6, u+1f6c0, u+1f6cc, u+1f91d, u+1f926, u+1f930-1f931, u+1f934-1f93a, u+1f93c-1f93e, u+1f977, u+1f9af-1f9b3, u+1f9b8-1f9b9, u+1f9bc-1f9bd, u+1f9cc-1f9cf, u+1f9d1-1f9df, u+1fa70, u+1fa82, u+1fac3-1fac5, u+1fac8, u+1faef", + "u+200d, u+2194-2195, u+2603, u+261d, u+2620, u+2639-263a, u+2665, u+26a1, u+26c4, u+270a-270d, u+2728, u+2763-2764, u+2b50, u+fe0f, u+1f31a-1f31f, u+1f32b, u+1f389-1f38a, u+1f3fb-1f3ff, u+1f440-1f450, u+1f463-1f465, u+1f479-1f47b, u+1f47d-1f480, u+1f485, u+1f48b-1f48c, u+1f493-1f49f, u+1f4a2, u+1f4a4-1f4a6, u+1f4a8-1f4ab, u+1f4af, u+1f525, u+1f573, u+1f590, u+1f595-1f596, u+1f5a4, u+1f5e3, u+1f600-1f644, u+1f648-1f64a, u+1f64c, u+1f64f, u+1f90c-1f925, u+1f927-1f92f, u+1f932-1f933, u+1f970-1f976, u+1f978-1f97a, u+1f9a0, u+1f9b4-1f9b7, u+1f9bb, u+1f9be-1f9bf, u+1f9d0, u+1f9e0-1f9e1, u+1fa75-1fa79, u+1fac0-1fac2, u+1fac6, u+1fae0-1fae6, u+1fae8-1faea, u+1faef-1faf8" + ], + "variants": [ + { + "weight": "400", + "style": "normal", + "files": [ + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.0.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.1.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.2.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.3.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.4.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.5.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.6.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.7.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.8.woff2", + "noto-color-emoji/Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.9.woff2" + ] + } + ], + "fallbackFace": { + "family": "Noto Color Emoji Fallback", + "local": "Arial", + "ascentOverride": "33.22%", + "descentOverride": "8.74%", + "lineGapOverride": "0.00%", + "sizeAdjust": "279.30%" + } + } +} diff --git a/packages/gitbook/src/fonts/generated/sources.json b/packages/gitbook/src/fonts/generated/sources.json new file mode 100644 index 000000000..603c30073 --- /dev/null +++ b/packages/gitbook/src/fonts/generated/sources.json @@ -0,0 +1,342 @@ +{ + "definitionsHash": "d48c6da97e3309997e0ac0e87ad29a94064054fde8bd7ab33754f1d934804323", + "google": { + "inter": { + "prefix": "https://fonts.gstatic.com/s/inter/v20", + "files": [ + "UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2", + "UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2", + "UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2", + "UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2", + "UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2", + "UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2", + "UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2" + ] + }, + "fira-sans-extra-condensed": { + "prefix": "https://fonts.gstatic.com/s/firasansextracondensed/v11", + "files": [ + "NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fKuulWcrE5Hcg.woff2", + "NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fuuulWcrE5Hcg.woff2", + "NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fOuulWcrE5Hcg.woff2", + "NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fyuulWcrE5Hcg.woff2", + "NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fCuulWcrE5Hcg.woff2", + "NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1fGuulWcrE5Hcg.woff2", + "NaPKcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda1f-uulWcrE4.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3W-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3y-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3S-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3u-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3e-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3a-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3QyNr3i-oWR9e2U.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3W-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3y-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3S-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3u-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3e-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3a-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3SCKr3i-oWR9e2U.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3W-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3y-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3S-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3u-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3e-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3a-oWR9e2WPJQ.woff2", + "NaPPcYDaAO5dirw6IaFn7lPJFqXmS-M9Atn3wgda3USLr3i-oWR9e2U.woff2" + ] + }, + "ibm-plex-serif": { + "prefix": "https://fonts.gstatic.com/s/ibmplexserif/v20", + "files": [ + "jizDREVNn1dOx-zrZ2X3pZvkTiUS2zcZiVbJsNo.woff2", + "jizDREVNn1dOx-zrZ2X3pZvkTiUb2zcZiVbJsNo.woff2", + "jizDREVNn1dOx-zrZ2X3pZvkTiUQ2zcZiVbJsNo.woff2", + "jizDREVNn1dOx-zrZ2X3pZvkTiUR2zcZiVbJsNo.woff2", + "jizDREVNn1dOx-zrZ2X3pZvkTiUf2zcZiVbJ.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI5q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3s-CIwq1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI7q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI6q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3s-CI0q1vjitOh.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI5q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3A_yIwq1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI7q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI6q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi3A_yI0q1vjitOh.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI5q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi2k_iIwq1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI7q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI6q1vjitOh3oc.woff2", + "jizAREVNn1dOx-zrZ2X3pZvkTi2k_iI0q1vjitOh.woff2" + ] + }, + "lato": { + "prefix": "https://fonts.gstatic.com/s/lato/v25", + "files": [ + "S6uyw4BMUTPHjxAwXiWtFCfQ7A.woff2", + "S6uyw4BMUTPHjx4wXiWtFCc.woff2", + "S6u9w4BMUTPHh6UVSwaPGQ3q5d0N7w.woff2", + "S6u9w4BMUTPHh6UVSwiPGQ3q5d0.woff2", + "S6u9w4BMUTPHh50XSwaPGQ3q5d0N7w.woff2", + "S6u9w4BMUTPHh50XSwiPGQ3q5d0.woff2" + ] + }, + "merriweather": { + "prefix": "https://fonts.gstatic.com/s/merriweather/v33", + "files": [ + "u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqnJ-mXq1Gi3iE.woff2", + "u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSequJ-mXq1Gi3iE.woff2", + "u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqlJ-mXq1Gi3iE.woff2", + "u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqkJ-mXq1Gi3iE.woff2", + "u-4e0qyriQwlOrhSvowK_l5UcA6zuSYEqOzpPe3HOZJ5eX1WtLaQwmYiSeqqJ-mXq1Gi.woff2" + ] + }, + "noto-sans": { + "prefix": "https://fonts.gstatic.com/s/notosans/v42", + "files": [ + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aPdu3mhPy1Fig.woff2", + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5ardu3mhPy1Fig.woff2", + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a_du3mhPy1Fig.woff2", + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aLdu3mhPy1Fig.woff2", + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a3du3mhPy1Fig.woff2", + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aHdu3mhPy1Fig.woff2", + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5aDdu3mhPy1Fig.woff2", + "o-0bIpQlx3QUlC5A4PNB6Ryti20_6n1iPHjc5a7du3mhPy0.woff2" + ] + }, + "open-sans": { + "prefix": "https://fonts.gstatic.com/s/opensans/v44", + "files": [ + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu0SC55K5gw.woff2", + "memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2" + ] + }, + "overpass": { + "prefix": "https://fonts.gstatic.com/s/overpass/v19", + "files": [ + "qFdH35WCmI96Ajtm81GoU9vgwBcIs1s.woff2", + "qFdH35WCmI96Ajtm81GhU9vgwBcIs1s.woff2", + "qFdH35WCmI96Ajtm81GqU9vgwBcIs1s.woff2", + "qFdH35WCmI96Ajtm81GrU9vgwBcIs1s.woff2", + "qFdH35WCmI96Ajtm81GlU9vgwBcI.woff2" + ] + }, + "poppins": { + "prefix": "https://fonts.gstatic.com/s/poppins/v24", + "files": [ + "pxiEyp8kv8JHgFVrJJbecnFHGPezSQ.woff2", + "pxiEyp8kv8JHgFVrJJnecnFHGPezSQ.woff2", + "pxiEyp8kv8JHgFVrJJfecnFHGPc.woff2", + "pxiByp8kv8JHgFVrLGT9Z11lFd2JQEl8qw.woff2", + "pxiByp8kv8JHgFVrLGT9Z1JlFd2JQEl8qw.woff2", + "pxiByp8kv8JHgFVrLGT9Z1xlFd2JQEk.woff2", + "pxiByp8kv8JHgFVrLEj6Z11lFd2JQEl8qw.woff2", + "pxiByp8kv8JHgFVrLEj6Z1JlFd2JQEl8qw.woff2", + "pxiByp8kv8JHgFVrLEj6Z1xlFd2JQEk.woff2", + "pxiByp8kv8JHgFVrLCz7Z11lFd2JQEl8qw.woff2", + "pxiByp8kv8JHgFVrLCz7Z1JlFd2JQEl8qw.woff2", + "pxiByp8kv8JHgFVrLCz7Z1xlFd2JQEk.woff2" + ] + }, + "raleway": { + "prefix": "https://fonts.gstatic.com/s/raleway/v37", + "files": [ + "1Ptug8zYS_SKggPNyCAIT4ttDfCmxA.woff2", + "1Ptug8zYS_SKggPNyCkIT4ttDfCmxA.woff2", + "1Ptug8zYS_SKggPNyCIIT4ttDfCmxA.woff2", + "1Ptug8zYS_SKggPNyCMIT4ttDfCmxA.woff2", + "1Ptug8zYS_SKggPNyC0IT4ttDfA.woff2" + ] + }, + "roboto": { + "prefix": "https://fonts.gstatic.com/s/roboto/v51", + "files": [ + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBHMdazTgWw.woff2", + "KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBHMdazQ.woff2" + ] + }, + "roboto-slab": { + "prefix": "https://fonts.gstatic.com/s/robotoslab/v36", + "files": [ + "BngMUXZYTXPIvIBgJJSb6ufA5qWr4xCCQ_k.woff2", + "BngMUXZYTXPIvIBgJJSb6ufJ5qWr4xCCQ_k.woff2", + "BngMUXZYTXPIvIBgJJSb6ufB5qWr4xCCQ_k.woff2", + "BngMUXZYTXPIvIBgJJSb6ufO5qWr4xCCQ_k.woff2", + "BngMUXZYTXPIvIBgJJSb6ufC5qWr4xCCQ_k.woff2", + "BngMUXZYTXPIvIBgJJSb6ufD5qWr4xCCQ_k.woff2", + "BngMUXZYTXPIvIBgJJSb6ufN5qWr4xCC.woff2" + ] + }, + "source-sans-3": { + "prefix": "https://fonts.gstatic.com/s/sourcesans3/v19", + "files": [ + "nwpStKy2OAdR1K-IwhWudF-R3wIaZejf5HdF8Q.woff2", + "nwpStKy2OAdR1K-IwhWudF-R3wsaZejf5HdF8Q.woff2", + "nwpStKy2OAdR1K-IwhWudF-R3wMaZejf5HdF8Q.woff2", + "nwpStKy2OAdR1K-IwhWudF-R3wwaZejf5HdF8Q.woff2", + "nwpStKy2OAdR1K-IwhWudF-R3wAaZejf5HdF8Q.woff2", + "nwpStKy2OAdR1K-IwhWudF-R3wEaZejf5HdF8Q.woff2", + "nwpStKy2OAdR1K-IwhWudF-R3w8aZejf5Hc.woff2" + ] + }, + "ubuntu": { + "prefix": "https://fonts.gstatic.com/s/ubuntu/v21", + "files": [ + "4iCs6KVjbNBYlgoKcg72nU6AF7xm.woff2", + "4iCs6KVjbNBYlgoKew72nU6AF7xm.woff2", + "4iCs6KVjbNBYlgoKcw72nU6AF7xm.woff2", + "4iCs6KVjbNBYlgoKfA72nU6AF7xm.woff2", + "4iCs6KVjbNBYlgoKcQ72nU6AF7xm.woff2", + "4iCs6KVjbNBYlgoKfw72nU6AFw.woff2", + "4iCv6KVjbNBYlgoCjC3jvWyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCjC3jtGyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCjC3jvGyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCjC3js2yNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCjC3jvmyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCjC3jsGyNPYZvgw.woff2", + "4iCv6KVjbNBYlgoCxCvjvWyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCxCvjtGyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCxCvjvGyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCxCvjs2yNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCxCvjvmyNPYZvg7UI.woff2", + "4iCv6KVjbNBYlgoCxCvjsGyNPYZvgw.woff2" + ] + }, + "ibm-plex-mono": { + "prefix": "https://fonts.gstatic.com/s/ibmplexmono/v20", + "files": [ + "-F63fjptAgt5VM-kVkqdyU8n1iIq131nj-otFQ.woff2", + "-F63fjptAgt5VM-kVkqdyU8n1isq131nj-otFQ.woff2", + "-F63fjptAgt5VM-kVkqdyU8n1iAq131nj-otFQ.woff2", + "-F63fjptAgt5VM-kVkqdyU8n1iEq131nj-otFQ.woff2", + "-F63fjptAgt5VM-kVkqdyU8n1i8q131nj-o.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgsAXHNk.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3vAOwl1FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3vAOwlRFgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3vAOwl9FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3vAOwl5FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3vAOwlBFgsAXHNk.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3pQPwl1FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3pQPwlRFgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3pQPwl9FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3pQPwl5FgsAXHNlYzg.woff2", + "-F6qfjptAgt5VM-kVkqdyU8n3pQPwlBFgsAXHNk.woff2" + ] + }, + "dm-mono": { + "prefix": "https://fonts.gstatic.com/s/dmmono/v16", + "files": [ + "aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2", + "aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2", + "aFTR7PB1QTsUX8KYvumzEY2tbYf-Vlh3uA.woff2", + "aFTR7PB1QTsUX8KYvumzEYOtbYf-Vlg.woff2" + ] + }, + "fira-code": { + "prefix": "https://fonts.gstatic.com/s/firacode/v27", + "files": [ + "uU9NCBsR6Z2vfE9aq3bh0NSDqFGedCMX.woff2", + "uU9NCBsR6Z2vfE9aq3bh2dSDqFGedCMX.woff2", + "uU9NCBsR6Z2vfE9aq3bh0dSDqFGedCMX.woff2", + "uU9NCBsR6Z2vfE9aq3bh3tSDqFGedCMX.woff2", + "uU9NCBsR6Z2vfE9aq3bhZ_Wmh3mUfBsu_Q.woff2", + "uU9NCBsR6Z2vfE9aq3bh09SDqFGedCMX.woff2", + "uU9NCBsR6Z2vfE9aq3bh3dSDqFGedA.woff2" + ] + }, + "inconsolata": { + "prefix": "https://fonts.gstatic.com/s/inconsolata/v37", + "files": [ + "QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyxq15IDhunJ_o.woff2", + "QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyx615IDhunJ_o.woff2", + "QlddNThLqRwH-OJ1UHjlKENVzkWGVkL3GZQmAwLyya15IDhunA.woff2" + ] + }, + "jetbrains-mono": { + "prefix": "https://fonts.gstatic.com/s/jetbrainsmono/v24", + "files": [ + "tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2", + "tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2", + "tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2", + "tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2", + "tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2", + "tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2" + ] + }, + "roboto-mono": { + "prefix": "https://fonts.gstatic.com/s/robotomono/v31", + "files": [ + "L0x5DF4xlVMF-BfR8bXMIjhGq3-cXbKDO1w.woff2", + "L0x5DF4xlVMF-BfR8bXMIjhPq3-cXbKDO1w.woff2", + "L0x5DF4xlVMF-BfR8bXMIjhIq3-cXbKDO1w.woff2", + "L0x5DF4xlVMF-BfR8bXMIjhEq3-cXbKDO1w.woff2", + "L0x5DF4xlVMF-BfR8bXMIjhFq3-cXbKDO1w.woff2", + "L0x5DF4xlVMF-BfR8bXMIjhLq3-cXbKD.woff2" + ] + }, + "source-code-pro": { + "prefix": "https://fonts.gstatic.com/s/sourcecodepro/v31", + "files": [ + "HI_SiYsKILxRpg3hIP6sJ7fM7PqlMOvWnsUnxlC9.woff2", + "HI_SiYsKILxRpg3hIP6sJ7fM7PqlOevWnsUnxlC9.woff2", + "HI_SiYsKILxRpg3hIP6sJ7fM7PqlMevWnsUnxlC9.woff2", + "HI_SiYsKILxRpg3hIP6sJ7fM7PqlPuvWnsUnxlC9.woff2", + "HI_SiYsKILxRpg3hIP6sJ7fM7PqlMuvWnsUnxlC9.woff2", + "HI_SiYsKILxRpg3hIP6sJ7fM7PqlM-vWnsUnxlC9.woff2", + "HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2" + ] + }, + "space-mono": { + "prefix": "https://fonts.gstatic.com/s/spacemono/v17", + "files": [ + "i7dPIFZifjKcF5UAWdDRYE58RXi4EwSsbg.woff2", + "i7dPIFZifjKcF5UAWdDRYE98RXi4EwSsbg.woff2", + "i7dPIFZifjKcF5UAWdDRYEF8RXi4EwQ.woff2", + "i7dMIFZifjKcF5UAWdDRaPpZUFqaHi6WZ3S_Yg.woff2", + "i7dMIFZifjKcF5UAWdDRaPpZUFuaHi6WZ3S_Yg.woff2", + "i7dMIFZifjKcF5UAWdDRaPpZUFWaHi6WZ3Q.woff2" + ] + }, + "noto-color-emoji": { + "prefix": "https://fonts.gstatic.com/s/notocoloremoji/v40", + "files": [ + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.0.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.1.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.2.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.3.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.4.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.5.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.6.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.7.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.8.woff2", + "Yq6P-KqIXTD0t4D9z1ESnKM3-HpFabts6diysYTngZPnMC1MfLd4gw.9.woff2" + ] + } + }, + "local": { + "abcfavorit/7bb31c73cb8d820e.woff2": "./ABCFavorit/ABCFavorit-Variable.woff2", + "abcfavorit/aed849de6e333605.woff2": "./ABCFavorit/ABCFavorit-BoldItalic.woff2", + "abcfavorit/b435fb7330f5e171.woff2": "./ABCFavorit/ABCFavorit-MediumItalic.woff2", + "abcfavorit/aee27c224ccd5167.woff2": "./ABCFavorit/ABCFavorit-RegularItalic.woff2" + } +} diff --git a/packages/gitbook/src/fonts/index.ts b/packages/gitbook/src/fonts/index.ts index 4ff74ee61..294d7c19d 100644 --- a/packages/gitbook/src/fonts/index.ts +++ b/packages/gitbook/src/fonts/index.ts @@ -5,27 +5,32 @@ import type { } from '@gitbook/api'; import { generateFontFacesCSS, getFontSourcesToPreload } from './custom'; -import { fonts } from './default'; +import { generateDefaultFontFacesCSS } from './default'; + +export { DEFAULT_MONOSPACE_FONT, generateEmojiFontFacesCSS } from './default'; /** * Represents font data for either a default font or a custom font */ export type FontData = DefaultFontData | CustomFontData; +interface BaseFontData { + /** `@font-face` rules and the CSS variable, to inline in the document head. */ + fontFaceRules: string; +} + /** - * Font data for a default font, currently handle with next/font + * Font data for a default font, self-hosted from our own assets */ -interface DefaultFontData { +interface DefaultFontData extends BaseFontData { type: 'default'; - variable: string; } /** * Font data for a custom font with @font-face rules */ -interface CustomFontData { +interface CustomFontData extends BaseFontData { type: 'custom'; - fontFaceRules: string; preloadSources: CustomizationFontDefinition['fontFaces']; } @@ -39,7 +44,7 @@ export function getFontData( if (typeof font === 'string') { return { type: 'default', - variable: fonts[font].variable, + fontFaceRules: generateDefaultFontFacesCSS(font), }; } diff --git a/packages/gitbook/src/fonts/types.ts b/packages/gitbook/src/fonts/types.ts new file mode 100644 index 000000000..2129ed610 --- /dev/null +++ b/packages/gitbook/src/fonts/types.ts @@ -0,0 +1,38 @@ +export interface FontVariantData { + weight: string; + style: string; + /** Path under `~gitbook/static/fonts`, index-aligned with the family's `subsets`. */ + files: string[]; +} + +export interface FontFallbackFaceData { + family: string; + local: string; + ascentOverride: string; + descentOverride: string; + lineGapOverride: string; + sizeAdjust: string; +} + +export interface FontFamilyData { + family: string; + variable: string; + /** Full value for the CSS variable, fallbacks included. */ + fontFamilyValue: string; + /** `unicode-range` per subset. Held once per family rather than repeated on every variant. */ + subsets: string[]; + variants: FontVariantData[]; + fallbackFace: FontFallbackFaceData | null; + /** Applied to every face of the family. */ + ascentOverride?: string; +} + +export type FontFacesData = Record; + +/** Where `scripts/download-fonts.ts` fetches (or copies) each file from. */ +export interface FontSourcesData { + /** Hash of definitions.ts at generation time, used to detect a stale manifest. */ + definitionsHash: string; + google: Record; + local: Record; +} diff --git a/packages/gitbook/turbo.json b/packages/gitbook/turbo.json index b597d01e2..badd9d093 100644 --- a/packages/gitbook/turbo.json +++ b/packages/gitbook/turbo.json @@ -5,7 +5,8 @@ "outputs": [ "public/~gitbook/static/icons/**/*", "public/~gitbook/static/math/**/*", - "public/~gitbook/static/embed/**/*" + "public/~gitbook/static/embed/**/*", + "public/~gitbook/static/fonts/**/*" ], "dependsOn": ["^generate", "@gitbook/embed#build"] },