voxflow 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/remotion-bundle/bundle.js +0 -1
  3. package/dist/remotion-bundle/bundle.js.map +1 -1
  4. package/lib/commands/_registry.js +1 -0
  5. package/lib/commands/card-render.js +520 -0
  6. package/lib/commands/card.js +57 -0
  7. package/lib/core/ffmpeg.js +74 -11
  8. package/package.json +5 -2
  9. package/skills/.claude-plugin/marketplace.json +1 -1
  10. package/skills/.claude-plugin/plugin.json +2 -2
  11. package/skills/README.md +2 -2
  12. package/skills/card/SKILL.md +81 -5
  13. package/skills/card/assets/fonts/MANIFEST.md +29 -0
  14. package/skills/card/assets/fonts/css/cabinet-grotesk.css +2 -0
  15. package/skills/card/assets/fonts/css/geist-mono.css +29 -0
  16. package/skills/card/assets/fonts/css/geist.css +29 -0
  17. package/skills/card/assets/fonts/css/general-sans.css +2 -0
  18. package/skills/card/assets/fonts/css/ibm-plex-mono-500.css +49 -0
  19. package/skills/card/assets/fonts/css/ibm-plex-mono-600.css +49 -0
  20. package/skills/card/assets/fonts/css/ibm-plex-mono.css +49 -0
  21. package/skills/card/assets/fonts/css/libre-caslon-display.css +19 -0
  22. package/skills/card/assets/fonts/css/newsreader.css +29 -0
  23. package/skills/card/assets/fonts/css/noto-sans-sc.css +1009 -0
  24. package/skills/card/assets/fonts/css/noto-serif-sc.css +1009 -0
  25. package/skills/card/assets/fonts/css/satoshi.css +2 -0
  26. package/skills/card/assets/fonts/css/source-serif-4.css +59 -0
  27. package/skills/card/assets/fonts/css/space-grotesk.css +29 -0
  28. package/skills/card/assets/fonts/css/spectral-600.css +49 -0
  29. package/skills/card/assets/fonts/css/spectral-800.css +49 -0
  30. package/skills/card/assets/fonts/css/spectral.css +49 -0
  31. package/skills/card/assets/fonts/fonts.css +25 -0
  32. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-100.woff2 +0 -0
  33. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-101.woff2 +0 -0
  34. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-102.woff2 +0 -0
  35. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-103.woff2 +0 -0
  36. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-104.woff2 +0 -0
  37. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-105.woff2 +0 -0
  38. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-106.woff2 +0 -0
  39. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-107.woff2 +0 -0
  40. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-108.woff2 +0 -0
  41. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-109.woff2 +0 -0
  42. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-110.woff2 +0 -0
  43. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-111.woff2 +0 -0
  44. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-112.woff2 +0 -0
  45. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-113.woff2 +0 -0
  46. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-114.woff2 +0 -0
  47. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-115.woff2 +0 -0
  48. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-116.woff2 +0 -0
  49. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-117.woff2 +0 -0
  50. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-118.woff2 +0 -0
  51. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-119.woff2 +0 -0
  52. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-21.woff2 +0 -0
  53. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-22.woff2 +0 -0
  54. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-23.woff2 +0 -0
  55. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-24.woff2 +0 -0
  56. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-25.woff2 +0 -0
  57. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-26.woff2 +0 -0
  58. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-27.woff2 +0 -0
  59. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-28.woff2 +0 -0
  60. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-29.woff2 +0 -0
  61. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-30.woff2 +0 -0
  62. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-31.woff2 +0 -0
  63. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-32.woff2 +0 -0
  64. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-33.woff2 +0 -0
  65. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-34.woff2 +0 -0
  66. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-35.woff2 +0 -0
  67. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-36.woff2 +0 -0
  68. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-37.woff2 +0 -0
  69. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-38.woff2 +0 -0
  70. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-39.woff2 +0 -0
  71. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-4.woff2 +0 -0
  72. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-40.woff2 +0 -0
  73. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-41.woff2 +0 -0
  74. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-42.woff2 +0 -0
  75. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-43.woff2 +0 -0
  76. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-44.woff2 +0 -0
  77. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-45.woff2 +0 -0
  78. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-46.woff2 +0 -0
  79. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-47.woff2 +0 -0
  80. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-48.woff2 +0 -0
  81. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-49.woff2 +0 -0
  82. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-5.woff2 +0 -0
  83. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-50.woff2 +0 -0
  84. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-51.woff2 +0 -0
  85. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-52.woff2 +0 -0
  86. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-53.woff2 +0 -0
  87. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-54.woff2 +0 -0
  88. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-55.woff2 +0 -0
  89. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-56.woff2 +0 -0
  90. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-57.woff2 +0 -0
  91. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-58.woff2 +0 -0
  92. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-59.woff2 +0 -0
  93. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-6.woff2 +0 -0
  94. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-60.woff2 +0 -0
  95. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-61.woff2 +0 -0
  96. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-62.woff2 +0 -0
  97. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-63.woff2 +0 -0
  98. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-64.woff2 +0 -0
  99. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-65.woff2 +0 -0
  100. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-66.woff2 +0 -0
  101. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-67.woff2 +0 -0
  102. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-68.woff2 +0 -0
  103. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-69.woff2 +0 -0
  104. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-70.woff2 +0 -0
  105. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-71.woff2 +0 -0
  106. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-72.woff2 +0 -0
  107. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-73.woff2 +0 -0
  108. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-74.woff2 +0 -0
  109. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-75.woff2 +0 -0
  110. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-76.woff2 +0 -0
  111. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-77.woff2 +0 -0
  112. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-78.woff2 +0 -0
  113. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-79.woff2 +0 -0
  114. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-80.woff2 +0 -0
  115. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-81.woff2 +0 -0
  116. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-82.woff2 +0 -0
  117. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-83.woff2 +0 -0
  118. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-84.woff2 +0 -0
  119. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-85.woff2 +0 -0
  120. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-86.woff2 +0 -0
  121. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-87.woff2 +0 -0
  122. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-88.woff2 +0 -0
  123. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-89.woff2 +0 -0
  124. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-90.woff2 +0 -0
  125. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-91.woff2 +0 -0
  126. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-97.woff2 +0 -0
  127. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-98.woff2 +0 -0
  128. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-bold-subset-99.woff2 +0 -0
  129. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-100.woff2 +0 -0
  130. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-101.woff2 +0 -0
  131. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-102.woff2 +0 -0
  132. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-103.woff2 +0 -0
  133. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-104.woff2 +0 -0
  134. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-105.woff2 +0 -0
  135. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-106.woff2 +0 -0
  136. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-107.woff2 +0 -0
  137. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-108.woff2 +0 -0
  138. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-109.woff2 +0 -0
  139. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-110.woff2 +0 -0
  140. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-111.woff2 +0 -0
  141. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-112.woff2 +0 -0
  142. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-113.woff2 +0 -0
  143. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-114.woff2 +0 -0
  144. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-115.woff2 +0 -0
  145. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-116.woff2 +0 -0
  146. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-117.woff2 +0 -0
  147. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-118.woff2 +0 -0
  148. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-119.woff2 +0 -0
  149. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-21.woff2 +0 -0
  150. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-22.woff2 +0 -0
  151. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-23.woff2 +0 -0
  152. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-24.woff2 +0 -0
  153. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-25.woff2 +0 -0
  154. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-26.woff2 +0 -0
  155. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-27.woff2 +0 -0
  156. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-28.woff2 +0 -0
  157. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-29.woff2 +0 -0
  158. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-30.woff2 +0 -0
  159. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-31.woff2 +0 -0
  160. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-32.woff2 +0 -0
  161. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-33.woff2 +0 -0
  162. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-34.woff2 +0 -0
  163. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-35.woff2 +0 -0
  164. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-36.woff2 +0 -0
  165. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-37.woff2 +0 -0
  166. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-38.woff2 +0 -0
  167. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-39.woff2 +0 -0
  168. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-4.woff2 +0 -0
  169. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-40.woff2 +0 -0
  170. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-41.woff2 +0 -0
  171. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-42.woff2 +0 -0
  172. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-43.woff2 +0 -0
  173. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-44.woff2 +0 -0
  174. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-45.woff2 +0 -0
  175. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-46.woff2 +0 -0
  176. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-47.woff2 +0 -0
  177. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-48.woff2 +0 -0
  178. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-49.woff2 +0 -0
  179. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-5.woff2 +0 -0
  180. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-50.woff2 +0 -0
  181. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-51.woff2 +0 -0
  182. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-52.woff2 +0 -0
  183. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-53.woff2 +0 -0
  184. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-54.woff2 +0 -0
  185. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-55.woff2 +0 -0
  186. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-56.woff2 +0 -0
  187. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-57.woff2 +0 -0
  188. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-58.woff2 +0 -0
  189. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-59.woff2 +0 -0
  190. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-6.woff2 +0 -0
  191. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-60.woff2 +0 -0
  192. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-61.woff2 +0 -0
  193. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-62.woff2 +0 -0
  194. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-63.woff2 +0 -0
  195. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-64.woff2 +0 -0
  196. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-65.woff2 +0 -0
  197. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-66.woff2 +0 -0
  198. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-67.woff2 +0 -0
  199. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-68.woff2 +0 -0
  200. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-69.woff2 +0 -0
  201. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-70.woff2 +0 -0
  202. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-71.woff2 +0 -0
  203. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-72.woff2 +0 -0
  204. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-73.woff2 +0 -0
  205. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-74.woff2 +0 -0
  206. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-75.woff2 +0 -0
  207. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-76.woff2 +0 -0
  208. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-77.woff2 +0 -0
  209. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-78.woff2 +0 -0
  210. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-79.woff2 +0 -0
  211. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-80.woff2 +0 -0
  212. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-81.woff2 +0 -0
  213. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-82.woff2 +0 -0
  214. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-83.woff2 +0 -0
  215. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-84.woff2 +0 -0
  216. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-85.woff2 +0 -0
  217. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-86.woff2 +0 -0
  218. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-87.woff2 +0 -0
  219. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-88.woff2 +0 -0
  220. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-89.woff2 +0 -0
  221. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-90.woff2 +0 -0
  222. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-91.woff2 +0 -0
  223. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-97.woff2 +0 -0
  224. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-98.woff2 +0 -0
  225. package/skills/card/assets/fonts/packages/lxgw-wenkai/files/lxgwwenkailite-regular-subset-99.woff2 +0 -0
  226. package/skills/card/assets/fonts/packages/lxgw-wenkai/lxgwwenkailite-bold.css +873 -0
  227. package/skills/card/assets/fonts/packages/lxgw-wenkai/lxgwwenkailite-regular.css +873 -0
  228. package/skills/card/assets/fonts/packages/lxgw-wenkai/style.css +2 -0
  229. package/skills/card/assets/fonts/packages/smiley-sans/L1_4e00_192.woff2 +0 -0
  230. package/skills/card/assets/fonts/packages/smiley-sans/L1_4fea_192.woff2 +0 -0
  231. package/skills/card/assets/fonts/packages/smiley-sans/L1_5268_192.woff2 +0 -0
  232. package/skills/card/assets/fonts/packages/smiley-sans/L1_543c_192.woff2 +0 -0
  233. package/skills/card/assets/fonts/packages/smiley-sans/L1_5784_192.woff2 +0 -0
  234. package/skills/card/assets/fonts/packages/smiley-sans/L1_5b6c_192.woff2 +0 -0
  235. package/skills/card/assets/fonts/packages/smiley-sans/L1_5e37_192.woff2 +0 -0
  236. package/skills/card/assets/fonts/packages/smiley-sans/L1_60d2_192.woff2 +0 -0
  237. package/skills/card/assets/fonts/packages/smiley-sans/L1_6326_192.woff2 +0 -0
  238. package/skills/card/assets/fonts/packages/smiley-sans/L1_65b1_192.woff2 +0 -0
  239. package/skills/card/assets/fonts/packages/smiley-sans/L1_68a8_192.woff2 +0 -0
  240. package/skills/card/assets/fonts/packages/smiley-sans/L1_6cba_192.woff2 +0 -0
  241. package/skills/card/assets/fonts/packages/smiley-sans/L1_6fa2_192.woff2 +0 -0
  242. package/skills/card/assets/fonts/packages/smiley-sans/L1_73ce_192.woff2 +0 -0
  243. package/skills/card/assets/fonts/packages/smiley-sans/L1_77e4_192.woff2 +0 -0
  244. package/skills/card/assets/fonts/packages/smiley-sans/L1_7b78_192.woff2 +0 -0
  245. package/skills/card/assets/fonts/packages/smiley-sans/L1_7eee_192.woff2 +0 -0
  246. package/skills/card/assets/fonts/packages/smiley-sans/L1_81c1_192.woff2 +0 -0
  247. package/skills/card/assets/fonts/packages/smiley-sans/L1_8608_192.woff2 +0 -0
  248. package/skills/card/assets/fonts/packages/smiley-sans/L1_8aa4_192.woff2 +0 -0
  249. package/skills/card/assets/fonts/packages/smiley-sans/L1_8d20_192.woff2 +0 -0
  250. package/skills/card/assets/fonts/packages/smiley-sans/L1_8feb_192.woff2 +0 -0
  251. package/skills/card/assets/fonts/packages/smiley-sans/L1_94aa_192.woff2 +0 -0
  252. package/skills/card/assets/fonts/packages/smiley-sans/L1_97cd_266.woff2 +0 -0
  253. package/skills/card/assets/fonts/packages/smiley-sans/L2_3918_96.woff2 +0 -0
  254. package/skills/card/assets/fonts/packages/smiley-sans/L2_5081_96.woff2 +0 -0
  255. package/skills/card/assets/fonts/packages/smiley-sans/L2_5467_96.woff2 +0 -0
  256. package/skills/card/assets/fonts/packages/smiley-sans/L2_55ed_96.woff2 +0 -0
  257. package/skills/card/assets/fonts/packages/smiley-sans/L2_57f0_96.woff2 +0 -0
  258. package/skills/card/assets/fonts/packages/smiley-sans/L2_5ae4_96.woff2 +0 -0
  259. package/skills/card/assets/fonts/packages/smiley-sans/L2_5e15_96.woff2 +0 -0
  260. package/skills/card/assets/fonts/packages/smiley-sans/L2_609b_96.woff2 +0 -0
  261. package/skills/card/assets/fonts/packages/smiley-sans/L2_63e1_96.woff2 +0 -0
  262. package/skills/card/assets/fonts/packages/smiley-sans/L2_66dd_96.woff2 +0 -0
  263. package/skills/card/assets/fonts/packages/smiley-sans/L2_696c_96.woff2 +0 -0
  264. package/skills/card/assets/fonts/packages/smiley-sans/L2_6c75_96.woff2 +0 -0
  265. package/skills/card/assets/fonts/packages/smiley-sans/L2_6e73_96.woff2 +0 -0
  266. package/skills/card/assets/fonts/packages/smiley-sans/L2_7114_96.woff2 +0 -0
  267. package/skills/card/assets/fonts/packages/smiley-sans/L2_7392_96.woff2 +0 -0
  268. package/skills/card/assets/fonts/packages/smiley-sans/L2_7580_96.woff2 +0 -0
  269. package/skills/card/assets/fonts/packages/smiley-sans/L2_7769_96.woff2 +0 -0
  270. package/skills/card/assets/fonts/packages/smiley-sans/L2_7a71_96.woff2 +0 -0
  271. package/skills/card/assets/fonts/packages/smiley-sans/L2_7e21_96.woff2 +0 -0
  272. package/skills/card/assets/fonts/packages/smiley-sans/L2_7fcd_96.woff2 +0 -0
  273. package/skills/card/assets/fonts/packages/smiley-sans/L2_8203_96.woff2 +0 -0
  274. package/skills/card/assets/fonts/packages/smiley-sans/L2_8393_96.woff2 +0 -0
  275. package/skills/card/assets/fonts/packages/smiley-sans/L2_85b8_96.woff2 +0 -0
  276. package/skills/card/assets/fonts/packages/smiley-sans/L2_87cb_96.woff2 +0 -0
  277. package/skills/card/assets/fonts/packages/smiley-sans/L2_8bb5_96.woff2 +0 -0
  278. package/skills/card/assets/fonts/packages/smiley-sans/L2_8db6_96.woff2 +0 -0
  279. package/skills/card/assets/fonts/packages/smiley-sans/L2_9022_96.woff2 +0 -0
  280. package/skills/card/assets/fonts/packages/smiley-sans/L2_91ea_96.woff2 +0 -0
  281. package/skills/card/assets/fonts/packages/smiley-sans/L2_9504_96.woff2 +0 -0
  282. package/skills/card/assets/fonts/packages/smiley-sans/L2_9655_96.woff2 +0 -0
  283. package/skills/card/assets/fonts/packages/smiley-sans/L2_996a_96.woff2 +0 -0
  284. package/skills/card/assets/fonts/packages/smiley-sans/L2_9c95_133.woff2 +0 -0
  285. package/skills/card/assets/fonts/packages/smiley-sans/L3_101_64.woff2 +0 -0
  286. package/skills/card/assets/fonts/packages/smiley-sans/L3_148_64.woff2 +0 -0
  287. package/skills/card/assets/fonts/packages/smiley-sans/L3_1d4_64.woff2 +0 -0
  288. package/skills/card/assets/fonts/packages/smiley-sans/L3_1e86_64.woff2 +0 -0
  289. package/skills/card/assets/fonts/packages/smiley-sans/L3_1edf_64.woff2 +0 -0
  290. package/skills/card/assets/fonts/packages/smiley-sans/L3_20_64.woff2 +0 -0
  291. package/skills/card/assets/fonts/packages/smiley-sans/L3_2172_64.woff2 +0 -0
  292. package/skills/card/assets/fonts/packages/smiley-sans/L3_2495_64.woff2 +0 -0
  293. package/skills/card/assets/fonts/packages/smiley-sans/L3_3067_64.woff2 +0 -0
  294. package/skills/card/assets/fonts/packages/smiley-sans/L3_30b3_64.woff2 +0 -0
  295. package/skills/card/assets/fonts/packages/smiley-sans/L3_30f3_64.woff2 +0 -0
  296. package/skills/card/assets/fonts/packages/smiley-sans/L3_3a9_64.woff2 +0 -0
  297. package/skills/card/assets/fonts/packages/smiley-sans/L3_421_64.woff2 +0 -0
  298. package/skills/card/assets/fonts/packages/smiley-sans/L3_536a_64.woff2 +0 -0
  299. package/skills/card/assets/fonts/packages/smiley-sans/L3_60_64.woff2 +0 -0
  300. package/skills/card/assets/fonts/packages/smiley-sans/L3_61b8_64.woff2 +0 -0
  301. package/skills/card/assets/fonts/packages/smiley-sans/L3_706d_64.woff2 +0 -0
  302. package/skills/card/assets/fonts/packages/smiley-sans/L3_7b7c_64.woff2 +0 -0
  303. package/skills/card/assets/fonts/packages/smiley-sans/L3_836e_64.woff2 +0 -0
  304. package/skills/card/assets/fonts/packages/smiley-sans/L3_9124_64.woff2 +0 -0
  305. package/skills/card/assets/fonts/packages/smiley-sans/L3_9795_64.woff2 +0 -0
  306. package/skills/card/assets/fonts/packages/smiley-sans/L3_c1_64.woff2 +0 -0
  307. package/skills/card/assets/fonts/packages/smiley-sans/L3_fe3a_64.woff2 +0 -0
  308. package/skills/card/assets/fonts/packages/smiley-sans/L3_ff16_79.woff2 +0 -0
  309. package/skills/card/assets/fonts/packages/smiley-sans/font.css +80 -0
  310. package/skills/card/assets/fonts/woff2/fontshare/cabinet-grotesk.woff2 +0 -0
  311. package/skills/card/assets/fonts/woff2/fontshare/general-sans.woff2 +0 -0
  312. package/skills/card/assets/fonts/woff2/fontshare/satoshi.woff2 +0 -0
  313. package/skills/card/assets/fonts/woff2/geist/geist-cyrillic-wght-normal.woff2 +0 -0
  314. package/skills/card/assets/fonts/woff2/geist/geist-latin-ext-wght-normal.woff2 +0 -0
  315. package/skills/card/assets/fonts/woff2/geist/geist-latin-wght-normal.woff2 +0 -0
  316. package/skills/card/assets/fonts/woff2/geist-mono/geist-mono-cyrillic-wght-normal.woff2 +0 -0
  317. package/skills/card/assets/fonts/woff2/geist-mono/geist-mono-latin-ext-wght-normal.woff2 +0 -0
  318. package/skills/card/assets/fonts/woff2/geist-mono/geist-mono-latin-wght-normal.woff2 +0 -0
  319. package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-cyrillic-400-normal.woff2 +0 -0
  320. package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-cyrillic-ext-400-normal.woff2 +0 -0
  321. package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  322. package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-latin-ext-400-normal.woff2 +0 -0
  323. package/skills/card/assets/fonts/woff2/ibm-plex-mono/ibm-plex-mono-vietnamese-400-normal.woff2 +0 -0
  324. package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-cyrillic-500-normal.woff2 +0 -0
  325. package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-cyrillic-ext-500-normal.woff2 +0 -0
  326. package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  327. package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-latin-ext-500-normal.woff2 +0 -0
  328. package/skills/card/assets/fonts/woff2/ibm-plex-mono-500/ibm-plex-mono-vietnamese-500-normal.woff2 +0 -0
  329. package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-cyrillic-600-normal.woff2 +0 -0
  330. package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-cyrillic-ext-600-normal.woff2 +0 -0
  331. package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  332. package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-latin-ext-600-normal.woff2 +0 -0
  333. package/skills/card/assets/fonts/woff2/ibm-plex-mono-600/ibm-plex-mono-vietnamese-600-normal.woff2 +0 -0
  334. package/skills/card/assets/fonts/woff2/libre-caslon-display/libre-caslon-display-latin-400-normal.woff2 +0 -0
  335. package/skills/card/assets/fonts/woff2/libre-caslon-display/libre-caslon-display-latin-ext-400-normal.woff2 +0 -0
  336. package/skills/card/assets/fonts/woff2/newsreader/newsreader-latin-ext-wght-normal.woff2 +0 -0
  337. package/skills/card/assets/fonts/woff2/newsreader/newsreader-latin-wght-normal.woff2 +0 -0
  338. package/skills/card/assets/fonts/woff2/newsreader/newsreader-vietnamese-wght-normal.woff2 +0 -0
  339. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-100-wght-normal.woff2 +0 -0
  340. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-101-wght-normal.woff2 +0 -0
  341. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-102-wght-normal.woff2 +0 -0
  342. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-103-wght-normal.woff2 +0 -0
  343. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-104-wght-normal.woff2 +0 -0
  344. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-105-wght-normal.woff2 +0 -0
  345. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-106-wght-normal.woff2 +0 -0
  346. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-107-wght-normal.woff2 +0 -0
  347. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-108-wght-normal.woff2 +0 -0
  348. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-109-wght-normal.woff2 +0 -0
  349. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-110-wght-normal.woff2 +0 -0
  350. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-111-wght-normal.woff2 +0 -0
  351. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-112-wght-normal.woff2 +0 -0
  352. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-113-wght-normal.woff2 +0 -0
  353. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-114-wght-normal.woff2 +0 -0
  354. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-115-wght-normal.woff2 +0 -0
  355. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-116-wght-normal.woff2 +0 -0
  356. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-117-wght-normal.woff2 +0 -0
  357. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-118-wght-normal.woff2 +0 -0
  358. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-119-wght-normal.woff2 +0 -0
  359. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-21-wght-normal.woff2 +0 -0
  360. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-22-wght-normal.woff2 +0 -0
  361. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-23-wght-normal.woff2 +0 -0
  362. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-24-wght-normal.woff2 +0 -0
  363. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-25-wght-normal.woff2 +0 -0
  364. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-26-wght-normal.woff2 +0 -0
  365. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-27-wght-normal.woff2 +0 -0
  366. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-28-wght-normal.woff2 +0 -0
  367. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-29-wght-normal.woff2 +0 -0
  368. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-30-wght-normal.woff2 +0 -0
  369. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-31-wght-normal.woff2 +0 -0
  370. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-32-wght-normal.woff2 +0 -0
  371. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-33-wght-normal.woff2 +0 -0
  372. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-34-wght-normal.woff2 +0 -0
  373. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-35-wght-normal.woff2 +0 -0
  374. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-36-wght-normal.woff2 +0 -0
  375. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-37-wght-normal.woff2 +0 -0
  376. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-38-wght-normal.woff2 +0 -0
  377. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-39-wght-normal.woff2 +0 -0
  378. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-4-wght-normal.woff2 +0 -0
  379. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-40-wght-normal.woff2 +0 -0
  380. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-41-wght-normal.woff2 +0 -0
  381. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-42-wght-normal.woff2 +0 -0
  382. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-43-wght-normal.woff2 +0 -0
  383. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-44-wght-normal.woff2 +0 -0
  384. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-45-wght-normal.woff2 +0 -0
  385. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-46-wght-normal.woff2 +0 -0
  386. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-47-wght-normal.woff2 +0 -0
  387. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-48-wght-normal.woff2 +0 -0
  388. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-49-wght-normal.woff2 +0 -0
  389. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-5-wght-normal.woff2 +0 -0
  390. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-50-wght-normal.woff2 +0 -0
  391. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-51-wght-normal.woff2 +0 -0
  392. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-52-wght-normal.woff2 +0 -0
  393. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-53-wght-normal.woff2 +0 -0
  394. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-54-wght-normal.woff2 +0 -0
  395. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-55-wght-normal.woff2 +0 -0
  396. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-56-wght-normal.woff2 +0 -0
  397. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-57-wght-normal.woff2 +0 -0
  398. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-58-wght-normal.woff2 +0 -0
  399. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-59-wght-normal.woff2 +0 -0
  400. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-6-wght-normal.woff2 +0 -0
  401. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-60-wght-normal.woff2 +0 -0
  402. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-61-wght-normal.woff2 +0 -0
  403. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-62-wght-normal.woff2 +0 -0
  404. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-63-wght-normal.woff2 +0 -0
  405. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-64-wght-normal.woff2 +0 -0
  406. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-65-wght-normal.woff2 +0 -0
  407. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-66-wght-normal.woff2 +0 -0
  408. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-67-wght-normal.woff2 +0 -0
  409. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-68-wght-normal.woff2 +0 -0
  410. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-69-wght-normal.woff2 +0 -0
  411. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-70-wght-normal.woff2 +0 -0
  412. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-71-wght-normal.woff2 +0 -0
  413. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-72-wght-normal.woff2 +0 -0
  414. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-73-wght-normal.woff2 +0 -0
  415. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-74-wght-normal.woff2 +0 -0
  416. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-75-wght-normal.woff2 +0 -0
  417. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-76-wght-normal.woff2 +0 -0
  418. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-77-wght-normal.woff2 +0 -0
  419. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-78-wght-normal.woff2 +0 -0
  420. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-79-wght-normal.woff2 +0 -0
  421. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-80-wght-normal.woff2 +0 -0
  422. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-81-wght-normal.woff2 +0 -0
  423. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-82-wght-normal.woff2 +0 -0
  424. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-83-wght-normal.woff2 +0 -0
  425. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-84-wght-normal.woff2 +0 -0
  426. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-85-wght-normal.woff2 +0 -0
  427. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-86-wght-normal.woff2 +0 -0
  428. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-87-wght-normal.woff2 +0 -0
  429. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-88-wght-normal.woff2 +0 -0
  430. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-89-wght-normal.woff2 +0 -0
  431. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-90-wght-normal.woff2 +0 -0
  432. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-91-wght-normal.woff2 +0 -0
  433. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-97-wght-normal.woff2 +0 -0
  434. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-98-wght-normal.woff2 +0 -0
  435. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-99-wght-normal.woff2 +0 -0
  436. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-cyrillic-wght-normal.woff2 +0 -0
  437. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-latin-ext-wght-normal.woff2 +0 -0
  438. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-latin-wght-normal.woff2 +0 -0
  439. package/skills/card/assets/fonts/woff2/noto-sans-sc/noto-sans-sc-vietnamese-wght-normal.woff2 +0 -0
  440. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-100-wght-normal.woff2 +0 -0
  441. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-101-wght-normal.woff2 +0 -0
  442. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-102-wght-normal.woff2 +0 -0
  443. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-103-wght-normal.woff2 +0 -0
  444. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-104-wght-normal.woff2 +0 -0
  445. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-105-wght-normal.woff2 +0 -0
  446. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-106-wght-normal.woff2 +0 -0
  447. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-107-wght-normal.woff2 +0 -0
  448. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-108-wght-normal.woff2 +0 -0
  449. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-109-wght-normal.woff2 +0 -0
  450. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-110-wght-normal.woff2 +0 -0
  451. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-111-wght-normal.woff2 +0 -0
  452. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-112-wght-normal.woff2 +0 -0
  453. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-113-wght-normal.woff2 +0 -0
  454. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-114-wght-normal.woff2 +0 -0
  455. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-115-wght-normal.woff2 +0 -0
  456. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-116-wght-normal.woff2 +0 -0
  457. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-117-wght-normal.woff2 +0 -0
  458. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-118-wght-normal.woff2 +0 -0
  459. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-119-wght-normal.woff2 +0 -0
  460. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-21-wght-normal.woff2 +0 -0
  461. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-22-wght-normal.woff2 +0 -0
  462. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-23-wght-normal.woff2 +0 -0
  463. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-24-wght-normal.woff2 +0 -0
  464. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-25-wght-normal.woff2 +0 -0
  465. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-26-wght-normal.woff2 +0 -0
  466. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-27-wght-normal.woff2 +0 -0
  467. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-28-wght-normal.woff2 +0 -0
  468. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-29-wght-normal.woff2 +0 -0
  469. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-30-wght-normal.woff2 +0 -0
  470. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-31-wght-normal.woff2 +0 -0
  471. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-32-wght-normal.woff2 +0 -0
  472. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-33-wght-normal.woff2 +0 -0
  473. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-34-wght-normal.woff2 +0 -0
  474. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-35-wght-normal.woff2 +0 -0
  475. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-36-wght-normal.woff2 +0 -0
  476. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-37-wght-normal.woff2 +0 -0
  477. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-38-wght-normal.woff2 +0 -0
  478. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-39-wght-normal.woff2 +0 -0
  479. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-4-wght-normal.woff2 +0 -0
  480. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-40-wght-normal.woff2 +0 -0
  481. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-41-wght-normal.woff2 +0 -0
  482. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-42-wght-normal.woff2 +0 -0
  483. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-43-wght-normal.woff2 +0 -0
  484. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-44-wght-normal.woff2 +0 -0
  485. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-45-wght-normal.woff2 +0 -0
  486. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-46-wght-normal.woff2 +0 -0
  487. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-47-wght-normal.woff2 +0 -0
  488. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-48-wght-normal.woff2 +0 -0
  489. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-49-wght-normal.woff2 +0 -0
  490. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-5-wght-normal.woff2 +0 -0
  491. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-50-wght-normal.woff2 +0 -0
  492. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-51-wght-normal.woff2 +0 -0
  493. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-52-wght-normal.woff2 +0 -0
  494. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-53-wght-normal.woff2 +0 -0
  495. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-54-wght-normal.woff2 +0 -0
  496. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-55-wght-normal.woff2 +0 -0
  497. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-56-wght-normal.woff2 +0 -0
  498. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-57-wght-normal.woff2 +0 -0
  499. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-58-wght-normal.woff2 +0 -0
  500. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-59-wght-normal.woff2 +0 -0
  501. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-6-wght-normal.woff2 +0 -0
  502. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-60-wght-normal.woff2 +0 -0
  503. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-61-wght-normal.woff2 +0 -0
  504. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-62-wght-normal.woff2 +0 -0
  505. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-63-wght-normal.woff2 +0 -0
  506. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-64-wght-normal.woff2 +0 -0
  507. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-65-wght-normal.woff2 +0 -0
  508. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-66-wght-normal.woff2 +0 -0
  509. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-67-wght-normal.woff2 +0 -0
  510. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-68-wght-normal.woff2 +0 -0
  511. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-69-wght-normal.woff2 +0 -0
  512. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-70-wght-normal.woff2 +0 -0
  513. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-71-wght-normal.woff2 +0 -0
  514. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-72-wght-normal.woff2 +0 -0
  515. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-73-wght-normal.woff2 +0 -0
  516. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-74-wght-normal.woff2 +0 -0
  517. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-75-wght-normal.woff2 +0 -0
  518. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-76-wght-normal.woff2 +0 -0
  519. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-77-wght-normal.woff2 +0 -0
  520. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-78-wght-normal.woff2 +0 -0
  521. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-79-wght-normal.woff2 +0 -0
  522. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-80-wght-normal.woff2 +0 -0
  523. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-81-wght-normal.woff2 +0 -0
  524. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-82-wght-normal.woff2 +0 -0
  525. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-83-wght-normal.woff2 +0 -0
  526. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-84-wght-normal.woff2 +0 -0
  527. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-85-wght-normal.woff2 +0 -0
  528. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-86-wght-normal.woff2 +0 -0
  529. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-87-wght-normal.woff2 +0 -0
  530. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-88-wght-normal.woff2 +0 -0
  531. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-89-wght-normal.woff2 +0 -0
  532. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-90-wght-normal.woff2 +0 -0
  533. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-91-wght-normal.woff2 +0 -0
  534. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-97-wght-normal.woff2 +0 -0
  535. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-98-wght-normal.woff2 +0 -0
  536. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-99-wght-normal.woff2 +0 -0
  537. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-cyrillic-wght-normal.woff2 +0 -0
  538. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-latin-ext-wght-normal.woff2 +0 -0
  539. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-latin-wght-normal.woff2 +0 -0
  540. package/skills/card/assets/fonts/woff2/noto-serif-sc/noto-serif-sc-vietnamese-wght-normal.woff2 +0 -0
  541. package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-cyrillic-ext-wght-normal.woff2 +0 -0
  542. package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-cyrillic-wght-normal.woff2 +0 -0
  543. package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-greek-wght-normal.woff2 +0 -0
  544. package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-latin-ext-wght-normal.woff2 +0 -0
  545. package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-latin-wght-normal.woff2 +0 -0
  546. package/skills/card/assets/fonts/woff2/source-serif-4/source-serif-4-vietnamese-wght-normal.woff2 +0 -0
  547. package/skills/card/assets/fonts/woff2/space-grotesk/space-grotesk-latin-ext-wght-normal.woff2 +0 -0
  548. package/skills/card/assets/fonts/woff2/space-grotesk/space-grotesk-latin-wght-normal.woff2 +0 -0
  549. package/skills/card/assets/fonts/woff2/space-grotesk/space-grotesk-vietnamese-wght-normal.woff2 +0 -0
  550. package/skills/card/assets/fonts/woff2/spectral/spectral-cyrillic-400-normal.woff2 +0 -0
  551. package/skills/card/assets/fonts/woff2/spectral/spectral-cyrillic-ext-400-normal.woff2 +0 -0
  552. package/skills/card/assets/fonts/woff2/spectral/spectral-latin-400-normal.woff2 +0 -0
  553. package/skills/card/assets/fonts/woff2/spectral/spectral-latin-ext-400-normal.woff2 +0 -0
  554. package/skills/card/assets/fonts/woff2/spectral/spectral-vietnamese-400-normal.woff2 +0 -0
  555. package/skills/card/assets/fonts/woff2/spectral-600/spectral-cyrillic-600-normal.woff2 +0 -0
  556. package/skills/card/assets/fonts/woff2/spectral-600/spectral-cyrillic-ext-600-normal.woff2 +0 -0
  557. package/skills/card/assets/fonts/woff2/spectral-600/spectral-latin-600-normal.woff2 +0 -0
  558. package/skills/card/assets/fonts/woff2/spectral-600/spectral-latin-ext-600-normal.woff2 +0 -0
  559. package/skills/card/assets/fonts/woff2/spectral-600/spectral-vietnamese-600-normal.woff2 +0 -0
  560. package/skills/card/assets/fonts/woff2/spectral-800/spectral-cyrillic-800-normal.woff2 +0 -0
  561. package/skills/card/assets/fonts/woff2/spectral-800/spectral-cyrillic-ext-800-normal.woff2 +0 -0
  562. package/skills/card/assets/fonts/woff2/spectral-800/spectral-latin-800-normal.woff2 +0 -0
  563. package/skills/card/assets/fonts/woff2/spectral-800/spectral-latin-ext-800-normal.woff2 +0 -0
  564. package/skills/card/assets/fonts/woff2/spectral-800/spectral-vietnamese-800-normal.woff2 +0 -0
  565. package/skills/card/references/design-languages.md +2 -0
  566. package/skills/card/references/fonts-preview.html +450 -0
  567. package/skills/card/references/fonts.md +151 -0
  568. package/skills/card/references/taste.md +2 -2
  569. package/skills/card/references/themes/presets.md +1 -1
  570. package/skills/card/scripts/download-fonts.sh +240 -0
  571. package/skills/card/scripts/render-cards.mjs +3 -0
@@ -2,25 +2,60 @@
2
2
  * VoxFlow CLI — FFmpeg utility layer
3
3
  *
4
4
  * Provides ffmpeg/ffprobe operations via child_process.execFile.
5
- * Zero external dependencies requires ffmpeg to be installed on PATH.
6
- * Also provides a one-time dependency hint for users without FFmpeg.
5
+ * Prefers system FFmpeg on PATH; falls back to `ffmpeg-static` (npm)
6
+ * when available, so users can `npm install` without system dependency.
7
7
  */
8
8
 
9
9
  const { execFile } = require('child_process');
10
10
  const path = require('path');
11
11
  const fs = require('fs');
12
12
 
13
+ // ── FFmpeg binary resolution ────────────────────────────────────────────────
14
+
15
+ let _resolvedFfmpegPath = null;
16
+
17
+ /**
18
+ * Resolve the ffmpeg binary path. Priority:
19
+ * 1. System `ffmpeg` on PATH
20
+ * 2. `ffmpeg-static` npm package (optional dependency)
21
+ */
22
+ function resolveFfmpegBin() {
23
+ if (_resolvedFfmpegPath) return _resolvedFfmpegPath;
24
+
25
+ // Try system ffmpeg first (faster, no extra dep)
26
+ try {
27
+ require('child_process').execFileSync('ffmpeg', ['-version'], { stdio: 'ignore' });
28
+ _resolvedFfmpegPath = 'ffmpeg';
29
+ return _resolvedFfmpegPath;
30
+ } catch { /* not on PATH */ }
31
+
32
+ // Fall back to ffmpeg-static
33
+ try {
34
+ const staticPath = require('ffmpeg-static');
35
+ if (staticPath && fs.existsSync(staticPath)) {
36
+ _resolvedFfmpegPath = staticPath;
37
+ return _resolvedFfmpegPath;
38
+ }
39
+ } catch { /* not installed */ }
40
+
41
+ // Nothing found — return 'ffmpeg' and let it fail with a helpful error
42
+ _resolvedFfmpegPath = 'ffmpeg';
43
+ return _resolvedFfmpegPath;
44
+ }
45
+
13
46
  /**
14
47
  * Run a command via execFile and return { stdout, stderr }.
15
48
  * Rejects on non-zero exit code or spawn error.
49
+ * Automatically resolves 'ffmpeg' to the best available binary.
16
50
  * @param {string} cmd
17
51
  * @param {string[]} args
18
52
  * @param {object} [opts]
19
53
  * @returns {Promise<{stdout: string, stderr: string}>}
20
54
  */
21
55
  function runCommand(cmd, args, opts) {
56
+ const resolvedCmd = cmd === 'ffmpeg' ? resolveFfmpegBin() : cmd;
22
57
  return new Promise((resolve, reject) => {
23
- execFile(cmd, args, { timeout: 600_000, ...opts }, (error, stdout, stderr) => {
58
+ execFile(resolvedCmd, args, { timeout: 600_000, ...opts }, (error, stdout, stderr) => {
24
59
  if (error) {
25
60
  error.stderr = stderr;
26
61
  error.stdout = stdout;
@@ -34,13 +69,16 @@ function runCommand(cmd, args, opts) {
34
69
 
35
70
  /**
36
71
  * Check if ffmpeg and ffprobe are available.
37
- * @returns {Promise<{available: boolean, version?: string, ffprobeAvailable?: boolean}>}
72
+ * Uses the auto-resolved binary path (system or ffmpeg-static).
73
+ * @returns {Promise<{available: boolean, version?: string, ffprobeAvailable?: boolean, source?: string}>}
38
74
  */
39
75
  async function checkFfmpeg() {
76
+ const bin = resolveFfmpegBin();
40
77
  try {
41
78
  const { stdout } = await runCommand('ffmpeg', ['-version']);
42
79
  const versionMatch = stdout.match(/ffmpeg version (\S+)/);
43
80
  const version = versionMatch ? versionMatch[1] : 'unknown';
81
+ const source = bin === 'ffmpeg' ? 'system' : 'ffmpeg-static';
44
82
 
45
83
  // Also check ffprobe
46
84
  let ffprobeOk = false;
@@ -55,6 +93,7 @@ async function checkFfmpeg() {
55
93
  available: true,
56
94
  version,
57
95
  ffprobeAvailable: ffprobeOk,
96
+ source,
58
97
  };
59
98
  } catch {
60
99
  return { available: false };
@@ -363,19 +402,43 @@ async function replaceAudio(videoInput, audioInput, output) {
363
402
  * @param {string[]} inputs - Array of input video file paths
364
403
  * @param {string} output - Output concatenated video path
365
404
  */
366
- async function concatVideos(inputs, output) {
405
+ async function concatVideos(inputs, output, opts = {}) {
406
+ const { remux = false } = opts;
367
407
  const tmpDir = path.dirname(output);
368
408
  const listFile = path.join(tmpDir, `concat-list-${Date.now()}.txt`);
369
409
  const content = inputs.map(f => `file '${path.resolve(f)}'`).join('\n');
370
410
  fs.writeFileSync(listFile, content, 'utf8');
371
411
 
372
412
  try {
373
- await runCommand('ffmpeg', [
374
- '-f', 'concat', '-safe', '0',
375
- '-i', listFile,
376
- '-c', 'copy',
377
- '-y', path.resolve(output),
378
- ]);
413
+ if (remux) {
414
+ // Two-pass: concat then remux to strip AAC priming edit list
415
+ // (fixes macOS QuickTime showing black on first frame)
416
+ const rawOutput = path.resolve(output) + '.tmp.mp4';
417
+ await runCommand('ffmpeg', [
418
+ '-f', 'concat', '-safe', '0',
419
+ '-i', listFile,
420
+ '-c', 'copy',
421
+ '-movflags', '+faststart',
422
+ '-y', rawOutput,
423
+ ]);
424
+ await runCommand('ffmpeg', [
425
+ '-ss', '0',
426
+ '-i', rawOutput,
427
+ '-c', 'copy',
428
+ '-movflags', '+faststart',
429
+ '-y', path.resolve(output),
430
+ ]);
431
+ try { fs.unlinkSync(rawOutput); } catch {}
432
+ } else {
433
+ // Single-pass concat (default, used by picstory/present/summarize)
434
+ await runCommand('ffmpeg', [
435
+ '-f', 'concat', '-safe', '0',
436
+ '-i', listFile,
437
+ '-c', 'copy',
438
+ '-movflags', '+faststart',
439
+ '-y', path.resolve(output),
440
+ ]);
441
+ }
379
442
  } finally {
380
443
  try { fs.unlinkSync(listFile); } catch {}
381
444
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "voxflow",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "AI audio content creation CLI — stories, podcasts, narration, dubbing, transcription, translation, and video translation with TTS",
5
5
  "bin": {
6
6
  "voxflow": "./dist/index.js"
@@ -51,7 +51,7 @@
51
51
  "lint:fix": "eslint lib/ bin/ tests/ --fix",
52
52
  "test": "node --test tests/*.test.js",
53
53
  "test:watch": "node --test --watch tests/*.test.js",
54
- "version": "node scripts/sync-plugin-versions.js && git add .claude-plugin/plugin.json .cursor-plugin/plugin.json .codex-plugin/plugin.json"
54
+ "version": "node scripts/sync-plugin-versions.js && git add .claude-plugin/plugin.json .cursor-plugin/plugin.json .codex-plugin/plugin.json skills/.claude-plugin/plugin.json"
55
55
  },
56
56
  "author": "gonghaoran",
57
57
  "homepage": "https://voxflow.studio",
@@ -68,5 +68,8 @@
68
68
  "@remotion/bundler": "4.0.448",
69
69
  "@vercel/ncc": "^0.38.4",
70
70
  "eslint": "^9.39.4"
71
+ },
72
+ "optionalDependencies": {
73
+ "ffmpeg-static": "^5.3.0"
71
74
  }
72
75
  }
@@ -9,7 +9,7 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "voxflow",
12
- "description": "AI voice CLI bundled as 6 skills. TTS in 200+ voices across 40+ languages, multi-speaker AI podcasts, audio/video transcription with word-level timestamps, SRT-driven dubbing, end-to-end video translation, long-article → vertical card video reels via Remotion, and turning text into polished shareable card images. Backed by a hosted TTS/ASR/LLM/render service with per-user quota (free tier 10K/mo).",
12
+ "description": "AI voice CLI bundled as 6 skills. TTS in 200+ voices across 40+ languages, multi-speaker AI podcasts, audio/video transcription with word-level timestamps, SRT-driven dubbing, end-to-end video translation, long-article → vertical card video reels via Remotion, and turning text into polished shareable card images or narrated card videos. Backed by a hosted TTS/ASR/LLM/render service with per-user quota (free tier 10K/mo).",
13
13
  "category": "productivity",
14
14
  "source": "./",
15
15
  "homepage": "https://voxflow.studio",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "voxflow",
3
- "version": "1.16.0",
4
- "description": "AI voice CLI bundled as 6 skills (hub, podcast, transcribe, video, slice, card). Synthesize speech in 200+ voices across 40+ languages, generate multi-speaker AI podcasts, transcribe audio/video with word-level timestamps, dub videos from SRT subtitles, run end-to-end video translation, turn long articles into vertical card video reels via Remotion, and turn text into polished shareable card images. Backed by a hosted TTS/ASR/LLM/render service with per-user quota (free tier 10K/mo).",
3
+ "version": "1.17.0",
4
+ "description": "AI voice CLI bundled as 6 skills (hub, podcast, transcribe, video, slice, card). Synthesize speech in 200+ voices across 40+ languages, generate multi-speaker AI podcasts, transcribe audio/video with word-level timestamps, dub videos from SRT subtitles, run end-to-end video translation, turn long articles into vertical card video reels via Remotion, and turn text into polished shareable card images or narrated card videos. Backed by a hosted TTS/ASR/LLM/render service with per-user quota (free tier 10K/mo).",
5
5
  "author": {
6
6
  "name": "VoxFlow",
7
7
  "url": "https://voxflow.studio"
package/skills/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  ![VoxFlow CLI demo](https://github.com/VoxFlowStudio/skills/raw/main/demo.gif)
9
9
 
10
- Voice in your AI workflow. Six skills that let any AI coding agent (Claude Code · Cursor · Codex · Gemini CLI · Cline) speak in 200+ voices, generate podcasts, dub videos, transcribe audio, and turn text into card images — through one CLI.
10
+ Voice in your AI workflow. Six skills that let any AI coding agent (Claude Code · Cursor · Codex · Gemini CLI · Cline) speak in 200+ voices, generate podcasts, dub videos, transcribe audio, and turn text into card images or narrated card videos — through one CLI.
11
11
 
12
12
  **Why VoxFlow over a raw TTS API?** One CLI handles auth, voice search, multi-speaker dialogue, video pipelines, and quota. The skills layer makes it native to whichever agent you're already using — no new context-switch.
13
13
 
@@ -51,7 +51,7 @@ Six focused skills, each loaded on demand:
51
51
  | **transcribe** | `voxflow:transcribe` | `asr` · `asr-jobs` · `translate` · `dub` · `video-translate` · `summarize` · `publish` |
52
52
  | **video** | `voxflow:video` | `picstory` · `present` · `slides` · `explain` · `image` |
53
53
  | **slice** | `voxflow:slice` | Article → vertical card video (1080×1920); 13 editorial / poster / magazine themes |
54
- | **card** | `voxflow:card` | Text → shareable card images (HTML/CSS + Playwright); 1:1 / 3:4 / 9:16, editorial design system |
54
+ | **card** | `voxflow:card` | Text → shareable card images (HTML/CSS + Playwright); 1:1 / 3:4 / 9:16, editorial design system. Optional narrated MP4 video via `voxflow card render` (TTS + FFmpeg, in-project output) |
55
55
 
56
56
  Use the hub skill as the starting point — it routes to the others automatically.
57
57
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: card
3
- description: Use when the user wants to turn text content into a set of polished, shareable visual CARD IMAGES — knowledge cards, quote cards, 小红书图文, carousel cards, poster cards — rendered as HTML/CSS and exported via Playwright at ratios like 1:1 / 3:4 / 9:16. Triggers: card / 卡片 / 知识卡 / 文字卡片 / 金句卡 / 图文卡片 / 卡片生成 / make cards. For article → vertical card VIDEO use voxflow:slice; for short videos / AI clips use voxflow:video; for podcasts use voxflow:podcast.
3
+ description: "Use when the user wants to turn text content into a set of polished, shareable visual CARD IMAGES or narrated card VIDEOS — knowledge cards, quote cards, 小红书图文, carousel cards, poster cards — rendered as HTML/CSS and exported via Playwright at ratios like 1:1 / 3:4 / 9:16; optionally produces narrated MP4 video from those cards via `voxflow card render` (Ken Burns + TTS). Triggers: card / 卡片 / 知识卡 / 文字卡片 / 金句卡 / 图文卡片 / 卡片生成 / make cards / card video / 卡片视频. For article → Slice-themed card VIDEO use voxflow:slice; for short videos / AI clips use voxflow:video; for podcasts use voxflow:podcast."
4
4
  ---
5
5
 
6
6
  # VoxFlow Skill — Card
@@ -66,7 +66,8 @@ Collect or infer:
66
66
  - `content`: source text, outline, notes, URL, topic, or brief.
67
67
  - `ratio`: default to `1:1` unless the user requests `3:4`, `9:16`, or another ratio.
68
68
  - `count`: default to an automatic count based on content density; accept explicit quantities.
69
- - `style`: accept explicit style directions, brand constraints, audience, mood, language, and platform.
69
+ - `style`: accept explicit style directions, brand constraints, audience, mood, and platform.
70
+ - `content-language`: zh / en / mixed. Infer from the source; ask only when ambiguous and it would change font selection. Drives the language override in `references/fonts.md`.
70
71
  - `output`: choose a clear local folder such as `cards/<slug>/` unless the user specifies one.
71
72
 
72
73
  If important facts may be current or disputed, search or verify before planning. Keep source attribution available for the user when research affects the content. See the Research & Fact Confirmation section for when this becomes a full deep-research pass instead of a quick check.
@@ -178,6 +179,19 @@ When asking the user to choose a style, do not present only one recommendation p
178
179
  - a one-line visual description;
179
180
  - the internal theme preset and design-language mapping.
180
181
 
182
+ Use a two-layer selection logic so outputs stay appropriate without collapsing into the same few looks:
183
+
184
+ 1. Default recommendation layer:
185
+ - Offer 3-5 high-fit styles based on content type, platform, audience, and sharing goal.
186
+ - Keep the recommended set close enough to the user's task that any option can succeed without heavy rework.
187
+ - Prefer options that differ in visible outcome, not just token names. For example: conservative report, data poster, social notebook, magazine explainer, bold opinion.
188
+
189
+ 2. Variant perturbation layer:
190
+ - When the user has not strongly specified an exact style, rotate within the compatible family instead of always selecting the top default.
191
+ - Vary at least two of these dimensions across similar tasks: theme preset, primary design language, modifiers, layout recipes, visual anchors, surface metaphor, or title composition.
192
+ - Keep perturbations semantically compatible with the content. Do not use random novelty that fights the topic, platform, accessibility, or factual clarity.
193
+ - Record the final selected combination in the concept plan or `sources.md` / `credits.md` so the variation is inspectable.
194
+
181
195
  Use user-facing scenario labels such as:
182
196
 
183
197
  - Engineering infographic: map to `engineering-paper`, `product-manual`, or `porcelain-research`.
@@ -294,8 +308,11 @@ Use `references/design-languages.md` to define the card set's visual grammar ind
294
308
  4. Pick the theme preset and design language, then build the layout plan.
295
309
  - Load `references/taste.md` now and read it as an active checklist; the hard constraints apply to every subsequent design decision in this step.
296
310
  - Confirm or revisit the theme preset chosen in step 1 against the taste baseline; if a preset would violate a hard constraint, swap it before continuing.
311
+ - Apply the two-layer style selection logic: first choose from the high-fit recommendation set, then apply a compatible variant perturbation when the user did not specify an exact style.
312
+ - The perturbation must affect the visible result, not only metadata. Rotate layout recipes, visual anchors, surface metaphors, and composition moves alongside theme / design-language tokens.
297
313
  - Assign one concrete layout recipe per card. For stronger design work, use `references/layouts/card-layouts.md`; for magazine/editorial cards, also use `references/magazine-card-adaptations.md`.
298
314
  - Assign a design-language combination when the style is open or the user wants more design variation. Load the individual spec file for the selected primary language from `references/design-languages/<name>.md`.
315
+ - Load `references/fonts.md` and run its font-selection algorithm: from the chosen preset × design-language × content-language, take the per-role candidate pools, apply hard-constraint filtering, then weighted-random pick one font per role for the whole set (seed the randomness with the output slug so a given set is reproducible but different topics vary). Record the selected display/serif/sans/mono families in `sources.md`.
299
316
  - For each card, identify the visual anchor and composition move before writing body copy. If the card is only text blocks, equal boxes, or a background grid, either choose a stronger layout or deliberately mark it as a low-design utility card.
300
317
  - Respect low-density primary language limits by moving detail to another card in the set, not by overloading `swiss-poster`, `cinematic-still`, quote, cover, or closer cards.
301
318
 
@@ -313,7 +330,7 @@ Use `references/design-languages.md` to define the card set's visual grammar ind
313
330
  6. Build the card webpages.
314
331
  - Create one HTML page per card, named predictably such as `card-01.html`, `card-02.html`.
315
332
  - Use one shared CSS file or shared design tokens so size, typography, spacing, palette, border radius, and component styling stay consistent.
316
- - Choose fonts and colors that satisfy `references/taste.md`: do not default to Inter, do not use pure black, and avoid generic AI purple-blue gradients or neon glow effects.
333
+ - Choose fonts via the `references/fonts.md` selection algorithm decided in step 4; embed them locally by importing `assets/fonts/fonts.css` (or copying the used fonts into `cards/<slug>/assets/fonts/` and referencing them with local `@font-face`). Never load fonts from a CDN. Choose colors that satisfy `references/taste.md`: do not default to Inter, do not use pure black, and avoid generic AI purple-blue gradients or neon glow effects.
317
334
  - Set an explicit fixed canvas size derived from the ratio. Recommended bases:
318
335
  - `1:1`: `1080x1080`
319
336
  - `3:4`: `1080x1440`
@@ -347,6 +364,65 @@ Use `references/design-languages.md` to define the card set's visual grammar ind
347
364
  - Default to 2x screenshot exports for sharpness. A `1080x1080` card should export as a `2160x2160` PNG unless the user explicitly asks for smaller files or `--scale 1`.
348
365
  - Provide the user with the output paths and a concise summary of the final ratio, count, and style.
349
366
 
367
+ 9. Write `deck.json` for video export (required when the user asks for video/narration).
368
+ - After all HTML cards are finalized and PNGs exported, write a `deck.json` in the output directory.
369
+ - This file drives TTS narration synthesis and video rendering in the next step.
370
+ - Format:
371
+
372
+ ```json
373
+ {
374
+ "meta": {
375
+ "title": "<Series title>",
376
+ "ratio": "<ratio used: 9:16 | 1:1 | 3:4>",
377
+ "language": "<zh | en>"
378
+ },
379
+ "cards": [
380
+ { "file": "card-01.html", "title": "...", "narration": "1-3 sentence spoken caption." },
381
+ { "file": "card-02.html", "title": "...", "narration": "..." }
382
+ ]
383
+ }
384
+ ```
385
+
386
+ - Narration rules:
387
+ - Write narration in the same language as the card copy.
388
+ - 1-3 sentences per card. Natural spoken rhythm — avoid lists, avoid bullet-speak.
389
+ - Don't restate the visual; add context, interpretation, or the key takeaway.
390
+ - Each card's narration should be understandable when heard without the image.
391
+ - Also add `data-narration="..."` to the `.card` element in every HTML file for transparency.
392
+ - Skip this step when the user explicitly asked for images only (no video).
393
+
394
+ 10. Render video (optional — only when user asked for video/narration output).
395
+ - After PNGs exist in `exports/` and `deck.json` is written:
396
+
397
+ ```bash
398
+ voxflow card render <output-dir>/
399
+ ```
400
+
401
+ - **Output directory structure** after render:
402
+ ```
403
+ cards/my-topic/
404
+ ├── card-01.html … card-N.html (source HTML)
405
+ ├── deck.json (narration + metadata)
406
+ ├── exports/card-01.png … (PNG exports)
407
+ ├── sources.md (attribution)
408
+ └── my-topic.mp4 (final video — default output here)
409
+ ```
410
+
411
+ - **Key parameters** (pick based on user preference):
412
+ - `--voice <id>` — TTS voice. Suggest `voxflow voices` to browse.
413
+ - `--speed <n>` — narration speed 0.5-2.0 (default: 1.0)
414
+ - `--pause <sec>` — silence after each card's narration for reading time (default: 2.5)
415
+ - `--hold <sec>` — card duration in `--no-audio` mode (default: 5)
416
+ - `--bgm <path>` — background music file (loops at low volume)
417
+ - `--no-audio` — skip TTS, produce silent video
418
+ - `--no-intro` / `--no-outro` — skip title/branding cards
419
+ - `-o <path>` — custom output path
420
+
421
+ - Default output: `<dir>/<deck title>.mp4` (next to the cards).
422
+ - No external dependencies beyond FFmpeg (auto-detected; `ffmpeg-static` as fallback).
423
+ - Intermediate files (WAVs, clips) stored in `<dir>/.card-render-work/` — auto-cleaned on success, preserved on failure for debugging.
424
+ - For article-to-card VIDEO with Slice themes (paper-slide, editorial-mag, etc.), prefer `voxflow:slice` instead.
425
+
350
426
  ## Asset and Source Discipline
351
427
 
352
428
  - Keep generated files contained in the requested output folder.
@@ -392,7 +468,7 @@ npx playwright install chromium
392
468
  - Use concept variations before coding when style is ambiguous or the card set is high-impact.
393
469
  - Define theme tokens first: background, surface levels, border levels, text levels, accent trio, semantic colors, gradients, radius, shadow, and fonts.
394
470
  - Use tokens in component CSS. Avoid scattering literal colors outside the token block unless a one-off asset or data visualization genuinely requires it.
395
- - Do not use Inter as the default card font. Prefer Geist, Satoshi, Cabinet Grotesk, Outfit, Avenir Next, high-quality system sans, or appropriate serif/mono choices for the selected design language.
471
+ - Do not use Inter as the default card font. Select concrete fonts via the weighted-random algorithm in `references/fonts.md` (preset × design-language × content-language → per-role pick). Do not hardcode a font list here; `references/fonts.md` is the single source of truth. Avenir Next and other paid/system fonts are disallowed because every font must be locally embeddable.
396
472
  - Do not use pure black. Use off-black, charcoal, zinc-like darks, or ink colors.
397
473
  - Do not copy external theme CSS wholesale. Recreate the needed palette and behavior in the local card style, and keep source inspiration in `sources.md` or `credits.md` when relevant.
398
474
  - Avoid one-note palettes unless the user explicitly asks for a monochrome look.
@@ -405,6 +481,6 @@ npx playwright install chromium
405
481
  - Prefer semantic HTML and CSS over canvas for card content unless the visual requires custom drawing.
406
482
  - Keep assets and source attribution inside the output folder.
407
483
  - Keep letter spacing at `0` unless the file's existing design system clearly requires uppercase tracking; do not use negative letter spacing.
408
- - For editorial layouts, manually control long Chinese title breaks and keep dense body copy in sans-serif; reserve serif/display type for headlines, quotes, and numbers.
484
+ - For technical or dense cards, keep body copy in sans-serif and reserve serif/display type for headlines, quotes, and numbers. Editorial/literary presets (`magazine-eink`, `field-notes`, `kraft-editorial`) may use serif or kai (楷体) body per `references/fonts.md`. For editorial layouts, manually control long Chinese title breaks regardless of the body typeface.
409
485
  - For image-heavy cards, standardize image ratios or frame heights inside each group, crop from the bottom when using `cover`, and use `contain` for diagrams or text-bearing screenshots.
410
486
  - Do not skip visual verification. The final answer must state whether rendering and export succeeded.
@@ -0,0 +1,29 @@
1
+ # Font bundle manifest (download-fonts.sh)
2
+
3
+ | family | path | files | size | license |
4
+ |---|---|---|---|---|
5
+ | Geist | geist | 3 | 57KB | OFL/ITF |
6
+ | Geist Mono | geist-mono | 3 | 56KB | OFL/ITF |
7
+ | Space Grotesk | space-grotesk | 3 | 47KB | OFL/ITF |
8
+ | Newsreader | newsreader | 3 | 104KB | OFL/ITF |
9
+ | Source Serif 4 | source-serif-4 | 6 | 177KB | OFL/ITF |
10
+ | Spectral | spectral | 5 | 70KB | OFL/ITF |
11
+ | Spectral | spectral-600 | 5 | 74KB | OFL/ITF |
12
+ | Spectral | spectral-800 | 5 | 71KB | OFL/ITF |
13
+ | IBM Plex Mono | ibm-plex-mono | 5 | 48KB | OFL/ITF |
14
+ | IBM Plex Mono | ibm-plex-mono-500 | 5 | 49KB | OFL/ITF |
15
+ | IBM Plex Mono | ibm-plex-mono-600 | 5 | 53KB | OFL/ITF |
16
+ | Libre Caslon Display | libre-caslon-display | 2 | 40KB | OFL/ITF |
17
+ | Noto Sans SC | noto-sans-sc | 101 | 4MB | OFL/ITF |
18
+ | Noto Serif SC | noto-serif-sc | 101 | 6MB | OFL/ITF |
19
+ | lxgw-wenkai | packages/lxgw-wenkai | 194 | 8MB | OFL |
20
+ | smiley-sans | packages/smiley-sans | 80 | 1MB | OFL |
21
+ | Satoshi | fontshare/satoshi | 1 | 42KB | ITF-FFL |
22
+ | General Sans | fontshare/general-sans | 1 | 37KB | ITF-FFL |
23
+ | Cabinet Grotesk | fontshare/cabinet-grotesk | 1 | 41KB | ITF-FFL |
24
+
25
+ **Total bundle: 20MB**
26
+
27
+ Not bundled (license forbids repo redistribution; system-font fallback only):
28
+ HarmonyOS Sans SC, Alibaba PuHuiTi 3.0, KingHwa OldSong, Zhuque Fangsong, Sarasa Mono SC.
29
+ Sarasa Mono SC / Zhuque Fangsong are OFL but lack a clean woff2 source; add manually if needed.
@@ -0,0 +1,2 @@
1
+ /* Cabinet Grotesk — Fontshare, ITF Free Font License */
2
+ @font-face{font-family:'Cabinet Grotesk';font-style:normal;font-display:swap;font-weight:100 900;src:url(../woff2/fontshare/cabinet-grotesk.woff2) format('woff2');}
@@ -0,0 +1,29 @@
1
+ /* geist-mono-cyrillic-wght-normal */
2
+ @font-face {
3
+ font-family: 'Geist Mono';
4
+ font-style: normal;
5
+ font-display: swap;
6
+ font-weight: 100 900;
7
+ src: url(../woff2/geist-mono/geist-mono-cyrillic-wght-normal.woff2) format('woff2-variations');
8
+ unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
9
+ }
10
+
11
+ /* geist-mono-latin-ext-wght-normal */
12
+ @font-face {
13
+ font-family: 'Geist Mono';
14
+ font-style: normal;
15
+ font-display: swap;
16
+ font-weight: 100 900;
17
+ src: url(../woff2/geist-mono/geist-mono-latin-ext-wght-normal.woff2) format('woff2-variations');
18
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
19
+ }
20
+
21
+ /* geist-mono-latin-wght-normal */
22
+ @font-face {
23
+ font-family: 'Geist Mono';
24
+ font-style: normal;
25
+ font-display: swap;
26
+ font-weight: 100 900;
27
+ src: url(../woff2/geist-mono/geist-mono-latin-wght-normal.woff2) format('woff2-variations');
28
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
29
+ }
@@ -0,0 +1,29 @@
1
+ /* geist-cyrillic-wght-normal */
2
+ @font-face {
3
+ font-family: 'Geist';
4
+ font-style: normal;
5
+ font-display: swap;
6
+ font-weight: 100 900;
7
+ src: url(../woff2/geist/geist-cyrillic-wght-normal.woff2) format('woff2-variations');
8
+ unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
9
+ }
10
+
11
+ /* geist-latin-ext-wght-normal */
12
+ @font-face {
13
+ font-family: 'Geist';
14
+ font-style: normal;
15
+ font-display: swap;
16
+ font-weight: 100 900;
17
+ src: url(../woff2/geist/geist-latin-ext-wght-normal.woff2) format('woff2-variations');
18
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
19
+ }
20
+
21
+ /* geist-latin-wght-normal */
22
+ @font-face {
23
+ font-family: 'Geist';
24
+ font-style: normal;
25
+ font-display: swap;
26
+ font-weight: 100 900;
27
+ src: url(../woff2/geist/geist-latin-wght-normal.woff2) format('woff2-variations');
28
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
29
+ }
@@ -0,0 +1,2 @@
1
+ /* General Sans — Fontshare, ITF Free Font License */
2
+ @font-face{font-family:'General Sans';font-style:normal;font-display:swap;font-weight:200 700;src:url(../woff2/fontshare/general-sans.woff2) format('woff2');}
@@ -0,0 +1,49 @@
1
+ /* ibm-plex-mono-cyrillic-ext-500-normal */
2
+ @font-face {
3
+ font-family: 'IBM Plex Mono';
4
+ font-style: normal;
5
+ font-display: swap;
6
+ font-weight: 500;
7
+ src: url(../woff2/ibm-plex-mono-500/ibm-plex-mono-cyrillic-ext-500-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-cyrillic-ext-500-normal.woff) format('woff');
8
+ unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
9
+ }
10
+
11
+ /* ibm-plex-mono-cyrillic-500-normal */
12
+ @font-face {
13
+ font-family: 'IBM Plex Mono';
14
+ font-style: normal;
15
+ font-display: swap;
16
+ font-weight: 500;
17
+ src: url(../woff2/ibm-plex-mono-500/ibm-plex-mono-cyrillic-500-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-cyrillic-500-normal.woff) format('woff');
18
+ unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
19
+ }
20
+
21
+ /* ibm-plex-mono-vietnamese-500-normal */
22
+ @font-face {
23
+ font-family: 'IBM Plex Mono';
24
+ font-style: normal;
25
+ font-display: swap;
26
+ font-weight: 500;
27
+ src: url(../woff2/ibm-plex-mono-500/ibm-plex-mono-vietnamese-500-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-vietnamese-500-normal.woff) format('woff');
28
+ unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
29
+ }
30
+
31
+ /* ibm-plex-mono-latin-ext-500-normal */
32
+ @font-face {
33
+ font-family: 'IBM Plex Mono';
34
+ font-style: normal;
35
+ font-display: swap;
36
+ font-weight: 500;
37
+ src: url(../woff2/ibm-plex-mono-500/ibm-plex-mono-latin-ext-500-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-latin-ext-500-normal.woff) format('woff');
38
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
39
+ }
40
+
41
+ /* ibm-plex-mono-latin-500-normal */
42
+ @font-face {
43
+ font-family: 'IBM Plex Mono';
44
+ font-style: normal;
45
+ font-display: swap;
46
+ font-weight: 500;
47
+ src: url(../woff2/ibm-plex-mono-500/ibm-plex-mono-latin-500-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-latin-500-normal.woff) format('woff');
48
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
49
+ }
@@ -0,0 +1,49 @@
1
+ /* ibm-plex-mono-cyrillic-ext-600-normal */
2
+ @font-face {
3
+ font-family: 'IBM Plex Mono';
4
+ font-style: normal;
5
+ font-display: swap;
6
+ font-weight: 600;
7
+ src: url(../woff2/ibm-plex-mono-600/ibm-plex-mono-cyrillic-ext-600-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-cyrillic-ext-600-normal.woff) format('woff');
8
+ unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
9
+ }
10
+
11
+ /* ibm-plex-mono-cyrillic-600-normal */
12
+ @font-face {
13
+ font-family: 'IBM Plex Mono';
14
+ font-style: normal;
15
+ font-display: swap;
16
+ font-weight: 600;
17
+ src: url(../woff2/ibm-plex-mono-600/ibm-plex-mono-cyrillic-600-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-cyrillic-600-normal.woff) format('woff');
18
+ unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
19
+ }
20
+
21
+ /* ibm-plex-mono-vietnamese-600-normal */
22
+ @font-face {
23
+ font-family: 'IBM Plex Mono';
24
+ font-style: normal;
25
+ font-display: swap;
26
+ font-weight: 600;
27
+ src: url(../woff2/ibm-plex-mono-600/ibm-plex-mono-vietnamese-600-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-vietnamese-600-normal.woff) format('woff');
28
+ unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
29
+ }
30
+
31
+ /* ibm-plex-mono-latin-ext-600-normal */
32
+ @font-face {
33
+ font-family: 'IBM Plex Mono';
34
+ font-style: normal;
35
+ font-display: swap;
36
+ font-weight: 600;
37
+ src: url(../woff2/ibm-plex-mono-600/ibm-plex-mono-latin-ext-600-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-latin-ext-600-normal.woff) format('woff');
38
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
39
+ }
40
+
41
+ /* ibm-plex-mono-latin-600-normal */
42
+ @font-face {
43
+ font-family: 'IBM Plex Mono';
44
+ font-style: normal;
45
+ font-display: swap;
46
+ font-weight: 600;
47
+ src: url(../woff2/ibm-plex-mono-600/ibm-plex-mono-latin-600-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-latin-600-normal.woff) format('woff');
48
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
49
+ }
@@ -0,0 +1,49 @@
1
+ /* ibm-plex-mono-cyrillic-ext-400-normal */
2
+ @font-face {
3
+ font-family: 'IBM Plex Mono';
4
+ font-style: normal;
5
+ font-display: swap;
6
+ font-weight: 400;
7
+ src: url(../woff2/ibm-plex-mono/ibm-plex-mono-cyrillic-ext-400-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-cyrillic-ext-400-normal.woff) format('woff');
8
+ unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
9
+ }
10
+
11
+ /* ibm-plex-mono-cyrillic-400-normal */
12
+ @font-face {
13
+ font-family: 'IBM Plex Mono';
14
+ font-style: normal;
15
+ font-display: swap;
16
+ font-weight: 400;
17
+ src: url(../woff2/ibm-plex-mono/ibm-plex-mono-cyrillic-400-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-cyrillic-400-normal.woff) format('woff');
18
+ unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
19
+ }
20
+
21
+ /* ibm-plex-mono-vietnamese-400-normal */
22
+ @font-face {
23
+ font-family: 'IBM Plex Mono';
24
+ font-style: normal;
25
+ font-display: swap;
26
+ font-weight: 400;
27
+ src: url(../woff2/ibm-plex-mono/ibm-plex-mono-vietnamese-400-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-vietnamese-400-normal.woff) format('woff');
28
+ unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
29
+ }
30
+
31
+ /* ibm-plex-mono-latin-ext-400-normal */
32
+ @font-face {
33
+ font-family: 'IBM Plex Mono';
34
+ font-style: normal;
35
+ font-display: swap;
36
+ font-weight: 400;
37
+ src: url(../woff2/ibm-plex-mono/ibm-plex-mono-latin-ext-400-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-latin-ext-400-normal.woff) format('woff');
38
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
39
+ }
40
+
41
+ /* ibm-plex-mono-latin-400-normal */
42
+ @font-face {
43
+ font-family: 'IBM Plex Mono';
44
+ font-style: normal;
45
+ font-display: swap;
46
+ font-weight: 400;
47
+ src: url(../woff2/ibm-plex-mono/ibm-plex-mono-latin-400-normal.woff2) format('woff2'), url(./files/ibm-plex-mono-latin-400-normal.woff) format('woff');
48
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
49
+ }
@@ -0,0 +1,19 @@
1
+ /* libre-caslon-display-latin-ext-400-normal */
2
+ @font-face {
3
+ font-family: 'Libre Caslon Display';
4
+ font-style: normal;
5
+ font-display: swap;
6
+ font-weight: 400;
7
+ src: url(../woff2/libre-caslon-display/libre-caslon-display-latin-ext-400-normal.woff2) format('woff2'), url(./files/libre-caslon-display-latin-ext-400-normal.woff) format('woff');
8
+ unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
9
+ }
10
+
11
+ /* libre-caslon-display-latin-400-normal */
12
+ @font-face {
13
+ font-family: 'Libre Caslon Display';
14
+ font-style: normal;
15
+ font-display: swap;
16
+ font-weight: 400;
17
+ src: url(../woff2/libre-caslon-display/libre-caslon-display-latin-400-normal.woff2) format('woff2'), url(./files/libre-caslon-display-latin-400-normal.woff) format('woff');
18
+ unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
19
+ }