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,427 @@
1
+ # Design System Inspiration of Grubhub (iOS)
2
+
3
+ ## 1. Visual Theme & Atmosphere
4
+
5
+ Grubhub's iOS app is an appetite-first food delivery marketplace. The canvas is pure white (`#FFFFFF`) and every screen is engineered to push you toward a decision: pick a restaurant, add a dish, track the bag. The hero of the experience is **restaurant photography** — wide 16:9 food and storefront images sit at the top of every restaurant card, full-bleed within a rounded container, never cropped to a square or hidden behind a tint. Around that photography the chrome is deliberately quiet: a thin "Deliver to" address row, a single search field, a scrollable strip of cuisine chips, then a vertical river of restaurant cards. The brand makes its presence felt through two saturated colors — **Grubhub Red** (`#F63440`) for the primary action and the brand mark, and **Grubhub Orange** (`#FF8000`) for deals, savings and value messaging — set against an otherwise neutral, almost editorial layout.
6
+
7
+ The two signature UI moments are the **restaurant list** and **live order tracking**. The restaurant list is the home screen: address pinned at top, search below, cuisine chips, then cards that each carry a photo, a Grubhub+ Perks badge, the restaurant name, a green rating chip, delivery time, fee, and an orange deal line. The moment you place an order the app flips into **order tracking** — a persistent banner and a full tracking screen with an animated progress bar, an ETA window ("Arriving 7:45 – 7:55 PM"), a step timeline (Order confirmed → Driver picking up → On the way → Delivered), a live map with the courier moving, and the driver's name. This tracking surface is the emotional payoff of the app and gets the most motion and the calmest, most reassuring blue accent (`#00A0DF`).
8
+
9
+ The membership layer — **Grubhub+** — is woven through the UI as a gold (`#FFB81C`) "Grubhub+ Perks" badge on eligible restaurant cards, a "$0 delivery fee" line in orange, and an upsell card. It is a value signal, not a chrome color: gold appears only on Perks badges and the membership pill. The color system is therefore strictly three-tone for brand (Red action, Orange savings, Gold membership) plus a quiet utility set (green rating, blue tracking, neutral text).
10
+
11
+ Typography is a clean grotesque. Grubhub's brand face is **Graphik**; in an unlicensed clone the closest free substitute is **Inter** (or Helvetica Now / system SF Pro). Hierarchy is bold and product-driven, not editorial: screen titles are heavy (weight 800–900), restaurant names are 16pt bold, metadata drops to a muted gray 14pt, and deal lines are 13pt bold orange. Numbers — prices, ETAs, ratings, fees — are everywhere and always get extra weight because the decision is economic.
12
+
13
+ **Key Characteristics:**
14
+ - Pure white canvas (`#FFFFFF`) light / warm near-black (`#121212`) dark — content-forward, low chrome
15
+ - Wide 16:9 restaurant photography in 14pt rounded containers — the visual anchor of every card
16
+ - Two-tone brand: Grubhub Red (`#F63440`) for actions/brand, Grubhub Orange (`#FF8000`) for deals & savings
17
+ - Grubhub+ membership surfaced as a gold (`#FFB81C`) "Perks" badge + "$0 delivery fee" messaging
18
+ - "Deliver to" address row pinned top-left with a bag/cart button top-right (item count badge)
19
+ - Cuisine chip rail — horizontally scrolling pill filters, active chip filled Grubhub Red
20
+ - Restaurant card: photo + Perks badge + saved heart + name + green rating chip + time/fee + orange deal
21
+ - Live order tracking — persistent ETA banner + full screen with progress bar, step timeline, courier map
22
+ - Track Blue (`#00A0DF`) accent reserved for the order-tracking surface only
23
+ - Quantity stepper (− n +) with Grubhub Red circular controls on menu and bag
24
+ - Pill-shaped primary buttons (fully rounded, `999px`) — "Add to bag", "Checkout", "Get Grubhub+"
25
+ - Bottom tab bar: Delivery / Search / Orders / Saved / Account — active icon tinted Grubhub Red
26
+
27
+ ## 2. Color Palette & Roles
28
+
29
+ ### Primary (Interactive)
30
+ - **Grubhub Red** (`#F63440`): Primary interactive color — primary buttons, brand logomark, active tab, active filter chip, saved-heart fill, stepper controls.
31
+ - **Grubhub Red Pressed** (`#D2202B`): Pressed/active state on red buttons and controls.
32
+ - **Grubhub Orange** (`#FF8000`): Deals, savings, "$0 delivery fee", value messaging, secondary CTA ("Get Grubhub+").
33
+ - **Grubhub Orange Pressed** (`#E06E00`): Pressed state on orange buttons.
34
+
35
+ ### Membership & Status
36
+ - **Perks Gold** (`#FFB81C`): Grubhub+ Perks badge fill, membership pill border/text — membership signal only.
37
+ - **Track Blue** (`#00A0DF`): Live order-tracking accent — progress bar, ETA dot, "on the way" status; used only on the tracking surface.
38
+ - **Rating Green** (`#18A957`): Star icon and rating chip on restaurant cards (Grubhub renders ratings in green, not gold).
39
+
40
+ ### Canvas & Surfaces (Light Mode)
41
+ - **Canvas White** (`#FFFFFF`): Primary light canvas.
42
+ - **Surface Gray** (`#F6F6F4`): Search field, chip backgrounds, subtle cards, grouped sections.
43
+ - **Surface Pressed** (`#ECECEA`): Pressed rows and tappable cells.
44
+ - **Divider** (`#E6E6E6`): Hairline dividers between menu rows and sections.
45
+
46
+ ### Canvas & Surfaces (Dark Mode)
47
+ - **Dark Canvas** (`#121212`): Primary dark canvas — warm near-black, NOT pure black.
48
+ - **Dark Surface 1** (`#1C1C1E`): Cards, search field, elevated surfaces.
49
+ - **Dark Surface 2** (`#262626`): Chips, steppers, pressed cells.
50
+ - **Dark Divider** (`#2C2C2E`): Hairline dividers.
51
+
52
+ ### Text
53
+ - **Text Primary Light** (`#1B1B1B`): Primary text — near-black, restaurant names, prices.
54
+ - **Text Secondary Light** (`#707070`): Metadata, cuisine, delivery time, fee.
55
+ - **Text Tertiary Light** (`#A0A0A0`): Disabled, low-emphasis captions.
56
+ - **Text Primary Dark** (`#F2F2F2`): Primary text on dark.
57
+ - **Text Secondary Dark** (`#A0A0A0`): Secondary text on dark (works on both modes).
58
+
59
+ ### Semantic
60
+ - **Error Red** (`#F0454F`): Form errors, failed payment, removal confirmation (distinct from brand red).
61
+ - **Success Green** (`#18A957`): Order placed, item added confirmation, rating chip.
62
+ - **Warning Amber** (`#FF8000`): "Restaurant closes soon", surge messaging (shares the brand orange).
63
+ - **Info Blue** (`#00A0DF`): Order-tracking informational status.
64
+
65
+ ### Color Usage Table
66
+
67
+ | Role | Light Mode | Dark Mode |
68
+ |------|-----------|-----------|
69
+ | Canvas | `#FFFFFF` | `#121212` |
70
+ | Surface 1 | `#F6F6F4` | `#1C1C1E` |
71
+ | Surface 2 | `#ECECEA` | `#262626` |
72
+ | Divider | `#E6E6E6` | `#2C2C2E` |
73
+ | Text Primary | `#1B1B1B` | `#F2F2F2` |
74
+ | Text Secondary | `#707070` | `#A0A0A0` |
75
+ | Primary Action | `#F63440` | `#F63440` |
76
+ | Deal / Savings | `#FF8000` | `#FF8000` |
77
+ | Membership (Perks) | `#FFB81C` | `#FFB81C` |
78
+ | Tracking Accent | `#00A0DF` | `#00A0DF` |
79
+ | Rating | `#18A957` | `#18A957` |
80
+ | Error | `#F0454F` | `#F0454F` |
81
+
82
+ ## 3. Typography Rules
83
+
84
+ ### Font Family
85
+ - **Brand Face**: `Graphik` (by Commercial Type) — the workhorse grotesque in Grubhub's brand system.
86
+ - **Recommended Substitute (unlicensed clone)**: `Inter` (by Rasmus Andersson, SIL OFL) — geometric humanist grotesque with near-identical proportions and excellent small-size hinting.
87
+ - **System Fallback**: `-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'SF Pro Display', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`
88
+ - **Numerals**: Tabular figures for prices, fees, ETAs and quantity steppers (`font-variant-numeric: tabular-nums`).
89
+
90
+ ### Hierarchy
91
+
92
+ | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
93
+ |------|------|------|--------|-------------|----------------|-------|
94
+ | Screen Title | Inter | 32pt | 900 | 1.15 | -0.5pt | "Delivery", large nav title |
95
+ | Restaurant Hero | Inter | 26pt | 800 | 1.2 | -0.3pt | Restaurant detail header name |
96
+ | Section Header | Inter | 22pt | 700 | 1.25 | -0.2pt | "Order again", "Most popular" |
97
+ | Card / Subsection | Inter | 18pt | 700 | 1.3 | -0.1pt | Menu category, card title |
98
+ | Restaurant Name | Inter | 16pt | 700 | 1.3 | 0pt | Name on restaurant card |
99
+ | Body | Inter | 15pt | 500 | 1.45 | 0pt | Menu item description, paragraphs |
100
+ | Price / Number | Inter | 15pt | 700 | 1.3 | 0pt | Prices, fees, totals — tabular |
101
+ | Meta | Inter | 14pt | 400 | 1.4 | 0pt | Cuisine · time · fee, muted gray |
102
+ | Deal Line | Inter | 13pt | 600 | 1.35 | 0pt | "$0 delivery fee", orange |
103
+ | Overline / Badge | Inter | 12pt | 700 | 1.0 | 0.4pt | "GRUBHUB+ PERKS", uppercase |
104
+ | Button | Inter | 16pt | 700 | 1.0 | 0pt | Primary/secondary button label |
105
+ | Tab Label | Inter | 10pt | 600 | 1.0 | 0.1pt | Bottom tab labels |
106
+ | Caption | Inter | 12pt | 500 | 1.35 | 0pt | Timestamps, footnotes |
107
+
108
+ ### Principles
109
+ - **Numbers carry weight**: every price, fee, ETA, rating and quantity is bold (700+) and tabular — the decision is economic, so the figures lead.
110
+ - **Bold product hierarchy, not editorial**: titles are heavy (800–900); this is a commerce app, not a magazine — contrast is created by weight and color, not by serif elegance.
111
+ - **Color encodes meaning in type**: black = neutral, orange = savings/deal, green = rating, blue = tracking status, red = primary action.
112
+ - **Muted metadata**: cuisine, time and fee lines stay in `#707070` so the photo and name dominate the card.
113
+ - **Dynamic Type first-class**: screen titles, restaurant names, body and prices scale; badges, tab labels and chip text stay fixed.
114
+
115
+ ## 4. Component Stylings
116
+
117
+ ### Buttons
118
+
119
+ **Primary Button ("Add to bag" / "Checkout" / "Place order")**
120
+ - Shape: Fully rounded pill, `999px` corner radius
121
+ - Background: `#F63440` (Grubhub Red) / same on dark
122
+ - Text: `#FFFFFF`, Inter 16pt weight 700
123
+ - Height: 52pt; padding 14pt vertical, 28pt horizontal; often full-width with 16pt side insets
124
+ - Pressed: background `#D2202B` + scale 0.98
125
+ - Disabled: `#F6342F` at 35% opacity, text 60%
126
+
127
+ **Secondary Button ("Get Grubhub+" / value CTA)**
128
+ - Background: `#FF8000` (Grubhub Orange)
129
+ - Text: `#1A1206` (near-black for contrast on orange), Inter 15pt weight 700
130
+ - Shape: pill `999px`; padding 13pt × 24pt
131
+ - Pressed: `#E06E00`
132
+
133
+ **Outline / Tertiary Button ("Schedule" / "Filters")**
134
+ - Background: transparent
135
+ - Border: 1.5pt `#E6E6E6` light / `#2C2C2E` dark
136
+ - Text: `#1B1B1B` light / `#F2F2F2` dark, Inter 14pt weight 600
137
+ - Shape: pill `999px`; padding 11pt × 20pt
138
+ - Pressed: background `#F6F6F4`
139
+
140
+ **Text Button ("View full menu" / inline link)**
141
+ - Text: `#F63440` (Grubhub Red), Inter 14pt weight 700
142
+ - No background, no underline
143
+ - Pressed: 60% opacity
144
+
145
+ **Button State Reference**
146
+
147
+ | State | Primary (Red) | Secondary (Orange) | Outline | Text |
148
+ |-------|---------------|--------------------|---------|------|
149
+ | Default | `#F63440` / white | `#FF8000` / `#1A1206` | transparent / `#1B1B1B` | `#F63440` |
150
+ | Pressed | `#D2202B` + scale 0.98 | `#E06E00` | bg `#F6F6F4` | 60% opacity |
151
+ | Disabled | `#F63440` @ 35% / text 60% | `#FF8000` @ 35% | border @ 40% | 40% opacity |
152
+ | Loading | spinner (white) on `#F63440` | spinner on `#FF8000` | spinner `#F63440` | — |
153
+ | Focus (a11y) | 2pt `#F63440` ring, 2pt offset | 2pt `#FF8000` ring | 2pt `#F63440` ring | underline on focus |
154
+
155
+ ### Core Atoms
156
+
157
+ **Restaurant Card**
158
+ - Photo: full-width within card, aspect ratio 16:9, corner radius 14pt
159
+ - Perks badge: top-left, `#FFB81C` fill, `#1A1206` text, 6pt radius, 12pt uppercase 700 (or an orange "20% OFF" deal badge)
160
+ - Saved heart: top-right, 30pt circle, `rgba(0,0,0,0.45)` scrim, white outline icon; filled `#F63440` when saved
161
+ - Row 1: restaurant name (16pt 700, left) + rating chip (right): green star + number `#18A957`
162
+ - Row 2: meta line — "Cuisine · 20–30 min · $0 delivery fee" in `#707070` 14pt 400
163
+ - Row 3 (optional): orange deal line "Free delivery with Grubhub+" 13pt 700 `#FF8000`
164
+ - Card vertical gap: 22pt; no card border or shadow in light mode (photo + whitespace separate)
165
+
166
+ **Cuisine Chip (filter rail)**
167
+ - Height: 34pt; padding 0 14pt; corner radius `999px`
168
+ - Inactive: background `#F6F6F4` / `#262626` dark, text `#707070`, 0.5pt divider border
169
+ - Active: background `#F63440`, text `#FFFFFF`, border `#F63440`
170
+ - Horizontal scroll, 10pt gap, no scrollbar
171
+
172
+ **Quantity Stepper (− n +)**
173
+ - Container: pill `999px`, `#F6F6F4` / `#262626` dark, 0.5pt divider border, padding 6pt × 8pt
174
+ - Controls: 30pt circle, `#F63440` fill, white `−` / `+` glyph 18pt 700
175
+ - Count: 15pt weight 700, tabular, min-width 18pt centered
176
+ - Disabled `−` at quantity 1: control fades to 35% opacity
177
+
178
+ **Rating Chip**
179
+ - Green star (`#18A957`) 12pt + number 13pt weight 600 `#1B1B1B`
180
+ - No background; sits at the right edge of the card name row
181
+
182
+ **Perks / Membership Pill**
183
+ - Inline pill `999px`, background `rgba(255,184,28,0.14)`, 1pt border `#FFB81C`, text `#FFB81C` 12pt 800
184
+ - Leading ★ glyph; e.g. "★ GRUBHUB+ · $0 delivery"
185
+
186
+ ### Navigation
187
+
188
+ **Top Address Bar**
189
+ - Height: ~44pt + safe area
190
+ - Leading: "Deliver to" label 11pt 600 `#707070` over address value 15pt 700 `#1B1B1B` with a 12pt chevron-down
191
+ - Trailing: bag button — 34pt circle `#262626`/surface, bag icon, red count badge top-right (16pt, `#F63440`, white 9pt 800)
192
+
193
+ **Search Field**
194
+ - Height: 44pt; corner radius 12pt; background `#F6F6F4` / `#1C1C1E` dark
195
+ - Leading magnifier 16pt `#707070`; placeholder "Search Grubhub" 14pt `#707070`
196
+ - Focus: 1.5pt `#F63440` border
197
+
198
+ **Bottom Tab Bar**
199
+ - Height: 52pt + safe area
200
+ - Background: `#FFFFFF` / `rgba(18,18,18,0.94)` blurred dark, 0.5pt top divider
201
+ - Tabs (5): Delivery, Search, Orders, Saved, Account
202
+ - Icon size: 22pt; active color `#F63440` (icon fills); inactive `#888`
203
+ - Labels: Inter 10pt weight 600, always shown
204
+
205
+ **Restaurant Detail Top Nav**
206
+ - Transparent over the hero photo on scroll-to-top; collapses to a solid bar with the restaurant name (compact) once scrolled past the hero
207
+ - Leading back chevron; trailing search + share icons in white circular scrims while transparent
208
+
209
+ ### Input Fields
210
+
211
+ **Text Field (address, promo code, instructions)**
212
+ - Height: 48pt; corner radius 10pt; background `#F6F6F4` / `#1C1C1E` dark
213
+ - Border: none default; focus 1.5pt `#F63440`
214
+ - Label: floating 12pt `#707070`; input 16pt `#1B1B1B`
215
+ - Error: 1.5pt `#F0454F` border + helper text `#F0454F` 12pt
216
+
217
+ **Search-with-results (cuisine / dish search)**
218
+ - Same field; results below as rows: leading thumbnail 44pt rounded 8pt, title 15pt 600, meta 13pt `#707070`
219
+ - Pressed row: `#ECECEA`
220
+
221
+ ### Distinctive Components
222
+
223
+ **Live Order Tracking Banner (persistent)**
224
+ - Card across the top of Home while an order is active
225
+ - Background: subtle blue-tint card (light: `#E8F6FC`; dark: `linear-gradient(120deg,#11363F,#0E2A33)`), 16pt radius
226
+ - Row: pulsing `#00A0DF` dot + ETA "Arriving 7:45 – 7:55 PM" 13pt 700 + restaurant name (trailing, muted)
227
+ - Progress bar: 4pt rounded track, `#00A0DF` fill animating left→right
228
+ - Status line: 12pt 600 `#00A0DF` — "Your driver Marcus is picking up your order"
229
+ - Tap → full tracking screen
230
+
231
+ **Order Tracking Screen**
232
+ - Top: live map with the courier marker moving toward the destination pin (Grubhub Red pin)
233
+ - ETA headline: 26pt 800 "Arriving 7:45 – 7:55 PM"
234
+ - Step timeline (vertical rail): nodes 16pt, 3pt connector line
235
+ - Completed step: node + line `#00A0DF`
236
+ - Active step: node `#F63440` with 4pt `rgba(246,52,64,0.22)` glow
237
+ - Pending step: hollow node, `#E6E6E6`/`#2C2C2E` line
238
+ - Steps: "Order confirmed" → "Driver picking up" → "On the way" → "Delivered"
239
+ - Driver card: avatar + name + vehicle + call/message buttons (red circular)
240
+
241
+ **Grubhub+ Perks Badge**
242
+ - Top-left of restaurant photo, gold `#FFB81C`, near-black text, 6pt radius
243
+ - Variants: "GRUBHUB+ PERKS", "$0 DELIVERY FEE", "20% OFF, UP TO $5" (deal variant uses orange `#FF8000` text on light gold or solid orange)
244
+
245
+ **Bag / Cart Sheet**
246
+ - Bottom sheet, 16pt top radius; line items with quantity stepper, subtotal, fees, "Add Grubhub+ to save $X" orange upsell row
247
+ - Sticky "Go to checkout · $42.18" red pill button at bottom (price embedded in label, tabular)
248
+
249
+ **Deal / Savings Strip**
250
+ - Horizontal carousel of orange-accented offer cards near the top of search ("$0 delivery on first order", "Spend $25, save $5")
251
+ - Card: white surface, orange left accent, 12pt radius
252
+
253
+ **Item Customization Sheet**
254
+ - Opens from a menu row; bottom sheet, 16pt top radius, scrim behind
255
+ - Header: dish photo (full-width 16:9, 14pt radius) + name 22pt 800 + price 15pt 700 tabular
256
+ - Option groups: a section title (15pt 700) + a "Required" or "Optional · pick up to 2" subtitle in `#707070` 12pt
257
+ - Choice rows: radio (single-select) or checkbox (multi-select) leading control in Grubhub Red `#F63440` when chosen, label 15pt 500, price delta "+ $1.50" trailing tabular
258
+ - Special-instructions text field below; sticky "Add 1 to bag · $14.99" red pill at the bottom with the live total
259
+
260
+ **Order History / Reorder Row**
261
+ - On the Orders tab: each past order is a row with the restaurant thumbnail (44pt rounded 8pt), name 16pt 700, date + item summary 13pt `#707070`, and a trailing pill-outline "Reorder" button (1.5pt `#F63440` border, `#F63440` text 14pt 700)
262
+ - Tapping "Reorder" re-adds the exact prior bag and slides up the bag sheet
263
+
264
+ **Address / Deliver-To Sheet**
265
+ - Triggered from the top address row; bottom sheet listing saved addresses (Home / Work / recents) as rows with a leading pin glyph, label 15pt 700, full address 13pt `#707070`, and a trailing radio selected in `#F63440`
266
+ - "Add a new address" row at the bottom in `#F63440` 15pt 700; a map preview tops the sheet when adding
267
+
268
+ ## 5. Layout Principles
269
+
270
+ ### Spacing System
271
+ - Base unit: 4pt
272
+ - Scale: 4, 8, 12, 16, 20, 22, 24, 32, 40, 48, 64
273
+ - Restaurant card vertical gap: 22pt
274
+ - Screen horizontal inset: 16pt
275
+ - Section vertical rhythm: 24pt between titled sections
276
+
277
+ ### Grid & Container
278
+ - iPhone: single-column card list at 16pt insets; photos full-width within insets
279
+ - iPad: 2-column restaurant grid at 24pt insets, max content width 900pt centered
280
+ - Cuisine chip rail and deal carousel: horizontal scroll, content edge-aligned to 16pt
281
+ - Menu screen: single-column item rows; sticky category nav under the hero
282
+
283
+ ### Whitespace Philosophy
284
+ - **Photo-led breathing room**: 22pt between cards lets each restaurant photo register without borders
285
+ - **Quiet chrome, loud content**: address row, search and chips are low-contrast; the photo + name + price carry the screen
286
+ - **Numbers get air**: prices and ETAs are spaced and bold so the economic decision is instant
287
+ - **Tracking is calm**: the tracking surface uses generous spacing and a single blue accent — reassurance over density
288
+
289
+ ### Border Radius Scale
290
+ - Square (0pt): full-bleed map, dividers
291
+ - Subtle (6pt): badges, deal pills, small thumbnails
292
+ - Standard (8pt): list thumbnails, inline chips
293
+ - Card (12–14pt): search field, restaurant photos (14pt), surface cards (12pt)
294
+ - Comfortable (16pt): bottom sheets, tracking banner, modals
295
+ - Pill (999px): buttons, cuisine chips, steppers, membership pill
296
+ - Circle (50%): avatars, bag button, stepper controls, map markers
297
+
298
+ ## 6. Depth & Elevation
299
+
300
+ Grubhub is mostly flat — separation comes from photography and whitespace, with shadow reserved for floating commerce surfaces.
301
+
302
+ | Level | Treatment | Use |
303
+ |-------|-----------|-----|
304
+ | Flat (Level 0) | No shadow | Restaurant cards, chips, list rows |
305
+ | Raised (Level 1) | `rgba(0,0,0,0.06) 0 2px 8px` | Sticky checkout bar, deal cards, floating "View bag" button |
306
+ | Sheet (Level 2) | `rgba(0,0,0,0.12) 0 -4px 24px` | Bag sheet, address sheet, filter sheet |
307
+ | Tracking Banner | `rgba(0,160,223,0.10) 0 4px 16px` | Live order-tracking banner (subtle blue-tinted lift) |
308
+ | Modal Scrim | `rgba(0,0,0,0.4)` | Dim behind sheets and modals |
309
+
310
+ **Shadow Philosophy**: shadows mark "this floats above the list and is actionable" — the sticky checkout pill, the bag sheet, the tracking banner. Restaurant cards never carry shadow; the photo is the figure and white space is the ground. On dark mode shadows fade, so floating surfaces add a 0.5pt divider border as the elevation cue.
311
+
312
+ ### Motion
313
+ - **Add to bag**: bag-count badge bumps with a 200ms spring (scale 1 → 1.25 → 1) + soft haptic; the item flies-to-bag is optional
314
+ - **Quantity stepper**: number cross-fades + 120ms scale tick on each tap; soft haptic
315
+ - **Tracking progress bar**: fill width animates continuously with a 600ms ease-in-out toward the live percentage
316
+ - **Tracking dot pulse**: the blue ETA dot pulses opacity/scale on a 1.4s loop
317
+ - **Step timeline advance**: the active node slides up the rail with a 250ms ease-out + medium haptic when a stage completes
318
+ - **Card tap → detail**: shared-element photo expands into the restaurant header over a 320ms iOS push
319
+ - **Chip select**: filled background scales in 150ms ease-out
320
+ - **Sheet present**: bag/checkout sheets slide up 300ms ease-out; scrim fades in parallel
321
+ - **Pull-to-refresh**: Grubhub Red spinner on the restaurant list
322
+ - **Haptics**: light on chip select, soft on stepper, success notification on order placed, medium when a tracking stage completes
323
+
324
+ ## 7. Do's and Don'ts
325
+
326
+ ### Do
327
+ - Use pure white (`#FFFFFF`) as the light canvas; warm near-black `#121212` for dark — never true black
328
+ - Lead every restaurant card with a wide 16:9 photo in a 14pt rounded container
329
+ - Use Grubhub Red (`#F63440`) for the primary action, brand mark, active tab and active chip
330
+ - Use Grubhub Orange (`#FF8000`) for deals, savings and "$0 delivery fee" messaging — value, not action
331
+ - Surface Grubhub+ as a gold (`#FFB81C`) "Perks" badge and membership pill — membership only
332
+ - Render ratings with a green star (`#18A957`), not gold — this is a Grubhub signature
333
+ - Reserve Track Blue (`#00A0DF`) exclusively for the order-tracking surface
334
+ - Make every price, fee, ETA and quantity bold and tabular
335
+ - Use fully-rounded pill buttons (`999px`) for all primary/secondary CTAs
336
+ - Keep a persistent tracking banner on Home whenever an order is active
337
+ - Embed the total in the checkout button label ("Go to checkout · $42.18")
338
+
339
+ ### Don't
340
+ - Don't crop restaurant photos to squares or hide them behind heavy tints — wide and full-color
341
+ - Don't use Grubhub Red for deals/savings — that is Orange's job; don't use Orange for the primary CTA
342
+ - Don't render ratings in gold/yellow stars — Grubhub uses green
343
+ - Don't spread Perks Gold across the chrome — it appears only on Perks badges and the membership pill
344
+ - Don't use the tracking blue anywhere except the order-tracking experience
345
+ - Don't use sharp-cornered rectangular buttons — primary CTAs are pills
346
+ - Don't shadow restaurant cards in light mode — photo + whitespace create separation
347
+ - Don't bury the ETA — it is the emotional payoff; show it large and early in tracking
348
+ - Don't use thin weights for prices — economic figures are always 700+
349
+ - Don't make the address row loud — it is utility chrome, not a headline
350
+ - Don't animate aggressively — motion is functional (bag bump, progress fill, stage advance)
351
+
352
+ ## 8. Responsive Behavior
353
+
354
+ ### Device Sizes
355
+ | Device | Width | Key Changes |
356
+ |--------|-------|-------------|
357
+ | iPhone SE (3rd gen) | 375pt | Photo aspect tightens slightly; chips scroll; single column |
358
+ | iPhone 13/14/15 | 390pt | Standard layout |
359
+ | iPhone 15/16 Pro | 393pt | Dynamic Island accommodated above address bar |
360
+ | iPhone 15/16 Pro Max | 430pt | Larger photos; deal carousel shows ~1.3 cards |
361
+ | iPad (portrait) | 768pt | 2-column restaurant grid; address bar + search in a wider header |
362
+ | iPad (landscape) | 1024pt+ | 3-column grid; map + tracking timeline shown side-by-side |
363
+
364
+ ### Dynamic Type
365
+ - Screen title, restaurant name, body, prices: full scale
366
+ - Perks badge, deal line, tab labels, chip text, ETA dot label: FIXED (layout-sensitive)
367
+ - Menu item descriptions: scale to XL
368
+
369
+ ### Orientation
370
+ - iPhone: portrait-locked on most flows; tracking map may rotate
371
+ - iPad: full rotation; tracking screen shows map + timeline in a split layout in landscape
372
+
373
+ ### Touch Targets
374
+ - Restaurant card: full-card tap, ≥ 88pt tall
375
+ - Stepper controls: 30pt glyph in 44pt hit area
376
+ - Cuisine chip: 34pt tall, ≥ 44pt hit
377
+ - Tab bar icon: 22pt glyph, 44pt hit
378
+ - Bag button: 34pt circle, 44pt hit
379
+ - Primary buttons: 52pt tall
380
+
381
+ ### Safe Area Handling
382
+ - Top: address bar respects safe area and Dynamic Island
383
+ - Bottom: tab bar and sticky checkout pill respect the home indicator
384
+ - Tracking map: extends under the status bar with a gradient scrim for legibility
385
+ - Sides: 16pt content inset throughout
386
+
387
+ ## 9. Agent Prompt Guide
388
+
389
+ ### Quick Color Reference
390
+ - Canvas (light): `#FFFFFF`
391
+ - Canvas (dark): `#121212`
392
+ - Surface (light): `#F6F6F4`
393
+ - Divider (light): `#E6E6E6`
394
+ - Text primary: `#1B1B1B` light / `#F2F2F2` dark
395
+ - Text secondary: `#707070` light / `#A0A0A0` dark
396
+ - Grubhub Red (primary action): `#F63440`
397
+ - Red pressed: `#D2202B`
398
+ - Grubhub Orange (deals/savings): `#FF8000`
399
+ - Perks Gold (membership): `#FFB81C`
400
+ - Track Blue (order tracking): `#00A0DF`
401
+ - Rating Green: `#18A957`
402
+ - Error Red: `#F0454F`
403
+
404
+ ### Example Component Prompts
405
+ - "Build a Grubhub restaurant card in SwiftUI: full-width 16:9 photo with 14pt corner radius. Top-left a gold `#FFB81C` 'GRUBHUB+ PERKS' badge (Inter 12pt 700 uppercase, `#1A1206` text, 6pt radius); top-right a 30pt circular `rgba(0,0,0,0.45)` heart button (white outline, fills `#F63440` when saved). Below photo: row with restaurant name (Inter 16pt 700 `#1B1B1B`, leading) and a rating chip (green `#18A957` star + number Inter 13pt 600, trailing). Next line: 'American · 20–30 min · $0 delivery fee' Inter 14pt 400 `#707070`. Optional next line: 'Free delivery with Grubhub+' Inter 13pt 700 `#FF8000`. 22pt bottom margin, no card border or shadow."
406
+
407
+ - "Create the Grubhub live order-tracking banner: full-width card, 16pt radius, light `#E8F6FC` background (dark: gradient `#11363F → #0E2A33`). Row: an 8pt `#00A0DF` dot with a pulsing 4pt glow, then 'Arriving 7:45 – 7:55 PM' Inter 13pt 700, then the restaurant name trailing in `#707070` 12pt. Below: a 4pt rounded progress track (`rgba(255,255,255,0.12)`) with a `#00A0DF` fill animating to ~62%. Status line: 'Your driver Marcus is picking up your order' Inter 12pt 600 `#00A0DF'. Tap opens the full tracking screen."
408
+
409
+ - "Build the Grubhub order-tracking step timeline: a vertical rail of 4 steps (Order confirmed, Driver picking up, On the way, Delivered). Each step: 16pt node + 3pt connector line + a text block (title Inter 14pt 700, subtitle 12pt `#707070`). Completed steps: node and line `#00A0DF`. The active step: node `#F63440` with a 4pt `rgba(246,52,64,0.22)` glow ring. Pending steps: hollow node with `#E6E6E6` border and `#E6E6E6` line. When a stage completes, slide the active node up the rail over 250ms ease-out with a medium haptic."
410
+
411
+ - "Create a Grubhub quantity stepper: pill container `999px`, `#F6F6F4` background, 0.5pt `#E6E6E6` border, 6pt × 8pt padding. Left and right controls are 30pt circles filled `#F63440` with white `−` / `+` glyphs (18pt 700). Center count Inter 15pt 700 tabular, 18pt min-width. At quantity 1 the `−` control fades to 35% opacity. Each tap cross-fades the number with a 120ms scale tick and a soft haptic."
412
+
413
+ - "Build the Grubhub primary button: full-width pill (`999px`), 52pt tall, background `#F63440`, label Inter 16pt 700 `#FFFFFF`. For the checkout variant embed the total: 'Go to checkout · $42.18' with the price tabular. Pressed: background `#D2202B` + scale 0.98. Secondary 'Get Grubhub+' variant: background `#FF8000`, text `#1A1206`."
414
+
415
+ - "Render the Grubhub bottom tab bar: 5 tabs — Delivery, Search, Orders, Saved, Account. 22pt icons, labels Inter 10pt 600 always shown. Active tab tinted `#F63440` with filled icon; inactive `#888`. Background `#FFFFFF` light / `rgba(18,18,18,0.94)` blurred dark with a 0.5pt top divider."
416
+
417
+ ### Iteration Guide
418
+ 1. Canvas is pure white (`#FFFFFF`) light, warm near-black `#121212` dark — never true black
419
+ 2. Restaurant photos are wide 16:9 in 14pt rounded containers — full-color, never tinted or squared
420
+ 3. Grubhub Red `#F63440` = primary action/brand; Grubhub Orange `#FF8000` = deals/savings — never swap them
421
+ 4. Grubhub+ shows as a gold `#FFB81C` Perks badge + membership pill only — not a chrome color
422
+ 5. Ratings use a GREEN star `#18A957` — not gold; this is a Grubhub signature
423
+ 6. Track Blue `#00A0DF` is exclusive to the order-tracking surface (banner, progress, timeline)
424
+ 7. All primary/secondary buttons are fully-rounded pills (`999px`)
425
+ 8. Every price, fee, ETA and quantity is bold (700+) and tabular
426
+ 9. A persistent tracking banner sits on Home whenever an order is active; the ETA is shown large and early
427
+ 10. Cards have no border/shadow in light mode — photo + 22pt whitespace create the separation