Gemini did something similar for me with Cyrillic and Latin characters using a unicode-range. I suppose this could also be done for Chinese and Thai characters.
Here’s how it looks in my CSS:
/* ==========================================================================
HYBRID TYPOGRAPHY - SET B: NUNITO (Soft & Rounded Style) + CODE
========================================================================== */
/* 1. ЦИФРЫ (0-9) -> JetBrains Mono Light */
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('JetBrains Mono Light'), local('JetBrainsMono-Light');
font-weight: 400;
font-style: normal;
unicode-range: U+0030-0039;
}
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('JetBrains Mono Bold'), local('JetBrainsMono-Bold');
font-weight: 700;
font-style: normal;
unicode-range: U+0030-0039;
}
/* 2. ЛАТИНИЦА -> Plus Jakarta Sans */
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Plus Jakarta Sans'), local('PlusJakartaSans-Regular');
font-weight: 400;
font-style: normal;
unicode-range: U+0041-005A, U+0061-007A, U+00C0-00FF, U+0100-017F;
}
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Plus Jakarta Sans Bold'), local('PlusJakartaSans-Bold');
font-weight: 700;
font-style: normal;
unicode-range: U+0041-005A, U+0061-007A, U+00C0-00FF, U+0100-017F;
}
/* 3.1. ИСКЛЮЧЕНИЕ ДЛЯ % И & -> Plus Jakarta Sans */
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Plus Jakarta Sans'), local('PlusJakartaSans-Regular'),
local('Inter'), local('Inter-Regular');
font-weight: 400;
font-style: normal;
unicode-range: U+0025, U+0026;
}
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Plus Jakarta Sans Bold'), local('PlusJakartaSans-Bold'),
local('Inter Bold'), local('Inter-Bold');
font-weight: 700;
font-style: normal;
unicode-range: U+0025, U+0026;
}
/* 3.2. ОСНОВНЫЕ СИМВОЛЫ И ПУНКТУАЦИЯ -> Fira Code (БЕЗ % и &) */
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Fira Code'), local('FiraCode-Regular');
font-weight: 400;
font-style: normal;
unicode-range:
U+0020-0024,
U+0027-002F,
U+003A-0040,
U+005B-0060,
U+007B-007E,
U+2000-206F, U+20A0-20CF, U+2200-22FF;
}
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Fira Code Bold'), local('FiraCode-Bold');
font-weight: 700;
font-style: normal;
unicode-range:
U+0020-0024,
U+0027-002F,
U+003A-0040,
U+005B-0060,
U+007B-007E,
U+2000-206F, U+20A0-20CF, U+2200-22FF;
}
/* 4. КИРИЛЛИЦА -> Nunito */
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Nunito'), local('Nunito-Regular');
font-weight: 400;
unicode-range: U+0400-04FF, U+0500-052F, U+1C80-1C88, U+2DE0-2DFF, U+A640-A69F;
}
@font-face {
font-family: 'ObsidianNunitoHybrid';
src: local('Nunito Bold'), local('Nunito-Bold');
font-weight: 700;
unicode-range: U+0400-04FF, U+0500-052F, U+1C80-1C88, U+2DE0-2DFF, U+A640-A69F;
}
/* --------------------------------------------------------------------------
5. ПРИМЕНЕНИЕ К ОСНОВНОМУ ТЕКСТУ И РЕЖИМУ РЕДАКТИРОВАНИЯ
-------------------------------------------------------------------------- */
body {
--font-text: 'ObsidianNunitoHybrid', sans-serif !important;
--font-editor: 'ObsidianNunitoHybrid', sans-serif !important;
/* Задаем отдельный шрифт для кода (JetBrains Mono или Cascadia Code) */
--font-monospace: 'JetBrains Mono', 'Cascadia Code', monospace !important;
}
.cm-s-obsidian .cm-line,
.markdown-rendered p, .markdown-rendered li {
font-family: 'ObsidianNunitoHybrid', sans-serif !important;
line-height: 1.6 !important;
}
/* --------------------------------------------------------------------------
6. ПРИНУДИТЕЛЬНЫЕ СЕЛЕКТОРЫ ДЛЯ INLINE CODE И CODE BLOCKS (Live Preview + Reading)
-------------------------------------------------------------------------- */
/* Инлайн-код `code` */
code,
.cm-inline-code,
.cm-s-obsidian span.cm-inline-code {
font-family: var(--font-monospace) !important;
font-size: 0.9em !important; /* Легкое уменьшение, чтобы инлайн-код красиво вписывался в строку */
}
/* Блоки кода ```codeblock``` */
pre code,
.cm-codeblock,
.HyperMD-codeblock,
.cm-embed-block.markdown-rendered pre {
font-family: var(--font-monospace) !important;
}