diff --git a/.gitignore b/.gitignore
index 9e604c19b..2b4b71010 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,9 +30,9 @@ coverage/
**/public/assets/js/*
**/public/assets/live2d/models/*
**/public/assets/vrm/models/*
-packages/stage-ui/public/assets/fonts/
-apps/stage-tamagotchi/public/assets/fonts/
-apps/stage-web/public/assets/fonts/
+
+**/public/assets/fonts/
+**/public/assets/static-fonts/
*.pcm
*.wav
diff --git a/apps/stage-tamagotchi/package.json b/apps/stage-tamagotchi/package.json
index d526cfd7b..d6ee06def 100644
--- a/apps/stage-tamagotchi/package.json
+++ b/apps/stage-tamagotchi/package.json
@@ -81,6 +81,16 @@
"zod": "^3.25.74"
},
"devDependencies": {
+ "@fontsource-variable/dm-sans": "^5.2.6",
+ "@fontsource-variable/jura": "^5.2.6",
+ "@fontsource-variable/quicksand": "^5.2.8",
+ "@fontsource-variable/urbanist": "^5.2.6",
+ "@fontsource/dm-mono": "^5.2.6",
+ "@fontsource/dm-serif-display": "^5.2.6",
+ "@fontsource/gugi": "^5.2.6",
+ "@fontsource/kiwi-maru": "^5.2.6",
+ "@fontsource/m-plus-rounded-1c": "^5.2.8",
+ "@fontsource/sniglet": "^5.2.6",
"@iconify-json/carbon": "^1.2.10",
"@iconify-json/eos-icons": "^1.2.2",
"@iconify-json/lucide": "^1.2.55",
diff --git a/apps/stage-tamagotchi/src/main.ts b/apps/stage-tamagotchi/src/main.ts
index 0fe6e8171..88c8fe621 100644
--- a/apps/stage-tamagotchi/src/main.ts
+++ b/apps/stage-tamagotchi/src/main.ts
@@ -14,11 +14,22 @@ import App from './App.vue'
import { i18n } from './modules/i18n'
-import '@proj-airi/font-cjkfonts-allseto/index.css'
-import '@proj-airi/font-xiaolai/index.css'
import '@unocss/reset/tailwind.css'
import 'uno.css'
import './styles/main.css'
+// Fonts
+import '@proj-airi/font-cjkfonts-allseto/index.css'
+import '@proj-airi/font-xiaolai/index.css'
+import '@fontsource-variable/dm-sans'
+import '@fontsource-variable/jura'
+import '@fontsource-variable/quicksand'
+import '@fontsource-variable/urbanist'
+import '@fontsource/dm-mono'
+import '@fontsource/dm-serif-display'
+import '@fontsource/gugi'
+import '@fontsource/kiwi-maru'
+import '@fontsource/m-plus-rounded-1c'
+import '@fontsource/sniglet'
const pinia = createPinia()
diff --git a/apps/stage-tamagotchi/uno.config.ts b/apps/stage-tamagotchi/uno.config.ts
index ac0e80c06..a58ed7a68 100644
--- a/apps/stage-tamagotchi/uno.config.ts
+++ b/apps/stage-tamagotchi/uno.config.ts
@@ -1,3 +1,69 @@
+import { createLocalFontProcessor } from '@unocss/preset-web-fonts/local'
+import { defineConfig, mergeConfigs, presetWebFonts } from 'unocss'
+
import { sharedUnoConfig } from '../../uno.config'
-export default sharedUnoConfig()
+export default mergeConfigs([
+ sharedUnoConfig(),
+ defineConfig({
+ presets: [
+ presetWebFonts({
+ fonts: {
+ 'sans': {
+ name: 'DM Sans Variable',
+ provider: 'none',
+ },
+ 'serif': {
+ name: 'DM Serif Display',
+ provider: 'none',
+ },
+ 'mono': {
+ name: 'DM Mono',
+ provider: 'none',
+ },
+ 'cute': {
+ name: 'Kiwi Maru',
+ provider: 'none',
+ },
+ 'cuteen': {
+ name: 'Sniglet',
+ provider: 'none',
+ },
+ 'jura': {
+ name: 'Jura Variable',
+ provider: 'none',
+ },
+ 'gugi': {
+ name: 'Gugi',
+ provider: 'none',
+ },
+ 'quicksand': {
+ name: 'Quicksand Variable',
+ provider: 'none',
+ },
+ 'quanlai': {
+ name: 'cjkfonts AllSeto',
+ provider: 'none',
+ },
+ 'xiaolai': {
+ name: 'Xiaolai SC',
+ provider: 'none',
+ },
+ 'urbanist': {
+ name: 'Urbanist Variable',
+ provider: 'none',
+ },
+ 'm-plus-rounded': {
+ name: 'M PLUS Rounded 1c',
+ provider: 'none',
+ },
+ },
+ timeouts: {
+ warning: 5000,
+ failure: 10000,
+ },
+ processors: createLocalFontProcessor(),
+ }),
+ ],
+ }),
+])
diff --git a/apps/stage-web/src/components/Layouts/HeaderLink.vue b/apps/stage-web/src/components/Layouts/HeaderLink.vue
index d684c21e6..c74ffb82d 100644
--- a/apps/stage-web/src/components/Layouts/HeaderLink.vue
+++ b/apps/stage-web/src/components/Layouts/HeaderLink.vue
@@ -19,7 +19,7 @@ const dark = useDark()
-
+
AIRI
diff --git a/apps/stage-web/uno.config.ts b/apps/stage-web/uno.config.ts
index ea67ae1a8..5a5518e8f 100644
--- a/apps/stage-web/uno.config.ts
+++ b/apps/stage-web/uno.config.ts
@@ -1,10 +1,68 @@
-import { mergeConfigs } from 'unocss'
+import { mergeConfigs, presetWebFonts } from 'unocss'
import { sharedUnoConfig } from '../../uno.config'
export default mergeConfigs([
sharedUnoConfig(),
{
+ presets: [
+ presetWebFonts({
+ fonts: {
+ 'sans': {
+ name: 'DM Sans Variable',
+ provider: 'fontsource',
+ },
+ 'serif': {
+ name: 'DM Serif Display',
+ provider: 'fontsource',
+ },
+ 'mono': {
+ name: 'DM Mono',
+ provider: 'fontsource',
+ },
+ 'cute': {
+ name: 'Kiwi Maru',
+ provider: 'fontsource',
+ },
+ 'cuteen': {
+ name: 'Sniglet',
+ provider: 'fontsource',
+ },
+ 'jura': {
+ name: 'Jura Variable',
+ provider: 'fontsource',
+ },
+ 'gugi': {
+ name: 'Gugi',
+ provider: 'fontsource',
+ },
+ 'quicksand': {
+ name: 'Quicksand Variable',
+ provider: 'fontsource',
+ },
+ 'quanlai': {
+ name: 'cjkfonts AllSeto',
+ provider: 'none',
+ },
+ 'xiaolai': {
+ name: 'Xiaolai SC',
+ provider: 'none',
+ },
+ 'urbanist': {
+ name: 'Urbanist Variable',
+ provider: 'fontsource',
+ },
+ 'm-plus-rounded': {
+ name: 'M PLUS Rounded 1c',
+ provider: 'fontsource',
+ },
+ },
+ timeouts: {
+ warning: 5000,
+ failure: 10000,
+ },
+ }),
+ ],
rules: [
['transition-colors-none', {
'transition-property': 'color, background-color, border-color, text-color',
diff --git a/packages/stage-ui/package.json b/packages/stage-ui/package.json
index b42a25410..54e7e3c28 100644
--- a/packages/stage-ui/package.json
+++ b/packages/stage-ui/package.json
@@ -109,6 +109,16 @@
"zod": "^3.25.74"
},
"devDependencies": {
+ "@fontsource-variable/dm-sans": "^5.2.6",
+ "@fontsource-variable/jura": "^5.2.6",
+ "@fontsource-variable/quicksand": "^5.2.8",
+ "@fontsource-variable/urbanist": "^5.2.6",
+ "@fontsource/dm-mono": "^5.2.6",
+ "@fontsource/dm-serif-display": "^5.2.6",
+ "@fontsource/gugi": "^5.2.6",
+ "@fontsource/kiwi-maru": "^5.2.6",
+ "@fontsource/m-plus-rounded-1c": "^5.2.8",
+ "@fontsource/sniglet": "^5.2.6",
"@histoire/plugin-vue": "1.0.0-alpha.2",
"@iconify-json/carbon": "^1.2.10",
"@iconify-json/eos-icons": "^1.2.2",
diff --git a/packages/stage-ui/stories/setup.ts b/packages/stage-ui/stories/setup.ts
index d917040bc..4e6599bad 100644
--- a/packages/stage-ui/stories/setup.ts
+++ b/packages/stage-ui/stories/setup.ts
@@ -12,8 +12,19 @@ import { i18n } from './modules/i18n'
import 'uno.css'
import '@unocss/reset/tailwind.css'
import './styles/main.css'
+// Fonts
import '@proj-airi/font-cjkfonts-allseto/index.css'
import '@proj-airi/font-xiaolai/index.css'
+import '@fontsource-variable/dm-sans'
+import '@fontsource-variable/jura'
+import '@fontsource-variable/quicksand'
+import '@fontsource-variable/urbanist'
+import '@fontsource/dm-mono'
+import '@fontsource/dm-serif-display'
+import '@fontsource/gugi'
+import '@fontsource/kiwi-maru'
+import '@fontsource/m-plus-rounded-1c'
+import '@fontsource/sniglet'
export const setupVue3 = defineSetupVue3(({ app }) => {
app.use(MotionPlugin)
diff --git a/packages/stage-ui/uno.config.ts b/packages/stage-ui/uno.config.ts
index 9a9a1de1d..741fbc1b4 100644
--- a/packages/stage-ui/uno.config.ts
+++ b/packages/stage-ui/uno.config.ts
@@ -1,8 +1,68 @@
-import { mergeConfigs } from 'unocss'
+import { defineConfig, mergeConfigs, presetWebFonts } from 'unocss'
import { histoireUnoConfig, sharedUnoConfig } from '../../uno.config'
export default mergeConfigs([
sharedUnoConfig(),
histoireUnoConfig(),
+ defineConfig({
+ presets: [
+ presetWebFonts({
+ fonts: {
+ 'sans': {
+ name: 'DM Sans Variable',
+ provider: 'none',
+ },
+ 'serif': {
+ name: 'DM Serif Display',
+ provider: 'none',
+ },
+ 'mono': {
+ name: 'DM Mono',
+ provider: 'none',
+ },
+ 'cute': {
+ name: 'Kiwi Maru',
+ provider: 'none',
+ },
+ 'cuteen': {
+ name: 'Sniglet',
+ provider: 'none',
+ },
+ 'jura': {
+ name: 'Jura Variable',
+ provider: 'none',
+ },
+ 'gugi': {
+ name: 'Gugi',
+ provider: 'none',
+ },
+ 'quicksand': {
+ name: 'Quicksand Variable',
+ provider: 'none',
+ },
+ 'quanlai': {
+ name: 'cjkfonts AllSeto',
+ provider: 'none',
+ },
+ 'xiaolai': {
+ name: 'Xiaolai SC',
+ provider: 'none',
+ },
+ 'urbanist': {
+ name: 'Urbanist Variable',
+ provider: 'none',
+ },
+ 'm-plus-rounded': {
+ name: 'M PLUS Rounded 1c',
+ provider: 'none',
+ },
+ },
+ timeouts: {
+ warning: 5000,
+ failure: 10000,
+ },
+ }),
+ ],
+ }),
])
diff --git a/packages/ui/uno.config.ts b/packages/ui/uno.config.ts
deleted file mode 100644
index 9a9a1de1d..000000000
--- a/packages/ui/uno.config.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { mergeConfigs } from 'unocss'
-
-import { histoireUnoConfig, sharedUnoConfig } from '../../uno.config'
-
-export default mergeConfigs([
- sharedUnoConfig(),
- histoireUnoConfig(),
-])
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cd87e2bd1..279977175 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -460,6 +460,36 @@ importers:
specifier: ^3.25.74
version: 3.25.74
devDependencies:
+ '@fontsource-variable/dm-sans':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource-variable/jura':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource-variable/quicksand':
+ specifier: ^5.2.8
+ version: 5.2.8
+ '@fontsource-variable/urbanist':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/dm-mono':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/dm-serif-display':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/gugi':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/kiwi-maru':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/m-plus-rounded-1c':
+ specifier: ^5.2.8
+ version: 5.2.8
+ '@fontsource/sniglet':
+ specifier: ^5.2.6
+ version: 5.2.6
'@iconify-json/carbon':
specifier: ^1.2.10
version: 1.2.10
@@ -1214,6 +1244,36 @@ importers:
specifier: ^3.25.74
version: 3.25.74
devDependencies:
+ '@fontsource-variable/dm-sans':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource-variable/jura':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource-variable/quicksand':
+ specifier: ^5.2.8
+ version: 5.2.8
+ '@fontsource-variable/urbanist':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/dm-mono':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/dm-serif-display':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/gugi':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/kiwi-maru':
+ specifier: ^5.2.6
+ version: 5.2.6
+ '@fontsource/m-plus-rounded-1c':
+ specifier: ^5.2.8
+ version: 5.2.8
+ '@fontsource/sniglet':
+ specifier: ^5.2.6
+ version: 5.2.6
'@histoire/plugin-vue':
specifier: 1.0.0-alpha.2
version: 1.0.0-alpha.2(histoire@1.0.0-alpha.2(@types/node@24.0.10)(bufferutil@4.0.9)(less@4.3.0)(lightningcss@1.30.1)(terser@5.43.1)(utf-8-validate@5.0.10)(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0)))(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(lightningcss@1.30.1)(terser@5.43.1)(tsx@4.20.3)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
@@ -3192,12 +3252,42 @@ packages:
'@floating-ui/vue@1.1.6':
resolution: {integrity: sha512-XFlUzGHGv12zbgHNk5FN2mUB7ROul3oG2ENdTpWdE+qMFxyNxWSRmsoyhiEnpmabNm6WnUvR1OvJfUfN4ojC1A==}
+ '@fontsource-variable/dm-sans@5.2.6':
+ resolution: {integrity: sha512-edr+wGsc9d7/5aMB8ty1z0Zb0fqzJtBZ5+c2FhtrJwYhefcLEOL4r66EBqeyEFhVTMhCGIjhtxmigrRbPN0mUw==}
+
+ '@fontsource-variable/jura@5.2.6':
+ resolution: {integrity: sha512-jCiXOt9JBBXY4p25QqDKbUlrLz5zlADjEpZWGte0oWI4waUzlzKMWhyr4qrk8ttSSzl4PD9lv+2ZZto7ZylRVQ==}
+
+ '@fontsource-variable/quicksand@5.2.8':
+ resolution: {integrity: sha512-vCbNpMbsogGxCkKOuDaH+Gxvdu8mMc1jHRyW+LrG4kKC+Dq+ZJgXAuhVKY4zpEFSOLZUeNxwDSEfTfX09N6W3A==}
+
+ '@fontsource-variable/urbanist@5.2.6':
+ resolution: {integrity: sha512-Nbsl4I8Tw547BA61PX1EtSpuaTgtejRT/CzNUTWHp2RE+8P5iGouvsvOOigukkTDIU/znKAplQysGB3NwhsYzA==}
+
+ '@fontsource/dm-mono@5.2.6':
+ resolution: {integrity: sha512-d38urf08wZ/UcAM13kmuPkhr9xGEo0S9undlZ/99nBb7dK5+w1uqriP6VVJ8T7pYiNtRtZq7NxV/2KI/6Obsog==}
+
+ '@fontsource/dm-serif-display@5.2.6':
+ resolution: {integrity: sha512-V/JaidjpfZu8TD9rGM3bIhDMCzS79C/mMWHPK9EtJT8S2qghXahDFZdlfria5T+OGpffGuHKL4st4UIFMdTM4A==}
+
'@fontsource/fusion-pixel-12px-proportional-sc@5.2.5':
resolution: {integrity: sha512-TMFojLE0JUJUqgoL1pRxohnm11u59BYSkogyN9VbTQp2kh1HkkQ1FSkPboce3GGQXPskNTip9+oRp3ju83U0tw==}
+ '@fontsource/gugi@5.2.6':
+ resolution: {integrity: sha512-mDdbyLBuGuBH0WcKR6a4DxG5vc+EylJG5J9uT0J+Hn/pwhIxg/8QJPYNGsRzk51Sad7egRct4y3uhjrHX8Dvkg==}
+
+ '@fontsource/kiwi-maru@5.2.6':
+ resolution: {integrity: sha512-DlyZ32ColaAlR+gnKrA5ERz2QIf3kMINPvUMN3L/qSQF7Rm7nnRIf4++GHcWlJ8J+SY3wuzLonCuWul/kFKNdg==}
+
+ '@fontsource/m-plus-rounded-1c@5.2.8':
+ resolution: {integrity: sha512-XBW1hHdfvVlcohcUtvihWVprqtQJgDJWzsml0zU0l01qU7y6Ryu/mVnMfqMgzNGRqlrRgYGqytKOZFQZsG7H/w==}
+
'@fontsource/quicksand@5.2.8':
resolution: {integrity: sha512-YRgnt2eQfNrk5OWqYJZmFoi6B6sioRIbjKJj3/l5CnezeE0TzD8XL35Q4fRNfHLpOzLi/ckNvTZySBHVVP1G6w==}
+ '@fontsource/sniglet@5.2.6':
+ resolution: {integrity: sha512-tYtYJEvHwBHIAspZJ7AsiFHAPcL31EVTMktf6cVNsGIHlhKW1Ea9Z0vb0/jL8TY65HVTvAK0s3zez8hEg1hHDQ==}
+
'@formkit/auto-animate@0.8.2':
resolution: {integrity: sha512-SwPWfeRa5veb1hOIBMdzI+73te5puUBHmqqaF1Bu7FjvxlYSz/kJcZKSa9Cg60zL0uRNeJL2SbRxV6Jp6Q1nFQ==}
@@ -6005,6 +6095,9 @@ packages:
'@xsai/shared@0.3.0-beta.8':
resolution: {integrity: sha512-S7BYvluU7aA2Ti7HEblV3ISDZbF89VP2dDC5WCrylYlQIYoFlZjlhJhJL5c/+KwX+og0pvh5Y0iSPKdcoMmLmw==}
+ '@xsai/shared@0.3.0-beta.9':
+ resolution: {integrity: sha512-vZoXmWuTaS0SbPc6U9IeGJzzHCNVzBiLfNHQnLPrQeXT5r8edjGx8fEUIPO8cvlPsBlvPYT8lfEaqvZrdWTUww==}
+
'@xsai/stream-text@0.3.0-beta.6':
resolution: {integrity: sha512-w1aQEqa1yGXjSckZzZcpFgRf3JzUuqHDB4tc3UZaKa4DLGmslr3e4xXpOXWuqgIeDMdj2YWI9163GC/bfF0zBA==}
@@ -14048,10 +14141,30 @@ snapshots:
- '@vue/composition-api'
- vue
+ '@fontsource-variable/dm-sans@5.2.6': {}
+
+ '@fontsource-variable/jura@5.2.6': {}
+
+ '@fontsource-variable/quicksand@5.2.8': {}
+
+ '@fontsource-variable/urbanist@5.2.6': {}
+
+ '@fontsource/dm-mono@5.2.6': {}
+
+ '@fontsource/dm-serif-display@5.2.6': {}
+
'@fontsource/fusion-pixel-12px-proportional-sc@5.2.5': {}
+ '@fontsource/gugi@5.2.6': {}
+
+ '@fontsource/kiwi-maru@5.2.6': {}
+
+ '@fontsource/m-plus-rounded-1c@5.2.8': {}
+
'@fontsource/quicksand@5.2.8': {}
+ '@fontsource/sniglet@5.2.6': {}
+
'@formkit/auto-animate@0.8.2': {}
'@google/genai@0.8.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)':
@@ -17314,7 +17427,7 @@ snapshots:
'@xsai-ext/shared-providers@0.2.2':
dependencies:
- '@xsai/shared': 0.3.0-beta.8
+ '@xsai/shared': 0.3.0-beta.9
'@xsai-ext/shared-providers@0.3.0-beta.8':
dependencies:
@@ -17385,6 +17498,8 @@ snapshots:
'@xsai/shared@0.3.0-beta.8': {}
+ '@xsai/shared@0.3.0-beta.9': {}
+
'@xsai/stream-text@0.3.0-beta.6':
dependencies:
'@xsai/shared-chat': 0.3.0-beta.6
diff --git a/uno.config.ts b/uno.config.ts
index 31f1ba1b1..ebac59eec 100644
--- a/uno.config.ts
+++ b/uno.config.ts
@@ -5,7 +5,6 @@ import { setDefaultAutoSelectFamilyAttemptTimeout } from 'node:net'
import { createExternalPackageIconLoader } from '@iconify/utils/lib/loader/external-pkg'
import { presetChromatic } from '@proj-airi/unocss-preset-chromatic'
import { colorToString } from '@unocss/preset-mini/utils'
-import { createLocalFontProcessor } from '@unocss/preset-web-fonts/local'
import { defineConfig, mergeConfigs, presetAttributify, presetIcons, presetTypography, presetWebFonts, presetWind3, transformerDirectives, transformerVariantGroup } from 'unocss'
import { presetScrollbar } from 'unocss-preset-scrollbar'
import { parseColor } from 'unocss/preset-mini'
@@ -129,7 +128,6 @@ export function sharedUnoConfig() {
warning: 5000,
failure: 10000,
},
- processors: createLocalFontProcessor(),
}),
presetIcons({
scale: 1.2,