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,314 @@
|
|
|
1
|
+
# Theme Presets
|
|
2
|
+
|
|
3
|
+
Use these presets as palette and composition starting points for card sets. The default taste should be closer to magazines, reports, field notes, product manuals, and printed matter than to generic AI SaaS visuals.
|
|
4
|
+
|
|
5
|
+
## Anti-AI-Template Rule
|
|
6
|
+
|
|
7
|
+
When style is ambiguous, avoid the usual AI-card signals:
|
|
8
|
+
|
|
9
|
+
- neon blue/purple gradients, aurora blobs, glowing dark dashboards, terminal green, cyberpunk grids, fake glass panels, and excessive black backgrounds.
|
|
10
|
+
- generic "AI future" imagery, robot hands, abstract brain networks, floating chips, holographic UI, and meaningless data particles.
|
|
11
|
+
- one-note blue/purple palettes or pitch-deck gradients unless the user explicitly asks for them.
|
|
12
|
+
|
|
13
|
+
Prefer restrained paper color, readable ink, real editorial hierarchy, purposeful whitespace, and one or two quiet accent colors.
|
|
14
|
+
|
|
15
|
+
## Anti-Plain-Template Rule
|
|
16
|
+
|
|
17
|
+
Removing AI cliches is not enough. Do not replace them with a plain system of hairlines, coordinate grids, and repeated boxes.
|
|
18
|
+
|
|
19
|
+
- Do not use a full-card grid background as the default texture.
|
|
20
|
+
- Do not make every content item a bordered rectangle.
|
|
21
|
+
- Do not rely on thin rules and small mono labels as the main source of "design".
|
|
22
|
+
- Prefer large filled fields, cropped objects, image-led composition, typographic scale contrast, torn-paper shapes, stamps, labels, bands, and asymmetric layouts.
|
|
23
|
+
- Use lines and borders sparingly, as accents around a stronger visual anchor.
|
|
24
|
+
|
|
25
|
+
## Token Model
|
|
26
|
+
|
|
27
|
+
Every card set should define a compact theme token block before component styling:
|
|
28
|
+
|
|
29
|
+
- `--bg`, `--bg-soft`
|
|
30
|
+
- `--surface`, `--surface-2`
|
|
31
|
+
- `--border`, `--border-strong`
|
|
32
|
+
- `--text-1`, `--text-2`, `--text-3`
|
|
33
|
+
- `--accent`, `--accent-2`, `--accent-3`
|
|
34
|
+
- `--good`, `--warn`, `--bad`
|
|
35
|
+
- `--grad`, `--grad-soft`
|
|
36
|
+
- `--radius`, `--radius-sm`, `--radius-lg`
|
|
37
|
+
- `--shadow`, `--shadow-lg`
|
|
38
|
+
- `--font-sans`, `--font-serif`, `--font-mono`, `--font-display` — do not hardcode font names here; their values come from the `references/fonts.md` selection algorithm (preset × design-language × content-language → weighted-random pick), embedded locally via `assets/fonts/fonts.css`.
|
|
39
|
+
|
|
40
|
+
Use tokens in component CSS. Avoid scattering literal colors outside the token block unless a one-off asset or data visualization genuinely requires it.
|
|
41
|
+
|
|
42
|
+
## Primary Preset Catalog
|
|
43
|
+
|
|
44
|
+
### `magazine-eink`
|
|
45
|
+
|
|
46
|
+
Ink-black on warm paper, serif/display headlines, sans-serif body, mono metadata, minimal borders.
|
|
47
|
+
|
|
48
|
+
Use for editorial carousels, talk summaries, longform explainers, essays, culture, creator narratives, and premium text-led cards.
|
|
49
|
+
|
|
50
|
+
Suggested tokens:
|
|
51
|
+
|
|
52
|
+
- `--bg: #f1efea`
|
|
53
|
+
- `--bg-soft: #e8e5de`
|
|
54
|
+
- `--surface: #fbfaf6`
|
|
55
|
+
- `--surface-2: #f4f1ea`
|
|
56
|
+
- `--border: rgba(10, 10, 11, 0.18)`
|
|
57
|
+
- `--border-strong: #0a0a0b`
|
|
58
|
+
- `--text-1: #0a0a0b`
|
|
59
|
+
- `--text-2: #3f3d39`
|
|
60
|
+
- `--text-3: #777169`
|
|
61
|
+
- `--accent: #18181a`
|
|
62
|
+
- `--accent-2: #8f5b34`
|
|
63
|
+
- `--accent-3: #b8aa8c`
|
|
64
|
+
|
|
65
|
+
### `porcelain-research`
|
|
66
|
+
|
|
67
|
+
Deep indigo ink on porcelain white, cool but not neon, with precise rules and quiet contrast.
|
|
68
|
+
|
|
69
|
+
Use for technology, research, data analysis, academic-feeling explainers, serious product narratives, and technical topics that should not look like a hacker poster.
|
|
70
|
+
|
|
71
|
+
Suggested tokens:
|
|
72
|
+
|
|
73
|
+
- `--bg: #f1f3f5`
|
|
74
|
+
- `--bg-soft: #e4e8ec`
|
|
75
|
+
- `--surface: #fbfcfd`
|
|
76
|
+
- `--surface-2: #edf2f6`
|
|
77
|
+
- `--border: rgba(10, 31, 61, 0.18)`
|
|
78
|
+
- `--border-strong: #0a1f3d`
|
|
79
|
+
- `--text-1: #0a1f3d`
|
|
80
|
+
- `--text-2: #3b526d`
|
|
81
|
+
- `--text-3: #76879a`
|
|
82
|
+
- `--accent: #174f9a`
|
|
83
|
+
- `--accent-2: #6f8fb4`
|
|
84
|
+
- `--accent-3: #c2a35f`
|
|
85
|
+
|
|
86
|
+
### `newsroom-paper`
|
|
87
|
+
|
|
88
|
+
White and light gray editorial base, black text, measured red accent, hard information blocks.
|
|
89
|
+
|
|
90
|
+
Use for news, incidents, releases, comparisons, urgency, public statements, and factual explainers.
|
|
91
|
+
|
|
92
|
+
Suggested tokens:
|
|
93
|
+
|
|
94
|
+
- `--bg: #f7f7f5`
|
|
95
|
+
- `--bg-soft: #ececea`
|
|
96
|
+
- `--surface: #ffffff`
|
|
97
|
+
- `--surface-2: #f0f0ee`
|
|
98
|
+
- `--border: rgba(20, 22, 24, 0.16)`
|
|
99
|
+
- `--border-strong: #141618`
|
|
100
|
+
- `--text-1: #141618`
|
|
101
|
+
- `--text-2: #4b5055`
|
|
102
|
+
- `--text-3: #7b8085`
|
|
103
|
+
- `--accent: #c9342c`
|
|
104
|
+
- `--accent-2: #2f5f86`
|
|
105
|
+
- `--accent-3: #c9a451`
|
|
106
|
+
|
|
107
|
+
### `quiet-report`
|
|
108
|
+
|
|
109
|
+
Clean report style with off-white background, charcoal/navy text, modest blue accent, and conservative spacing.
|
|
110
|
+
|
|
111
|
+
Use for B2B, operations, finance, board updates, enterprise product messaging, and formal summaries.
|
|
112
|
+
|
|
113
|
+
Suggested tokens:
|
|
114
|
+
|
|
115
|
+
- `--bg: #f6f7f4`
|
|
116
|
+
- `--bg-soft: #ebeee9`
|
|
117
|
+
- `--surface: #ffffff`
|
|
118
|
+
- `--surface-2: #eef2f3`
|
|
119
|
+
- `--border: rgba(26, 39, 52, 0.15)`
|
|
120
|
+
- `--border-strong: #1a2734`
|
|
121
|
+
- `--text-1: #1a2734`
|
|
122
|
+
- `--text-2: #4a5a66`
|
|
123
|
+
- `--text-3: #7d8a92`
|
|
124
|
+
- `--accent: #2d647f`
|
|
125
|
+
- `--accent-2: #7d8b68`
|
|
126
|
+
- `--accent-3: #c0a062`
|
|
127
|
+
|
|
128
|
+
### `product-manual`
|
|
129
|
+
|
|
130
|
+
Instruction-manual feel: warm white, graphite text, practical diagrams, object labels, stamps, and large artifact metaphors.
|
|
131
|
+
|
|
132
|
+
Use for product notes, how-to guides, API explainers, workflows, checklists, and developer education.
|
|
133
|
+
|
|
134
|
+
Suggested tokens:
|
|
135
|
+
|
|
136
|
+
- `--bg: #f4f1ea`
|
|
137
|
+
- `--bg-soft: #e7e2d8`
|
|
138
|
+
- `--surface: #fffdf8`
|
|
139
|
+
- `--surface-2: #ece8df`
|
|
140
|
+
- `--border: rgba(32, 38, 42, 0.18)`
|
|
141
|
+
- `--border-strong: #20262a`
|
|
142
|
+
- `--text-1: #20262a`
|
|
143
|
+
- `--text-2: #4e565b`
|
|
144
|
+
- `--text-3: #7f8587`
|
|
145
|
+
- `--accent: #3b6f75`
|
|
146
|
+
- `--accent-2: #9a6b37`
|
|
147
|
+
- `--accent-3: #c7b474`
|
|
148
|
+
|
|
149
|
+
### `engineering-paper`
|
|
150
|
+
|
|
151
|
+
White engineering paper, navy ink, sparse mono labels, precise diagrams, and strong technical artifacts. Do not default to full-canvas coordinate grids.
|
|
152
|
+
|
|
153
|
+
Use for architecture, system design, infrastructure, API flows, technical documentation, and engineering explainers.
|
|
154
|
+
|
|
155
|
+
Suggested tokens:
|
|
156
|
+
|
|
157
|
+
- `--bg: #f7f8f3`
|
|
158
|
+
- `--bg-soft: #eef3f6`
|
|
159
|
+
- `--surface: #ffffff`
|
|
160
|
+
- `--surface-2: #edf3f8`
|
|
161
|
+
- `--border: rgba(17, 36, 58, 0.16)`
|
|
162
|
+
- `--border-strong: #11243a`
|
|
163
|
+
- `--text-1: #102033`
|
|
164
|
+
- `--text-2: #3f566b`
|
|
165
|
+
- `--text-3: #708292`
|
|
166
|
+
- `--accent: #1468a8`
|
|
167
|
+
- `--accent-2: #8a7044`
|
|
168
|
+
- `--accent-3: #c9a24e`
|
|
169
|
+
|
|
170
|
+
### `field-notes`
|
|
171
|
+
|
|
172
|
+
Ivory paper, forest ink, muted green and clay accents, calm non-fiction tone.
|
|
173
|
+
|
|
174
|
+
Use for sustainability, culture, public-interest explainers, field research, community, and reflective narratives.
|
|
175
|
+
|
|
176
|
+
Suggested tokens:
|
|
177
|
+
|
|
178
|
+
- `--bg: #f5f1e8`
|
|
179
|
+
- `--bg-soft: #ece7da`
|
|
180
|
+
- `--surface: #fffaf0`
|
|
181
|
+
- `--surface-2: #eee8d9`
|
|
182
|
+
- `--border: rgba(26, 46, 31, 0.18)`
|
|
183
|
+
- `--border-strong: #1a2e1f`
|
|
184
|
+
- `--text-1: #1a2e1f`
|
|
185
|
+
- `--text-2: #485849`
|
|
186
|
+
- `--text-3: #7f8979`
|
|
187
|
+
- `--accent: #2f6d4f`
|
|
188
|
+
- `--accent-2: #8b6b3e`
|
|
189
|
+
- `--accent-3: #c9b276`
|
|
190
|
+
|
|
191
|
+
### `kraft-editorial`
|
|
192
|
+
|
|
193
|
+
Warm kraft paper, dark brown ink, archival texture, independent-magazine warmth.
|
|
194
|
+
|
|
195
|
+
Use for history, reading notes, handmade brands, personal essays, retro product stories, and literary cards.
|
|
196
|
+
|
|
197
|
+
Suggested tokens:
|
|
198
|
+
|
|
199
|
+
- `--bg: #eedfc7`
|
|
200
|
+
- `--bg-soft: #e0d0b6`
|
|
201
|
+
- `--surface: #f8ecd8`
|
|
202
|
+
- `--surface-2: #ead8bb`
|
|
203
|
+
- `--border: rgba(42, 30, 19, 0.2)`
|
|
204
|
+
- `--border-strong: #2a1e13`
|
|
205
|
+
- `--text-1: #2a1e13`
|
|
206
|
+
- `--text-2: #604c38`
|
|
207
|
+
- `--text-3: #8e7b64`
|
|
208
|
+
- `--accent: #8f4b28`
|
|
209
|
+
- `--accent-2: #2f5d50`
|
|
210
|
+
- `--accent-3: #b9894a`
|
|
211
|
+
|
|
212
|
+
### `dune-gallery`
|
|
213
|
+
|
|
214
|
+
Charcoal ink on sand paper, restrained gallery tone, neutral premium feel.
|
|
215
|
+
|
|
216
|
+
Use for design, art, architecture, brand studies, portfolio stories, and aesthetic-first cards.
|
|
217
|
+
|
|
218
|
+
Suggested tokens:
|
|
219
|
+
|
|
220
|
+
- `--bg: #f0e6d2`
|
|
221
|
+
- `--bg-soft: #e3d7bf`
|
|
222
|
+
- `--surface: #fbf3e3`
|
|
223
|
+
- `--surface-2: #eadcc4`
|
|
224
|
+
- `--border: rgba(31, 26, 20, 0.18)`
|
|
225
|
+
- `--border-strong: #1f1a14`
|
|
226
|
+
- `--text-1: #1f1a14`
|
|
227
|
+
- `--text-2: #51483d`
|
|
228
|
+
- `--text-3: #817768`
|
|
229
|
+
- `--accent: #6f6255`
|
|
230
|
+
- `--accent-2: #a06445`
|
|
231
|
+
- `--accent-3: #c9b171`
|
|
232
|
+
|
|
233
|
+
### `social-notebook`
|
|
234
|
+
|
|
235
|
+
Warm white, soft red/clay accents, light paper shadows, approachable but still editorial.
|
|
236
|
+
|
|
237
|
+
Use for Xiaohongshu, creator notes, consumer product tips, lightweight education, and friendly explainers.
|
|
238
|
+
|
|
239
|
+
Suggested tokens:
|
|
240
|
+
|
|
241
|
+
- `--bg: #fbf7f2`
|
|
242
|
+
- `--bg-soft: #f2e9e2`
|
|
243
|
+
- `--surface: #ffffff`
|
|
244
|
+
- `--surface-2: #fff2ef`
|
|
245
|
+
- `--border: rgba(86, 54, 46, 0.14)`
|
|
246
|
+
- `--border-strong: #56362e`
|
|
247
|
+
- `--text-1: #302421`
|
|
248
|
+
- `--text-2: #6a5650`
|
|
249
|
+
- `--text-3: #9a8982`
|
|
250
|
+
- `--accent: #c75f55`
|
|
251
|
+
- `--accent-2: #7a8b62`
|
|
252
|
+
- `--accent-3: #d7b77a`
|
|
253
|
+
|
|
254
|
+
### `bold-editorial`
|
|
255
|
+
|
|
256
|
+
Cream paper, black editorial type, one warm spot color, strong cover energy without synthetic gradients.
|
|
257
|
+
|
|
258
|
+
Use for opinion pieces, columns, hot takes, cultural topics, strong hooks, and shareable argument cards.
|
|
259
|
+
|
|
260
|
+
Suggested tokens:
|
|
261
|
+
|
|
262
|
+
- `--bg: #f3eadb`
|
|
263
|
+
- `--bg-soft: #e7dac7`
|
|
264
|
+
- `--surface: #fff7ea`
|
|
265
|
+
- `--surface-2: #eadcc8`
|
|
266
|
+
- `--border: rgba(15, 14, 13, 0.22)`
|
|
267
|
+
- `--border-strong: #0f0e0d`
|
|
268
|
+
- `--text-1: #0f0e0d`
|
|
269
|
+
- `--text-2: #4b4037`
|
|
270
|
+
- `--text-3: #807266`
|
|
271
|
+
- `--accent: #d65f2d`
|
|
272
|
+
- `--accent-2: #2f5d6b`
|
|
273
|
+
- `--accent-3: #d5aa4b`
|
|
274
|
+
|
|
275
|
+
## Legacy Motifs
|
|
276
|
+
|
|
277
|
+
These names may appear in older card sets. Do not recommend them by default because they often create a generic AI-template feel.
|
|
278
|
+
|
|
279
|
+
- `tokyo-night`: only use if the user explicitly asks for a dark code-editor mood.
|
|
280
|
+
- `terminal-green`: only use for command-reference cards or intentionally retro terminal artifacts.
|
|
281
|
+
- `neo-brutalism`: only use if the user explicitly wants a loud youth-campaign look.
|
|
282
|
+
- `blueprint`: prefer `engineering-paper` unless the user asks for a dark blueprint.
|
|
283
|
+
- `pitch-deck-vc`: prefer `quiet-report` or `product-manual` unless the user asks for startup deck styling.
|
|
284
|
+
- `soft-pastel`: prefer `social-notebook` unless the user asks for soft consumer colors.
|
|
285
|
+
- `xiaohongshu-white`: prefer `social-notebook`; keep this as a platform-specific alias.
|
|
286
|
+
- `corporate-clean`: prefer `quiet-report`; keep this as a conservative-report alias.
|
|
287
|
+
- `news-broadcast`: prefer `newsroom-paper`; keep this as a higher-urgency alias.
|
|
288
|
+
- `engineering-whiteprint`: prefer `engineering-paper`; keep this as a technical-paper alias.
|
|
289
|
+
- `magazine-bold`: prefer `bold-editorial`; keep this as an older alias.
|
|
290
|
+
- `editorial-serif`: prefer `magazine-eink`; keep this as an older alias.
|
|
291
|
+
|
|
292
|
+
## Scenario Mapping
|
|
293
|
+
|
|
294
|
+
When the style is ambiguous, recommend 2-3 user-facing directions and map them internally to presets:
|
|
295
|
+
|
|
296
|
+
- Business/report: `quiet-report`, `product-manual`, `porcelain-research`.
|
|
297
|
+
- Engineering/API/system: `engineering-paper`, `product-manual`, `porcelain-research`.
|
|
298
|
+
- Social/Xiaohongshu: `social-notebook`, `magazine-eink`, `bold-editorial`.
|
|
299
|
+
- News/update/incident: `newsroom-paper`, `quiet-report`, `engineering-paper`.
|
|
300
|
+
- Bold opinion: `bold-editorial`, `magazine-eink`, `newsroom-paper`.
|
|
301
|
+
- Editorial/magazine: `magazine-eink`, `dune-gallery`, `field-notes`, `kraft-editorial`.
|
|
302
|
+
- Design/art/brand: `dune-gallery`, `magazine-eink`, `bold-editorial`.
|
|
303
|
+
- Culture/history/reading: `kraft-editorial`, `field-notes`, `magazine-eink`.
|
|
304
|
+
- Technical CLI/security: `engineering-paper`, `product-manual`, `newsroom-paper`; use `terminal-green` only on explicit request.
|
|
305
|
+
|
|
306
|
+
## Guardrails
|
|
307
|
+
|
|
308
|
+
- Keep letter spacing at `0` unless uppercase micro-label tracking is necessary. Do not use negative letter spacing.
|
|
309
|
+
- Avoid one-note palettes unless the user explicitly asks for a monochrome look.
|
|
310
|
+
- Use dark themes sparingly. If a card needs dark contrast, make it feel like black ink, night photography, or print inversion rather than neon code wallpaper.
|
|
311
|
+
- For technical topics, prefer `engineering-paper`, `product-manual`, or `porcelain-research` before any dark developer motif.
|
|
312
|
+
- Prefer texture through typography, cropped shapes, stamps, labels, image/object anchors, captions, paper color, and real images instead of abstract glowing decoration.
|
|
313
|
+
- Do not make fine-line grids, rectangular panels, or hairline diagrams the primary visual language unless the user explicitly asks for blueprint/spec-sheet aesthetics.
|
|
314
|
+
- For final exports, keep source inspiration in `sources.md` or `credits.md` when relevant.
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# download-fonts.sh — 把卡片用字体下载到 skill 本地 assets/fonts/,并生成 fonts.css。
|
|
3
|
+
#
|
|
4
|
+
# 设计:
|
|
5
|
+
# - 全部为 OFL / ITF Free Font License,可内嵌打包分发。
|
|
6
|
+
# - woff2 优先;fontsource 可变字体单轴覆盖全字重,体积最小。
|
|
7
|
+
# - 幂等:已存在则跳过;--force 重新下载。
|
|
8
|
+
# - 零额外依赖:只用 curl + python3 标准库。
|
|
9
|
+
# - 非 OFL 字体(HarmonyOS / 阿里普惠 / 京華老宋)不在此下载,授权不允许随仓库再分发;
|
|
10
|
+
# 这些在 references/fonts.md 里仅作「系统字体回退」选项,不内嵌。
|
|
11
|
+
#
|
|
12
|
+
# 用法:
|
|
13
|
+
# bash scripts/download-fonts.sh # 下载缺失字体
|
|
14
|
+
# bash scripts/download-fonts.sh --force # 全部重新下载
|
|
15
|
+
#
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
18
|
+
FORCE="${1:-}"
|
|
19
|
+
|
|
20
|
+
python3 - "$HERE" "$FORCE" <<'PY'
|
|
21
|
+
import sys, os, re, json, urllib.request, urllib.error
|
|
22
|
+
|
|
23
|
+
ROOT, FORCE = sys.argv[1], (len(sys.argv) > 2 and sys.argv[2] == "--force")
|
|
24
|
+
OUT = os.path.join(ROOT, "assets", "fonts")
|
|
25
|
+
UA = {"User-Agent": "Mozilla/5.0 (font-fetch; voxflow-card)"}
|
|
26
|
+
|
|
27
|
+
def get(url, binary=False, tries=3):
|
|
28
|
+
last = None
|
|
29
|
+
for _ in range(tries):
|
|
30
|
+
try:
|
|
31
|
+
req = urllib.request.Request(url, headers=UA)
|
|
32
|
+
with urllib.request.urlopen(req, timeout=40) as r:
|
|
33
|
+
return r.read() if binary else r.read().decode("utf-8", "replace")
|
|
34
|
+
except Exception as e: # noqa
|
|
35
|
+
last = e
|
|
36
|
+
raise last
|
|
37
|
+
|
|
38
|
+
def save(path, data):
|
|
39
|
+
os.makedirs(os.path.dirname(path), exist_ok=True)
|
|
40
|
+
mode = "wb" if isinstance(data, (bytes, bytearray)) else "w"
|
|
41
|
+
with open(path, mode) as f:
|
|
42
|
+
f.write(data)
|
|
43
|
+
|
|
44
|
+
def need(path):
|
|
45
|
+
return FORCE or not os.path.exists(path) or os.path.getsize(path) == 0
|
|
46
|
+
|
|
47
|
+
# fontsource 包:拉 index.css,把 'Xxx Variable' 家族名改回 'Xxx',再下所有引用的 woff2。
|
|
48
|
+
# (dir, jsdelivr_pkg, css_path, family_variable, family_final)
|
|
49
|
+
FONTSOURCE = [
|
|
50
|
+
("geist", "@fontsource-variable/geist@latest", "index.css", "Geist Variable", "Geist"),
|
|
51
|
+
("geist-mono", "@fontsource-variable/geist-mono@latest", "index.css", "Geist Mono Variable", "Geist Mono"),
|
|
52
|
+
("space-grotesk", "@fontsource-variable/space-grotesk@latest", "index.css", "Space Grotesk Variable", "Space Grotesk"),
|
|
53
|
+
("newsreader", "@fontsource-variable/newsreader@latest", "index.css", "Newsreader Variable", "Newsreader"),
|
|
54
|
+
("source-serif-4", "@fontsource-variable/source-serif-4@latest","index.css", "Source Serif 4 Variable", "Source Serif 4"),
|
|
55
|
+
("spectral", "@fontsource/spectral@latest", "400.css", "Spectral", "Spectral"),
|
|
56
|
+
("spectral-600", "@fontsource/spectral@latest", "600.css", "Spectral", "Spectral"),
|
|
57
|
+
("spectral-800", "@fontsource/spectral@latest", "800.css", "Spectral", "Spectral"),
|
|
58
|
+
("ibm-plex-mono", "@fontsource/ibm-plex-mono@latest", "400.css", "IBM Plex Mono", "IBM Plex Mono"),
|
|
59
|
+
("ibm-plex-mono-500", "@fontsource/ibm-plex-mono@latest", "500.css", "IBM Plex Mono", "IBM Plex Mono"),
|
|
60
|
+
("ibm-plex-mono-600", "@fontsource/ibm-plex-mono@latest", "600.css", "IBM Plex Mono", "IBM Plex Mono"),
|
|
61
|
+
("libre-caslon-display", "@fontsource/libre-caslon-display@latest", "400.css", "Libre Caslon Display", "Libre Caslon Display"),
|
|
62
|
+
("noto-sans-sc", "@fontsource-variable/noto-sans-sc@latest", "index.css", "Noto Sans SC Variable", "Noto Sans SC"),
|
|
63
|
+
("noto-serif-sc", "@fontsource-variable/noto-serif-sc@latest", "index.css", "Noto Serif SC Variable", "Noto Serif SC"),
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
# 嵌套 @import 的整包(lxgw lite / 得意黑):递归抓 css 与 woff2,保持相对结构。
|
|
67
|
+
# rename: 把包内声明的 family 归一到 fonts.md 用的名字(最长匹配优先)。
|
|
68
|
+
# 第4位 keep:仅保留入口 css 中 @import 文件名命中这些子串的变体(None=全留)。
|
|
69
|
+
# 霞鹜文楷瘦身:只留 regular + bold 普通体,丢弃 light 与全部 mono 变体。
|
|
70
|
+
PACKAGED = [
|
|
71
|
+
("lxgw-wenkai", "https://cdn.jsdelivr.net/npm/lxgw-wenkai-lite-webfont/style.css",
|
|
72
|
+
[("LXGW WenKai Lite", "LXGW WenKai")],
|
|
73
|
+
["lxgwwenkailite-regular", "lxgwwenkailite-bold"]),
|
|
74
|
+
("smiley-sans", "https://cdn.jsdelivr.net/npm/cn-fontsource-smiley-sans-oblique-regular/font.css",
|
|
75
|
+
[], None),
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
# Fontshare(ITF-FFL,可变 woff2,单文件/家族)。
|
|
79
|
+
FONTSHARE = [
|
|
80
|
+
("satoshi", "Satoshi"),
|
|
81
|
+
("general-sans", "General Sans"),
|
|
82
|
+
("cabinet-grotesk", "Cabinet Grotesk"),
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
report = []
|
|
86
|
+
|
|
87
|
+
def do_fontsource(dirn, pkg, csspath, famv, famf):
|
|
88
|
+
base = f"https://cdn.jsdelivr.net/npm/{pkg}/{csspath}"
|
|
89
|
+
dst_css = os.path.join(OUT, "css", dirn + ".css")
|
|
90
|
+
if need(dst_css):
|
|
91
|
+
css = get(base)
|
|
92
|
+
# 家族名归一:'Xxx Variable' -> 'Xxx'
|
|
93
|
+
css = css.replace(f"'{famv}'", f"'{famf}'").replace(f'"{famv}"', f'"{famf}"')
|
|
94
|
+
# 把 url(./files/x.woff2) 改为指向集中 woff2 目录
|
|
95
|
+
css = re.sub(r"url\(\.?/?(?:files/)?([^)]+\.woff2)\)",
|
|
96
|
+
lambda m: f"url(../woff2/{dirn}/{os.path.basename(m.group(1))})", css)
|
|
97
|
+
save(dst_css, css)
|
|
98
|
+
files = re.findall(r"url\(\.\./woff2/%s/([^)]+\.woff2)\)" % re.escape(dirn),
|
|
99
|
+
open(dst_css).read())
|
|
100
|
+
n = 0
|
|
101
|
+
for fn in sorted(set(files)):
|
|
102
|
+
dst = os.path.join(OUT, "woff2", dirn, fn)
|
|
103
|
+
if need(dst):
|
|
104
|
+
save(dst, get(f"https://cdn.jsdelivr.net/npm/{pkg}/files/{fn}", binary=True))
|
|
105
|
+
n += 1
|
|
106
|
+
sz = dir_size(os.path.join(OUT, "woff2", dirn))
|
|
107
|
+
report.append((famf, dirn, len(set(files)), sz, "OFL/ITF" ))
|
|
108
|
+
print(f" fontsource {famf:<22} files={len(set(files)):<3} new={n:<3} {human(sz)}")
|
|
109
|
+
|
|
110
|
+
def do_packaged(dirn, top, rename, keep):
|
|
111
|
+
# 递归:解析 @import 与 url() 的 woff2/css,全部镜像到 packages/<dirn>/
|
|
112
|
+
root = os.path.join(OUT, "packages", dirn)
|
|
113
|
+
entry = os.path.basename(top)
|
|
114
|
+
seen = set()
|
|
115
|
+
csspaths = []
|
|
116
|
+
def fetch(url, rel):
|
|
117
|
+
if rel in seen:
|
|
118
|
+
return
|
|
119
|
+
seen.add(rel)
|
|
120
|
+
dst = os.path.join(root, rel)
|
|
121
|
+
is_css = rel.endswith(".css")
|
|
122
|
+
if need(dst):
|
|
123
|
+
save(dst, get(url, binary=not is_css))
|
|
124
|
+
if is_css:
|
|
125
|
+
txt = open(dst, encoding="utf-8", errors="replace").read()
|
|
126
|
+
# 入口 css 瘦身:仅保留命中 keep 的 @import 行,重写文件
|
|
127
|
+
if keep and rel == entry:
|
|
128
|
+
kept = [ln for ln in txt.splitlines()
|
|
129
|
+
if "@import" not in ln or any(k in ln for k in keep)]
|
|
130
|
+
txt = "\n".join(kept) + "\n"
|
|
131
|
+
save(dst, txt)
|
|
132
|
+
csspaths.append(dst)
|
|
133
|
+
base = url.rsplit("/", 1)[0]
|
|
134
|
+
for ref in re.findall(r"@import url\(['\"]?\.?/?([^'\")]+)['\"]?\)", txt) + \
|
|
135
|
+
re.findall(r"url\(['\"]?\.?/?([^'\")]+\.woff2)['\"]?\)", txt):
|
|
136
|
+
child_rel = os.path.normpath(os.path.join(os.path.dirname(rel), ref))
|
|
137
|
+
fetch(base + "/" + ref, child_rel)
|
|
138
|
+
fetch(top, entry)
|
|
139
|
+
# family 归一:每次运行都重跑,幂等(最长匹配先替换)
|
|
140
|
+
for cp in csspaths:
|
|
141
|
+
t = open(cp, encoding="utf-8", errors="replace").read()
|
|
142
|
+
orig = t
|
|
143
|
+
for old, new in rename:
|
|
144
|
+
t = t.replace("'%s'" % old, "'%s'" % new).replace('"%s"' % old, '"%s"' % new)
|
|
145
|
+
if t != orig:
|
|
146
|
+
save(cp, t)
|
|
147
|
+
sz = dir_size(root)
|
|
148
|
+
report.append((dirn, "packages/" + dirn, sum(1 for _ in walk_woff2(root)), sz, "OFL"))
|
|
149
|
+
print(f" packaged {dirn:<22} entry={os.path.basename(top):<14} {human(sz)}")
|
|
150
|
+
|
|
151
|
+
def do_fontshare(slug, family):
|
|
152
|
+
css = get(f"https://api.fontshare.com/v2/css?f[]={slug}@1&display=swap")
|
|
153
|
+
m = re.search(r"src:\s*url\(['\"]?(//[^'\")]+\.woff2)", css)
|
|
154
|
+
wr = re.search(r"font-weight:\s*([0-9]+\s+[0-9]+|[0-9]+)", css)
|
|
155
|
+
if not m:
|
|
156
|
+
print(f" fontshare {family:<22} SKIP (no woff2 in css)")
|
|
157
|
+
report.append((family, "fontshare/" + slug, 0, 0, "ITF-FFL (missing)"))
|
|
158
|
+
return
|
|
159
|
+
woff2_url = "https:" + m.group(1)
|
|
160
|
+
weight = wr.group(1) if wr else "400 900"
|
|
161
|
+
dst = os.path.join(OUT, "woff2", "fontshare", slug + ".woff2")
|
|
162
|
+
if need(dst):
|
|
163
|
+
save(dst, get(woff2_url, binary=True))
|
|
164
|
+
face = (f"/* {family} — Fontshare, ITF Free Font License */\n"
|
|
165
|
+
f"@font-face{{font-family:'{family}';font-style:normal;font-display:swap;"
|
|
166
|
+
f"font-weight:{weight};src:url(../woff2/fontshare/{slug}.woff2) format('woff2');}}\n")
|
|
167
|
+
save(os.path.join(OUT, "css", slug + ".css"), face)
|
|
168
|
+
sz = os.path.getsize(dst)
|
|
169
|
+
report.append((family, "fontshare/" + slug, 1, sz, "ITF-FFL"))
|
|
170
|
+
print(f" fontshare {family:<22} weight={weight:<9} {human(sz)}")
|
|
171
|
+
|
|
172
|
+
def walk_woff2(root):
|
|
173
|
+
for dp, _, fs in os.walk(root):
|
|
174
|
+
for f in fs:
|
|
175
|
+
if f.endswith(".woff2"):
|
|
176
|
+
yield os.path.join(dp, f)
|
|
177
|
+
|
|
178
|
+
def dir_size(p):
|
|
179
|
+
return sum(os.path.getsize(os.path.join(dp, f))
|
|
180
|
+
for dp, _, fs in os.walk(p) for f in fs) if os.path.isdir(p) else 0
|
|
181
|
+
|
|
182
|
+
def human(n):
|
|
183
|
+
for u in ("B", "KB", "MB"):
|
|
184
|
+
if n < 1024:
|
|
185
|
+
return f"{n:.0f}{u}"
|
|
186
|
+
n /= 1024
|
|
187
|
+
return f"{n:.1f}GB"
|
|
188
|
+
|
|
189
|
+
print("→ fontsource (Latin VF + 思源黑/宋 分包):")
|
|
190
|
+
for a in FONTSOURCE:
|
|
191
|
+
try:
|
|
192
|
+
do_fontsource(*a)
|
|
193
|
+
except Exception as e: # noqa
|
|
194
|
+
print(f" ! {a[4]} FAILED: {e}")
|
|
195
|
+
|
|
196
|
+
print("→ packaged (霞鹜文楷 Lite / 得意黑):")
|
|
197
|
+
for a in PACKAGED:
|
|
198
|
+
try:
|
|
199
|
+
do_packaged(*a)
|
|
200
|
+
except Exception as e: # noqa
|
|
201
|
+
print(f" ! {a[0]} FAILED: {e}")
|
|
202
|
+
|
|
203
|
+
print("→ fontshare (Satoshi / General Sans / Cabinet Grotesk):")
|
|
204
|
+
for a in FONTSHARE:
|
|
205
|
+
try:
|
|
206
|
+
do_fontshare(*a)
|
|
207
|
+
except Exception as e: # noqa
|
|
208
|
+
print(f" ! {a[1]} FAILED: {e}")
|
|
209
|
+
|
|
210
|
+
# 组装 master fonts.css
|
|
211
|
+
imports = []
|
|
212
|
+
for a in FONTSOURCE:
|
|
213
|
+
imports.append(f'@import url("./css/{a[0]}.css");')
|
|
214
|
+
for slug, _ in FONTSHARE:
|
|
215
|
+
imports.append(f'@import url("./css/{slug}.css");')
|
|
216
|
+
for dirn, top, _, _ in PACKAGED:
|
|
217
|
+
imports.append(f'@import url("./packages/{dirn}/{os.path.basename(top)}");')
|
|
218
|
+
|
|
219
|
+
master = "/* fonts.css — 本地内嵌字体(download-fonts.sh 生成,勿手改)\n" \
|
|
220
|
+
" 规则与主题映射见 ../../references/fonts.md。\n" \
|
|
221
|
+
" 家族名:Geist / Geist Mono / Space Grotesk / Newsreader / Source Serif 4 /\n" \
|
|
222
|
+
" Spectral / IBM Plex Mono / Libre Caslon Display / Satoshi / General Sans /\n" \
|
|
223
|
+
" Cabinet Grotesk / Noto Sans SC / Noto Serif SC / LXGW WenKai* / Smiley Sans Oblique */\n\n" \
|
|
224
|
+
+ "\n".join(imports) + "\n"
|
|
225
|
+
save(os.path.join(OUT, "fonts.css"), master)
|
|
226
|
+
|
|
227
|
+
total = dir_size(OUT)
|
|
228
|
+
lines = ["# Font bundle manifest (download-fonts.sh)", "",
|
|
229
|
+
"| family | path | files | size | license |",
|
|
230
|
+
"|---|---|---|---|---|"]
|
|
231
|
+
for fam, path, nf, sz, lic in report:
|
|
232
|
+
lines.append(f"| {fam} | {path} | {nf} | {human(sz)} | {lic} |")
|
|
233
|
+
lines += ["", f"**Total bundle: {human(total)}**", "",
|
|
234
|
+
"Not bundled (license forbids repo redistribution; system-font fallback only):",
|
|
235
|
+
"HarmonyOS Sans SC, Alibaba PuHuiTi 3.0, KingHwa OldSong, Zhuque Fangsong, Sarasa Mono SC.",
|
|
236
|
+
"Sarasa Mono SC / Zhuque Fangsong are OFL but lack a clean woff2 source; add manually if needed."]
|
|
237
|
+
save(os.path.join(OUT, "MANIFEST.md"), "\n".join(lines) + "\n")
|
|
238
|
+
|
|
239
|
+
print(f"\n✓ fonts.css + MANIFEST.md written. Total bundle: {human(total)}")
|
|
240
|
+
PY
|