voxflow 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/remotion-bundle/bundle.js +0 -1
- package/dist/remotion-bundle/bundle.js.map +1 -1
- package/lib/commands/_registry.js +1 -0
- package/lib/commands/card-render.js +520 -0
- package/lib/commands/card.js +57 -0
- package/lib/core/ffmpeg.js +74 -11
- package/package.json +5 -2
- package/skills/.claude-plugin/marketplace.json +1 -1
- package/skills/.claude-plugin/plugin.json +2 -2
- package/skills/README.md +2 -2
- package/skills/card/SKILL.md +81 -5
- package/skills/card/assets/fonts/MANIFEST.md +29 -0
- package/skills/card/assets/fonts/css/cabinet-grotesk.css +2 -0
- package/skills/card/assets/fonts/css/geist-mono.css +29 -0
- package/skills/card/assets/fonts/css/geist.css +29 -0
- package/skills/card/assets/fonts/css/general-sans.css +2 -0
- package/skills/card/assets/fonts/css/ibm-plex-mono-500.css +49 -0
- package/skills/card/assets/fonts/css/ibm-plex-mono-600.css +49 -0
- package/skills/card/assets/fonts/css/ibm-plex-mono.css +49 -0
- package/skills/card/assets/fonts/css/libre-caslon-display.css +19 -0
- package/skills/card/assets/fonts/css/newsreader.css +29 -0
- package/skills/card/assets/fonts/css/noto-sans-sc.css +1009 -0
- package/skills/card/assets/fonts/css/noto-serif-sc.css +1009 -0
- package/skills/card/assets/fonts/css/satoshi.css +2 -0
- package/skills/card/assets/fonts/css/source-serif-4.css +59 -0
- package/skills/card/assets/fonts/css/space-grotesk.css +29 -0
- package/skills/card/assets/fonts/css/spectral-600.css +49 -0
- package/skills/card/assets/fonts/css/spectral-800.css +49 -0
- package/skills/card/assets/fonts/css/spectral.css +49 -0
- package/skills/card/assets/fonts/fonts.css +25 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-100.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-101.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-102.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-103.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-104.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-105.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-106.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-107.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-108.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-109.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-110.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-111.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-112.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-113.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-114.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-115.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-116.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-117.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-118.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-119.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-21.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-22.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-23.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-24.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-25.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-26.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-27.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-28.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-29.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-30.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-31.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-32.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-33.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-34.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-35.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-36.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-37.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-38.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-39.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-4.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-40.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-41.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-42.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-43.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-44.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-45.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-46.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-47.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-48.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-49.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-5.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-50.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-51.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-52.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-53.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-54.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-55.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-56.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-57.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-58.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-59.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-6.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-60.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-61.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-62.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-63.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-65.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-66.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-67.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-68.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-69.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-70.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-71.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-72.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-73.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-74.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-75.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-76.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-77.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-78.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-79.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-80.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-81.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-82.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-83.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-84.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-85.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-86.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-87.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-88.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-89.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-90.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-91.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-97.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-98.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-99.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-100.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-101.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-102.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-103.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-104.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-105.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-106.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-107.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-108.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-109.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-110.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-111.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-112.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-113.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-114.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-115.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-116.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-117.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-118.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-119.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-21.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-22.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-23.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-24.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-25.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-26.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-27.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-28.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-29.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-30.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-31.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-32.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-33.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-34.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-35.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-36.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-37.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-38.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-39.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-4.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-40.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-41.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-42.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-43.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-44.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-45.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-46.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-47.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-48.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-49.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-5.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-50.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-51.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-52.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-53.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-54.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-55.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-56.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-57.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-58.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-59.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-6.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-60.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-61.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-62.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-63.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-65.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-66.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-67.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-68.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-69.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-70.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-71.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-72.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-73.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-74.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-75.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-76.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-77.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-78.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-79.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-80.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-81.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-82.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-83.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-84.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-85.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-86.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-87.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-88.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-89.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-90.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-91.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-97.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-98.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-99.woff2 +0 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/lxgwwenkailite-bold.css +873 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/lxgwwenkailite-regular.css +873 -0
- package/skills/card/assets/fonts/packages/lxgw-wenkai/style.css +2 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_4e00_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_4fea_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_5268_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_543c_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_5784_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_5b6c_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_5e37_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_60d2_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_6326_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_65b1_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_68a8_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_6cba_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_6fa2_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_73ce_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_77e4_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_7b78_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_7eee_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_81c1_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_8608_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_8aa4_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_8d20_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_8feb_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_94aa_192.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L1_97cd_266.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_3918_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_5081_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_5467_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_55ed_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_57f0_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_5ae4_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_5e15_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_609b_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_63e1_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_66dd_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_696c_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_6c75_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_6e73_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_7114_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_7392_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_7580_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_7769_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_7a71_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_7e21_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_7fcd_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_8203_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_8393_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_85b8_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_87cb_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_8bb5_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_8db6_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_9022_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_91ea_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_9504_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_9655_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_996a_96.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L2_9c95_133.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_101_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_148_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_1d4_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_1e86_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_1edf_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_20_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_2172_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_2495_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_3067_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_30b3_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_30f3_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_3a9_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_421_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_536a_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_60_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_61b8_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_706d_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_7b7c_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_836e_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_9124_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_9795_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_c1_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_fe3a_64.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/L3_ff16_79.woff2 +0 -0
- package/skills/card/assets/fonts/packages/smiley-sans/font.css +80 -0
- package/skills/card/assets/fonts/woff2/fontshare/cabinet-grotesk.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/fontshare/general-sans.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/fontshare/satoshi.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/geist/geist-cyrillic-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/geist/geist-latin-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/geist/geist-latin-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/geist-mono/geist-mono-cyrillic-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/geist-mono/geist-mono-latin-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/geist-mono/geist-mono-latin-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-cyrillic-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-cyrillic-ext-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-latin-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-latin-ext-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-vietnamese-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-cyrillic-500-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-cyrillic-ext-500-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-latin-500-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-latin-ext-500-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-vietnamese-500-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-cyrillic-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-cyrillic-ext-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-latin-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-latin-ext-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-vietnamese-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/libre-caslon-display/libre-caslon-display-latin-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/libre-caslon-display/libre-caslon-display-latin-ext-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/newsreader/newsreader-latin-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/newsreader/newsreader-latin-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/newsreader/newsreader-vietnamese-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-100-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-101-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-102-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-103-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-104-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-105-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-106-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-107-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-108-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-109-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-110-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-111-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-112-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-113-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-114-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-115-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-116-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-117-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-118-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-119-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-21-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-22-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-23-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-24-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-25-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-26-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-27-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-28-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-29-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-30-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-31-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-32-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-33-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-34-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-35-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-36-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-37-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-38-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-39-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-4-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-40-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-41-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-42-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-43-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-44-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-45-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-46-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-47-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-48-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-49-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-5-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-50-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-51-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-52-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-53-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-54-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-55-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-56-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-57-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-58-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-59-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-6-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-60-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-61-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-62-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-63-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-64-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-65-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-66-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-67-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-68-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-69-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-70-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-71-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-72-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-73-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-74-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-75-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-76-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-77-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-78-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-79-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-80-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-81-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-82-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-83-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-84-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-85-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-86-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-87-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-88-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-89-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-90-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-91-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-97-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-98-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-99-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-cyrillic-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-latin-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-latin-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-vietnamese-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-100-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-101-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-102-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-103-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-104-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-105-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-106-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-107-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-108-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-109-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-110-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-111-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-112-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-113-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-114-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-115-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-116-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-117-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-118-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-119-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-21-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-22-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-23-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-24-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-25-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-26-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-27-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-28-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-29-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-30-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-31-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-32-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-33-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-34-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-35-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-36-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-37-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-38-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-39-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-4-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-40-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-41-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-42-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-43-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-44-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-45-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-46-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-47-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-48-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-49-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-5-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-50-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-51-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-52-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-53-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-54-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-55-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-56-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-57-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-58-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-59-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-6-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-60-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-61-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-62-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-63-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-64-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-65-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-66-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-67-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-68-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-69-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-70-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-71-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-72-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-73-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-74-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-75-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-76-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-77-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-78-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-79-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-80-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-81-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-82-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-83-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-84-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-85-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-86-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-87-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-88-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-89-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-90-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-91-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-97-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-98-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-99-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-cyrillic-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-latin-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-latin-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-vietnamese-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-cyrillic-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-cyrillic-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-greek-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-latin-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-latin-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-vietnamese-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/space-grotesk/space-grotesk-latin-ext-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/space-grotesk/space-grotesk-latin-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/space-grotesk/space-grotesk-vietnamese-wght-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral/spectral-cyrillic-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral/spectral-cyrillic-ext-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral/spectral-latin-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral/spectral-latin-ext-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral/spectral-vietnamese-400-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-600/spectral-cyrillic-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-600/spectral-cyrillic-ext-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-600/spectral-latin-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-600/spectral-latin-ext-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-600/spectral-vietnamese-600-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-800/spectral-cyrillic-800-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-800/spectral-cyrillic-ext-800-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-800/spectral-latin-800-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-800/spectral-latin-ext-800-normal.woff2 +0 -0
- package/skills/card/assets/fonts/woff2/spectral-800/spectral-vietnamese-800-normal.woff2 +0 -0
- package/skills/card/references/design-languages.md +2 -0
- package/skills/card/references/fonts-preview.html +450 -0
- package/skills/card/references/fonts.md +151 -0
- package/skills/card/references/taste.md +2 -2
- package/skills/card/references/themes/presets.md +1 -1
- package/skills/card/scripts/download-fonts.sh +240 -0
- package/skills/card/scripts/render-cards.mjs +3 -0
|
@@ -64,8 +64,8 @@ Conflict resolution:
|
|
|
64
64
|
|
|
65
65
|
## Typography
|
|
66
66
|
|
|
67
|
-
-
|
|
68
|
-
-
|
|
67
|
+
- Concrete font choices, the per-theme candidate pools, and the weighted-random font-selection algorithm live in `references/fonts.md` (single source of truth). Do not maintain a separate font list here.
|
|
68
|
+
- Hard floor only: never default to Inter; all fonts must be locally embedded via `assets/fonts/fonts.css` (no CDN/hotlink); body text avoids pure black.
|
|
69
69
|
- Technical dashboard-like cards should use high-quality sans or mono, not decorative serif.
|
|
70
70
|
- Large editorial cards may use serif/display titles, but body text should stay readable.
|
|
71
71
|
- Body text should avoid pure black. Use charcoal or deep gray such as `#1f1d1a`, `#2f2a24`, `#333333`, or `#4a4a4a`.
|
|
@@ -35,7 +35,7 @@ Every card set should define a compact theme token block before component stylin
|
|
|
35
35
|
- `--grad`, `--grad-soft`
|
|
36
36
|
- `--radius`, `--radius-sm`, `--radius-lg`
|
|
37
37
|
- `--shadow`, `--shadow-lg`
|
|
38
|
-
- `--font-sans`, `--font-serif`, `--font-mono`, `--font-display`
|
|
38
|
+
- `--font-sans`, `--font-serif`, `--font-mono`, `--font-display` — do not hardcode font names here; their values come from the `references/fonts.md` selection algorithm (preset × design-language × content-language → weighted-random pick), embedded locally via `assets/fonts/fonts.css`.
|
|
39
39
|
|
|
40
40
|
Use tokens in component CSS. Avoid scattering literal colors outside the token block unless a one-off asset or data visualization genuinely requires it.
|
|
41
41
|
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# download-fonts.sh — 把卡片用字体下载到 skill 本地 assets/fonts/,并生成 fonts.css。
|
|
3
|
+
#
|
|
4
|
+
# 设计:
|
|
5
|
+
# - 全部为 OFL / ITF Free Font License,可内嵌打包分发。
|
|
6
|
+
# - woff2 优先;fontsource 可变字体单轴覆盖全字重,体积最小。
|
|
7
|
+
# - 幂等:已存在则跳过;--force 重新下载。
|
|
8
|
+
# - 零额外依赖:只用 curl + python3 标准库。
|
|
9
|
+
# - 非 OFL 字体(HarmonyOS / 阿里普惠 / 京華老宋)不在此下载,授权不允许随仓库再分发;
|
|
10
|
+
# 这些在 references/fonts.md 里仅作「系统字体回退」选项,不内嵌。
|
|
11
|
+
#
|
|
12
|
+
# 用法:
|
|
13
|
+
# bash scripts/download-fonts.sh # 下载缺失字体
|
|
14
|
+
# bash scripts/download-fonts.sh --force # 全部重新下载
|
|
15
|
+
#
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
18
|
+
FORCE="${1:-}"
|
|
19
|
+
|
|
20
|
+
python3 - "$HERE" "$FORCE" <<'PY'
|
|
21
|
+
import sys, os, re, json, urllib.request, urllib.error
|
|
22
|
+
|
|
23
|
+
ROOT, FORCE = sys.argv[1], (len(sys.argv) > 2 and sys.argv[2] == "--force")
|
|
24
|
+
OUT = os.path.join(ROOT, "assets", "fonts")
|
|
25
|
+
UA = {"User-Agent": "Mozilla/5.0 (font-fetch; voxflow-card)"}
|
|
26
|
+
|
|
27
|
+
def get(url, binary=False, tries=3):
|
|
28
|
+
last = None
|
|
29
|
+
for _ in range(tries):
|
|
30
|
+
try:
|
|
31
|
+
req = urllib.request.Request(url, headers=UA)
|
|
32
|
+
with urllib.request.urlopen(req, timeout=40) as r:
|
|
33
|
+
return r.read() if binary else r.read().decode("utf-8", "replace")
|
|
34
|
+
except Exception as e: # noqa
|
|
35
|
+
last = e
|
|
36
|
+
raise last
|
|
37
|
+
|
|
38
|
+
def save(path, data):
|
|
39
|
+
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
40
|
+
mode = "wb" if isinstance(data, (bytes, bytearray)) else "w"
|
|
41
|
+
with open(path, mode) as f:
|
|
42
|
+
f.write(data)
|
|
43
|
+
|
|
44
|
+
def need(path):
|
|
45
|
+
return FORCE or not os.path.exists(path) or os.path.getsize(path) == 0
|
|
46
|
+
|
|
47
|
+
# fontsource 包:拉 index.css,把 'Xxx Variable' 家族名改回 'Xxx',再下所有引用的 woff2。
|
|
48
|
+
# (dir, jsdelivr_pkg, css_path, family_variable, family_final)
|
|
49
|
+
FONTSOURCE = [
|
|
50
|
+
("geist", "@fontsource-variable/geist@latest", "index.css", "Geist Variable", "Geist"),
|
|
51
|
+
("geist-mono", "@fontsource-variable/geist-mono@latest", "index.css", "Geist Mono Variable", "Geist Mono"),
|
|
52
|
+
("space-grotesk", "@fontsource-variable/space-grotesk@latest", "index.css", "Space Grotesk Variable", "Space Grotesk"),
|
|
53
|
+
("newsreader", "@fontsource-variable/newsreader@latest", "index.css", "Newsreader Variable", "Newsreader"),
|
|
54
|
+
("source-serif-4", "@fontsource-variable/source-serif-4@latest","index.css", "Source Serif 4 Variable", "Source Serif 4"),
|
|
55
|
+
("spectral", "@fontsource/spectral@latest", "400.css", "Spectral", "Spectral"),
|
|
56
|
+
("spectral-600", "@fontsource/spectral@latest", "600.css", "Spectral", "Spectral"),
|
|
57
|
+
("spectral-800", "@fontsource/spectral@latest", "800.css", "Spectral", "Spectral"),
|
|
58
|
+
("ibm-plex-mono", "@fontsource/ibm-plex-mono@latest", "400.css", "IBM Plex Mono", "IBM Plex Mono"),
|
|
59
|
+
("ibm-plex-mono-500", "@fontsource/ibm-plex-mono@latest", "500.css", "IBM Plex Mono", "IBM Plex Mono"),
|
|
60
|
+
("ibm-plex-mono-600", "@fontsource/ibm-plex-mono@latest", "600.css", "IBM Plex Mono", "IBM Plex Mono"),
|
|
61
|
+
("libre-caslon-display", "@fontsource/libre-caslon-display@latest", "400.css", "Libre Caslon Display", "Libre Caslon Display"),
|
|
62
|
+
("noto-sans-sc", "@fontsource-variable/noto-sans-sc@latest", "index.css", "Noto Sans SC Variable", "Noto Sans SC"),
|
|
63
|
+
("noto-serif-sc", "@fontsource-variable/noto-serif-sc@latest", "index.css", "Noto Serif SC Variable", "Noto Serif SC"),
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
# 嵌套 @import 的整包(lxgw lite / 得意黑):递归抓 css 与 woff2,保持相对结构。
|
|
67
|
+
# rename: 把包内声明的 family 归一到 fonts.md 用的名字(最长匹配优先)。
|
|
68
|
+
# 第4位 keep:仅保留入口 css 中 @import 文件名命中这些子串的变体(None=全留)。
|
|
69
|
+
# 霞鹜文楷瘦身:只留 regular + bold 普通体,丢弃 light 与全部 mono 变体。
|
|
70
|
+
PACKAGED = [
|
|
71
|
+
("lxgw-wenkai", "https://cdn.jsdelivr.net/npm/lxgw-wenkai-lite-webfont/style.css",
|
|
72
|
+
[("LXGW WenKai Lite", "LXGW WenKai")],
|
|
73
|
+
["lxgwwenkailite-regular", "lxgwwenkailite-bold"]),
|
|
74
|
+
("smiley-sans", "https://cdn.jsdelivr.net/npm/cn-fontsource-smiley-sans-oblique-regular/font.css",
|
|
75
|
+
[], None),
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
# Fontshare(ITF-FFL,可变 woff2,单文件/家族)。
|
|
79
|
+
FONTSHARE = [
|
|
80
|
+
("satoshi", "Satoshi"),
|
|
81
|
+
("general-sans", "General Sans"),
|
|
82
|
+
("cabinet-grotesk", "Cabinet Grotesk"),
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
report = []
|
|
86
|
+
|
|
87
|
+
def do_fontsource(dirn, pkg, csspath, famv, famf):
|
|
88
|
+
base = f"https://cdn.jsdelivr.net/npm/{pkg}/{csspath}"
|
|
89
|
+
dst_css = os.path.join(OUT, "css", dirn + ".css")
|
|
90
|
+
if need(dst_css):
|
|
91
|
+
css = get(base)
|
|
92
|
+
# 家族名归一:'Xxx Variable' -> 'Xxx'
|
|
93
|
+
css = css.replace(f"'{famv}'", f"'{famf}'").replace(f'"{famv}"', f'"{famf}"')
|
|
94
|
+
# 把 url(./files/x.woff2) 改为指向集中 woff2 目录
|
|
95
|
+
css = re.sub(r"url\(\.?/?(?:files/)?([^)]+\.woff2)\)",
|
|
96
|
+
lambda m: f"url(../woff2/{dirn}/{os.path.basename(m.group(1))})", css)
|
|
97
|
+
save(dst_css, css)
|
|
98
|
+
files = re.findall(r"url\(\.\./woff2/%s/([^)]+\.woff2)\)" % re.escape(dirn),
|
|
99
|
+
open(dst_css).read())
|
|
100
|
+
n = 0
|
|
101
|
+
for fn in sorted(set(files)):
|
|
102
|
+
dst = os.path.join(OUT, "woff2", dirn, fn)
|
|
103
|
+
if need(dst):
|
|
104
|
+
save(dst, get(f"https://cdn.jsdelivr.net/npm/{pkg}/files/{fn}", binary=True))
|
|
105
|
+
n += 1
|
|
106
|
+
sz = dir_size(os.path.join(OUT, "woff2", dirn))
|
|
107
|
+
report.append((famf, dirn, len(set(files)), sz, "OFL/ITF" ))
|
|
108
|
+
print(f" fontsource {famf:<22} files={len(set(files)):<3} new={n:<3} {human(sz)}")
|
|
109
|
+
|
|
110
|
+
def do_packaged(dirn, top, rename, keep):
|
|
111
|
+
# 递归:解析 @import 与 url() 的 woff2/css,全部镜像到 packages/<dirn>/
|
|
112
|
+
root = os.path.join(OUT, "packages", dirn)
|
|
113
|
+
entry = os.path.basename(top)
|
|
114
|
+
seen = set()
|
|
115
|
+
csspaths = []
|
|
116
|
+
def fetch(url, rel):
|
|
117
|
+
if rel in seen:
|
|
118
|
+
return
|
|
119
|
+
seen.add(rel)
|
|
120
|
+
dst = os.path.join(root, rel)
|
|
121
|
+
is_css = rel.endswith(".css")
|
|
122
|
+
if need(dst):
|
|
123
|
+
save(dst, get(url, binary=not is_css))
|
|
124
|
+
if is_css:
|
|
125
|
+
txt = open(dst, encoding="utf-8", errors="replace").read()
|
|
126
|
+
# 入口 css 瘦身:仅保留命中 keep 的 @import 行,重写文件
|
|
127
|
+
if keep and rel == entry:
|
|
128
|
+
kept = [ln for ln in txt.splitlines()
|
|
129
|
+
if "@import" not in ln or any(k in ln for k in keep)]
|
|
130
|
+
txt = "\n".join(kept) + "\n"
|
|
131
|
+
save(dst, txt)
|
|
132
|
+
csspaths.append(dst)
|
|
133
|
+
base = url.rsplit("/", 1)[0]
|
|
134
|
+
for ref in re.findall(r"@import url\(['\"]?\.?/?([^'\")]+)['\"]?\)", txt) + \
|
|
135
|
+
re.findall(r"url\(['\"]?\.?/?([^'\")]+\.woff2)['\"]?\)", txt):
|
|
136
|
+
child_rel = os.path.normpath(os.path.join(os.path.dirname(rel), ref))
|
|
137
|
+
fetch(base + "/" + ref, child_rel)
|
|
138
|
+
fetch(top, entry)
|
|
139
|
+
# family 归一:每次运行都重跑,幂等(最长匹配先替换)
|
|
140
|
+
for cp in csspaths:
|
|
141
|
+
t = open(cp, encoding="utf-8", errors="replace").read()
|
|
142
|
+
orig = t
|
|
143
|
+
for old, new in rename:
|
|
144
|
+
t = t.replace("'%s'" % old, "'%s'" % new).replace('"%s"' % old, '"%s"' % new)
|
|
145
|
+
if t != orig:
|
|
146
|
+
save(cp, t)
|
|
147
|
+
sz = dir_size(root)
|
|
148
|
+
report.append((dirn, "packages/" + dirn, sum(1 for _ in walk_woff2(root)), sz, "OFL"))
|
|
149
|
+
print(f" packaged {dirn:<22} entry={os.path.basename(top):<14} {human(sz)}")
|
|
150
|
+
|
|
151
|
+
def do_fontshare(slug, family):
|
|
152
|
+
css = get(f"https://api.fontshare.com/v2/css?f[]={slug}@1&display=swap")
|
|
153
|
+
m = re.search(r"src:\s*url\(['\"]?(//[^'\")]+\.woff2)", css)
|
|
154
|
+
wr = re.search(r"font-weight:\s*([0-9]+\s+[0-9]+|[0-9]+)", css)
|
|
155
|
+
if not m:
|
|
156
|
+
print(f" fontshare {family:<22} SKIP (no woff2 in css)")
|
|
157
|
+
report.append((family, "fontshare/" + slug, 0, 0, "ITF-FFL (missing)"))
|
|
158
|
+
return
|
|
159
|
+
woff2_url = "https:" + m.group(1)
|
|
160
|
+
weight = wr.group(1) if wr else "400 900"
|
|
161
|
+
dst = os.path.join(OUT, "woff2", "fontshare", slug + ".woff2")
|
|
162
|
+
if need(dst):
|
|
163
|
+
save(dst, get(woff2_url, binary=True))
|
|
164
|
+
face = (f"/* {family} — Fontshare, ITF Free Font License */\n"
|
|
165
|
+
f"@font-face{{font-family:'{family}';font-style:normal;font-display:swap;"
|
|
166
|
+
f"font-weight:{weight};src:url(../woff2/fontshare/{slug}.woff2) format('woff2');}}\n")
|
|
167
|
+
save(os.path.join(OUT, "css", slug + ".css"), face)
|
|
168
|
+
sz = os.path.getsize(dst)
|
|
169
|
+
report.append((family, "fontshare/" + slug, 1, sz, "ITF-FFL"))
|
|
170
|
+
print(f" fontshare {family:<22} weight={weight:<9} {human(sz)}")
|
|
171
|
+
|
|
172
|
+
def walk_woff2(root):
|
|
173
|
+
for dp, _, fs in os.walk(root):
|
|
174
|
+
for f in fs:
|
|
175
|
+
if f.endswith(".woff2"):
|
|
176
|
+
yield os.path.join(dp, f)
|
|
177
|
+
|
|
178
|
+
def dir_size(p):
|
|
179
|
+
return sum(os.path.getsize(os.path.join(dp, f))
|
|
180
|
+
for dp, _, fs in os.walk(p) for f in fs) if os.path.isdir(p) else 0
|
|
181
|
+
|
|
182
|
+
def human(n):
|
|
183
|
+
for u in ("B", "KB", "MB"):
|
|
184
|
+
if n < 1024:
|
|
185
|
+
return f"{n:.0f}{u}"
|
|
186
|
+
n /= 1024
|
|
187
|
+
return f"{n:.1f}GB"
|
|
188
|
+
|
|
189
|
+
print("→ fontsource (Latin VF + 思源黑/宋 分包):")
|
|
190
|
+
for a in FONTSOURCE:
|
|
191
|
+
try:
|
|
192
|
+
do_fontsource(*a)
|
|
193
|
+
except Exception as e: # noqa
|
|
194
|
+
print(f" ! {a[4]} FAILED: {e}")
|
|
195
|
+
|
|
196
|
+
print("→ packaged (霞鹜文楷 Lite / 得意黑):")
|
|
197
|
+
for a in PACKAGED:
|
|
198
|
+
try:
|
|
199
|
+
do_packaged(*a)
|
|
200
|
+
except Exception as e: # noqa
|
|
201
|
+
print(f" ! {a[0]} FAILED: {e}")
|
|
202
|
+
|
|
203
|
+
print("→ fontshare (Satoshi / General Sans / Cabinet Grotesk):")
|
|
204
|
+
for a in FONTSHARE:
|
|
205
|
+
try:
|
|
206
|
+
do_fontshare(*a)
|
|
207
|
+
except Exception as e: # noqa
|
|
208
|
+
print(f" ! {a[1]} FAILED: {e}")
|
|
209
|
+
|
|
210
|
+
# 组装 master fonts.css
|
|
211
|
+
imports = []
|
|
212
|
+
for a in FONTSOURCE:
|
|
213
|
+
imports.append(f'@import url("./css/{a[0]}.css");')
|
|
214
|
+
for slug, _ in FONTSHARE:
|
|
215
|
+
imports.append(f'@import url("./css/{slug}.css");')
|
|
216
|
+
for dirn, top, _, _ in PACKAGED:
|
|
217
|
+
imports.append(f'@import url("./packages/{dirn}/{os.path.basename(top)}");')
|
|
218
|
+
|
|
219
|
+
master = "/* fonts.css — 本地内嵌字体(download-fonts.sh 生成,勿手改)\n" \
|
|
220
|
+
" 规则与主题映射见 ../../references/fonts.md。\n" \
|
|
221
|
+
" 家族名:Geist / Geist Mono / Space Grotesk / Newsreader / Source Serif 4 /\n" \
|
|
222
|
+
" Spectral / IBM Plex Mono / Libre Caslon Display / Satoshi / General Sans /\n" \
|
|
223
|
+
" Cabinet Grotesk / Noto Sans SC / Noto Serif SC / LXGW WenKai* / Smiley Sans Oblique */\n\n" \
|
|
224
|
+
+ "\n".join(imports) + "\n"
|
|
225
|
+
save(os.path.join(OUT, "fonts.css"), master)
|
|
226
|
+
|
|
227
|
+
total = dir_size(OUT)
|
|
228
|
+
lines = ["# Font bundle manifest (download-fonts.sh)", "",
|
|
229
|
+
"| family | path | files | size | license |",
|
|
230
|
+
"|---|---|---|---|---|"]
|
|
231
|
+
for fam, path, nf, sz, lic in report:
|
|
232
|
+
lines.append(f"| {fam} | {path} | {nf} | {human(sz)} | {lic} |")
|
|
233
|
+
lines += ["", f"**Total bundle: {human(total)}**", "",
|
|
234
|
+
"Not bundled (license forbids repo redistribution; system-font fallback only):",
|
|
235
|
+
"HarmonyOS Sans SC, Alibaba PuHuiTi 3.0, KingHwa OldSong, Zhuque Fangsong, Sarasa Mono SC.",
|
|
236
|
+
"Sarasa Mono SC / Zhuque Fangsong are OFL but lack a clean woff2 source; add manually if needed."]
|
|
237
|
+
save(os.path.join(OUT, "MANIFEST.md"), "\n".join(lines) + "\n")
|
|
238
|
+
|
|
239
|
+
print(f"\n✓ fonts.css + MANIFEST.md written. Total bundle: {human(total)}")
|
|
240
|
+
PY
|
|
@@ -177,6 +177,9 @@ async function main() {
|
|
|
177
177
|
});
|
|
178
178
|
|
|
179
179
|
await page.goto(pathToFileURL(file).href, { waitUntil: 'load' });
|
|
180
|
+
// Wait for locally embedded fonts to finish loading before screenshotting,
|
|
181
|
+
// otherwise the capture can show fallback glyphs / font swap.
|
|
182
|
+
await page.evaluate(() => document.fonts && document.fonts.ready).catch(() => {});
|
|
180
183
|
await page.waitForTimeout(Number(args.wait));
|
|
181
184
|
|
|
182
185
|
const handle = await page.$(args.selector);
|