voxflow 1.15.6 → 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/README.md +2 -2
- 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/commands/skills.js +3 -3
- package/lib/commands/slice-fork.js +4 -4
- package/lib/commands/slice.js +1 -1
- package/lib/core/ffmpeg.js +74 -11
- package/package.json +5 -2
- package/skills/.claude-plugin/marketplace.json +2 -2
- package/skills/.claude-plugin/plugin.json +3 -2
- package/skills/README.md +9 -7
- package/skills/card/SKILL.md +486 -0
- 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/cinematic-still.md +57 -0
- package/skills/card/references/design-languages/data-poster.md +57 -0
- package/skills/card/references/design-languages/editorial-artifact.md +58 -0
- package/skills/card/references/design-languages/field-notes.md +58 -0
- package/skills/card/references/design-languages/image-led-magazine.md +57 -0
- package/skills/card/references/design-languages/newsroom-poster.md +58 -0
- package/skills/card/references/design-languages/product-catalog.md +57 -0
- package/skills/card/references/design-languages/swiss-poster.md +60 -0
- package/skills/card/references/design-languages.md +168 -0
- package/skills/card/references/fonts-preview.html +450 -0
- package/skills/card/references/fonts.md +151 -0
- package/skills/card/references/layouts/card-layouts.md +268 -0
- package/skills/card/references/magazine-card-adaptations.md +154 -0
- package/skills/card/references/taste.md +121 -0
- package/skills/card/references/themes/presets.md +314 -0
- package/skills/card/scripts/download-fonts.sh +240 -0
- package/skills/card/scripts/render-cards.mjs +219 -0
- package/skills/voxflow-slice/SKILL.md +0 -415
- package/skills/voxflow-slice/examples/article.md +0 -13
- package/skills/voxflow-slice/examples/expected-deck.json +0 -39
- package/skills/voxflow-slice/examples/validate.mjs +0 -46
- /package/skills/{voxflow-slice → slice}/templates/data-finding/deck.json +0 -0
- /package/skills/{voxflow-slice → slice}/templates/founder-lesson/deck.json +0 -0
- /package/skills/{voxflow-slice → slice}/templates/incident-review/deck.json +0 -0
- /package/skills/{voxflow-slice → slice}/templates/manifest.json +0 -0
- /package/skills/{voxflow-slice → slice}/templates/product-launch/deck.json +0 -0
- /package/skills/{voxflow-slice → slice}/templates/quiet-essay/deck.json +0 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>卡片字体预览 · VoxFlow card</title>
|
|
7
|
+
|
|
8
|
+
<!-- 全本地内嵌字体(由 scripts/download-fonts.sh 下载生成,零 CDN/外链) -->
|
|
9
|
+
<link href="../assets/fonts/fonts.css" rel="stylesheet">
|
|
10
|
+
|
|
11
|
+
<style>
|
|
12
|
+
:root{
|
|
13
|
+
--bg:#f3efe7; --panel:#fbf9f4; --ink:#211c16; --ink-2:#5c544a;
|
|
14
|
+
--ink-3:#8a8073; --line:rgba(33,28,22,.14); --accent:#8a5a32;
|
|
15
|
+
--ok:#3f7d54; --miss:#b2603a;
|
|
16
|
+
}
|
|
17
|
+
*{box-sizing:border-box}
|
|
18
|
+
html,body{margin:0}
|
|
19
|
+
body{
|
|
20
|
+
background:var(--bg); color:var(--ink);
|
|
21
|
+
font-family:"Geist","Noto Sans SC",system-ui,sans-serif;
|
|
22
|
+
line-height:1.6; -webkit-font-smoothing:antialiased;
|
|
23
|
+
padding:48px clamp(16px,5vw,72px) 96px;
|
|
24
|
+
}
|
|
25
|
+
a{color:var(--accent)}
|
|
26
|
+
header.page{max-width:1180px;margin:0 auto 40px}
|
|
27
|
+
h1{font-family:"Newsreader",serif;font-weight:700;font-size:34px;margin:0 0 6px;letter-spacing:0}
|
|
28
|
+
.sub{color:var(--ink-2);font-size:15px;margin:0 0 18px;max-width:760px}
|
|
29
|
+
.legend{display:flex;flex-wrap:wrap;gap:14px;font-size:12.5px;color:var(--ink-2);
|
|
30
|
+
border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:12px 16px}
|
|
31
|
+
.legend b{color:var(--ink)}
|
|
32
|
+
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;vertical-align:middle;margin-right:6px}
|
|
33
|
+
.dot.ok{background:var(--ok)} .dot.miss{background:var(--miss)} .dot.wait{background:var(--ink-3)}
|
|
34
|
+
.wrap{max-width:1180px;margin:0 auto}
|
|
35
|
+
h2.section{font-family:"Newsreader",serif;font-weight:700;font-size:23px;
|
|
36
|
+
margin:54px 0 6px;padding-top:20px;border-top:1px solid var(--line)}
|
|
37
|
+
h2.section span{font-family:"Geist Mono",monospace;font-size:12px;color:var(--ink-3);font-weight:400}
|
|
38
|
+
h3.role{font-family:"Geist Mono",monospace;font-size:12px;letter-spacing:.04em;
|
|
39
|
+
text-transform:uppercase;color:var(--accent);margin:30px 0 12px}
|
|
40
|
+
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:16px}
|
|
41
|
+
.spec{background:var(--panel);border:1px solid var(--line);border-radius:14px;
|
|
42
|
+
padding:20px 22px;overflow:hidden}
|
|
43
|
+
.spec .top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:4px}
|
|
44
|
+
.spec .name{font-weight:600;font-size:16px}
|
|
45
|
+
.spec .meta{font-family:"Geist Mono",monospace;font-size:11px;color:var(--ink-3);
|
|
46
|
+
margin:2px 0 16px;letter-spacing:0}
|
|
47
|
+
.badge{font-family:"Geist Mono",monospace;font-size:10px;padding:3px 7px;border-radius:999px;
|
|
48
|
+
border:1px solid var(--line);color:var(--ink-2);white-space:nowrap}
|
|
49
|
+
.badge.cdn{color:var(--ok);border-color:rgba(63,125,84,.4)}
|
|
50
|
+
.badge.local{color:var(--miss);border-color:rgba(178,96,58,.4)}
|
|
51
|
+
.status{font-family:"Geist Mono",monospace;font-size:11px;color:var(--ink-3);margin-top:14px}
|
|
52
|
+
.big{font-size:38px;line-height:1.15;margin:2px 0 10px;letter-spacing:0}
|
|
53
|
+
.para{font-size:15px;color:var(--ink-2);margin:0 0 8px}
|
|
54
|
+
.num{font-size:22px;letter-spacing:.01em;color:var(--ink);margin:6px 0 0;
|
|
55
|
+
font-variant-numeric:tabular-nums}
|
|
56
|
+
.wts{font-size:13px;color:var(--ink-3);margin-top:8px}
|
|
57
|
+
.wts span{margin-right:14px}
|
|
58
|
+
/* 主题搭配卡 */
|
|
59
|
+
.pairs{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:18px}
|
|
60
|
+
.pcard{border-radius:16px;padding:30px 30px 26px;border:1px solid rgba(0,0,0,.10);
|
|
61
|
+
min-height:230px;display:flex;flex-direction:column;position:relative;overflow:hidden}
|
|
62
|
+
.pcard .pk{font-family:"Geist Mono",monospace;font-size:11px;opacity:.62;letter-spacing:.03em;margin-bottom:auto}
|
|
63
|
+
.pcard .ph{font-size:33px;line-height:1.12;margin:0 0 12px}
|
|
64
|
+
.pcard .pp{font-size:14.5px;line-height:1.55;opacity:.82;margin:0 0 16px}
|
|
65
|
+
.pcard .pf{font-size:11px;letter-spacing:.02em;opacity:.6;display:flex;justify-content:space-between;gap:10px}
|
|
66
|
+
.foot{max-width:1180px;margin:60px auto 0;font-size:12.5px;color:var(--ink-3);
|
|
67
|
+
border-top:1px solid var(--line);padding-top:18px;line-height:1.7}
|
|
68
|
+
</style>
|
|
69
|
+
</head>
|
|
70
|
+
<body>
|
|
71
|
+
|
|
72
|
+
<header class="page">
|
|
73
|
+
<h1>卡片字体预览</h1>
|
|
74
|
+
<p class="sub">
|
|
75
|
+
VoxFlow card 技能的字体目录与主题搭配可视化。规则见
|
|
76
|
+
<code>references/fonts.md</code>。全部字体<strong>本地内嵌</strong>(<code>scripts/download-fonts.sh</code>
|
|
77
|
+
下载到 <code>assets/fonts/</code>),零 CDN/外链,与最终卡片导出完全一致。
|
|
78
|
+
</p>
|
|
79
|
+
<div class="legend">
|
|
80
|
+
<span><span class="dot ok"></span><b>内嵌</b> 已打包进 assets/fonts/,本地加载</span>
|
|
81
|
+
<span><span class="dot miss"></span><b>未内嵌</b> 授权/源限制未打包,仅本机已装时显示,否则回退已内嵌字体</span>
|
|
82
|
+
<span><span class="dot wait"></span>检测中…</span>
|
|
83
|
+
<span style="color:var(--ink-3)">每张卡右下角实时显示该字体是否真的加载成功</span>
|
|
84
|
+
</div>
|
|
85
|
+
</header>
|
|
86
|
+
|
|
87
|
+
<div class="wrap">
|
|
88
|
+
|
|
89
|
+
<!-- ============ 英文 ============ -->
|
|
90
|
+
<h2 class="section">英文 / 拉丁字体 · 10 款 <span>全部 OFL / ITF-FFL,可内嵌打包</span></h2>
|
|
91
|
+
|
|
92
|
+
<h3 class="role">无衬线 · 正文与 UI</h3>
|
|
93
|
+
<div class="grid">
|
|
94
|
+
<div class="spec" data-f="Geist">
|
|
95
|
+
<div class="top"><span class="name">Geist</span><span class="badge cdn">内嵌</span></div>
|
|
96
|
+
<div class="meta">geometric sans · OFL · variable 100–900 · 替代 Inter 首选</div>
|
|
97
|
+
<div class="big" style="font-family:'Geist';font-weight:700">Designed for clarity</div>
|
|
98
|
+
<p class="para" style="font-family:'Geist'">The quick brown fox jumps over the lazy dog. 中性几何,克制呼吸。</p>
|
|
99
|
+
<div class="num" style="font-family:'Geist'">0123456789 · $1,280 · 99.7%</div>
|
|
100
|
+
<div class="wts"><span style="font-family:Geist;font-weight:400">Regular</span><span style="font-family:Geist;font-weight:500">Medium</span><span style="font-family:Geist;font-weight:700">Bold</span><span style="font-family:Geist;font-weight:900">Black</span></div>
|
|
101
|
+
<div class="status" data-status>检测中…</div>
|
|
102
|
+
</div>
|
|
103
|
+
<div class="spec" data-f="Satoshi">
|
|
104
|
+
<div class="top"><span class="name">Satoshi</span><span class="badge cdn">内嵌</span></div>
|
|
105
|
+
<div class="meta">geometric sans · ITF-FFL · variable 300–900 · 社媒主力</div>
|
|
106
|
+
<div class="big" style="font-family:'Satoshi';font-weight:700">Sharp yet friendly</div>
|
|
107
|
+
<p class="para" style="font-family:'Satoshi'">The quick brown fox jumps over the lazy dog. 圆润骨架,锐利切角。</p>
|
|
108
|
+
<div class="num" style="font-family:'Satoshi'">0123456789 · $1,280 · 99.7%</div>
|
|
109
|
+
<div class="wts"><span style="font-family:Satoshi;font-weight:400">Regular</span><span style="font-family:Satoshi;font-weight:500">Medium</span><span style="font-family:Satoshi;font-weight:700">Bold</span><span style="font-family:Satoshi;font-weight:900">Black</span></div>
|
|
110
|
+
<div class="status" data-status>检测中…</div>
|
|
111
|
+
</div>
|
|
112
|
+
<div class="spec" data-f="General Sans">
|
|
113
|
+
<div class="top"><span class="name">General Sans</span><span class="badge cdn">内嵌</span></div>
|
|
114
|
+
<div class="meta">humanist sans · ITF-FFL · variable 200–700 · 编辑长文正文</div>
|
|
115
|
+
<div class="big" style="font-family:'General Sans';font-weight:600">A quiet humanist</div>
|
|
116
|
+
<p class="para" style="font-family:'General Sans'">The quick brown fox jumps over the lazy dog. 人文比例,长文友好。</p>
|
|
117
|
+
<div class="num" style="font-family:'General Sans'">0123456789 · $1,280 · 99.7%</div>
|
|
118
|
+
<div class="wts"><span style="font-family:'General Sans';font-weight:400">Regular</span><span style="font-family:'General Sans';font-weight:600">Semibold</span><span style="font-family:'General Sans';font-weight:700">Bold</span></div>
|
|
119
|
+
<div class="status" data-status>检测中…</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<h3 class="role">grotesque / 克制展示 · 封面标题</h3>
|
|
124
|
+
<div class="grid">
|
|
125
|
+
<div class="spec" data-f="Space Grotesk">
|
|
126
|
+
<div class="top"><span class="name">Space Grotesk</span><span class="badge cdn">内嵌</span></div>
|
|
127
|
+
<div class="meta">grotesque · OFL · variable 300–700 · 技术/海报封面</div>
|
|
128
|
+
<div class="big" style="font-family:'Space Grotesk';font-weight:700">SYSTEM DESIGN</div>
|
|
129
|
+
<p class="para" style="font-family:'Space Grotesk'">The quick brown fox jumps over the lazy dog. 工程味瑞士气质。</p>
|
|
130
|
+
<div class="num" style="font-family:'Space Grotesk'">0123456789 · $1,280 · 99.7%</div>
|
|
131
|
+
<div class="status" data-status>检测中…</div>
|
|
132
|
+
</div>
|
|
133
|
+
<div class="spec" data-f="Cabinet Grotesk">
|
|
134
|
+
<div class="top"><span class="name">Cabinet Grotesk</span><span class="badge cdn">内嵌</span></div>
|
|
135
|
+
<div class="meta">display restrained · ITF-FFL · variable 100–800 · 杂志封面大标题</div>
|
|
136
|
+
<div class="big" style="font-family:'Cabinet Grotesk';font-weight:800">Magazine cover</div>
|
|
137
|
+
<p class="para" style="font-family:'Cabinet Grotesk';font-weight:500">The quick brown fox jumps over the lazy dog. 复古骨架,柔化终端。</p>
|
|
138
|
+
<div class="num" style="font-family:'Cabinet Grotesk'">0123456789 · $1,280 · 99.7%</div>
|
|
139
|
+
<div class="status" data-status>检测中…</div>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
|
|
143
|
+
<h3 class="role">衬线 · 标题 / 引用 / 长文</h3>
|
|
144
|
+
<div class="grid">
|
|
145
|
+
<div class="spec" data-f="Newsreader">
|
|
146
|
+
<div class="top"><span class="name">Newsreader</span><span class="badge cdn">内嵌</span></div>
|
|
147
|
+
<div class="meta">serif editorial · OFL · variable + 光学轴 + 真斜体</div>
|
|
148
|
+
<div class="big" style="font-family:'Newsreader';font-weight:700">The Reading Press</div>
|
|
149
|
+
<p class="para" style="font-family:'Newsreader'">The quick brown fox jumps over the lazy dog. <em style="font-style:italic">报刊阅读衬线,真斜体。</em></p>
|
|
150
|
+
<div class="num" style="font-family:'Newsreader'">0123456789 · $1,280 · 99.7%</div>
|
|
151
|
+
<div class="status" data-status>检测中…</div>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="spec" data-f="Source Serif 4">
|
|
154
|
+
<div class="top"><span class="name">Source Serif 4</span><span class="badge cdn">内嵌</span></div>
|
|
155
|
+
<div class="meta">serif text · OFL · variable 200–900 + 光学轴 · 报告长文</div>
|
|
156
|
+
<div class="big" style="font-family:'Source Serif 4';font-weight:700">A measured serif</div>
|
|
157
|
+
<p class="para" style="font-family:'Source Serif 4'">The quick brown fox jumps over the lazy dog. 过渡衬线,理性中性。</p>
|
|
158
|
+
<div class="num" style="font-family:'Source Serif 4'">0123456789 · $1,280 · 99.7%</div>
|
|
159
|
+
<div class="status" data-status>检测中…</div>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="spec" data-f="Spectral">
|
|
162
|
+
<div class="top"><span class="name">Spectral</span><span class="badge cdn">内嵌</span></div>
|
|
163
|
+
<div class="meta">serif text · OFL · 静态 7 字重 · 编辑/field notes 正文</div>
|
|
164
|
+
<div class="big" style="font-family:'Spectral';font-weight:800">Long-form reading</div>
|
|
165
|
+
<p class="para" style="font-family:'Spectral'">The quick brown fox jumps over the lazy dog. 低对比温润屏读衬线。</p>
|
|
166
|
+
<div class="num" style="font-family:'Spectral'">0123456789 · $1,280 · 99.7%</div>
|
|
167
|
+
<div class="status" data-status>检测中…</div>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="spec" data-f="Libre Caslon Display">
|
|
170
|
+
<div class="top"><span class="name">Libre Caslon Display</span><span class="badge cdn">内嵌</span></div>
|
|
171
|
+
<div class="meta">serif display · OFL · 候补封面衬线 · 古典优雅</div>
|
|
172
|
+
<div class="big" style="font-family:'Libre Caslon Display'">Classic Caslon</div>
|
|
173
|
+
<p class="para" style="font-family:'Libre Caslon Display'">The quick brown fox jumps over the lazy dog.</p>
|
|
174
|
+
<div class="num" style="font-family:'Libre Caslon Display'">0123456789 · $1,280 · 99.7%</div>
|
|
175
|
+
<div class="status" data-status>检测中…</div>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<h3 class="role">等宽 · 数据 / 元信息</h3>
|
|
180
|
+
<div class="grid">
|
|
181
|
+
<div class="spec" data-f="Geist Mono">
|
|
182
|
+
<div class="top"><span class="name">Geist Mono</span><span class="badge cdn">内嵌</span></div>
|
|
183
|
+
<div class="meta">mono · OFL · variable 100–900 · 与 Geist 配对</div>
|
|
184
|
+
<div class="big" style="font-family:'Geist Mono';font-weight:700">build/01 → ok</div>
|
|
185
|
+
<p class="para" style="font-family:'Geist Mono'">const fox = "jumps"; // 纯几何中性等宽</p>
|
|
186
|
+
<div class="num" style="font-family:'Geist Mono'">0123456789 · 99.7% · v2.0.1</div>
|
|
187
|
+
<div class="status" data-status>检测中…</div>
|
|
188
|
+
</div>
|
|
189
|
+
<div class="spec" data-f="IBM Plex Mono">
|
|
190
|
+
<div class="top"><span class="name">IBM Plex Mono</span><span class="badge cdn">内嵌</span></div>
|
|
191
|
+
<div class="meta">mono · OFL · 静态 6 字重 · 数据/元信息</div>
|
|
192
|
+
<div class="big" style="font-family:'IBM Plex Mono';font-weight:600">2026-05-16 14:08</div>
|
|
193
|
+
<p class="para" style="font-family:'IBM Plex Mono'">SELECT * FROM cards; — 企业级中性等宽</p>
|
|
194
|
+
<div class="num" style="font-family:'IBM Plex Mono'">0123456789 · 99.7% · v2.0.1</div>
|
|
195
|
+
<div class="status" data-status>检测中…</div>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<!-- ============ 中文 ============ -->
|
|
200
|
+
<h2 class="section">中文字体 · 10 款 <span>基座 OFL:思源黑 + 思源宋 + 更纱黑 Mono</span></h2>
|
|
201
|
+
|
|
202
|
+
<h3 class="role">黑体 · 正文 / 标题(基座)</h3>
|
|
203
|
+
<div class="grid">
|
|
204
|
+
<div class="spec" data-f="Noto Sans SC">
|
|
205
|
+
<div class="top"><span class="name">思源黑体 Noto Sans SC</span><span class="badge cdn">内嵌</span></div>
|
|
206
|
+
<div class="meta">黑体 · OFL · 7 字重 · 百搭基座 · 正文/副标题/数据</div>
|
|
207
|
+
<div class="big" style="font-family:'Noto Sans SC';font-weight:700">克制即专业</div>
|
|
208
|
+
<p class="para" style="font-family:'Noto Sans SC'">把复杂的内容讲清楚,比把它说得漂亮更重要。中性、无表情的系统级专业感。</p>
|
|
209
|
+
<div class="num" style="font-family:'Noto Sans SC'">月活 1,280 万 · 同比 +37%</div>
|
|
210
|
+
<div class="wts"><span style="font-family:'Noto Sans SC';font-weight:400">常规</span><span style="font-family:'Noto Sans SC';font-weight:500">中黑</span><span style="font-family:'Noto Sans SC';font-weight:700">粗体</span><span style="font-family:'Noto Sans SC';font-weight:900">特黑</span></div>
|
|
211
|
+
<div class="status" data-status>检测中…</div>
|
|
212
|
+
</div>
|
|
213
|
+
<div class="spec" data-f="Noto Sans SC">
|
|
214
|
+
<div class="top"><span class="name">思源黑体 · 强字重做标题</span><span class="badge cdn">内嵌</span></div>
|
|
215
|
+
<div class="meta">同字体多字重建层级 · 优先用这招控体积</div>
|
|
216
|
+
<div class="big" style="font-family:'Noto Sans SC';font-weight:900">为什么是它</div>
|
|
217
|
+
<p class="para" style="font-family:'Noto Sans SC';font-weight:400">900 特黑 + 500 中黑 + 400 常规即可建完整层级,无需引入第二款字体。</p>
|
|
218
|
+
<div class="num" style="font-family:'Noto Sans SC';font-weight:500">2026 Q2 · 数据来源:内部统计</div>
|
|
219
|
+
<div class="status" data-status>检测中…</div>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
<h3 class="role">宋体 · 编辑标题 / 引用</h3>
|
|
224
|
+
<div class="grid">
|
|
225
|
+
<div class="spec" data-f="Noto Serif SC">
|
|
226
|
+
<div class="top"><span class="name">思源宋体 Noto Serif SC</span><span class="badge cdn">内嵌</span></div>
|
|
227
|
+
<div class="meta">宋体 · OFL · 7 字重 · 衬线里最克制最安全</div>
|
|
228
|
+
<div class="big" style="font-family:'Noto Serif SC';font-weight:900">书卷气与理性</div>
|
|
229
|
+
<p class="para" style="font-family:'Noto Serif SC'">庄重、理性、有印刷书卷气。适合编辑标题、引用块与文化类正文。</p>
|
|
230
|
+
<div class="num" style="font-family:'Noto Serif SC';font-weight:700">「一字一句,皆有重量。」</div>
|
|
231
|
+
<div class="wts"><span style="font-family:'Noto Serif SC';font-weight:400">常规</span><span style="font-family:'Noto Serif SC';font-weight:700">粗体</span><span style="font-family:'Noto Serif SC';font-weight:900">特黑</span></div>
|
|
232
|
+
<div class="status" data-status>检测中…</div>
|
|
233
|
+
</div>
|
|
234
|
+
<div class="spec" data-f="Zhuque Fangsong, ZhuqueFangsong">
|
|
235
|
+
<div class="top"><span class="name">朱雀仿宋 Zhuque Fangsong</span><span class="badge local">未内嵌</span></div>
|
|
236
|
+
<div class="meta">仿宋 · OFL · 单字重 · 引用/注释/公文体</div>
|
|
237
|
+
<div class="big" style="font-family:'Zhuque Fangsong','ZhuqueFangsong','Noto Serif SC',serif">清瘦有笔意</div>
|
|
238
|
+
<p class="para" style="font-family:'Zhuque Fangsong','ZhuqueFangsong','Noto Serif SC',serif">公文与文人气并存。注意单字重,不靠它撑标题层级。未安装则回退思源宋。</p>
|
|
239
|
+
<div class="num" style="font-family:'Zhuque Fangsong','ZhuqueFangsong','Noto Serif SC',serif">附注 03 · 引文出处见 sources.md</div>
|
|
240
|
+
<div class="status" data-status>检测中…</div>
|
|
241
|
+
</div>
|
|
242
|
+
<div class="spec" data-f="KingHwa_OldSong, KingHwaOldSong">
|
|
243
|
+
<div class="top"><span class="name">京華老宋体 KingHwa OldSong</span><span class="badge local">未内嵌</span></div>
|
|
244
|
+
<div class="meta">旧宋 · 作者声明免商 · 单字重 · 文化/历史专用</div>
|
|
245
|
+
<div class="big" style="font-family:'KingHwa_OldSong','KingHwaOldSong','Noto Serif SC',serif">旧书铅印味</div>
|
|
246
|
+
<p class="para" style="font-family:'KingHwa_OldSong','KingHwaOldSong','Noto Serif SC',serif">桃形点、鹅头钩、三角肩,温润有年代感。风格指向强,不当通用字。</p>
|
|
247
|
+
<div class="num" style="font-family:'KingHwa_OldSong','KingHwaOldSong','Noto Serif SC',serif">一九六〇年代 · 复刻</div>
|
|
248
|
+
<div class="status" data-status>检测中…</div>
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
<h3 class="role">楷体 · 人文温度</h3>
|
|
253
|
+
<div class="grid">
|
|
254
|
+
<div class="spec" data-f="LXGW WenKai">
|
|
255
|
+
<div class="top"><span class="name">霞鹜文楷 LXGW WenKai</span><span class="badge cdn">内嵌</span></div>
|
|
256
|
+
<div class="meta">楷体 · OFL · 3 字重 · 人文正文/引用/编辑标题</div>
|
|
257
|
+
<div class="big" style="font-family:'LXGW WenKai';font-weight:700">安静的人文气</div>
|
|
258
|
+
<p class="para" style="font-family:'LXGW WenKai'">温润手写楷意但工整,是 field-notes / 编辑气质的最佳人文选项。</p>
|
|
259
|
+
<div class="num" style="font-family:'LXGW WenKai'">读书笔记 · 2026 春</div>
|
|
260
|
+
<div class="wts"><span style="font-family:'LXGW WenKai';font-weight:400">常规 400</span><span style="font-family:'LXGW WenKai';font-weight:700">粗 700</span><span style="color:var(--ink-3)">(瘦身后 light/Mono 已移除)</span></div>
|
|
261
|
+
<div class="status" data-status>检测中…</div>
|
|
262
|
+
</div>
|
|
263
|
+
<div class="spec" data-f="LXGW WenKai Mono, LXGW WenKai Screen">
|
|
264
|
+
<div class="top"><span class="name">霞鹜文楷 Mono</span><span class="badge local">未内嵌</span></div>
|
|
265
|
+
<div class="meta">中文等宽楷 · OFL · 瘦身后已移除,回退普通文楷</div>
|
|
266
|
+
<div class="big" style="font-family:'LXGW WenKai Mono','LXGW WenKai',monospace">等宽亦人文</div>
|
|
267
|
+
<p class="para" style="font-family:'LXGW WenKai Mono','LXGW WenKai',monospace">为控体积未内嵌 Mono 变体;此处回退普通霞鹜文楷。需要可改 download-fonts.sh 的 keep。</p>
|
|
268
|
+
<div class="num" style="font-family:'LXGW WenKai Mono','LXGW WenKai',monospace">2026-05-16 · v1.0</div>
|
|
269
|
+
<div class="status" data-status>检测中…</div>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
|
|
273
|
+
<h3 class="role">等宽 · 技术 / 数据</h3>
|
|
274
|
+
<div class="grid">
|
|
275
|
+
<div class="spec" data-f="Sarasa Mono SC">
|
|
276
|
+
<div class="top"><span class="name">更纱黑体 Mono Sarasa Mono SC</span><span class="badge local">未内嵌</span></div>
|
|
277
|
+
<div class="meta">等宽 · OFL · 多字重 · 中英 2:1 对齐 · 技术必备</div>
|
|
278
|
+
<div class="big" style="font-family:'Sarasa Mono SC','Noto Sans SC',monospace;font-weight:700">代码即文档</div>
|
|
279
|
+
<p class="para" style="font-family:'Sarasa Mono SC','Noto Sans SC',monospace">中文 abc 123 严格对齐。工程审美标杆。未安装则回退思源黑。</p>
|
|
280
|
+
<div class="num" style="font-family:'Sarasa Mono SC','Noto Sans SC',monospace">CPU 12% · MEM 3.4G · 200 OK</div>
|
|
281
|
+
<div class="status" data-status>检测中…</div>
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
|
|
285
|
+
<h3 class="role">展示 · 仅封面单处</h3>
|
|
286
|
+
<div class="grid">
|
|
287
|
+
<div class="spec" data-f="Smiley Sans Oblique">
|
|
288
|
+
<div class="top"><span class="name">得意黑 Smiley Sans</span><span class="badge cdn">内嵌</span></div>
|
|
289
|
+
<div class="meta">展示 · OFL · 单字重(倾斜) · ⚠ 仅封面 ≤1 处</div>
|
|
290
|
+
<div class="big" style="font-family:'Smiley Sans Oblique','Noto Sans SC',sans-serif;font-size:46px">这就是态度</div>
|
|
291
|
+
<p class="para" style="font-family:'Noto Sans SC'">紧凑、倾斜、有冲劲。处在「克制」边界——只做封面大字,多用即浮夸。</p>
|
|
292
|
+
<div class="num" style="font-family:'Smiley Sans Oblique','Noto Sans SC',sans-serif">2026 · 限定</div>
|
|
293
|
+
<div class="status" data-status>检测中…</div>
|
|
294
|
+
</div>
|
|
295
|
+
</div>
|
|
296
|
+
|
|
297
|
+
<h3 class="role">知情备选 · 非 OFL,默认不启用</h3>
|
|
298
|
+
<div class="grid">
|
|
299
|
+
<div class="spec" data-f="HarmonyOS Sans SC">
|
|
300
|
+
<div class="top"><span class="name">HarmonyOS Sans SC</span><span class="badge local">未内嵌</span></div>
|
|
301
|
+
<div class="meta">黑体 · 华为私有免商(禁子集化争议)· 产品科技调</div>
|
|
302
|
+
<div class="big" style="font-family:'HarmonyOS Sans SC','Noto Sans SC',sans-serif;font-weight:700">产品 UI 感</div>
|
|
303
|
+
<p class="para" style="font-family:'HarmonyOS Sans SC','Noto Sans SC',sans-serif">比思源更「产品 UI」。启用须附授权声明、整文件嵌入。未安装回退思源黑。</p>
|
|
304
|
+
<div class="num" style="font-family:'HarmonyOS Sans SC','Noto Sans SC',sans-serif">设备 1,280 · 在线 99.7%</div>
|
|
305
|
+
<div class="status" data-status>检测中…</div>
|
|
306
|
+
</div>
|
|
307
|
+
<div class="spec" data-f="Alibaba PuHuiTi 3.0, AlibabaPuHuiTi-3-55-Regular">
|
|
308
|
+
<div class="top"><span class="name">阿里巴巴普惠体 3.0</span><span class="badge local">未内嵌</span></div>
|
|
309
|
+
<div class="meta">黑体 · 阿里免商 · 9 字重 · 商务/电商换味</div>
|
|
310
|
+
<div class="big" style="font-family:'Alibaba PuHuiTi 3.0','AlibabaPuHuiTi-3-55-Regular','Noto Sans SC',sans-serif;font-weight:700">温和而亲和</div>
|
|
311
|
+
<p class="para" style="font-family:'Alibaba PuHuiTi 3.0','AlibabaPuHuiTi-3-55-Regular','Noto Sans SC',sans-serif">字重最全是优点,授权弱 OFL 一档。未安装回退思源黑。</p>
|
|
312
|
+
<div class="num" style="font-family:'Alibaba PuHuiTi 3.0','AlibabaPuHuiTi-3-55-Regular','Noto Sans SC',sans-serif">GMV ¥12.8 亿 · +37%</div>
|
|
313
|
+
<div class="status" data-status>检测中…</div>
|
|
314
|
+
</div>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<!-- ============ 主题搭配 ============ -->
|
|
318
|
+
<h2 class="section">主题 → 字体搭配预览 <span>真实预设调色板 + 推荐中英搭配</span></h2>
|
|
319
|
+
<div class="pairs">
|
|
320
|
+
|
|
321
|
+
<div class="pcard" style="background:#f1efea;color:#0a0a0b">
|
|
322
|
+
<div class="pk">magazine-eink · 暖纸编辑</div>
|
|
323
|
+
<div class="ph" style="font-family:'Cabinet Grotesk','Noto Serif SC',serif;font-weight:800">从一个想法到一组卡片</div>
|
|
324
|
+
<div class="pp" style="font-family:'General Sans','Noto Sans SC',sans-serif">标题 Cabinet Grotesk / 思源宋 700,正文 General Sans / 思源黑,引用霞鹜文楷。</div>
|
|
325
|
+
<div class="pf" style="font-family:'Geist Mono',monospace"><span>ISSUE 01</span><span>2026.05</span></div>
|
|
326
|
+
</div>
|
|
327
|
+
|
|
328
|
+
<div class="pcard" style="background:#f1f3f5;color:#0a1f3d">
|
|
329
|
+
<div class="pk">porcelain-research · 靛蓝研究</div>
|
|
330
|
+
<div class="ph" style="font-family:'Geist','Noto Sans SC',sans-serif;font-weight:700">检索增强的三个失效点</div>
|
|
331
|
+
<div class="pp" style="font-family:'Source Serif 4','Noto Serif SC',serif">标题 Geist 700 / 思源黑,正文 Source Serif 4 / 思源黑,标注 IBM Plex Mono。</div>
|
|
332
|
+
<div class="pf" style="font-family:'IBM Plex Mono',monospace"><span>RESEARCH</span><span>fig.3</span></div>
|
|
333
|
+
</div>
|
|
334
|
+
|
|
335
|
+
<div class="pcard" style="background:#f7f7f5;color:#141618">
|
|
336
|
+
<div class="pk" style="color:#c9342c">newsroom-paper · 报刊新闻</div>
|
|
337
|
+
<div class="ph" style="font-family:'Newsreader','Noto Serif SC',serif;font-weight:700">事故复盘:四小时内发生了什么</div>
|
|
338
|
+
<div class="pp" style="font-family:'General Sans','Noto Sans SC',sans-serif">标题/导语 Newsreader 700 / 思源宋,正文 General Sans / 思源黑。</div>
|
|
339
|
+
<div class="pf" style="font-family:'IBM Plex Mono',monospace"><span>INCIDENT</span><span>14:08 UTC</span></div>
|
|
340
|
+
</div>
|
|
341
|
+
|
|
342
|
+
<div class="pcard" style="background:#f6f7f4;color:#1a2734">
|
|
343
|
+
<div class="pk" style="color:#2d647f">quiet-report · B2B 报告</div>
|
|
344
|
+
<div class="ph" style="font-family:'Source Serif 4','Noto Serif SC',serif;font-weight:700">Q2 经营回顾与展望</div>
|
|
345
|
+
<div class="pp" style="font-family:'General Sans','Noto Sans SC',sans-serif">标题 Source Serif 4 700 / 思源黑多字重,正文 General Sans / 思源黑。</div>
|
|
346
|
+
<div class="pf" style="font-family:'IBM Plex Mono',monospace"><span>BOARD</span><span>CONFIDENTIAL</span></div>
|
|
347
|
+
</div>
|
|
348
|
+
|
|
349
|
+
<div class="pcard" style="background:#f4f1ea;color:#20262a">
|
|
350
|
+
<div class="pk" style="color:#3b6f75">product-manual · 说明书</div>
|
|
351
|
+
<div class="ph" style="font-family:'Space Grotesk','Noto Sans SC',sans-serif;font-weight:700">三步接入 Webhook</div>
|
|
352
|
+
<div class="pp" style="font-family:'Geist','Noto Sans SC',sans-serif">标题 Space Grotesk / 思源黑 700,正文 Geist / 思源黑,代码 Geist Mono。</div>
|
|
353
|
+
<div class="pf" style="font-family:'Geist Mono',monospace"><span>STEP 02</span><span>v2.0</span></div>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
<div class="pcard" style="background:#f7f8f3;color:#102033">
|
|
357
|
+
<div class="pk" style="color:#1468a8">engineering-paper · 工程纸</div>
|
|
358
|
+
<div class="ph" style="font-family:'Space Grotesk','Noto Sans SC',sans-serif;font-weight:600">事件驱动架构边界</div>
|
|
359
|
+
<div class="pp" style="font-family:'Geist','Noto Sans SC',sans-serif">标题 Space Grotesk 600 / 思源黑,正文 Geist,等宽更纱 Mono(必备)。</div>
|
|
360
|
+
<div class="pf" style="font-family:'Geist Mono',monospace"><span>SYS-DESIGN</span><span>fig.1</span></div>
|
|
361
|
+
</div>
|
|
362
|
+
|
|
363
|
+
<div class="pcard" style="background:#f5f1e8;color:#1a2e1f">
|
|
364
|
+
<div class="pk" style="color:#2f6d4f">field-notes · 田野笔记</div>
|
|
365
|
+
<div class="ph" style="font-family:'Spectral','Noto Serif SC',serif;font-weight:600">城市里的野生植物</div>
|
|
366
|
+
<div class="pp" style="font-family:'LXGW WenKai','Noto Sans SC',sans-serif">标题 思源宋 600,正文 霞鹜文楷,西文 Spectral / General Sans。</div>
|
|
367
|
+
<div class="pf" style="font-family:'IBM Plex Mono',monospace"><span>FIELD</span><span>No.07</span></div>
|
|
368
|
+
</div>
|
|
369
|
+
|
|
370
|
+
<div class="pcard" style="background:#eedfc7;color:#2a1e13">
|
|
371
|
+
<div class="pk" style="color:#8f4b28">kraft-editorial · 牛皮纸文学</div>
|
|
372
|
+
<div class="ph" style="font-family:'Libre Caslon Display','Noto Serif SC',serif">一封未寄出的信</div>
|
|
373
|
+
<div class="pp" style="font-family:'LXGW WenKai','Noto Serif SC',serif">封面 Libre Caslon Display / 京華老宋·思源宋 700,正文 霞鹜文楷 / Spectral。</div>
|
|
374
|
+
<div class="pf" style="font-family:'Geist Mono',monospace"><span>ESSAY</span><span>1960s</span></div>
|
|
375
|
+
</div>
|
|
376
|
+
|
|
377
|
+
<div class="pcard" style="background:#f0e6d2;color:#1f1a14">
|
|
378
|
+
<div class="pk" style="color:#6f6255">dune-gallery · 画廊设计</div>
|
|
379
|
+
<div class="ph" style="font-family:'Cabinet Grotesk','Noto Serif SC',serif;font-weight:800">留白即内容</div>
|
|
380
|
+
<div class="pp" style="font-family:'General Sans','Noto Sans SC',sans-serif">封面 Cabinet Grotesk / 思源宋 600,正文 General Sans / 思源黑,衬线 Source Serif 4。</div>
|
|
381
|
+
<div class="pf" style="font-family:'Geist Mono',monospace"><span>GALLERY</span><span>2026</span></div>
|
|
382
|
+
</div>
|
|
383
|
+
|
|
384
|
+
<div class="pcard" style="background:#fbf7f2;color:#302421">
|
|
385
|
+
<div class="pk" style="color:#c75f55">social-notebook · 社媒小红书</div>
|
|
386
|
+
<div class="ph" style="font-family:'Smiley Sans Oblique','Noto Sans SC',sans-serif;font-size:34px">学会这 3 招就够了</div>
|
|
387
|
+
<div class="pp" style="font-family:'Noto Sans SC',sans-serif">封面得意黑×1 或思源黑 Heavy,正文思源黑,西文 Satoshi / Cabinet Grotesk。</div>
|
|
388
|
+
<div class="pf" style="font-family:'Geist Mono',monospace"><span>笔记</span><span>收藏 ★</span></div>
|
|
389
|
+
</div>
|
|
390
|
+
|
|
391
|
+
<div class="pcard" style="background:#f3eadb;color:#0f0e0d">
|
|
392
|
+
<div class="pk" style="color:#d65f2d">bold-editorial · 强观点封面</div>
|
|
393
|
+
<div class="ph" style="font-family:'Cabinet Grotesk','Noto Serif SC',serif;font-weight:800">别再追逐每一个热点</div>
|
|
394
|
+
<div class="pp" style="font-family:'Satoshi','Noto Sans SC',sans-serif">封面 Cabinet Grotesk 800 / 思源宋 Heavy(得意黑×1),正文 Satoshi / 思源黑,引用 Newsreader。</div>
|
|
395
|
+
<div class="pf" style="font-family:'Geist Mono',monospace"><span>OPINION</span><span>05·16</span></div>
|
|
396
|
+
</div>
|
|
397
|
+
|
|
398
|
+
</div>
|
|
399
|
+
</div>
|
|
400
|
+
|
|
401
|
+
<div class="foot">
|
|
402
|
+
右下角状态用 canvas 测宽法实时检测:<span class="dot ok"></span>已加载 ·
|
|
403
|
+
<span class="dot miss"></span>未加载(标「未内嵌」者需本机已装该字体才显示,否则回退已内嵌字体;标「内嵌」者应全部已加载)。
|
|
404
|
+
本页与最终卡片导出一致,全部走 <code>assets/fonts/fonts.css</code> 本地加载,零 CDN/外链;导出由 <code>render-cards.mjs</code> 的 <code>document.fonts.ready</code> 保证字体就绪。
|
|
405
|
+
</div>
|
|
406
|
+
|
|
407
|
+
<script>
|
|
408
|
+
(function () {
|
|
409
|
+
// 真·字体加载检测:canvas 宽度测量法。
|
|
410
|
+
// document.fonts.check() 对非 @font-face 的本地字体恒返回 true,会误报,故不用它。
|
|
411
|
+
// 思路:用「目标字体, 基线泛型」渲染探针文本,与纯基线泛型对比宽度;
|
|
412
|
+
// 任一探针(拉丁/中文)相对三种泛型(monospace/serif/sans-serif)出现差异即判定字体已生效。
|
|
413
|
+
var cv = document.createElement('canvas');
|
|
414
|
+
var ctx = cv.getContext('2d');
|
|
415
|
+
var GEN = ['monospace', 'serif', 'sans-serif'];
|
|
416
|
+
var PROBES = ['WaQ@gmqil1%80&MN', '永中文字体测试样张壹贰叁'];
|
|
417
|
+
|
|
418
|
+
function widths(stack, probe) {
|
|
419
|
+
ctx.font = '40px ' + stack;
|
|
420
|
+
return ctx.measureText(probe).width;
|
|
421
|
+
}
|
|
422
|
+
function loaded(fam) {
|
|
423
|
+
return PROBES.some(function (probe) {
|
|
424
|
+
return GEN.some(function (g) {
|
|
425
|
+
var base = widths(g, probe);
|
|
426
|
+
var test = widths('"' + fam + '",' + g, probe);
|
|
427
|
+
return Math.abs(test - base) > 0.5; // 目标字体改变了排版宽度 → 已生效
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
function probe() {
|
|
432
|
+
document.querySelectorAll('.spec[data-f]').forEach(function (card) {
|
|
433
|
+
var fams = card.getAttribute('data-f').split(',').map(function (s) { return s.trim(); });
|
|
434
|
+
var el = card.querySelector('[data-status]');
|
|
435
|
+
var ok = fams.some(loaded);
|
|
436
|
+
var cls = ok ? 'ok' : 'miss';
|
|
437
|
+
var label = ok ? '已加载 · ' + fams[0] : '未加载 · 回退(本机无此字体)';
|
|
438
|
+
el.innerHTML = '<span class="dot ' + cls + '"></span>' + label;
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
if (document.fonts && document.fonts.ready) {
|
|
442
|
+
document.fonts.ready.then(function () { setTimeout(probe, 300); });
|
|
443
|
+
setTimeout(probe, 4500); // 兜底:-face 解析慢时再测一次
|
|
444
|
+
} else {
|
|
445
|
+
setTimeout(probe, 1500);
|
|
446
|
+
}
|
|
447
|
+
})();
|
|
448
|
+
</script>
|
|
449
|
+
</body>
|
|
450
|
+
</html>
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Fonts
|
|
2
|
+
|
|
3
|
+
卡片字体的单一真相源:本地字体包、授权、加载方式、**自动选字算法(带受控随机)**、主题→字体候选池、语言覆盖规则。
|
|
4
|
+
|
|
5
|
+
`taste.md`、`SKILL.md`、`presets.md`、各 `design-languages/*.md` 涉及具体字体的描述都引用本文件,不再各自维护字体清单(消解了历史冲突 C1–C4,见末节)。
|
|
6
|
+
|
|
7
|
+
## 适用范围与渲染约束
|
|
8
|
+
|
|
9
|
+
- 渲染管线:HTML/CSS + Playwright 截图,1080px 画布,2x 导出,比例 1:1 / 3:4 / 9:16。
|
|
10
|
+
- 字体**全部本地内嵌**,通过本地 `@font-face` 加载,**不依赖任何 CDN/外链**(开发预览也不依赖)。
|
|
11
|
+
- `scripts/render-cards.mjs` 在 `waitUntil:'load'` 后、截图前等待 `document.fonts.ready`,确保本地字体加载完成再截图。
|
|
12
|
+
- 字重层级优先**复用同一字体的多字重**(思源黑/宋为可变字体,单文件覆盖全字重;多数英文为 variable)——这是控制 CJK 体积最有效的手段。
|
|
13
|
+
- 字间距保持 `0`(uppercase 微标签除外),不用负字距;正文不用纯黑。
|
|
14
|
+
|
|
15
|
+
## 本地字体包
|
|
16
|
+
|
|
17
|
+
字体存放在 `assets/fonts/`,由 `scripts/download-fonts.sh` 下载并生成:
|
|
18
|
+
|
|
19
|
+
- `assets/fonts/fonts.css` —— 主入口,`@import` 全部字体的 `@font-face`。卡片集引用它即可。
|
|
20
|
+
- `assets/fonts/css/*.css`、`assets/fonts/woff2/**`、`assets/fonts/packages/**` —— 字体文件与分包 CSS。
|
|
21
|
+
- `assets/fonts/MANIFEST.md` —— **字体清单与体积的真相源(自动生成,勿手填进本文件,避免数字漂移)**。
|
|
22
|
+
|
|
23
|
+
### 已内嵌(OFL / ITF-FFL,可随仓库分发)
|
|
24
|
+
|
|
25
|
+
英文 10 款:Geist、Geist Mono、Space Grotesk、Newsreader、Source Serif 4、Spectral、IBM Plex Mono、Libre Caslon Display(以上 fontsource,OFL);Satoshi、General Sans、Cabinet Grotesk(Fontshare,ITF-FFL)。
|
|
26
|
+
|
|
27
|
+
中文 4 款:思源黑体 `Noto Sans SC`、思源宋体 `Noto Serif SC`(fontsource 可变,分 unicode-range 分包)、霞鹜文楷 `LXGW WenKai`(Lite 常用字集;**为控体积只内嵌 regular 400 + bold 700 普通体,不含 light 及 Mono 变体**)、得意黑 `Smiley Sans Oblique`(cn-fontsource,单字重)。整包约 20MB,明细见 `assets/fonts/MANIFEST.md`。
|
|
28
|
+
|
|
29
|
+
> family 名已在下载时归一(去掉 fontsource 的 ` Variable` 后缀),与下文映射表完全一致。
|
|
30
|
+
|
|
31
|
+
### 未内嵌(授权不允许随仓库再分发,仅作系统字体回退)
|
|
32
|
+
|
|
33
|
+
- **HarmonyOS Sans SC**、**阿里巴巴普惠体 3.0**、**京華老宋体**:非 OFL,再分发授权不明确。仅在内容明确需要、且目标机器已装时,作为 font-family 链里的可选项;缺失则回退已内嵌字体。
|
|
34
|
+
- **朱雀仿宋 Zhuque Fangsong**、**更纱黑体 Mono Sarasa Mono SC**:OFL,但缺干净 woff2 源未自动内嵌。需要时手动放入 `assets/fonts/woff2/` 并在 `fonts.css` 补 `@font-face`;缺失时:仿宋角色回退思源宋,CJK 等宽角色回退「拉丁等宽 + 思源黑」(元信息多为拉丁,可接受)。
|
|
35
|
+
- **霞鹜文楷 light(300)、霞鹜文楷 Mono**:为控体积在 `download-fonts.sh` 的 lxgw `keep` 过滤中刻意丢弃(25MB→8MB)。文楷只用 400/700 两档做层级;中文等宽人文需求回退到「更纱黑体 Mono(未内嵌)→ 拉丁等宽 + 思源黑」。如确需,改 `download-fonts.sh` 中 lxgw 的 `keep` 列表并重跑。
|
|
36
|
+
|
|
37
|
+
## 授权速查
|
|
38
|
+
|
|
39
|
+
| 授权 | 含义 | 字体 |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| SIL OFL-1.1 | 自由商用/内嵌/子集化/分发 | 思源黑、思源宋、霞鹜文楷、得意黑(及候补朱雀仿宋);Geist、Geist Mono、Space Grotesk、Newsreader、Source Serif 4、Spectral、IBM Plex Mono、Libre Caslon Display |
|
|
42
|
+
| ITF Free Font License | 免费可商用、允许网页内嵌打包 | Satoshi、General Sans、Cabinet Grotesk |
|
|
43
|
+
| 厂商私有免商 | 再分发授权不明确,**不内嵌**,仅系统回退 | HarmonyOS Sans SC、阿里巴巴普惠体 3.0、京華老宋体 |
|
|
44
|
+
| 系统/付费 | 不可打包/内嵌 | 苹方 PingFang、微软雅黑、方正系、Avenir Next、Söhne |
|
|
45
|
+
|
|
46
|
+
**禁用**:Inter 作默认(taste 硬约束);苹方/雅黑/方正/Avenir Next 写入任何会被打包的 `@font-face`;任何 CDN 外链。
|
|
47
|
+
|
|
48
|
+
## 字体角色与候选池(按主题预设)
|
|
49
|
+
|
|
50
|
+
每个角色给**一个加权候选池**而非唯一字体——这是「自动选字 + 受控随机」的数据基础:随机只在**同主题、同角色**的池内发生,既避免「主题 ↔ 字体完全耦合」(同一主题多次生成不会千篇一律),又不会选出跑题字体。
|
|
51
|
+
|
|
52
|
+
记法:`字体A*` = 主选(默认权重高),其后为备选。`/` 分隔中文与英文侧。
|
|
53
|
+
|
|
54
|
+
| 预设 | display(封面标题)| serif(编辑标题/引用)| sans(正文/UI)| mono(数据/元信息)|
|
|
55
|
+
|---|---|---|---|---|
|
|
56
|
+
| `magazine-eink` | Cabinet Grotesk\* · Newsreader / 思源宋 700\* · 得意黑(封面≤1) | Spectral\* · Source Serif 4 / 思源宋\* · 霞鹜文楷 | General Sans\* · Satoshi / 思源黑\* | Geist Mono\* · IBM Plex Mono |
|
|
57
|
+
| `porcelain-research` | Geist 700\* · Space Grotesk / 思源黑 900\* | Source Serif 4\* · Newsreader / 思源宋\* | Geist\* · General Sans / 思源黑\* | IBM Plex Mono\* · Geist Mono |
|
|
58
|
+
| `newsroom-paper` | Newsreader 700\* · Cabinet Grotesk / 思源宋 700\* | Newsreader\* · Spectral / 思源宋\* | General Sans\* · Geist / 思源黑\* | IBM Plex Mono\* · Geist Mono |
|
|
59
|
+
| `quiet-report` | Source Serif 4 700\* · Geist 700 / 思源黑 900\* | Source Serif 4\* · Newsreader / 思源宋\* | General Sans\* · Geist / 思源黑\* | IBM Plex Mono\* · Geist Mono |
|
|
60
|
+
| `product-manual` | Space Grotesk\* · Geist 700 / 思源黑 700\* | Source Serif 4 · — / 思源宋 | Geist\* · Satoshi / 思源黑\* | Geist Mono\* · IBM Plex Mono |
|
|
61
|
+
| `engineering-paper` | Space Grotesk 600\* · Geist 700 / 思源黑 700\* | — | Geist\* · General Sans / 思源黑\* | Geist Mono\* · IBM Plex Mono |
|
|
62
|
+
| `field-notes` | Newsreader\* · Spectral / 思源宋 600\* | Spectral\* · Source Serif 4 / 霞鹜文楷\* · 思源宋 | General Sans\* · Geist / 思源黑\* · 霞鹜文楷 | IBM Plex Mono\* · Geist Mono |
|
|
63
|
+
| `kraft-editorial` | Libre Caslon Display\* · Newsreader / 思源宋 700\* | Spectral\* · Newsreader / 霞鹜文楷\* · 思源宋 | General Sans\* · Satoshi / 思源黑\* | Geist Mono\* · IBM Plex Mono |
|
|
64
|
+
| `dune-gallery` | Cabinet Grotesk\* · Space Grotesk / 思源宋 600\* | Source Serif 4\* · Spectral / 思源宋\* | General Sans\* · Satoshi / 思源黑\* | Geist Mono\* · IBM Plex Mono |
|
|
65
|
+
| `social-notebook` | Cabinet Grotesk 800\* · Satoshi / 思源黑 900\* · 得意黑(封面≤1) | Newsreader · — / 思源宋 | Satoshi\* · Geist / 思源黑\* | Geist Mono\* · IBM Plex Mono |
|
|
66
|
+
| `bold-editorial` | Cabinet Grotesk 800\* · Space Grotesk / 思源宋 900\* · 得意黑(封面≤1) | Newsreader\* · Spectral / 思源宋\* · 霞鹜文楷 | Satoshi\* · General Sans / 思源黑\* | Geist Mono\* · IBM Plex Mono |
|
|
67
|
+
|
|
68
|
+
Legacy 别名(`tokyo-night`/`terminal-green`/`blueprint`/`pitch-deck-vc` 等)先按 `presets.md` 映射到上述主预设再取池。
|
|
69
|
+
|
|
70
|
+
## 自动选字算法(带受控随机)
|
|
71
|
+
|
|
72
|
+
在 Workflow step 4(选定 preset + design-language + 内容语言后)执行:
|
|
73
|
+
|
|
74
|
+
1. **取池**:用所选 `preset` 查上表,得到 display/serif/sans/mono 四个加权候选池(中、英两侧)。
|
|
75
|
+
2. **硬约束过滤**(优先级最高,先裁池再随机):
|
|
76
|
+
- 用户显式指定字体 → 直接锁定该角色,跳过随机,并记入 `sources.md`。
|
|
77
|
+
- design-language 排版约束(见下节)→ 据其裁剪/合并角色(如 `swiss-poster` 家族 ≤2:display 与 sans 取同族或合并)。
|
|
78
|
+
- 内容语言(见下下节)→ 决定用中文侧还是英文侧、是否必须含已内嵌 CJK face。
|
|
79
|
+
- taste 硬约束 → 永不选 Inter;单字重字体(得意黑)只能落到 display 且每套 ≤1 处。
|
|
80
|
+
3. **受控随机挑选**:
|
|
81
|
+
- 为每个角色在过滤后的池里**加权随机选 1 款**(主选权重 ≈0.6,第一备选 ≈0.28,第二备选 ≈0.12;池被裁到 1 款时无随机)。
|
|
82
|
+
- **每套卡片只选一次**,整套统一(不要逐卡换字体)。
|
|
83
|
+
- **变化种子**:用输出目录 slug 作随机种子 → 同一 slug 可复现、不同主题/选题天然不同,从而「同主题不同选题」字体搭配有变化、不耦合。
|
|
84
|
+
- **跨主题点缀(仅 display,概率 ≈0.15)**:display 角色可从「相邻气质主题」的 display 池借 1 款(如 `quiet-report` 偶尔借 `magazine-eink` 的 Cabinet Grotesk),给封面制造新鲜感;serif/sans/mono **不做**跨主题,保正文稳定。
|
|
85
|
+
4. **写入**:把选中的家族名写进卡片 CSS 的 `:root` token(`--font-display/-serif/-sans/-mono`),并 `@import "assets/fonts/fonts.css"`(或把用到的字体复制进 `cards/<slug>/assets/fonts/` 后本地引用)。
|
|
86
|
+
5. **记录**:在 `sources.md` 写明本套实际选中的四个字体 + 是否触发跨主题点缀,便于复现与解释。
|
|
87
|
+
|
|
88
|
+
> 目标:主题决定**气质边界**(池),随机决定**池内具体哪款**。主题与字体不再一一硬绑定,但也不会跑题。
|
|
89
|
+
|
|
90
|
+
## 设计语言排版约束(裁池,优先级高于随机)
|
|
91
|
+
|
|
92
|
+
命中时按其约束裁剪上面的池:
|
|
93
|
+
|
|
94
|
+
- `editorial-artifact`:标题须 serif/表现性 display → display 池只留 serif 系(思源宋粗 / Newsreader / Cabinet Grotesk)。
|
|
95
|
+
- `swiss-poster`:字体家族 ≤2 → display 与 sans 取同族或合并,mono 仅用于极少元信息;不触发跨主题点缀。
|
|
96
|
+
- `newsroom-poster`:标题重磅 → display 池只留重字重(思源黑 900 / Newsreader 700 / Cabinet Grotesk 800)。
|
|
97
|
+
- `cinematic-still`:克制 serif/display,正文极少 → 选定后正文字号压到最低密度。
|
|
98
|
+
- `data-poster`:大数字重磅 → 数字用 display 或 mono 的重字重(思源黑 900 / Space Grotesk / Geist 700)。
|
|
99
|
+
- `product-catalog`:标签 mono → mono 角色必选且权重提升。
|
|
100
|
+
- `field-notes`(设计语言):人文质感 → sans 池把霞鹜文楷权重提到主选档。
|
|
101
|
+
|
|
102
|
+
## 内容语言覆盖规则(仅次于用户显式指定)
|
|
103
|
+
|
|
104
|
+
- **纯英文**:用候选池英文侧;不声明 CJK face。
|
|
105
|
+
- **纯中文**:`--font-sans` 必含已内嵌中文(思源黑);display 角色在中文里**退回思源黑/宋粗字重或得意黑**,不选纯拉丁 display(拉丁 display 无汉字会整体回退)。
|
|
106
|
+
- **中英混排**:font-family 链**先拉丁后中文**,浏览器按 Unicode range 自动分工;西文字号较中文 **小 0.5–2px** 平衡视觉重量;数字用 tabular/lining;行高用无单位数值(如 `1.6`)。
|
|
107
|
+
- **CJK 无真斜体**:禁止对中文文本用 `font-style: italic`(伪斜变形);用字号/字重/色块区分。
|
|
108
|
+
- **CJK 字重合成**:只声明字体真实拥有的字重;思源黑/宋为可变字体(100–900 连续);得意黑单字重——不要对单字重字体写不存在的 `font-weight`。
|
|
109
|
+
|
|
110
|
+
## font-family 链写法(全本地)
|
|
111
|
+
|
|
112
|
+
本地内嵌优先;非内嵌的 niche 中文字体仅作可选项,缺失即回退已内嵌字体:
|
|
113
|
+
|
|
114
|
+
```css
|
|
115
|
+
@import url("assets/fonts/fonts.css"); /* 或复制 fonts 到 cards/<slug>/assets/fonts/ */
|
|
116
|
+
|
|
117
|
+
:root{
|
|
118
|
+
--font-sans: "Geist", "Noto Sans SC", system-ui, sans-serif;
|
|
119
|
+
--font-serif: "Source Serif 4", "Noto Serif SC", Georgia, serif;
|
|
120
|
+
--font-mono: "Geist Mono", "Noto Sans SC", ui-monospace, monospace;
|
|
121
|
+
--font-display: "Cabinet Grotesk", "Noto Serif SC", sans-serif;
|
|
122
|
+
/* 文化/文学预设的人文正文示例: */
|
|
123
|
+
--font-humanist:"LXGW WenKai", "Noto Serif SC", serif;
|
|
124
|
+
}
|
|
125
|
+
/* 选字算法的结果直接覆盖上面四个 token 的首位字体即可 */
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
非内嵌 niche 字体若确需(且目标机已装):把它放在已内嵌 face 之前,例如
|
|
129
|
+
`--font-serif: "KingHwa_OldSong", "Noto Serif SC", serif;` —— 装了用它,没装回退思源宋,永不外链。
|
|
130
|
+
|
|
131
|
+
## 验证检查清单
|
|
132
|
+
|
|
133
|
+
- [ ] `bash scripts/download-fonts.sh` 后 `assets/fonts/fonts.css` 与 `MANIFEST.md` 存在;MANIFEST 列出的 family 与本文件映射表一致。
|
|
134
|
+
- [ ] 卡片注入 `document.fonts.ready.then(()=>console.log([...document.fonts].map(f=>f.family+' '+f.status)))`,Playwright 抓 console,确认选中字体状态 `loaded`(非 `error`/`unloaded`)。
|
|
135
|
+
- [ ] `render-cards.mjs` 已在截图前 `await page.evaluate(()=>document.fonts.ready)`;同卡 `--wait 250` 与 `1500` 像素 diff 应无差异。
|
|
136
|
+
- [ ] grep 卡片 HTML/CSS:无 CDN/外链字体;无 `font-style: italic` 落在中文文本;单字重字体未写不存在字重。
|
|
137
|
+
- [ ] 同一 preset 用两个不同 slug 各生成一套,确认四个角色字体**有变化但都在该 preset 池内**(受控随机生效、未跑题)。
|
|
138
|
+
- [ ] `sources.md` 记录了本套实际选中的字体与是否跨主题点缀。
|
|
139
|
+
- [ ] 中英混排卡:行高无单位;数字 tabular;DevTools 与 Playwright 导出基线一致。
|
|
140
|
+
|
|
141
|
+
## 历史冲突消解记录(C1–C4)
|
|
142
|
+
|
|
143
|
+
- **C1**:`taste.md`、`SKILL.md` 曾推荐 **Avenir Next**(付费/系统、不可内嵌)→ 已删除,统一指向本文件。
|
|
144
|
+
- **C2**:字体候选清单曾在 taste.md / SKILL.md / 本文件**三处各存一份** → 本文件设为单一真相源,另两处只保留 no-Inter 硬约束与指针。
|
|
145
|
+
- **C3**:`taste.md` serif 清单(Songti SC 等)与本文件不一致 → 改为「见 references/fonts.md」。
|
|
146
|
+
- **C4**:`SKILL.md` 全局「body 必须 sans」与本文件「magazine-eink/field-notes/kraft 用 serif·楷体正文」相矛盾 → SKILL.md 软化为「技术/密集卡 body 用 sans;编辑/文学预设按本文件可用 serif/楷体正文」。
|
|
147
|
+
- 非冲突:Inter 禁令在多处重复是**刻意护栏**(多道工序复述),保留。
|
|
148
|
+
|
|
149
|
+
## Sources
|
|
150
|
+
|
|
151
|
+
字体来源见 `assets/fonts/MANIFEST.md`(每款的包、文件数、体积、授权,自动生成)。授权核实参考:思源黑/宋 Noto(OFL)、霞鹜文楷(OFL, github.com/lxgw/LxgwWenKai)、得意黑 Smiley Sans(OFL, github.com/atelier-anchor/smiley-sans)、Geist/Geist Mono(OFL, vercel.com/font)、Space Grotesk/Newsreader/Source Serif 4/Spectral/IBM Plex Mono/Libre Caslon Display(OFL, Google Fonts)、Satoshi/General Sans/Cabinet Grotesk(ITF-FFL, fontshare.com)。
|