foliko 1.1.8 → 1.1.9

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 (306) hide show
  1. package/.agent/agents/code-assistant.json +17 -0
  2. package/.agent/agents/email-assistant.json +14 -0
  3. package/.agent/agents/file-assistant.json +18 -0
  4. package/.agent/agents/orchestrator-demo.md +53 -0
  5. package/.agent/agents/orchestrator.json +7 -0
  6. package/.agent/agents/poster-expert.md +228 -0
  7. package/.agent/agents/system-assistant.json +15 -0
  8. package/.agent/agents/web-assistant.json +12 -0
  9. package/.agent/data/default.json +5 -404
  10. package/.agent/data/email/processed-emails.json +1 -0
  11. package/.agent/data/plugins-state.json +173 -172
  12. package/.agent/data/scheduler/tasks.json +1 -0
  13. package/.agent/data/web/web-config.json +5 -0
  14. package/.agent/mcp_config.json +0 -14
  15. package/.agent/package.json +8 -0
  16. package/.agent/plugins/__pycache__/file_writer.cpython-312.pyc +0 -0
  17. package/.agent/plugins/daytona/README.md +89 -0
  18. package/.agent/plugins/daytona/index.js +377 -0
  19. package/.agent/plugins/daytona/package.json +12 -0
  20. package/.agent/plugins/marknative/README.md +134 -0
  21. package/.agent/plugins/marknative/fonts.zip +0 -0
  22. package/.agent/plugins/marknative/index.js +256 -0
  23. package/.agent/plugins/marknative/package.json +12 -0
  24. package/.agent/plugins/system-info/index.js +387 -0
  25. package/.agent/plugins/system-info/package.json +4 -0
  26. package/.agent/plugins/system-info/test.js +40 -0
  27. package/.agent/plugins/test-plugin.py +123 -0
  28. package/.agent/plugins/test_nested_plugin.py +85 -0
  29. package/.agent/plugins.json +11 -5
  30. package/.agent/python-scripts/test_sample.py +24 -0
  31. package/.agent/sessions/cli_default.json +96 -249
  32. package/.agent/sessions/weixin_o9cq80zgZqKPA2-s59PN43GdDy1w@im.wechat.json +189 -0
  33. package/.agent/skills/agent-browser/SKILL.md +311 -0
  34. package/.agent/skills/agent-browser/TEST_PLAN.md +200 -0
  35. package/.agent/skills/sysinfo/SKILL.md +38 -0
  36. package/.agent/skills/sysinfo/system-info.sh +130 -0
  37. package/.agent/skills/workflow/SKILL.md +324 -0
  38. package/.agent/test-agent.js +35 -0
  39. package/.agent/weixin.json +6 -0
  40. package/.agent/workflows/email-digest.json +50 -0
  41. package/.agent/workflows/file-backup.json +21 -0
  42. package/.agent/workflows/get-ip-notify.json +32 -0
  43. package/.agent/workflows/news-aggregator.json +93 -0
  44. package/.agent/workflows/news-dashboard-v2.json +94 -0
  45. package/.agent/workflows/notification-batch.json +32 -0
  46. package/.claude/settings.local.json +9 -1
  47. package/.env.example +56 -56
  48. package/README.md +441 -441
  49. package/cli/src/ui/chat-ui.js +32 -21
  50. package/foliko_poster.png +0 -0
  51. package/output/business_poster_final.png +0 -0
  52. package/output/emoji_test_v2.png +0 -0
  53. package/output/foliko-ai-launch-poster.png +0 -0
  54. package/output/foliko-poster.png +0 -0
  55. package/output/muji_style_poster.png +0 -0
  56. package/output/new_product_launch.png +0 -0
  57. package/output/news_poster_625yi_subsidy.png +0 -0
  58. package/output/tech_future_2026.png +0 -0
  59. package/output/tech_future_poster.png +0 -0
  60. package/package.json +1 -2
  61. package/plugins/default-plugins.js +58 -6
  62. package/plugins/extension-executor-plugin.js +8 -21
  63. package/plugins/python-plugin-loader.js +461 -40
  64. package/plugins/python-plugin-loader.js.bak +856 -0
  65. package/plugins/subagent-plugin.js +0 -121
  66. package/plugins/weixin-plugin.js +38 -29
  67. package/poster.png +0 -0
  68. package/skills/find-skills/AGENTS.md +162 -162
  69. package/skills/find-skills/SKILL.md +133 -133
  70. package/skills/foliko-dev/SKILL.md +6 -0
  71. package/skills/python-plugin-dev/SKILL.md +124 -2
  72. package/src/core/agent-chat.js +220 -281
  73. package/src/core/agent.js +10 -0
  74. package/src/utils/plugin-helpers.js +22 -4
  75. package/system.md +1678 -1574
  76. package/test-scan.js +18 -0
  77. package/.agent/.shared/ui-ux-pro-max/data/charts.csv +0 -26
  78. package/.agent/.shared/ui-ux-pro-max/data/colors.csv +0 -97
  79. package/.agent/.shared/ui-ux-pro-max/data/icons.csv +0 -101
  80. package/.agent/.shared/ui-ux-pro-max/data/landing.csv +0 -31
  81. package/.agent/.shared/ui-ux-pro-max/data/products.csv +0 -97
  82. package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +0 -24
  83. package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +0 -45
  84. package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
  85. package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
  86. package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +0 -53
  87. package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
  88. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
  89. package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
  90. package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
  91. package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +0 -54
  92. package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +0 -61
  93. package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
  94. package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
  95. package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +0 -50
  96. package/.agent/.shared/ui-ux-pro-max/data/styles.csv +0 -59
  97. package/.agent/.shared/ui-ux-pro-max/data/typography.csv +0 -58
  98. package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +0 -101
  99. package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
  100. package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +0 -31
  101. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/core.cpython-313.pyc +0 -0
  102. package/.agent/.shared/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
  103. package/.agent/.shared/ui-ux-pro-max/scripts/core.py +0 -258
  104. package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +0 -1067
  105. package/.agent/.shared/ui-ux-pro-max/scripts/search.py +0 -106
  106. package/.agent/ARCHITECTURE.md +0 -288
  107. package/.agent/agents/ambient-agent.md +0 -57
  108. package/.agent/agents/debugger.md +0 -55
  109. package/.agent/agents/email-assistant.md +0 -49
  110. package/.agent/agents/file-manager.md +0 -42
  111. package/.agent/agents/python-developer.md +0 -60
  112. package/.agent/agents/scheduler.md +0 -59
  113. package/.agent/agents/web-developer.md +0 -45
  114. package/.agent/data/puppeteer-sessions/undefined.json +0 -6
  115. package/.agent/data/weixin-media/2026-04-08/img_1775618677512.jpg +0 -0
  116. package/.agent/data/weixin-media/2026-04-08/img_1775619073340.jpg +0 -0
  117. package/.agent/data/weixin-media/2026-04-08/img_1775619097536.jpg +0 -0
  118. package/.agent/data/weixin-media/2026-04-08/img_1775619209388.jpg +0 -0
  119. package/.agent/memory/feedback/mnrdvj5i-ca3dkd.md +0 -9
  120. package/.agent/memory/feedback/mnre365e-7s4zax.md +0 -9
  121. package/.agent/memory/feedback/mnre36jn-nkfgmp.md +0 -9
  122. package/.agent/memory/feedback/mnre3805-kjiq6h.md +0 -9
  123. package/.agent/memory/feedback/mnsf66kp-b10rcd.md +0 -9
  124. package/.agent/memory/feedback/mnsi3sz8-p5g2cw.md +0 -9
  125. package/.agent/memory/feedback/mnsibe47-sv2ni1.md +0 -9
  126. package/.agent/memory/feedback/mnsic89w-nn228o.md +0 -9
  127. package/.agent/memory/feedback/mnsj1xe9-x83ba0.md +0 -9
  128. package/.agent/memory/feedback/mnsj21iv-wnwelx.md +0 -9
  129. package/.agent/memory/feedback/mnsj2g4a-cog7a2.md +0 -9
  130. package/.agent/memory/feedback/mnsj4js7-lktjp6.md +0 -9
  131. package/.agent/memory/feedback/mnsj5d4y-uglwvp.md +0 -9
  132. package/.agent/memory/feedback/mnslkuo9-uous66.md +0 -24
  133. package/.agent/memory/feedback/mnsm3vq0-megoil.md +0 -9
  134. package/.agent/memory/feedback/mnsnn5x2-sxcihd.md +0 -9
  135. package/.agent/memory/feedback/mnsnq17s-nabrn9.md +0 -9
  136. package/.agent/memory/feedback/mnsnybet-wz7rn3.md +0 -9
  137. package/.agent/memory/feedback/mnsrw0s7-7s9e30.md +0 -9
  138. package/.agent/memory/feedback/mnu5hpnd-tlm16q.md +0 -9
  139. package/.agent/memory/feedback/mnu60uqe-xuoxp4.md +0 -9
  140. package/.agent/memory/project/mnqx54u5-loqtoe.md +0 -9
  141. package/.agent/memory/project/mnqx84cv-mx6dmd.md +0 -9
  142. package/.agent/memory/project/mnsacuyr-hgtk5n.md +0 -20
  143. package/.agent/memory/project/mnu5hy2x-bjsg7u.md +0 -9
  144. package/.agent/memory/reference/mnre3cww-penbo1.md +0 -9
  145. package/.agent/memory/reference/mns9wn48-luerua.md +0 -14
  146. package/.agent/memory/reference/mns9yz5c-thc2s0.md +0 -16
  147. package/.agent/memory/reference/mnsfy4um-910f1o.md +0 -23
  148. package/.agent/memory/reference/mnsg37dp-lmfj18.md +0 -32
  149. package/.agent/memory/reference/mnsll60q-0j911u.md +0 -36
  150. package/.agent/memory/reference/mnsmlb5y-nej31u.md +0 -16
  151. package/.agent/memory/reference/mnssle72-yrot96.md +0 -9
  152. package/.agent/memory/user/mnsfuon6-l416q1.md +0 -21
  153. package/.agent/memory/user/mnsg9kut-95m7rf.md +0 -20
  154. package/.agent/memory/user/mnu2eo1v-yy6fhe.md +0 -9
  155. package/.agent/memory/user/mnu2etuo-8u8jk8.md +0 -9
  156. package/.agent/plugins/poster-plugin/README.md +0 -304
  157. package/.agent/plugins/poster-plugin/fonts/NotoColorEmoji-Regular.ttf +0 -0
  158. package/.agent/plugins/poster-plugin/fonts/PatuaOne-Regular.ttf +0 -0
  159. package/.agent/plugins/poster-plugin/fonts/Symbola_hint.ttf +0 -0
  160. package/.agent/plugins/poster-plugin/fonts//345/276/256/350/275/257/351/233/205/351/273/221.ttf +0 -0
  161. package/.agent/plugins/poster-plugin/fonts//345/276/256/350/275/257/351/233/205/351/273/221/347/262/227/344/275/223.ttf +0 -0
  162. package/.agent/plugins/poster-plugin/index.js +0 -13
  163. package/.agent/plugins/poster-plugin/package.json +0 -29
  164. package/.agent/plugins/poster-plugin/src/canvas.js +0 -232
  165. package/.agent/plugins/poster-plugin/src/components/arrow.js +0 -84
  166. package/.agent/plugins/poster-plugin/src/components/avatar.js +0 -71
  167. package/.agent/plugins/poster-plugin/src/components/badge.js +0 -85
  168. package/.agent/plugins/poster-plugin/src/components/barcode.js +0 -123
  169. package/.agent/plugins/poster-plugin/src/components/bubble.js +0 -154
  170. package/.agent/plugins/poster-plugin/src/components/button.js +0 -168
  171. package/.agent/plugins/poster-plugin/src/components/card.js +0 -88
  172. package/.agent/plugins/poster-plugin/src/components/chart.js +0 -127
  173. package/.agent/plugins/poster-plugin/src/components/chip.js +0 -88
  174. package/.agent/plugins/poster-plugin/src/components/columns.js +0 -121
  175. package/.agent/plugins/poster-plugin/src/components/cta.js +0 -87
  176. package/.agent/plugins/poster-plugin/src/components/divider.js +0 -55
  177. package/.agent/plugins/poster-plugin/src/components/feature.js +0 -85
  178. package/.agent/plugins/poster-plugin/src/components/featureGrid.js +0 -117
  179. package/.agent/plugins/poster-plugin/src/components/frame.js +0 -230
  180. package/.agent/plugins/poster-plugin/src/components/grid.js +0 -130
  181. package/.agent/plugins/poster-plugin/src/components/highlightText.js +0 -145
  182. package/.agent/plugins/poster-plugin/src/components/icon.js +0 -94
  183. package/.agent/plugins/poster-plugin/src/components/imageFrame.js +0 -205
  184. package/.agent/plugins/poster-plugin/src/components/index.js +0 -81
  185. package/.agent/plugins/poster-plugin/src/components/listItem.js +0 -147
  186. package/.agent/plugins/poster-plugin/src/components/notification.js +0 -123
  187. package/.agent/plugins/poster-plugin/src/components/progress.js +0 -79
  188. package/.agent/plugins/poster-plugin/src/components/progressCircle.js +0 -117
  189. package/.agent/plugins/poster-plugin/src/components/qrcode.js +0 -74
  190. package/.agent/plugins/poster-plugin/src/components/quote.js +0 -169
  191. package/.agent/plugins/poster-plugin/src/components/rating.js +0 -85
  192. package/.agent/plugins/poster-plugin/src/components/ribbon.js +0 -197
  193. package/.agent/plugins/poster-plugin/src/components/seal.js +0 -148
  194. package/.agent/plugins/poster-plugin/src/components/star.js +0 -70
  195. package/.agent/plugins/poster-plugin/src/components/statCard.js +0 -105
  196. package/.agent/plugins/poster-plugin/src/components/stepper.js +0 -118
  197. package/.agent/plugins/poster-plugin/src/components/table.js +0 -167
  198. package/.agent/plugins/poster-plugin/src/components/tagCloud.js +0 -85
  199. package/.agent/plugins/poster-plugin/src/components/timeline.js +0 -117
  200. package/.agent/plugins/poster-plugin/src/components/watermark.js +0 -54
  201. package/.agent/plugins/poster-plugin/src/composer.js +0 -2314
  202. package/.agent/plugins/poster-plugin/src/elements/artText.js +0 -69
  203. package/.agent/plugins/poster-plugin/src/elements/background.js +0 -99
  204. package/.agent/plugins/poster-plugin/src/elements/circle.js +0 -31
  205. package/.agent/plugins/poster-plugin/src/elements/image.js +0 -28
  206. package/.agent/plugins/poster-plugin/src/elements/index.js +0 -28
  207. package/.agent/plugins/poster-plugin/src/elements/line.js +0 -23
  208. package/.agent/plugins/poster-plugin/src/elements/polygon.js +0 -63
  209. package/.agent/plugins/poster-plugin/src/elements/rectangle.js +0 -32
  210. package/.agent/plugins/poster-plugin/src/elements/richText.js +0 -283
  211. package/.agent/plugins/poster-plugin/src/elements/svg.js +0 -108
  212. package/.agent/plugins/poster-plugin/src/elements/text.js +0 -112
  213. package/.agent/plugins/poster-plugin/src/fonts.js +0 -674
  214. package/.agent/plugins/poster-plugin/src/index.js +0 -2126
  215. package/.agent/plugins/poster-plugin/src/presets.js +0 -36
  216. package/.agent/plugins/poster-plugin/src/templates/business.js +0 -60
  217. package/.agent/plugins/poster-plugin/src/templates/gradient.js +0 -64
  218. package/.agent/plugins/poster-plugin/src/templates/index.js +0 -43
  219. package/.agent/plugins/poster-plugin/src/templates/modern.js +0 -69
  220. package/.agent/plugins/poster-plugin/src/templates/simple.js +0 -58
  221. package/.agent/plugins/poster-plugin/src/templates/social.js +0 -62
  222. package/.agent/plugins/poster-plugin/src/templates/tech.js +0 -84
  223. package/.agent/plugins/poster-plugin/src/utils/imageLoader.js +0 -84
  224. package/.agent/plugins/poster-plugin/yarn.lock +0 -837
  225. package/.agent/plugins/puppeteer-plugin/README.md +0 -147
  226. package/.agent/plugins/puppeteer-plugin/index.js +0 -1422
  227. package/.agent/plugins/puppeteer-plugin/package.json +0 -9
  228. package/.agent/rules/GEMINI.md +0 -273
  229. package/.agent/rules/allow-rule.md +0 -77
  230. package/.agent/rules/log-rule.md +0 -83
  231. package/.agent/rules/security-rule.md +0 -93
  232. package/.agent/scripts/auto_preview.py +0 -148
  233. package/.agent/scripts/checklist.py +0 -217
  234. package/.agent/scripts/session_manager.py +0 -120
  235. package/.agent/scripts/verify_all.py +0 -327
  236. package/.agent/skills/api-patterns/SKILL.md +0 -81
  237. package/.agent/skills/api-patterns/api-style.md +0 -42
  238. package/.agent/skills/api-patterns/auth.md +0 -24
  239. package/.agent/skills/api-patterns/documentation.md +0 -26
  240. package/.agent/skills/api-patterns/graphql.md +0 -41
  241. package/.agent/skills/api-patterns/rate-limiting.md +0 -31
  242. package/.agent/skills/api-patterns/response.md +0 -37
  243. package/.agent/skills/api-patterns/rest.md +0 -40
  244. package/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  245. package/.agent/skills/api-patterns/security-testing.md +0 -122
  246. package/.agent/skills/api-patterns/trpc.md +0 -41
  247. package/.agent/skills/api-patterns/versioning.md +0 -22
  248. package/.agent/skills/app-builder/SKILL.md +0 -75
  249. package/.agent/skills/app-builder/agent-coordination.md +0 -71
  250. package/.agent/skills/app-builder/feature-building.md +0 -53
  251. package/.agent/skills/app-builder/project-detection.md +0 -34
  252. package/.agent/skills/app-builder/scaffolding.md +0 -118
  253. package/.agent/skills/app-builder/tech-stack.md +0 -40
  254. package/.agent/skills/app-builder/templates/SKILL.md +0 -39
  255. package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  256. package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  257. package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  258. package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  259. package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  260. package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  261. package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  262. package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -122
  263. package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -122
  264. package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -169
  265. package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -134
  266. package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  267. package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -119
  268. package/.agent/skills/architecture/SKILL.md +0 -55
  269. package/.agent/skills/architecture/context-discovery.md +0 -43
  270. package/.agent/skills/architecture/examples.md +0 -94
  271. package/.agent/skills/architecture/pattern-selection.md +0 -68
  272. package/.agent/skills/architecture/patterns-reference.md +0 -50
  273. package/.agent/skills/architecture/trade-off-analysis.md +0 -77
  274. package/.agent/skills/clean-code/SKILL.md +0 -201
  275. package/.agent/skills/doc.md +0 -177
  276. package/.agent/skills/frontend-design/SKILL.md +0 -418
  277. package/.agent/skills/frontend-design/animation-guide.md +0 -331
  278. package/.agent/skills/frontend-design/color-system.md +0 -311
  279. package/.agent/skills/frontend-design/decision-trees.md +0 -418
  280. package/.agent/skills/frontend-design/motion-graphics.md +0 -306
  281. package/.agent/skills/frontend-design/scripts/accessibility_checker.py +0 -183
  282. package/.agent/skills/frontend-design/scripts/ux_audit.py +0 -722
  283. package/.agent/skills/frontend-design/typography-system.md +0 -345
  284. package/.agent/skills/frontend-design/ux-psychology.md +0 -1116
  285. package/.agent/skills/frontend-design/visual-effects.md +0 -383
  286. package/.agent/skills/i18n-localization/SKILL.md +0 -154
  287. package/.agent/skills/i18n-localization/scripts/i18n_checker.py +0 -241
  288. package/.agent/skills/mcp-builder/SKILL.md +0 -176
  289. package/.agent/skills/poster-design/SKILL.md +0 -385
  290. package/.agent/skills/web-design-guidelines/SKILL.md +0 -57
  291. package/.agent/workflows/brainstorm.md +0 -113
  292. package/.agent/workflows/create.md +0 -59
  293. package/.agent/workflows/debug.md +0 -103
  294. package/.agent/workflows/deploy.md +0 -176
  295. package/.agent/workflows/enhance.md +0 -63
  296. package/.agent/workflows/orchestrate.md +0 -237
  297. package/.agent/workflows/plan.md +0 -89
  298. package/.agent/workflows/preview.md +0 -81
  299. package/.agent/workflows/simple-test.md +0 -42
  300. package/.agent/workflows/status.md +0 -86
  301. package/.agent/workflows/structured-orchestrate.md +0 -180
  302. package/.agent/workflows/test.md +0 -144
  303. package/.agent/workflows/ui-ux-pro-max.md +0 -296
  304. package/outputs/emoji-font-showcase.png +0 -0
  305. package/outputs/foliko-muji-style.png +0 -0
  306. /package/.agent/plugins/{poster-plugin → marknative}/fonts/SegoeUI Emoji.ttf +0 -0
@@ -1,345 +0,0 @@
1
- # Typography System Reference
2
-
3
- > Typography principles and decision-making - learn to think, not memorize.
4
- > **No fixed font names or sizes - understand the system.**
5
-
6
- ---
7
-
8
- ## 1. Modular Scale Principles
9
-
10
- ### What is a Modular Scale?
11
-
12
- ```
13
- A mathematical relationship between font sizes:
14
- ├── Pick a BASE size (usually body text)
15
- ├── Pick a RATIO (multiplier)
16
- └── Generate all sizes using: base × ratio^n
17
- ```
18
-
19
- ### Common Ratios and When to Use
20
-
21
- | Ratio | Value | Feeling | Best For |
22
- |-------|-------|---------|----------|
23
- | Minor Second | 1.067 | Very subtle | Dense UI, small screens |
24
- | Major Second | 1.125 | Subtle | Compact interfaces |
25
- | Minor Third | 1.2 | Comfortable | Mobile apps, cards |
26
- | Major Third | 1.25 | Balanced | General web (most common) |
27
- | Perfect Fourth | 1.333 | Noticeable | Editorial, blogs |
28
- | Perfect Fifth | 1.5 | Dramatic | Headlines, marketing |
29
- | Golden Ratio | 1.618 | Maximum impact | Hero sections, display |
30
-
31
- ### Generate Your Scale
32
-
33
- ```
34
- Given: base = YOUR_BASE_SIZE, ratio = YOUR_RATIO
35
-
36
- Scale:
37
- ├── xs: base ÷ ratio²
38
- ├── sm: base ÷ ratio
39
- ├── base: YOUR_BASE_SIZE
40
- ├── lg: base × ratio
41
- ├── xl: base × ratio²
42
- ├── 2xl: base × ratio³
43
- ├── 3xl: base × ratio⁴
44
- └── ... continue as needed
45
- ```
46
-
47
- ### Choosing Base Size
48
-
49
- | Context | Base Size Range | Why |
50
- |---------|-----------------|-----|
51
- | Mobile-first | 16-18px | Readability on small screens |
52
- | Desktop app | 14-16px | Information density |
53
- | Editorial | 18-21px | Long-form reading comfort |
54
- | Accessibility focus | 18px+ | Easier to read |
55
-
56
- ---
57
-
58
- ## 2. Font Pairing Principles
59
-
60
- ### What Makes Fonts Work Together
61
-
62
- ```
63
- Contrast + Harmony:
64
- ├── Different ENOUGH to create hierarchy
65
- ├── Similar ENOUGH to feel cohesive
66
- └── Usually: serif + sans, or display + neutral
67
- ```
68
-
69
- ### Pairing Strategies
70
-
71
- | Strategy | How | Result |
72
- |----------|-----|--------|
73
- | **Contrast** | Serif heading + Sans body | Classic, editorial feel |
74
- | **Same Family** | One variable font, different weights | Cohesive, modern |
75
- | **Same Designer** | Fonts by same foundry | Often harmonious proportions |
76
- | **Era Match** | Fonts from same time period | Historical consistency |
77
-
78
- ### What to Look For
79
-
80
- ```
81
- When pairing, compare:
82
- ├── x-height (height of lowercase letters)
83
- ├── Letter width (narrow vs wide)
84
- ├── Stroke contrast (thin/thick variation)
85
- └── Overall mood (formal vs casual)
86
- ```
87
-
88
- ### Safe Pairing Patterns
89
-
90
- | Heading Style | Body Style | Mood |
91
- |---------------|------------|------|
92
- | Geometric sans | Humanist sans | Modern, friendly |
93
- | Display serif | Clean sans | Editorial, sophisticated |
94
- | Neutral sans | Same sans | Minimal, tech |
95
- | Bold geometric | Light geometric | Contemporary |
96
-
97
- ### Avoid
98
-
99
- - ❌ Two decorative fonts together
100
- - ❌ Similar fonts that conflict
101
- - ❌ More than 2-3 font families
102
- - ❌ Fonts with very different x-heights
103
-
104
- ---
105
-
106
- ## 3. Line Height Principles
107
-
108
- ### The Relationship
109
-
110
- ```
111
- Line height depends on:
112
- ├── Font size (larger text = less line height needed)
113
- ├── Line length (longer lines = more line height)
114
- ├── Font design (some fonts need more space)
115
- └── Content type (headings vs body)
116
- ```
117
-
118
- ### Guidelines by Context
119
-
120
- | Content Type | Line Height Range | Why |
121
- |--------------|-------------------|-----|
122
- | **Headings** | 1.1 - 1.3 | Short lines, want compact |
123
- | **Body text** | 1.4 - 1.6 | Comfortable reading |
124
- | **Long-form** | 1.6 - 1.8 | Maximum readability |
125
- | **UI elements** | 1.2 - 1.4 | Space efficiency |
126
-
127
- ### Adjustment Factors
128
-
129
- - **Longer line length** → Increase line height
130
- - **Larger font size** → Decrease line height ratio
131
- - **All caps** → May need more line height
132
- - **Tight tracking** → May need more line height
133
-
134
- ---
135
-
136
- ## 4. Line Length Principles
137
-
138
- ### Optimal Reading Width
139
-
140
- ```
141
- The sweet spot: 45-75 characters per line
142
- ├── < 45: Too choppy, breaks flow
143
- ├── 45-75: Comfortable reading
144
- ├── > 75: Eye tracking strain
145
- ```
146
-
147
- ### How to Measure
148
-
149
- ```css
150
- /* Character-based (recommended) */
151
- max-width: 65ch; /* ch = width of "0" character */
152
-
153
- /* This adapts to font size automatically */
154
- ```
155
-
156
- ### Context Adjustments
157
-
158
- | Context | Character Range |
159
- |---------|-----------------|
160
- | Desktop article | 60-75 characters |
161
- | Mobile | 35-50 characters |
162
- | Sidebar text | 30-45 characters |
163
- | Wide monitors | Still cap at ~75ch |
164
-
165
- ---
166
-
167
- ## 5. Responsive Typography Principles
168
-
169
- ### The Problem
170
-
171
- ```
172
- Fixed sizes don't scale well:
173
- ├── Desktop size too big on mobile
174
- ├── Mobile size too small on desktop
175
- └── Breakpoint jumps feel jarring
176
- ```
177
-
178
- ### Fluid Typography (clamp)
179
-
180
- ```css
181
- /* Syntax: clamp(MIN, PREFERRED, MAX) */
182
- font-size: clamp(
183
- MINIMUM_SIZE,
184
- FLUID_CALCULATION,
185
- MAXIMUM_SIZE
186
- );
187
-
188
- /* FLUID_CALCULATION typically:
189
- base + viewport-relative-unit */
190
- ```
191
-
192
- ### Scaling Strategy
193
-
194
- | Element | Scaling Behavior |
195
- |---------|-----------------|
196
- | Body text | Slight scaling (1rem → 1.125rem) |
197
- | Subheadings | Moderate scaling |
198
- | Headings | More dramatic scaling |
199
- | Display text | Most dramatic scaling |
200
-
201
- ---
202
-
203
- ## 6. Weight and Emphasis Principles
204
-
205
- ### Semantic Weight Usage
206
-
207
- | Weight Range | Name | Use For |
208
- |--------------|------|---------|
209
- | 300-400 | Light/Normal | Body text, paragraphs |
210
- | 500 | Medium | Subtle emphasis |
211
- | 600 | Semibold | Subheadings, labels |
212
- | 700 | Bold | Headings, strong emphasis |
213
- | 800-900 | Heavy/Black | Display, hero text |
214
-
215
- ### Creating Contrast
216
-
217
- ```
218
- Good contrast = skip at least 2 weight levels
219
- ├── 400 body + 700 heading = good
220
- ├── 400 body + 500 emphasis = subtle
221
- ├── 600 heading + 700 subheading = too similar
222
- ```
223
-
224
- ### Avoid
225
-
226
- - ❌ Too many weights (max 3-4 per page)
227
- - ❌ Adjacent weights for hierarchy (400/500)
228
- - ❌ Heavy weights for long text
229
-
230
- ---
231
-
232
- ## 7. Letter Spacing (Tracking)
233
-
234
- ### Principles
235
-
236
- ```
237
- Large text (headings): tighter tracking
238
- ├── Letters are big, gaps feel larger
239
- └── Slight negative tracking looks better
240
-
241
- Small text (body): normal or slightly wider
242
- ├── Improves readability at small sizes
243
- └── Never negative for body text
244
-
245
- ALL CAPS: always wider tracking
246
- ├── Uppercase lacks ascenders/descenders
247
- └── Needs more space to feel right
248
- ```
249
-
250
- ### Adjustment Guidelines
251
-
252
- | Context | Tracking Adjustment |
253
- |---------|---------------------|
254
- | Display/Hero | -2% to -4% |
255
- | Headings | -1% to -2% |
256
- | Body text | 0% (normal) |
257
- | Small text | +1% to +2% |
258
- | ALL CAPS | +5% to +10% |
259
-
260
- ---
261
-
262
- ## 8. Hierarchy Principles
263
-
264
- ### Visual Hierarchy Through Type
265
-
266
- ```
267
- Ways to create hierarchy:
268
- ├── SIZE (most obvious)
269
- ├── WEIGHT (bold stands out)
270
- ├── COLOR (contrast levels)
271
- ├── SPACING (margins separate sections)
272
- └── POSITION (top = important)
273
- ```
274
-
275
- ### Typical Hierarchy
276
-
277
- | Level | Characteristics |
278
- |-------|-----------------|
279
- | Primary (H1) | Largest, boldest, most distinct |
280
- | Secondary (H2) | Noticeably smaller but still bold |
281
- | Tertiary (H3) | Medium size, may use weight only |
282
- | Body | Standard size and weight |
283
- | Caption/Meta | Smaller, often lighter color |
284
-
285
- ### Testing Hierarchy
286
-
287
- Ask: "Can I tell what's most important at a glance?"
288
-
289
- If squinting at the page, the hierarchy should still be clear.
290
-
291
- ---
292
-
293
- ## 9. Readability Psychology
294
-
295
- ### F-Pattern Reading
296
-
297
- ```
298
- Users scan in F-pattern:
299
- ├── Across the top (first line)
300
- ├── Down the left side
301
- ├── Across again (subheading)
302
- └── Continue down left
303
- ```
304
-
305
- **Implication**: Key info on left and in headings
306
-
307
- ### Chunking for Comprehension
308
-
309
- - Short paragraphs (3-4 lines max)
310
- - Clear subheadings
311
- - Bullet points for lists
312
- - White space between sections
313
-
314
- ### Cognitive Ease
315
-
316
- - Familiar fonts = easier reading
317
- - High contrast = less strain
318
- - Consistent patterns = predictable
319
-
320
- ---
321
-
322
- ## 10. Typography Selection Checklist
323
-
324
- Before finalizing typography:
325
-
326
- - [ ] **Asked user for font preferences?**
327
- - [ ] **Considered brand/context?**
328
- - [ ] **Selected appropriate scale ratio?**
329
- - [ ] **Limited to 2-3 font families?**
330
- - [ ] **Tested readability at all sizes?**
331
- - [ ] **Checked line length (45-75ch)?**
332
- - [ ] **Verified contrast for accessibility?**
333
- - [ ] **Different from your last project?**
334
-
335
- ### Anti-Patterns
336
-
337
- - ❌ Same fonts every project
338
- - ❌ Too many font families
339
- - ❌ Ignoring readability for style
340
- - ❌ Fixed sizes without responsiveness
341
- - ❌ Decorative fonts for body text
342
-
343
- ---
344
-
345
- > **Remember**: Typography is about communication clarity. Choose based on content needs and audience, not personal preference.