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,433 @@
1
+ # Design System Inspiration of Strava (iOS)
2
+
3
+ ## 1. Visual Theme & Atmosphere
4
+
5
+ Strava is a sweat-stained newspaper for athletes. The canvas is white in light mode and a deep coal black in dark mode — neutral on purpose, because the headline of every screen is a map. A route polyline drawn over OpenStreetMap is the single most repeated visual in the app: in the activity feed (a small map snapshot on every card), on the activity detail (full-bleed map with overlay stats), on the segment leaderboard (a thin curve), and as the empty-state hero on the Maps tab. Strava's job is to make those polylines feel earned — they're rendered in Strava's signature pumpkin orange (`#FC4C02`), thicker than the underlying road network, with a luminance halo so the route reads against busy city streets and rural single-track alike.
6
+
7
+ Strava Orange is the only chromatic accent the brand needs. It's on the CTA buttons ("Record"), the active tab, the kudos glyph when filled, the segment-PR rank chip, the activity-type icon strip, and — most importantly — the route polyline. Everything else in the chrome is a careful gradient from `#FFFFFF` through warm grays (`#F5F4F2` surface) to true text black (`#0E0E0E`). There is no secondary brand color. The orange is the brand, the gradient grays are the substrate.
8
+
9
+ Typography is utilitarian by design — Strava ships with Maison Neue (the marketing/web face by Milieu Grotesque) for its desktop properties but inside the iOS app it leans on SF Pro because activity feeds, mile splits, and pace tables need the system's numeric weight stack. Numbers are tabular everywhere (`tnum`): pace columns, mile splits, distance, elapsed time, kudos counts. The hierarchy is more cardio than couture — bold display weights for headline stats (16:42 elapsed, 8.2 mi, 7:23 /mi pace), regular medium for activity titles, foggy grays for metadata. There's a clear sense that data is the brand: a Strava activity card is one map snapshot above a 3-up stat grid — distance, time, elevation — and that's what people screenshot to share.
10
+
11
+ **Key Characteristics:**
12
+ - White canvas (`#FFFFFF`) light / Coal Black canvas (`#0F0F0F`) dark — chromatically neutral so the map polyline pops
13
+ - Strava Orange (`#FC4C02`) — the only accent — on CTAs, active tab, polyline, kudos filled
14
+ - Route polyline rendered at 4pt stroke width with a 1pt `rgba(252,76,2,0.3)` halo for road-overlay legibility
15
+ - Activity feed cards: map snapshot at the top + 3-up stat grid (distance/time/pace) + kudos row at the bottom
16
+ - Kudos thumb glyph: outlined when un-given, filled Strava Orange when given; haptic on tap
17
+ - Segment leaderboard rows: rank chip (gold/silver/bronze for top 3), athlete avatar + name, time, gap to leader
18
+ - Big tabular numbers everywhere — pace, distance, elevation, splits — using SF Pro `monospacedDigit`
19
+ - Bottom tab bar: Home / Maps / Record / Groups / You — Record is a center action button in Orange
20
+ - SF Pro at weights 400/500/700/900 — heavy weights for hero stats, regular for body
21
+ - Cards are flat with hairline divider only — no shadows; the map photo provides all the visual hierarchy
22
+ - Activity-type icon strip — 18pt SF Symbols (figure.run, figure.outdoor.cycle, figure.pool.swim) tinted Strava Orange when matching activity
23
+
24
+ ## 2. Color Palette & Roles
25
+
26
+ ### Primary
27
+ - **Strava Orange** (`#FC4C02`): THE accent — Record CTA, active tab, route polyline, kudos filled, PR chip, follow-button text.
28
+ - **Orange Pressed** (`#D44002`): Active/pressed state on Strava Orange CTAs.
29
+ - **Orange Halo** (`rgba(252,76,2,0.3)`): The luminance ring drawn beneath the polyline to lift it off the map.
30
+
31
+ ### Canvas, Surfaces & Dividers (Light Mode)
32
+ - **Canvas White** (`#FFFFFF`): Primary canvas — feed, profile, settings.
33
+ - **Surface Warm** (`#F5F4F2`): Section backgrounds, search field fill, profile header backdrop — a subtle warm gray, not pure neutral.
34
+ - **Surface Cool** (`#F0F0F0`): Activity-card secondary surfaces, the stat-grid divider zones.
35
+ - **Divider** (`#E5E5E5`): Hairline row dividers between feed cards, settings rows.
36
+ - **Map Tile Default** (`#E8E5DD`): The OpenStreetMap-derived base tile color (Strava's custom-styled raster) — warm parchment, never gray.
37
+
38
+ ### Text (Light Mode)
39
+ - **Ink Primary** (`#0E0E0E`): Primary text — activity titles, hero stats, athlete names.
40
+ - **Ink Secondary** (`#666666`): Secondary text — timestamps, "Hosted by ...", "5 followers", metadata.
41
+ - **Ink Tertiary** (`#9A9A9A`): Tertiary — placeholders, disabled labels, "no kudos yet".
42
+ - **Inverted White** (`#FFFFFF`): Text on dark surfaces (the Record button, the bottom bar).
43
+
44
+ ### Dark Mode
45
+ Strava's dark mode is deeply considered — coal black so the orange polyline glows.
46
+ - **Coal Black Canvas** (`#0F0F0F`): Primary dark canvas.
47
+ - **Dark Surface 1** (`#1A1A1A`): Card backgrounds, profile header on dark.
48
+ - **Dark Surface 2** (`#262626`): Pressed states, chip fills, search field fill.
49
+ - **Dark Divider** (`#2A2A2A`): Hairlines.
50
+ - **Dark Text Primary** (`#F2F2F2`): Activity titles.
51
+ - **Dark Text Secondary** (`#A0A0A0`): Metadata.
52
+ - **Strava Orange (dark)** (`#FC4C02`): Identical — orange reads beautifully on coal.
53
+ - **Map Tile (dark)** (`#1B1B1B`): Strava's custom dark map style — deep charcoal with white street network.
54
+
55
+ ### Achievement & Rank Colors
56
+ - **PR Gold** (`#F5C24A`): Personal Record (PR) flag, top-1 on a segment.
57
+ - **2nd Silver** (`#C6C6C6`): Top-2 on a segment.
58
+ - **3rd Bronze** (`#CD7F32`): Top-3 on a segment.
59
+ - **KOM/QOM Crown** (`#FFD700`): King/Queen of the Mountain segment crown (slightly more gold than PR).
60
+
61
+ ### Semantic
62
+ - **Success Green** (`#22C55E`): Activity uploaded, sync complete.
63
+ - **Heart Red** (`#E74C3C`): Heart rate zone hi (used on HR charts).
64
+ - **Pace Blue** (`#3B82F6`): Pace chart line on graph overlays.
65
+ - **Elevation Brown** (`#8B6F47`): Elevation chart fill.
66
+ - **Warning Amber** (`#F59E0B`): Activity not synced, GPS signal weak.
67
+ - **Error Red** (`#EF4444`): Failed sync, payment failed (Subscription).
68
+
69
+ ### Activity-Type Tinting
70
+ When the activity card is highlighted in the feed (e.g., a friend's run), the activity-type icon takes the Strava Orange. Otherwise icons are `#666666` ink-secondary. Activity types have their own ghost colors but Strava deliberately keeps them muted — orange remains the focal point.
71
+
72
+ ## 3. Typography Rules
73
+
74
+ ### Font Family
75
+ - **Primary (iOS app)**: `SF Pro Display` (titles 20pt+) / `SF Pro Text` (body 17pt and below)
76
+ - **Marketing / web**: `Maison Neue` by Milieu Grotesque (Book, Medium, Bold)
77
+ - **Fallback stack**: `-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Maison Neue', 'Helvetica Neue', Arial, sans-serif`
78
+ - **Web/marketing Google Fonts substitute**: `Inter` at -0.4 letter-spacing approximates Maison Neue; or `IBM Plex Sans` for a more grotesque feel
79
+ - **Numeric weight**: SF Pro `monospacedDigit()` everywhere there's a stat — pace, distance, elapsed time, splits, kudos count, follower count
80
+
81
+ ### Hierarchy
82
+
83
+ | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
84
+ |------|------|------|--------|-------------|----------------|-------|
85
+ | Hero Stat (Activity Detail) | SF Pro Display | 44pt | 900 (Black) | 1.0 | -0.6pt | "8.2" mi, "1:14:23" elapsed — the big number |
86
+ | Hero Stat Unit | SF Pro Text | 13pt | 600 | 1.0 | 0.5pt | "mi", "MIN/MI" — UPPERCASE under the hero number |
87
+ | Large Nav Title | SF Pro Display | 28pt | 700 (Bold) | 1.1 | -0.4pt | "Home", "Activity", "Maps" |
88
+ | Activity Title (Feed Card) | SF Pro Text | 17pt | 600 (Semibold) | 1.2 | -0.2pt | "Tuesday Morning Run" |
89
+ | Athlete Name (Feed Card Header) | SF Pro Text | 15pt | 600 | 1.2 | -0.1pt | The author of the activity |
90
+ | Section Header | SF Pro Text | 13pt | 700 | 1.2 | 0.5pt | UPPERCASE — "ACHIEVEMENTS", "SPLITS" |
91
+ | Body | SF Pro Text | 15pt | 400 (Regular) | 1.4 | -0.2pt | Activity description, comments |
92
+ | Body Small | SF Pro Text | 13pt | 400 | 1.4 | -0.1pt | Activity timestamp, "5 minutes ago" |
93
+ | Stat Number (Feed Card) | SF Pro Text | 17pt | 700 | 1.1 | 0pt | The 3-up grid: "8.2", "1:14:23", "9:03" — tabular |
94
+ | Stat Label | SF Pro Text | 11pt | 600 | 1.2 | 0.6pt | UPPERCASE — "DISTANCE", "TIME", "PACE" |
95
+ | Kudos Count | SF Pro Text | 13pt | 600 | 1.0 | 0pt | "27" — tabular, after the thumb glyph |
96
+ | Metadata | SF Pro Text | 13pt | 400 | 1.3 | -0.1pt | "Boston, MA · 2 hours ago" |
97
+ | Button (Primary) | SF Pro Text | 17pt | 700 | 1.0 | -0.2pt | "Record", "Follow", "Save" |
98
+ | Button (Secondary) | SF Pro Text | 15pt | 600 | 1.0 | -0.1pt | "Give Kudos", "Comment" |
99
+ | Tab Label | SF Pro Text | 10pt | 600 | 1.0 | 0.2pt | Bottom tab labels |
100
+ | Segment Rank | SF Pro Text | 13pt | 800 | 1.0 | 0pt | "1", "2", "3" inside the rank chip |
101
+ | Caption | SF Pro Text | 11pt | 400 | 1.3 | 0.1pt | "as of 9:42 AM", "GPS accuracy ±3m" |
102
+
103
+ ### Principles
104
+ - **Weights concentrated at 400 / 600 / 700 / 900**: Regular for body, Semibold for activity titles & metadata labels, Bold for stats and section headers, Black for the hero stats on activity detail.
105
+ - **`monospacedDigit()` on every number**: pace, time, distance, splits, kudos count, follower count — Strava's column alignment depends on it.
106
+ - **Stat labels are 11pt UPPERCASE Semibold with 0.6pt tracking**: "DISTANCE / TIME / PACE / ELEV". Always.
107
+ - **Ink Primary `#0E0E0E` is darker than typical body**: Strava intentionally pushes contrast — the map gets light, the text gets dark.
108
+ - **Dynamic Type respected on body and titles**; FIXED on hero stats and stat labels because the 3-up grid alignment breaks.
109
+ - **Tabular numerals over comma columns**: when you have a splits table, every digit is the same width.
110
+
111
+ ## 4. Component Stylings
112
+
113
+ ### Activity Feed Card (the hero component)
114
+
115
+ **Card Structure**
116
+ - Full content width (viewport - 16pt horizontal margins)
117
+ - Top: 56pt header strip — 40pt circular avatar + athlete name (15pt Semibold) + activity-type icon + timestamp (13pt Regular `#666666`)
118
+ - Activity title row: 17pt Semibold `#0E0E0E`, full-width, 1-line truncate (e.g. "Tuesday Morning Run")
119
+ - Optional description: 15pt Regular `#0E0E0E`, max 3 lines, "Read more" link
120
+ - Map snapshot: full-width, aspect ratio 16:9, corner radius 6pt, route polyline rendered at 4pt stroke in `#FC4C02` with `rgba(252,76,2,0.3)` halo
121
+ - 3-up stat grid below the map: distance / time / pace (or elevation for rides) — each cell is 1/3 width, vertical-aligned, top label 11pt UPPERCASE Semibold `#666666` + 17pt Bold value `#0E0E0E`
122
+ - Achievements row (optional, after stats): horizontal row of badges — "1 PR" + "3 Personal Bests" + "KOM Attempt" in 13pt Semibold tinted Orange
123
+ - Kudos + Comments row: bottom of card — 32pt thumb-up glyph + count + 24pt speech-bubble glyph + count, left-aligned; "View Activity" link right-aligned in 13pt Semibold Orange
124
+ - Divider between cards: 8pt vertical gap with no hairline (the next card's white background acts as the divider)
125
+ - Card background: `#FFFFFF` (light) / `#1A1A1A` (dark); no shadow, no border
126
+
127
+ ### Map Snapshot (the route polyline)
128
+
129
+ **Map Tile Style**
130
+ - Strava-customized OpenStreetMap raster — warm parchment `#E8E5DD` base with bone-colored road network and lighter buildings
131
+ - Dark mode tile: charcoal `#1B1B1B` with white roads (`#FFFFFF` @ 70%) and pale building footprints
132
+
133
+ **Route Polyline**
134
+ - Stroke: 4pt solid `#FC4C02`
135
+ - Halo (drawn beneath the stroke): 1pt offset on every side, `rgba(252, 76, 2, 0.3)` — this is what makes the polyline read on busy streets
136
+ - Stroke caps: round
137
+ - Join: round (no mitered corners on switchbacks)
138
+ - For long activities (>10mi), the polyline thins to 3pt to avoid dominating the snapshot
139
+
140
+ **Start/End Markers**
141
+ - 12pt circle filled white with 2pt `#FC4C02` outline — at the route start
142
+ - 12pt filled `#FC4C02` circle with 2pt white outline — at the route end
143
+ - Tip: in a feed snapshot they overlap if it's a loop, which is fine
144
+
145
+ ### 3-Up Stat Grid (below the map on every activity card)
146
+
147
+ **Layout**
148
+ - Full width, evenly distributed 3 columns
149
+ - Each cell: vertical stack of label (top) + value (bottom)
150
+ - 16pt vertical padding, 0pt horizontal gap (cells abut)
151
+ - 1pt `#F0F0F0` vertical divider between cells (only in light mode; absent in dark)
152
+
153
+ **Cell Content**
154
+ - Label: 11pt UPPERCASE Semibold `#666666`, 0.6pt tracking — "DISTANCE", "TIME", "PACE" or "ELEV"
155
+ - Value: 17pt Bold `#0E0E0E`, tabular — "8.2", "1:14:23", "9:03"
156
+ - For rides, swap order: "DISTANCE / ELEV GAIN / AVG SPEED"
157
+ - For swims: "DISTANCE / TIME / PACE/100"
158
+ - The label-to-value gap is 4pt fixed
159
+
160
+ ### Kudos & Comments Row
161
+
162
+ **Kudos Thumb**
163
+ - Container: 36pt × 36pt circular tap area
164
+ - Glyph: `hand.thumbsup` (outlined) when un-given / `hand.thumbsup.fill` (Strava Orange) when given
165
+ - Default color: `#666666` outlined
166
+ - Given color: `#FC4C02` filled
167
+ - Animation on tap: scale 1.0 → 1.3 → 1.0 over 300ms spring + emit confetti at 8 small Orange particles fading up + `.impactOccurred(.medium)` haptic
168
+ - Count: 13pt Semibold `#0E0E0E` to the right of the glyph
169
+
170
+ **Comment Bubble**
171
+ - Glyph: `bubble.left` outlined SF Symbol, 18pt, `#666666`
172
+ - Count: 13pt Regular `#666666`
173
+
174
+ **View Activity Link**
175
+ - "View Activity" in 13pt Semibold `#FC4C02`, right-aligned
176
+ - 44pt tap area extending across the full right edge
177
+
178
+ ### Achievement Badge (on a feed card if any PRs occurred)
179
+
180
+ **Format**
181
+ - Pill-shape, full pill radius (500pt), 24pt height
182
+ - Inline icon + text — 14pt `figure.run.circle.fill` Orange + "1 PR" in 13pt Semibold `#0E0E0E`
183
+ - Background: `rgba(252,76,2,0.08)` light tint, transparent in dark with `rgba(252,76,2,0.15)`
184
+ - Padding: 4pt vertical, 10pt horizontal
185
+ - Horizontal scroll if more than 3 badges fit
186
+
187
+ ### Segment Leaderboard Row
188
+
189
+ **Layout**
190
+ - Height: 56pt
191
+ - Left: 32pt × 32pt rank chip — circular, filled Gold for #1 / Silver for #2 / Bronze for #3 / `#F0F0F0` for the rest, with the rank number in 13pt Black white (or `#0E0E0E` for #4+)
192
+ - Avatar: 36pt circular, immediately right of rank chip
193
+ - Middle stacked: athlete name 15pt Semibold `#0E0E0E` above date 11pt Regular `#666666`
194
+ - Right stacked: segment time 17pt Bold `#0E0E0E` tabular above gap to leader 11pt Regular `#666666` ("+0:12")
195
+ - Background: alternating `#FFFFFF` / `#FAFAFA` rows (zebra)
196
+ - Divider: 0.5pt `#E5E5E5` hairline at bottom
197
+ - Tap haptic: `.selectionChanged()`
198
+
199
+ ### Record Button (the center tab — Strava's main CTA)
200
+
201
+ **Format**
202
+ - Tab bar center action — protrudes 8pt above the bar's top edge
203
+ - Circle: 56pt × 56pt, `#FC4C02` background
204
+ - Glyph: 22pt `record.circle` or `play.fill` SF Symbol, white
205
+ - Shadow: `rgba(252,76,2,0.4) 0 8px 16px`
206
+ - Tap: scales to 0.95, immediately opens Record sheet with map and activity-type chooser
207
+ - Haptic: `.impactOccurred(.heavy)` — Record is a serious commitment, the heaviest haptic in the app
208
+
209
+ ### Buttons
210
+
211
+ **Primary Pill CTA (Record / Follow / Save)**
212
+ - Background: `#FC4C02`
213
+ - Text: `#FFFFFF`, SF Pro Text 17pt Semibold
214
+ - Padding: 14pt vertical, 24pt horizontal
215
+ - Corner radius: 8pt (rectangular pill, not fully rounded — Strava uses semi-soft corners)
216
+ - Height: 50pt minimum
217
+ - Pressed: background `#D44002`, scale 0.98
218
+
219
+ **Secondary Outline Button**
220
+ - Background: transparent
221
+ - Border: 1.5pt `#0E0E0E`
222
+ - Text: `#0E0E0E`, SF Pro Text 15pt Semibold
223
+ - Corner radius: 8pt
224
+
225
+ **Following Button (after following an athlete)**
226
+ - Background: `#F0F0F0` (light) / `#262626` (dark)
227
+ - Text: `#0E0E0E` (light) / `#F2F2F2` (dark), 15pt Semibold
228
+ - Border: none
229
+ - Visually demoted compared to "Follow" — the active state is the orange
230
+
231
+ **Text Link**
232
+ - 13pt Semibold `#FC4C02`, no underline, 44pt hit area
233
+ - Used heavily for "View Activity", "See All", "More" affordances
234
+
235
+ ### Navigation
236
+
237
+ **Bottom Tab Bar**
238
+ - Height: 64pt + safe area (slightly taller than HIG default because of the center Record button)
239
+ - Background: `#FFFFFF` (light) / `#0F0F0F` (dark) with 0.5pt top divider; no blur
240
+ - Tabs (5): Home / Maps / **Record** (center) / Groups / You
241
+ - Standard tab icon: 24pt outlined SF Symbol, `#666666` inactive / `#FC4C02` active
242
+ - Center Record button: as described above — protrudes 8pt above the bar
243
+ - Tab labels: 10pt Semibold, visible on all tabs except Record (which is icon-only)
244
+
245
+ **Top App Bar (per screen)**
246
+ - Height: 44pt + safe area
247
+ - Background: `#FFFFFF` / `#0F0F0F`
248
+ - Left: 28pt nav title (SF Pro Display 28pt Bold), or back chevron + title
249
+ - Right: action icons — search, filter, settings — 22pt SF Symbols `#0E0E0E`
250
+
251
+ ### Input Fields
252
+
253
+ **Text Field (Activity Title, Description, Comment)**
254
+ - Background: `#F0F0F0` (light) / `#262626` (dark)
255
+ - Border: none
256
+ - Corner radius: 8pt
257
+ - Padding: 12pt vertical, 14pt horizontal
258
+ - Text: SF Pro Text 15pt Regular `#0E0E0E`
259
+ - Placeholder: `#9A9A9A`
260
+
261
+ **Search Field**
262
+ - Background: `#F5F4F2`
263
+ - Border: none
264
+ - Corner radius: 10pt
265
+ - Height: 36pt
266
+ - Leading: 14pt `magnifyingglass` `#666666`
267
+ - Text: SF Pro Text 15pt Regular
268
+
269
+ ### Distinctive Components
270
+
271
+ **Pace Chart Overlay (Activity Detail bottom sheet)**
272
+ - A small graph card with the pace-vs-time line in Pace Blue `#3B82F6`, the elevation in Elevation Brown `#8B6F47` filled underneath, and the heart-rate trace in Heart Red `#E74C3C`
273
+ - X-axis: time, 5 evenly-spaced ticks
274
+ - Y-axis: pace inverted (slower at the bottom, faster at the top) — runners think in pace, not speed
275
+ - Tap-and-drag on the chart reveals a vertical scrubber with the current value badge
276
+
277
+ **Splits Table**
278
+ - Mile or kilometer rows, scroll vertically
279
+ - Each row: mile number (13pt Regular `#666666`) + split time (17pt Bold `#0E0E0E` tabular) + delta vs avg (13pt Semibold Orange if faster, Heart Red if slower, with a tiny `arrow.up`/`arrow.down`)
280
+ - Bar visualization: a tiny horizontal bar inline with the time, scaling proportionally to that split's value
281
+
282
+ **Match Cup (Segment Notification)**
283
+ - A 24pt × 28pt trophy glyph `trophy.fill` in PR Gold (`#F5C24A`) for PRs, KOM Crown `#FFD700` for KOM/QOM
284
+ - Appears in feed-card achievement strip and the activity-detail header
285
+ - Animates with a subtle 600ms scale 1.0 → 1.1 → 1.0 pulse when first viewed
286
+
287
+ ## 5. Layout Principles
288
+
289
+ ### Spacing System
290
+ - Base unit: 4pt
291
+ - Scale: 4, 8, 12, 16, 20, 24, 32, 40, 48
292
+ - Standard horizontal margin: 16pt on most screens, 24pt on activity-detail hero
293
+ - Feed card vertical gap: 8pt (cards almost touch — the visual rhythm is map snapshots)
294
+ - Section vertical gap inside activity detail: 32pt between major sections
295
+
296
+ ### Grid & Container
297
+ - Content width: full minus 16pt horizontal margins
298
+ - Feed cards: always full width, stacked vertically — no grid, no carousel
299
+ - Profile activity grid: 3-col 1:1 thumbnail grid showing latest 9 activities (Instagram-like)
300
+ - Splits table: full-width data table, no card wrapper
301
+
302
+ ### Whitespace Philosophy
303
+ - **Map is the breathing room**: the 16:9 map snapshot has a high visual density, so the rest of the card sits tight against it
304
+ - **Stats compress, titles extend**: 11pt label + 17pt value is a 32pt-tall stat cell; activity titles can wrap to 2 lines
305
+ - **No card shadows**: cards are visually separated by their map snapshots + 8pt of canvas in between
306
+
307
+ ### Border Radius Scale
308
+ - Square (0pt): map polyline halo (it's stroked, no fill)
309
+ - Standard (6pt): map snapshot corner radius
310
+ - Soft (8pt): primary CTA, secondary outline, text fields
311
+ - Comfortable (10pt): search field, segment leaderboard row group
312
+ - Pill (500pt): achievement badges, follow chip
313
+ - Circle (50%): avatars, rank chips, kudos thumb tap area
314
+
315
+ ## 6. Depth & Elevation
316
+
317
+ | Level | Treatment | Use |
318
+ |-------|-----------|-----|
319
+ | Flat (Level 0) | No shadow | Feed cards, list rows, canvas — Strava is almost shadowless |
320
+ | Inline (Level 0.5) | 0.5pt `#E5E5E5` hairline | Section dividers, splits-table row separators |
321
+ | Floating (Level 1) | `rgba(0,0,0,0.06) 0 2px 8px` | Search field on map screens, segment popovers |
322
+ | Record Button (Level 2) | `rgba(252,76,2,0.4) 0 8px 16px` | The center Record tab button — Strava's only true elevation |
323
+ | Sheet (Level 3) | `rgba(0,0,0,0.16) 0 -8px 32px` | Bottom sheets, activity detail modal |
324
+
325
+ **Shadow Philosophy**: Strava is essentially flat. The only shadow that matters is the colored shadow under the Record button — a glowing Orange aura that signals "this is the moment." Everything else relies on hairlines, the map's natural visual density, or no separation at all. Cards stack with 8pt of canvas between them and that's it.
326
+
327
+ ### Motion
328
+ - **Kudos tap**: scale 1.0 → 1.3 → 1.0 spring (damping 0.6, 300ms), color outlined → filled, emit 8 confetti particles fading up over 600ms, haptic `.impactOccurred(.medium)`
329
+ - **Record button tap**: scale 0.95 instant + heavy haptic `.impactOccurred(.heavy)`, then sheet rise from bottom in 350ms `.easeOut`
330
+ - **Activity card tap**: scale 0.99 briefly (very subtle), then push to activity detail in 280ms standard nav transition
331
+ - **Tab switch**: `.selectionChanged()` haptic, icon transition from outlined to filled over 200ms
332
+ - **Pace chart scrub**: real-time, no haptic — chart updates immediately, value badge follows finger
333
+ - **Segment notification slide-in (top toast)**: 400ms spring from top, lingers 3s, slides out
334
+ - **Pull-to-refresh**: standard system refresh control tinted Strava Orange
335
+
336
+ ## 7. Do's and Don'ts
337
+
338
+ ### Do
339
+ - Use `#FC4C02` as the SINGLE accent — Record button, active tab, polyline, kudos filled, achievement chips
340
+ - Render the route polyline at 4pt stroke with the `rgba(252,76,2,0.3)` halo — this is the signature visual
341
+ - Use tabular numerals on EVERY number (pace, time, distance, splits, kudos count) via `monospacedDigit()`
342
+ - Use the 3-up stat grid pattern on every activity card — never break this pattern for "more info"
343
+ - Place stat labels in 11pt UPPERCASE Semibold with 0.6pt tracking — this is the Strava data voice
344
+ - Use SF Pro Display Black weight 900 for the hero stats on activity detail — these are the trophy numbers
345
+ - Keep cards flat with no shadow — let the map snapshot do the visual work
346
+ - Make the Record button protrude 8pt above the tab bar with its orange glow shadow
347
+ - Animate kudos with the 1.3x scale bounce + confetti — it's a celebratory micro-interaction
348
+ - Use the heavy haptic `.impactOccurred(.heavy)` on Record only — it's the most serious tap in the app
349
+ - In dark mode use coal `#0F0F0F` not pure black — the polyline reads better on slightly-warm dark
350
+
351
+ ### Don't
352
+ - Don't introduce a secondary brand color — Strava is monochromatically Orange, that's the discipline
353
+ - Don't render the polyline without the halo — busy city maps will swallow a bare orange stroke
354
+ - Don't use proportional digits in stats — column alignment will break and Strava users notice
355
+ - Don't add card drop shadows — the visual hierarchy comes from the map snapshot, not elevation
356
+ - Don't replace the 3-up stat grid with a list — it must be a horizontal trio
357
+ - Don't use system-yellow for PRs — Strava's PR gold is `#F5C24A`, slightly cooler and warmer at once
358
+ - Don't use the heavy haptic on kudos — that's reserved for Record; kudos is `.medium`
359
+ - Don't hide the Record button on screens deep in the nav — it persists across all tabs in the bottom bar
360
+ - Don't reformat times as "1h 14m 23s" — Strava uses "1:14:23" tabular with `monospacedDigit()`
361
+ - Don't make activity titles span more than 2 lines on a card — truncate with ellipsis
362
+
363
+ ## 8. Responsive Behavior
364
+
365
+ ### Device Sizes
366
+ | Device | Width | Key Changes |
367
+ |--------|-------|-------------|
368
+ | iPhone SE (3rd gen) | 375pt | Map snapshot maintains 16:9; stat grid compresses to 11pt label / 16pt value |
369
+ | iPhone 13/14/15 | 390pt | Standard layout, all stats inline |
370
+ | iPhone 15/16 Pro | 393pt | Dynamic Island respected — top app bar sits below it |
371
+ | iPhone 15/16 Pro Max | 430pt | Larger map snapshot, optional 4-up stat grid (adds elevation) |
372
+ | iPad | 768pt+ | 2-col feed grid; activity detail uses split view (map left 60%, stats/splits right 40%) |
373
+
374
+ ### Dynamic Type
375
+ - Activity titles and body: full scale
376
+ - Hero stats (44pt Black): clamp at 56pt to prevent overflow
377
+ - Stat labels and stat values in 3-up grid: FIXED at 11pt/17pt — layout breaks if they scale
378
+ - Tab labels and rank chips: FIXED
379
+
380
+ ### Orientation
381
+ - Portrait-locked everywhere except:
382
+ - Activity detail map can full-screen and rotate to landscape
383
+ - Splits chart and pace chart rotate
384
+
385
+ ### Touch Targets
386
+ - Kudos thumb: 36pt visual on a 44pt tap area
387
+ - Comment glyph: 36pt visual on a 44pt tap area
388
+ - Record button: 56pt visual on a 64pt tap area
389
+ - Segment row: full 56pt height tap
390
+
391
+ ### Safe Area Handling
392
+ - Top: safe area honored — large title starts at safe-area top + 16pt
393
+ - Bottom: tab bar with Record button respects home indicator; the Record button's shadow extends below the indicator into the safe area
394
+ - Sides: 16pt content inset
395
+
396
+ ## 9. Agent Prompt Guide
397
+
398
+ ### Quick Color Reference
399
+ - Canvas (light): `#FFFFFF`
400
+ - Surface Warm: `#F5F4F2`
401
+ - Surface Cool: `#F0F0F0`
402
+ - Divider: `#E5E5E5`
403
+ - Ink Primary: `#0E0E0E`
404
+ - Ink Secondary: `#666666`
405
+ - Strava Orange: `#FC4C02`
406
+ - Orange Pressed: `#D44002`
407
+ - Orange Halo: `rgba(252,76,2,0.3)`
408
+ - PR Gold: `#F5C24A`
409
+ - Map Tile (light): `#E8E5DD`
410
+ - Coal Black (dark canvas): `#0F0F0F`
411
+ - Map Tile (dark): `#1B1B1B`
412
+ - Success Green: `#22C55E`
413
+ - Heart Red: `#E74C3C`
414
+ - Pace Blue: `#3B82F6`
415
+
416
+ ### Example Component Prompts
417
+ - "Build a Strava activity feed card: full-width minus 16pt margins, no shadow, no border. Header row 56pt with a 40pt circular avatar, then athlete name 'Casey Reardon' in SF Pro Text 15pt Semibold `#0E0E0E`, then timestamp '2 hours ago' in SF Pro Text 13pt Regular `#666666`. Below: activity title 'Tuesday Morning Run' in SF Pro Text 17pt Semibold. A 16:9 map snapshot below with corner radius 6pt — the route polyline rendered at 4pt stroke `#FC4C02` with a 1pt halo at `rgba(252,76,2,0.3)`. Below the map a 3-up stat grid: 'DISTANCE 8.2', 'TIME 1:14:23', 'PACE 9:03 /mi' — labels 11pt UPPERCASE Semibold `#666666` with 0.6pt tracking, values 17pt Bold `#0E0E0E` tabular. At the bottom, a kudos thumb glyph + count, a comment bubble + count, and a 'View Activity' link in `#FC4C02`."
418
+ - "Render the Strava Record button: 56pt × 56pt circle, `#FC4C02` background, 22pt white play/record glyph centered, sitting in the center of a 5-tab bottom bar but protruding 8pt above the bar's top edge. Shadow: `rgba(252,76,2,0.4) 0 8px 16px` — a colored glow. On tap: scale 0.95 + haptic `.impactOccurred(.heavy)`."
419
+ - "Build a Strava segment leaderboard row: 56pt tall. Leading 32pt circular rank chip — gold (#F5C24A) for #1, silver (#C6C6C6) for #2, bronze (#CD7F32) for #3, neutral (#F0F0F0) for the rest — with the rank number in 13pt Black weight 800 white (or `#0E0E0E` for non-podium). Then a 36pt circular athlete avatar. Middle stacked: athlete name in 15pt Semibold `#0E0E0E` + date in 11pt Regular `#666666`. Right stacked: segment time in 17pt Bold `#0E0E0E` tabular + gap to leader in 11pt Regular `#666666`. Bottom 0.5pt `#E5E5E5` separator."
420
+ - "Design the kudos thumb interaction: outlined `hand.thumbsup` SF Symbol 24pt `#666666` when un-given, filled `hand.thumbsup.fill` `#FC4C02` when given. On tap: scale 1.0 → 1.3 → 1.0 over 300ms spring (damping 0.6), emit 8 small Orange particles fading up over 600ms, haptic `.impactOccurred(.medium)`. Count text 13pt Semibold `#0E0E0E` to the right of the glyph."
421
+ - "Render a Strava activity-detail hero: full-bleed map on top occupying 40% of screen height with the route polyline. Below, a horizontal 3-up grid of hero stats — '8.2 MI', '1:14:23', '9:03 /MI' — each cell using SF Pro Display 44pt Black `#0E0E0E` for the value with `monospacedDigit()` and SF Pro Text 13pt Semibold UPPERCASE `#666666` for the unit. Below that a sticky bottom action bar with 'Give Kudos' + 'Comment' + 'Share' buttons in outline style."
422
+
423
+ ### Iteration Guide
424
+ 1. The only brand accent is `#FC4C02` Strava Orange — never introduce a secondary
425
+ 2. Every route polyline is 4pt with the `rgba(252,76,2,0.3)` halo
426
+ 3. Every number is tabular — `monospacedDigit()` is mandatory
427
+ 4. The 3-up stat grid is the universal activity-card pattern — never break it
428
+ 5. Stat labels are 11pt UPPERCASE Semibold with 0.6pt tracking — Strava's data voice
429
+ 6. Hero stats on activity detail are SF Pro Display 44pt Black — these are the trophy numbers
430
+ 7. The Record button is the only elevated element — it protrudes 8pt and glows orange
431
+ 8. Cards are flat, no shadow — let the map snapshot do the visual work
432
+ 9. Dark mode is coal `#0F0F0F` not pure black — the polyline reads better
433
+ 10. Haptic hierarchy: heavy on Record, medium on Kudos, selection on tab switches