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,466 @@
1
+ # Design System Inspiration of YouTube (iOS)
2
+
3
+ ## 1. Visual Theme & Atmosphere
4
+
5
+ YouTube's iOS app is a content-forward canvas whose entire job is to surface a 16:9 thumbnail and let you tap it. The feed is a vertical stream of video cards — each one a wide still frame with a red-circled duration tag, a channel avatar, a two-line title, and metadata — arranged edge-to-edge with generous gaps between them. On light mode (the default in recent versions), the app canvas is clinical white (`#FFFFFF`); on dark mode, a near-black `#0F0F0F` that's been the flagship surface since 2017. Whichever mode you're in, the red is the same: YouTube Red (`#FF0000`), an unshifted, saturated, traffic-light red reserved for the Subscribe button, the live indicator, and the play-button logomark. Everything else — backgrounds, text, chrome — is achromatic.
6
+
7
+ The accent system has one job: mark the verb "Subscribe." When you tap Subscribe, the red pill morphs to a gray "Subscribed" state, the bell icon appears, and a light haptic fires — and that's the only time red ever appears on an action in the UI. Red is otherwise reserved for three static marks: the "LIVE" pill on live-stream thumbnails, the small "•" unread indicator on the subscriptions tab, and the play arrow inside YouTube's logomark. This restraint is what makes YouTube Red instantly iconic — when you see red in this app, you're looking at a brand element, not interactive UI.
8
+
9
+ Typography is YouTube Sans (proprietary, released in 2017) for display moments — the wordmark, large headers, the video player UI — paired with Roboto for body text (because the app was built by Google and its Material roots still show). On iOS, a fallback stack of SF Pro covers both when the custom fonts are unavailable. The hierarchy is compact: sizes run 11–20pt, weights at 400 / 500 / 700. Video titles sit at 16pt weight 500 with 2-line clamp — the single most common type moment in the app. There are no display-sized hero titles in the feed itself; the thumbnail is the headline, the title is the caption.
10
+
11
+ **Key Characteristics:**
12
+ - White canvas (`#FFFFFF`) in light mode, near-black `#0F0F0F` in dark — both with the same YouTube Red accent
13
+ - **YouTube Red** (`#FF0000`) reserved for the Subscribe button and brand marks (logo, LIVE badge, unread dots) — nothing else
14
+ - **16:9 video thumbnail** is the atomic unit of the app, with a black duration tag in the bottom-right corner
15
+ - 28pt circular channel avatar below the thumbnail, left-aligned, paired with channel name + metadata
16
+ - **Shorts tab** ships a TikTok-style vertical video player with right-rail actions
17
+ - **Mini-player** — a draggable floating video that persists when navigating away
18
+ - Bottom tab bar (5 tabs): Home, Shorts, Create (+), Subscriptions, You
19
+ - YouTube Sans (proprietary display) paired with Roboto body; SF Pro fallback
20
+ - Haptics on Subscribe, like/dislike, share, and video scrub
21
+
22
+ ## 2. Color Palette & Roles
23
+
24
+ ### Primary
25
+ - **YouTube Red** (`#FF0000`): The iconic brand red — Subscribe button (unsubscribed state), LIVE indicator pill, brand logomark (play arrow in the square), the red dot in notification badges, and the progress-fill color on the video scrubber.
26
+ - **YouTube Red Pressed** (`#CC0000`): Pressed / active-state variant for red CTAs.
27
+ - **Red Hover** (`#E60000`): Slight deepening for web-style hover; matched on iOS as a pressed alt.
28
+
29
+ ### Canvas & Surfaces (Light Mode)
30
+ - **Canvas White** (`#FFFFFF`): Primary light canvas — all main feed surfaces.
31
+ - **Surface 1** (`#F9F9F9`): Elevated card backgrounds on some sheets, section backing.
32
+ - **Surface 2** (`#F2F2F2`): Pressed-state background on list rows and chips.
33
+ - **Divider** (`#E5E5E5`): 1pt hairline dividers between list items and sections.
34
+ - **Input Background** (`#F2F2F2`): Search bar fill in light mode.
35
+
36
+ ### Canvas & Surfaces (Dark Mode)
37
+ - **Canvas Dark** (`#0F0F0F`): Primary dark canvas — YouTube's signature "not-quite-black."
38
+ - **Surface 1 Dark** (`#1F1F1F`): Sheet backgrounds, context menu, comment compose.
39
+ - **Surface 2 Dark** (`#272727`): Pressed-state on dark rows, hover overlays.
40
+ - **Surface 3 Dark** (`#3F3F3F`): Higher elevation — player chrome, sticky headers.
41
+ - **Divider Dark** (`#303030`): Hairline dividers in dark mode.
42
+
43
+ ### Text (Light Mode)
44
+ - **Text Primary** (`#0F0F0F`): Video titles, channel names, primary headings.
45
+ - **Text Secondary** (`#606060`): Metadata — view counts, upload date, channel subscriber count.
46
+ - **Text Tertiary** (`#909090`): Timestamps, placeholders, lowest-emphasis labels.
47
+ - **Text Disabled** (`#C0C0C0`): Disabled button text.
48
+
49
+ ### Text (Dark Mode)
50
+ - **Text Primary Dark** (`#FFFFFF`): Video titles, channel names, headings on dark.
51
+ - **Text Secondary Dark** (`#AAAAAA`): Metadata on dark.
52
+ - **Text Tertiary Dark** (`#717171`): Lowest-emphasis labels on dark.
53
+
54
+ ### Semantic
55
+ - **Live Red** (`#FF0000`): LIVE indicator pill — same token as brand red.
56
+ - **Error Red** (`#FF0000`): Playback / network errors, same token.
57
+ - **Success Green** (`#3EA6FF` is info, not success — YouTube uses blue): Minimal success states.
58
+ - **Info Blue** (`#3EA6FF`): Links inline within descriptions, "Show more," clickable hashtags in comments.
59
+ - **Warning Yellow** (`#FFC400`): Rarely used — age-restriction warnings, content advisories.
60
+
61
+ ### Content Accent: Channel & Playlist
62
+ - Channel pages accept a custom banner image and an accent color — but this accent never bleeds into the app's chrome. It only appears as a subtle header overlay.
63
+
64
+ ## 3. Typography Rules
65
+
66
+ ### Font Family
67
+ - **Primary Display**: `YouTube Sans` (proprietary, released 2017 — rounded geometric sans, close to Nunito / Rubik in feel)
68
+ - **Primary Body**: `Roboto` (Google's signature sans — used for video titles, metadata, body copy)
69
+ - **Fallback Stack**: `-apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Roboto', 'Segoe UI', Helvetica, Arial, sans-serif`
70
+ - **CJK / Non-Latin**: Platform-native — PingFang SC, Hiragino Sans, Apple SD Gothic Neo, Noto Sans extended
71
+ - YouTube Sans is used for the wordmark, the large "Shorts" / "Live" labels, and display moments; Roboto handles everything else
72
+
73
+ ### Hierarchy
74
+
75
+ | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
76
+ |------|------|------|--------|-------------|----------------|-------|
77
+ | Screen Title | YouTube Sans | 20pt | 700 | 1.2 | -0.1pt | "Home", "Subscriptions" top nav |
78
+ | Video Detail Title | Roboto | 18pt | 600 | 1.3 | -0.1pt | Below the full-player on the video detail page |
79
+ | Video Title (Feed) | Roboto | 16pt | 500 | 1.3 | 0pt | Video card title — 2-line clamp — the most common type moment |
80
+ | Channel Name | Roboto | 14pt | 500 | 1.3 | 0pt | Below video title, next to channel avatar |
81
+ | Metadata | Roboto | 13pt | 400 | 1.3 | 0pt | "1.2M views · 3 days ago" |
82
+ | Comment Text | Roboto | 14pt | 400 | 1.4 | 0pt | Comment body on video detail |
83
+ | Comment Author | Roboto | 13pt | 500 | 1.3 | 0pt | Username + "• 2 hours ago" |
84
+ | Body | Roboto | 14pt | 400 | 1.45 | 0pt | Description, About sections |
85
+ | Button (Primary — Subscribe) | Roboto | 14pt | 500 | 1.0 | 0pt | Red Subscribe / gray Subscribed pill |
86
+ | Button (Secondary) | Roboto | 14pt | 500 | 1.0 | 0pt | Share, Download, Join, etc. |
87
+ | Chip | Roboto | 14pt | 400 | 1.0 | 0pt | Filter chips on Home ("All", "Music", "Gaming") |
88
+ | Tab Label | Roboto | 10pt | 500 | 1.0 | 0.1pt | Bottom tab labels |
89
+ | Duration Tag | Roboto | 11pt | 500 | 1.0 | 0pt | "12:34" in bottom-right of thumbnail |
90
+ | Timestamp | Roboto | 12pt | 400 | 1.0 | 0pt | "•1:23 / 4:56" on player scrubber |
91
+ | Like Count | Roboto | 13pt | 500 | 1.0 | 0pt | "1.2K" under the like icon |
92
+ | Shorts Overlay Caption | YouTube Sans | 15pt | 500 | 1.35 | 0pt | Caption on Shorts, shadow-backed |
93
+
94
+ ### Principles
95
+ - **Weight concentration at 400 / 500 / 700**: Regular for body, medium for titles and buttons, bold for display
96
+ - **No thin, light, or black weights**: The fonts ship with them but the product does not use them
97
+ - **Two font families**: YouTube Sans for display, Roboto for body — keep them in their lanes
98
+ - **Video titles at 16pt medium**: This is the most common type moment; its weight 500 gives visual weight without being bold
99
+ - **View-count metadata compresses**: "1.2M views", "234K views", "1,234 views" — abbreviate above 10K
100
+ - **Dynamic Type supported**: Titles, descriptions, and comments scale with user preference; tab labels and duration tags stay fixed
101
+ - **Shorts captions need shadow**: Any text over Shorts video gets a subtle `rgba(0,0,0,0.5)` drop shadow for legibility
102
+
103
+ ## 4. Component Stylings
104
+
105
+ ### Buttons
106
+
107
+ **Subscribe Button (The Iconic Red → Gray Morph)**
108
+ - Unsubscribed state:
109
+ - Shape: Rounded rectangle with 18pt corner radius (NOT full pill — YouTube's signature is the rounded rect)
110
+ - Background: `#FF0000`
111
+ - Text: `#FFFFFF`, Roboto 14pt weight 500 ("Subscribe")
112
+ - Padding: 8pt vertical, 16pt horizontal
113
+ - Height: 36pt
114
+ - Subscribed state:
115
+ - Background: `#F2F2F2` light / `#272727` dark
116
+ - Text: `#0F0F0F` light / `#FFFFFF` dark ("Subscribed")
117
+ - Often paired with a trailing bell icon (notification toggle) — 16pt SF Symbol bell
118
+ - Pressed: opacity 0.85, scale 0.98, light haptic on state change
119
+ - Transition: 200ms spring morph between red and gray
120
+
121
+ **Primary Pill (Sign in / Continue)**
122
+ - Used on sign-in flows, creator tools
123
+ - Background: `#0F0F0F` (dark text button in light mode) or `#3EA6FF` (blue info button)
124
+ - Padding: 10pt vertical, 24pt horizontal
125
+ - Corner radius: 18pt (matches Subscribe)
126
+ - Text: `#FFFFFF` 14pt weight 500
127
+
128
+ **Action Button Row (Like / Dislike / Share / Download / Save / Remix)**
129
+ - A horizontal pill-group below the video title on the video detail page
130
+ - Each button: 36pt tall capsule with light gray background (`#F2F2F2` light / `#272727` dark)
131
+ - Leading 20pt SF Symbol glyph + trailing count label (13pt weight 500)
132
+ - Corner radius: 18pt, padding 8pt vertical / 12pt horizontal
133
+ - Gap between pills: 8pt
134
+ - Like: thumbs-up SF Symbol with count ("1.2K"); tap toggles fill and turns `#0F0F0F` solid; no color change (YouTube removed the blue-highlight treatment)
135
+ - Dislike: thumbs-down SF Symbol; count is hidden (per 2021 product decision); only the user sees their own dislikes
136
+ - Pressed: scale 0.97, light haptic
137
+
138
+ **Icon Button (Player Controls — Play / Pause / Skip)**
139
+ - Glyph size: 32pt (main play/pause), 20pt (skip forward/back, captions, fullscreen)
140
+ - Color: `#FFFFFF` over video — always white since the player is on a dark canvas
141
+ - Hit area: 44pt
142
+ - Pressed: scale 0.9, soft haptic
143
+
144
+ **Text Button ("Show more", "Sort by")**
145
+ - Font: Roboto 14pt weight 500
146
+ - Color: `#0F0F0F` light / `#FFFFFF` dark
147
+ - No underline, no background
148
+
149
+ ### Cards & Containers
150
+
151
+ **Video Card (Feed) — The Atomic Unit**
152
+ - Width: full screen width
153
+ - Structure (top to bottom):
154
+ 1. **16:9 thumbnail** — full-width, image fills with no letterbox, no corner rounding (0pt, hard edges) on the feed card itself (some experiments use 12pt; the signature is hard edge)
155
+ 2. **Duration tag** — positioned absolute bottom-right of thumbnail, 6pt from corners; background `rgba(0,0,0,0.75)`, text `#FFFFFF` 11pt weight 500, 4pt corner radius, 4pt vertical / 6pt horizontal padding
156
+ 3. **LIVE tag** (if live) — top-left of thumbnail; background `#FF0000`, text "LIVE" white 11pt weight 700, same 4pt radius
157
+ 4. Metadata row below thumbnail: 12pt top padding, 16pt horizontal padding
158
+ - Left: 28pt circular channel avatar
159
+ - Right stack:
160
+ - Video title: Roboto 16pt weight 500, 2-line clamp with ellipsis, `#0F0F0F` light / `#FFFFFF` dark
161
+ - Channel name + metadata on one line: Roboto 13pt weight 400 `#606060` light / `#AAAAAA` dark — format "Channel Name · 1.2M views · 3 days ago"
162
+ - Trailing: 24pt `ellipsis` overflow icon, 44pt hit
163
+ 5. Bottom padding: 16pt (gap before next card)
164
+ - Background: transparent (canvas shows through)
165
+ - No corner radius on the card itself — cards are flush to screen edges; the thumbnail's hard edges are the defining aesthetic
166
+
167
+ **Shorts Card (Vertical Video)**
168
+ - Full-viewport 9:16 video (width × height of screen)
169
+ - Overlays (over the video):
170
+ - Right-rail action stack, 12pt from right, centered vertically 50–90%
171
+ - Creator avatar (44pt circle, 2pt white border) with `+` Subscribe badge
172
+ - Like (thumbs-up) 32pt white + count below (13pt weight 500 white with shadow)
173
+ - Dislike (thumbs-down) 32pt white + count hidden
174
+ - Comment bubble 32pt white + count
175
+ - Share arrow 32pt white
176
+ - Remix icon (music note + play) 32pt
177
+ - Audio disc — 44pt rotating circle showing the audio source cover
178
+ - Bottom-left info: 16pt from left, bottom-align above tab bar
179
+ - `@channel` 15pt weight 500 white
180
+ - Caption YouTube Sans 15pt weight 500 white, 2-line clamp, shadow `rgba(0,0,0,0.5)` 0 1px 3px
181
+ - Audio marquee — music note + "Original audio" or song title, 13pt weight 400 white
182
+ - Progress scrubber at bottom — 2pt tall, track `rgba(255,255,255,0.3)`, fill `#FFFFFF` (not red on Shorts — kept white for minimalism)
183
+
184
+ **Video Detail (Full Player + Info)**
185
+ - Top: 16:9 player, full width — black letterbox if video is not 16:9
186
+ - Below player:
187
+ - Title: Roboto 18pt weight 600, can be 2–3 lines, 16pt horizontal / 12pt top padding
188
+ - View count + upload date row: 13pt weight 400 secondary
189
+ - Channel row: 40pt circle avatar + channel name (14pt weight 500) + subscriber count (13pt weight 400 secondary) + **Subscribe pill** trailing right
190
+ - Action button row: horizontal scroll of pills (Like, Dislike, Share, Remix, Download, Save, Report)
191
+ - Description card: 16pt padding, collapsible with "Show more" — contains description, hashtags, chapters, playlist links
192
+ - Comments preview: tap opens comment sheet
193
+ - Up-next recommendations — vertical list of related video cards
194
+
195
+ **Mini-Player**
196
+ - Sits at the bottom of the screen, above the tab bar, when the user swipes down from a full player
197
+ - Height: 72pt
198
+ - Full width, background `#FFFFFF` light / `#1F1F1F` dark
199
+ - Left: 72pt-tall 16:9 thumbnail (128pt wide approx)
200
+ - Center: video title 14pt weight 500 (1 line), channel name 12pt weight 400 (1 line)
201
+ - Right: Play/pause 20pt SF Symbol + close X 20pt
202
+ - Drag up: expands back to full player with shared-element animation
203
+ - Drag down past 40pt from bottom: dismisses
204
+
205
+ **Comment Row**
206
+ - 32pt circular avatar leading
207
+ - Author + "• 2 hours ago" header row (13pt weight 500 + secondary)
208
+ - Comment body (14pt weight 400) with inline link styling
209
+ - Action row: thumbs-up + count, thumbs-down, reply button, heart-from-creator badge if applicable (20pt)
210
+ - If the creator hearted the comment: a small red heart with their avatar appears below the comment
211
+ - Nested replies: indented 40pt, hidden behind a "View replies" button
212
+
213
+ **Filter Chip Row (Home)**
214
+ - Horizontal scroll of chips at the top of Home
215
+ - Each chip: 34pt tall pill
216
+ - Default: background `#F2F2F2` light / `#272727` dark, text `#0F0F0F` / `#FFFFFF`
217
+ - Active: background `#0F0F0F` light / `#FFFFFF` dark, text white / black (full color inversion for the selected chip — YouTube's signature)
218
+ - Padding: 8pt vertical, 12pt horizontal
219
+ - Corner radius: 500pt (full pill)
220
+
221
+ ### Navigation
222
+
223
+ **Bottom Tab Bar**
224
+ - Height: 56pt + safe area
225
+ - Background: `#FFFFFF` light / `#0F0F0F` dark with 1pt top hairline `#E5E5E5` / `#303030`
226
+ - 5 tabs: **Home** (house), **Shorts** (short play icon — unique custom glyph), **Create** (centered `+`), **Subscriptions** (subscription-box icon), **You** (user circle or avatar)
227
+ - Icon size: 24pt glyph, 44pt hit area
228
+ - Active: `#0F0F0F` light / `#FFFFFF` dark (filled variant)
229
+ - Inactive: `#606060` light / `#AAAAAA` dark (outlined variant)
230
+ - Labels: Roboto 10pt weight 500, shown always
231
+ - Create tab: center button is slightly different — on some variants it's a `+` inside a circle outline; when tapped, it opens a modal sheet ("Create a Short", "Upload video", "Go live")
232
+ - Unread badge: 8pt `#FF0000` dot at the top-right of the tab icon (shows on Subscriptions and You)
233
+
234
+ **Top App Bar (Home)**
235
+ - Height: 48pt + safe area
236
+ - Background: matches canvas
237
+ - Leading: YouTube logomark (red play-button in a rounded square + "YouTube" wordmark in YouTube Sans) 24pt tall
238
+ - Trailing icons (from right): Cast (TV + wave), Notifications (bell), Search (magnifying glass), Profile avatar (28pt circle) — all 24pt, 16pt gap
239
+ - On scroll down: bar compresses / hides with subtle fade
240
+ - Filter chip row sits below the app bar — sticky to top when scrolling
241
+
242
+ **Top Nav (Video Detail / Settings)**
243
+ - Height: 44pt + safe area
244
+ - Back chevron 24pt leading, title 17pt weight 500 center, trailing overflow 24pt
245
+ - Background matches canvas
246
+
247
+ ### Input Fields
248
+
249
+ **Search Bar (tapped from Home)**
250
+ - After tapping the search icon on Home, a full-screen search view takes over
251
+ - The top becomes an input field: 44pt tall, 500pt corner radius on the pill side on newer versions (rounded rect 4pt on classic)
252
+ - Leading back chevron 24pt; input field takes the full remaining width
253
+ - Placeholder: "Search YouTube" 16pt weight 400 `#606060` light / `#AAAAAA` dark
254
+ - Trailing: microphone (voice search) + camera (visual search) 24pt icons
255
+ - Background: `#F2F2F2` light / `#272727` dark
256
+
257
+ **Comment Compose**
258
+ - Pinned above the keyboard when comments sheet is open
259
+ - Background: `#FFFFFF` light / `#0F0F0F` dark with 1pt top border
260
+ - Height: 44pt collapsed, expands with content
261
+ - Leading: user avatar 32pt circle
262
+ - Center: input "Add a comment..." 14pt weight 400 tertiary
263
+ - Trailing: send arrow (grayed until non-empty, then `#3EA6FF`)
264
+
265
+ ### Distinctive Components
266
+
267
+ **The Duration Tag**
268
+ - Positioned absolute bottom-right on every thumbnail
269
+ - Background `rgba(0,0,0,0.75)` (an opaque dark chip that reads as "official" YouTube style)
270
+ - Text `#FFFFFF` 11pt weight 500, 4pt radius, 4pt vertical / 6pt horizontal padding
271
+ - Format: "M:SS" for under an hour, "H:MM:SS" for longer
272
+ - If a Short: the tag is replaced with a small Shorts glyph or is hidden (Shorts thumbnails are 9:16 and handled differently)
273
+
274
+ **The Live Indicator**
275
+ - Top-left on thumbnails: red pill "LIVE" + small white dot pulsing
276
+ - On the video detail page, a rotating live viewer count sits below the channel name
277
+ - Red `#FF0000` chip, white text, 11pt weight 700
278
+
279
+ **The LIVE Pulse**
280
+ - Subtle 2-second opacity pulse on the LIVE dot (opacity 1 → 0.6 → 1)
281
+ - Indicates active real-time stream
282
+
283
+ **Subscribe Button Morph**
284
+ - Red "Subscribe" pill → gray "Subscribed" pill in 200ms
285
+ - Bell icon fades in trailing after subscription
286
+ - Success haptic fires on the red-to-gray transition
287
+
288
+ **Mini-Player Drag-Down**
289
+ - Full player + info can be swiped down with a two-finger drag to collapse into the mini-player
290
+ - The mini-player persists while the user browses other content — this is YouTube's most distinctive navigation pattern
291
+ - Drag mini-player down past threshold: dismisses (video stops)
292
+
293
+ **Chapters**
294
+ - Longer videos show chapter markers on the scrubber — hairline vertical notches on the 1pt track
295
+ - Tap chapter: jumps to that timestamp; current chapter title sits above the scrubber
296
+
297
+ **Heart-from-Creator**
298
+ - When a video creator hearts a comment, a small red heart icon overlays the comment, showing the creator's avatar inside
299
+ - 20pt heart, creator's 16pt circular avatar offset bottom-right
300
+
301
+ **Playback Speed Menu**
302
+ - A modal sheet from the player's overflow menu
303
+ - Options: 0.25x, 0.5x, 0.75x, Normal (1x), 1.25x, 1.5x, 1.75x, 2x
304
+ - Selected option has a checkmark and is `#3EA6FF` or bold
305
+
306
+ ## 5. Layout Principles
307
+
308
+ ### Spacing System
309
+ - Base unit: 4pt
310
+ - Scale: 4, 8, 12, 16, 20, 24, 32, 48, 56
311
+ - Video card vertical rhythm: 0pt between thumbnail and metadata, 16pt bottom padding between cards
312
+ - Content margin: 0pt on thumbnails (full-width), 16pt on metadata text
313
+ - Comment row: 12pt vertical padding, 16pt leading
314
+
315
+ ### Grid & Container
316
+ - Feed: single-column full-width on iPhone (cards stack vertically)
317
+ - iPad portrait: 2-column grid with 16pt gap
318
+ - iPad landscape: 3-column grid
319
+ - Shorts: always single-column, 9:16 full-viewport
320
+ - Filter chip row: horizontal scroll, no wrap
321
+
322
+ ### Whitespace Philosophy
323
+ - **No outer padding on thumbnails**: Thumbnails bleed edge-to-edge for maximum visual weight
324
+ - **Generous between-card gaps**: 16pt vertical rhythm gives feed a breathable flow
325
+ - **Tight metadata density**: Channel row + title + metadata pack 3 pieces of info in ~56pt vertical space below the thumbnail
326
+ - **Shorts are immersive**: Zero chrome; the video IS the UI
327
+
328
+ ### Border Radius Scale
329
+ - Square (0pt): Feed thumbnails — YouTube's signature hard edge
330
+ - Soft (4pt): Duration tag, LIVE pill, some legacy cards
331
+ - Standard (8pt): Some modal content, image previews
332
+ - Pronounced (12pt): Bottom sheet top corners
333
+ - Rounded Button (18pt): Subscribe, pill buttons in the action row, filter chips
334
+ - Full Pill (500pt): Search bar (modern), notification pills
335
+ - Circle (50%): Channel avatars, audio discs, close buttons
336
+
337
+ ## 6. Depth & Elevation
338
+
339
+ | Level | Treatment | Use |
340
+ |-------|-----------|-----|
341
+ | Flat (Level 0) | No shadow | Feed cards, most UI |
342
+ | Card Lift | `rgba(0,0,0,0.08) 0 2px 8px` | Mini-player, elevated sheets |
343
+ | Player Chrome | `rgba(0,0,0,0.3) 0 0 40px` inset-ish gradient | Over video, darkens edges for control visibility |
344
+ | Sheet | `rgba(0,0,0,0.2) 0 -8px 24px` | Bottom sheets (share, comments, chapters) |
345
+ | Modal Dim | `rgba(0,0,0,0.6)` + no blur | Modal dimming behind sheets |
346
+ | Tab Bar Border | 1pt hairline top border `#E5E5E5` / `#303030` | Instead of shadow, YouTube uses a hairline |
347
+
348
+ **Shadow Philosophy**: YouTube is a mostly flat app. The only components that carry noticeable shadow are the mini-player (which needs to read as floating above content) and bottom sheets. Feed cards have no shadow — they're laid out flat on the canvas, separated only by whitespace. On Shorts, text overlays carry text shadow for legibility but UI buttons do not.
349
+
350
+ ### Motion
351
+ - **Subscribe morph**: 200ms spring (damping 0.8) between red and gray states; success haptic on transition
352
+ - **Mini-player expand**: Shared-element transition on the 16:9 thumbnail, 0.35s spring, damping 0.8
353
+ - **Video card tap**: Light haptic; dim the card 0.95 opacity while loading
354
+ - **Like tap**: Thumbs-up fills, 1.0 → 1.15 → 1.0 bounce over 300ms, light haptic
355
+ - **Scrubber drag**: Haptic tick every 10% of progress; thumb scales 1.0 → 1.3 during drag
356
+ - **Shorts swipe**: 60fps vertical paging, 300ms spring (damping 0.85)
357
+ - **Double-tap seek**: Left side -10s, right side +10s, with a semi-transparent arc ripple overlay and "−10" / "+10" label
358
+ - **Comment heart-from-creator**: Appear with spring bounce + heart scale 0 → 1.2 → 1.0
359
+
360
+ ## 7. Do's and Don'ts
361
+
362
+ ### Do
363
+ - Use `#FFFFFF` as light canvas and `#0F0F0F` as dark — YouTube's signature "near-black," never pure black
364
+ - Reserve YouTube Red (`#FF0000`) for the Subscribe button, LIVE indicator, and logomark — nothing else
365
+ - Render video thumbnails at full screen width with NO corner radius — hard edges are the signature
366
+ - Place the duration tag in the bottom-right of every thumbnail, dark chip, white text
367
+ - Pair YouTube Sans (display) with Roboto (body) — keep the two in their lanes
368
+ - Use the gray "Subscribed" state after a user subscribes — never leave the red pill active
369
+ - Hide the dislike count (reflects 2021+ product decision)
370
+ - Use 18pt corner radius on Subscribe and action pills — YouTube's rounded-rect button shape
371
+ - Support full color inversion on selected filter chips (black bg / white text when active)
372
+ - Animate the mini-player with a shared-element transition from the full player
373
+ - Use heart-from-creator overlay for creator-highlighted comments — 20pt red heart with creator avatar
374
+ - Use haptics: light on Subscribe, light on like, success on share confirm
375
+
376
+ ### Don't
377
+ - Don't use pure black `#000000` for dark canvas — `#0F0F0F` is the brand token (slightly warmer)
378
+ - Don't round thumbnail corners on the feed — hard edges are load-bearing aesthetic
379
+ - Don't use red on non-Subscribe actions — red is a brand element, not an action accent
380
+ - Don't display dislike counts publicly (post-2021 product decision)
381
+ - Don't use a full-pill corner on Subscribe — it's 18pt, not 500pt
382
+ - Don't use thin or light font weights — 400 / 500 / 700 only
383
+ - Don't forget the shadow on Shorts captions — text over video needs `rgba(0,0,0,0.5)` drop shadow
384
+ - Don't omit the duration tag — every thumbnail must show runtime
385
+ - Don't hide the mini-player when the user navigates away during playback — it's load-bearing UX
386
+ - Don't animate the Subscribe morph with a slide — it's an in-place color cross-fade
387
+
388
+ ## 8. Responsive Behavior
389
+
390
+ ### Device Sizes
391
+ | Device | Width | Key Changes |
392
+ |--------|-------|-------------|
393
+ | iPhone SE (3rd gen) | 375pt | Title clamp tighter, chip row shows 4 instead of 5 |
394
+ | iPhone 13/14/15 | 390pt | Standard card layout — 16:9 thumbnail ~219pt tall |
395
+ | iPhone 15/16 Pro | 393pt | Dynamic Island accommodated in top nav |
396
+ | iPhone 15/16 Pro Max | 430pt | Thumbnail ~242pt tall, more metadata fits inline |
397
+ | iPad | 768pt+ | 2–3 column grid, mini-player pins to bottom-right corner |
398
+
399
+ ### Dynamic Type
400
+ - Video titles, descriptions, comments: full scale
401
+ - Duration tag: **fixed** at 11pt (never scales — layout-sensitive)
402
+ - Subscribe button text: fixed at 14pt
403
+ - Tab labels: fixed at 10pt
404
+ - Shorts caption: fixed size (tight layout)
405
+ - Metadata row: scales to ~20% larger maximum to avoid wrapping
406
+
407
+ ### Orientation
408
+ - Feed / Subscriptions / You: **portrait-locked**
409
+ - Video Detail: **rotates to landscape** — video goes fullscreen, controls overlay
410
+ - Shorts: **portrait-locked**
411
+ - Comments sheet: portrait-locked (would be weird in landscape)
412
+
413
+ ### Touch Targets
414
+ - Subscribe: 36pt pill (hit area expanded to 44pt vertically)
415
+ - Video card: full card tappable (thumbnail + metadata as one touch target)
416
+ - Overflow icon: 44pt hit
417
+ - Player controls: 44pt each
418
+ - Shorts action icons: 32pt glyph with 48pt hit area
419
+ - Tab bar: 44pt hit
420
+
421
+ ### Safe Area Handling
422
+ - Top: status bar / Dynamic Island respected by top app bar
423
+ - Bottom: tab bar respects home indicator; mini-player sits above both
424
+ - Video player (fullscreen landscape): ignores safe area for video content, respects for controls
425
+ - Shorts: respects safe area only for overlays; video extends edge-to-edge
426
+
427
+ ## 9. Agent Prompt Guide
428
+
429
+ ### Quick Color Reference
430
+ - Light canvas: `#FFFFFF`
431
+ - Dark canvas: `#0F0F0F`
432
+ - Surface 1 (light): `#F9F9F9`
433
+ - Surface 1 (dark): `#1F1F1F`
434
+ - Surface 2 (light): `#F2F2F2`
435
+ - Surface 2 (dark): `#272727`
436
+ - Divider (light): `#E5E5E5`
437
+ - Divider (dark): `#303030`
438
+ - Text primary (light): `#0F0F0F`
439
+ - Text primary (dark): `#FFFFFF`
440
+ - Text secondary (light): `#606060`
441
+ - Text secondary (dark): `#AAAAAA`
442
+ - YouTube Red: `#FF0000`
443
+ - Red pressed: `#CC0000`
444
+ - Info blue: `#3EA6FF`
445
+
446
+ ### Example Component Prompts
447
+ - "Create a SwiftUI YouTube Subscribe button: 36pt tall rounded rectangle with 18pt corner radius, background `#FF0000`, text 'Subscribe' in Roboto 14pt weight 500 white. 8pt vertical / 16pt horizontal padding. On subscribe: morph background to `#F2F2F2` (light) or `#272727` (dark), text becomes 'Subscribed' in text-primary color, 200ms spring, fire light haptic. Add a trailing bell SF Symbol 16pt when subscribed."
448
+ - "Build a YouTube video card: full-width 16:9 thumbnail with NO corner radius and hard edges. Bottom-right of thumbnail: 'M:SS' duration tag on `rgba(0,0,0,0.75)` background, 4pt radius, white text Roboto 11pt weight 500. Below thumbnail: 12pt top padding, 16pt horizontal. 28pt channel avatar leading, then stack of title (Roboto 16pt weight 500, 2-line clamp) and metadata line ('Channel · 1.2M views · 3 days ago' in 13pt weight 400 `#606060`). Trailing: 24pt ellipsis icon."
449
+ - "Design the YouTube Shorts player: full-viewport 9:16 vertical video, overlays on top. Right rail (12pt from right): stacked creator avatar with `+` subscribe badge, thumbs-up 32pt white + count, thumbs-down 32pt (count hidden), comment 32pt + count, share 32pt, remix 32pt, and a 44pt rotating audio disc. Bottom-left (16pt from left): `@channel` 15pt weight 500 white, caption YouTube Sans 15pt weight 500 white with `rgba(0,0,0,0.5)` drop shadow, music marquee 13pt weight 400. Bottom progress bar: 2pt tall, track `rgba(255,255,255,0.3)`, fill white."
450
+ - "Build the YouTube mini-player: 72pt tall horizontal bar above the tab bar. 128×72pt 16:9 thumbnail leading, center column with video title 14pt weight 500 (1 line) and channel name 12pt weight 400 (1 line), trailing play/pause 20pt SF Symbol and close X 20pt. Background `#FFFFFF` light / `#1F1F1F` dark. Drag up: animate shared-element expansion into full player. Drag down 40pt+: dismiss."
451
+ - "Create the YouTube action pill row: horizontal scroll below video title on detail page. Each pill: 36pt tall capsule, background `#F2F2F2` light / `#272727` dark, 18pt radius, leading 20pt icon + trailing count label 13pt weight 500. Pills in order: Like (thumbs-up + '1.2K'), Dislike (thumbs-down, no count), Share, Remix, Download, Save. 8pt gap between pills."
452
+ - "Build the YouTube filter chip row on Home: horizontal scroll of 34pt-tall pills. Default chip: background `#F2F2F2` light / `#272727` dark, text `#0F0F0F` / `#FFFFFF` 14pt weight 400, 8pt vertical / 12pt horizontal padding, 500pt corner radius (full pill). Active chip: full color inversion — background becomes `#0F0F0F` / `#FFFFFF`, text becomes white / black. Tap: crossfade 200ms with selection haptic."
453
+
454
+ ### Iteration Guide
455
+ 1. Canvas is `#FFFFFF` in light and `#0F0F0F` in dark — never pure black
456
+ 2. YouTube Red `#FF0000` is for the Subscribe button and brand marks (LIVE, logo, unread dots) — not a generic accent
457
+ 3. Thumbnails bleed edge-to-edge with NO corner radius — hard edges are the signature
458
+ 4. Duration tag is non-negotiable — every thumbnail shows its runtime in the bottom-right
459
+ 5. Subscribe button uses 18pt corner radius (rounded rectangle, not full pill)
460
+ 6. Typography: YouTube Sans (display) + Roboto (body), weights 400 / 500 / 700
461
+ 7. After subscribing, the red morphs to gray — 200ms spring with haptic
462
+ 8. Filter chips invert fully when selected (black bg / white text)
463
+ 9. Dislike count is hidden (post-2021 decision)
464
+ 10. Mini-player persists above the tab bar when user navigates during playback — load-bearing UX
465
+ 11. Shorts is portrait-only 9:16 with floating overlays; Subscribe button appears as `+` on the avatar
466
+ 12. Haptics: light on Subscribe / Like, success on share confirm, selection on filter chip