From 600b96befce9af89d912da7d99cbce0c8afea20a Mon Sep 17 00:00:00 2001 From: Juan Denis Date: Tue, 3 Nov 2026 12:58:36 -0500 Subject: [PATCH] fix(ui): replace corrupt IBM Plex Sans 400 woff2 and guard it in font lint --- frontend/public/fonts/ibm-plex-sans-400.woff2 | Bin 22588 -> 22588 bytes frontend/scripts/check-font-integrity.mjs | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/public/fonts/ibm-plex-sans-400.woff2 b/frontend/public/fonts/ibm-plex-sans-400.woff2 index ab60668be06cf021524b8dbc27577616f10a722c..f0ee65dd7f3ed64dc8d674e5c6007a0e7761bd57 100644 GIT binary patch delta 12397 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 z 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 diff --git a/frontend/scripts/check-font-integrity.mjs b/frontend/scripts/check-font-integrity.mjs index f297a3a0..c21c3a59 100644 --- a/frontend/scripts/check-font-integrity.mjs +++ b/frontend/scripts/check-font-integrity.mjs @@ -9,6 +9,7 @@ const FRONTEND = join(dirname(fileURLToPath(import.meta.url)), '..'); const FONT_DIR = join(FRONTEND, 'public', 'fonts'); const FONT_STYLES = join(FRONTEND, 'src', 'styles', 'base', '_fonts.scss'); const FONTS = [ + ['ibm-plex-sans-400.woff2', 400], ['ibm-plex-sans-500.woff2', 500], ['ibm-plex-sans-600.woff2', 600], ['ibm-plex-sans-700.woff2', 700], @@ -34,4 +35,4 @@ for (const [filename, weight] of FONTS) { } } -console.log('✓ font integrity: IBM Plex Sans 500/600/700 are valid WOFF2 assets'); +console.log('✓ font integrity: IBM Plex Sans 400/500/600/700 are valid WOFF2 assets');