perf(fonts): heading serif slices served from public/ under content-hashed names, cached for good (BUG-1128)

Bundled media carry Next's per-deploy ?dpl= and were downloaded again after
every release. Bytes unchanged; /fonts/serif-sc/* is immutable. Overturns the
serif-headings contract line "bundled by Next, not served from public/"
per TASK-home-first-load-20260930 decision 2.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
Jesse_Chen
2026-10-01 00:40:11 +08:00
co-authored by Claude Opus 5.5
parent ed4f513383
commit 8112f62b51
39 changed files with 190 additions and 43 deletions
+1 -1
View File
@@ -229,7 +229,7 @@ is read through an external store so a change in one tab reaches the others.
- Display (headings): `"Jyotisha Serif SC", var(--font-inter, Inter), -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif` — the body stack with the self-hosted heading serif in front (2026-09-28, TASK-serif-headings-20260928). **CJK 标题用自托管 Jyotisha Serif SC;绝不落到系统宋体。**
- The face is Noto Serif SC SemiBold (SIL OFL 1.1), renamed per the OFL Reserved Font Name clause and cut into 30 `unicode-range` woff2 slices under `src/app/fonts/serif-sc/` by `scripts/fonts/build_serif_slices.py`. Coverage: 《通用规范汉字表》 level 1 + 2 (6500 characters), Basic Latin, CJK / full-width punctuation, digits and common symbols. A character outside that set renders in the sans stack.
- Slices are bundled by Next (`/_next/static/media/`, content-hashed, immutable), not served from `public/`, and never fetched from Google Fonts. The browser downloads only the slices whose characters appear in a heading on the page: measured 220–226 KB on `/login` and the signed-out home, ≈236 KB on a signed-in home greeting, ≈490 KB for a full long-form report (PROGRESS-serif-headings-20260928).
- Slices are served from `public/fonts/serif-sc/` under content-hashed names (`jyotisha-serif-sc-NN.<sha256[:10]>.woff2`) with `Cache-Control: public, max-age=31536000, immutable` (next.config.ts), and never fetched from Google Fonts. Until 2026-09-30 they were bundled by Next (`/_next/static/media/`), whose URLs carry the per-deploy `?dpl=`, so every release downloaded them again (BUG-1128, TASK-home-first-load-20260930 T3-b); a URL now keeps its bytes across releases. The browser downloads only the slices whose characters appear in a heading on the page: measured 220–226 KB on `/login` and the signed-out home, ≈236 KB on a signed-in home greeting, ≈490 KB for a full long-form report (PROGRESS-serif-headings-20260928).
- One weight ships. The `@font-face` rules declare `font-weight: 500 700`, so the existing display rules at 500 and 600 hit SemiBold without per-rule changes; do not add a second weight file.
- `font-display: swap`, no preload: a heading paints in the sans stack first and swaps when its slice arrives. No waiting state, no hidden text.
- Mixed headings stay in one face: the slice set carries Latin, so “D10 事业盘怎么读” is serif end to end (the reason Newsreader was rejected in BUG-737 does not apply).
+6
View File
@@ -15,6 +15,12 @@ const nextConfig: NextConfig = {
source: "/login",
headers: [{ key: "Cache-Control", value: "private, no-store, must-revalidate" }],
},
{
// Heading serif slices: content-hashed names, same URL across deploys
// (no `?dpl=`), so a browser downloads each one once (BUG-1128).
source: "/fonts/serif-sc/:path*",
headers: [{ key: "Cache-Control", value: "public, max-age=31536000, immutable" }],
},
];
},
devIndicators: false,
+92
View File
@@ -0,0 +1,92 @@
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to
provide a free and open framework in which fonts may be shared and
improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software
components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to,
deleting, or substituting -- in part or in whole -- any of the
components of the Original Version, by changing formats or by porting
the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed,
modify, redistribute, and sell modified and unmodified copies of the
Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created using
the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
+7 -1
View File
@@ -50,5 +50,11 @@ How the slices are made
count. Details and sources in scripts/fonts/CHARSET_SOURCE.txt.
Files
jyotisha-serif-sc-00.woff2 ... jyotisha-serif-sc-29.woff2
public/fonts/serif-sc/jyotisha-serif-sc-00.<hash>.woff2 ... -29.<hash>.woff2
<hash> = first 10 hex of the file's sha256. Served from public/
at /fonts/serif-sc/ with `Cache-Control: public, max-age=31536000,
immutable` (next.config.ts), not bundled by Next: bundled media
carry the per-deploy `?dpl=` and were downloaded again after every
release (TASK-home-first-load-20260930 T3-b, BUG-1128, 2026-09-30).
OFL.txt is copied beside them.
serif-sc.css @font-face list (font-weight 500 700, font-display swap), imported by src/app/site-styles.ts (with globals.css)
+30 -30
View File
@@ -7,7 +7,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-00.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-00.1812be0085.woff2") format("woff2");
unicode-range: U+20-7E, U+A0-BF, U+D7, U+F7, U+2010-2016, U+2018-201A, U+201C-201E, U+2020-2022, U+2025-2027, U+2030, U+2032-2033, U+2035, U+2039-203B, U+2103, U+2116, U+2160-216B, U+2190-2193, U+2460-2473, U+3000-303F, U+30FB, U+FF01-FF5E, U+FFE0-FFE5;
}
@font-face {
@@ -15,7 +15,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-01.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-01.c7eef3e8ae.woff2") format("woff2");
unicode-range: U+4E00, U+4E09-4E0B, U+4E0D-4E0E, U+4E1A, U+4E2A, U+4E2D, U+4E3A-4E3B, U+4E86, U+4E8B, U+4E8E, U+4EBA, U+4ECE, U+4EE3, U+4EE5, U+4EF6, U+4F1A, U+4F20, U+4F4D, U+4F53, U+4F5C, U+4F60, U+4FE1, U+5165, U+5168, U+516C, U+5173, U+5185, U+51FA, U+5206, U+5230, U+5236, U+524D, U+529B, U+52A0-52A1, U+52A8, U+5316, U+533A, U+53D1, U+53D6, U+53EA, U+53EF, U+53F7, U+5408, U+540C-540E, U+544A, U+548C, U+56DE, U+5728, U+5730, U+578B, U+590D, U+5916, U+591A, U+5927, U+5929, U+597D, U+5982, U+5B50, U+5B66, U+5B8C, U+5B9A, U+5B9E, U+5BB6, U+5BF9, U+5BFC, U+5C0F, U+5DE5, U+5DF2, U+5E02, U+5E38, U+5E74, U+5E94, U+5EA6, U+5EFA, U+5F00, U+5F0F, U+5F53, U+5F55, U+5F97, U+5FC3, U+6001, U+6027, U+60C5, U+610F, U+611F, U+6210-6211, U+6216, U+6237, U+6240, U+6280, U+62A5, U+63A5, U+63A8, U+63D0, U+6536, U+6570, U+6587, U+65B0, U+65B9, U+65E0, U+65E5, U+65F6, U+660E, U+661F, U+662F, U+66F4, U+6700, U+6708-6709, U+671F, U+672C, U+672F, U+673A, U+6761, U+6765, U+679C, U+67E5, U+6807, U+683C, U+6848, U+6B21, U+6B63, U+6C34, U+6CD5, U+6CE8, U+6D3B, U+6E90, U+70B9, U+7279, U+73B0, U+7406, U+751F, U+7528, U+7684, U+76F4, U+76F8, U+770B, U+793A, U+7B2C, U+7B49, U+7C7B, U+7CBE, U+7CFB, U+7EA7, U+7ECF, U+7ED3, U+7EDF, U+7F6E, U+8005, U+80FD, U+81EA, U+884C, U+8868, U+8981, U+89C4, U+89E3, U+8BA1, U+8BA4, U+8BB0, U+8BBA, U+8BC1, U+8BDD, U+8BF4, U+8BF7, U+8BFB, U+8D28, U+8D44, U+8FC7, U+8FD0, U+8FD9, U+8FDB, U+9009, U+901A, U+9053, U+90E8, U+91CD, U+91CF, U+91D1, U+957F, U+95EE, U+95F4, U+9762, U+9898, U+9AD8;
}
@font-face {
@@ -23,7 +23,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-02.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-02.cf2b58e435.woff2") format("woff2");
unicode-range: U+4E13, U+4E24, U+4E48-4E49, U+4E4B, U+4E5F, U+4E8C, U+4EA4, U+4EA7, U+4EAE, U+4EEC, U+4EFB, U+4F46, U+4F55, U+4F7F, U+4F8B, U+4FDD, U+503C, U+505A, U+5065, U+5148, U+5176-5177, U+5199, U+51C6, U+5219, U+521B, U+5224, U+522B, U+5305, U+5347, U+5355, U+5360, U+5370, U+539F, U+53BF, U+53C2, U+53CB-53CD, U+53D7-53D8, U+53E3, U+53F8, U+5409, U+5411, U+5426, U+542B, U+547D, U+54C1, U+54CD, U+56DB, U+56FD-56FE, U+571F, U+573A, U+57DF, U+57FA, U+5883, U+5904, U+5907, U+592A, U+5931, U+5973, U+59FB, U+5A5A, U+5B57, U+5B89, U+5BA2, U+5BAB, U+5BB9, U+5BCC, U+5C11, U+5C31, U+5C40, U+5C42, U+5C55, U+5DEE, U+5E73, U+5E7F, U+5E99, U+5EA7, U+5EB7, U+5F15, U+5F31, U+5F3A, U+5F71, U+5FAE, U+5FC5, U+603B, U+606F, U+60A8, U+6218, U+624B, U+6301, U+6307, U+636E, U+6392, U+652F, U+6559, U+6574, U+65AD, U+662D, U+670D, U+6728, U+672A, U+6743, U+6790, U+6821, U+682A, U+6838, U+68C0, U+6A21, U+6B65, U+6BB5, U+6BCF, U+6BD4, U+6C42, U+6CA1, U+6CBB, U+6D41, U+6D4B, U+6DF1, U+6FC0, U+706B, U+7075, U+70ED, U+7136, U+7247-7248, U+7269, U+72B6, U+7535, U+767B, U+76D8, U+76EE, U+771F, U+77E5, U+786E, U+793E, U+79D1, U+7A0B, U+7ACB, U+7AD9, U+7B97, U+7BA1, U+7EBF, U+7ED9, U+7F3A, U+7F51, U+7F8E, U+8003, U+800C, U+804C, U+8054, U+8272, U+8282, U+843D, U+85CF, U+88AB, U+89C1, U+89C6, U+89E6, U+8BAE, U+8BC4, U+8C61, U+8D22, U+8D77, U+8DEF, U+8EAB, U+8F6C, U+8F93, U+8FD8, U+90FD, U+914D, U+91CC, U+949F, U+952E, U+95E8, U+9633, U+9650, U+9677, U+9700, U+975E, U+9875, U+9879, U+987B, U+9884, U+9886, U+98CE, U+9996, U+9A8C;
}
@font-face {
@@ -31,7 +31,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-03.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-03.d2828c8a67.woff2") format("woff2");
unicode-range: U+4E07, U+4E16, U+4E1C, U+4E3E, U+4E50, U+4E66, U+4E91-4E92, U+4E94, U+4E9B, U+4EAB-4EAC, U+4EC0, U+4ECA-4ECB, U+4ED6, U+4EF7, U+4F17-4F18, U+4F4E, U+4F9B, U+4FEE, U+50CF, U+513F, U+5143, U+5149, U+514D, U+5171, U+518C-518D, U+51E0, U+51FB, U+5217, U+5229, U+529F, U+52A9, U+5317, U+5341, U+534E-534F, U+5357, U+535A, U+5361, U+5373, U+5386, U+53BB, U+53CA, U+53F0, U+5404, U+5417, U+5458, U+5468, U+5546, U+5668, U+56E0, U+57CE, U+58F0, U+5934, U+59CB, U+5B58, U+5B98, U+5B9D, U+5BC6, U+5C06, U+5C71, U+5DDE, U+5DF1, U+5E03, U+5E08, U+5E26, U+5E2E, U+5E76, U+5E93, U+5F20, U+5F62, U+5F88, U+5F8B, U+5FEB, U+600E, U+60F3, U+623F, U+624D, U+6253, U+627E, U+628A, U+6295, U+62A4, U+62E9, U+6362, U+641C, U+6539, U+653E-653F, U+6548, U+6599, U+6613, U+663E, U+666F, U+6750, U+6784, U+6837, U+6B22, U+6B64, U+6C11, U+6C14, U+6C5F, U+6D77, U+6D88, U+6E05, U+6E38, U+7167, U+7231, U+738B, U+73AF, U+7403, U+7531, U+7537, U+754C, U+7559, U+767D-767E, U+7740, U+7801, U+795E, U+798F, U+79CD, U+79F0, U+7A7A, U+7AE0, U+7AEF, U+7B7E, U+7B80, U+7D22, U+7EA2, U+7EA6, U+7EC4, U+7EC6, U+7EDC, U+7EF4, U+7F16, U+8001, U+80B2, U+81F3-81F4, U+827A, U+82B1, U+82F1, U+8350, U+83B7, U+88C5, U+897F, U+89C2, U+89C8, U+8A00, U+8BA9, U+8BAF, U+8BB8, U+8BBE, U+8BC6, U+8BD5, U+8BE2, U+8BE5, U+8BED, U+8C03, U+8D23, U+8D39, U+8D70, U+8D85, U+8DB3, U+8F66, U+8F7D, U+8FBE, U+8FD1, U+8FDE, U+901F-9020, U+90A3, U+90AE, U+91C7, U+94FE, U+95FB, U+9605, U+9645, U+9662, U+9664, U+96C6, U+9752, U+97F3, U+9891, U+98DF, U+9A6C, U+9F99;
}
@font-face {
@@ -39,7 +39,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-04.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-04.a2e9a8f438.woff2") format("woff2");
unicode-range: U+4E14, U+4E1D, U+4E3D, U+4E60, U+4E70, U+4E9A, U+4EB2, U+4EC5, U+4EFD, U+4F01, U+4F3C, U+4F4F, U+4FBF, U+5019, U+5145, U+514B, U+516B, U+516D, U+5174, U+5178, U+517B, U+519B, U+51B3, U+51B5, U+5207, U+5212, U+521D, U+529E, U+52BF, U+533B, U+5343, U+534A, U+536B, U+53C8, U+53E4, U+53F2, U+5403, U+5427, U+542C, U+54A8, U+54EA, U+552E, U+559C, U+56E2, U+56ED, U+56F4, U+5740, U+5747, U+575B, U+589E, U+58EB, U+5947, U+5956-5957, U+5A31, U+5A92, U+5B63, U+5B83, U+5BA4, U+5BB3, U+5C14, U+5C1A, U+5C3D, U+5C45, U+5C5E, U+5DF4, U+5E72, U+5E95, U+5E97, U+5F69, U+5F80-5F81, U+5F85, U+5FB7, U+5FD7, U+601D, U+620F, U+626B, U+627F, U+62C9, U+62CD, U+62DB, U+6309, U+63A7, U+64AD, U+6545, U+65AF, U+65C5, U+6625, U+666E, U+667A, U+670B, U+671B, U+674E, U+677F, U+6781, U+6797, U+6839, U+697C, U+6B27, U+6B3E, U+6B62, U+6C7D, U+6C99, U+6D4E, U+6D6A, U+6E29, U+6E2F, U+6EE1, U+6F14, U+6F2B, U+724C, U+72EC, U+7387, U+73A9, U+7533, U+753B, U+76CA, U+7701, U+773C, U+77ED, U+77F3, U+7814, U+793C, U+7981, U+79BB, U+79C1, U+79D8, U+79EF, U+79FB, U+7A76, U+7B11, U+7B54, U+7B56, U+7BB1, U+7BC7, U+7C73, U+7D20, U+7EAA, U+7EC8, U+7ECD, U+7EDD, U+7EED, U+7EFC, U+7FA4, U+8058, U+80CC, U+8111, U+817E, U+822A, U+826F, U+8303, U+8425, U+89C9, U+89D2, U+8BA2, U+8BBF, U+8BC9, U+8BCD, U+8BE6, U+8C22, U+8D26-8D27, U+8D2D, U+8D34, U+8D8A, U+8F6F, U+8F7B, U+8F83, U+8F91, U+8FB9, U+8FCE, U+8FD4, U+8FDC, U+9001-9002, U+94B1, U+9500, U+9519, U+95ED, U+961F, U+9632, U+963F, U+968F-9690, U+96BE, U+9876, U+98DE, U+9988, U+9999, U+9EC4, U+9ED1;
}
@font-face {
@@ -47,7 +47,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-05.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-05.a08d08e632.woff2") format("woff2");
unicode-range: U+4E03, U+4E25, U+4E30, U+4E34, U+4E45, U+4E5D, U+4E89, U+4ED8, U+4F11, U+4F19, U+4F24, U+4F34, U+4F59, U+4F73, U+4F9D, U+4FB5, U+5047, U+505C, U+5170, U+519C, U+51B2, U+51CF, U+5267, U+5356, U+5374, U+5382, U+538B, U+53E5-53E6, U+542F, U+5462, U+5473, U+554A, U+5566, U+5584, U+5708, U+5757, U+57F9, U+5802, U+590F, U+591C, U+591F, U+592B, U+5965, U+5979, U+5A01, U+5B69, U+5B81, U+5BA1, U+5BA3, U+5C04, U+5C3C, U+5C81, U+5DE7-5DE8, U+5E0C, U+5E10, U+5E55, U+5E86, U+5E8F, U+5EAD, U+5EF6, U+5F02, U+5F52, U+5FF5, U+604B, U+60CA, U+60E0, U+6267, U+6279, U+62C5, U+62FF, U+6311, U+63CF, U+6444, U+64CD, U+653B, U+6551, U+65BD, U+65CF, U+65E9, U+665A, U+6682, U+66B4, U+66FE, U+6740, U+6742, U+677E, U+67B6, U+680F, U+68A6, U+6982, U+699C, U+6B4C, U+6B66, U+6B7B, U+6BCD, U+6BDB, U+6C38, U+6C47, U+6C49, U+6CB3, U+6CB9, U+6CE2, U+6D32, U+6D3E, U+6D4F, U+6E56, U+7206, U+725B, U+72C2, U+73ED, U+7565, U+7591, U+7597, U+75C5, U+76AE, U+76D1, U+76D6, U+76DF, U+7834, U+7840, U+7968, U+79C0, U+7A33, U+7A7F, U+7A81, U+7A97, U+7ADE, U+7AE5, U+7B14, U+7C89, U+7D27, U+7EAF, U+7EB3, U+7EB8, U+7EC7, U+7EE7, U+7EFF, U+7F57, U+7FFB, U+805A, U+80A1, U+822C, U+82CF, U+82E5, U+8363, U+836F, U+84DD, U+878D, U+8840, U+8857, U+8863, U+8865, U+8B66, U+8BB2, U+8BDA, U+8BEF, U+8C01, U+8C08, U+8C46, U+8D1F, U+8D35, U+8D5B, U+8D5E, U+8DA3, U+8DDF, U+8DF3, U+8F6E, U+8FDD, U+8FF0, U+8FF7, U+8FFD, U+9000, U+9047, U+9152, U+94C1, U+94F6, U+9644, U+9646, U+9648, U+9669, U+969C, U+96EA, U+97E9, U+987A, U+987E, U+989D, U+9970, U+9986, U+9C7C, U+9C9C;
}
@font-face {
@@ -55,7 +55,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-06.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-06.2a06483af3.woff2") format("woff2");
unicode-range: U+4E4E, U+4E61, U+4E71, U+4EBF, U+4ECD, U+4EE4, U+4F26, U+5012, U+501F, U+51AC, U+51B0, U+51B7, U+5218, U+521A, U+5220, U+5237, U+523B, U+526F, U+5371, U+5385, U+53EB, U+53F3, U+53F6, U+5438, U+54C8, U+54E5, U+552F, U+56F0, U+56FA, U+5706, U+5723, U+574F-5750, U+575A, U+5987-5988, U+59B9, U+59D0, U+59D4, U+5B88, U+5B9C, U+5BDF, U+5BFB, U+5C01, U+5C0A, U+5C3E, U+5C4B, U+5C4F, U+5C9B, U+5CF0, U+5DDD, U+5DE6, U+5E01, U+5E78, U+5E7B, U+5E9C, U+5F39, U+5FD8, U+6000, U+6025, U+6076, U+613F, U+6162, U+6258, U+6263, U+6298, U+62A2, U+62E5, U+62EC, U+635F, U+6377, U+6388-6389, U+638C, U+63A2, U+63D2, U+641E, U+642D, U+6469, U+654F, U+6597, U+65D7, U+65E7, U+6620, U+66F2, U+671D, U+672B, U+6751, U+675F, U+6768, U+67D0, U+6811, U+6863, U+6BD2, U+6CF0, U+6D0B, U+6D17, U+6D59, U+6DD8, U+6DF7, U+6DFB, U+6E7E, U+6F6E, U+6FB3, U+706F, U+70C8, U+70E7, U+719F, U+7236, U+72AF, U+72D0, U+72D7, U+732B, U+732E, U+7389, U+73E0, U+7530, U+75DB, U+7687, U+76DB, U+786C, U+79CB, U+79D2, U+7A0D-7A0E, U+7A3F, U+7ADF, U+7B26, U+7E41, U+7EA0, U+7EC3, U+7F29, U+804A, U+8089, U+80DC, U+811A, U+8131, U+8138, U+821E, U+82E6, U+8349, U+83DC, U+8457, U+8651, U+865A, U+867D, U+86CB, U+8A89, U+8BA8, U+8BAD, U+8BFA, U+8BFE, U+8C6A, U+8D1D, U+8D25, U+8D4F, U+8D62, U+8DD1, U+8DDD, U+8FF9, U+900F-9010, U+9014, U+9057, U+907F, U+9192, U+91CA, U+91CE, U+9488, U+94A2, U+9547, U+955C, U+95F2, U+964D, U+9694, U+96C4-96C5, U+96E8, U+96F6-96F7, U+9732, U+9759, U+9760, U+989C, U+9910, U+996D-996E, U+9B54, U+9E21, U+9EBB, U+9ED8, U+9F50;
}
@font-face {
@@ -63,7 +63,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-07.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-07.06efe23fc3.woff2") format("woff2");
unicode-range: U+4E01, U+4E39, U+4E73, U+4EA1, U+4ED3, U+4ED9, U+4EEA, U+4F0A, U+4F1F, U+4F30, U+4F5B, U+4FA0, U+4FC3, U+4FD7, U+500D, U+504F, U+5076, U+50A8, U+515A, U+5175, U+51A0, U+51C0, U+51E1, U+51E4, U+5200, U+520A, U+523A, U+52AA, U+52B1, U+52B3, U+52C7, U+5348, U+5353, U+5377, U+539A, U+541B, U+5434, U+547C, U+54E6, U+5510, U+5531, U+5609, U+5733, U+5851, U+5854, U+586B, U+5899, U+58C1, U+592E, U+5939, U+5976, U+5986, U+59BB, U+59D3, U+5A18, U+5A74, U+5B59, U+5B87, U+5B97, U+5BA0, U+5BBD-5BBF, U+5BF8, U+5C3A, U+5C4A, U+5E16, U+5E1D, U+5E2D, U+5E8A, U+5F1F, U+5F84, U+5FC6, U+6015, U+602A, U+6050, U+6062, U+6069, U+6167, U+61C2, U+622A, U+6234, U+624E, U+6269, U+6293, U+6297, U+62B1, U+62BD, U+62DF, U+62FC, U+6302, U+6325, U+63ED, U+6458, U+6563, U+65FA, U+6653, U+6696-6697, U+66DD, U+66FF, U+676F-6770, U+67D3, U+684C, U+6865, U+6885, U+68B0, U+68EE, U+690D, U+6B23, U+6B32, U+6B8A, U+6BD5, U+6C89, U+6C9F, U+6D01, U+6D1E, U+6D25, U+6D89, U+6DA6, U+6DB2, U+6ED1, U+6F02, U+6F5C, U+70DF, U+7126, U+71C3, U+7259, U+731C, U+745E, U+74E3, U+751A, U+751C, U+7532, U+7545, U+75BE, U+7761, U+7B51, U+7CA4, U+7CD6, U+7D2B, U+7D2F, U+7EB9, U+7ED8, U+7F13, U+7F18, U+7F8A, U+8033, U+80A4-80A5, U+80E1, U+817F, U+829D, U+8336, U+840C, U+8499, U+864E, U+8861, U+88AD, U+88C1, U+8BD1, U+8BD7, U+8C37, U+8D38, U+8DE8, U+8F85, U+8FEA, U+9006, U+9012, U+904D, U+906D, U+9080, U+90D1, U+9177, U+9274, U+94FA, U+9501, U+9634-9636, U+9707, U+9738, U+9769, U+9A7B, U+9A97, U+9AA8, U+9B3C, U+9B42, U+9C81, U+9E1F, U+9F84;
}
@font-face {
@@ -71,7 +71,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-08.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-08.5ba68c3638.woff2") format("woff2");
unicode-range: U+4E4C, U+4E88, U+4EA6, U+4ED4, U+4EFF, U+4FA3, U+4FA7, U+4FC4, U+503E, U+5077, U+5141, U+5144, U+517C-517D, U+5192, U+51C9, U+51ED, U+51EF, U+5238, U+5251, U+526A, U+52DF, U+52FF, U+53A6, U+53A8, U+53EC, U+5410, U+559D, U+55B7, U+5634, U+573E, U+5766, U+5783, U+585E, U+58A8, U+58EE, U+594F, U+5999, U+5A1C, U+5A46, U+5B54-5B55, U+5B64, U+5B85, U+5B8B, U+5B8F, U+5BD2, U+5BFF, U+5C16, U+5C24, U+5C97, U+5E05, U+5E45, U+5E7C, U+5E84, U+5E9F, U+5F03, U+5F90, U+5FBD, U+5FD9, U+5FE7, U+6012, U+6052, U+6089, U+60A3, U+60A6, U+60B2, U+60D1, U+626C, U+626E, U+6270, U+62B5, U+62D2, U+62DC, U+632F, U+63AA, U+63E1, U+643A, U+6446, U+654C, U+6562, U+656C, U+65E2, U+660C, U+6628, U+6652, U+6668, U+6676, U+66FC, U+6717, U+676D, U+67AA, U+67D4, U+6843, U+6846, U+6881, U+68D2, U+695A, U+69FD, U+6A2A, U+6C60, U+6C64, U+6CAA, U+6CC9, U+6CDB, U+6CE1, U+6CFD, U+6D1B, U+6D6E, U+6DE1, U+6E10, U+6E7F, U+6F0F, U+704C, U+706D, U+7070, U+7089, U+70B8, U+718A, U+723D, U+732A, U+739B, U+73CD, U+74F6, U+7518, U+756A, U+75AF, U+75C7, U+76D2, U+76D7, U+7763, U+78E8, U+7956, U+795D, U+7965, U+79DF, U+79E6, U+7C4D, U+7C97, U+7ED1, U+7EE9, U+8000, U+8010, U+8017, U+80AF, U+80CE, U+80F6, U+80F8, U+8212, U+8273, U+82F9, U+83AB, U+83B1, U+83F2, U+8428, U+8584, U+871C, U+888B, U+88C2, U+88E4, U+8986, U+8BCA, U+8BF1, U+8C31, U+8C8C, U+8D21, U+8D56, U+8D5A, U+8D60, U+8D75-8D76, U+8D8B, U+8F68, U+8FA3, U+8FC5, U+903C, U+9075, U+9178, U+94BB, U+950B, U+9526, U+95EA, U+963B, U+9686, U+978B, U+987F, U+9A71, U+9A7E, U+9B45, U+9EA6, U+9ECE, U+9F13;
}
@font-face {
@@ -79,7 +79,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-09.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-09.0607afdd09.woff2") format("woff2");
unicode-range: U+4E22, U+4E32, U+4E54, U+4E58, U+4E95, U+4EC1, U+4F0F, U+4F2F, U+4F38, U+4F69, U+4FCA, U+51CC, U+5211, U+5242, U+5269, U+52B2, U+52D2, U+52E4, U+533F, U+5366, U+540A, U+5413, U+5439, U+5448, U+5496, U+54ED, U+5565, U+5761, U+57AB, U+5806, U+593A, U+594B, U+5954, U+5996, U+59C6, U+59FF, U+5C18, U+5C1D, U+5CA9, U+5CB8, U+5EC9, U+5F04, U+5F7B, U+5FA1, U+5FAA, U+5FCD, U+5FE0, U+5FFD, U+60AC, U+60EF, U+614E, U+6276, U+62C6, U+62D6, U+6316, U+633A, U+6355, U+642C, U+6447, U+6491, U+649E, U+64C5, U+65C1, U+65CB, U+65E6, U+6606, U+664B, U+6731, U+675C, U+67CF, U+67DC, U+67F1, U+68AF, U+6B3A, U+6B8B, U+6BC1, U+6BEB, U+6C61, U+6C88, U+6CBF, U+6CEA, U+6D2A, U+6D45, U+6D53, U+6D66, U+6D74, U+6D82, U+6DA8, U+6DAF, U+6DB5, U+6DEB, U+6ECB, U+6EDA, U+6EE8, U+707E, U+708E, U+70AE, U+70BC, U+70C2, U+70E6, U+7237-7238, U+72FC, U+730E, U+731B, U+73BB, U+7483, U+74DC, U+74E6, U+7586, U+7626, U+76C8, U+76D0, U+775B, U+77AC, U+77FF, U+788E, U+78B0, U+7A77, U+7AF9, U+7BEE, U+7C92, U+7EB1, U+7EB7, U+7ED5, U+7F6A, U+7F72, U+7FBD, U+7FFC, U+8083, U+808C, U+80A9, U+80C6, U+8109, U+810F, U+8150, U+8170, U+8179, U+819C, U+820D, U+8230, U+8239, U+827E, U+8377, U+8389, U+83B2, U+8463, U+8482, U+867E, U+8896, U+88D9, U+8BDE, U+8C13, U+8C28, U+8D24, U+8D2B, U+8D37, U+8DB4, U+8DC3, U+8DF5, U+8E2A, U+8E48, U+8F86, U+8F88-8F89, U+8F9B, U+8F9E, U+8FA8, U+8FBD, U+8FC1, U+8FC8, U+9003, U+90A6, U+90BB, U+90C1, U+90CE, U+90ED, U+9189, U+94DC, U+9505, U+95F9, U+9655, U+966A, U+96FE, U+970D, U+9896-9897, U+99A8, U+9A82, U+9A91, U+9E7F, U+9F20;
}
@font-face {
@@ -87,7 +87,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-10.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-10.10add3836a.woff2") format("woff2");
unicode-range: U+4E08, U+4E11, U+4E4F, U+4EF0, U+4F0D, U+4F2A, U+4FF1, U+507F, U+50AC, U+50B2, U+5151, U+5154, U+51BB, U+51DD, U+51F0, U+51F6, U+51FD, U+5272, U+5367, U+5389, U+53C9, U+53E0, U+543B, U+5440, U+5446, U+54F2, U+5561, U+574A, U+5751, U+57C3, U+5821, U+582A, U+58F3, U+5938, U+5948-5949, U+5962, U+5978, U+59D1, U+5A03, U+5A07, U+5AC1, U+5ACC, U+5AE9, U+5BB4, U+5BC4, U+5C3F, U+5CB3, U+5D07, U+5D29, U+5E15, U+5E3D, U+5E7D, U+5F7C, U+5F92, U+5FCC, U+6016, U+609F-60A0, U+60DC, U+60E8, U+6108, U+6148, U+6212, U+6284, U+62D3-62D4, U+6350, U+63F4, U+6478, U+6492, U+64E6, U+6591, U+65A4, U+6670, U+6735, U+6746, U+67F3, U+6842, U+68C9, U+68CB, U+6A31, U+6B96, U+6C0F, U+6C1B, U+6C27, U+6C57, U+6CC4, U+6CE5, U+6D69, U+6E20-6E21, U+6E58, U+6EAA, U+6EE4, U+6EF4, U+7092, U+70AB, U+71D5, U+7262, U+7275, U+72EE, U+72F1, U+7384, U+73B2, U+7434, U+74F7, U+758F, U+75BC, U+75D5, U+764C, U+76FE, U+7709, U+7720, U+7855, U+788D, U+7891, U+78A7, U+78C1, U+7A00, U+7B79, U+7BAD, U+7C98, U+7CAE, U+7CCA, U+7CD5, U+7EA4, U+7EB5, U+7EBD, U+7EEA, U+7F5A, U+7FD4, U+806A, U+8096, U+80A0, U+80BF, U+80D6, U+80DE, U+8102, U+81C0, U+8292, U+82B3, U+82D7, U+8352, U+8361, U+83CC, U+841D, U+8461, U+84B8, U+8521, U+857E, U+8650, U+866B, U+86C7, U+8776, U+8870, U+889C, U+88F8, U+8BC8, U+8BF8, U+8C0B, U+8C10, U+8D2F, U+8D3A, U+8D3E, U+8D4B-8D4C, U+8D54, U+8D64, U+8D6B, U+8DCC, U+8E0F, U+8F74, U+8FB0, U+8FDF, U+8FEB, U+9065, U+94AE, U+9510, U+9521, U+9675-9676, U+96D5, U+98D8, U+997C, U+9A70, U+9A76, U+9A9A, U+9AA4, U+9E23, U+9F3B, U+9F7F;
}
@font-face {
@@ -95,7 +95,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-11.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-11.70dcdc3e0e.woff2") format("woff2");
unicode-range: U+4E18, U+4E27, U+4E43, U+4E8F, U+4EAD, U+4EC7, U+503A, U+50BB, U+5146, U+52AB, U+52FE, U+5339, U+535C, U+5362, U+53D4, U+53F9, U+54B8, U+5507, U+5524, U+5582, U+558A, U+55B5, U+561B, U+56CA, U+5782, U+5893, U+5915, U+5951, U+5983, U+59AE, U+59DA, U+59DC, U+5B5D, U+5B5F, U+5BD3, U+5BE8, U+5BFA, U+5C38, U+5C48, U+5CAD, U+5DE1, U+5DFE, U+5ECA, U+5F25, U+5F2F, U+5F6D, U+5F79, U+6021, U+6028, U+60F9, U+6109, U+6124, U+6155, U+6170, U+61D2, U+6251, U+626D, U+6291, U+629A-629B, U+62AB, U+62E8, U+62F3, U+6321, U+6324, U+6349, U+6398, U+6495, U+64A4, U+64B0, U+64CE, U+6566, U+659C, U+65E8, U+6602, U+6635, U+6655, U+6674, U+66F9, U+6734, U+679A, U+679D, U+67EF, U+67F4, U+6851, U+6876, U+68A8, U+6905, U+6B20, U+6B49, U+6BC5, U+6C41, U+6C6A, U+6C83, U+6CF3, U+6D9B, U+6DC0, U+6DCB, U+6E1D, U+6EE9, U+6F58, U+70E4, U+71E5, U+722C, U+7267, U+72B9, U+72E0, U+7334, U+73AB, U+7433, U+7470, U+75AB, U+75B2, U+7686, U+76C6, U+77E2, U+7802, U+7816, U+7978, U+7A74, U+7A9D, U+7B52, U+7B5B, U+7EBA, U+7ECE, U+7EF3, U+7EF5, U+7F1D, U+7F55, U+7F69, U+7FE0, U+809A, U+809D, U+80C3, U+8106, U+8154, U+817B, U+81C2, U+820C, U+821F, U+82A6, U+82AC, U+82AF, U+82CD, U+8302, U+838E, U+839E, U+8404, U+845B, U+852C, U+8587, U+85AA, U+85E4, U+8679, U+8702, U+8774, U+87BA, U+886B, U+8C23, U+8C6B, U+8D2A, U+8D3C, U+8D74, U+8E29, U+8F69, U+8FA9, U+900A, U+901B, U+901D, U+9022, U+9038, U+9093, U+90AA, U+9171, U+9489, U+94C3, U+9508, U+953B, U+95FD, U+9601, U+9614, U+971E, U+9756, U+97F5, U+9888, U+9971, U+9B4F, U+9E3F, U+9E45, U+9E4F, U+9E70, U+9F0E;
}
@font-face {
@@ -103,7 +103,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-12.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-12.b23a547064.woff2") format("woff2");
unicode-range: U+4E1B, U+4E38, U+4E59, U+4E7E, U+4EF2, U+4F1E, U+4F50, U+4FA6, U+4FAF, U+4FE9, U+5085, U+50F5, U+51AF, U+51D1, U+51F8, U+52A3, U+52C3, U+5300, U+5319, U+5378, U+538C, U+5398, U+53D9, U+5415, U+541E, U+543E, U+5475, U+54AA, U+54AC, U+5760, U+5764, U+57CB, U+5835, U+5858, U+5885, U+5974, U+59A5, U+5A77, U+5A9A, U+5B99, U+5BAA, U+5BB5, U+5BC2, U+5C2C, U+5C34, U+5C41, U+5C65, U+5CE1, U+5D4C, U+5DC5, U+5E06, U+5E42, U+5EF7, U+5F17, U+5F66, U+6064, U+6068, U+606D, U+6070, U+607C, U+6094, U+60D5, U+60E7, U+6241, U+6247, U+626F, U+6296, U+62AC, U+62B9, U+62CC, U+62FE, U+6367, U+63A9, U+644A, U+64BC, U+6500, U+658C, U+65A5, U+65EC-65ED, U+6691, U+66A8, U+6749, U+674F, U+680B, U+6912, U+6A59, U+6A61, U+6BBF, U+6BEF, U+6CCA, U+6CCC, U+6D12, U+6D3D, U+6D46, U+6D8C, U+6DEE, U+6E14, U+6E17, U+6E23, U+6E34, U+6E83, U+6EA2, U+6EB6, U+6F06, U+6F20, U+714C, U+7164, U+716E, U+7199, U+72AC, U+73CA, U+742A, U+743C, U+745C, U+755C, U+75F4, U+7624, U+763E, U+76F2, U+77DB, U+77E9, U+780D, U+7897, U+78B3, U+78C5, U+796D, U+79FD, U+7A84, U+7B3C, U+7B4B, U+7EB2, U+7ED2, U+7EE3, U+7F20, U+7F34, U+7F50, U+7F9E, U+80BA, U+80BE, U+80C0-80C1, U+814A, U+817A, U+8180, U+818F, U+81E3, U+81ED, U+8270, U+8299, U+82D1, U+83C7, U+840D, U+8427, U+848B, U+84C4, U+84C9, U+84EC, U+853D, U+86EE, U+8700, U+8854, U+886C, U+8881, U+88D5, U+88F9, U+8BC0, U+8C0A, U+8C1C, U+8C79, U+8EBA, U+8F70, U+8FB1, U+9017, U+903B, U+906E, U+9102, U+946B, U+94A5, U+94DD, U+94ED, U+94F8, U+95FA, U+964C, U+96C0, U+971C, U+9753, U+97E6, U+9881, U+98A0, U+9E2D, U+9E64;
}
@font-face {
@@ -111,7 +111,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-13.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-13.c1537fde0c.woff2") format("woff2");
unicode-range: U+4E56, U+4EA9, U+4ED5, U+4F10, U+4F3D, U+4F6C, U+4F88, U+5021, U+5179, U+5180, U+5188, U+51F9, U+5203, U+522E, U+524A, U+529D, U+52CB, U+5320, U+5349, U+5375, U+5395, U+53DB, U+541F, U+5428, U+5435, U+548B, U+54C0, U+54D4, U+54E9, U+5589, U+55BB, U+55E8, U+55EF, U+576A, U+58F6, U+59A8, U+59E8, U+59EC, U+5A36, U+5AB3, U+5BDE, U+5D14, U+5D1B, U+5DE2, U+5DEB, U+5E9E, U+5F18, U+5F26, U+5F64, U+5F70, U+60E9, U+6101, U+611A, U+6208, U+621A, U+6233, U+6252, U+6254, U+62BC, U+62D8, U+62E6, U+62EF, U+6323, U+632A, U+633D, U+6405, U+640F, U+6454, U+64A9, U+64B8, U+6572, U+65A9, U+660F, U+6614, U+6795, U+67A3, U+67AB, U+6808, U+6850, U+68B3, U+68B5, U+68DA, U+6A58, U+6B47, U+6C90, U+6CA7, U+6CAB, U+6CFC, U+6D51, U+6D78, U+6DA9, U+6DC7, U+6E0A, U+6E5B, U+6F6D, U+6FA1, U+707F, U+70D8, U+70EB, U+70F9, U+7130, U+714E, U+71AC, U+7235, U+7239, U+745F, U+7476, U+7529, U+7538, U+7838, U+7845, U+789F, U+78CA, U+79C9, U+7A3B, U+7A46, U+7AED, U+7CB9, U+7CDF, U+7F05, U+7F62, U+7FC1, U+7FC5, U+7FD8, U+7FF0, U+800D, U+8015, U+8036, U+80A2, U+80AA, U+8116, U+813E, U+8155, U+8206, U+8247, U+82AD, U+82BD, U+8304-8305, U+8346, U+8393, U+83B9, U+83CA, U+8469, U+846C, U+8471, U+8549, U+859B, U+8680-8682, U+8721, U+87F9, U+884D, U+8877, U+888D, U+88D4, U+8A93, U+8C05, U+8C0D, U+8C26, U+8C29, U+8C2D, U+8D1E, U+8D41, U+8DEA, U+8E22, U+8EB2, U+8F90, U+8F96, U+8F9F, U+903E, U+90CA, U+916C, U+917F, U+9493, U+94A9, U+9524, U+95EF, U+95F7, U+9640, U+9706, U+9709, U+9774, U+9887, U+9976, U+997F, U+9A74, U+9A84, U+9E26, U+9E9F, U+9F9F;
}
@font-face {
@@ -119,7 +119,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-14.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-14.5da31d9a6a.woff2") format("woff2");
unicode-range: U+4E19, U+4E2B, U+4EA8, U+4ED1, U+4ED7, U+4F51, U+4F63, U+4FA8, U+4FCF, U+5029, U+50E7, U+51A4, U+51B6, U+5239, U+5256, U+5265, U+532A, U+5351, U+537F, U+5401, U+5457, U+548F, U+5492, U+54B1, U+54B3, U+54BD, U+54C7, U+54D1, U+54DF, U+5564, U+556A, U+5598, U+563B, U+566A, U+574E, U+575D-575E, U+57D4, U+584C, U+58E4, U+58F9, U+5937, U+598D, U+599E, U+5A05, U+5A49, U+5A9B, U+5AE3, U+5BB0, U+5C60-5C61, U+5D0E, U+5DE9, U+5DF7, U+5E18, U+5E9A, U+5EB8, U+5F0A, U+5F13, U+601C, U+6084, U+608D, U+6127, U+614C, U+61BE, U+62A0, U+634F, U+635E, U+6361, U+6380, U+63FD, U+6577, U+658B, U+6643, U+6657, U+6760, U+67AF, U+67C4, U+67E0, U+6817, U+683D, U+6897, U+68D5, U+690E, U+69B4, U+6B67, U+6B6A, U+6BB4, U+6C28, U+6C55, U+6C70, U+6C82, U+6CA6, U+6CB8, U+6CBE, U+6CF5, U+6DD1, U+6EDE, U+6F47, U+6F4D, U+6F84, U+6F9C, U+70AD, U+710A, U+7115, U+722A, U+7261, U+7272, U+7280, U+72F8, U+7490, U+754F, U+75D2, U+7696, U+76B1, U+76EF, U+76FC, U+777F, U+778E, U+77DC, U+77F6, U+78B1, U+7948, U+795B, U+7985, U+79BD-79BE, U+7A83, U+7A8D, U+7AA5, U+7AD6, U+7CA5, U+7D6E, U+7EAC, U+7EEF, U+7F00, U+7F06, U+7F38, U+7FA1, U+803B, U+803D, U+810A, U+819D, U+81A8, U+829C, U+8328, U+832B, U+8367, U+83E0, U+83F1, U+846B, U+8475, U+84B2, U+8574, U+8611, U+86D9, U+8A79, U+8BBD, U+8BE0-8BE1, U+8C0E, U+8D29, U+8D31, U+8D63, U+8D81, U+8E81, U+8F7F, U+9042, U+90B1, U+90B5, U+9187, U+918B, U+9499, U+94A6, U+94C5, U+9540, U+9600, U+9610, U+96B6, U+96C7, U+96EF, U+978D, U+97F6, U+987D, U+9882, U+98D9, U+9965, U+996A, U+9972, U+9A8F, U+9AD3, U+9C8D;
}
@font-face {
@@ -127,7 +127,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-15.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-15.b7b0bab05f.woff2") format("woff2");
unicode-range: U+4E52, U+4EC6, U+4F83, U+4F8D, U+4FDE, U+4FEF, U+502A, U+5112, U+515C, U+51A5, U+51F3, U+5243, U+52C9, U+53A2, U+53EE, U+54AF, U+54CE, U+54FA, U+54FC, U+5580, U+5587, U+5632, U+563F, U+56A3, U+56DA, U+5792, U+5815, U+5955, U+5960, U+59D7, U+5A1F, U+5AC2, U+5B9B, U+5BE1, U+5C39, U+5C4E, U+5C51, U+5C6F, U+5C9A, U+5CFB, U+5D16, U+5F27, U+5F6A, U+5F6C, U+603C, U+609A, U+6168, U+61C8, U+62D0, U+62F1, U+62FD, U+631A, U+6328, U+632B, U+6346, U+638F, U+63A0, U+63C9, U+655E, U+6590, U+660A, U+6615, U+6627, U+66AE, U+66E6, U+66F0, U+67DA, U+67EC, U+6816, U+6893, U+68AD, U+68CD, U+68F5, U+6960, U+6977, U+6984, U+69DB, U+6A71, U+6AAC, U+6BB7, U+6CE3, U+6CFB, U+6D47, U+6DA1, U+6DC4, U+6E43, U+6E9C, U+6EAF, U+6EE5, U+6F8E, U+7011, U+7076, U+7096, U+70DB, U+70EF, U+711A, U+718F, U+7194, U+727A, U+72D9, U+72ED, U+7325, U+73AE, U+73BA, U+73C0, U+7410, U+7426, U+7504, U+7554, U+75AE, U+75B9, U+75D8, U+762B, U+766B, U+7682, U+7750, U+7779, U+7784, U+77BB, U+77EB, U+77EE, U+786B, U+78F7, U+79E9, U+7A79, U+7B1B, U+7B28, U+7BF7, U+7EC5, U+7EEE, U+7EF8, U+7EFD, U+7F14, U+7F1A, U+8086-8087, U+809B, U+8165, U+8214, U+8231, U+830E, U+831C, U+835F, U+83E9, U+8403, U+849C, U+8513, U+851A, U+85AF, U+868A, U+86DB, U+8718, U+874E, U+8822, U+8910, U+8944, U+8BB6, U+8BBC, U+8D50, U+8E72, U+8F9C, U+900D, U+9063, U+90A2, U+90B9, U+9165, U+9175, U+94F2, U+950C, U+952F, U+9576, U+95F8, U+961C, U+9631, U+9699, U+96A7, U+96C1, U+973E, U+9761, U+97AD, U+97E7, U+97EC, U+98A4, U+997A, U+9A73, U+9AE6, U+9B44, U+9CB8, U+9E3D, U+9ECF, U+9ED4, U+9EDB;
}
@font-face {
@@ -135,7 +135,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-16.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-16.78d7efaa73.woff2") format("woff2");
unicode-range: U+4E1E, U+4E5E, U+4F3A, U+4F5F, U+4FEA, U+5026, U+508D, U+5189, U+5254, U+5288, U+52D8, U+52FA, U+5306, U+5308, U+5384, U+53ED, U+543C, U+5450, U+5455, U+5466, U+54C4, U+54EE, U+5578, U+55A7, U+55DC, U+561F, U+5631, U+566C, U+572D, U+575F, U+57AE, U+57E0, U+5830, U+594E, U+5984, U+5992-5993, U+5A04, U+5BDD, U+5C7F, U+5C82, U+5E1C, U+5E62, U+5E90, U+5ED3, U+5ED6, U+5F08, U+607A, U+60BC, U+60DF, U+625B, U+6292, U+62E2, U+6363, U+6467, U+6512, U+655B, U+66A7, U+6714, U+675E, U+67A2, U+67FF, U+6805, U+6813, U+6869, U+68A7, U+68E0, U+68FA, U+6930, U+6986, U+69A8, U+69DF, U+6A44, U+6A80, U+6C13, U+6C1F, U+6C22, U+6C2F, U+6C40, U+6C76, U+6C81, U+6C9B, U+6CA5, U+6CF8, U+6DA4, U+6DF3, U+6E32, U+6E85, U+6EBA, U+6F13, U+6F33, U+6F62, U+707C, U+7119, U+715E, U+7172, U+72C4, U+73D1, U+7405, U+7455, U+7487, U+7574, U+7578, U+75A4, U+75EB, U+7693, U+7737-7738, U+7741, U+776B, U+7792, U+77A7, U+77A9, U+77B3, U+788C, U+78BE, U+7984, U+79A7, U+79B9, U+79E4, U+7A1A, U+7A57, U+7AA6, U+7B0B, U+7B5D, U+7C27, U+7C7D, U+7CAA, U+7CD9, U+7CEF, U+7EDA, U+7EDE, U+7F24, U+7FE1, U+803F, U+8042, U+8046, U+80FA, U+81B3, U+81FB, U+8258, U+8335, U+8339, U+8354, U+836B, U+840E, U+85B0, U+85FB, U+865E, U+868C, U+8695, U+86AA, U+8717, U+8749, U+874C, U+89C5, U+8BDB, U+8BF5, U+8C41, U+8C5A, U+8D3F, U+8D4E, U+8D9F, U+8E44, U+8FED, U+9005, U+9082, U+90AF, U+90DD, U+90E1, U+90F8, U+9119, U+916F, U+9176, U+949E, U+94A7, U+94C2, U+9525, U+964B, U+96CC, U+96CF, U+9704, U+9716, U+9A6D, U+9A7C, U+9A7F, U+9B41, U+9CA4, U+9CA8, U+9CC4, U+9CDE, U+9E92;
}
@font-face {
@@ -143,7 +143,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-17.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-17.7a979e8575.woff2") format("woff2");
unicode-range: U+4E10, U+4E4D, U+4E53, U+4F5A, U+4F70, U+4FAE, U+4FD8, U+4FFA, U+501A, U+516E, U+51C4, U+5201, U+5352, U+5364, U+547B, U+5495, U+54C6, U+54D7, U+54E8, U+5509, U+5594, U+55C5, U+55D3, U+55FD, U+560E, U+5662, U+5669, U+56BC, U+5742, U+576F, U+5784, U+57A2, U+5824, U+598A, U+59A9, U+5A20, U+5A25, U+5AC9, U+5B5C, U+5B75, U+5B7D, U+5BC5, U+5C27, U+5C49, U+5C90, U+5DCD, U+5E27, U+5E37, U+5F1B, U+604D, U+6055, U+6073, U+60EB, U+618B, U+61F5, U+620A, U+620C, U+6273, U+62C7, U+62ED, U+62F7, U+6320, U+6342, U+6345, U+63B0, U+6401-6402, U+6413, U+6556, U+65A7, U+65F1, U+65F7, U+663C, U+665F, U+6687, U+66D9, U+673D, U+6756, U+6789, U+67B8, U+6854, U+68D8, U+68F1, U+6A0A, U+6A1F, U+6B7C, U+6BD9, U+6C2E, U+6C5D, U+6C7E, U+6D31, U+6D4A, U+6D85, U+6E24, U+6E2D, U+6EC7, U+6ED5, U+6F3E, U+6F88, U+701A, U+7078, U+70AC, U+70C1, U+725F, U+7396, U+7409, U+7422, U+745A, U+7480, U+74A7-74A8, U+752B, U+75A1, U+75F0, U+7656, U+7699, U+76CF, U+77E3, U+780C, U+785D, U+78D5, U+7941, U+7977, U+79C3, U+7A3D, U+7A91, U+7A9F, U+7AE3, U+7B77, U+7C3F, U+7ECA, U+8038, U+808B, U+8098, U+80B4, U+8110, U+8236, U+828B, U+82A5, U+82B7-82B9, U+82D4, U+82DB, U+82DF, U+82EF, U+8309, U+8338, U+8386, U+83CF, U+8431, U+8537, U+85C9, U+8715, U+8759, U+8760, U+8845, U+8D2C, U+8E66, U+8E6D, U+8EAF, U+8F67, U+8FC4, U+8FE6, U+902E, U+9091, U+914B, U+916E, U+919B, U+949B, U+94A0, U+94B0, U+94B3, U+9541-9542, U+9556, U+95F5, U+960E, U+9647, U+968B, U+96CD, U+9713, U+97ED, U+9890, U+9985, U+9992, U+9A6F, U+9A81, U+9A86, U+9AB8, U+9E25, U+9F9A;
}
@font-face {
@@ -151,7 +151,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-18.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-18.7295cea9ce.woff2") format("woff2");
unicode-range: U+4EB5, U+4EE1, U+4F64, U+4F7B, U+4F97, U+4FED, U+5088, U+50A3, U+50F3, U+5195, U+5241, U+52BE, U+52D0, U+532E, U+5420, U+5480, U+5499-549A, U+55E3, U+5618, U+565C, U+57A3, U+589F, U+592D, U+5A29, U+5A34, U+5A7A, U+5A7F, U+5AD6, U+5B09, U+5BC7, U+5C09, U+5C91, U+5CB1, U+5CE8, U+5D2D, U+5D4A, U+5D69, U+5E1B, U+5E87, U+5F0B, U+5F57, U+5F5D, U+5FFB, U+6020, U+6177, U+61FF, U+627C, U+62C2, U+62F4, U+634D, U+6390, U+63A3, U+63E3, U+642A, U+64AE, U+64C2, U+64D2, U+64E2, U+65A1, U+65C3, U+65CC, U+667E, U+6684, U+66DC, U+6775, U+67D8, U+683E, U+6853, U+6866, U+68A2, U+6995, U+6B87, U+6BA1, U+6BD7, U+6C85, U+6CAD, U+6CD7, U+6CFE, U+6D2E, U+6D54, U+6D9E-6D9F, U+6DA7, U+6DAA, U+6DBF, U+6DC6, U+6DF9, U+6E0D, U+6E5F, U+6EA7, U+6EE6, U+6F5E, U+6F7C, U+6FD2, U+70B3, U+70BD, U+70CA, U+70E8, U+7281, U+72E9, U+733F, U+7459, U+74EF, U+765C, U+768B, U+76D4, U+7729, U+7762, U+7766, U+77AA, U+77B0, U+78D0, U+7940, U+7947, U+7949, U+795C, U+797A, U+7A20, U+7A92, U+7B71, U+7B95, U+7BB4, U+7BF1, U+7C9F, U+7EB6, U+7EDB, U+7EE5, U+7EF7, U+7F07, U+7F09, U+7F15, U+7F81, U+7F8C, U+7FAF, U+7FB9, U+8026, U+80F0, U+814B-814C, U+816E, U+818A, U+8205, U+8235, U+8317, U+8365, U+8385, U+8392, U+83C1, U+853B, U+854A, U+8654, U+8783, U+892A, U+8BC5, U+8C04, U+8C2F, U+8D49, U+8D58, U+8DBE, U+8E1D, U+8FAB, U+90E7, U+916A, U+91C9, U+91DC, U+948B, U+949D, U+9502, U+951A, U+9523, U+9551, U+956D, U+956F, U+95E9, U+9607-9608, U+9611, U+962A, U+962E, U+9649, U+96F3, U+9739, U+9776, U+97A0, U+988A, U+988D, U+9975, U+9A8B, U+9AB7, U+9ABC, U+9AC5;
}
@font-face {
@@ -159,7 +159,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-19.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-19.69d6a1f73b.woff2") format("woff2");
unicode-range: U+4EA2, U+4EB3, U+4EEB, U+5043, U+510B, U+5156, U+51FC, U+53F1, U+54A4, U+5676, U+5729, U+577B, U+57A6, U+5B5A, U+5B95, U+5C94, U+5CA2, U+5CAB, U+5CB7, U+5CC4, U+5CD2, U+5CD9, U+5CEA, U+5CED, U+5D02-5D03, U+5D06, U+5EB5, U+6175, U+621B, U+62E7, U+6382, U+6387, U+6396, U+63B7, U+6538, U+6634, U+664F, U+6666, U+669D, U+6710, U+672D, U+679E, U+67AD, U+67D1, U+67DE, U+68E3, U+69D0, U+6B59, U+6C10, U+6C50, U+6C68, U+6C9A, U+6CAE, U+6CBC-6CBD, U+6D3C, U+6D5A, U+6D60, U+6DC5, U+6DD6, U+6DDE, U+6E0C, U+6E0E, U+6E11, U+6E44, U+6E86, U+6EC1, U+6F2F, U+6FA7, U+6FC2, U+6FC9, U+6FDE, U+6FE0, U+6FEE, U+705E, U+70FD, U+7109, U+728D, U+7317, U+731D, U+736D, U+7374, U+73D9, U+73F2, U+74EE, U+7572, U+75B5, U+75CA, U+75D4, U+75EA, U+76C2, U+76F1, U+7719, U+7800, U+781A, U+789A, U+78F4, U+79BA, U+79ED, U+7A37, U+7B60, U+7B90, U+7BE1, U+7C07, U+7DA6, U+7E82, U+7F19, U+7F2A, U+7F58, U+7F79, U+8006, U+8012, U+81C6, U+8297, U+82AE, U+8301, U+830C, U+8343, U+8398, U+83BD, U+8497, U+84DF, U+84E5, U+853A, U+8572, U+85C1, U+86DF, U+8821, U+8862, U+8983, U+8BA5, U+8BB7, U+8BCF, U+8BE3, U+8BEB, U+8C1F, U+8D32, U+8F78, U+8F8D, U+8FE5, U+8FF8, U+9083, U+9095, U+9097, U+909B, U+90B3, U+90BA, U+90CF, U+90D3, U+90EB, U+90EF, U+90F4, U+90FE, U+9104, U+911E, U+9122, U+912F, U+9131, U+9149, U+915D, U+91B4, U+9506, U+9602, U+9606, U+9621, U+9642, U+965F, U+9661, U+9668, U+9685, U+96B0, U+975B, U+9A85, U+9C85, U+9E20, U+9E6B, U+9E93, U+9EDF;
}
@font-face {
@@ -167,7 +167,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-20.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-20.72e1f9000e.woff2") format("woff2");
unicode-range: U+3918-4DFF, U+4E02, U+4E04-4E06, U+4E0C, U+4E0F, U+4E12, U+4E15, U+4E17, U+4E1F-4E21, U+4E23, U+4E26, U+4E28-4E29, U+4E2C, U+4E2E-4E2F, U+4E31, U+4E33, U+4E35-4E37, U+4E3C, U+4E3F-4E42, U+4E44, U+4E46-4E47, U+4E4A, U+4E51, U+4E55, U+4E57, U+4E5A-4E5C, U+4E62-4E65, U+4E67-4E6F, U+4E72, U+4E74-4E7D, U+4E7F-4E85, U+4E87, U+4E8A, U+4E8D, U+4E90, U+4E93, U+4E96-4E99, U+4E9C-4EA0, U+4EA3, U+4EA5, U+4EAA, U+4EAF-4EB1, U+4EB4, U+4EB6-4EB9, U+4EBB-4EBE, U+4EC2-4EC4, U+4EC8-4EC9, U+4ECC, U+4ECF-4ED0, U+4ED2, U+4EDA-4EE0, U+4EE2, U+4EE6-4EE9, U+4EED-4EEF, U+4EF1, U+4EF3-4EF5, U+4EF8-4EFA, U+4EFC, U+4EFE, U+4F00, U+4F02-4F09, U+4F0B-4F0C, U+4F0E, U+4F12-4F16, U+4F1B-4F1D, U+4F21-4F23, U+4F25, U+4F27-4F29, U+4F2B-4F2E, U+4F31-4F33, U+4F35-4F37, U+4F39, U+4F3B, U+4F3E-4F45, U+4F47-4F4C, U+4F52, U+4F54, U+4F56-4F58, U+4F5D-4F5E, U+4F61-4F62, U+4F65-4F68, U+4F6A-4F6B, U+4F6D-4F6F, U+4F71-4F72, U+4F74-4F7A, U+4F7C-4F7E, U+4F80-4F82, U+4F84-4F87, U+4F89-4F8A, U+4F8C, U+4F8E-4F96, U+4F98-4F9A, U+4F9C, U+4F9E-4F9F, U+4FA1-4FA2, U+4FA4-4FA5, U+4FA9-4FAD, U+4FB0-4FB4, U+4FB6-4FBE, U+4FC0-4FC2, U+4FC5-4FC9, U+4FCB-4FCE, U+4FD0-4FD6, U+4FD9-4FDC, U+4FDF-4FE0, U+4FE2-4FE8, U+4FEB-4FEC, U+4FF0, U+4FF2-4FF9, U+4FFB-500C, U+500E-5011, U+5013-5018, U+501B-501E, U+5020, U+5022-5025, U+5027-5028, U+502B-5039, U+503B, U+503D, U+503F-5042, U+5044-5046, U+5048-504E, U+5050-5059, U+505B, U+505D-5064, U+5066-5075, U+5078-507E, U+5080-5084, U+5086-5087, U+5089-508C, U+508E-50A2, U+50A4-50A7, U+50A9-50AB, U+50AD-50B1, U+50B3-50BA, U+50BC-50CE, U+50D0-50E6, U+50E8-50F2, U+50F4, U+50F6-510A, U+510C-5111, U+5113-513E, U+5140, U+5142, U+5147, U+514A, U+514C, U+514E-5150, U+5152-5153, U+5155, U+5157-5159, U+515B, U+515D-5164, U+5166-5167, U+5169-516A, U+516F, U+5172, U+517A, U+517E-517F, U+5181-5184, U+5186-5187, U+518A-518B, U+518E-5191, U+5193-5194, U+5196-5198, U+519A, U+519D-519F, U+51A1-51A3, U+51A6-51AB, U+51AD-51AE, U+51B1, U+51B4, U+51B8-51BA, U+51BC-51BF, U+51C1-51C3, U+51C5, U+51C7-51C8, U+51CA-51CB, U+51CD-51CE, U+51D0, U+51D2-51DC, U+51DE-51DF, U+51E2-51E3, U+51E5-51EC, U+51EE, U+51F1-51F2, U+51F4-51F5, U+51F7, U+51FE-51FF, U+5202, U+5204-5205, U+5208-5209, U+520B-5210, U+5213-5216, U+521C, U+521E-521F, U+5221-5223, U+5225-5228, U+522A, U+522C-522D, U+522F, U+5231-5235, U+523C-5240, U+5244-5249, U+524B-524C, U+524E-5250, U+5252-5253, U+5255, U+5257-5264, U+5266, U+5268, U+526B-526E, U+5270-5271, U+5273-5287, U+5289-529A, U+529C, U+52A2, U+52A4-52A7, U+52AC-52B0, U+52B4-52BD, U+52C0-52C2, U+52C4-52C6, U+52C8, U+52CA, U+52CC-52CF, U+52D1, U+52D3-52D7, U+52D9-52DE, U+52E0-52E3, U+52E5-52F9, U+52FB-52FD, U+5301-5304, U+5307, U+5309-5315, U+5318, U+531A-531F, U+5321-5329, U+532B-532D, U+532F-5338, U+533C-533E, U+5340, U+5342, U+5344-5346, U+534B-534D, U+5350, U+5354, U+5358-5359, U+535B, U+535D-535F, U+5363, U+5365, U+5368-536A, U+536C-536F, U+5372, U+5376, U+5379-537E, U+5380-5381, U+5383, U+5387-5388, U+538A, U+538D-5394, U+5396-5397, U+5399, U+539B-539E, U+53A0-53A1, U+53A3-53A5, U+53A7, U+53A9-53BA, U+53BC-53BE, U+53C0-53C1, U+53C3-53C7, U+53CE-53D0, U+53D2-53D3, U+53D5, U+53DA, U+53DC-53DF, U+53E1-53E2, U+53E7-53E9, U+53F4-53F5, U+53FA-5400, U+5402, U+5405-5407, U+540B, U+540F, U+5412, U+5414, U+5416, U+5418-541A, U+541C-541D, U+5421-5425, U+5429-542A, U+542D-542E, U+5430-5433, U+5436-5437, U+543A, U+543D, U+543F, U+5441-5445, U+5447, U+5449, U+544B-544F, U+5451-5454, U+5456, U+5459-5461, U+5463-5465, U+5467, U+5469-5472, U+5474, U+5476-547A, U+547E-547F, U+5481-548A, U+548D-548E, U+5490-5491, U+5493-5494, U+5497-5498, U+549B-54A3, U+54A5-54A7, U+54A9, U+54AB, U+54AD-54AE, U+54B0, U+54B2, U+54B4-54B7, U+54B9-54BC, U+54BE-54BF, U+54C2-54C3, U+54C5, U+54C9-54CC, U+54CF-54D0, U+54D2-54D3, U+54D5-54D6, U+54D8-54DE, U+54E0-54E4, U+54E7, U+54EB-54EC, U+54EF-54F1, U+54F3-54F9, U+54FB, U+54FD-5506, U+5508, U+550A-550F, U+5511-5523, U+5525-552D, U+5530, U+5532-5545, U+5547-5549, U+554B-5560, U+5562-5563, U+5567-5569, U+556B-5577, U+5579-557F, U+5581, U+5583, U+5585-5586, U+5588, U+558B-5593, U+5595-5597, U+5599-559B, U+559E-55A6, U+55A8-55B4, U+55B6, U+55B8-55BA, U+55BC-55C4, U+55C6-55D2, U+55D4-55DB, U+55DD-55E2, U+55E4-55E7, U+55E9-55EB;
}
@font-face {
@@ -175,7 +175,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-21.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-21.6f1ba5e645.woff2") format("woff2");
unicode-range: U+55EC-55EE, U+55F0-55FC, U+55FE-5608, U+560A-560D, U+560F-5617, U+5619-561A, U+561C-561E, U+5620-5630, U+5633, U+5635-563A, U+563C-563E, U+5640-565B, U+565D-5661, U+5663-5667, U+566B, U+566D-5675, U+5677-56A2, U+56A4-56BB, U+56BD-56C9, U+56CB-56D9, U+56DC-56DD, U+56DF, U+56E1, U+56E3-56EC, U+56EE-56EF, U+56F1-56F3, U+56F5-56F9, U+56FB-56FC, U+56FF-5705, U+5707, U+5709-571E, U+5720-5722, U+5724-5727, U+572A-572C, U+572E-572F, U+5731-5732, U+5734-5739, U+573B-573D, U+573F, U+5741, U+5743-5746, U+5748-5749, U+574B-574D, U+5752-5756, U+5758-5759, U+575C, U+5762-5763, U+5765, U+5767-5769, U+576B-576E, U+5770-577A, U+577C-5781, U+5785-578A, U+578C-5791, U+5793-57A1, U+57A4-57A5, U+57A7-57AA, U+57AC-57AD, U+57AF-57C2, U+57C4-57CA, U+57CC-57CD, U+57CF-57D3, U+57D5-57DE, U+57E1-57F8, U+57FB-5801, U+5803-5805, U+5807-5814, U+5816-5820, U+5822-5823, U+5825-5829, U+582B-582F, U+5831-5834, U+5836-584B, U+584D-5850, U+5852-5853, U+5855-5857, U+5859-585D, U+585F-586A, U+586C-5882, U+5884, U+5886-5892, U+5894-5898, U+589A-589D, U+58A0-58A7, U+58A9-58C0, U+58C2-58E3, U+58E5-58EA, U+58EC-58ED, U+58EF, U+58F1-58F2, U+58F4-58F5, U+58F7-58F8, U+58FA-5903, U+5905-5906, U+5908-590C, U+590E, U+5910-5914, U+5917-5919, U+591B, U+591D-591E, U+5920-5926, U+5928, U+592C, U+592F-5930, U+5932-5933, U+5935-5936, U+593B-5946, U+594A, U+594C-594D, U+5950, U+5952-5953, U+5958-595F, U+5961, U+5963-5964, U+5966-5972, U+5975, U+5977, U+597A-597C, U+597E-5981, U+5985, U+5989, U+598B-598C, U+598E-5991, U+5994-5995, U+5997-5998, U+599A-599D, U+599F-59A4, U+59A6-59A7, U+59AA-59AD, U+59AF-59B8, U+59BA, U+59BC-59C5, U+59C7-59CA, U+59CC-59CF, U+59D2, U+59D5-59D6, U+59D8-59D9, U+59DB, U+59DD-59E7, U+59E9-59EB, U+59ED-59FA, U+59FC-59FE, U+5A00, U+5A02, U+5A06, U+5A08-5A17, U+5A19-5A1B, U+5A1D-5A1E, U+5A21-5A24, U+5A26-5A28, U+5A2A-5A30, U+5A32-5A33, U+5A35, U+5A37-5A45, U+5A47-5A48, U+5A4A-5A59, U+5A5B-5A73, U+5A75-5A76, U+5A78-5A79, U+5A7B-5A7E, U+5A80-5A91, U+5A93-5A99, U+5A9C-5AB2, U+5AB4-5AC0, U+5AC3-5AC8, U+5ACA-5ACB, U+5ACD-5AD5, U+5AD7-5AE2, U+5AE4-5AE8, U+5AEA-5B08, U+5B0A-5B4F, U+5B51-5B53, U+5B56, U+5B5B, U+5B5E, U+5B60-5B62, U+5B65, U+5B67-5B68, U+5B6A-5B74, U+5B76-5B7C, U+5B7E-5B80, U+5B82, U+5B84, U+5B86, U+5B8A, U+5B8D-5B8E, U+5B90-5B94, U+5B96, U+5B9F, U+5BA5-5BA9, U+5BAC-5BAF, U+5BB1-5BB2, U+5BB7-5BB8, U+5BBA-5BBC, U+5BC0-5BC1, U+5BC3, U+5BC8-5BCB, U+5BCD-5BD1, U+5BD4-5BDC, U+5BE0, U+5BE2-5BE7, U+5BE9-5BF7, U+5BFD-5BFE, U+5C00, U+5C02-5C03, U+5C05, U+5C07-5C08, U+5C0B-5C0E, U+5C10, U+5C12-5C13, U+5C15, U+5C17, U+5C19, U+5C1B-5C1C, U+5C1E-5C23, U+5C25-5C26, U+5C28-5C2B, U+5C2D-5C30, U+5C32-5C33, U+5C35-5C37, U+5C3B, U+5C43-5C44, U+5C46-5C47, U+5C4C-5C4D, U+5C50, U+5C52-5C54, U+5C56-5C5D, U+5C5F, U+5C62-5C64, U+5C66-5C6E, U+5C70, U+5C72-5C7E, U+5C80, U+5C83-5C8F, U+5C92-5C93, U+5C95-5C96, U+5C98-5C99, U+5C9C-5CA1, U+5CA3-5CA8, U+5CAA, U+5CAC, U+5CAE-5CB0, U+5CB2, U+5CB4-5CB6, U+5CB9-5CC3, U+5CC5-5CD1, U+5CD3-5CD8, U+5CDA-5CE0, U+5CE2-5CE7, U+5CE9, U+5CEB-5CEC, U+5CEE-5CEF, U+5CF1-5CFA, U+5CFC-5D01, U+5D04-5D05, U+5D08-5D0D, U+5D0F-5D13, U+5D15, U+5D17-5D1A, U+5D1C-5D28, U+5D2A-5D2C, U+5D2E-5D49, U+5D4B, U+5D4D-5D68, U+5D6A-5DC4, U+5DC6-5DCC, U+5DCE-5DDC, U+5DDF-5DE0, U+5DE3-5DE4, U+5DEA, U+5DEC-5DED, U+5DEF-5DF0, U+5DF3, U+5DF5-5DF6, U+5DF8-5DFD, U+5DFF-5E00, U+5E04, U+5E07, U+5E09-5E0B, U+5E0D-5E0F, U+5E11-5E14, U+5E17, U+5E19-5E1A, U+5E1E-5E25, U+5E28-5E2C, U+5E2F-5E36, U+5E39-5E3C, U+5E3E-5E41, U+5E43-5E44, U+5E46-5E54, U+5E56-5E61, U+5E63-5E71, U+5E75, U+5E77, U+5E79-5E7A, U+5E7E, U+5E80-5E83, U+5E85, U+5E88-5E89, U+5E8B-5E8E, U+5E91-5E92, U+5E96, U+5E98, U+5E9B, U+5E9D, U+5EA0-5EA5, U+5EA8-5EAC, U+5EAE-5EB4, U+5EB6, U+5EB9-5EC8, U+5ECB-5ED2, U+5ED4-5ED5, U+5ED7-5EF5, U+5EF8-5EF9, U+5EFB-5EFF, U+5F01, U+5F05-5F07, U+5F09, U+5F0C-5F0E, U+5F10-5F12, U+5F14, U+5F16, U+5F19-5F1A, U+5F1C-5F1E, U+5F21-5F24, U+5F28-5F2E, U+5F30, U+5F32-5F38, U+5F3B-5F51, U+5F54, U+5F56, U+5F58-5F5C, U+5F5E-5F61, U+5F63, U+5F65, U+5F67-5F68, U+5F6B, U+5F6E-5F6F, U+5F72-5F78, U+5F7A, U+5F7D-5F7F, U+5F82;
}
@font-face {
@@ -183,7 +183,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-22.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-22.74bf96b4ec.woff2") format("woff2");
unicode-range: U+5F87, U+5F89-5F8A, U+5F8C-5F8F, U+5F91, U+5F93-5F96, U+5F98-5FA0, U+5FA2-5FA9, U+5FAB-5FAD, U+5FAF-5FB6, U+5FB8-5FBC, U+5FBE-5FC2, U+5FC4, U+5FC7-5FCB, U+5FCE-5FD6, U+5FDA-5FDF, U+5FE1-5FE6, U+5FE8-5FEA, U+5FEC-5FF4, U+5FF6-5FFA, U+5FFC, U+5FFE-5FFF, U+6002-600D, U+600F-6011, U+6013-6014, U+6017-601B, U+601E-601F, U+6022-6024, U+6026, U+6029, U+602B-603A, U+603D-604A, U+604C, U+604E-604F, U+6051, U+6053-6054, U+6056-6061, U+6063, U+6065-6067, U+606A-606C, U+606E, U+6071-6072, U+6074-6075, U+6077-6079, U+607B, U+607D-6083, U+6085-6088, U+608A-608C, U+608E-6093, U+6095-6099, U+609B-609E, U+60A1-60A2, U+60A4-60A5, U+60A7, U+60A9-60AB, U+60AD-60B1, U+60B3-60BB, U+60BD-60C4, U+60C6-60C9, U+60CB-60D0, U+60D2-60D4, U+60D6-60DB, U+60DD-60DE, U+60E1-60E6, U+60EA, U+60EC-60EE, U+60F0-60F2, U+60F4-60F8, U+60FA-6100, U+6102-6107, U+610A-610E, U+6110-6119, U+611B-611E, U+6120-6123, U+6125-6126, U+6128-613E, U+6140-6147, U+6149-614B, U+614D, U+614F-6154, U+6156-6161, U+6163-6166, U+6169-616F, U+6171-6174, U+6176, U+6178-618A, U+618C-61BD, U+61BF-61C1, U+61C3-61C7, U+61C9-61D1, U+61D3-61F4, U+61F6-61FE, U+6200-6207, U+6209, U+620B, U+620D-620E, U+6213-6215, U+6217, U+6219, U+621C-6229, U+622B-6232, U+6235-6236, U+6238-623E, U+6242-6246, U+6248-624A, U+624C, U+624F-6250, U+6255-6257, U+6259-625A, U+625C-6262, U+6264-6266, U+6268, U+626A, U+6271-6272, U+6274-6275, U+6277-6278, U+627A-627B, U+627D, U+6281-6283, U+6285-6289, U+628B-6290, U+6294, U+6299, U+629C-629F, U+62A1, U+62A3, U+62A6-62AA, U+62AD-62B0, U+62B2-62B4, U+62B6-62B8, U+62BA-62BB, U+62BE-62C1, U+62C3-62C4, U+62C8, U+62CA-62CB, U+62CE-62CF, U+62D1, U+62D5, U+62D7, U+62D9-62DA, U+62DD-62DE, U+62E0-62E1, U+62E3-62E4, U+62EA-62EB, U+62EE, U+62F0, U+62F2, U+62F5-62F6, U+62F8-62FB, U+6300, U+6303-6306, U+6308, U+630A-6310, U+6312-6315, U+6317-6319, U+631B-631F, U+6322, U+6326-6327, U+6329, U+632C-632E, U+6330-6339, U+633B-633C, U+633E-6341, U+6343-6344, U+6347-6348, U+634A-634C, U+634E, U+6351-6354, U+6356-635D, U+6360, U+6364-6366, U+6368-636D, U+636F-6376, U+6378-637F, U+6381, U+6383-6386, U+638A-638B, U+638D-638E, U+6391, U+6393-6395, U+6397, U+6399-639F, U+63A1, U+63A4, U+63A6, U+63AB-63AF, U+63B1-63B6, U+63B8-63C8, U+63CA-63CE, U+63D1, U+63D3-63E0, U+63E2, U+63E4-63EC, U+63EE-63F3, U+63F5-63FC, U+63FE-6400, U+6403-6404, U+6406-640E, U+6410-6412, U+6414-641B, U+641D, U+641F-6429, U+642B, U+642E-6439, U+643B-6443, U+6445, U+6448-6449, U+644B-6453, U+6455-6457, U+6459-6466, U+6468, U+646A-6477, U+6479-6490, U+6493-6494, U+6496-649D, U+649F-64A3, U+64A5-64A8, U+64AA-64AC, U+64AF, U+64B1-64B7, U+64B9-64BB, U+64BD-64C1, U+64C3-64C4, U+64C6-64CC, U+64CF-64D1, U+64D3-64E1, U+64E3-64E5, U+64E7-64FF, U+6501-6511, U+6513-652E, U+6530-6535, U+6537, U+653A, U+653C-653D, U+6540-6544, U+6546-6547, U+6549-654B, U+654D-654E, U+6550, U+6552-6555, U+6557-6558, U+655A, U+655C-655D, U+655F-6561, U+6564-6565, U+6567-656B, U+656D-656F, U+6571, U+6573, U+6575-6576, U+6578-6586, U+6588-658A, U+658D-658F, U+6592-6596, U+6598, U+659A-659B, U+659D-65A0, U+65A2-65A3, U+65A6, U+65A8, U+65AA-65AC, U+65AE, U+65B1-65B8, U+65BA-65BC, U+65BE-65C0, U+65C2, U+65C4, U+65C6-65CA, U+65CD-65CE, U+65D0-65D6, U+65D8-65DF, U+65E1, U+65E3-65E4, U+65EA-65EB, U+65EE-65F0, U+65F2-65F5, U+65F8-65F9, U+65FB-6601, U+6603-6605, U+6607-6609, U+660B, U+660D, U+6610-6612, U+6616-661E, U+6621-6624, U+6626, U+6629-662C, U+662E, U+6630-6633, U+6636-663B, U+663D, U+663F-6642, U+6644-664A, U+664C-664E, U+6650-6651, U+6654, U+6656, U+6658-6659, U+665B-665E, U+6660-6665, U+6667, U+6669-666D, U+6671-6673, U+6675, U+6677-6679, U+667B-667D, U+667F-6681, U+6683, U+6685-6686, U+6688-6690, U+6692-6695, U+6698-669C, U+669E-66A6, U+66A9-66AD, U+66AF-66B3, U+66B5-66D8, U+66DA-66DB, U+66DE-66E5, U+66E7-66EF, U+66F1, U+66F3, U+66F5-66F8, U+66FA-66FB, U+66FD, U+6701-6707, U+670A, U+670C, U+670E-670F, U+6711-6713, U+6715-6716, U+6718-671A, U+671C, U+671E, U+6720-6727, U+6729, U+672E, U+6730, U+6732-6733, U+6736-6739, U+673B-673C, U+673E-673F, U+6741, U+6744-6745, U+6747-6748, U+674A-674D, U+6752-6755, U+6757-675B, U+675D, U+6762-6764, U+6766-6767, U+6769-676C, U+676E, U+6771-6774, U+6776-677D, U+6780, U+6782-6783, U+6785-6788, U+678A-678F, U+6791-6794, U+6796, U+6798-6799, U+679B, U+679F-67A1, U+67A4-67A9, U+67AC, U+67AE, U+67B0-67B5, U+67B7, U+67B9-67C3, U+67C5-67CE, U+67D2, U+67D5-67D7, U+67D9, U+67DB, U+67DD, U+67DF, U+67E1-67E4, U+67E6-67EB, U+67ED-67EE, U+67F0, U+67F2, U+67F5-67FE, U+6800-6804, U+6806, U+6809-680A, U+680C-680E;
}
@font-face {
@@ -191,7 +191,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-23.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-23.109fc8cc44.woff2") format("woff2");
unicode-range: U+681D-6820, U+6822-6829, U+682B-6836, U+683A-683B, U+683F-6841, U+6844-6845, U+6847, U+6849-684B, U+684D-684F, U+6852, U+6855-6862, U+6864, U+6867-6868, U+686A-6875, U+6877-6880, U+6882-6884, U+6886-6892, U+6894-6896, U+6898-68A1, U+68A3-68A5, U+68A9-68AC, U+68AE, U+68B1-68B2, U+68B4, U+68B6-68BF, U+68C1-68C8, U+68CA, U+68CC, U+68CE-68D1, U+68D3-68D4, U+68D6-68D7, U+68D9, U+68DB-68DF, U+68E1-68E2, U+68E4-68ED, U+68EF-68F0, U+68F2-68F4, U+68F6-68F9, U+68FB-6904, U+6906-690C, U+690F-6911, U+6913-692F, U+6931-6959, U+695B-695F, U+6961-6976, U+6978-697B, U+697D-6981, U+6983, U+6985, U+6987-6994, U+6996-699B, U+699D-69A7, U+69A9-69B3, U+69B5-69CF, U+69D1-69DA, U+69DC-69DE, U+69E0-69FC, U+69FE-6A09, U+6A0B-6A1E, U+6A20, U+6A22-6A29, U+6A2B-6A30, U+6A32-6A43, U+6A45-6A57, U+6A5A-6A60, U+6A62-6A70, U+6A72-6A7F, U+6A81-6AAB, U+6AAD-6B1F, U+6B24-6B26, U+6B28-6B31, U+6B33-6B39, U+6B3B-6B3D, U+6B3F-6B46, U+6B48, U+6B4A-6B4B, U+6B4D-6B58, U+6B5A-6B61, U+6B68-6B69, U+6B6B-6B7A, U+6B7D-6B86, U+6B88-6B89, U+6B8C-6B95, U+6B97-6BA0, U+6BA2-6BB3, U+6BB6, U+6BB8-6BBE, U+6BC0, U+6BC2-6BC4, U+6BC6-6BCC, U+6BCE, U+6BD0-6BD1, U+6BD3, U+6BD6, U+6BD8, U+6BDA, U+6BDC-6BEA, U+6BEC-6BEE, U+6BF0-6C0E, U+6C12, U+6C15-6C1A, U+6C1C-6C1E, U+6C20-6C21, U+6C23-6C26, U+6C29-6C2D, U+6C30-6C33, U+6C35-6C37, U+6C39-6C3F, U+6C43-6C46, U+6C48, U+6C4A-6C4F, U+6C51-6C54, U+6C56, U+6C58-6C5C, U+6C5E, U+6C62-6C63, U+6C65-6C67, U+6C69, U+6C6B-6C6F, U+6C71-6C75, U+6C77-6C7C, U+6C7F-6C80, U+6C84, U+6C86-6C87, U+6C8A-6C8F, U+6C91-6C98, U+6C9C-6C9E, U+6CA0, U+6CA2-6CA4, U+6CA8-6CA9, U+6CAC, U+6CAF-6CB2, U+6CB4-6CB7, U+6CBA, U+6CC0-6CC3, U+6CC5-6CC8, U+6CCB, U+6CCD-6CD4, U+6CD6, U+6CD8-6CDA, U+6CDC-6CE0, U+6CE4, U+6CE6-6CE7, U+6CE9, U+6CEB-6CEF, U+6CF1-6CF2, U+6CF4, U+6CF6-6CF7, U+6CF9-6CFA, U+6CFF-6D00, U+6D02-6D0A, U+6D0C-6D11, U+6D13-6D16, U+6D18-6D1A, U+6D1C-6D1D, U+6D1F-6D24, U+6D26-6D29, U+6D2B-6D2D, U+6D2F-6D30, U+6D33-6D3A, U+6D3F-6D40, U+6D42-6D44, U+6D48-6D49, U+6D4C-6D4D, U+6D50, U+6D52, U+6D55-6D58, U+6D5B-6D5F, U+6D61-6D65, U+6D67-6D68, U+6D6B-6D6D, U+6D6F-6D73, U+6D75-6D76, U+6D79-6D81, U+6D83-6D84, U+6D86-6D87, U+6D8A-6D8B, U+6D8D-6D9A, U+6D9C-6D9D, U+6DA0, U+6DA2-6DA3, U+6DA5, U+6DAB-6DAE, U+6DB0-6DB1, U+6DB3-6DB4, U+6DB6-6DBE, U+6DC1-6DC3, U+6DC8-6DCA, U+6DCC-6DD0, U+6DD2-6DD5, U+6DD7, U+6DD9-6DDD, U+6DDF-6DE0, U+6DE2-6DEA, U+6DEC-6DED, U+6DEF-6DF0, U+6DF2, U+6DF4-6DF6, U+6DF8, U+6DFA, U+6DFC-6E04, U+6E06-6E09, U+6E0B, U+6E0F, U+6E12-6E13, U+6E15-6E16, U+6E18-6E1C, U+6E1E-6E1F, U+6E22, U+6E25-6E28, U+6E2A-6E2C, U+6E2E, U+6E30-6E31, U+6E33, U+6E35-6E37, U+6E39-6E42, U+6E45-6E55, U+6E57, U+6E59-6E5A, U+6E5C-6E5E, U+6E60-6E7D, U+6E80-6E82, U+6E84, U+6E87-6E8F, U+6E91-6E9B, U+6E9D-6EA1, U+6EA3-6EA6, U+6EA8-6EA9, U+6EAB-6EAE, U+6EB0-6EB5, U+6EB7-6EB9, U+6EBB-6EC0, U+6EC2-6EC6, U+6EC8-6ECA, U+6ECC-6ED0, U+6ED2-6ED4, U+6ED6-6ED9, U+6EDB-6EDD, U+6EDF-6EE0, U+6EE2-6EE3, U+6EE7, U+6EEA-6EF3, U+6EF5-6F01, U+6F03-6F05, U+6F07-6F0E, U+6F10-6F12, U+6F15-6F1F, U+6F21-6F2A, U+6F2C-6F2E, U+6F30-6F32, U+6F34-6F3D, U+6F3F-6F46, U+6F48-6F4C, U+6F4E-6F57, U+6F59-6F5B, U+6F5D, U+6F5F-6F61, U+6F63-6F6C, U+6F6F-6F7B, U+6F7D-6F83, U+6F85-6F87, U+6F89-6F8D, U+6F8F-6F9B, U+6F9D-6FA0, U+6FA2-6FA6, U+6FA8-6FB2, U+6FB4-6FBF, U+6FC1, U+6FC3-6FC8, U+6FCA-6FD1, U+6FD3-6FDD, U+6FDF, U+6FE1-6FED, U+6FEF-7010, U+7012-7019, U+701B-704B, U+704D-705D, U+705F-706A, U+706C, U+706E, U+7071-7074, U+7077, U+7079-707B, U+707D, U+7080-7088, U+708A-708D, U+708F-7091, U+7093-7095, U+7097-70AA, U+70AF-70B2, U+70B4-70B7, U+70BA-70BB, U+70BE-70C0, U+70C3-70C7, U+70C9, U+70CB-70D7, U+70D9-70DA, U+70DC-70DE, U+70E0-70E3, U+70E5, U+70E9-70EA, U+70EC, U+70EE, U+70F0-70F8, U+70FA-70FC, U+70FE-7108, U+710B-7114, U+7116-7118, U+711B-7125, U+7127-712F, U+7131;
}
@font-face {
@@ -199,7 +199,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-24.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-24.c6e142a301.woff2") format("woff2");
unicode-range: U+7145-714B, U+714D, U+714F-715D, U+715F-7163, U+7165-7166, U+7168-716D, U+716F-7171, U+7173-7189, U+718B-718E, U+7190-7193, U+7195-7198, U+719A-719E, U+71A0-71AB, U+71AD-71C2, U+71C4-71D4, U+71D6-71E4, U+71E6-7205, U+7207-7229, U+722B, U+722D-7230, U+7232-7234, U+723A-723C, U+723E-7246, U+7249-724B, U+724D-7258, U+725A, U+725C-725E, U+7260, U+7263-7266, U+7268, U+726A-7271, U+7273-7274, U+7276-7278, U+727B-727F, U+7282-728C, U+728E-72AB, U+72AD-72AE, U+72B0-72B5, U+72B7-72B8, U+72BA-72C1, U+72C3, U+72C5-72CF, U+72D1-72D6, U+72D8, U+72DA-72DF, U+72E1-72E8, U+72EA-72EB, U+72EF-72F0, U+72F2-72F7, U+72F9-72FB, U+72FD-730D, U+730F-7316, U+7318-731A, U+731E-7324, U+7326-7329, U+732C-732D, U+732F-7333, U+7335-733E, U+7340-736C, U+736E-7373, U+7375-7383, U+7385-7386, U+7388, U+738A, U+738C-7395, U+7397-739A, U+739C-73A8, U+73AA, U+73AC-73AD, U+73B1, U+73B3-73B9, U+73BC-73BF, U+73C1-73C9, U+73CB-73CC, U+73CE-73D0, U+73D2-73D8, U+73DA-73DF, U+73E1-73EC, U+73EE-73F1, U+73F3-7402, U+7404, U+7407-7408, U+740A-740F, U+7411-7421, U+7423-7425, U+7427-7429, U+742B-7432, U+7435-743B, U+743D-7454, U+7456-7458, U+745B, U+745D, U+7460-746F, U+7471-7475, U+7477-747F, U+7481-7482, U+7484-7486, U+7488-748F, U+7491-74A6, U+74A9-74DB, U+74DD-74E2, U+74E4-74E5, U+74E7-74ED, U+74F0-74F5, U+74F8-7503, U+7505-7517, U+7519, U+751B, U+751D-751E, U+7520-7527, U+752A, U+752C-752F, U+7534, U+7536, U+7539-753A, U+753C-7544, U+7546-754B, U+754D-754E, U+7550-7553, U+7555-7558, U+755A-755B, U+755D-7564, U+7566-7569, U+756B-7571, U+7573, U+7575-7577, U+7579-7585, U+7587-758E, U+7590, U+7592-7596, U+7598-75A0, U+75A2-75A3, U+75A5-75AA, U+75AC-75AD, U+75B0-75B1, U+75B3-75B4, U+75B6-75B8, U+75BA-75BB, U+75BD, U+75BF-75C4, U+75C6, U+75C8-75C9, U+75CB-75D1, U+75D3, U+75D6-75D7, U+75D9-75DA, U+75DC-75E9, U+75EC-75EF, U+75F1-75F3, U+75F5-7623, U+7625, U+7627-762A, U+762C-763D, U+763F-764B, U+764D-7655, U+7657-765B, U+765D-766A, U+766C-767A, U+767C, U+767F-7681, U+7683, U+7685, U+7688-768A, U+768C-7692, U+7694-7695, U+7697-7698, U+769A-76AD, U+76AF-76B0, U+76B2-76C1, U+76C3-76C5, U+76C7, U+76C9, U+76CB-76CE, U+76D3, U+76D5, U+76D9-76DA, U+76DC-76DE, U+76E0-76ED, U+76F0, U+76F3, U+76F5-76F7, U+76F9-76FB, U+76FD, U+76FF-7700, U+7702-7708, U+770A, U+770C-7718, U+771A-771E, U+7721-7728, U+772A-7736, U+7739-773B, U+773D-773F, U+7742-774F, U+7751-775A, U+775C-7760, U+7764-7765, U+7767-776A, U+776C-7778, U+777A-777E, U+7780-7783, U+7785-778D, U+778F-7791, U+7793-77A6, U+77A8, U+77AB, U+77AD-77AF, U+77B1-77B2, U+77B4-77BA, U+77BC-77DA, U+77DD-77E1, U+77E4, U+77E6-77E8, U+77EA, U+77EC, U+77EF-77F2, U+77F4-77F5, U+77F7-77FE, U+7803-780B, U+780E-7813, U+7815, U+7817-7819, U+781B-7833, U+7835-7837, U+7839-783A;
}
@font-face {
@@ -207,7 +207,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-25.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-25.a2891dcffe.woff2") format("woff2");
unicode-range: U+783B-783F, U+7841-7844, U+7846-7854, U+7856-785C, U+785E-786A, U+786D, U+786F-788B, U+788F-7890, U+7892-7896, U+7898-7899, U+789B-789E, U+78A0-78A6, U+78A8-78AF, U+78B2, U+78B4-78BD, U+78BF-78C0, U+78C2-78C4, U+78C6-78C9, U+78CB-78CF, U+78D1-78D4, U+78D6-78E7, U+78E9-78F3, U+78F5-78F6, U+78F8-7939, U+793B, U+793D, U+793F, U+7942-7946, U+794A-7955, U+7957-795A, U+795F-7964, U+7966-7967, U+7969-796C, U+796E-7976, U+7979, U+797B-7980, U+7982-7983, U+7986-798E, U+7990-79A6, U+79A8-79B8, U+79BC, U+79BF, U+79C2, U+79C4-79C8, U+79CA, U+79CC, U+79CE-79D0, U+79D3-79D7, U+79D9-79DE, U+79E0-79E3, U+79E5, U+79E7-79E8, U+79EA-79EC, U+79EE, U+79F1-79FA, U+79FC, U+79FE-79FF, U+7A01-7A0A, U+7A0C, U+7A0F-7A19, U+7A1B-7A1F, U+7A21-7A32, U+7A34-7A36, U+7A38-7A3A, U+7A3C, U+7A3E, U+7A40-7A45, U+7A47-7A56, U+7A58-7A73, U+7A75, U+7A78, U+7A7B-7A7E, U+7A80, U+7A82, U+7A85-7A8C, U+7A8E-7A90, U+7A93-7A96, U+7A98-7A9C, U+7A9E, U+7AA0-7AA4, U+7AA7-7ACA, U+7ACC-7AD5, U+7AD7-7AD8, U+7ADA-7ADD, U+7AE1-7AE2, U+7AE4, U+7AE6-7AEC, U+7AEE, U+7AF0-7AF8, U+7AFA-7B0A, U+7B0C-7B10, U+7B12-7B13, U+7B15-7B1A, U+7B1C-7B25, U+7B27, U+7B29-7B2B, U+7B2D-7B3B, U+7B3D-7B48, U+7B4A, U+7B4C-7B50, U+7B53, U+7B55, U+7B57-7B5A, U+7B5C, U+7B5E-7B5F, U+7B61-7B70, U+7B72-7B76, U+7B78, U+7B7A-7B7D, U+7B7F, U+7B81-7B8F, U+7B91-7B94, U+7B96, U+7B98-7BA0, U+7BA2-7BAC, U+7BAE-7BB0, U+7BB2-7BB3, U+7BB5-7BC6, U+7BC8-7BE0, U+7BE2-7BED, U+7BEF-7BF0, U+7BF2-7BF6, U+7BF8-7C06, U+7C08-7C26, U+7C28-7C3E, U+7C40-7C4C, U+7C4E-7C72, U+7C74-7C7A, U+7C7C, U+7C7E-7C88, U+7C8A-7C91, U+7C93-7C96, U+7C99-7C9E, U+7CA0-7CA3, U+7CA6-7CA9, U+7CAB-7CAD, U+7CAF-7CB8, U+7CBA-7CBD, U+7CBF-7CC9, U+7CCB-7CD4, U+7CD7-7CD8, U+7CDA-7CDE, U+7CE0-7CEE, U+7CF0-7CFA, U+7CFC-7D1F, U+7D21, U+7D23-7D26, U+7D28-7D2A, U+7D2C-7D2E, U+7D30-7D6D, U+7D6F-7DA5, U+7DA7-7E40, U+7E42-7E81, U+7E83-7E9F, U+7EA1, U+7EA3, U+7EA5, U+7EA8-7EA9, U+7EAB, U+7EAD-7EAE, U+7EB0, U+7EB4, U+7EBB-7EBC, U+7EBE, U+7EC0-7EC2, U+7EC9, U+7ECB-7ECC, U+7ED0, U+7ED4, U+7ED6-7ED7, U+7EE0-7EE2, U+7EE4, U+7EE6, U+7EE8, U+7EEB-7EEC, U+7EF0-7EF2, U+7EF6, U+7EF9-7EFB, U+7EFE, U+7F01-7F04, U+7F08, U+7F0A-7F12, U+7F17, U+7F1B-7F1C, U+7F1E-7F1F, U+7F21-7F23, U+7F25-7F28, U+7F2B-7F33, U+7F35-7F37, U+7F39, U+7F3B-7F4F, U+7F52-7F54, U+7F56, U+7F59, U+7F5B-7F61, U+7F63-7F68, U+7F6B-7F6D, U+7F6F-7F71, U+7F73-7F78, U+7F7A-7F80, U+7F82-7F89, U+7F8B, U+7F8D, U+7F8F-7F9D, U+7F9F-7FA0, U+7FA2-7FA3, U+7FA5-7FAE, U+7FB0-7FB8, U+7FBA-7FBC, U+7FBE-7FC0, U+7FC2-7FC4, U+7FC6-7FD3, U+7FD5-7FD7, U+7FD9-7FDF, U+7FE2-7FEF, U+7FF1-7FFA, U+7FFD-7FFF, U+8002, U+8004, U+8007-800B, U+800E-800F, U+8011, U+8013-8014, U+8016, U+8018-8025, U+8027-8032, U+8034-8035, U+8037, U+8039-803A, U+803C, U+803E, U+8040-8041, U+8043-8045, U+8047-8049, U+804B, U+804D-8053, U+8055-8057, U+8059, U+805B-8069, U+806B-8082, U+8084-8085, U+8088, U+808A, U+808D-8095, U+8097, U+8099, U+809C, U+809E-809F, U+80A3, U+80A6-80A8, U+80AB-80AE, U+80B0-80B1, U+80B3, U+80B5-80B9, U+80BB-80BD, U+80C2, U+80C4-80C5, U+80C7-80CB, U+80CD;
}
@font-face {
@@ -215,7 +215,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-26.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-26.9b6f28238d.woff2") format("woff2");
unicode-range: U+80D7-80DB, U+80DD, U+80DF-80E0, U+80E2-80EF, U+80F1-80F5, U+80F7, U+80F9, U+80FB-80FC, U+80FE-8101, U+8103-8105, U+8107-8108, U+810B-810E, U+8112-8115, U+8117-8119, U+811B-8130, U+8132-8137, U+8139-813D, U+813F-8149, U+814D-814F, U+8151-8153, U+8156-8164, U+8166-816D, U+816F, U+8171-8178, U+817C-817D, U+8181-8189, U+818B-818E, U+8190-819B, U+819E-81A7, U+81A9-81B2, U+81B4-81BF, U+81C1, U+81C3-81C5, U+81C7-81E2, U+81E4-81E9, U+81EB-81EC, U+81EE-81F2, U+81F5-81FA, U+81FC-8204, U+8207-820B, U+820E-8211, U+8213, U+8215-821D, U+8220-8229, U+822B, U+822D-822F, U+8232-8234, U+8237-8238, U+823A-8246, U+8248-8257, U+8259-826E, U+8271, U+8274-8279, U+827B-827D, U+827F-8281, U+8283-828A, U+828C-8291, U+8293-8296, U+8298, U+829A-829B, U+829E-82A4, U+82A7-82AB, U+82B0, U+82B2, U+82B4-82B6, U+82BA-82BC, U+82BE-82CC, U+82CE, U+82D0, U+82D2-82D3, U+82D5-82D6, U+82D8-82DA, U+82DC-82DE, U+82E0-82E4, U+82E7-82EE, U+82F0, U+82F2-82F8, U+82FA-8300, U+8306-8308, U+830A-830B, U+830D, U+830F-8316, U+8318-831B, U+831D-8327, U+8329-832A, U+832C-8334, U+8337, U+833A-8342, U+8344-8345, U+8347-8348, U+834A-834F, U+8351, U+8353, U+8355-835E, U+8360, U+8362, U+8364, U+8366, U+8368-836A, U+836C-836E, U+8370-8376, U+8378-8384, U+8387-8388, U+838A-838D, U+838F-8391, U+8394-8397, U+8399-839D, U+839F-83AA, U+83AC-83B0, U+83B3-83B6, U+83B8, U+83BA-83BC, U+83BE-83C0, U+83C2-83C6, U+83C8-83C9, U+83CB, U+83CD-83CE, U+83D0-83DB, U+83DD-83DF, U+83E1-83E8, U+83EA-83F0, U+83F3-8402, U+8405-840B, U+840F-841C, U+841E-8424, U+8426, U+8429-8430, U+8432-843C, U+843E-8456, U+8458-845A, U+845C-8460, U+8462, U+8464-8468, U+846A, U+846D-8470, U+8472-8474, U+8476-8481, U+8483-848A, U+848C-8496, U+8498, U+849A-849B, U+849D-84B1, U+84B3-84B7, U+84B9-84C3, U+84C5-84C8, U+84CA-84DC, U+84DE, U+84E0-84E4, U+84E6-84EB, U+84ED-8512, U+8514-8519, U+851B-8520, U+8522-852B, U+852D-8536, U+8538-8539, U+853C, U+853E-8548, U+854B-8571, U+8573, U+8575-857D, U+857F-8583, U+8585-8586, U+8588-859A, U+859C-85A9, U+85AB-85AE, U+85B1-85C0, U+85C2-85C8, U+85CA-85CE, U+85D0-85E3, U+85E5-85FA, U+85FC-8610, U+8612-864D, U+864F, U+8652-8653, U+8655-8659, U+865B-865D, U+865F-866A, U+866C-8678, U+867A-867C, U+867F, U+8683-8689, U+868B, U+868D-8694, U+8696-86A9, U+86AB-86C6, U+86C8-86CA, U+86CC-86D8, U+86DA, U+86DC-86DE, U+86E0-86ED, U+86EF-86FF, U+8701, U+8703-8709;
}
@font-face {
@@ -223,7 +223,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-27.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-27.dbb7ca98b0.woff2") format("woff2");
unicode-range: U+870A-8714, U+8716, U+8719-871B, U+871D-8720, U+8722-8748, U+874A-874B, U+874D, U+874F-8758, U+875A-875F, U+8761-8773, U+8775, U+8777-8782, U+8784-878C, U+878E-87B9, U+87BB-87F8, U+87FA-8820, U+8823-883F, U+8841-8844, U+8846-884B, U+884E-8853, U+8855-8856, U+8858-8860, U+8864, U+8866-8867, U+8869-886A, U+886D-886F, U+8871-8876, U+8878-8880, U+8882-888A, U+888C, U+888E-8895, U+8897-889B, U+889D-88AA, U+88AC, U+88AE-88C0, U+88C3-88C4, U+88C6-88D3, U+88D6-88D8, U+88DA-88E3, U+88E5-88F7, U+88FA-890F, U+8911-8929, U+892B-8943, U+8945-897E, U+8980, U+8982, U+8984-8985, U+8987-89C0, U+89C3, U+89C7, U+89CA-89D1, U+89D3-89E2, U+89E4-89E5, U+89E7-89FF, U+8A01-8A78, U+8A7A-8A88, U+8A8A-8A92, U+8A94-8B65, U+8B67-8BA0, U+8BA3, U+8BA6-8BA7, U+8BAA-8BAC, U+8BB1, U+8BB3-8BB5, U+8BB9, U+8BBB, U+8BC2-8BC3, U+8BC7, U+8BCB-8BCC, U+8BCE, U+8BD0, U+8BD2-8BD4, U+8BD6, U+8BD8-8BD9, U+8BDC, U+8BDF, U+8BE4, U+8BE7-8BEA, U+8BEC, U+8BEE, U+8BF0, U+8BF2-8BF3, U+8BF6, U+8BF9, U+8BFC-8BFD, U+8BFF-8C00, U+8C02, U+8C06-8C07, U+8C09, U+8C0C, U+8C0F, U+8C11-8C12, U+8C14-8C1B, U+8C1D-8C1E, U+8C20-8C21, U+8C24-8C25, U+8C27, U+8C2A-8C2C, U+8C2E, U+8C30, U+8C32-8C36, U+8C38-8C40, U+8C42-8C45, U+8C47-8C59, U+8C5B-8C60, U+8C62-8C69, U+8C6C-8C78, U+8C7A-8C8B, U+8C8D-8D1C, U+8D20, U+8D2E, U+8D30, U+8D33, U+8D36, U+8D3B, U+8D3D, U+8D40, U+8D42-8D43, U+8D45-8D48, U+8D4A, U+8D4D, U+8D51-8D53, U+8D55, U+8D57, U+8D59, U+8D5C-8D5D, U+8D5F, U+8D61, U+8D65-8D6A, U+8D6C-8D6F, U+8D71-8D73, U+8D78-8D80, U+8D82-8D84, U+8D86-8D89, U+8D8C-8D9E, U+8DA0-8DA2, U+8DA4-8DB2, U+8DB5-8DBD, U+8DBF-8DC2, U+8DC4-8DCB, U+8DCD-8DD0, U+8DD2-8DDC, U+8DDE, U+8DE0-8DE7, U+8DE9, U+8DEB-8DEE, U+8DF0-8DF2, U+8DF4, U+8DF6-8E0E, U+8E10-8E1C, U+8E1E-8E21, U+8E23-8E28, U+8E2B-8E43, U+8E45-8E47, U+8E49-8E59;
}
@font-face {
@@ -231,7 +231,7 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-28.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-28.13993514f8.woff2") format("woff2");
unicode-range: U+8E5A-8E65, U+8E67-8E6C, U+8E6E-8E71, U+8E73-8E80, U+8E82-8EAA, U+8EAC-8EAE, U+8EB0-8EB1, U+8EB3-8EB9, U+8EBB-8F65, U+8F6A-8F6B, U+8F6D, U+8F71-8F73, U+8F75-8F77, U+8F79-8F7A, U+8F7C, U+8F7E, U+8F80-8F82, U+8F84, U+8F87, U+8F8A-8F8C, U+8F8E-8F8F, U+8F92, U+8F94-8F95, U+8F97-8F9A, U+8F9D, U+8FA0-8FA2, U+8FA4-8FA7, U+8FAA, U+8FAC-8FAF, U+8FB2-8FB8, U+8FBA-8FBC, U+8FBF-8FC0, U+8FC2-8FC3, U+8FC6, U+8FC9-8FCD, U+8FCF, U+8FD2-8FD3, U+8FD5-8FD7, U+8FDA, U+8FE0-8FE4, U+8FE7-8FE9, U+8FEC, U+8FEE-8FEF, U+8FF1-8FF6, U+8FFA-8FFC, U+8FFE-8FFF, U+9004, U+9007-9008, U+900B-900C, U+900E, U+9011, U+9013, U+9015-9016, U+9018-9019, U+901C, U+901E, U+9021, U+9023-902D, U+902F-9037, U+9039-903A, U+903D, U+903F-9041, U+9043-9046, U+9048-904C, U+904E-9052, U+9054-9056, U+9058-9062, U+9064, U+9066-906C, U+906F-9074, U+9076-907E, U+9081, U+9084-9090, U+9092, U+9094, U+9096, U+9098-909A, U+909C-90A1, U+90A4-90A5, U+90A7-90A9, U+90AB-90AD, U+90B0, U+90B2, U+90B4, U+90B6-90B8, U+90BC-90C0, U+90C2-90C9, U+90CB-90CD, U+90D0, U+90D2, U+90D4-90DC, U+90DE-90E0, U+90E2-90E6, U+90E9-90EA, U+90EC, U+90EE, U+90F0-90F3, U+90F5-90F7, U+90F9-90FC, U+90FF-9101, U+9103, U+9105-9118, U+911A-911D, U+911F-9121, U+9123-912E, U+9130, U+9132-9148, U+914A, U+914C, U+914E-9151, U+9153-915C, U+915E-9164, U+9166-9169, U+916B, U+916D, U+9170, U+9172-9174, U+9179-917E, U+9180-9186, U+9188, U+918A, U+918C-9191, U+9193-919A, U+919C-91B3, U+91B5-91C6, U+91C8, U+91CB, U+91D0, U+91D2-91DB, U+91DD-9273, U+9275-946A, U+946C-9487, U+948A, U+948C-9492, U+9494-9498, U+949A, U+949C, U+94A1, U+94A3-94A4, U+94A8, U+94AA-94AD, U+94AF, U+94B2, U+94B4-94BA, U+94BC-94C0, U+94C4, U+94C6-94DB, U+94DE-94EC, U+94EE-94F1, U+94F3-94F5, U+94F7, U+94F9, U+94FB-94FD, U+94FF, U+9503-9504, U+9507, U+9509-950A, U+950D-950F, U+9511-9518, U+951B-9520, U+9522, U+9527-952D, U+9530-953A, U+953C-953F, U+9543-9546, U+9548-9550, U+9552-9555, U+9557-955B, U+955D-956C, U+956E, U+9570-9575, U+9577-957E, U+9580-95E7, U+95EB-95EC, U+95F0-95F1, U+95F3, U+95F6, U+95FC, U+95FE-95FF, U+9603-9604, U+9609-960D, U+960F, U+9612-9613, U+9615-961B, U+961D-961E, U+9620, U+9622-9629, U+962B-962D, U+962F-9630, U+9637-963A, U+963C-963E, U+9641, U+9643, U+964A, U+964E-964F, U+9651-9654, U+9656-965E, U+9660, U+9663, U+9665-9667, U+966B-9674, U+9678-9684, U+9687-968A, U+968C-968E, U+9691-9693, U+9695-9698, U+969A-969B, U+969D-96A6, U+96A8-96AF, U+96B1-96B5, U+96B7-96BD, U+96BF, U+96C2-96C3, U+96C8-96CB, U+96CE, U+96D0-96D4, U+96D6-96E7, U+96E9, U+96EB-96EE, U+96F0-96F2, U+96F4-96F5, U+96F8-96FD, U+96FF, U+9701-9703, U+9705, U+9708, U+970A-970C, U+970E-9712, U+9714-9715, U+9717-971B, U+971D, U+971F-972D;
}
@font-face {
@@ -239,6 +239,6 @@
font-style: normal;
font-weight: 500 700;
font-display: swap;
src: url("./jyotisha-serif-sc-29.woff2") format("woff2");
src: url("/fonts/serif-sc/jyotisha-serif-sc-29.9b222e1a28.woff2") format("woff2");
unicode-range: U+9730-9731, U+9733-9737, U+973A-973D, U+973F-9751, U+9754-9755, U+9757-9758, U+975A, U+975C-975D, U+975F, U+9763-9768, U+976A-9773, U+9775, U+9777-978A, U+978C, U+978E-979F, U+97A1-97AC, U+97AE-97E5, U+97E8, U+97EA-97EB, U+97EE-97F2, U+97F4, U+97F7-9874, U+9877-9878, U+987C, U+9880, U+9883, U+9885, U+9889, U+988B-988C, U+988E-988F, U+9892-9895, U+9899-989B, U+989E-989F, U+98A1-98A3, U+98A5-98CD, U+98CF-98D7, U+98DA-98DD, U+98E0-990F, U+9911-9964, U+9966-9969, U+996B-996C, U+996F, U+9973-9974, U+9977-9979, U+997B, U+997D-997E, U+9980-9984, U+9987, U+9989-9991, U+9993-9995, U+9997-9998, U+999A-99A7, U+99A9-9A6B, U+9A6E, U+9A72, U+9A75, U+9A77-9A7A, U+9A7D, U+9A80, U+9A83, U+9A87-9A8A, U+9A8D-9A8E, U+9A90, U+9A92-9A96, U+9A98-9A99, U+9A9B-9AA3, U+9AA5-9AA7, U+9AA9-9AB6, U+9AB9-9ABB, U+9ABD-9AC4, U+9AC6-9AD2, U+9AD4-9AD7, U+9AD9-9AE5, U+9AE7-9B3B, U+9B3D-9B40, U+9B43, U+9B46-9B4E, U+9B50-9B53, U+9B55-9C7B, U+9C7D-9C80, U+9C82-9C84, U+9C86-9C8C, U+9C8E-9C9B, U+9C9D-9CA3, U+9CA5-9CA7, U+9CA9-9CB7, U+9CB9-9CC3, U+9CC5-9CDD, U+9CDF-9E1E, U+9E22, U+9E24, U+9E27-9E2C, U+9E2E-9E3C, U+9E3E, U+9E40-9E44, U+9E46-9E4E, U+9E50-9E63, U+9E65-9E6A, U+9E6C-9E6F, U+9E71-9E7E, U+9E80-9E91, U+9E94-9E9E, U+9EA0-9EA5, U+9EA7-9EBA, U+9EBC-9EC3, U+9EC5-9ECD, U+9ED0, U+9ED2-9ED3, U+9ED5-9ED7, U+9ED9-9EDA, U+9EDC-9EDE, U+9EE0-9F0D, U+9F0F-9F12, U+9F14-9F1F, U+9F21-9F3A, U+9F3C-9F4F, U+9F51-9F7E, U+9F80-9F83, U+9F85-9F98, U+9F9B-9F9E, U+9FA0-FF00, U+FF5F-FFDF, U+FFE6-2C27C;
}
@@ -60,7 +60,12 @@ function selfHostedFamilies(): Set<string> {
const sources = [...face[1].matchAll(/url\("([^"]+)"\)/g)].map((m) => m[1]);
assert.ok(family && sources.length > 0, "every @font-face in serif-sc.css names a family and a url()");
for (const source of sources) {
assert.ok(existsSync(new URL(source, serifCssUrl)), `${source} is declared in serif-sc.css but missing`);
// 原值:url() 相对 serif-sc.css 解析(切片与 CSS 同目录,由 Next 打包)。
// 新值:以 / 开头的 url() 按 public/ 解析(切片搬到 public/fonts/serif-sc/,带内容哈希)。
// 原因:TASK-home-first-load-20260930 T3-b / BUG-1128——Next 打包的字体带每次部署都变的 ?dpl=,
// 每次发布都要重新下载;「url() 指向的文件必须存在」这条要求不变。
const file = source.startsWith("/") ? new URL(`../public${source}`, import.meta.url) : new URL(source, serifCssUrl);
assert.ok(existsSync(file), `${source} is declared in serif-sc.css but missing`);
}
families.add(family!);
}
+12 -1
View File
@@ -96,7 +96,18 @@ test("the heading face swaps in without preload", () => {
assert.match(block, /font-family:\s*"Jyotisha Serif SC"/);
assert.match(block, /font-display:\s*swap/);
assert.match(block, /font-weight:\s*500 700/);
assert.match(block, /url\("\.\/jyotisha-serif-sc-\d{2}\.woff2"\)/, "slices are bundled by Next, not served from public/");
// 原值:url("./jyotisha-serif-sc-NN.woff2"),"slices are bundled by Next, not served from public/"。
// 新值:url("/fonts/serif-sc/jyotisha-serif-sc-NN.<10 位哈希>.woff2"),由 public/ 提供、长期缓存。
// 原因:产品 2026-09-30「宋体只下一次」(TASK-home-first-load-20260930 决策 2 明确推翻本断言):
// Next 打包的资源带每次部署都变的 ?dpl=,切片在每次发布后都会被重新下载(BUG-1128)。
assert.match(block, /url\("\/fonts\/serif-sc\/jyotisha-serif-sc-\d{2}\.[0-9a-f]{10}\.woff2"\)/, "slices are served from public/ under content-hashed names");
}
assert.doesNotMatch(read("../src/app/layout.tsx"), /rel="preload"[^>]*woff2|serif-sc.*preload/);
});
test("the heading slices keep one URL across deploys and are cached for good (BUG-1128)", () => {
const config = read("../next.config.ts");
assert.match(config, /source: "\/fonts\/serif-sc\/:path\*",\s*headers: \[\{ key: "Cache-Control", value: "public, max-age=31536000, immutable" \}\]/);
// Nothing bundles them any more, so no `?dpl=` can reach their URL.
assert.doesNotMatch(read("../src/app/fonts/serif-sc/serif-sc.css"), /url\("\.\//);
});
+13 -5
View File
@@ -3,9 +3,14 @@
Input: upstream NotoSerifSC-SemiBold.otf (not committed; see
frontend/src/app/fonts/serif-sc/SOURCE.txt for the URL and sha256).
Output: frontend/src/app/fonts/serif-sc/jyotisha-serif-sc-NN.woff2
Output: frontend/public/fonts/serif-sc/jyotisha-serif-sc-NN.<sha256[:10]>.woff2
frontend/src/app/fonts/serif-sc/serif-sc.css (@font-face list)
The slices live in public/ under content-hashed names so their URL never
carries Next's per-deploy `?dpl=` and stays cached across releases
(TASK-home-first-load-20260930 T3-b, BUG-1128); next.config.ts serves
/fonts/serif-sc/* as immutable.
Usage:
python3 scripts/fonts/build_serif_slices.py --source /path/NotoSerifSC-SemiBold.otf
python3 scripts/fonts/build_serif_slices.py --refresh-order --gf-slices /path/simplified-chinese_default.txt
@@ -54,6 +59,8 @@ import sys
ROOT = pathlib.Path(__file__).resolve().parents[2]
FONT_DIR = pathlib.Path(__file__).resolve().parent
OUT_DIR = ROOT / "frontend" / "src" / "app" / "fonts" / "serif-sc"
SLICE_DIR = ROOT / "frontend" / "public" / "fonts" / "serif-sc"
SLICE_URL = "/fonts/serif-sc"
LEVEL_FILES = (FONT_DIR / "tygfhzb-level-1.txt", FONT_DIR / "tygfhzb-level-2.txt")
ORDER_FILE = FONT_DIR / "char_order.txt"
@@ -267,7 +274,8 @@ def build(source: pathlib.Path) -> None:
slices = plan_slices(cmap)
OUT_DIR.mkdir(parents=True, exist_ok=True)
for old in OUT_DIR.glob(f"{FILE_PREFIX}-*.woff2"):
SLICE_DIR.mkdir(parents=True, exist_ok=True)
for old in SLICE_DIR.glob(f"{FILE_PREFIX}-*.woff2"):
old.unlink()
css = [
"/* Generated by scripts/fonts/build_serif_slices.py — do not edit by hand.",
@@ -276,16 +284,16 @@ def build(source: pathlib.Path) -> None:
" No preload and font-display: swap — headings paint in the sans stack first, then swap. */",
]
for i, sl in enumerate(slices):
file_name = f"{FILE_PREFIX}-{i:02d}.woff2"
blob = build_slice(data, sl["chars"])
(OUT_DIR / file_name).write_bytes(blob)
file_name = f"{FILE_PREFIX}-{i:02d}.{hashlib.sha256(blob).hexdigest()[:10]}.woff2"
(SLICE_DIR / file_name).write_bytes(blob)
css.append(
"@font-face {\n"
f" font-family: \"{FAMILY}\";\n"
" font-style: normal;\n"
" font-weight: 500 700;\n"
" font-display: swap;\n"
f" src: url(\"./{file_name}\") format(\"woff2\");\n"
f" src: url(\"{SLICE_URL}/{file_name}\") format(\"woff2\");\n"
f" unicode-range: {fmt_ranges(sl['ranges'])};\n"
"}"
)
+23 -4
View File
@@ -19,6 +19,12 @@ import pytest
ROOT = pathlib.Path(__file__).resolve().parents[1]
FONT_DIR = ROOT / "frontend" / "src" / "app" / "fonts" / "serif-sc"
CSS = FONT_DIR / "serif-sc.css"
# Former value: the slices sat beside serif-sc.css and were bundled by Next.
# New value: public/fonts/serif-sc/, content-hashed names, url("/fonts/serif-sc/...").
# Reason: TASK-home-first-load-20260930 T3-b / BUG-1128 — bundled media carry the
# per-deploy ?dpl= and were downloaded again after every release.
SLICE_DIR = ROOT / "frontend" / "public" / "fonts" / "serif-sc"
SLICE_URL = "/fonts/serif-sc/"
LEVEL_FILES = [ROOT / "scripts" / "fonts" / f"tygfhzb-level-{n}.txt" for n in (1, 2)]
MAX_SLICE_BYTES = 120 * 1024
@@ -52,7 +58,7 @@ def _faces() -> list[dict]:
for match in FACE_RE.finditer(CSS.read_text(encoding="utf-8")):
body = match.group("body")
family = re.search(r'font-family:\s*"([^"]+)"', body).group(1)
src = re.search(r'src:\s*url\("\./([^"]+)"\)\s*format\("woff2"\)', body).group(1)
src = re.search(r'src:\s*url\("/fonts/serif-sc/([^"]+)"\)\s*format\("woff2"\)', body).group(1)
unicode_range = re.search(r"unicode-range:\s*([^;]+);", body).group(1)
faces.append({"family": family, "file": src, "range": _parse_range(unicode_range), "body": body})
return faces
@@ -91,13 +97,14 @@ def test_every_referenced_file_exists_and_stays_under_the_slice_cap():
assert len(faces) >= 10
referenced = set()
for face in faces:
path = FONT_DIR / face["file"]
path = SLICE_DIR / face["file"]
assert path.is_file(), f"{face['file']} is referenced by serif-sc.css but missing"
assert path.read_bytes()[:4] == b"wOF2", f"{face['file']} is not a woff2 file"
size = path.stat().st_size
assert size <= MAX_SLICE_BYTES, f"{face['file']} is {size} bytes (> {MAX_SLICE_BYTES}); cut slices finer"
referenced.add(face["file"])
on_disk = {p.name for p in FONT_DIR.glob("*.woff2")}
on_disk = {p.name for p in SLICE_DIR.glob("*.woff2")}
assert not list(FONT_DIR.glob("*.woff2")), "slices must not be bundled again (BUG-1128)"
assert on_disk == referenced, f"unreferenced slice files: {sorted(on_disk - referenced)}"
@@ -119,10 +126,22 @@ def test_slice_glyphs_cover_their_table_characters():
ttlib = pytest.importorskip("fontTools.ttLib")
table = {ord(ch) for ch in _table()}
for face in _faces():
font = ttlib.TTFont(FONT_DIR / face["file"], lazy=True)
font = ttlib.TTFont(SLICE_DIR / face["file"], lazy=True)
cmap = set(font.getBestCmap())
wanted = face["range"] & table
assert wanted <= cmap, f"{face['file']} lacks glyphs for {len(wanted - cmap)} of its table characters"
family = font["name"].getDebugName(16) or font["name"].getDebugName(1)
assert family.startswith("Jyotisha Serif SC"), family
assert "Noto" not in (font["name"].getDebugName(1) or "")
def test_slice_names_carry_their_content_hash_so_a_url_never_changes_meaning():
"""BUG-1128: /fonts/serif-sc/* is served immutable; a name must pin its bytes."""
import hashlib
for face in _faces():
match = re.fullmatch(r"jyotisha-serif-sc-\d{2}\.([0-9a-f]{10})\.woff2", face["file"])
assert match, face["file"]
digest = hashlib.sha256((SLICE_DIR / face["file"]).read_bytes()).hexdigest()
assert digest.startswith(match.group(1)), f"{face['file']} name does not match its sha256"
assert (SLICE_DIR / "OFL.txt").read_text(encoding="utf-8") == (FONT_DIR / "OFL.txt").read_text(encoding="utf-8")