designmd-forge 1.2.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 (907) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/dist/__tests__/designStore.test.js +41 -0
  4. package/dist/__tests__/linter.test.js +23 -0
  5. package/dist/__tests__/sectionParser.test.js +60 -0
  6. package/dist/__tests__/server.test.js +129 -0
  7. package/dist/constants.js +12 -0
  8. package/dist/data/authoring-guide.md +113 -0
  9. package/dist/data/designs/airbnb.md +545 -0
  10. package/dist/data/designs/airtable.md +554 -0
  11. package/dist/data/designs/apple.md +562 -0
  12. package/dist/data/designs/binance.md +634 -0
  13. package/dist/data/designs/bmw-m.md +503 -0
  14. package/dist/data/designs/bmw.md +544 -0
  15. package/dist/data/designs/bugatti.md +454 -0
  16. package/dist/data/designs/cal.md +542 -0
  17. package/dist/data/designs/card-heavy.md +250 -0
  18. package/dist/data/designs/claude.md +589 -0
  19. package/dist/data/designs/clay.md +541 -0
  20. package/dist/data/designs/clickhouse.md +544 -0
  21. package/dist/data/designs/cohere.md +451 -0
  22. package/dist/data/designs/coinbase.md +570 -0
  23. package/dist/data/designs/composio.md +506 -0
  24. package/dist/data/designs/content-first.md +236 -0
  25. package/dist/data/designs/cursor.md +537 -0
  26. package/dist/data/designs/data-dashboard.md +300 -0
  27. package/dist/data/designs/dell-1996.md +632 -0
  28. package/dist/data/designs/elevenlabs.md +504 -0
  29. package/dist/data/designs/enterprise-neutral.md +252 -0
  30. package/dist/data/designs/expo.md +526 -0
  31. package/dist/data/designs/ferrari.md +531 -0
  32. package/dist/data/designs/figma.md +578 -0
  33. package/dist/data/designs/framer.md +544 -0
  34. package/dist/data/designs/hashicorp.md +575 -0
  35. package/dist/data/designs/hp.md +670 -0
  36. package/dist/data/designs/ibm.md +550 -0
  37. package/dist/data/designs/intercom.md +546 -0
  38. package/dist/data/designs/ios-acorns-android.md +430 -0
  39. package/dist/data/designs/ios-acorns-expo.md +381 -0
  40. package/dist/data/designs/ios-acorns-swiftui.md +378 -0
  41. package/dist/data/designs/ios-acorns.md +384 -0
  42. package/dist/data/designs/ios-airbnb-android.md +658 -0
  43. package/dist/data/designs/ios-airbnb-expo.md +457 -0
  44. package/dist/data/designs/ios-airbnb-swiftui.md +464 -0
  45. package/dist/data/designs/ios-airbnb.md +410 -0
  46. package/dist/data/designs/ios-alltrails-android.md +451 -0
  47. package/dist/data/designs/ios-alltrails-expo.md +400 -0
  48. package/dist/data/designs/ios-alltrails-swiftui.md +343 -0
  49. package/dist/data/designs/ios-alltrails.md +344 -0
  50. package/dist/data/designs/ios-amazon-android.md +686 -0
  51. package/dist/data/designs/ios-amazon-expo.md +433 -0
  52. package/dist/data/designs/ios-amazon-music-android.md +416 -0
  53. package/dist/data/designs/ios-amazon-music-expo.md +368 -0
  54. package/dist/data/designs/ios-amazon-music-swiftui.md +436 -0
  55. package/dist/data/designs/ios-amazon-music.md +389 -0
  56. package/dist/data/designs/ios-amazon-swiftui.md +460 -0
  57. package/dist/data/designs/ios-amazon.md +440 -0
  58. package/dist/data/designs/ios-apple-fitness-android.md +462 -0
  59. package/dist/data/designs/ios-apple-fitness-expo.md +373 -0
  60. package/dist/data/designs/ios-apple-fitness-swiftui.md +373 -0
  61. package/dist/data/designs/ios-apple-fitness.md +399 -0
  62. package/dist/data/designs/ios-apple-maps-android.md +646 -0
  63. package/dist/data/designs/ios-apple-maps-expo.md +557 -0
  64. package/dist/data/designs/ios-apple-maps-swiftui.md +588 -0
  65. package/dist/data/designs/ios-apple-maps.md +447 -0
  66. package/dist/data/designs/ios-apple-music-android.md +737 -0
  67. package/dist/data/designs/ios-apple-music-expo.md +596 -0
  68. package/dist/data/designs/ios-apple-music-swiftui.md +578 -0
  69. package/dist/data/designs/ios-apple-music.md +494 -0
  70. package/dist/data/designs/ios-apple-notes-android.md +675 -0
  71. package/dist/data/designs/ios-apple-notes-expo.md +468 -0
  72. package/dist/data/designs/ios-apple-notes-swiftui.md +489 -0
  73. package/dist/data/designs/ios-apple-notes.md +413 -0
  74. package/dist/data/designs/ios-apple-tv-android.md +405 -0
  75. package/dist/data/designs/ios-apple-tv-expo.md +341 -0
  76. package/dist/data/designs/ios-apple-tv-swiftui.md +348 -0
  77. package/dist/data/designs/ios-apple-tv.md +390 -0
  78. package/dist/data/designs/ios-apple-wallet-android.md +617 -0
  79. package/dist/data/designs/ios-apple-wallet-expo.md +487 -0
  80. package/dist/data/designs/ios-apple-wallet-swiftui.md +425 -0
  81. package/dist/data/designs/ios-apple-wallet.md +360 -0
  82. package/dist/data/designs/ios-asana-android.md +435 -0
  83. package/dist/data/designs/ios-asana-expo.md +411 -0
  84. package/dist/data/designs/ios-asana-swiftui.md +416 -0
  85. package/dist/data/designs/ios-asana.md +433 -0
  86. package/dist/data/designs/ios-audible-android.md +450 -0
  87. package/dist/data/designs/ios-audible-expo.md +328 -0
  88. package/dist/data/designs/ios-audible-swiftui.md +418 -0
  89. package/dist/data/designs/ios-audible.md +364 -0
  90. package/dist/data/designs/ios-bandcamp-android.md +471 -0
  91. package/dist/data/designs/ios-bandcamp-expo.md +378 -0
  92. package/dist/data/designs/ios-bandcamp-swiftui.md +374 -0
  93. package/dist/data/designs/ios-bandcamp.md +372 -0
  94. package/dist/data/designs/ios-bear-android.md +496 -0
  95. package/dist/data/designs/ios-bear-expo.md +449 -0
  96. package/dist/data/designs/ios-bear-swiftui.md +479 -0
  97. package/dist/data/designs/ios-bear.md +412 -0
  98. package/dist/data/designs/ios-bereal-android.md +392 -0
  99. package/dist/data/designs/ios-bereal-expo.md +299 -0
  100. package/dist/data/designs/ios-bereal-swiftui.md +319 -0
  101. package/dist/data/designs/ios-bereal.md +336 -0
  102. package/dist/data/designs/ios-binance-android.md +481 -0
  103. package/dist/data/designs/ios-binance-expo.md +404 -0
  104. package/dist/data/designs/ios-binance-swiftui.md +418 -0
  105. package/dist/data/designs/ios-binance.md +410 -0
  106. package/dist/data/designs/ios-bluesky-android.md +442 -0
  107. package/dist/data/designs/ios-bluesky-expo.md +362 -0
  108. package/dist/data/designs/ios-bluesky-swiftui.md +328 -0
  109. package/dist/data/designs/ios-bluesky.md +338 -0
  110. package/dist/data/designs/ios-booking-android.md +471 -0
  111. package/dist/data/designs/ios-booking-expo.md +364 -0
  112. package/dist/data/designs/ios-booking-swiftui.md +377 -0
  113. package/dist/data/designs/ios-booking.md +346 -0
  114. package/dist/data/designs/ios-bumble-android.md +756 -0
  115. package/dist/data/designs/ios-bumble-expo.md +629 -0
  116. package/dist/data/designs/ios-bumble-swiftui.md +546 -0
  117. package/dist/data/designs/ios-bumble.md +424 -0
  118. package/dist/data/designs/ios-cal-ai-android.md +664 -0
  119. package/dist/data/designs/ios-cal-ai-expo.md +415 -0
  120. package/dist/data/designs/ios-cal-ai-swiftui.md +486 -0
  121. package/dist/data/designs/ios-cal-ai.md +387 -0
  122. package/dist/data/designs/ios-calm-android.md +431 -0
  123. package/dist/data/designs/ios-calm-expo.md +384 -0
  124. package/dist/data/designs/ios-calm-swiftui.md +327 -0
  125. package/dist/data/designs/ios-calm.md +356 -0
  126. package/dist/data/designs/ios-canva-android.md +469 -0
  127. package/dist/data/designs/ios-canva-expo.md +374 -0
  128. package/dist/data/designs/ios-canva-swiftui.md +422 -0
  129. package/dist/data/designs/ios-canva.md +395 -0
  130. package/dist/data/designs/ios-cash-app-android.md +601 -0
  131. package/dist/data/designs/ios-cash-app-expo.md +453 -0
  132. package/dist/data/designs/ios-cash-app-swiftui.md +463 -0
  133. package/dist/data/designs/ios-cash-app.md +365 -0
  134. package/dist/data/designs/ios-character-ai-android.md +489 -0
  135. package/dist/data/designs/ios-character-ai-expo.md +420 -0
  136. package/dist/data/designs/ios-character-ai-swiftui.md +417 -0
  137. package/dist/data/designs/ios-character-ai.md +392 -0
  138. package/dist/data/designs/ios-charles-schwab-android.md +454 -0
  139. package/dist/data/designs/ios-charles-schwab-expo.md +388 -0
  140. package/dist/data/designs/ios-charles-schwab-swiftui.md +394 -0
  141. package/dist/data/designs/ios-charles-schwab.md +380 -0
  142. package/dist/data/designs/ios-chatgpt-android.md +753 -0
  143. package/dist/data/designs/ios-chatgpt-expo.md +644 -0
  144. package/dist/data/designs/ios-chatgpt-swiftui.md +653 -0
  145. package/dist/data/designs/ios-chatgpt.md +466 -0
  146. package/dist/data/designs/ios-chime-android.md +438 -0
  147. package/dist/data/designs/ios-chime-expo.md +419 -0
  148. package/dist/data/designs/ios-chime-swiftui.md +383 -0
  149. package/dist/data/designs/ios-chime.md +389 -0
  150. package/dist/data/designs/ios-chipotle-android.md +397 -0
  151. package/dist/data/designs/ios-chipotle-expo.md +301 -0
  152. package/dist/data/designs/ios-chipotle-swiftui.md +345 -0
  153. package/dist/data/designs/ios-chipotle.md +340 -0
  154. package/dist/data/designs/ios-citymapper-android.md +466 -0
  155. package/dist/data/designs/ios-citymapper-expo.md +420 -0
  156. package/dist/data/designs/ios-citymapper-swiftui.md +424 -0
  157. package/dist/data/designs/ios-citymapper.md +394 -0
  158. package/dist/data/designs/ios-claude-android.md +625 -0
  159. package/dist/data/designs/ios-claude-expo.md +671 -0
  160. package/dist/data/designs/ios-claude-swiftui.md +649 -0
  161. package/dist/data/designs/ios-claude.md +447 -0
  162. package/dist/data/designs/ios-clickup-android.md +484 -0
  163. package/dist/data/designs/ios-clickup-expo.md +423 -0
  164. package/dist/data/designs/ios-clickup-swiftui.md +416 -0
  165. package/dist/data/designs/ios-clickup.md +431 -0
  166. package/dist/data/designs/ios-clubhouse-android.md +524 -0
  167. package/dist/data/designs/ios-clubhouse-expo.md +425 -0
  168. package/dist/data/designs/ios-clubhouse-swiftui.md +447 -0
  169. package/dist/data/designs/ios-clubhouse.md +406 -0
  170. package/dist/data/designs/ios-coffee-meets-bagel-android.md +461 -0
  171. package/dist/data/designs/ios-coffee-meets-bagel-expo.md +372 -0
  172. package/dist/data/designs/ios-coffee-meets-bagel-swiftui.md +368 -0
  173. package/dist/data/designs/ios-coffee-meets-bagel.md +376 -0
  174. package/dist/data/designs/ios-coinbase-android.md +611 -0
  175. package/dist/data/designs/ios-coinbase-expo.md +500 -0
  176. package/dist/data/designs/ios-coinbase-swiftui.md +490 -0
  177. package/dist/data/designs/ios-coinbase.md +409 -0
  178. package/dist/data/designs/ios-copilot-android.md +625 -0
  179. package/dist/data/designs/ios-copilot-expo.md +423 -0
  180. package/dist/data/designs/ios-copilot-swiftui.md +471 -0
  181. package/dist/data/designs/ios-copilot.md +367 -0
  182. package/dist/data/designs/ios-craft-android.md +459 -0
  183. package/dist/data/designs/ios-craft-expo.md +417 -0
  184. package/dist/data/designs/ios-craft-swiftui.md +449 -0
  185. package/dist/data/designs/ios-craft.md +449 -0
  186. package/dist/data/designs/ios-crunchyroll-android.md +432 -0
  187. package/dist/data/designs/ios-crunchyroll-expo.md +388 -0
  188. package/dist/data/designs/ios-crunchyroll-swiftui.md +417 -0
  189. package/dist/data/designs/ios-crunchyroll.md +388 -0
  190. package/dist/data/designs/ios-crypto-com-android.md +461 -0
  191. package/dist/data/designs/ios-crypto-com-expo.md +404 -0
  192. package/dist/data/designs/ios-crypto-com-swiftui.md +419 -0
  193. package/dist/data/designs/ios-crypto-com.md +410 -0
  194. package/dist/data/designs/ios-deepseek-android.md +471 -0
  195. package/dist/data/designs/ios-deepseek-expo.md +391 -0
  196. package/dist/data/designs/ios-deepseek-swiftui.md +354 -0
  197. package/dist/data/designs/ios-deepseek.md +393 -0
  198. package/dist/data/designs/ios-deezer-android.md +475 -0
  199. package/dist/data/designs/ios-deezer-expo.md +400 -0
  200. package/dist/data/designs/ios-deezer-swiftui.md +430 -0
  201. package/dist/data/designs/ios-deezer.md +388 -0
  202. package/dist/data/designs/ios-deliveroo-android.md +493 -0
  203. package/dist/data/designs/ios-deliveroo-expo.md +424 -0
  204. package/dist/data/designs/ios-deliveroo-swiftui.md +398 -0
  205. package/dist/data/designs/ios-deliveroo.md +420 -0
  206. package/dist/data/designs/ios-delta-android.md +439 -0
  207. package/dist/data/designs/ios-delta-expo.md +381 -0
  208. package/dist/data/designs/ios-delta-swiftui.md +400 -0
  209. package/dist/data/designs/ios-delta.md +397 -0
  210. package/dist/data/designs/ios-discord-android.md +611 -0
  211. package/dist/data/designs/ios-discord-expo.md +618 -0
  212. package/dist/data/designs/ios-discord-swiftui.md +630 -0
  213. package/dist/data/designs/ios-discord.md +451 -0
  214. package/dist/data/designs/ios-disney-plus-android.md +464 -0
  215. package/dist/data/designs/ios-disney-plus-expo.md +358 -0
  216. package/dist/data/designs/ios-disney-plus-swiftui.md +412 -0
  217. package/dist/data/designs/ios-disney-plus.md +355 -0
  218. package/dist/data/designs/ios-dominos-android.md +417 -0
  219. package/dist/data/designs/ios-dominos-expo.md +316 -0
  220. package/dist/data/designs/ios-dominos-swiftui.md +340 -0
  221. package/dist/data/designs/ios-dominos.md +347 -0
  222. package/dist/data/designs/ios-doordash-android.md +527 -0
  223. package/dist/data/designs/ios-doordash-expo.md +323 -0
  224. package/dist/data/designs/ios-doordash-swiftui.md +301 -0
  225. package/dist/data/designs/ios-doordash.md +393 -0
  226. package/dist/data/designs/ios-dropbox-android.md +522 -0
  227. package/dist/data/designs/ios-dropbox-expo.md +393 -0
  228. package/dist/data/designs/ios-dropbox-swiftui.md +400 -0
  229. package/dist/data/designs/ios-dropbox.md +374 -0
  230. package/dist/data/designs/ios-duolingo-android.md +641 -0
  231. package/dist/data/designs/ios-duolingo-expo.md +597 -0
  232. package/dist/data/designs/ios-duolingo-swiftui.md +539 -0
  233. package/dist/data/designs/ios-duolingo.md +409 -0
  234. package/dist/data/designs/ios-ebay-android.md +436 -0
  235. package/dist/data/designs/ios-ebay-expo.md +344 -0
  236. package/dist/data/designs/ios-ebay-swiftui.md +308 -0
  237. package/dist/data/designs/ios-ebay.md +355 -0
  238. package/dist/data/designs/ios-espn-android.md +468 -0
  239. package/dist/data/designs/ios-espn-expo.md +387 -0
  240. package/dist/data/designs/ios-espn-swiftui.md +410 -0
  241. package/dist/data/designs/ios-espn.md +384 -0
  242. package/dist/data/designs/ios-etsy-android.md +439 -0
  243. package/dist/data/designs/ios-etsy-expo.md +351 -0
  244. package/dist/data/designs/ios-etsy-swiftui.md +296 -0
  245. package/dist/data/designs/ios-etsy.md +355 -0
  246. package/dist/data/designs/ios-evernote-android.md +419 -0
  247. package/dist/data/designs/ios-evernote-expo.md +379 -0
  248. package/dist/data/designs/ios-evernote-swiftui.md +380 -0
  249. package/dist/data/designs/ios-evernote.md +416 -0
  250. package/dist/data/designs/ios-expedia-android.md +451 -0
  251. package/dist/data/designs/ios-expedia-expo.md +433 -0
  252. package/dist/data/designs/ios-expedia-swiftui.md +399 -0
  253. package/dist/data/designs/ios-expedia.md +431 -0
  254. package/dist/data/designs/ios-facebook-android.md +628 -0
  255. package/dist/data/designs/ios-facebook-expo.md +471 -0
  256. package/dist/data/designs/ios-facebook-swiftui.md +459 -0
  257. package/dist/data/designs/ios-facebook.md +452 -0
  258. package/dist/data/designs/ios-feeld-android.md +431 -0
  259. package/dist/data/designs/ios-feeld-expo.md +379 -0
  260. package/dist/data/designs/ios-feeld-swiftui.md +401 -0
  261. package/dist/data/designs/ios-feeld.md +378 -0
  262. package/dist/data/designs/ios-fidelity-android.md +426 -0
  263. package/dist/data/designs/ios-fidelity-expo.md +396 -0
  264. package/dist/data/designs/ios-fidelity-swiftui.md +398 -0
  265. package/dist/data/designs/ios-fidelity.md +387 -0
  266. package/dist/data/designs/ios-figma-android.md +578 -0
  267. package/dist/data/designs/ios-figma-expo.md +504 -0
  268. package/dist/data/designs/ios-figma-swiftui.md +542 -0
  269. package/dist/data/designs/ios-figma.md +404 -0
  270. package/dist/data/designs/ios-fitbit-android.md +439 -0
  271. package/dist/data/designs/ios-fitbit-expo.md +389 -0
  272. package/dist/data/designs/ios-fitbit-swiftui.md +380 -0
  273. package/dist/data/designs/ios-fitbit.md +396 -0
  274. package/dist/data/designs/ios-flickr-android.md +506 -0
  275. package/dist/data/designs/ios-flickr-expo.md +434 -0
  276. package/dist/data/designs/ios-flickr-swiftui.md +421 -0
  277. package/dist/data/designs/ios-flickr.md +394 -0
  278. package/dist/data/designs/ios-flighty-android.md +418 -0
  279. package/dist/data/designs/ios-flighty-expo.md +353 -0
  280. package/dist/data/designs/ios-flighty-swiftui.md +337 -0
  281. package/dist/data/designs/ios-flighty.md +357 -0
  282. package/dist/data/designs/ios-flo-android.md +447 -0
  283. package/dist/data/designs/ios-flo-expo.md +363 -0
  284. package/dist/data/designs/ios-flo-swiftui.md +355 -0
  285. package/dist/data/designs/ios-flo.md +351 -0
  286. package/dist/data/designs/ios-garmin-connect-android.md +531 -0
  287. package/dist/data/designs/ios-garmin-connect-expo.md +429 -0
  288. package/dist/data/designs/ios-garmin-connect-swiftui.md +459 -0
  289. package/dist/data/designs/ios-garmin-connect.md +419 -0
  290. package/dist/data/designs/ios-gas-android.md +438 -0
  291. package/dist/data/designs/ios-gas-expo.md +350 -0
  292. package/dist/data/designs/ios-gas-swiftui.md +329 -0
  293. package/dist/data/designs/ios-gas.md +387 -0
  294. package/dist/data/designs/ios-gemini-android.md +568 -0
  295. package/dist/data/designs/ios-gemini-expo.md +416 -0
  296. package/dist/data/designs/ios-gemini-swiftui.md +424 -0
  297. package/dist/data/designs/ios-gemini.md +351 -0
  298. package/dist/data/designs/ios-github-android.md +507 -0
  299. package/dist/data/designs/ios-github-expo.md +486 -0
  300. package/dist/data/designs/ios-github-swiftui.md +459 -0
  301. package/dist/data/designs/ios-github.md +394 -0
  302. package/dist/data/designs/ios-gmail-android.md +548 -0
  303. package/dist/data/designs/ios-gmail-expo.md +457 -0
  304. package/dist/data/designs/ios-gmail-swiftui.md +470 -0
  305. package/dist/data/designs/ios-gmail.md +441 -0
  306. package/dist/data/designs/ios-goodreads-android.md +436 -0
  307. package/dist/data/designs/ios-goodreads-expo.md +407 -0
  308. package/dist/data/designs/ios-goodreads-swiftui.md +378 -0
  309. package/dist/data/designs/ios-goodreads.md +385 -0
  310. package/dist/data/designs/ios-google-calendar-android.md +565 -0
  311. package/dist/data/designs/ios-google-calendar-expo.md +616 -0
  312. package/dist/data/designs/ios-google-calendar-swiftui.md +585 -0
  313. package/dist/data/designs/ios-google-calendar.md +431 -0
  314. package/dist/data/designs/ios-google-maps-android.md +614 -0
  315. package/dist/data/designs/ios-google-maps-expo.md +515 -0
  316. package/dist/data/designs/ios-google-maps-swiftui.md +484 -0
  317. package/dist/data/designs/ios-google-maps.md +451 -0
  318. package/dist/data/designs/ios-grammarly-android.md +449 -0
  319. package/dist/data/designs/ios-grammarly-expo.md +383 -0
  320. package/dist/data/designs/ios-grammarly-swiftui.md +381 -0
  321. package/dist/data/designs/ios-grammarly.md +392 -0
  322. package/dist/data/designs/ios-grindr-android.md +494 -0
  323. package/dist/data/designs/ios-grindr-expo.md +358 -0
  324. package/dist/data/designs/ios-grindr-swiftui.md +357 -0
  325. package/dist/data/designs/ios-grindr.md +356 -0
  326. package/dist/data/designs/ios-grok-android.md +471 -0
  327. package/dist/data/designs/ios-grok-expo.md +388 -0
  328. package/dist/data/designs/ios-grok-swiftui.md +397 -0
  329. package/dist/data/designs/ios-grok.md +357 -0
  330. package/dist/data/designs/ios-groupme-android.md +551 -0
  331. package/dist/data/designs/ios-groupme-expo.md +442 -0
  332. package/dist/data/designs/ios-groupme-swiftui.md +439 -0
  333. package/dist/data/designs/ios-groupme.md +424 -0
  334. package/dist/data/designs/ios-grubhub-android.md +506 -0
  335. package/dist/data/designs/ios-grubhub-expo.md +428 -0
  336. package/dist/data/designs/ios-grubhub-swiftui.md +408 -0
  337. package/dist/data/designs/ios-grubhub.md +427 -0
  338. package/dist/data/designs/ios-happn-android.md +464 -0
  339. package/dist/data/designs/ios-happn-expo.md +411 -0
  340. package/dist/data/designs/ios-happn-swiftui.md +401 -0
  341. package/dist/data/designs/ios-happn.md +400 -0
  342. package/dist/data/designs/ios-headspace-android.md +688 -0
  343. package/dist/data/designs/ios-headspace-expo.md +574 -0
  344. package/dist/data/designs/ios-headspace-swiftui.md +498 -0
  345. package/dist/data/designs/ios-headspace.md +430 -0
  346. package/dist/data/designs/ios-hevy-android.md +473 -0
  347. package/dist/data/designs/ios-hevy-expo.md +405 -0
  348. package/dist/data/designs/ios-hevy-swiftui.md +367 -0
  349. package/dist/data/designs/ios-hevy.md +410 -0
  350. package/dist/data/designs/ios-hinge-android.md +743 -0
  351. package/dist/data/designs/ios-hinge-expo.md +580 -0
  352. package/dist/data/designs/ios-hinge-swiftui.md +512 -0
  353. package/dist/data/designs/ios-hinge.md +405 -0
  354. package/dist/data/designs/ios-hopper-android.md +440 -0
  355. package/dist/data/designs/ios-hopper-expo.md +353 -0
  356. package/dist/data/designs/ios-hopper-swiftui.md +340 -0
  357. package/dist/data/designs/ios-hopper.md +354 -0
  358. package/dist/data/designs/ios-hulu-android.md +435 -0
  359. package/dist/data/designs/ios-hulu-expo.md +331 -0
  360. package/dist/data/designs/ios-hulu-swiftui.md +374 -0
  361. package/dist/data/designs/ios-hulu.md +353 -0
  362. package/dist/data/designs/ios-iheartradio-android.md +481 -0
  363. package/dist/data/designs/ios-iheartradio-expo.md +417 -0
  364. package/dist/data/designs/ios-iheartradio-swiftui.md +423 -0
  365. package/dist/data/designs/ios-iheartradio.md +381 -0
  366. package/dist/data/designs/ios-imessage-android.md +426 -0
  367. package/dist/data/designs/ios-imessage-expo.md +384 -0
  368. package/dist/data/designs/ios-imessage-swiftui.md +378 -0
  369. package/dist/data/designs/ios-imessage.md +394 -0
  370. package/dist/data/designs/ios-instacart-android.md +471 -0
  371. package/dist/data/designs/ios-instacart-expo.md +349 -0
  372. package/dist/data/designs/ios-instacart-swiftui.md +378 -0
  373. package/dist/data/designs/ios-instacart.md +360 -0
  374. package/dist/data/designs/ios-instagram-android.md +646 -0
  375. package/dist/data/designs/ios-instagram-expo.md +310 -0
  376. package/dist/data/designs/ios-instagram-swiftui.md +333 -0
  377. package/dist/data/designs/ios-instagram.md +376 -0
  378. package/dist/data/designs/ios-jira-android.md +432 -0
  379. package/dist/data/designs/ios-jira-expo.md +375 -0
  380. package/dist/data/designs/ios-jira-swiftui.md +433 -0
  381. package/dist/data/designs/ios-jira.md +424 -0
  382. package/dist/data/designs/ios-kakaotalk-android.md +491 -0
  383. package/dist/data/designs/ios-kakaotalk-expo.md +418 -0
  384. package/dist/data/designs/ios-kakaotalk-swiftui.md +406 -0
  385. package/dist/data/designs/ios-kakaotalk.md +414 -0
  386. package/dist/data/designs/ios-kayak-android.md +466 -0
  387. package/dist/data/designs/ios-kayak-expo.md +407 -0
  388. package/dist/data/designs/ios-kayak-swiftui.md +426 -0
  389. package/dist/data/designs/ios-kayak.md +392 -0
  390. package/dist/data/designs/ios-kick-android.md +487 -0
  391. package/dist/data/designs/ios-kick-expo.md +434 -0
  392. package/dist/data/designs/ios-kick-swiftui.md +429 -0
  393. package/dist/data/designs/ios-kick.md +389 -0
  394. package/dist/data/designs/ios-kik-android.md +433 -0
  395. package/dist/data/designs/ios-kik-expo.md +363 -0
  396. package/dist/data/designs/ios-kik-swiftui.md +363 -0
  397. package/dist/data/designs/ios-kik.md +392 -0
  398. package/dist/data/designs/ios-kindle-android.md +439 -0
  399. package/dist/data/designs/ios-kindle-expo.md +356 -0
  400. package/dist/data/designs/ios-kindle-swiftui.md +372 -0
  401. package/dist/data/designs/ios-kindle.md +369 -0
  402. package/dist/data/designs/ios-klarna-android.md +420 -0
  403. package/dist/data/designs/ios-klarna-expo.md +349 -0
  404. package/dist/data/designs/ios-klarna-swiftui.md +360 -0
  405. package/dist/data/designs/ios-klarna.md +356 -0
  406. package/dist/data/designs/ios-lemon8-android.md +492 -0
  407. package/dist/data/designs/ios-lemon8-expo.md +413 -0
  408. package/dist/data/designs/ios-lemon8-swiftui.md +428 -0
  409. package/dist/data/designs/ios-lemon8.md +378 -0
  410. package/dist/data/designs/ios-life360-android.md +474 -0
  411. package/dist/data/designs/ios-life360-expo.md +375 -0
  412. package/dist/data/designs/ios-life360-swiftui.md +390 -0
  413. package/dist/data/designs/ios-life360.md +402 -0
  414. package/dist/data/designs/ios-line-android.md +517 -0
  415. package/dist/data/designs/ios-line-expo.md +402 -0
  416. package/dist/data/designs/ios-line-swiftui.md +361 -0
  417. package/dist/data/designs/ios-line.md +362 -0
  418. package/dist/data/designs/ios-linear-android.md +457 -0
  419. package/dist/data/designs/ios-linear-expo.md +367 -0
  420. package/dist/data/designs/ios-linear-swiftui.md +401 -0
  421. package/dist/data/designs/ios-linear.md +368 -0
  422. package/dist/data/designs/ios-linkedin-android.md +620 -0
  423. package/dist/data/designs/ios-linkedin-expo.md +469 -0
  424. package/dist/data/designs/ios-linkedin-swiftui.md +472 -0
  425. package/dist/data/designs/ios-linkedin.md +444 -0
  426. package/dist/data/designs/ios-locket-android.md +500 -0
  427. package/dist/data/designs/ios-locket-expo.md +375 -0
  428. package/dist/data/designs/ios-locket-swiftui.md +375 -0
  429. package/dist/data/designs/ios-locket.md +381 -0
  430. package/dist/data/designs/ios-lyft-android.md +406 -0
  431. package/dist/data/designs/ios-lyft-expo.md +333 -0
  432. package/dist/data/designs/ios-lyft-swiftui.md +315 -0
  433. package/dist/data/designs/ios-lyft.md +337 -0
  434. package/dist/data/designs/ios-marriott-bonvoy-android.md +488 -0
  435. package/dist/data/designs/ios-marriott-bonvoy-expo.md +412 -0
  436. package/dist/data/designs/ios-marriott-bonvoy-swiftui.md +461 -0
  437. package/dist/data/designs/ios-marriott-bonvoy.md +379 -0
  438. package/dist/data/designs/ios-mastodon-android.md +476 -0
  439. package/dist/data/designs/ios-mastodon-expo.md +379 -0
  440. package/dist/data/designs/ios-mastodon-swiftui.md +349 -0
  441. package/dist/data/designs/ios-mastodon.md +337 -0
  442. package/dist/data/designs/ios-match-android.md +496 -0
  443. package/dist/data/designs/ios-match-expo.md +393 -0
  444. package/dist/data/designs/ios-match-swiftui.md +450 -0
  445. package/dist/data/designs/ios-match.md +382 -0
  446. package/dist/data/designs/ios-max-android.md +454 -0
  447. package/dist/data/designs/ios-max-expo.md +342 -0
  448. package/dist/data/designs/ios-max-swiftui.md +332 -0
  449. package/dist/data/designs/ios-max.md +352 -0
  450. package/dist/data/designs/ios-mcdonalds-android.md +497 -0
  451. package/dist/data/designs/ios-mcdonalds-expo.md +382 -0
  452. package/dist/data/designs/ios-mcdonalds-swiftui.md +394 -0
  453. package/dist/data/designs/ios-mcdonalds.md +410 -0
  454. package/dist/data/designs/ios-messenger-android.md +523 -0
  455. package/dist/data/designs/ios-messenger-expo.md +379 -0
  456. package/dist/data/designs/ios-messenger-swiftui.md +369 -0
  457. package/dist/data/designs/ios-messenger.md +361 -0
  458. package/dist/data/designs/ios-microsoft-teams-android.md +446 -0
  459. package/dist/data/designs/ios-microsoft-teams-expo.md +362 -0
  460. package/dist/data/designs/ios-microsoft-teams-swiftui.md +384 -0
  461. package/dist/data/designs/ios-microsoft-teams.md +359 -0
  462. package/dist/data/designs/ios-midjourney-android.md +503 -0
  463. package/dist/data/designs/ios-midjourney-expo.md +406 -0
  464. package/dist/data/designs/ios-midjourney-swiftui.md +376 -0
  465. package/dist/data/designs/ios-midjourney.md +407 -0
  466. package/dist/data/designs/ios-miro-android.md +475 -0
  467. package/dist/data/designs/ios-miro-expo.md +421 -0
  468. package/dist/data/designs/ios-miro-swiftui.md +407 -0
  469. package/dist/data/designs/ios-miro.md +424 -0
  470. package/dist/data/designs/ios-monday-android.md +426 -0
  471. package/dist/data/designs/ios-monday-expo.md +382 -0
  472. package/dist/data/designs/ios-monday-swiftui.md +386 -0
  473. package/dist/data/designs/ios-monday.md +415 -0
  474. package/dist/data/designs/ios-monzo-android.md +423 -0
  475. package/dist/data/designs/ios-monzo-expo.md +391 -0
  476. package/dist/data/designs/ios-monzo-swiftui.md +371 -0
  477. package/dist/data/designs/ios-monzo.md +382 -0
  478. package/dist/data/designs/ios-myfitnesspal-android.md +631 -0
  479. package/dist/data/designs/ios-myfitnesspal-expo.md +489 -0
  480. package/dist/data/designs/ios-myfitnesspal-swiftui.md +500 -0
  481. package/dist/data/designs/ios-myfitnesspal.md +408 -0
  482. package/dist/data/designs/ios-netflix-android.md +570 -0
  483. package/dist/data/designs/ios-netflix-expo.md +528 -0
  484. package/dist/data/designs/ios-netflix-swiftui.md +543 -0
  485. package/dist/data/designs/ios-netflix.md +476 -0
  486. package/dist/data/designs/ios-nextdoor-android.md +399 -0
  487. package/dist/data/designs/ios-nextdoor-expo.md +317 -0
  488. package/dist/data/designs/ios-nextdoor-swiftui.md +343 -0
  489. package/dist/data/designs/ios-nextdoor.md +332 -0
  490. package/dist/data/designs/ios-nike-run-club-android.md +598 -0
  491. package/dist/data/designs/ios-nike-run-club-expo.md +459 -0
  492. package/dist/data/designs/ios-nike-run-club-swiftui.md +474 -0
  493. package/dist/data/designs/ios-nike-run-club.md +400 -0
  494. package/dist/data/designs/ios-noom-android.md +455 -0
  495. package/dist/data/designs/ios-noom-expo.md +362 -0
  496. package/dist/data/designs/ios-noom-swiftui.md +369 -0
  497. package/dist/data/designs/ios-noom.md +404 -0
  498. package/dist/data/designs/ios-notion-android.md +575 -0
  499. package/dist/data/designs/ios-notion-expo.md +543 -0
  500. package/dist/data/designs/ios-notion-swiftui.md +562 -0
  501. package/dist/data/designs/ios-notion.md +506 -0
  502. package/dist/data/designs/ios-nubank-android.md +447 -0
  503. package/dist/data/designs/ios-nubank-expo.md +391 -0
  504. package/dist/data/designs/ios-nubank-swiftui.md +391 -0
  505. package/dist/data/designs/ios-nubank.md +388 -0
  506. package/dist/data/designs/ios-obsidian-android.md +456 -0
  507. package/dist/data/designs/ios-obsidian-expo.md +401 -0
  508. package/dist/data/designs/ios-obsidian-swiftui.md +412 -0
  509. package/dist/data/designs/ios-obsidian.md +363 -0
  510. package/dist/data/designs/ios-okcupid-android.md +496 -0
  511. package/dist/data/designs/ios-okcupid-expo.md +378 -0
  512. package/dist/data/designs/ios-okcupid-swiftui.md +343 -0
  513. package/dist/data/designs/ios-okcupid.md +364 -0
  514. package/dist/data/designs/ios-opentable-android.md +426 -0
  515. package/dist/data/designs/ios-opentable-expo.md +350 -0
  516. package/dist/data/designs/ios-opentable-swiftui.md +328 -0
  517. package/dist/data/designs/ios-opentable.md +411 -0
  518. package/dist/data/designs/ios-oura-android.md +426 -0
  519. package/dist/data/designs/ios-oura-expo.md +353 -0
  520. package/dist/data/designs/ios-oura-swiftui.md +327 -0
  521. package/dist/data/designs/ios-oura.md +356 -0
  522. package/dist/data/designs/ios-overcast-android.md +508 -0
  523. package/dist/data/designs/ios-overcast-expo.md +420 -0
  524. package/dist/data/designs/ios-overcast-swiftui.md +427 -0
  525. package/dist/data/designs/ios-overcast.md +414 -0
  526. package/dist/data/designs/ios-pandora-android.md +477 -0
  527. package/dist/data/designs/ios-pandora-expo.md +406 -0
  528. package/dist/data/designs/ios-pandora-swiftui.md +413 -0
  529. package/dist/data/designs/ios-pandora.md +366 -0
  530. package/dist/data/designs/ios-panera-android.md +414 -0
  531. package/dist/data/designs/ios-panera-expo.md +352 -0
  532. package/dist/data/designs/ios-panera-swiftui.md +369 -0
  533. package/dist/data/designs/ios-panera.md +412 -0
  534. package/dist/data/designs/ios-paramount-plus-android.md +415 -0
  535. package/dist/data/designs/ios-paramount-plus-expo.md +363 -0
  536. package/dist/data/designs/ios-paramount-plus-swiftui.md +372 -0
  537. package/dist/data/designs/ios-paramount-plus.md +400 -0
  538. package/dist/data/designs/ios-paypal-android.md +535 -0
  539. package/dist/data/designs/ios-paypal-expo.md +429 -0
  540. package/dist/data/designs/ios-paypal-swiftui.md +466 -0
  541. package/dist/data/designs/ios-paypal.md +393 -0
  542. package/dist/data/designs/ios-peacock-android.md +453 -0
  543. package/dist/data/designs/ios-peacock-expo.md +393 -0
  544. package/dist/data/designs/ios-peacock-swiftui.md +420 -0
  545. package/dist/data/designs/ios-peacock.md +411 -0
  546. package/dist/data/designs/ios-peloton-android.md +470 -0
  547. package/dist/data/designs/ios-peloton-expo.md +401 -0
  548. package/dist/data/designs/ios-peloton-swiftui.md +409 -0
  549. package/dist/data/designs/ios-peloton.md +415 -0
  550. package/dist/data/designs/ios-perplexity-android.md +553 -0
  551. package/dist/data/designs/ios-perplexity-expo.md +703 -0
  552. package/dist/data/designs/ios-perplexity-swiftui.md +602 -0
  553. package/dist/data/designs/ios-perplexity.md +453 -0
  554. package/dist/data/designs/ios-pinterest-android.md +551 -0
  555. package/dist/data/designs/ios-pinterest-expo.md +466 -0
  556. package/dist/data/designs/ios-pinterest-swiftui.md +464 -0
  557. package/dist/data/designs/ios-pinterest.md +427 -0
  558. package/dist/data/designs/ios-plenty-of-fish-android.md +462 -0
  559. package/dist/data/designs/ios-plenty-of-fish-expo.md +380 -0
  560. package/dist/data/designs/ios-plenty-of-fish-swiftui.md +429 -0
  561. package/dist/data/designs/ios-plenty-of-fish.md +387 -0
  562. package/dist/data/designs/ios-plex-android.md +403 -0
  563. package/dist/data/designs/ios-plex-expo.md +333 -0
  564. package/dist/data/designs/ios-plex-swiftui.md +349 -0
  565. package/dist/data/designs/ios-plex.md +379 -0
  566. package/dist/data/designs/ios-pluto-tv-android.md +413 -0
  567. package/dist/data/designs/ios-pluto-tv-expo.md +379 -0
  568. package/dist/data/designs/ios-pluto-tv-swiftui.md +411 -0
  569. package/dist/data/designs/ios-pluto-tv.md +362 -0
  570. package/dist/data/designs/ios-pocket-casts-android.md +492 -0
  571. package/dist/data/designs/ios-pocket-casts-expo.md +430 -0
  572. package/dist/data/designs/ios-pocket-casts-swiftui.md +479 -0
  573. package/dist/data/designs/ios-pocket-casts.md +427 -0
  574. package/dist/data/designs/ios-postman-android.md +472 -0
  575. package/dist/data/designs/ios-postman-expo.md +372 -0
  576. package/dist/data/designs/ios-postman-swiftui.md +377 -0
  577. package/dist/data/designs/ios-postman.md +405 -0
  578. package/dist/data/designs/ios-prime-video-android.md +447 -0
  579. package/dist/data/designs/ios-prime-video-expo.md +365 -0
  580. package/dist/data/designs/ios-prime-video-swiftui.md +333 -0
  581. package/dist/data/designs/ios-prime-video.md +351 -0
  582. package/dist/data/designs/ios-quora-android.md +513 -0
  583. package/dist/data/designs/ios-quora-expo.md +362 -0
  584. package/dist/data/designs/ios-quora-swiftui.md +375 -0
  585. package/dist/data/designs/ios-quora.md +359 -0
  586. package/dist/data/designs/ios-raya-android.md +401 -0
  587. package/dist/data/designs/ios-raya-expo.md +366 -0
  588. package/dist/data/designs/ios-raya-swiftui.md +393 -0
  589. package/dist/data/designs/ios-raya.md +366 -0
  590. package/dist/data/designs/ios-reddit-android.md +605 -0
  591. package/dist/data/designs/ios-reddit-expo.md +553 -0
  592. package/dist/data/designs/ios-reddit-swiftui.md +514 -0
  593. package/dist/data/designs/ios-reddit.md +460 -0
  594. package/dist/data/designs/ios-resy-android.md +430 -0
  595. package/dist/data/designs/ios-resy-expo.md +344 -0
  596. package/dist/data/designs/ios-resy-swiftui.md +330 -0
  597. package/dist/data/designs/ios-resy.md +412 -0
  598. package/dist/data/designs/ios-revolut-android.md +433 -0
  599. package/dist/data/designs/ios-revolut-expo.md +379 -0
  600. package/dist/data/designs/ios-revolut-swiftui.md +372 -0
  601. package/dist/data/designs/ios-revolut.md +353 -0
  602. package/dist/data/designs/ios-robinhood-android.md +587 -0
  603. package/dist/data/designs/ios-robinhood-expo.md +416 -0
  604. package/dist/data/designs/ios-robinhood-swiftui.md +431 -0
  605. package/dist/data/designs/ios-robinhood.md +380 -0
  606. package/dist/data/designs/ios-runna-android.md +485 -0
  607. package/dist/data/designs/ios-runna-expo.md +388 -0
  608. package/dist/data/designs/ios-runna-swiftui.md +413 -0
  609. package/dist/data/designs/ios-runna.md +390 -0
  610. package/dist/data/designs/ios-shazam-android.md +436 -0
  611. package/dist/data/designs/ios-shazam-expo.md +348 -0
  612. package/dist/data/designs/ios-shazam-swiftui.md +394 -0
  613. package/dist/data/designs/ios-shazam.md +338 -0
  614. package/dist/data/designs/ios-signal-android.md +462 -0
  615. package/dist/data/designs/ios-signal-expo.md +361 -0
  616. package/dist/data/designs/ios-signal-swiftui.md +350 -0
  617. package/dist/data/designs/ios-signal.md +357 -0
  618. package/dist/data/designs/ios-skype-android.md +398 -0
  619. package/dist/data/designs/ios-skype-expo.md +368 -0
  620. package/dist/data/designs/ios-skype-swiftui.md +369 -0
  621. package/dist/data/designs/ios-skype.md +406 -0
  622. package/dist/data/designs/ios-skyscanner-android.md +451 -0
  623. package/dist/data/designs/ios-skyscanner-expo.md +423 -0
  624. package/dist/data/designs/ios-skyscanner-swiftui.md +419 -0
  625. package/dist/data/designs/ios-skyscanner.md +421 -0
  626. package/dist/data/designs/ios-slack-android.md +695 -0
  627. package/dist/data/designs/ios-slack-expo.md +601 -0
  628. package/dist/data/designs/ios-slack-swiftui.md +594 -0
  629. package/dist/data/designs/ios-slack.md +474 -0
  630. package/dist/data/designs/ios-sleep-cycle-android.md +436 -0
  631. package/dist/data/designs/ios-sleep-cycle-expo.md +380 -0
  632. package/dist/data/designs/ios-sleep-cycle-swiftui.md +409 -0
  633. package/dist/data/designs/ios-sleep-cycle.md +386 -0
  634. package/dist/data/designs/ios-snapchat-android.md +671 -0
  635. package/dist/data/designs/ios-snapchat-expo.md +528 -0
  636. package/dist/data/designs/ios-snapchat-swiftui.md +557 -0
  637. package/dist/data/designs/ios-snapchat.md +478 -0
  638. package/dist/data/designs/ios-sofi-android.md +446 -0
  639. package/dist/data/designs/ios-sofi-expo.md +387 -0
  640. package/dist/data/designs/ios-sofi-swiftui.md +379 -0
  641. package/dist/data/designs/ios-sofi.md +385 -0
  642. package/dist/data/designs/ios-soundcloud-android.md +488 -0
  643. package/dist/data/designs/ios-soundcloud-expo.md +364 -0
  644. package/dist/data/designs/ios-soundcloud-swiftui.md +399 -0
  645. package/dist/data/designs/ios-soundcloud.md +359 -0
  646. package/dist/data/designs/ios-southwest-android.md +446 -0
  647. package/dist/data/designs/ios-southwest-expo.md +389 -0
  648. package/dist/data/designs/ios-southwest-swiftui.md +405 -0
  649. package/dist/data/designs/ios-southwest.md +405 -0
  650. package/dist/data/designs/ios-spotify-android.md +427 -0
  651. package/dist/data/designs/ios-spotify-expo.md +321 -0
  652. package/dist/data/designs/ios-spotify-swiftui.md +312 -0
  653. package/dist/data/designs/ios-spotify.md +366 -0
  654. package/dist/data/designs/ios-starbucks-android.md +622 -0
  655. package/dist/data/designs/ios-starbucks-expo.md +497 -0
  656. package/dist/data/designs/ios-starbucks-swiftui.md +500 -0
  657. package/dist/data/designs/ios-starbucks.md +440 -0
  658. package/dist/data/designs/ios-strava-android.md +656 -0
  659. package/dist/data/designs/ios-strava-expo.md +501 -0
  660. package/dist/data/designs/ios-strava-swiftui.md +465 -0
  661. package/dist/data/designs/ios-strava.md +433 -0
  662. package/dist/data/designs/ios-strong-android.md +479 -0
  663. package/dist/data/designs/ios-strong-expo.md +396 -0
  664. package/dist/data/designs/ios-strong-swiftui.md +363 -0
  665. package/dist/data/designs/ios-strong.md +415 -0
  666. package/dist/data/designs/ios-substack-android.md +440 -0
  667. package/dist/data/designs/ios-substack-expo.md +395 -0
  668. package/dist/data/designs/ios-substack-swiftui.md +371 -0
  669. package/dist/data/designs/ios-substack.md +372 -0
  670. package/dist/data/designs/ios-swiggy-android.md +549 -0
  671. package/dist/data/designs/ios-swiggy-expo.md +443 -0
  672. package/dist/data/designs/ios-swiggy-swiftui.md +471 -0
  673. package/dist/data/designs/ios-swiggy.md +432 -0
  674. package/dist/data/designs/ios-taco-bell-android.md +529 -0
  675. package/dist/data/designs/ios-taco-bell-expo.md +407 -0
  676. package/dist/data/designs/ios-taco-bell-swiftui.md +419 -0
  677. package/dist/data/designs/ios-taco-bell.md +430 -0
  678. package/dist/data/designs/ios-telegram-android.md +676 -0
  679. package/dist/data/designs/ios-telegram-expo.md +594 -0
  680. package/dist/data/designs/ios-telegram-swiftui.md +518 -0
  681. package/dist/data/designs/ios-telegram.md +458 -0
  682. package/dist/data/designs/ios-the-league-android.md +454 -0
  683. package/dist/data/designs/ios-the-league-expo.md +391 -0
  684. package/dist/data/designs/ios-the-league-swiftui.md +409 -0
  685. package/dist/data/designs/ios-the-league.md +368 -0
  686. package/dist/data/designs/ios-things-3-android.md +421 -0
  687. package/dist/data/designs/ios-things-3-expo.md +351 -0
  688. package/dist/data/designs/ios-things-3-swiftui.md +359 -0
  689. package/dist/data/designs/ios-things-3.md +339 -0
  690. package/dist/data/designs/ios-threads-android.md +588 -0
  691. package/dist/data/designs/ios-threads-expo.md +468 -0
  692. package/dist/data/designs/ios-threads-swiftui.md +452 -0
  693. package/dist/data/designs/ios-threads.md +424 -0
  694. package/dist/data/designs/ios-threema-android.md +496 -0
  695. package/dist/data/designs/ios-threema-expo.md +415 -0
  696. package/dist/data/designs/ios-threema-swiftui.md +446 -0
  697. package/dist/data/designs/ios-threema.md +397 -0
  698. package/dist/data/designs/ios-tidal-android.md +398 -0
  699. package/dist/data/designs/ios-tidal-expo.md +323 -0
  700. package/dist/data/designs/ios-tidal-swiftui.md +340 -0
  701. package/dist/data/designs/ios-tidal.md +351 -0
  702. package/dist/data/designs/ios-tiktok-android.md +654 -0
  703. package/dist/data/designs/ios-tiktok-expo.md +578 -0
  704. package/dist/data/designs/ios-tiktok-swiftui.md +595 -0
  705. package/dist/data/designs/ios-tiktok.md +387 -0
  706. package/dist/data/designs/ios-tinder-android.md +681 -0
  707. package/dist/data/designs/ios-tinder-expo.md +512 -0
  708. package/dist/data/designs/ios-tinder-swiftui.md +497 -0
  709. package/dist/data/designs/ios-tinder.md +415 -0
  710. package/dist/data/designs/ios-todoist-android.md +711 -0
  711. package/dist/data/designs/ios-todoist-expo.md +607 -0
  712. package/dist/data/designs/ios-todoist-swiftui.md +573 -0
  713. package/dist/data/designs/ios-todoist.md +418 -0
  714. package/dist/data/designs/ios-trello-android.md +412 -0
  715. package/dist/data/designs/ios-trello-expo.md +332 -0
  716. package/dist/data/designs/ios-trello-swiftui.md +359 -0
  717. package/dist/data/designs/ios-trello.md +344 -0
  718. package/dist/data/designs/ios-tripadvisor-android.md +450 -0
  719. package/dist/data/designs/ios-tripadvisor-expo.md +322 -0
  720. package/dist/data/designs/ios-tripadvisor-swiftui.md +326 -0
  721. package/dist/data/designs/ios-tripadvisor.md +356 -0
  722. package/dist/data/designs/ios-tubi-android.md +453 -0
  723. package/dist/data/designs/ios-tubi-expo.md +419 -0
  724. package/dist/data/designs/ios-tubi-swiftui.md +463 -0
  725. package/dist/data/designs/ios-tubi.md +383 -0
  726. package/dist/data/designs/ios-tumblr-android.md +462 -0
  727. package/dist/data/designs/ios-tumblr-expo.md +374 -0
  728. package/dist/data/designs/ios-tumblr-swiftui.md +380 -0
  729. package/dist/data/designs/ios-tumblr.md +337 -0
  730. package/dist/data/designs/ios-turo-android.md +500 -0
  731. package/dist/data/designs/ios-turo-expo.md +454 -0
  732. package/dist/data/designs/ios-turo-swiftui.md +447 -0
  733. package/dist/data/designs/ios-turo.md +392 -0
  734. package/dist/data/designs/ios-twitch-android.md +412 -0
  735. package/dist/data/designs/ios-twitch-expo.md +342 -0
  736. package/dist/data/designs/ios-twitch-swiftui.md +328 -0
  737. package/dist/data/designs/ios-twitch.md +354 -0
  738. package/dist/data/designs/ios-uber-android.md +637 -0
  739. package/dist/data/designs/ios-uber-eats-android.md +502 -0
  740. package/dist/data/designs/ios-uber-eats-expo.md +407 -0
  741. package/dist/data/designs/ios-uber-eats-swiftui.md +393 -0
  742. package/dist/data/designs/ios-uber-eats.md +353 -0
  743. package/dist/data/designs/ios-uber-expo.md +512 -0
  744. package/dist/data/designs/ios-uber-swiftui.md +483 -0
  745. package/dist/data/designs/ios-uber.md +395 -0
  746. package/dist/data/designs/ios-united-airlines-android.md +494 -0
  747. package/dist/data/designs/ios-united-airlines-expo.md +408 -0
  748. package/dist/data/designs/ios-united-airlines-swiftui.md +453 -0
  749. package/dist/data/designs/ios-united-airlines.md +388 -0
  750. package/dist/data/designs/ios-venmo-android.md +654 -0
  751. package/dist/data/designs/ios-venmo-expo.md +458 -0
  752. package/dist/data/designs/ios-venmo-swiftui.md +469 -0
  753. package/dist/data/designs/ios-venmo.md +436 -0
  754. package/dist/data/designs/ios-vercel-android.md +454 -0
  755. package/dist/data/designs/ios-vercel-expo.md +387 -0
  756. package/dist/data/designs/ios-vercel-swiftui.md +374 -0
  757. package/dist/data/designs/ios-vercel.md +399 -0
  758. package/dist/data/designs/ios-vero-android.md +498 -0
  759. package/dist/data/designs/ios-vero-expo.md +376 -0
  760. package/dist/data/designs/ios-vero-swiftui.md +374 -0
  761. package/dist/data/designs/ios-vero.md +394 -0
  762. package/dist/data/designs/ios-viber-android.md +377 -0
  763. package/dist/data/designs/ios-viber-expo.md +375 -0
  764. package/dist/data/designs/ios-viber-swiftui.md +378 -0
  765. package/dist/data/designs/ios-viber.md +403 -0
  766. package/dist/data/designs/ios-vimeo-android.md +465 -0
  767. package/dist/data/designs/ios-vimeo-expo.md +347 -0
  768. package/dist/data/designs/ios-vimeo-swiftui.md +383 -0
  769. package/dist/data/designs/ios-vimeo.md +403 -0
  770. package/dist/data/designs/ios-vrbo-android.md +488 -0
  771. package/dist/data/designs/ios-vrbo-expo.md +395 -0
  772. package/dist/data/designs/ios-vrbo-swiftui.md +421 -0
  773. package/dist/data/designs/ios-vrbo.md +383 -0
  774. package/dist/data/designs/ios-vsco-android.md +490 -0
  775. package/dist/data/designs/ios-vsco-expo.md +413 -0
  776. package/dist/data/designs/ios-vsco-swiftui.md +449 -0
  777. package/dist/data/designs/ios-vsco.md +412 -0
  778. package/dist/data/designs/ios-walmart-android.md +479 -0
  779. package/dist/data/designs/ios-walmart-expo.md +370 -0
  780. package/dist/data/designs/ios-walmart-swiftui.md +387 -0
  781. package/dist/data/designs/ios-walmart.md +366 -0
  782. package/dist/data/designs/ios-waze-android.md +695 -0
  783. package/dist/data/designs/ios-waze-expo.md +587 -0
  784. package/dist/data/designs/ios-waze-swiftui.md +601 -0
  785. package/dist/data/designs/ios-waze.md +453 -0
  786. package/dist/data/designs/ios-webull-android.md +429 -0
  787. package/dist/data/designs/ios-webull-expo.md +384 -0
  788. package/dist/data/designs/ios-webull-swiftui.md +406 -0
  789. package/dist/data/designs/ios-webull.md +375 -0
  790. package/dist/data/designs/ios-wechat-android.md +545 -0
  791. package/dist/data/designs/ios-wechat-expo.md +398 -0
  792. package/dist/data/designs/ios-wechat-swiftui.md +394 -0
  793. package/dist/data/designs/ios-wechat.md +363 -0
  794. package/dist/data/designs/ios-whatsapp-android.md +568 -0
  795. package/dist/data/designs/ios-whatsapp-expo.md +502 -0
  796. package/dist/data/designs/ios-whatsapp-swiftui.md +483 -0
  797. package/dist/data/designs/ios-whatsapp.md +425 -0
  798. package/dist/data/designs/ios-whoop-android.md +635 -0
  799. package/dist/data/designs/ios-whoop-expo.md +562 -0
  800. package/dist/data/designs/ios-whoop-swiftui.md +553 -0
  801. package/dist/data/designs/ios-whoop.md +419 -0
  802. package/dist/data/designs/ios-wise-android.md +428 -0
  803. package/dist/data/designs/ios-wise-expo.md +357 -0
  804. package/dist/data/designs/ios-wise-swiftui.md +356 -0
  805. package/dist/data/designs/ios-wise.md +361 -0
  806. package/dist/data/designs/ios-x-twitter-android.md +618 -0
  807. package/dist/data/designs/ios-x-twitter-expo.md +442 -0
  808. package/dist/data/designs/ios-x-twitter-swiftui.md +429 -0
  809. package/dist/data/designs/ios-x-twitter.md +432 -0
  810. package/dist/data/designs/ios-yelp-android.md +455 -0
  811. package/dist/data/designs/ios-yelp-expo.md +397 -0
  812. package/dist/data/designs/ios-yelp-swiftui.md +369 -0
  813. package/dist/data/designs/ios-yelp.md +398 -0
  814. package/dist/data/designs/ios-youtube-android.md +668 -0
  815. package/dist/data/designs/ios-youtube-expo.md +435 -0
  816. package/dist/data/designs/ios-youtube-music-android.md +450 -0
  817. package/dist/data/designs/ios-youtube-music-expo.md +404 -0
  818. package/dist/data/designs/ios-youtube-music-swiftui.md +434 -0
  819. package/dist/data/designs/ios-youtube-music.md +381 -0
  820. package/dist/data/designs/ios-youtube-swiftui.md +496 -0
  821. package/dist/data/designs/ios-youtube.md +466 -0
  822. package/dist/data/designs/ios-zalo-android.md +510 -0
  823. package/dist/data/designs/ios-zalo-expo.md +389 -0
  824. package/dist/data/designs/ios-zalo-swiftui.md +431 -0
  825. package/dist/data/designs/ios-zalo.md +388 -0
  826. package/dist/data/designs/ios-zomato-android.md +527 -0
  827. package/dist/data/designs/ios-zomato-expo.md +437 -0
  828. package/dist/data/designs/ios-zomato-swiftui.md +433 -0
  829. package/dist/data/designs/ios-zomato.md +439 -0
  830. package/dist/data/designs/ios-zoom-android.md +423 -0
  831. package/dist/data/designs/ios-zoom-expo.md +355 -0
  832. package/dist/data/designs/ios-zoom-swiftui.md +379 -0
  833. package/dist/data/designs/ios-zoom.md +357 -0
  834. package/dist/data/designs/ios-zwift-android.md +402 -0
  835. package/dist/data/designs/ios-zwift-expo.md +402 -0
  836. package/dist/data/designs/ios-zwift-swiftui.md +378 -0
  837. package/dist/data/designs/ios-zwift.md +411 -0
  838. package/dist/data/designs/kraken.md +125 -0
  839. package/dist/data/designs/lamborghini.md +288 -0
  840. package/dist/data/designs/linear.app.md +548 -0
  841. package/dist/data/designs/lovable.md +298 -0
  842. package/dist/data/designs/mastercard.md +365 -0
  843. package/dist/data/designs/material-clean.md +289 -0
  844. package/dist/data/designs/meta.md +683 -0
  845. package/dist/data/designs/midnight-pro.md +256 -0
  846. package/dist/data/designs/minimal-brutalist.md +245 -0
  847. package/dist/data/designs/minimax.md +746 -0
  848. package/dist/data/designs/mintlify.md +852 -0
  849. package/dist/data/designs/miro.md +825 -0
  850. package/dist/data/designs/mistral.ai.md +773 -0
  851. package/dist/data/designs/mongodb.md +767 -0
  852. package/dist/data/designs/nike.md +575 -0
  853. package/dist/data/designs/nintendo-2001.md +649 -0
  854. package/dist/data/designs/notion.md +821 -0
  855. package/dist/data/designs/nova-mobile-design-md.md +235 -0
  856. package/dist/data/designs/nvidia.md +640 -0
  857. package/dist/data/designs/ollama.md +539 -0
  858. package/dist/data/designs/opencode.ai.md +521 -0
  859. package/dist/data/designs/pinterest.md +597 -0
  860. package/dist/data/designs/playful-color.md +253 -0
  861. package/dist/data/designs/playstation.md +661 -0
  862. package/dist/data/designs/posthog.md +690 -0
  863. package/dist/data/designs/raycast.md +669 -0
  864. package/dist/data/designs/renault.md +589 -0
  865. package/dist/data/designs/replicate.md +616 -0
  866. package/dist/data/designs/resend.md +585 -0
  867. package/dist/data/designs/revolut.md +636 -0
  868. package/dist/data/designs/runwayml.md +244 -0
  869. package/dist/data/designs/sanity.md +357 -0
  870. package/dist/data/designs/sentry.md +551 -0
  871. package/dist/data/designs/shopify.md +516 -0
  872. package/dist/data/designs/slack.md +482 -0
  873. package/dist/data/designs/soft-glass.md +258 -0
  874. package/dist/data/designs/spacex.md +363 -0
  875. package/dist/data/designs/spotify.md +246 -0
  876. package/dist/data/designs/starbucks.md +580 -0
  877. package/dist/data/designs/stripe.md +487 -0
  878. package/dist/data/designs/supabase.md +462 -0
  879. package/dist/data/designs/superhuman.md +448 -0
  880. package/dist/data/designs/tesla.md +286 -0
  881. package/dist/data/designs/theverge.md +339 -0
  882. package/dist/data/designs/together.ai.md +633 -0
  883. package/dist/data/designs/uber.md +636 -0
  884. package/dist/data/designs/vercel.md +736 -0
  885. package/dist/data/designs/vodafone.md +538 -0
  886. package/dist/data/designs/voltagent.md +521 -0
  887. package/dist/data/designs/warp.md +526 -0
  888. package/dist/data/designs/webflow.md +588 -0
  889. package/dist/data/designs/wired.md +497 -0
  890. package/dist/data/designs/wise.md +544 -0
  891. package/dist/data/designs/x.ai.md +465 -0
  892. package/dist/data/designs/zapier.md +537 -0
  893. package/dist/data/index.json +2600 -0
  894. package/dist/httpServer.js +83 -0
  895. package/dist/index.js +13 -0
  896. package/dist/server.js +32 -0
  897. package/dist/services/designStore.js +59 -0
  898. package/dist/services/linter.js +87 -0
  899. package/dist/services/sectionParser.js +154 -0
  900. package/dist/tools/authoring.js +131 -0
  901. package/dist/tools/browse.js +232 -0
  902. package/dist/tools/diff.js +88 -0
  903. package/dist/tools/getDesign.js +216 -0
  904. package/dist/tools/guardrails.js +87 -0
  905. package/dist/tools/lint.js +104 -0
  906. package/dist/types.js +1 -0
  907. package/package.json +65 -0
@@ -0,0 +1,431 @@
1
+ # Design System Inspiration of Google Calendar (iOS)
2
+
3
+ ## 1. Visual Theme & Atmosphere
4
+
5
+ Google Calendar's iOS app is the densest information surface in the Google portfolio — a week of meetings, birthdays, reminders, and Goals compressed into a single phone screen without ever feeling cramped. The design philosophy is pure Material You with iOS manners: clean white surfaces, a tightly disciplined four-color event palette derived from Material primary tones, generous internal whitespace inside each event card, and the floating "+" button — the Material FAB — anchored bottom-right on every view. Where Apple's native Calendar leans on system gray and red restraint, Google Calendar leans into color as content: every event is a tinted rectangle, every category gets a hue.
6
+
7
+ The accent palette is the Material primary set, slightly desaturated for iOS — Google Blue (`#1A73E8`) for events, Red (`#D93025`) for declined, Yellow (`#F9AB00`) for tasks, Green (`#188038`) for goals. These four colors don't compete with the white canvas; they live inside event cards as left-bar indicators or 12pt tint blocks. Calendars (Work, Personal, Family) inherit their own user-chosen color from Google's full 24-swatch calendar palette (Tomato, Tangerine, Banana, Sage, etc.). The floating "+" FAB is Material Blue (`#1A73E8`), centered with the iconic concentric expansion ripple when tapped.
8
+
9
+ Typography is Google Sans (Product Sans's successor for product surfaces) for nav titles and prominent moments, Roboto for body content — but on iOS, the team intentionally falls back to SF Pro Display / SF Pro Text on most rows to feel native. The headline weight stack runs Regular (400) and Medium (500) — Google Calendar deliberately avoids Bold; the visual weight comes from color saturation and Material elevation, not type weight. Times in event cards use tabular figures so columns of "9:00 AM / 10:30 AM / 12:00 PM" align mathematically.
10
+
11
+ **Key Characteristics:**
12
+ - White canvas (`#FFFFFF`) with Surface Gray (`#F1F3F4`) section fills
13
+ - Material primary palette as the event color system: Blue `#1A73E8`, Red `#D93025`, Yellow `#F9AB00`, Green `#188038`
14
+ - 24-color user-selectable calendar palette (Tomato `#D50000`, Lavender `#7986CB`, Sage `#33B679`, etc.)
15
+ - Schedule, Day, 3-Day, Week, Month — five view modes accessible from a top-left hamburger menu
16
+ - The floating "+" FAB — bottom-right on every view, Material Blue with concentric ripple
17
+ - Event card: rounded 8pt rectangle with a 4pt left color bar OR a tinted fill — title 14pt Medium, time row 13pt Regular tabular
18
+ - Calendar tap-and-hold for quick event creation; long-press to drag/resize
19
+ - Google Sans Display for nav titles, Roboto/SF Pro Text for body
20
+ - The Schedule view — chronological list of events grouped by day, with day banners showing date and weather
21
+ - Material elevation: white surface (Level 0), event card (Level 1), FAB (Level 6 — the highest)
22
+
23
+ ## 2. Color Palette & Roles
24
+
25
+ ### Primary
26
+ - **Google Blue** (`#1A73E8`): Primary action — FAB, "Save" buttons, default event color, links, "Today" date highlight ring.
27
+ - **Blue Pressed** (`#1557B0`): Pressed/active state on the FAB and primary buttons.
28
+ - **Blue Tint** (`#E8F0FE`): Selected-state row backgrounds, "Today" ring background, low-emphasis containers.
29
+
30
+ ### Event Colors (Material Primary Set)
31
+ - **Event Blue** (`#1A73E8`): Default calendar color, work meetings.
32
+ - **Event Red** (`#D93025`): Declined events, alerts, important meetings.
33
+ - **Event Yellow** (`#F9AB00`): Tasks, reminders.
34
+ - **Event Green** (`#188038`): Goals, completed sessions, focus blocks.
35
+
36
+ ### Full Calendar Palette (User-Selectable, 24 Swatches)
37
+ These are the Google Calendar canonical user calendar colors:
38
+ - **Tomato** `#D50000`, **Flamingo** `#E67C73`, **Tangerine** `#F4511E`, **Banana** `#F6BF26`
39
+ - **Sage** `#33B679`, **Basil** `#0B8043`, **Peacock** `#039BE5`, **Blueberry** `#3F51B5`
40
+ - **Lavender** `#7986CB`, **Grape** `#8E24AA`, **Graphite** `#616161`, **Birch** `#A79B8E`
41
+ - **Eucalyptus** `#16A765`, **Cobalt** `#0277BD`, **Pumpkin** `#F4511E`, **Cherry Blossom** `#FAD165`
42
+ - **Avocado** `#7CB342`, **Citron** `#C0CA33`, **Pistachio** `#9CCC65`, **Wisteria** `#5C6BC0`
43
+ - **Amethyst** `#AB47BC`, **Rose** `#D81B60`, **Cocoa** `#795548`, **Slate** `#9E9E9E`
44
+
45
+ ### Canvas, Surfaces & Dividers
46
+ - **Canvas White** (`#FFFFFF`): Primary canvas — Schedule list, Month grid, Day timeline.
47
+ - **Surface Gray** (`#F1F3F4`): Day header banners, section dividers, search field fill.
48
+ - **Surface Gray 2** (`#F8F9FA`): Subtle row alternation in Schedule view, sidebar drawer.
49
+ - **Divider** (`#DADCE0`): Hairline borders, 30-min gridlines in Day/Week view, calendar list divisions.
50
+ - **Shadow Black** (`rgba(60,64,67,0.15)`): Standard Material Level 1 elevation (slightly warm gray).
51
+
52
+ ### Text
53
+ - **Ink** (`#202124`): Primary text — event titles, day numbers, nav titles. Google's near-black, slightly warm.
54
+ - **Secondary** (`#5F6368`): Times, location, secondary labels.
55
+ - **Tertiary** (`#80868B`): Placeholder, "All-day" labels in event details, disabled.
56
+ - **Inverse White** (`#FFFFFF`): Text inside saturated event cards.
57
+
58
+ ### Semantic
59
+ - **Success Green** (`#188038`): "Event created" toast, confirmation banners.
60
+ - **Warning Amber** (`#F9AB00`): Sync warnings, "Time conflict" badges.
61
+ - **Error Red** (`#D93025`): Form validation, "Failed to RSVP".
62
+ - **Info Blue** (`#1A73E8`): Hyperlinks in event description, "Join with Google Meet" CTA.
63
+
64
+ ### Dark Mode
65
+ Google Calendar's dark mode is a true near-black (`#202124`) — Google's signature warm-tinted dark gray, NOT pure black. Event tints brighten significantly.
66
+ - **Dark Canvas** (`#202124`): Primary dark background.
67
+ - **Dark Surface 1** (`#2D2E30`): Cards, day banners, search field.
68
+ - **Dark Surface 2** (`#3C4043`): Pressed states, selected rows.
69
+ - **Dark Divider** (`#3C4043`): Hairlines, gridlines.
70
+ - **Dark Text Primary** (`#E8EAED`): Event titles, nav titles.
71
+ - **Dark Text Secondary** (`#9AA0A6`): Times, secondary labels.
72
+ - **Google Blue (dark)** (`#8AB4F8`): Brighter blue for dark mode contrast — used on FAB, links, "Today" highlight.
73
+
74
+ ## 3. Typography Rules
75
+
76
+ ### Font Family
77
+ - **Display / Brand**: `Google Sans Display` for nav titles, dialog titles, marketing moments
78
+ - **Text**: `Roboto` on Android; on iOS deliberately falls back to `SF Pro Text` for body and rows (feels more native)
79
+ - **Weights available**: Regular (400), Medium (500) — Google Calendar avoids Bold on most surfaces
80
+ - **Fallback stack**: `'Google Sans', 'Google Sans Display', -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', Roboto, sans-serif`
81
+ - **Web/marketing Google Fonts substitute**: `Google Sans` is available via Google Fonts (limited public release) — otherwise `Roboto` is the safe stand-in
82
+ - **Tabular figures**: ALL times in event cards use `font-variant-numeric: tabular-nums` so columns align — this is non-negotiable
83
+
84
+ ### Hierarchy
85
+
86
+ | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
87
+ |------|------|------|--------|-------------|----------------|-------|
88
+ | Nav Title (Month/Day) | Google Sans | 22pt | 500 | 1.2 | 0pt | "May 2026", "Today" |
89
+ | Schedule Day Banner | Google Sans | 36pt | 400 | 1.0 | -0.4pt | Large day number "14" |
90
+ | Schedule Day Label | Google Sans | 13pt | 500 | 1.2 | 0.8pt UPPERCASE | "THU · MAY" |
91
+ | Section Header | Google Sans | 14pt | 500 | 1.3 | 0pt | "Tasks", "Reminders" |
92
+ | Event Title (in card) | SF Pro Text | 14pt | 500 | 1.3 | 0pt | "Stand-up", "Lunch with K." |
93
+ | Event Title (Detail) | Google Sans | 22pt | 400 | 1.25 | -0.1pt | Event title at the top of the detail screen |
94
+ | Event Time (in card) | SF Pro Text | 13pt | 400 | 1.2 | 0pt tnum | "9:00 – 9:30 AM" |
95
+ | Event Location | SF Pro Text | 13pt | 400 | 1.3 | 0pt | "Conference Room B" |
96
+ | Day Number (Month Grid) | Google Sans | 14pt | 400 | 1.0 | 0pt tnum | The "14" in the month cell |
97
+ | Today Number | Google Sans | 14pt | 500 | 1.0 | 0pt | The number inside the blue "Today" ring |
98
+ | Weekday Header (M T W T F S S) | SF Pro Text | 12pt | 500 | 1.0 | 0.4pt UPPERCASE | "S M T W T F S" above the grid |
99
+ | Time Gutter (Day/Week) | SF Pro Text | 11pt | 400 | 1.0 | 0pt tnum | "9 AM" labels in the left gutter |
100
+ | Sidebar Item | SF Pro Text | 14pt | 500 | 1.25 | 0pt | "Schedule", "Day", "Week" in drawer |
101
+ | Button (Primary) | Google Sans | 14pt | 500 | 1.0 | 0.4pt | "SAVE", "JOIN WITH GOOGLE MEET" |
102
+ | Button (Secondary) | Google Sans | 14pt | 500 | 1.0 | 0.4pt | Outline buttons, same metrics |
103
+ | FAB | (no glyph text) | – | – | – | – | "+" SF Symbol 24pt |
104
+ | Tab Label | SF Pro Text | 10pt | 500 | 1.0 | 0.1pt | Bottom nav (iPad mostly) |
105
+ | Caption | SF Pro Text | 12pt | 400 | 1.3 | 0pt | "Goal completed" labels |
106
+
107
+ ### Principles
108
+ - **Avoid Bold**: Hierarchy comes from size + color saturation, not weight. Almost everything is Regular (400) or Medium (500).
109
+ - **Tabular numerals everywhere times appear** — event cards, day numbers, time gutter, year labels.
110
+ - **Google Sans for display, SF Pro Text for body on iOS**: this is the deliberate hybrid stack Google uses to feel native.
111
+ - **UPPERCASE labels at 0.4-0.8pt tracking** on day banners, weekday headers, primary CTA buttons (`SAVE`, `JOIN`).
112
+ - **Ink `#202124` over pure black**: Google's slightly warm primary text — gentler than `#000000`, characteristically Google.
113
+ - **Color is the differentiator, not weight**: a Work event and a Personal event have the same type metrics; the difference is the calendar's color, applied as a 4pt left bar.
114
+ - **Dynamic Type respected on event titles, body, nav titles**; fixed on day numbers, time gutter, weekday headers (layout-sensitive).
115
+
116
+ ## 4. Component Stylings
117
+
118
+ ### The Event Card (The Hero Component)
119
+
120
+ The single most-repeated visual unit in Google Calendar. Two presentations depending on view:
121
+
122
+ **Schedule View Card (List)**
123
+ - Width: full content width minus 16pt horizontal margins
124
+ - Height: variable — minimum 56pt, expands for multi-line titles
125
+ - Background: `#FFFFFF`
126
+ - Left bar: 4pt wide, full-height, in the calendar's color (e.g., Blueberry `#3F51B5`)
127
+ - Padding: 12pt vertical, 16pt horizontal (after the 4pt bar)
128
+ - Title: SF Pro Text 14pt Medium `#202124`, 2-line truncate
129
+ - Time row: SF Pro Text 13pt Regular tabular `#5F6368` — "9:00 – 9:30 AM"
130
+ - Location row (if present): SF Pro Text 13pt Regular `#5F6368` with a pin icon prefix
131
+ - Tap: row background fades to `#F1F3F4` for 80ms, opens event detail
132
+
133
+ **Day / Week View Card (Tinted Block)**
134
+ - A tinted rectangle filling its time slot in the timeline
135
+ - Background: calendar color at 20% saturation (e.g., `rgba(63,81,181,0.2)` for Blueberry)
136
+ - Border: NONE; just the tint
137
+ - Left bar: 3pt of the saturated calendar color, full-height
138
+ - Padding: 4pt vertical, 6pt horizontal
139
+ - Title: SF Pro Text 12pt Medium in the calendar's full-saturation color
140
+ - Time row (only if card is tall enough): SF Pro Text 11pt Regular tabular, slightly lower opacity
141
+ - Corner radius: 4pt
142
+ - Stacking: overlapping events split the available width — 2 events at 50%, 3 at 33%, with a 2pt gap
143
+
144
+ **Multi-Day Event Bar**
145
+ - Spans across multiple days in Month/Week view as a continuous bar
146
+ - Pattern: same calendar color tint, full saturation on the leftmost edge, gradient fade is NOT used (always solid)
147
+ - Height: 18pt in Month view, 24pt in Week view
148
+ - Corner radius: 4pt (only on the outermost edges of the span — internal day cells get sharp corners on the breakpoint)
149
+
150
+ ### Day Banner (Schedule View)
151
+
152
+ The signature visual unit that gives Schedule view its rhythm.
153
+
154
+ - Height: 80pt
155
+ - Layout: a 64pt × 64pt circular or square zone on the left with the day number; details on the right
156
+ - Day number: Google Sans 36pt Regular `#202124`, e.g., "14"
157
+ - Day label: Google Sans 13pt Medium UPPERCASE `#5F6368` with 0.8pt tracking, e.g., "THU · MAY"
158
+ - Optional weather glyph: 20pt SF Symbol (e.g., `sun.max.fill`) + temperature in 14pt Medium
159
+ - "Today" treatment: the day number sits inside a `#1A73E8` blue filled circle, number turns white; tap-target the whole banner
160
+ - Padding: 16pt horizontal, 12pt vertical
161
+
162
+ ### Month Grid Cell
163
+
164
+ - Size: cell width = (screen width - 0pt margins) / 7; height ~52pt on phones
165
+ - Day number: Google Sans 14pt Regular tabular `#202124`, top-left of cell with 6pt inset
166
+ - Today: number sits inside a 28pt `#1A73E8` filled circle, number turns white and weight bumps to Medium
167
+ - Selected day (when tapping a future day): 28pt `#E8F0FE` ring around the number
168
+ - Event dots / mini-bars: 2-3 tiny 4pt circles in the calendar's color OR small 2pt height bars representing events; stacked vertically below the number
169
+ - Other-month numbers (greyed out): `#80868B`
170
+ - Cell tap: opens that day in Day view with spring zoom
171
+ - Long-press: opens quick event creation
172
+
173
+ ### Day / Week Timeline
174
+
175
+ - Time gutter: 56pt wide on the left
176
+ - Time labels: SF Pro Text 11pt Regular tabular `#5F6368`, e.g., "9 AM", "10 AM"
177
+ - Gridlines: 0.5pt `#DADCE0` horizontal at every hour; subtler 0.25pt at the half-hour (some users disable these)
178
+ - Current time indicator: a 2pt red `#D93025` horizontal line across the full width with a 10pt filled circle on the left edge — animates smoothly with the system clock
179
+ - Day header row: weekday + date sticky at the top, e.g., "MON 14" — UPPERCASE 12pt Medium
180
+
181
+ ### Floating Action Button (FAB)
182
+
183
+ - Diameter: 56pt
184
+ - Position: bottom-right, 16pt inset from right and bottom (or 16pt above tab bar)
185
+ - Background: `#1A73E8` solid Material Blue
186
+ - Glyph: SF Symbol `plus` 24pt Regular, color `#FFFFFF`
187
+ - Shadow: `rgba(60,64,67,0.15) 0 4px 8px` plus `rgba(60,64,67,0.30) 0 1px 2px` — Material Level 6 dual shadow
188
+ - Pressed: lifts to `rgba(60,64,67,0.30) 0 6px 12px`, scale stays 1.0 (Material doesn't scale on press)
189
+ - Tap: opens an action menu sheet — "Event", "Task", "Goal" — each as a 48pt row with an icon
190
+ - Haptic: `.impactOccurred(.medium)` on tap
191
+
192
+ ### Quick Event Creation Modal
193
+
194
+ - Trigger: tap the FAB → choose "Event" from the action menu
195
+ - Sheet style: full-screen modal from bottom with `#FFFFFF` background
196
+ - Top bar: 56pt, with "X" close button left, "Save" text-button right
197
+ - Title input: large SF Pro Display 22pt Regular `#202124` placeholder "Add title"
198
+ - Time chips below: "Starts Thu, May 14 9:00 AM" and "Ends Thu, May 14 10:00 AM" — each a tap-target to open the time picker
199
+ - "All-day" toggle: standard iOS switch in Blue `#1A73E8` accent
200
+ - Calendar picker row: 24pt colored dot + calendar name + chevron — tap to switch calendar
201
+ - Add guests, Add location, Add description: each a 56pt row with 24pt leading SF Symbol icon
202
+ - Reminder row: shows current reminder ("10 minutes before") with edit option
203
+ - Tab-down sheet: drag to dismiss
204
+
205
+ ### Sidebar Drawer (Hamburger Menu)
206
+
207
+ - Width: 280pt; full-height
208
+ - Background: `#FFFFFF`
209
+ - Header row: Google Calendar logo (28pt) + "Calendar" text in Google Sans 20pt Medium
210
+ - View selector: vertical list — Schedule, Day, 3 Days, Week, Month — each a 48pt row with leading icon and label; selected row has `#E8F0FE` background and `#1A73E8` text/icon
211
+ - Section divider: 0.5pt `#DADCE0`
212
+ - "My calendars" section: 14pt Medium UPPERCASE header `#5F6368` with 0.4pt tracking
213
+ - Calendar list rows: 48pt — 18pt color square checkbox + calendar name (14pt Medium); tap toggles visibility, square flips between filled (visible) and outlined (hidden)
214
+ - "Other calendars" section follows
215
+ - Footer: Settings, Help & feedback — each a 48pt row
216
+
217
+ ### Buttons
218
+
219
+ **Primary Text Button (Material Style)**
220
+ - Background: transparent
221
+ - Text: `#1A73E8`, Google Sans 14pt Medium UPPERCASE with 0.4pt tracking — e.g., "SAVE", "JOIN"
222
+ - Padding: 8pt vertical, 12pt horizontal
223
+ - No border, no fill
224
+ - Tap area: 48pt
225
+ - Used heavily in the top app bar of the event detail and quick-creation modals
226
+
227
+ **Filled Button (Less Common — JOIN WITH GOOGLE MEET)**
228
+ - Background: `#1A73E8`
229
+ - Text: `#FFFFFF`, Google Sans 14pt Medium UPPERCASE 0.4pt tracking
230
+ - Padding: 10pt vertical, 24pt horizontal
231
+ - Corner radius: 4pt
232
+ - Height: 36pt
233
+ - Used for the prominent Meet CTA inside event details
234
+
235
+ **Tonal Button (Soft Blue Variant)**
236
+ - Background: `#E8F0FE`
237
+ - Text: `#1A73E8`, Google Sans 14pt Medium
238
+ - Padding: 10pt vertical, 16pt horizontal
239
+ - Corner radius: 4pt
240
+ - Used for "RSVP", "Add to my calendar" — less prominent than the filled blue
241
+
242
+ **Outline Button (Secondary)**
243
+ - Background: transparent
244
+ - Border: 1pt `#DADCE0`
245
+ - Text: `#1A73E8`, Google Sans 14pt Medium
246
+ - Padding: 10pt vertical, 16pt horizontal
247
+ - Corner radius: 4pt
248
+
249
+ ### Distinctive Components
250
+
251
+ **Today Highlight Ring (Month/Day)**
252
+ - 28pt circle (or 24pt in smaller views)
253
+ - Filled `#1A73E8` background, day number turns white and bumps to Medium weight
254
+ - Always visible — the user's anchor in time
255
+
256
+ **RSVP Pills (Event Detail)**
257
+ - Three options: "Yes", "No", "Maybe"
258
+ - 40pt height pills, horizontal row with 8pt gap
259
+ - Selected: filled in calendar color or `#1A73E8`, white text
260
+ - Unselected: outlined `#DADCE0`, `#5F6368` text
261
+ - Tap toggles, with 200ms ease
262
+
263
+ **Reminder Bell Glyph**
264
+ - SF Symbol `bell.fill` 14pt — appears inline in event cards for events with reminders set
265
+ - Color: matches event tint at 60% opacity
266
+
267
+ **Google Meet "JOIN" Pill**
268
+ - Green-blue gradient or solid `#1A73E8` filled pill
269
+ - Camera icon + "JOIN WITH GOOGLE MEET" Google Sans 14pt Medium UPPERCASE
270
+ - Appears at the top of any event with a video conferencing link
271
+ - Pulses subtly when the event start is within 5 minutes
272
+
273
+ **Goals Progress Ring**
274
+ - Concentric ring at the top of a Goal detail
275
+ - Outer ring: full saturation green `#188038`, width 8pt
276
+ - Progress: percentage filled
277
+ - Center: large number "12 of 20" + label "sessions" in Google Sans
278
+
279
+ ## 5. Layout Principles
280
+
281
+ ### Spacing System
282
+ - Base unit: 4pt (Material's `dp` rhythm)
283
+ - Scale: 4, 8, 12, 16, 24, 32, 40, 48, 56, 64
284
+ - Standard horizontal margin: 16pt on phones, 24pt on tablets
285
+ - Section vertical gap: 24pt between Schedule day banners; 16pt between sections in the drawer
286
+
287
+ ### Grid & Container
288
+ - Content width: full device width minus 0-16pt depending on view (Month grid is edge-to-edge)
289
+ - Schedule view: full-width event cards
290
+ - Month grid: 7 columns, edge-to-edge, no horizontal padding
291
+ - Day timeline: 56pt time gutter + remaining width for events
292
+
293
+ ### Whitespace Philosophy
294
+ - **Dense but breathable**: Event cards are tight (12pt padding) but day banners breathe (16pt vertical)
295
+ - **Color is the visual rhythm, not whitespace**: alternating calendar colors create vertical rhythm in dense weeks
296
+ - **Month grid is uniformly gridded** — every cell is the same size; events shrink to fit
297
+ - **The FAB never disappears** — always 16pt from bottom-right, always Material Blue
298
+
299
+ ### Border Radius Scale
300
+ - Square (0pt): month grid cells, gridlines
301
+ - Tiny (2pt): event card left bars
302
+ - Small (4pt): event cards, primary buttons, tinted event blocks
303
+ - Standard (8pt): bottom sheet corners, modal dialogs
304
+ - Medium (16pt): top of bottom sheet, large action sheet
305
+ - Full Pill (500pt): RSVP pills
306
+ - Circle (50%): FAB, Today highlight ring, calendar color squares
307
+
308
+ ## 6. Depth & Elevation
309
+
310
+ Material Design's elevation system, lightly adapted for iOS:
311
+
312
+ | Level | Treatment | Use |
313
+ |-------|-----------|-----|
314
+ | Flat (Level 0) | No shadow | Canvas, schedule day banners, drawer |
315
+ | Card (Level 1) | `rgba(60,64,67,0.10) 0 1px 2px` + `rgba(60,64,67,0.15) 0 1px 3px` | Event cards in Schedule view, dialog buttons |
316
+ | Popover (Level 2) | `rgba(60,64,67,0.10) 0 2px 4px` + `rgba(60,64,67,0.15) 0 3px 6px` | Tooltip, calendar picker dropdown |
317
+ | Sheet (Level 4) | `rgba(60,64,67,0.10) 0 4px 8px` + `rgba(60,64,67,0.15) 0 5px 10px` | Quick-creation modal, drawer when open |
318
+ | FAB Rest (Level 6) | `rgba(60,64,67,0.15) 0 4px 8px` + `rgba(60,64,67,0.30) 0 1px 2px` | The FAB at rest |
319
+ | FAB Pressed (Level 12) | `rgba(60,64,67,0.30) 0 6px 12px` + `rgba(60,64,67,0.40) 0 2px 4px` | The FAB while pressed |
320
+ | Blur Material | Translucent `#FFFFFF` at 92% over content | Sticky app bar when content scrolls beneath |
321
+
322
+ **Shadow Philosophy**: Google Calendar uses Material Design's dual-shadow elevation system — a sharp 1pt offset for ambient definition + a softer 3pt blur for depth. The shadows are slightly warm (`rgba(60,64,67,...)`), not pure black, which is a Google detail. The FAB sits at Material Level 6 — the highest meaningful elevation in the app — and lifts further when pressed.
323
+
324
+ ### Motion
325
+ - **FAB tap**: scale 1.0 → 0.95 → 1.0 over 200ms ease-out; the ripple expands from the tap point outward in a concentric `rgba(255,255,255,0.3)` circle over 300ms
326
+ - **Action menu (Event/Task/Goal)**: slides in as a sheet from the FAB position with a 300ms shared-element morph
327
+ - **Schedule day banner enter**: subtle fade-in as you scroll, no horizontal slide
328
+ - **Month grid tap**: tapped day scales 1.0 → 1.05 → 1.0 with a 250ms spring; transition to Day view is a 350ms zoom into the cell
329
+ - **Event detail open**: shared-element transition from the card's position with `matchedGeometryEffect` — the card morphs into the full detail screen over 300ms
330
+ - **Today indicator (red line in Day view)**: animates its position every 60 seconds in a 1s ease transition
331
+ - **Reminder bell pulse**: subtle 600ms scale 1.0 → 1.1 → 1.0 when a reminder fires
332
+ - **RSVP pill switch**: 200ms ease — color fades, scale stays the same
333
+ - **Drawer open/close**: 250ms ease-out from the left, with a `rgba(0,0,0,0.32)` scrim over the canvas
334
+
335
+ ## 7. Do's and Don'ts
336
+
337
+ ### Do
338
+ - Use Google Blue `#1A73E8` for the FAB, primary CTAs, links, and the Today highlight
339
+ - Use the four Material event colors for system events: Blue meetings, Red declined, Yellow tasks, Green goals
340
+ - Honor the 24-color user-selectable calendar palette — let user-named calendars choose their tint
341
+ - Use Google Sans Display for nav titles and day numbers; SF Pro Text for body and rows on iOS
342
+ - Use TABULAR FIGURES on every time and date — "9:00 AM / 10:30 AM" must align
343
+ - Render event cards with a 4pt left color bar OR a tinted fill — pick one per view, not both
344
+ - Use Material elevation: Level 1 for cards, Level 6 for the FAB at rest
345
+ - Place the FAB at bottom-right, 16pt inset, on every primary view
346
+ - Use UPPERCASE Google Sans Medium for primary button text — "SAVE", "JOIN"
347
+ - Use the slightly-warm Material gray (`rgba(60,64,67,...)`) for shadows, NOT pure black
348
+ - Highlight today with a filled `#1A73E8` circle, white number inside
349
+
350
+ ### Don't
351
+ - Don't use pure black `#000000` for text — `#202124` is Google's near-black
352
+ - Don't bold-weight nav titles or section headers — Google Calendar uses Medium (500), almost never Bold
353
+ - Don't apply event colors at full saturation in Day/Week tinted blocks — use 20% saturation for the fill, full saturation for the title text and 3pt left bar
354
+ - Don't replace the Material dual-shadow with a single drop-shadow — the dual-shadow IS the Material look
355
+ - Don't put the FAB anywhere other than bottom-right
356
+ - Don't show event cards without a left color bar — it's the user's calendar-source indicator
357
+ - Don't break the 4pt grid system on event tint borders or button radii
358
+ - Don't use a 6+pt corner radius on event cards — 4pt is the Material card radius for compact components
359
+ - Don't omit tabular figures from time text — column alignment is broken without it
360
+ - Don't use the Schedule day banner for a placeholder "no events" day — show a small "No events" caption instead
361
+
362
+ ## 8. Responsive Behavior
363
+
364
+ ### Device Sizes
365
+ | Device | Width | Key Changes |
366
+ |--------|-------|-------------|
367
+ | iPhone SE (3rd gen) | 375pt | Schedule + Day views default; Week view is tight, often horizontally scrollable |
368
+ | iPhone 13/14/15 | 390pt | Standard layouts — Week view shows 5 days at once |
369
+ | iPhone 15/16 Pro | 393pt | Dynamic Island respected in app bar |
370
+ | iPhone 15/16 Pro Max | 430pt | Week view shows full 7 days legibly |
371
+ | iPad Mini | 744pt | Sidebar drawer becomes persistent on left; main view fills the rest |
372
+ | iPad Pro 11" | 834pt | 3-column: drawer + main view + event detail pane on the right |
373
+ | iPad Pro 13" | 1024pt | Full Month view with daily event lists alongside |
374
+
375
+ ### Dynamic Type
376
+ - Event titles, body, large nav titles, sidebar items: full scale
377
+ - Day numbers in Month grid, time gutter labels, weekday headers, tab labels: fixed (layout-sensitive)
378
+ - Schedule day-banner number: scales but clamps at 44pt max
379
+
380
+ ### Orientation
381
+ - Portrait: default, Schedule and Day views
382
+ - Landscape on iPhone: Week view auto-rotates and becomes the dominant
383
+ - iPad: rotates freely; sidebar persistent across orientations
384
+
385
+ ### Touch Targets
386
+ - Event card: full-row tap (52pt minimum)
387
+ - FAB: 56pt — full button hit
388
+ - Today / day-number tap (Month grid): the whole cell ~52pt
389
+ - RSVP pill: 40pt height, 88pt width
390
+ - Drawer rows: 48pt
391
+ - Time-gutter tap (to create event at that hour): 48pt-wide tappable zone in the gutter
392
+
393
+ ### Safe Area Handling
394
+ - Top: app bar honors safe area + Dynamic Island
395
+ - Bottom: FAB respects safe area + tab bar (if present) — sits 16pt above
396
+ - Sides: 0-16pt depending on view
397
+
398
+ ## 9. Quick Reference Cheat Sheet
399
+
400
+ ### Quick Color Reference
401
+ - Canvas: `#FFFFFF`
402
+ - Surface Gray: `#F1F3F4`
403
+ - Divider: `#DADCE0`
404
+ - Ink (primary text): `#202124`
405
+ - Secondary text: `#5F6368`
406
+ - **Google Blue**: `#1A73E8`
407
+ - **Blue Pressed**: `#1557B0`
408
+ - **Blue Tint** (selected): `#E8F0FE`
409
+ - **Event Red** (declined): `#D93025`
410
+ - **Event Yellow** (tasks): `#F9AB00`
411
+ - **Event Green** (goals): `#188038`
412
+ - User calendar palette: pick from the 24-color set (Tomato, Tangerine, Banana, Sage, Peacock, Blueberry, Lavender, Grape, etc.)
413
+
414
+ ### Example Component Prompts
415
+ - "Create a SwiftUI Google Calendar Schedule day banner: 80pt tall, leading 64pt zone with the day number '14' in Google Sans 36pt Regular `#202124`. Above the number, 'THU · MAY' in Google Sans 13pt Medium UPPERCASE `#5F6368` with 0.8pt tracking. To the right, optional weather glyph `sun.max.fill` 20pt + '72°' in 14pt Medium. If today, the day number sits inside a 56pt `#1A73E8` filled circle, number turns white."
416
+ - "Build a Google Calendar event card in Schedule view: full-width minus 16pt margins, 56pt minimum height, white background with a 4pt left color bar in `#3F51B5` Blueberry. Inside: 'Stand-up' in SF Pro Text 14pt Medium `#202124`, then below it '9:00 – 9:30 AM' in SF Pro Text 13pt Regular tabular `#5F6368', then 'Conference Room B' in 13pt Regular `#5F6368` with a `mappin.fill` SF Symbol prefix. Tap fades the row to `#F1F3F4` for 80ms, then opens the event detail."
417
+ - "Design the Google Calendar Month grid cell: ~52pt height, day number '14' in Google Sans 14pt Regular tabular `#202124` at top-left with 6pt inset. If today, wrap the number in a 28pt `#1A73E8` filled circle, number turns white and bumps to Medium. Below the number, 2-3 tiny 4pt event dots in the source calendar's color stacked vertically. Other-month numbers in `#80868B`."
418
+ - "Build the Google Calendar FAB: 56pt circle, Material Blue `#1A73E8` background, white `plus` SF Symbol at 24pt centered. Material Level 6 dual-shadow: `rgba(60,64,67,0.15) 0 4px 8px` plus `rgba(60,64,67,0.30) 0 1px 2px`. On press, shadow lifts to `0 6px 12px`. Tap opens an action sheet from the FAB position with Event / Task / Goal options. Haptic `.impactOccurred(.medium)`."
419
+ - "Create the Google Calendar Day timeline: 56pt time gutter on the left with hourly labels '9 AM', '10 AM' in SF Pro Text 11pt Regular tabular `#5F6368'. Horizontal gridlines at every hour in 0.5pt `#DADCE0`. Events render as tinted rectangles in their calendar color at 20% saturation with a 3pt left bar at full saturation. Current time indicator: a 2pt `#D93025` red line across the full width with a 10pt filled circle on the left edge, updates every 60 seconds."
420
+
421
+ ### Iteration Guide
422
+ 1. Canvas is `#FFFFFF`; Surface Gray `#F1F3F4` for day banners and section fills
423
+ 2. Google Blue `#1A73E8` is the action color — FAB, links, primary CTAs, Today highlight
424
+ 3. Event colors are the Material primaries: Blue (events), Red (declined), Yellow (tasks), Green (goals); plus the full 24-color user calendar palette
425
+ 4. The FAB at bottom-right with Material Level 6 dual-shadow is non-negotiable
426
+ 5. Google Sans Display for headlines, SF Pro Text for body on iOS — this is the deliberate hybrid stack
427
+ 6. Use Medium (500) for emphasis; almost never Bold
428
+ 7. Tabular figures on all times and day numbers — column alignment matters
429
+ 8. Material elevation system: Level 1 cards, Level 6 FAB, Level 4 sheets
430
+ 9. Today is always a filled blue circle with a white number inside
431
+ 10. Dark mode is `#202124` canvas (Google's warm near-black) with brighter blue `#8AB4F8` for the FAB and links